Repository: Lazarus-org/django_logging (language: python)

Issue:
🔨 🎨 Refactor Email Template with Updating HTML Design
## Description 
I plan to refactor the email template used in the `django_logging` package by redesigning the HTML structure with a fresh style. This update aims to improve the appearance and make the template more modern and visually appealing.

## To-do
- Redesign the HTML layout of the email template.
- Implement a new style that enhances readability and aesthetics.
- Test the new email template to ensure proper rendering across different email clients.

## Notes
I will take on the task of designing and implementing this updated email template.



Discussion / hints:

Fix patch:
diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml
new file mode 100644
index 0000000..32723a2
--- /dev/null
+++ b/.github/FUNDING.yml
@@ -0,0 +1,8 @@
+# These are supported funding model platforms
+
+github: django_logging
+patreon:
+open_collective: django_logging
+ko_fi: # Replace with a single Ko-fi username
+tidelift: "pypi/dj-logging"
+custom: # Replace with a single custom sponsorship URL
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index ce66954..738a01c 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -4,15 +4,25 @@ on: [push, pull_request]
 
 jobs:
   test:
-    runs-on: ubuntu-latest
+    name: Python ${{ matrix.python-version }}
+    runs-on: ubuntu-20.04
+
+    strategy:
+      matrix:
+        python-version:
+          - '3.8'
+          - '3.9'
+          - '3.10'
+          - '3.11'
+          - '3.12'
 
     steps:
       - uses: actions/checkout@v4
 
-      - name: Set up Python
+      - name: Set up Python ${{ matrix.python-version }}
         uses: actions/setup-python@v5
         with:
-          python-version: '3.x'
+          python-version: ${{ matrix.python-version }}
 
       - name: Install dependencies
         run: |
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
new file mode 100644
index 0000000..5bbb84c
--- /dev/null
+++ b/.github/workflows/release.yml
@@ -0,0 +1,35 @@
+name: Release
+
+on:
+  push:
+    tags:
+      - 'v*.*.*'
+
+jobs:
+  release:
+    name: Build and Release
+    runs-on: ubuntu-latest
+
+
+    steps:
+      - uses: actions/checkout@v4
+
+      - name: Set up Python
+        uses: actions/setup-python@v5
+        with:
+          python-version: '3.x'
+
+      - name: Install dependencies
+        run: |
+          python -m pip install --upgrade pip
+          pip install poetry
+
+      - name: Build package
+        run: |
+          poetry build
+
+      - name: Publish to PyPI
+        run: |
+          poetry publish --username __token__ --password ${{ secrets.PYPI_TOKEN }}
+        env:
+          PYPI_TOKEN: ${{ secrets.PYPI_TOKEN }}
diff --git a/.pre-commit-config-ci.yaml b/.pre-commit-config-ci.yaml
index f5cc2cc..05b01ee 100644
--- a/.pre-commit-config-ci.yaml
+++ b/.pre-commit-config-ci.yaml
@@ -29,7 +29,7 @@ repos:
       - id: tox-ini-fmt
 
   - repo: https://github.com/asottile/pyupgrade
-    rev: v3.17.0
+    rev: v3.15.2
     hooks:
       - id: pyupgrade
 
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index eab2b06..a0990bb 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -29,7 +29,7 @@ repos:
       - id: tox-ini-fmt
 
   - repo: https://github.com/asottile/pyupgrade
-    rev: v3.17.0
+    rev: v3.15.2
     hooks:
       - id: pyupgrade
 
diff --git a/.readthedocs.yaml b/.readthedocs.yaml
index 9dbd03e..cb1f270 100644
--- a/.readthedocs.yaml
+++ b/.readthedocs.yaml
@@ -9,7 +9,7 @@ version: 2
 build:
   os: ubuntu-22.04
   tools:
-    python: "3.8"
+    python: "3.12"
 
 # Build documentation with Sphinx
 sphinx:
diff --git a/AUTHORS.md b/AUTHORS.md
new file mode 100644
index 0000000..30833c2
--- /dev/null
+++ b/AUTHORS.md
@@ -0,0 +1,10 @@
+## Authors
+
+- **Aryan Niknezhad**
+  - GitHub: [ARYAN-NIKNEZHAD](https://github.com/ARYAN-NIKNEZHAD)
+  - Email: aryan513966@gmail.com
+
+
+- **Mehrshad Mirshekary**
+  - GitHub: [MEHRSHAD-MIRSHEKARY](https://github.com/MEHRSHAD-MIRSHEKARY)
+  - Email: mehrshad_mirshekary@email.com
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 6361e43..6b4855a 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,92 @@
-# Changelog
+## v1.1.0 (2024-09-12)
 
-All notable changes to this project will be documented in this file.
+### 🔧 Chore
+- **chore(pyproject)**: Added new markers to pytest configurations. ([3a1448c](https://github.com/lazarus-org/django_logging/commit/3a1448c))
+  - Updated pytest configuration with new markers for improved testing control.
+
+### 📚 Documentation
+- **docs(Usage)**: Add documentation for `execution_tracker` decorator. ([2713377](https://github.com/lazarus-org/django_logging/commit/2713377))
+  - Added detailed usage instructions for the new `execution_tracker` decorator.
+  - Provided examples and log output descriptions for different configurations.
+
+- **README**: Update documentation for `execution_tracker`. ([9272093](https://github.com/lazarus-org/django_logging/commit/9272093))
+  - Expanded README with detailed explanations of the `execution_tracker` decorator, including argument descriptions and usage examples.
+
+### ✨ Features
+- **feat(decorators)**: Add `execution_tracker` for performance metrics. ([3650c32](https://github.com/lazarus-org/django_logging/commit/3650c32))
+  - Added a decorator that logs execution time, database queries, and query thresholds for performance monitoring.
+  - Includes error handling and warnings when query thresholds are exceeded.
+
+- **feat(validators)**: Add `integer_setting` validator in `config_validators`. ([890b2c1](https://github.com/lazarus-org/django_logging/commit/890b2c1))
+  - Introduced a validator to ensure positive integer settings, improving configuration validation in `execution_tracker`.
+
+### ✅ Tests
+- **tests(decorators)**: Add tests for `execution_tracker` decorator. ([d6d3d8b](https://github.com/lazarus-org/django_logging/commit/d6d3d8b))
+  - Comprehensive test coverage for the `execution_tracker` decorator, including performance, query logging, and error handling scenarios.
+
+### ⚡ Refactor
+- **docs**: Improve RST docs readability and highlights. ([6b6c12a](https://github.com/lazarus-org/django_logging/commit/6b6c12a))
+  - Enhanced readability and formatting in reStructuredText documentation files for better user guidance.
+
+### 🔀 Merged
+- **Merge PR #83**: Merged `chore/pytest` into main. ([e3b3beb](https://github.com/lazarus-org/django_logging/commit/e3b3beb))
+- **Merge PR #82**: Merged `update/docs` into main. ([8647a37](https://github.com/lazarus-org/django_logging/8647a37))
+- **Merge PR #81**: Merged `feat/execution-tracker` into main. ([76b5621](https://github.com/lazarus-org/django_logging/commit/76b5621))
+
+## v1.0.4 (2024-09-05)
+
+### 🚀 CI
+- **ci**: Added automated build and release process. ([1a3bb2b](https://github.com/lazarus-org/django_logging/commit/1a3bb2b))
+  - Added a GitHub Actions workflow for automated build and release.
+  - Workflow triggers on new tags matching the `v*.*.*` pattern.
+  - Includes steps to set up Python, install dependencies, and build the package using Poetry.
+  - Automatically publishes the built package to PyPI using stored PyPI token secrets.
+  - Ensures the release job only runs after the 'test' job passes successfully.
+
+### ⚡️🔨📚 Refactor
+- **docs**: Updated badges in README MarkDown file. ([c82f452](https://github.com/lazarus-org/django_logging/commit/c82f452))
+  - Added pylint badge to display code quality rating in `README.md`.
+  - Updated pre-commit badge color.
+
+- **docs**: Updated badges and references in RST docs. ([c82f452](https://github.com/lazarus-org/django_logging/commit/c82f452))
+  - Added pylint badge to the documentation.
+  - Updated the settings section in various `.rst` files to reflect recent changes.
+  - Enhanced documentation for better readability and accuracy.
+
+## v1.0.3 (2024-09-05)
+### ✨ Added
+- **chore(pyproject)**: Added `python-semantic-release` configuration to automate versioning and releases. (`945c648`)
+- **docs**: Added pre-commit badge to display status in documentation. (`f40a9e5`, `7fca7b7`)
+
+### 🛠️ Changed
+- **docs**: Updated badge URLs and paths in documentation for correct references. (`f40a9e5`, `7fca7b7`)
+
+### 🐛 Fixed
+- **pyproject**: Updated dependencies and development requirements in the `pyproject.toml` configuration. (`945c648`)
+
+### 🔀 Merged
+- **Merge PR #77**: Merged the `chore/pyproject-config` branch into the main branch. (`c2ebad3`)
+
+## v1.0.2 (2024-09-02)
+**Added**
+- tag_format in commitizen configuration in pyproject.toml
+- changelog path in poetry urls
+- Add FUNDING.yml file
+
+**Refactored**
+- Renamed setup_django into settings_configuration in tests dir
+- Moved settings_configuration from fixtures into tests root dir
+
+
+## v1.0.1 (2024-09-02)
+**Refactored**
+- Updated badges path in README.md and installation guide
+- Updated badges path in index.rst and installation guide
+- Updated headers in RestructuredText documentations
+
+**Fixed**
+- Removed repository from tool.poetry
+- Fixed read the docs path in poetry urls
+
+## v1.0.0 (2024-09-02)
+- initial Release
diff --git a/LICENCE b/LICENCE
index 5fb0008..f587f3e 100644
--- a/LICENCE
+++ b/LICENCE
@@ -1,6 +1,6 @@
 MIT License
 
-Copyright (c) 2024 django_logging
+Copyright (c) 2024 Lazarus
 
 Permission is hereby granted, free of charge, to any person obtaining a copy
 of this software and associated documentation files (the "Software"), to deal
diff --git a/README.md b/README.md
index 68bd348..35a5b3b 100644
--- a/README.md
+++ b/README.md
@@ -1,15 +1,19 @@
 # Django Logging
 
-The [`django_logging`](https://github.com/ARYAN-NIKNEZHAD/django_logging) is a Django package designed to extend and enhance Python’s built-in logging capabilities. By providing customizable configurations and advanced features, it offers developers a comprehensive logging solution tailored specifically for Django applications.
-
-![License](https://img.shields.io/github/license/ARYAN-NIKNEZHAD/django_logging)
-![PyPI release](https://img.shields.io/pypi/v/django_logging)
-![Supported Python versions](https://img.shields.io/pypi/pyversions/django_logging)
-![Supported Django versions](https://img.shields.io/pypi/djversions/django_logging)
-![Documentation](https://img.shields.io/readthedocs/django_logging)
-![Last Commit](https://img.shields.io/github/)
-![Languages](https://img.shields.io/github/)
-
+The [`django_logging`](https://github.com/lazarus-org/django_logging) is a Django package designed to extend and enhance Python’s built-in logging capabilities. By providing customizable configurations and advanced features, it offers developers a comprehensive logging solution tailored specifically for Django applications.
+
+![License](https://img.shields.io/github/license/lazarus-org/django_logging)
+![PyPI release](https://img.shields.io/pypi/v/dj-logging)
+![Documentation](https://img.shields.io/readthedocs/django-logging)
+![CI Workflow](https://github.com/lazarus-org/django_logging/actions/workflows/ci.yml/badge.svg)
+![Supported Python versions](https://img.shields.io/pypi/pyversions/dj-logging)
+[![pre-commit](https://img.shields.io/badge/pre--commit-enabled-brightgreen?logo=pre-commit&logoColor=yellow)](https://github.com/pre-commit/pre-commit)
+![Supported Django versions](https://img.shields.io/pypi/djversions/dj-logging)
+![Last Commit](https://img.shields.io/github/last-commit/lazarus-org/django_logging)
+![Languages](https://img.shields.io/github/languages/top/lazarus-org/django_logging)
+![Open Issues](https://img.shields.io/github/issues/lazarus-org/django_logging)
+[![codecov](https://codecov.io/gh/ARYAN-NIKNEZHAD/django_logging/branch/main/graph/badge.svg)](https://codecov.io/gh/ARYAN-NIKNEZHAD/django_logging)
+[![pylint](https://img.shields.io/badge/pylint-10/10-brightgreen?logo=python&logoColor=blue)](https://www.pylint.org/)
 
 
 ## Project Detail
@@ -33,13 +37,13 @@ The documentation is organized into the following sections:
 
 Getting started with `django_logging` is simple. Follow these steps to get up and running quickly:
 
-1. **Installation**
+1. **Install the Package**
 
-   Install `django_logging` via pip:
+first, Install `django_logging` via pip:
 
-   ```shell
-   $ pip install django_logging
-   ```
+```shell
+$ pip install dj-logging
+```
 
 2. **Add to Installed Apps**
 
@@ -53,19 +57,15 @@ INSTALLED_APPS = [
 ]
 ```
 
-3. **Default Configuration**
-
-By default, `django_logging` is configured to use its built-in settings. You do not need to configure anything manually unless you want to customize the behavior. The default settings will automatically handle logging with predefined formats and options.
 
+3. **Run Your Server**
 
-4. **Verify Installation**
-
-To ensure everything is set up correctly, run your Django development server:
+Start your Django Development server to verify the installation:
 ```shell
 python manage.py runserver
 ```
 
-By default, `django_logging` will log an initialization message to the console that looks like this:
+when the server starts, you'll see an initialization message like this in your *console*:
 ```shell
 INFO | 'datetime' | django_logging | Logging initialized with the following configurations:
 Log File levels: ['DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL'].
@@ -75,15 +75,23 @@ Colorize console: True.
 Log date format: %Y-%m-%d %H:%M:%S.
 Email notifier enabled: False.
 ```
+By default, django_logging will log each level to its own file:
+- DEBUG : `logs/debug.log`
+- INFO : `logs/info.log`
+- WARNING : `logs/warning.log`
+- ERROR : `logs/error.log`
+- CRITICAL : `logs/critical.log`
 
+In addition, logs will be displayed in ***colorized*** mode in the `console`, making it easier to distinguish between different log levels.
 
-That's it! `django_logging` is ready to use with default settings. For further customization, refer to the [Settings](#settings) section
+That's it! `django_logging` is ready to use. For further customization, refer to the [Settings](#settings) section
 
 
 ## Usage
 Once `django_logging` is installed and added to your INSTALLED_APPS, you can start using it right away. The package provides several features to customize and enhance logging in your Django project. Below is a guide on how to use the various features provided by `django_logging`.
 
 1. **Basic Logging Usage**
+
 At its core, `django_logging` is built on top of Python’s built-in logging module. This means you can use the standard logging module to log messages across your Django project. Here’s a basic example of logging usage:
 ```python
 import logging
@@ -136,7 +144,7 @@ with config_setup():
 
 # the logging configuration will restore to what it was before, in here outside of with block
 ```
-- Note: `AUTO_INITIALIZATION_ENABLE` must be set to `False` in the settings to use the context manager. If `AUTO_INITIALIZATION_ENABLE` is `True`, attempting to use the context manager will raise a `ValueError` with the message:
+- Note: `AUTO_INITIALIZATION_ENABLE` must be set to `False` in the settings to use the context manager. If it is `True`, attempting to use the context manager will raise a `ValueError` with the message:
 ```
 "You must set 'AUTO_INITIALIZATION_ENABLE' to False in DJANGO_LOGGING in your settings to use the context manager."
 ```
@@ -183,6 +191,45 @@ python manage.py send_logs example@domain.com
 ```
 This command will attach the log directory and send a zip file to the provided email address.
 
+6. **Execution Tracker Decorator**
+
+The `execution_tracker` decorator is used to log the performance metrics of any function. It tracks execution time and the number of database queries for decorated function (if enabled).
+
+Example Usage:
+```python
+from django_logging.decorators import execution_tracker
+
+@execution_tracker(logging_level=logging.INFO, log_queries=True, query_threshold=10, query_exceed_warning=False)
+def some_function():
+    # function code
+    pass
+```
+
+Arguments:
+
+`logging_level` (`int`): The logging level at which performance details will be logged. Defaults to `logging.INFO`.
+
+`log_queries` (`bool`): Whether to log the number of database queries for decorated function(if `DEBUG` is `True` in your settings). If `log_queries=True`, the number of queries will be included in the logs. Defaults to `False`.
+
+`query_threshold` (`int`): If provided, the number of database queries will be checked. If the number of queries exceeded the given threshold, a warning will be logged. Defaults to `None`.
+
+`query_exceed_warning` (`int`): Whether to log a `WARNING` message if number of queries exceeded the threshold. Defaults to `False`.
+
+Example Log Output:
+```shell
+INFO | 'datetime' | execution_tracking | Performance Metrics for Function: 'some_function'
+  Module: some_module
+  File: /path/to/file.py, Line: 123
+  Execution Time: 0 minute(s) and 0.2132 second(s)
+  Database Queries: 15 queries (exceeds threshold of 10)
+
+```
+If `log_queries` is set to `True` but `DEBUG` is `False`, a WARNING will be logged:
+
+```shell
+WARNING | 'datetime' | execution_tracking | DEBUG mode is disabled, so database queries are not tracked. To include number of queries, set `DEBUG` to `True` in your django settings.
+```
+
 ## Settings
 
 By default, `django_logging` uses a built-in configuration that requires no additional setup. However, you can customize the logging settings by adding the `DJANGO_LOGGING` dictionary configuration to your Django `settings` file.
@@ -217,20 +264,34 @@ DJANGO_LOGGING = {
 
 Here's a breakdown of the available configuration options:
 - `AUTO_INITIALIZATION_ENABLE`: Accepts `bool`. Enables automatic initialization of logging configurations. Defaults to `True`.
+
 - `INITIALIZATION_MESSAGE_ENABLE`: Accepts bool. Enables logging of the initialization message. Defaults to `True`.
+
 - `LOG_FILE_LEVELS`: Accepts a list of valid log levels (a list of `str` where each value must be one of the valid levels). Defines the log levels for file logging. Defaults to `['DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL']`.
+
 - `LOG_DIR`: Accepts `str` like `"path/to/logs"` or a path using functions like `os.path.join()`. Specifies the directory where log files will be stored. Defaults to `"logs"`.
+
 - `LOG_FILE_FORMATS`: Accepts log levels as keys and format options as values. The format option can be an `int` chosen from predefined options or a user-defined format `str`. Defines the format for log files. Defaults to `1` for all levels.
   - **Note**: See the [Available Format Options](#available-format-options) below for available formats.
+
 - `LOG_CONSOLE_LEVEL`: Accepts `str` that is a valid log level. Specifies the log level for console output. Defaults to `'DEBUG'`.
+
 - `LOG_CONSOLE_FORMAT`: Accepts the same options as `LOG_FILE_FORMATS`. Defines the format for console output. Defaults to `1`.
+
 - `LOG_CONSOLE_COLORIZE`: Accepts `bool`. Determines whether to colorize console output. Defaults to `True`.
+
 - `LOG_DATE_FORMAT`: Accepts `str` that is a valid datetime format. Specifies the date format for log messages. Defaults to `'%Y-%m-%d %H:%M:%S'`.
+
 - `LOG_EMAIL_NOTIFIER`: Is a dictionary where:
+
   - `ENABLE`: Accepts `bool`. Determines whether the email notifier is enabled. Defaults to `False`.
+
   - `NOTIFY_ERROR`: Accepts `bool`. Determines whether to notify on error logs. Defaults to `False`.
+
   - `NOTIFY_CRITICAL`: Accepts `bool`. Determines whether to notify on critical logs. Defaults to `False`.
+
   - `LOG_FORMAT`: Accepts the same options as other log formats (`int` or `str`). Defines the format for log messages sent via email. Defaults to `1`.
+
   - `USE_TEMPLATE`: Accepts `bool`. Determines whether the email includes an HTML template. Defaults to `True`.
 
 ## Available Format Options
@@ -283,6 +344,6 @@ These settings ensure that the email notifier is correctly configured to send lo
 
 ## Conclusion
 
-Thank you for using `django_logging`. We hope this package enhances your Django application's logging capabilities. For more detailed documentation, customization options, and updates, please refer to the official documentation on [Read the Docs](https://django_logging.readthedocs.io/). If you have any questions or issues, feel free to open an issue on our [GitHub repository](https://github.com/ARYAN-NIKNEZHAD/django_logging).
+Thank you for using `django_logging`. We hope this package enhances your Django application's logging capabilities. For more detailed documentation, customization options, and updates, please refer to the official documentation on [Read the Docs](https://django-logging.readthedocs.io/). If you have any questions or issues, feel free to open an issue on our [GitHub repository](https://github.com/lazarus-org/django_logging).
 
 Happy logging!
diff --git a/django_logging/apps.py b/django_logging/apps.py
index 7640e7f..f46189b 100644
--- a/django_logging/apps.py
+++ b/django_logging/apps.py
@@ -8,6 +8,20 @@ class DjangoLoggingConfig(AppConfig):
     verbose_name = _("Django Logging")
 
     def ready(self) -> None:
+        """This method is called when the Django application is ready.
+
+        The `ready` method is used to perform application-specific
+        startup tasks. In this case, it performs the following actions:
+
+        1. Imports necessary modules for checks, configuration retrieval,
+           and logging setup.
+        2. Retrieves the logging configuration from settings using `get_config`.
+        3. Sets up the logging configuration using the retrieved configs.
+
+        This ensures that the logging configuration is correctly set up
+        when the application starts.
+
+        """
         from django_logging.settings import checks
         from django_logging.utils.get_conf import get_config
         from django_logging.utils.set_conf import set_config
diff --git a/django_logging/constants/ansi_colors.py b/django_logging/constants/ansi_colors.py
index 8ec502d..5355ef8 100644
--- a/django_logging/constants/ansi_colors.py
+++ b/django_logging/constants/ansi_colors.py
@@ -1,31 +1,35 @@
+from dataclasses import dataclass
+
+
+# pylint: disable=too-many-instance-attributes
+@dataclass(frozen=True)
 class AnsiColors:
-    BLACK = "\033[0;30m"
-    RED = "\033[0;31m"
-    RED_BACKGROUND = "\033[1;41m"
-    GREEN = "\033[0;32m"
-    YELLOW = "\033[0;33m"
-    BLUE = "\033[0;34m"
-    MAGENTA = "\033[0;35m"
-    CYAN = "\033[0;36m"
-    GRAY = "\033[0;37m"
-    WHITE = "\033[0;38m"
-    RESET = "\033[0m"
-    BRIGHT_BLACK = "\033[0;90m"
-    BRIGHT_RED = "\033[0;91m"
-    BRIGHT_GREEN = "\033[0;92m"
-    BRIGHT_YELLOW = "\033[0;93m"
-    BRIGHT_BLUE = "\033[0;94m"
-    BRIGHT_MAGENTA = "\033[0;95m"
-    BRIGHT_CYAN = "\033[0;96m"
-    BRIGHT_WHITE = "\033[0;97m"
-    BLACK_BACKGROUND = "\033[40m"
-    RED_BACKGROUND = "\033[41m"
-    GREEN_BACKGROUND = "\033[42m"
-    YELLOW_BACKGROUND = "\033[43m"
-    BLUE_BACKGROUND = "\033[44m"
-    MAGENTA_BACKGROUND = "\033[45m"
-    CYAN_BACKGROUND = "\033[46m"
-    WHITE_BACKGROUND = "\033[47m"
+    BLACK: str = "\033[0;30m"
+    RED: str = "\033[0;31m"
+    GREEN: str = "\033[0;32m"
+    YELLOW: str = "\033[0;33m"
+    BLUE: str = "\033[0;34m"
+    MAGENTA: str = "\033[0;35m"
+    CYAN: str = "\033[0;36m"
+    GRAY: str = "\033[0;37m"
+    WHITE: str = "\033[0;38m"
+    RESET: str = "\033[0m"
+    BRIGHT_BLACK: str = "\033[0;90m"
+    BRIGHT_RED: str = "\033[0;91m"
+    BRIGHT_GREEN: str = "\033[0;92m"
+    BRIGHT_YELLOW: str = "\033[0;93m"
+    BRIGHT_BLUE: str = "\033[0;94m"
+    BRIGHT_MAGENTA: str = "\033[0;95m"
+    BRIGHT_CYAN: str = "\033[0;96m"
+    BRIGHT_WHITE: str = "\033[0;97m"
+    BLACK_BACKGROUND: str = "\033[40m"
+    RED_BACKGROUND: str = "\033[41m"
+    GREEN_BACKGROUND: str = "\033[42m"
+    YELLOW_BACKGROUND: str = "\033[43m"
+    BLUE_BACKGROUND: str = "\033[44m"
+    MAGENTA_BACKGROUND: str = "\033[45m"
+    CYAN_BACKGROUND: str = "\033[46m"
+    WHITE_BACKGROUND: str = "\033[47m"
 
 
 # Mapping log levels to ANSI colors
diff --git a/django_logging/decorators/__init__.py b/django_logging/decorators/__init__.py
new file mode 100644
index 0000000..546cc0f
--- /dev/null
+++ b/django_logging/decorators/__init__.py
@@ -0,0 +1,1 @@
+from .execution_tracking import execution_tracker
diff --git a/django_logging/decorators/execution_tracking.py b/django_logging/decorators/execution_tracking.py
new file mode 100644
index 0000000..b7dbff2
--- /dev/null
+++ b/django_logging/decorators/execution_tracking.py
@@ -0,0 +1,139 @@
+import logging
+import os
+import time
+from functools import wraps
+from typing import Callable, Optional
+
+from django.conf import settings
+from django.db import connection
+
+from django_logging.validators.config_validators import (
+    validate_boolean_setting,
+    validate_integer_setting,
+)
+
+logger = logging.getLogger(__name__)
+
+
+# pylint: disable=too-many-locals
+def execution_tracker(
+    logging_level: int = logging.INFO,
+    log_queries: bool = False,
+    query_threshold: Optional[int] = None,
+    query_exceed_warning: bool = False,
+) -> Callable:
+    """Decorator to log execution time, number of database queries, and
+    arguments for a function, along with detailed function information (module,
+    file, and line number).
+
+    This decorator allows you to track the performance of a function by logging its execution time,
+    the number of database queries made (if DEBUG is True and log_queries is enabled), and function
+    arguments. It also logs a warning if the number of queries exceeds the specified threshold.
+
+    Args:
+        logging_level (int): The logging level at which to log the performance details (default is logging.INFO).
+        log_queries (bool): Whether to log database queries. If set to True, and DEBUG is True, the number of
+                            queries will be included in the logs (default is False).
+        query_threshold (Optional[int]): Optional threshold for the number of database queries. If exceeded,
+                                         a warning will be logged (default is None).
+        query_exceed_warning (bool): Whether to log a warning message if number of queries exceeded the threshold.
+
+    Returns:
+        Callable: A decorator that logs performance details.
+
+    Raises:
+        ValueError: If any of the provided settings (logging_level, query_threshold, or log_queries) are invalid.
+
+    """
+    errors = []
+    errors.extend(
+        validate_integer_setting(logging_level, "execution_tracker.logging_level")
+    )
+    errors.extend(
+        validate_boolean_setting(log_queries, "execution_tracker.log_queries")
+    )
+    if query_threshold:
+        errors.extend(
+            validate_integer_setting(
+                query_threshold, "execution_tracker.query_threshold"
+            )
+        )
+    errors.extend(
+        validate_boolean_setting(
+            query_exceed_warning, "execution_tracker.query_exceed_warning"
+        )
+    )
+
+    if errors:
+        raise ValueError(errors[0])  # raises the first error to be fixed
+
+    def decorator(func: Callable) -> Callable:
+        @wraps(func)
+        def wrapper(*args, **kwargs):
+            start_time = time.time()
+
+            # Check if DEBUG is True and log_queries is enabled; if not, ignore query tracking
+            if settings.DEBUG and log_queries:
+                connection.queries_log.clear()
+
+            try:
+                # Execute the function
+                result = func(*args, **kwargs)
+
+                # Calculate execution time
+                elapsed_time = time.time() - start_time
+                minutes, seconds = divmod(elapsed_time, 60)
+
+                # Get detailed function information
+                module_name = func.__module__
+                function_name = func.__qualname__
+                file_path = os.path.abspath(func.__code__.co_filename)
+                line_number = func.__code__.co_firstlineno
+
+                time_message = f"{minutes} minute(s) and {seconds:.4f} second(s)"
+                log_message = (
+                    f"Performance Metrics for Function: '{function_name}'\n"
+                    f"  Module: {module_name}\n"
+                    f"  File: {file_path}, Line: {line_number}\n"
+                    f"  Execution Time: {time_message}"
+                )
+
+                # If log_queries is enabled and DEBUG is True, include number of queries
+                if settings.DEBUG and log_queries:
+                    num_queries = len(connection.queries_log)
+                    log_message += f"\n  Database Queries: {num_queries} queries "
+
+                    # Log query threshold warning separately, if applicable
+                    if query_threshold and num_queries > query_threshold:
+                        log_message += f"(exceeds threshold of ({query_threshold}))"
+                        if query_exceed_warning:
+                            logger.warning(
+                                "Number of database queries (%s) "
+                                "exceeded threshold (%s) for function '%s'",
+                                num_queries,
+                                query_threshold,
+                                function_name,
+                            )
+                elif log_queries and not settings.DEBUG:
+                    logger.warning(
+                        "DEBUG mode is disabled, so database queries are not tracked. "
+                        "To include number of queries, set DEBUG to True in your django settings."
+                    )
+
+                # Log the performance metrics
+                logger.log(logging_level, log_message)
+
+                return result
+
+            except Exception as e:
+                logger.error(
+                    "Error executing function '%s': %s",
+                    func.__qualname__,
+                    str(e),
+                    exc_info=True,
+                )
+                raise
+
+        return wrapper
+
+    return decorator
diff --git a/django_logging/handlers/email_handler.py b/django_logging/handlers/email_handler.py
index a46043f..c3644f0 100644
--- a/django_logging/handlers/email_handler.py
+++ b/django_logging/handlers/email_handler.py
@@ -45,9 +45,19 @@ def render_template(
             RequestLogMiddleware.get_user_agent(request) if request else "Unknown"
         )
 
+        # Get current time
+        current_time = now()
+
+        # Format date and time separately
+        formatted_date = current_time.strftime("%d %B %Y").replace(
+            current_time.strftime("%B"), current_time.strftime("%B").upper()
+        )
+        formatted_time = current_time.strftime("%I:%M %p")
+
         context = {
             "message": log_entry,
-            "time": now(),
+            "date": formatted_date,
+            "time": formatted_time,
             "browser_type": user_agent,
             "ip_address": ip_address,
         }
diff --git a/django_logging/settings/checks.py b/django_logging/settings/checks.py
index 9a70ccb..a466239 100644
--- a/django_logging/settings/checks.py
+++ b/django_logging/settings/checks.py
@@ -21,6 +21,52 @@
 
 @register()
 def check_logging_settings(app_configs: Dict[str, Any], **kwargs: Any) -> List[Error]:
+    """Check and validate logging settings in the Django configuration.
+
+    This function performs a comprehensive validation of various logging-related
+    settings defined in the Django configuration. It ensures that the provided
+    settings conform to the expected structure and values, and it returns a list
+    of errors if any issues are found.
+
+    Parameters:
+    -----------
+    app_configs : Dict[str, Any]
+        A dictionary containing application configurations. This is typically
+        passed by Django during checks and is not directly used in this function.
+
+    kwargs : Any
+        Additional keyword arguments that can be passed during the check. This is
+        not directly used in this function but allows for flexibility in extending
+        checks in the future.
+
+    Returns:
+    --------
+    List[Error]
+        A list of `Error` objects, each representing a validation issue with the
+        logging settings. If no issues are found, the list will be empty.
+
+    Validations:
+    ------------
+    - LOG_DIR: Validates the logging directory path.
+    - LOG_FILE_LEVELS: Validates the log levels for file logging.
+    - LOG_FILE_FORMATS: Validates the log formats for file logging, ensuring
+      they are provided as a dictionary with valid log levels as keys.
+    - LOG_CONSOLE_FORMAT: Validates the log format for console logging.
+    - LOG_CONSOLE_LEVEL: Validates the log level for console logging.
+    - LOG_CONSOLE_COLORIZE: Validates whether console log colorization is enabled.
+    - LOG_DATE_FORMAT: Validates the date format used in logging.
+    - AUTO_INITIALIZATION_ENABLE: Validates whether automatic initialization is enabled.
+    - INITIALIZATION_MESSAGE_ENABLE: Validates whether the initialization message is enabled.
+    - LOG_EMAIL_NOTIFIER: Validates the email notifier configuration and its
+      settings, including format, enablement, and related email settings.
+
+    Notes:
+    ------
+    This function utilizes validators from `django_logging.validators`
+    to perform detailed checks on each setting. If email notifications are enabled,
+    additional checks are performed on email settings to ensure proper configuration.
+
+    """
     errors: List[Error] = []
 
     log_settings = get_config(extra_info=True)
diff --git a/django_logging/templates/email_notifier_template.html b/django_logging/templates/email_notifier_template.html
index 5f801ba..dda0fd1 100644
--- a/django_logging/templates/email_notifier_template.html
+++ b/django_logging/templates/email_notifier_template.html
@@ -4,414 +4,59 @@
     <meta charset="UTF-8">
     <meta name="viewport" content="width=device-width, initial-scale=1.0">
     <title>Log Record Notification</title>
+
+
+
 </head>
-<body style="margin: 0; padding: 0; background-color: #544FBA;">
-    <table role="presentation" width="100%" cellspacing="0" cellpadding="0" border="0" style="background-color: #544FBA; padding: 20px;">
+<body style="margin: 0; padding: 0; background-color: #2C333B; font-family: Arial, sans-serif;">
+    <table role="presentation" border="0" cellpadding="0" cellspacing="0" style="width: 100%; border-collapse: collapse; background-color: #2C333B; box-sizing: border-box;">
         <tr>
-            <td align="center">
-                <table role="presentation" width="650px" cellspacing="0" cellpadding="0" border="0" style="background-color: #ffffff; box-shadow: rgba(50, 50, 93, 0.758) 0px 50px 100px -20px,
-    rgba(0, 0, 0, 0.745) 0px 30px 60px -30px,
-    rgba(10, 37, 64, 0.758) -2px -2px 6px 0px inset; ;border-radius: 15px; padding: 40px 20px;">
+            <td align="center" style="padding: 20px;">
+                <table role="presentation" border="0" cellpadding="0" cellspacing="0" style="background-color: #ECE9E1; border-radius: 10px; box-shadow: 10px 10px 10px rgba(0,0,0,0.5); width: 700px ;margin: 0 auto; min-height: 500px;">
                     <tr>
-                        <td align="left" style="padding-bottom: 50px;">
-                            <div style="display: flex; align-items: center;">
-                                <div style="width: 20px; height: 20px; background-color: #544FBA; border-radius: 50%; margin-right: 10px;"></div>
-                                <span style="font-family: Arial, sans-serif; font-size: 16px;">Django Logging</span>
+                        <td style="text-align: left; padding-left: 20px; padding-bottom: 20px; padding-top: 20px;">
+                            <div style="display: inline-block; text-align: right;">
+                                <img src="https://avatars.githubusercontent.com/u/180335989?s=200&v=4" alt="" style="width: 40px; height: 40px; border-radius: 50%; vertical-align: middle; box-shadow: 2px 2px 10px rgba(0, 0, 0, 0.393);">
+                                <span class="logo-name" style="font-family: Italiana, serif; font-size: 1.3em; color: #333; margin-left: 10px; font-weight: 100; vertical-align: middle;">LAZARUS</span>
                             </div>
+
                         </td>
                     </tr>
                     <tr>
-                        <td align="left" style="padding-bottom: 15%;">
-                            <p style="font-family: Arial, sans-serif; font-size: 20px; margin: 0;"><b>Log Message:</b><br>{{ message }}</p>
+                        <td>
+                            <table role="presentation" border="0" cellpadding="0" cellspacing="0" width="100%">
+                                <tr>
+                                    <td style="padding: 5px 20px; text-align: left; font-family: Istok Web;">
+                                        {{date}}
+                                    </td>
+                                    <td style="padding: 5px 20px; text-align: center; width: 40%;">
+                                        <p style="background-color: #2C333B; color: #ECE9E1; padding: 5px 20px; border-radius: 20px; box-shadow: 0 0 10px rgba(0, 0, 0, 0.5); font-family: Istok Web;">
+                                            Email prepared at {{time}}
+                                        </p>
+                                    </td>
+                                </tr>
+                            </table>
+                        </td>
+                    </tr>
+
+                    <tr>
+                        <td style="padding: 20px; text-align: left; padding-top: 0px; padding-bottom: 40px;">
+                            <h1 style="font-family: Kotta One, serif; font-size: 1.8em; color: #131313; margin-top: 0; margin-bottom: 12px;">Log Message:</h1>
+                            <p style="color: #454545; font-size: 0.9em; margin: 0;">{{ message }}</p>
                             {% if ip_address != "Unknown" %}
-                                <p style="font-family: Arial, sans-serif; font-size: 16px;"><b>IP Address:</b> {{ ip_address }}</p>
+                                <h2 style="font-family: Kotta One, serif; font-size: 1.1em; color: #131313; margin-top: 20px;">IP Address:</h2>
+                                <p style="color: #454545; font-size: 0.9em; margin: 0;">{{ ip_address }}</p>
                             {% endif %}
                             {% if browser_type != "Unknown" %}
-                                <p style="font-family: Arial, sans-serif; font-size: 16px;"><b>Browser Type:</b> {{ browser_type }}</p>
+                                <h2 style="font-family: Kotta One, serif; font-size: 1.1em; color: #131313; margin-top: 20px;">Browser Type:</h2>
+                                <p style="color: #454545; font-size: 0.9em; margin: 0; margin-bottom: 40px;">{{ browser_type }}</p>
                             {% endif %}
-                            <p style="font-family: Arial, sans-serif; font-size: 14px;">This email was prepared to send at {{ time }}</p>
-                        </td>
-                        <td align="right" style="padding-bottom: 30px;">
-                            <img src="data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTczIiBoZWlnaHQ9IjIzOCIgdmlld0JveD0iMCAwIDE3MyAyMzgiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly
-93d3cudzMub3JnLzE5OTkveGxpbmsiPgo8ZyBzdHlsZT0ibWl4LWJsZW5kLW1vZGU6bXVsdGlwbHkiPgo8cmVjdCB3aWR0aD0iMTcyLjQwMyIgaGVpZ2h0PSIyMzgiIGZpbGw9InVybCgjcGF0dGVybjBfMjRf
-OTkpIi8+CjwvZz4KPGRlZnM+CjxwYXR0ZXJuIGlkPSJwYXR0ZXJuMF8yNF85OSIgcGF0dGVybkNvbnRlbnRVbml0cz0ib2JqZWN0Qm91bmRpbmdCb3giIHdpZHRoPSIxIiBoZWlnaHQ9IjEiPgo8dXNlIHhsaW
-5rOmhyZWY9IiNpbWFnZTBfMjRfOTkiIHRyYW5zZm9ybT0ibWF0cml4KDAuMDA0NTU2MDcgMCAwIDAuMDAzMzAwMzMgLTAuMDE0ODM1NCAwKSIvPgo8L3BhdHRlcm4+CjxpbWFnZSBpZD0iaW1hZ2UwXzI0Xzk5
-IiB3aWR0aD0iMjI2IiBoZWlnaHQ9IjMwMyIgeGxpbms6aHJlZj0iZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFPSUFBQUV2Q0FZQUFBQllFUjBKQUFBQUFYTlNSMElBcn
-M0YzZRQUFBQVJuUVUxQkFBQ3hqd3Y4WVFVQUFBQUpjRWhaY3dBQURzTUFBQTdEQWNkdnFHUUFBSUF2U1VSQlZIaGU3YjBIWUZ6SmNlWmZnNXdURVFqbW5KZmtjdk91Tm10M0pTdm5MRm4yMlQ2ZnpySXR5N0xz
-ay83V25iTjFEcEljNUpNdFdWbVd2Y3FiYzA3Y1pjNFJCSkV6a2ZPL2Z0WFR3QkFFU1lRWllBWjQzKzdqREdiZXZOZXZ1NzZ1NnVycTZ0Q3dRZ0lrTkZ3VGhuZ1gvdHRlSkJUaU00Zisva0ZwYk95UnR0WSsren
-MzTjFVV2xtZEpjbkxvdlBNQ3pBNENJczRCZUNMMjl3OUplM3VmZEhjTlNGSlNTUEx5MHlRbkoxWHE2cnJsdWFkclpmKytadW5xNmpmaXBhY255OXAxK1hMbjNZdWxwQ1JUenorZnVBRm1GZ0VSNXdEUWNrZVB0
-TXJaczUzUzJOQ2paT3czVFZkU2tpRUZoZWx5OWt5blBQVmt0UkZ5YUdoWWtwUnd2S0pFLytCL2JaZGJiaTJYdExRa0kyOUF4dGxCUU1RRUJrMTN0ckpUbm4ybVZsNTZvVjVxYXJxa3U3UGZOR05JU1pXWm1TSV
-pxdmw2K3daVkV3N1kzL2tGYVpLczN6VTM5MHByYTY5OCtnKzJ5YTIzTHpJaUJtYnE3Q0VnWW9MQXQ1TG5DWDgzNlpqdmU5ODVMaytydG1zLzU3UmdSbWF5cEtRa21jYnI3UjJVb2NGaFNkYS9VMUpDc25KbG50
-eHllN21kZDZhaVE3S3lVdVJOYjFrbUM0b3o3SnFRTU9EaDdDQWdZZ0tBRnFLWlJyWFZzQkpONUQ5L2NFSys5ZTlISlNYWkVhMTBZYWFzV3AwbkJhcjFldnVHcEthcVM4NmM2VkRUdFZjV0xzeVNqMzU4bmR5c1
-ptamt0YzYvYm9EWlFrREVPSWR2SFdzbS9SK1RremVZbHAvNDlXZWxzNk5mQmxYN2JkdStRTjcxM2xXeWVVdVJtcURKOWp2R2k4ODlXeU43ZGpYTGxpc0s1WjN2V1dta0cwUkxxbGJrbXA2SUFSbG5Gd0VSNHh6
-T0U5b3Y1OXI2ekpteXNEelRTUGJJUTJmbEgvNytnSTN0Y3ZQVDVITi9mS1dzMzFCZzUwd0VhRlFRQ2preUp1RTJEVEJyQ0dvL2pvSG1PbjJxWGI3OWphUHloNy8va3Z6dEYvZklrY050UnM3WGRqWXFpY1NjTU
-RmY1dHcFRFUHdOd2R5QitRckpuRllkMjkzQ080NWhQWGRnZ084ZElRUE1EZ0lpeGlFY2dZYWw2bXluL1BqZVUvSWpQZXJydStYZ2dSWjUrY1Y2STA5emM0OFJhVWpQS3kzTE5NMm8rczNJNkVnV3NvTy8vUkVK
-Unp5Unlzb09lZTZaV21sUlU1ZmZCNWdkQkVTTU0wQU9QMlk3c0w5RmRyM2FLTm5aS1pLWGx5YmJyeXlXTys1YUpFazZ2bHU4SkZ0cWE3dHR5cUsvYnlnY1V6TXhESmxkR3BLMnRsNzV3dWRmbGMvLzBjdnlsMy
-syVzA2ZFBPZE9DRERqQ0lnWVozRG00YkRVMVhiSnllTnQwdEhScjlvdVdUWnRMcFJQZm1xTExGdVdLeGtaeWZLT2Q2MlV0Nzl6aFh6OFY5YkxyYmVYV3dUTnhjQWxuYWs2cE9ZdWg2TnRiKytRTkRmMVNGNXVt
-cEt3WGM2cWRyUXBqN0JHRGpCekNJZ1laMEQrT2ZwVXkvVW9LZEIyYU1UTlZ4UktlWG0ybVoxNFBGZXN6SlZQZkhLTC9OcHZicFR5UmRuaHlmZ0xUVkRBWjg1VUpYcUdxWTVrL1hSWTZ1dTZKQ1ZWLzA1MUhsUT
-hzdVA5UGtEc0VSQXhqZ0FaL1BpdXJhM1BKdWw1ejZROGhIUmtJenlOYzBRS0NsTWxQei9kUHJzVU90cjc1ZERCRnRtM3Qxbk9uZXV6UUlEN2ZuNUd2dngzKzJWb1lGaTE3b0NVbG1iS2dnVVpGZ3pnVGVNQU00
-ZGcrbUtXTVZyOVR2Q1IvNTB2TjhqUGYxb2hodysxU0cvUG9IMTR6WFVsOHJ1ZjNtclJNSmlXRUJFTUQxK29DYm1rdnk0ZVZwd3gzL3pHVVR1bldNbUdnNmUrcmtjSjJHZm5ZdForOUpmWHlZMDNMeHd4Y1NPdk
-Z5RDJDRFJpSEFIaEp6RDdxU2VxWmMvdUp1bnFHalFUbGJFZEJFeFZNOUtmNTdXV2UyOGZqeUR5ZTRqSU5VK2VPR2VlMFNOSDJ1VFFnUlliZytwWlJ1b1MxWWJyTnVSZmNwd1pJTFlJaURqTHFLbnVzcm5CbnA0
-QisvdmcvbVk1ZXJUTm5DYjUrYWx5N2ZXbHBxM3Vmc01TSXlLYUx0SnNqQ1JoV0FrYWNNSWNQOVltdTE5cmtoUDZ5amlUcFUvcDZVa1dXOG9TcUszYmlzejByVmVpL3VKblp5d2N6bW5Td0ZrejB3aE0wMW1BcT
-NKV1FQVEkxNzU2U0dwcnV1V08xeStXVzI1ZHFJU29rSi84NkxTUkF4Sis0RU5yWk9QbVF2T1VRcHBMd2Jka2RWV25QUFJncFJ3KzJDb0RBME5TWDlzdHJhMTlrcVZrdk8yT1JiSjZUWjRTTTlYbUh2LzhUM2JK
-Z0dyTjVKU1F2UDd1SmZMMmQ2MlFKVXV5OVNydVhwRkVEeEE3QkJweGxnQVowVlpQUGw0akw3MVFKODgvV3lzdExYMnlhSEcyelJIeXVuWDdBaU1oeTVjaXRlRGx3T1QvS3k4MnlGTlAxdGhpNEViVmptaFRwa0
-NZOHJqbmpVdmx4dGVWeVJXcUVhL2NzY0JJaUFuNzFCTTE4c1NqMWRKUTN4TytVb0NaUXZJWEZPSDNBV1lJa0lxeDJRKytkMEtxejNaS3FtcW1iZHNXeUxZckY4aXk1VGxTdENCZE5tNHFrS3V1THJHb0djL0Jp
-WENSYy9DeXRwOXpLVEdLaXRLbGJHR1diRmZDM2EwRVhMZSt3RFFuSFFIems0d1BXZE9JeG1SbGY0T1NPRGN2VlR1Q0xOUENBV1lHZ1drNnc2QzJJUXNhNkZjKzhxUXR6c1Y4L014bnQ4djFONVdaOXBzS2FFWU
-l6cFJIWFYyWE5EVDBHTEg0bktnY2xrZjVkWWV1eGZuSE9YdncwbjczVzhkc2pOalZPV0JhK0wzdlh5VlhYVk5pMHhsZ0lwMUFnS2tqTUUxbkNHTzdPLzV1YnVvMThrQ0loWXV5allSOEhubE1GUDc4L2Z1YjVU
-dmZQQ2FQUFh4V3NuTlM1SmJiRnNrMTE1V3FsblVrQk56U203b1FGWkplZFcyeDVPajU2YW9GU2J2eDNMTjFVbXVlMWNCeE14TUlpRGdESUdTc3M3TmZLbFhqTkRaMGh6L1ZjWUdPelFDY1lJb0NlWGNrR1QwbU
-Fnc2RWVEpEbU4ydk5WcGcrTTkrVWlHUFBsUmxTNmo0bkRKRXdwT3JvcUpEN3Y5RmhlemYyMkloYjR3bFZVL0s3bGNiVFZPaXVTRnR3TVhZSWlCaURPRUpnTG4zNHZOMThzVy8yaVBmLys1eE14bUJyWmhRQVdl
-OGVFNU5Tb1FlZ1orODBMczRVanl0ckZ2TXlVMjFwRkdwNllTMHVUTWlTZTJKUzRqYmwvNW1uL3o3MTQvS2EwcTh2dDVCSzNPYS9xNWVPd3lJZVBwVWg1NUxnUUlteGhJQkVXY0ExZFZkOHZDRFp5Mmw0ZU9QVn
-B2UVE0eGx5M010dldHZmFpSmJRVEZHYTAwVWtKME1idi8yL3c3TEt5ODFXRWhiV1ZtbXJGK2ZiL2xMSVowM1JRSGtoUFJmK2Z2OXNtOVBjL2dja2NWTHMyWEhWY1ZTcUNSbXF1VEVpWE42dlhvamJ1VHZBMFFm
-QVJGakJLZlYzSnJBN3U0QlMybFJYSkpoUW8vR0lXNzB3eDliWTZrdDdyeHJzYXhabTIvak0rUjlNaktQQm1PSzRpLy9kTGM4L1dTTmRQZWcxVVN1VkVKZGMyMXBlTzRSUjQ0N0gxTHhHMkpPWDN5KzNpSjJDS0
-43Mnp1V3kvLzYvM2JJSDM3K1NybnFtbUxUMXFScDVOb25UNTZ6MzdqbFV3RmlnWUNJTXdDbUV3aFZ3N29iMXY4Z0J3ZnJDLy92bDI2UXozNXV1NVF2eWdxZlBURjRVaEN1OXJkZjNDdFZaenVNUEdqVm0yNVpL
-TC8wNW1XMktnTk5ObFliOGplZTFDVkxjOHdFWGIreFFONzgxdVUyemNGM0d6YTZsUjVvellxS2RubjVoWHI3UEVpbkVUc0VOUnNqZU5sSGsyU3ExbUZ1RU1IdTdoNlV1bHJuc01Ha3hEbmlWanpZUnhNQ0pBeU
-ZrcVJUeDU3Ly9BOEhkVnpZYitOTTBpYSs1d09yNWVPL3VsN1dxb2FGOW1PZE5CN2M5NC8vWklkOC9nczc1Rk9mMldwQkJLeFY1UHh0MjR0a3d5YlYwT25KTnI1Rkl6TCtSTk1HV2pFMkNJZ1lRMEJDaEJmbmlk
-Tk9mQmlTQjM1eHhrekQ1R1R5ajA1Y3NMa1djNDZRRHJDY2FlL2Vab3NyVGRKcnZmOURxMDBUMnA0V0tVNFRPdFAwUWxBV3hxaTMzN2xZRm1uWmZHZkFnYU5uL2ZvQ0N5Ym9hQitReW9vT2kxdUYyTnpiTFM1Ml
-I4REw2Q0FnNGd5QXRYNUV5YkFYUlZOanQrelowMlNUNXdnMjVKb29JQW5rOWFRcFc1Z3BiM25iY2h0ZmZrQkpTTVp1MHV3ekpqMXlwTlhtQTVrMnVSakk0RVlRdURkZE1UMDllWmN1ejFIek5OTSt4Nk83ZjEr
-THZlZmVmb0d4TzF5SEUyQjZDRUxjWWdxbmxVaitTd1p1NUoybFNHdlc1VnVHN2N4TXYvYlBFZUZ5Z0dBSDlqWEx6bGNhYlJGdmJtNmFyRnlaS3p1VTVOdXZYR0Nmc2R6cEovZWVrbnQvZU1yUzhFUGNEVG9Hdk
-JpNE43Zm5sWWljWjUrdXRWMmpHQ05pOGg1VFRjaTBCdE1pNUU4bDdLMVBUV3pHdkpBOEk4UEZ3VTd3RVFKY0JFR0lXNVRoYXhQQlBISDhuTHp3WEowNWFHNjRzY3pXK3pHcGo2bnFjNUJ5L3FXRTJEY1BrKzM3
-OWpiSjE3OTJSR3FxTytXZU55eVZYLy9OVFhadHYzSi81eXZoQmNVSFc4T2hjOFB5dG5lc2tFLys3aGE3eG5qdzk4ZmsvY0Yzajh0OWFqWVhxT2IrOE1mV1NacU9FWW5Td1NHRXR6ZXZJTTN5cXVaa3AxcDhMR0
-5lVm5GY3NiWElWb3I0YVpBQWswZGdta1labmppTUFYZStYRy9wRU85WDRTWk5CV00zNGpmeFNucnlYWXFFa1NBWSs1R0hxdVRZa1RhTGxxbXE2aklTK2pIZ2lXUG41S2MvT2kxN2RqWFpWQW5yRDlHU3JMQzRG
-RVk3anBCcXdsN2JFNE5vRzFKMXNHYng5WGN2bHFYTHNxVk5uNGRPWk5lclRiYnB6ZU9QVmxrbnd5dHhxa1R6a09pSzUvZlhEREJ4QkVTTU1oQkNoTEd6WTBCcWE3ck1wT3Z1R3JUM2ZENnFCUy9QUUUvcS92NW
-hxYXpzTkxPVWRQb0YrZW15YVhPQkJRRUFya1ZPbXNPSFdtMHlueGpUbTE2M1VEN3c0VFUyUVg4cFVBeHVRN211dmI3RWxramQ4MHRMYmMwaWUyamNlRk9adlB0OXEreDZhL1F6eHFBTEZxVExpaFc1VGdQcWIw
-bUMvT3pUTmRMVTFHdlhzZzhEVEFyQkdERUdRTGdIQm9kMXZOWXVwMCsyMjk4c3lsMm5HZ2FIalNOaStPUkxnUE00VEx1KzFHQmpQcTZEbURQblJ3SmlvbDhZMDdHR3NGcTFKRm5aYmxUU3ZPWHR5Mlh6bGtLYm
-dyZ1U2Zm5LSHdRY3NHUFVGZHNXeU9MRnpwUEtoRDlUR3l0WDVjcUtWWG1tSmJkc0xiUkFjcnlxUjFWRE0rVkJPYSsrdGtSS1Nna3VEOGFNazBVd1Jvd3lFRW9FbjlmN2ZsNGgzLy9PY1Z2cmg1Qi81R05yNVc0
-ZDIwMlVpSDRPRUkzekhUWC9ubnE4Mm9TZm5aNzRPVTJYbkpSa3dnOVpPSCs1YXFwYmJpdlgxeHo3TFppSTlnV1V5NHNEdi9FL2N4K05mdTdMOWNyTERmSlhmN2JMNWpPNS82Yy9zMDAycXFiV3MrejdDZDQyZ0
-NJd1RhTU9KMzArckcxd1FNMVJsVWdPUEpnVGhTTnJ5UGEyT0hhMFRVNGVQeWNabVNuU1F3Z2JaTmR6SUFSYmRaOVVyVXVNS2RNTWtESTdKMVcvYzllWktBazlSc25veU9iaFB2ZmZpVTN3TXgvS2ZYaEdpR2ph
-MnI0ZURha0xNREVFUkl3NmtNUmhPWHVtUThkdHJkTFMwbXNDeXJab09FOG1pMU5xM3VLa1lSVTlVd2Q0WHJuT1hXOWNZdU8yZFJzS2JFVTlLUkwzN21teWpVc2Z1cjlTcXFzN1J5Yit3OXk1TENBUEhsZzZqRW
-dDODlZN2hiZ1cwVFlFc1QvL2JKMkY3L0Y4MTExZmF0TW5BUUduaG9DSVVZWVh4SG9kc3pGdVk2eFlVSmdtMTk2Z2dscWNZUnBsSXNMS09XZzh6RkljTVpsWnlTYnc3L3ZnYXZuczU2NlUzL2pOVGZLN3Y3OVZm
-dit6MitTV1c4b2xUOG1ZbFpWcWV5TCs4QWNuNU9jL3FiRDdjeit2eGFZRHJ5VWhOeUZ2UDc3M3RLUm5KTm1jSXJHdEJKalRJVGlUTm1EalpCRVFNWXB3OHU0RXNiMmpUem82KzgxWlVsYVdKU3VXNTlyM2ZueD
-FLWEFlQitZdGpwckJnU0Z6bkpCbW4rQnNyZ240Yk9teUhQbXQzOTBpNy8vUUdyMVBocTN5WitxQnRZUXVMQzFhZ0Z3aE03Y2ZlNlRLd3VvbzQrSWxXZklCN1J3d2lhTkYrdm1JZ0lneEFNS0l5Y2FSbWhxU1F0
-V0lUSVpQQ1NyL0tCaWljMWduaUp4N2dTZE9sWVBQSU9qLy9PMHRJNTVTeG14NFZxTUJyZzh3VDRtb09YVkN4NnRFMlBRT1djQkFjVEdicDdxVEFtMDROUVJFakFFUVJsWkMrRFNGbUlzRWFDT3NSTHRNRkFnK0
-IwcVV5QnFXT25WMzk5djFpWVJCOW5udkNjbEdOWml0My96ZTdmSnBOVm5YcmMrMzcvMzRicUxndWk2NCs4TEplZjdFM0VhekV4eE9WampXVndiOG14NENJa1lSVGhpZHRzclBTN05RTUJiZFZsVjFXbVFOaFBC
-bXBRZGVSNDVJY0IwT204TmJuQzBMVmJOaG5sYWM3cEIvLzllamRrNXFhdktJVTRWWHQxWXdaTC9oL1B6OEtXcGdCZmQyVHB2eDV3TzVGYzRodnBzc3lRT01qNENJVVFha1Fvc3NXcFJsNW1GNmVvcnR0dlNMbj
-FiSTE3OTJXQTRkY3FzWXZHbUpVQnVIN0RNM2huVG1wbE5GUkxFc1dlb1crS0tPSG4zNHJQekZuKzZ5dUZNbThqbWZLUTA4bVc3OFNVY3crdnZKZ0orNGc5MktPMnlGQ0V1ZDdNWjJRSFdJcWdUVi85Q1lmWDB1
-STBDQTZTR0lySWt5MEJBSUtvSGRFQVNIU1hOenI4MjFzWlJvMTJ1TkZwMVNXdVpXd3lQb09GZFlxT3VEdC8zQlhOM1RUOVZhSEtjUkZKTG9QU0FKS3pENC9JWG5hdVdoQjg3Szg4L1VXdEFBbmxtM25Na1Jaak
-p3dnhGNThQNUsrZHBYRDh1VGoxZmJOVnhzckxzV3o4UXlMclF6WlNHRWpxemsvcmtuZTg4QURvRkdqQUhRRUhnMFdaSHd0bmV1c0RRWUlhM3BOQ1ViMjZHZE9ONXU1MVNjYnJjdHN6LzlPeS9JTjc5KzFGYnVN
-NlpFMHpEL3lQNFY5Ly84akUzcXA2WWxXMnduY3Q2cTN4RUV6cEtuUGJ1YWJiWEZzOC9XeXQ3ZFRaWmcySmRocWpoKzlKeE5tNXc5MDJsYmg3UFBQdGVqTTJBelV4dzF2RWR6OXR0WWRSbzNDMkFJTkdJTTRKVU
-NBb3UyeU14SXNlZ1lkZ0FtelQxVEFBZzNxeklPN0crMXdIRGlSbkhva09GdDE4NUdXN2ZJbnZiSGo1MHp4dy9yR2RtNzRrMXZXVzdYQURodzBFUktDVE9GYjcxOXNheFlsV3VkQUdXWXFuWTZzTC9aUEtPOWFu
-YVMrcEVnQXJ5eDZPT2VuaUZiYmtXNVdBckZIaHJMbHVXY3A4MERUQjRCRVdNRUw0K3Nsb0JJcDFYN3NWU0phUWcybTJIUGVyWmtZd3BBeGRmaVJ6RkYwWktZc0p5M2VFbU90Q3RwK1J4QlIvR3c5by9zM1Z2MW
-xReHcxMTVYYWdIWXQ5MjUySWdLYWJ5Wk9GbHdmWDdHd1o2S1p5dTdMTE1jMTNWRXhEUWRrbGUxb3dpSUdGMEVSSXdwRUVwbnlwRTFqVGs0eG9OTVBUQ05nYmVUTllwRTN2QTM2d3h4ZmhESXZlM0tZZ3ZlemxW
-aXNhcUNPRkpNVkhaNjJxU2t1SEpIc1RseFZxek1zNGwrdGxLRDlOUDFZc0lqeWtxNWxyUDZYOGVBVjE5VFlsTVZvS2Q3VUY1NXVkNVdsdEJaM0hEalF0czRKeURpOURBL1ZsLzRSNXhGSVNGS3B1SlVoNW1vel
-MwOVdIbTJaTWtsYmdwWmdtRDJOVVNReVVVRDBYRHFNRlo4L0pFcWVlQytTbWxvNkRhemsvdzN2L2NIVzAzN09VOHBqOGF6TWFVUW5XZEVMREI5ZWZWN2NuQnBQTFYvLzhXOThzSUw5V29paCtUM1A3dmQxaXlp
-SGFlcWlRUE1kU0o2NmZHUE9NdENRbFZURkZ2SlBpUW12T1I4WWZxQy9DK01DeWtqcVNxSUsvWEZKVzRWcDgxUGYzemFyYnpRTDM3bjk2K1FXMjR0ZHljbytDeWFqM2VoVlBCQnlOSjAvTWtmdjJvclBqTFNrK1
-Z6WDlnaDI3YTdQUllESWs0ZGM4OXJpZ1Q1SS9Mdlh0VkNyVTA2K0trU09YdEtwT0tZU0VQTmhiUHBNWUl2Qm9KcStWL3lVODJVUkc3NW5JbDRIRHM0WFZoaEh5blBaSUc3OWZaeUhSOFdXcEExbmxYbUpURVRI
-UUdqUzhJTDRUb1FtMnBwN2JPeExacVpRSFQyVjJRTUhOdjd6MzNNM2VrTFZJNG5YMDJseUpuaklpY09paHpkSzNKb2w4aUJuZnArbjBnZnUrT0dXUkpESUtoKy9PWkp5ZUVGMk4vZWZ3NmNkbkVubE91WTdZNj
-dsZ2pwRHhtUEhUelFJc2VQdHhrNXZLYU5KcmkxUHp4d0xESEpqN09Kei9QejA2V3dpSDB5WEZsZGVRTk1CWE9HaUNNV05nVHM3aFJwcWxmTmQwTGttSkx0c0JMditBRzE4YXJkZDV5YmxDd3kwRS82TXYzYi9Y
-UW1nS3hDU0grTS9ReVM4ZXFGbWhjT3NvV3ZYWnNuNjlZVm1FT0hzU0Y3WFZncS94akRhMXljU1d3M1RtcC81anBYckhaVEphN3VYWGtEVEExemdvZ0lnb2tCR3JDNVVlVFVZWkdEcnluNURqbENEZzJLcEtXTH
-BHZW9SR2VMNUJXSUZCYUxyRmpuL3ZiU0hxZEF6ckdnOHd2UzVhYWJGMHB2NzZDdCtDZGZ6SUNhcVRPaGlmRHFNdGZKSENKZVlPNTQzWFdsRmhFVWtIRDZTSGdpR2draFdsZTdTS1dhbndmVjVLdzhpWitkeUdV
-MklkUkRDUWp4bHE0UzJiaEQ1S3FiVllydUVGbSsxcDBUOTBEanVPUyt5MWZsMm9RK21wTTFnWVNjOGQxVTQwc3ZCOThKRU1uenpGTTFPa2JzTlkxZHJHTkR2S1ZvUjZmQnd6OElNQ1VrTGhIRFRoWWpZVU90eU
-42WGRReW9HaEFDcHFRNkRaZWhCRnlzNU50Nm5jajJHMFhXWGlGU1hJYTcwbjZiT0hDbUt0TWN4Y1hwbG1jVWs1UU5iWmhPd0V5TUJYd1lHNll3MHk3UFBWdHJxMGR3R0xHVkhHRjNBYUtEaENTaTlmeDRDQ0Rq
-U1NYZnZwZDBBTk9xMmkzRmRlR3BTa1RNemgycStUWnNjOXBRTlovOWJvYThwRk9CTHg0SDc4Y0NNcWFsdXBRWkxFTWFTWVd2UkJ6di9LbkNsV1AwZ3F6MCtQYS9IN1U0VnJUZmFoMGJ2dmY5cTB3cngzRjFKaF
-FTam9obWl2S21WelhmYTgvcE9QQ2cwMzRJRGxLeGFJWElsVGVwOXRzaWtwMDdJdDMyTzg2RHdIRUNSenFpYk56T1NscFlLeDZidzBBRVB2TmUwVWp3TzhhSUJGeDM5d3pZSTBZVHJwcGNTQjJyTzc3Mno0Y3N1
-b2R3TitZK1AvVFJ0VGJKYitWSXlLNDgvcEE0MVloVVFDYmVkM2VJN0h4R3BGRk5Vc2FBZUQ5ejg5VUV2VlprL1ZaOUg5NTBoZCtFeVRjVERvMkpBRkpCUG9BUXMyUUp6Mk5rNWpSZTBUWjg1aGI5dWpFWWorUE
-lxUnBRL3lPeWh1VlVuQnVOeHd0WHNYVUNCL2UzeUpmL2JwLzgwMWNPU2sxTnQ2MjZvT3p2ZXM4cXVmcmFVanMvSUdIMGtEQ1JOUlF6eE5SRVc0dWJDMnh0ZG82V2dUNlJoVXZWRkYxdlpCeE91blJtNjltQ0Uv
-TFJ2U29BRVRaNzl6VExJUlg2cHFZZVM5U0xkc1FUeVhRRmF3dkpEazRLREZJVmtnT0hER3FmL2IyWHBLdmJyWXI0czcrNlJsYXV5ak5TOE56UmVQYWYvZVMwL096SHAxMFdPUDJiK2NQQ29qVExUL09tdHk0UE
-5wdUpBUklueEEwdDBxYmtZeEsrWGNub1RWRThuMHRXT2pQVUMyRmNFcEZxZHJsbVdPdjN5RU5uNVlBU2tDVlJaSHV6WkZQNk9MeXlkaEhDV3ZSS1pyS2w2V2ZqMEp0dUxyTkZ4bi8xWjd1TnJLeHovT3UvdlY2
-S2xLUmNuc2VPeHFQL3pWL3ZVVEpXcVBtcjFhcGszM0pGa2UySFFmd3IrMkg0ZXdXSUh1S2JpQ05GMDFjMElKUHlMWTNJcy90dTVRYVJ4U3RrT0lPRnQvRnJKMUhGbUpNMU5WM3k2RU5WdHJJZWJ5ZjViQ0FtWG
-tpbUlZaWFRY3Z4T1JvUHM1VHBnVlFsSkNGd1JMRVEwM21tb2xQNitnYms1bHZMNVZPZjNtcmEwMm5EOEEybkNXSmFTY25CT1BDcXE0dHQvMFhDNzdLeWNIaEJ3dWpkSzRCRFltakVjNm9CbVpvZ05oUUo0Rmky
-Um8vVk1weWVhWUlSai9BMTI5OC9LRWNPdDlrV2JmdlVGQ1ZHbENrQnlzMStnMnhjdW5CaHBoRU5zNCtwQ2ZLWkV0UEp1ajlXWlVCT2lFbDhKNXFUYTM3bUQ3Zkw5VGVVV1pDUVQ0OFJEVEJueUhwRU5ISlpXYV
-l0MC9KMTdNVEZ2WS9UYWs5SXhEOFJPODZKbkRrbVVuM0dtYUpNVVdDS0xsY2lLZ25qVlJwOHJmYjBETWllM1UyV0dmdklvVmFMaWtIQVNjeDczZlZsc21wTm5peGVuR1U1UzluYmdqeW9QQ1pFYlczcHMrM2NX
-RlRNdm9kSERyY2FpZEdBWFBkREgxa3JiMy9YU3RPazBTQUhaVVljL0RVOCtVZ0h5VGJnZUV3M2JpcTB6VWxCUU1Ub0liNkoyTlBsVmtvUXNOM2ZUeUlZa2RMRkltczJPWE9VYytLWWlKaWQrL2MxeTcwL1BHbX
-IydjJZNzVwclMrU0dtOHBzN0pWdmlZZDVCamNYT1BvNDdnMS9NNDVrOTJIU2FEenhXTFZwTEVqQkF0NWYvdFgxdGtxZTVWVCsvS25DU1lJWEIzY2hOcmw1Nm9rYStZbDJKUGtGYnQrTk8rOWVZbWtld2ZsbERq
-QlZ4TjhLZmQ4dkRBNjZJRzJJQ0NIUmhBVUxSRlp2RXNuSnMxUGkwU1QxeGFkbzVKeTU3K2RuTFAwOWY1TnI5UGJYTDVLM3ZuMkY3VUZvTVp0am5tSDBUL2VHdndscEt5bk5zcFg0L0laZGZka0l0Yk5yd014WH
-ZLWkZDOUpIRnZJeW5jSHZ4MXo2b25CYU1HVGFtaFFlTEhVaWFURDNKVkVWKytvelppUkR3T2xUSGRMZTFtY2RTSEd4MndzUlRQUmVBY1pIL0tiS3dFTjY5cVNPRDhQVEZObEt2cFhyUllwSzdPdDRKR0VraUFO
-OTlPRXFlVkkxR0FSaG5IWEw3ZVh5enZlc01tL244TEFqQ3M4eCtocDVYQ2pjSkpCYXRpTEh3c3hJMDhoWWtodzNwTFZnVjJIMkt5U3pHeFB2akRYOS9PT2xRTWZCd1QxSmdveWpobGMwTExzRDR4ekNIQ1pWQn
-pzVWs2TzE0bFM3T1p0dzRCU3BTYzBjNCtYdUUrRFNpRDhpMHFKRXphQUpjYzRnSldxR3l1S1ZNcnhvdWV0LzQ3clZpYzBja2hlZXI3TXBDbkxNc0VzU2UrZS83d05ycExqRTdSUEJJeUQ4a3dGVkFRbkpVOE9r
-Ky9FamJYb1JrYTJxWFY5VDA1ZXNjT1JOSFZCU2t1TVVEZXpuRnk4R3J1bm5OaDkrb05KTnEreHpTWkRKUllNSnlpWTZwTzhnaVRHWjV2QUEwd0hnVU1MUlJBNVgzM2tFbUJyaWo0aVlwTFdWSWpWbjNMSW00a1
-pMeXMwNUU4SThCWEhhNHQ3RVk1N3dnZnNyYlg5RTV2dFdyODZUZDc1N3BhelNWd1NmNGsrV2hQNDMzSVBnYnliNjBVUnIxdWJMNis5ZWJHTkl5d3FubmNCWjlzam9HclQ1UmVZZ25hbHFWN0hyakFjK0oya3dl
-WFhJSE1lOWxpL1B0VEpEL2tXTHMyU2x2a2N6WWhvenJjSTlNN0tTWlpXYXh0RVlvODVueEEwUnZSQmI4RGJPR1Y3cHp2T0wzRlFGVVRONjNtUUZlS2JnQ0JheUpGRnNMUHI4czdVV0tZUFplTThibDhvdHR5Nm
-FNZ2tqNFgrYmtwS3M0OHdpU3lSVlVKQnVPMDQxTmZYYU51R1l3blFHalEzZDVvMWxIU1BqUFYvSHZoeUFWMEx1K0J4SEV1UnFxT3MyOG0zWVVHQWJvZkk3UGRPdXRYNWpnZFFxNGM4b2FlbGtEaDFva2JYcjNm
-UUxIWVM3NXRTZmI3NGlibWJCcmZIUWhtaEM1ZzN4NGJPT3NIUlJRb3dMRVZiazlmQ2hWa3NRZks2dFg3S3pVeXl4MHEyM094STZJb1IvTUEwNE1qbkhqTjhuWThPbVF2bll4OWZKbFZlR25VQ3FMZkhVL3R2WG
-pzZ3pUOWNxUVh2Tm5LVmErZTM1Y0lVaXF4eWFqdCt5dXNNTy9RMzNvOXpjcDZnb1hYN3R2MjlROHppSGdnZ0xobi84bjZjdEtGeS90bk1EVEI3eFFVU2tBN1EwaURUWE8wSmlockoyc0d5SlV6Y2NjUXFLenpp
-TDZZb1hkV3g0NWt5N1RiZ3ZXWnBqeVgrWlprQStJK05NcHdzbThISDR1SWw4WjdJdVg1RXJILzdZV3BzYWdWQk1sMkJHc25xQ0RYQnc1S0N4cWQ1SVlMcmlNYVVEUVpNU1BKQ1ZtVEtTck5nVHpKVS9aQ2J2eD
-M5dHZZWEFzU1NMWlZLN2R6VmFLZzNLd1JGZ2NvZ1AweFJCVW1rT25UenN2S1dEcktZb2NCUDNURmtneFJ4eENtL2FNVTFCL2xIbm9HR3FZckhjZmM5U0ZXQjNYclMxUmVUbFBCa3hVNW1maEZ3bjFjekU0NW1r
-NzQ4ZGFaTVhucTJUczVVZFNwNWtjeG81RGVuQzczN3lvOVB5VXoyOGFidGVUZEtiYnltM2FSRjQ1VHNSN3NtMVdmWEJjeEw1dzVpaFdjM2l6WnNMN2JyUmZzNzVnUGlaME1ja1BiWmZwTHZMVGR5dlhLZGpRMU
-paeExlRHhtbEROM24vNWIvZEp5ODhYMjl6Yjl2VVJDVHlaZnVPQmVjSmNxemhXeE9DdmZ4U3Zmemd1OGZOQzRyWm1ha21Lekd0RU5PY1NHdHl6Ym5EbUk4NXdqUWRGM2FvVmlzcno3UkFnVHUxSTlHS3QrdEZW
-ci9yZUpLa3VycFRQdjA3TDBxM2pvV0pCUHI0ZjFzdmQ5Mnp4QnhFWUthZWVTNGdic2FJNWludDYxVkpVc2xtd2o2dnlFaG9jaFhIUGF6WGRzODlVMnVoYkN4dHdwMi80K3BpMmJqWnJZdWN5ZUs3ZTdrRnhxVE
-taK2ZnMy9qRVJsbXlKTXV5aHRQdlFoQ0lTdklwUEtYc3U4Rm5KRGhtbXVLanY3eE9YbmZ6UXIwV0Z4dHZYT3ZpV2tueGVNMjF4ZFlKc2NFT1htSWNSbngzNFc4Q1hBcXpTMFRVQ1NEdnFEbG9kUEJDdmhuR2hR
-WEYxcHJ4Yk9iNDRrTStKdTlKSllHQXMybkxsaXNXQ0p1VTZrUE0rRFA0KytIRkpHSHhHOSswVFA3by85c2h2LzJwSzJUTDFnWDJPU1lyaVlyUlpJd1A2VHplOGU2Vjhway8ybTRtS1Y1VFNEdGUyZm1JQmNxUT
-kvb2J5MVFEcHRycWtFTUhXNlR5VEljNWNFQzhHRnVKZ1Bnd1RmZThKTkpZN1RSaXFaSnc5VVkzTm94emVMUDBGeitya085KzY3Z1NzVS9TTTVMa0l4OWJKMi80cFdVV0NUUGJvSGxwWVY2N09nZk5lOHEwQ3Vh
-enBXVlVNckhjQ1hPUzZRa2lnQ1l5RGVHZm5XdDk0WE03NWZqUk50dGdCL1Awelc5YlBySjFlR0NlVGd5enB4RTkvL0dTdGpWcXkrcmZhTU1GSmFPNVp2dzVjUWcwSDNMS2xtbnNySXRRczY2UUdOS05xaEhqZ1
-lRQU1sRk9DRUVxLzZYTGNnUkhESkUrMTkxUVpsNWR4ckZzZUZOY2ttNmVWdjNWSlVrSStKbzZZSXBtNWFwY0M0VmpRYk9idit5eCt3VWtuRGhtajRnZTdFV0JKaHdjY0pQM0hEaHJ3R1dFWWJaQS8wRFJPTWky
-VGFBMFJDVFY0UTFxcWlIczhkU1BPRkk1UXJxL3FlSWtNejg1WEw0Y2Y1Nzcvbkp3NTdnSDNMQ3h3RXhUTXN3eDVteFFJZ2FZSEdhSGlGNlNXVlZCQWlqYUV6dW5lS0ZJbG1yRHNLY3VYdUdzK1pDdHVHZFpFdG
-0yR1RPeGtuM0RwZ0tMVU9HY2lRajBUSUd5WEU3TGdjbVYyWjJNVTRvNVI2WTEwSWFZNkNDZU9xTjR4K3hwUkZxbzlxd2pJMDRhVXQrakRYM3kzM2lTNGpHZ2FKaGxEejFRYVhHZEE0TUVXV2ZhbnZrRVNMdHo0
-cmY4Z09KRkhsT0JmMFoycTJKWkZPWXBsZ0dCNFRpd0hBSW1UZ1N6UTBRYUVGTzB1c0sxRTZRa2lpWkxUYnJwU01ZTUFFMkhvd0x2NEdNUHExbXR3UHQ0L1EybEZvaU5xWWVBeHZFalJBMytHVEZ0V1JLVkhvNW
-5aZHhzZXowR0pKd3dacDZJa0E1SkpvS212YzE5aGhZc0xyZE5ZdUpaazFCMERseitMQmRpQjErV0hER2Z4dVl3cEQrY2I2QStBT05pRmhQVHRHU2FZNVVHOE44SHVEUm1SeU5paXFJTjZURjV6NXdobmxLeUlN
-VXBQQWt4U1hGSVBQWklsVGs4K3ZvSDViWTd5aTNPazJpVithQUpJK0hHeTJxZWxySDZnc1JXdzQ2SWJYMEJDU2VCMlNHaWJaL1dvTFpOK1BibFM0VnQwM3lqeGpNUXNBZnZyMVJoNjdFZ29HV3FDVzYrclZ6eT
-gxTVRvdnpSaG4vbVJXb1ZNSWNLcUNQR2lQT3RVNW9PWm82SU5CZ0hZMFAyTENSdFBob3hKMThrcjlEQzJhemQ0bENZZlpFSTVhcW82TEFwQ3hiQzRwZ2d0bkpoV2RhOEY3cjh3alRKelUxVHE4QXRqU0t0QnZY
-R1VDTU9telR1TUhORXBFRjRaUTFPYStNb0tZdExuVFlNbnhPUEV1MktwQ1pYVTQ4ODh1RFpzTmsxTE10WDVxcFp1c2lXQXVsWjRXTnVnekVnaDRkdnJrenRtSmhIWmFzMkFzdlB0ZmZiSy9VMkh5MkZ5V0xHaU
-VoaldKc3hlWTlaeXFvS0lta0tTbkM3eGJVMjVLQ1haNTNoRTQ5WFd3NmEzcDRoZWROYmxsbFlHQVFraWlRTys1QVlnRGFLYkNjblFwaWxUR0V3VHJhY3JLMjlFVk1ZQVM2SG1TR2lKeUhha0JRWW5lZnNZNXU4
-SjZRTlVzYTVOanhiMlNuMy9helMxdTVCeWcwYjgrVXRiMXR1R2RQOENveTVEZ2pHR3NUcTZpNnJoMGhnZ3JJR015MU1SUEtoRWxqdU83SUFsOGJNaUpBbldYK2ZqZy9yOUwzZWx0WXBLSEx2STIyZE9BSWVRQT
-RDbXcvdWI3WU1hVVROSUdqdmVmOXFpeVR4VzZ6TlZXREpjR0NPazZQMXcrOTlYRDcyZ2NmbEZ6K3RHQ0dqMjhOUmgvcHFLYkR1RVd1aHJjVTViRUJnbWw0ZU05dVhzNFVhbThpUXB4UmlGcFZwQ2VKVG5TQTc5
-UEtZbkZWbk8rVzU1MnB0OFN5ZVVqWm1zVDBuTEtoNTVzdnZ5ZS9HYTdIdkNLZ0w1Z1ZadjhqNzFOUmtDKzhETko4cndyQVVGbVZZaWc2SVIvNVRGaG5UekVIdzkrVXhjMUpFQzZJUkNXa3o4bW5qRUUzamRsQn
-g1MHdRMXNNNktmUlM0QkQ1T2UrbkFhOEpXTnBEUHBhOXU1b3RzSm1EUFFKSmVZOG1RTkJtR3VTcGNhK2o3MmNLakNKWTRjOEVQczlPSGJrNkNOa1VEb21OeVJqWDFka2Zuc0p3S3ptbTJSeHpIckZ2UlZxQWcx
-MTkyVkRHaUtNdFIwNGFXblV5Q0JPTWhnMUxvVHM4SWorZkp1akZPWTRkYVpWbm5xeXhiYkpacDBjS0RQWUpkT2ZNN0FTK3IwcUUvSUZmbkpISEg2Mnl6V2o4ZDdHQXZ5N21PS240RGZwaDVESXZYd2RzcGxwUW
-xDNXNpb001VC9BM3BuMkF5MlA2RWp0UkRLakFkSFc2VnFOMTg1U0lFeEZpenZYU3dHLzk3M0g2c0RkRzFXbVIwMGRFVGgwV3FUemhsbFYxdExtcGtTbkMzNUlVZ1MrLzJHQ1JOTVNRa3Izc1RXOWJibHFSNzJl
-V2hHNVBmYkt3UGFVZHcxZStkRUMrOUxmN2JZT1lialdaM1RndFhFK1hnMy9BaTUwZitiMGVYSmQ0V2pKNys2OFhLT0hjKzlGVkpuaE5tVXNrOXcyV1JFMXRkMFJIY1pGN0JURE1IQkVoUnJjUzBScEVqNXhjZm
-IyRUpITWVoeWNmb1hCbzFJcWpJZ2RmRXpteTEyM2h6ZWFscC9XemltTWlKdytKSE5zbmNuaTMrNXdsVnZ4dUVuQUNnMmQweUJ3MDdNQ0VFSklybEJ3dzY5Zm51eE5uR0w0NkJnZUdwVllGbkJVT2JObFdwKzla
-L2VIUE9ROTRxZWtBSjR1SUhzYVBrM0hNNEFVMU0xTS9oM1RlNURRTFJjRktmOHhUekhiRzA0MzEzV0V0T3JaZ0FjWmk1b2dJSVFodDg5SkNSQTI0UUhyQ29IRTVFQ1lDeEUrcDFvTjRGY2Rkb2ltY1B1ZFVLNk
-w5R0hkeTdjNE85MWxUZzJyS0NwRVRCOTBlR24yVFc2aUtZTEhTL09XWEdpeU5QUTRJeGtSMzNyWFlOS01UdnZESk13VHVoOFZOMHQ4ZTFZcnMzb3VwYktiZmVGWElYQzMxZGZCVmx4MlBlcUJqb3I0WXE5TXhj
-bHlRYkZqQlp4ejZmYWkvVjBKZEhUTFUwbXlSUk1sS3lteTl0OThqRVRoQ3VxUlVMQVBMeldFdkRHMGk5bmZVam9Mdlo3cStFZzB6UjBTazE1dUx2Q2VMTjYzRCs0dEJCY0IyaERxdWhEcWpaaWRUSDZSYlJKQ1
-FTcVkveWhhTExGcGhtOVRJb3VVdUt6ajdaVEFtaGNDWXE2eDdwQ1BnWHBlNG45T0dJVXVVKzhwTDlYSkFOU0tDbnArZkx0ZGNWekt5ZDhWc0FZSDIweWxrNDhacHdsak5oK3lPeURyUDNzQ1dkbHAzSk9haURq
-RGY2WmlPWWpIc2N1K3hJRTZwTlVIZDJxR2RIQWVmbVhXaEJENitSd2FPN1pXT0U2Zk56S1RhV1dYQ3pzVTAzeWpCcUpoaFdiSXNXd29LWGNvTnRQYVowKzMycmRlYUFjYkh6QkV4RWtqek9BMHpNbzVBa0NDZE
-56bnB5WW5JUWVJeXMxeVd0eFhyUkZadGRQc2xzcGMrZVZCWDZTdWZRVXBNWCs3UnFZSkF6dFRXcG5Idk9SNE9IbWlSbmE4MDJKbzZCSDN0aG55NThhYUZObTk0a2FMSEZMNWEwRGhEYWlJeXAwY1pNSmZkams5
-ak5BNURBTzhZSSswSXIzeEd4OFFPVzZ4ODhlVEQxR2Q4ZlVxSlI0Sm5EcXYzNHpKY2VWS0dheXFrcDdaS202TmQrdnJjdzdNSUdqUFV3ZDNZYWIyUXJVSXBMY3VRRkswclZtRXd2bVlYS1RDYm5WaThZM2FJQ0
-02VEhBZnJOWHU2bmVsSmo0ekFJRURKWVFLU1NvT2t3K3UyT01JdFhPcVdVSkVIbFNnZFBMRzJjNVNlZzVaazFUK3RqMUNpR2RESTNPTWlFc0g5NitxNkxFY3BBb1NNc1luTXpiY3N0QzNLWm9PRWtlRCt2WDJE
-dGc3Uzl0TlhNcENKbXc3QzRNdEc1NE9wVG1FNVVHTStwSkMxbjFnamZBWXcvVEhkNmVqVURMVmpLRXljVUxJTXBhVkpUM0s2TkhYcmE3OGpHMXUrdVNSVFhON2QxTCt5TjhhU0pUbVduckZQVGRtelp6dmxsSn
-I1bEQxdzJGd2NzME5FR20xWUJXRHM0QVpUdFBxMEd3ODJFeGl1UFRtQ1E3TGhwYXRGMWlvQlZ5akpJRjI0NGNkRlJxWmJXbFd5eUFrZkRnczJQSVhVWUl4QUlDQWM5Tnlzck5pN3A4azhrY3lKWGJsamdlV2k4
-YmpVYldNSHlvZGlHN2JjcWZVNjdrTGo0TDFsVEFZcHppdVhKNkpmMzhtUHh4NzhBREo2a2tZZS9JN3Y3ZEJxR3d4SlkwZElpY2hQaDJXQmtoOVFudkhxQXhPK2JHR1dLV0tjU1FmMk9STWZCR1FjSHpOSFJGcU
-1SdmJ2dTNTc1I1djRsc1Rob3FhUW1hSVFrdWdidnh2VTJzMXV0K0R3bHQxZ3BFRk5XTVljZkpldVpHUU1hVnBSSllKeEpkZFZXRHFPTUJ3SjNVLzI3bTJTcDUrb2tjYjZIaTFxeUxLVHZlNFcxaHE2UERvUlA1
-dGh1QnN6bDRlbjFHZlRKcVNzVURXUW1hYitMTXg2T2h5aW1IeUJlUjE3QVAvZ1k0OEloSWFVZ05vMExSMUpraFJ5TWNORlJTNFRnU2VYaDYvTDFXdnl6TG1GTTZtdHJWZU9IRzZWeGtibnRBbUlPRDVtam9pUU
-VGSjRJZkJwTXZpYkhZSnhFcUFORVNSNlpNNWRwbHB3dFpLd1VEVlNwSkRvYjd3cGRFbWthYytkSGs1ZlFmZk1QS1lpOHJkY0VrRm1INGVmL2JoQ0tpczd6RFBKVGs2MzNiSFlzblpIM25xMlFKbVpFaURNak9M
-ek9JdVhabytPVzhQbldiMkduOU5PdkJUNGZyeERZZGRVNlZEdXFSWU9TYjBxMlhRMUx1aVVGaTl4Q2JJdWhQc3RwdXQ2SFZjWGwyYmFocW5IanJiSmk4L1Y2eldwUkhkT2dQTXh3MFQwRGFpTjBkSHFXaHROaF
-hNQWJlam52SEx6elF3ZFhxRmFFRE1UcVFOaElaa3draGtUS1JuOTc4YXdpY3RDUWlhcXYvdXRZNVl5bnZreVVnT1NnK2FxYTRwTmVEZ21lK3Rvd3ZPam8zMUF6ZVptclpJVSs1dGRuMUp0ckRia2pIdytoSWlv
-TVArb1k1NTVVbEFXTWtmWnF0cXdXWS9VSk9KSmRReW9uWlI5UGFaTytOdHJQSFl5WHE3amFvQTV6ZjcrekNtYXc4bTNaNEFSeEo2STJqcldOSXpWdkdsSkErTEZSUHZodFdOdWtBYkVoTVQ1c202cm1hU2Nacj
-lsSERPMjFTY0NIQThJcFRXOC9oNXpOd3hIUWxYR3ZZUHlvLzg4SlMrOTBHQWtaSW5UZGRlWHlpMjNsdHUraGdEaG1XM1krTEM5eitZMzNaZ3daQUVHclA4RElSNkdPbVI4Mk1mMFRoVEtyTlhWcTVkc2JBK3Bh
-VXIxaFN3MWYwbXBzekxHYXhJKzQ4Q3N2LzdHVXRPT2FQSVR4OXZrK2VmcXdtZkZYdXdTRFROU0kyWUs0a2FIaUphM1ZQOUcrekdmaFdNR0lXSk1nd202N2dvM0Z4anVXU1BOeUluQy9WS0JKeEN6bDAvd3ZGbz
-BqMEpaR05MZW5sczgvT0JaK2RGL25WUVN1dkN4YmR1TDVKNWZXbXBlVWpDViswY1RhQmhJeUY0VkJKL1RjZEF4NE0wbGhTRnppU09OU0tmRHdmUDZ5Y1hwUUorOXBTdEp6amFGWkREc21JRlkxSW5yeUM2OGg2
-c3ZOM1JBWTdOU2hmSVNsZlB5aS9WMnpqZy9tL2VZMlNxQmhDVUxuYnVjQnF1dlVZSW9RVEZQY3dyVW50SHhZSDdoQ0FudG5NbENmMnUvNGg3c01JWDNFQk1WeDArV0k1Y3FQa1hJeG9QZi9NWVJFeWdFbkRrdz
-FobHUzaElmNDBJSEo5UXR6WDJ5WjFlVEVYTndZRWl1dnJaRWxkNlkra0ViZHVtQlpjRjNQTUJVNmxEQnovaGxvNDRQSzV1VEpDMlpmUzVTYlU5OWNPSDIzeGRpMmZKYzFZeUZhZ3lGYkY4UWwrczB3SGlZR1NK
-NnFjWjVzbkNKdHJEZWxyL3BHcG5iZ3lBYnRqa1MwdndtQlZNUUlLNEorRzJqbWtFUUhVMmJvalpXb1pxODZXNk15aHdjR3ZDNzN6NW0weFQ5ZllOU1ZwWXB2LzdmTjlxZTl4NVRsT0dvd1k5UFRTTzI5a3BOVm
-FldGdOZFBMWVVqUGkwYmIzbnR4M3dwbmRwMDRldFJYNXIwa3BXcUVhbEN3dW8yYmFLTnFKc0xSWWVmT1UrcTA1N1ZXdDRUSjg1cEV3K2JCelZlTnVhSlI4d01FVDJ4MEg1b1BsTHJFM0ptSnFrU2tTZ1pNcmw1
-Z2s0U1htQkg3a1AwU05VcDU4WlAwbnRtcTBsTU5BN2ZoYTlQaDc3cjFVWWpKWis4NHoycmJGd3p1aVdadmN3cWZGV3d3ZWlCL1MzUzBOQnJLK0JYcjg2VEZTdHp0WXpPWTJxcWk0bDVIMDB6VGRzUG0ySTRhVm
-k2ZElEWTFKb2szY3J0WkRYbFNZV3hkR20yblRQMkZveXZhUVBLeE1HVXhmZS9lMXllZmJyR3hwWTRsZGJOVXNCOEltQm1pS2d3b3FEOXpMMU8xRXFZZERoUVdocGxHTWNONTltL2swQkU0OXYxQ0c0bWpwTDd3
-RGFiM0YrbUhVQytLd1BuOFRNOW1NRG5JOFl3Q0RmUklDUFhtbVc0b3JxeXNEODkweFlEdHRSSjVNcXJTaXlkSTFwOXhDZkRXQmhUM0tLSHdzMDZuZWRRYTc3cVhKS2NxTU42R0xad09zaFBSeEFKNmhTdERER3
-BSenFOSC8zblNmbkhMeCtRRjUrdk4wY05kVTJZNEYxdjBNN1FmbU12QVNJd1kwUkVvSVlKMk1aTFNxOE5MSGhiaWRoVUp5R1dOVFUzU0dpU3k1WkcwSzVDeUdvRDRpWlpZUUN4TVlXSnNFRWJraWx1akdDeWtn
-SUJJbjd6OU1sMjZleHd4UFRIN0lJQ3VIV0FWV2M3YkM0TzhwRkI3b3B0UmNZeHlqanlUTVNSbWxrNkRmS05RUjNqdzZZa3F4K0l1T1VLWjVZNjdXZHZEWlNCMWZoUFBGWWwvL3lWQS9MamUwK1B4cGpxZVZkZV
-ZTd2YvUEJhV2J3NE93N3FOVDR4WTBURWFSS3FyM0xURnE3N0ZDbGRyQTJscE1Tc0lzajcrSDQzcDhoU0prL1dTNEhmRVJET0tvRWorMXh3TjJUbjh5dzFvUWlMSXdEY1QrcEhnTnRqaXZiM0Q2djFtaVFQM0g5
-R1h0M1pJSjJkVGpNalFhWkJadzBRS21Sand4UEh6MWxPVmN6bVJZdXlSOVpFR2dramllaGphYWNCZStUa1llbnREVWx0UTVJMGQ3SWVFWWR6cW1wRU4vM0UzeDRzQUdiYjhuLzdmNGZsKzk4NXJuWFlhUE9HMU
-IvQjMyOTQweklsNFJxcmF4OFRPODBpemtra2YwRVJmaDk5ZUVIbWxWaFB0Q0ZlVEQ3R2FjUFlVTTByOC9RaFJFdzNzS2F3VXpVYTR4M0dlSHpHWWE1NU5iOHdhMW1MeURpd3BrSzc3YlB1Ynp5R1hzTXlEYkpr
-bFFzS2g1Qmo0TWN5eEdveTBjd2lZTkk2MU5XNEdFNVdGL0FkR05FNE13eHV5NEVtZk96aGF0djhNenNuVlc1ODNVTGI2UmVuQ0thZ0ZROHI0dlF4clIrdEw4elNhWlRabWt6N3JSb2RHejUzSUVVT25RMUpYbT
-ZLelZreXQwcG53REtza3lmT3lUTlAxZHJXZE04K1hTdkhEbXRuMGR6cnlxUkZJT0V3WlgzYk8xZklTalZwM1dhbzRmSUd1QUN4SmFJSFV3bTFTcGk2YWtjVVRNYjFXNTNUQm84cDQwUzhteERPWWlXVmRJenhT
-SWVCZGlRek9GdDhzOWlWVjFMMnQraDd0Q3ZraElDMFB2T1VrQTh0U0dLcWNUU2hCMExCbkJqeG01VVZIZm82Wk9NYnNwUDE5UTVaV2d3ZlkrbzE0MHlSa3R0eEs4aTJlMWVUUFBab2xmM05SaS92ZXM4cUtTbk
-50SE5zZk1nWGRFSTRwL3ExN3ZoN2l1VzB4K1RuMmh5SHp5Yko4NGRUcEZhcnZ6QS94VzFIcnVicEt5ODJ5RE5QMThoVFQxVExUdTNFamh4cXMzcnI2UjJVd3NJME80YzZKZERnNm10TDVkcnJTbzJjWUlyRm1o
-ZVlBU0pxNi9vRnVoQVN6K21pWlk0c0FMSVEwb1pUaGZrK00xVlZPM29OaVZaa253dy9SMFljSlo5amZ0S3kvSjc4Tnl4L1ltRXdZOExjQWhsV3dsK01PUDV6di9LZVZlZjFkVDNTMWVVeVZKT3JobFNBNURBbG
-tvUklGb1RVOFhFbWVuWEhDTVpkbUhxdjZVRm1OTVpZNzNydnFuQjV0QnljUjJISTA4TjB6U2c3N1NwVFFZaHAzZjZRUEg4b1JWNDlsYXgzQ0VtcUVwTnBua01IVytXRjUrb3N6TzYwamdGN0xhVytFclVvWFRa
-dktiTGxZaFNoc2JISEp2RFpXMy9UbHNKd2VaMFZFbUI4eEk2SVRtcWRLV3JhVUlVRnpVZThLY3VaV0IwQmFCeTBKR3NKSVJTZlEwcUN2dE5VSTltaFpFdlJWL3RPZjQrNXlibUV3N0ZHRVFKQ2JwWkxwYVk1TW
-I1TW8vdXZXZE8zWm0yZUNUbzl1OHMrMW0rVC9Temg0VEVZSDVFVUNianJ6b3hRMFRHd1NQbmdnZGFSWlUrYnR4WlptdjhSd2ViQVU0ekhsQ0o1aitrVUVVb2RsdXFXSkhsOFg0b2NyMHVXVEgxc0hFYWtEQ0c4
-ampJeEg4Z1NNZmFGM0xLdFNFM2xVbm5ETHkyVEcyNWFxUFhXS1NkMVRFc2VWR0pOdDI1ZllGbmQ3Tm96VUdlSml0Z1IwUXNKNDdlenFnMGhKUEdtcExaWXZNSVJOYkpoZUc5ckQ1VmdDOVNzOUF0K21WL0VoT1
-Z6SnVXTFN0MzNhRDVMamFGL1k5NUNac1ZFU0RnV21GSHJOeFJhc0hlbmFpR1M0M1pyajQ1bVBIV2kzVllRWUhJUmJNMHI0QjZ4NitXNXBtb2lMUmVCMGpoclNOOWhPV09Va0t5UHRIdmpOV0Y4aUxXQk9UL044
-YUg5VkMveHlva1VlZUZvaXJTcjFaK1NOR3ozWktNZEVnZ3ZXcHdsR3pjVnlqWWxJR1BBdDc5amhWeWw0MGZTWjZENUR1NXZrZVBIemxtNVNadXhkZHNDcTFkMy9WalUxZHhBYkUxVEp1dkpuVktqR2hGdGlLWm
-pYU0hhRHZpRzhhK2VuQnlRRm9KQlJyUmwvZ0pIU3N4WU5qVmxWVVhZZldkQ3lSdjkzV1FiTy9KMDVza3dWZEVBclNwSUF6cHVwR2RuY2hwdEFNblJuSm1xbVNBSnhZMUV0QVROWGNZNVl5QStKdXBoTlF2MUc3
-di9IYTlmTkhLdkVPWStHcEd4Tlo5TnRRdzhqQkt1cXk4a0QrOU5sUU9WU2NySklTVll1dVZ4M1g1VnNWeHpiWW13KzlVZGR5NldtMjRwTjlNVGk0S3lNS1ZCYzFCUFJzUzJQaWxmbUdsanl3VUxNc05GbTJMWj
-VnR2NKRWNiTkNvSFM1MXdxQ0RDRUJFaTRkRUU0elhLMk0vOGRTNTJoR0VOUEkxRzlnSUNvVmV2eVpjUGYyeWR2RnZIWWl0VTBMSlZFeEFWY3VSSW0zempYNC9JVi8veGdMejBRcjJsNFhmYmpya0FhQndyRVVX
-S0d0QW1KTzdsK1Fqd2RqM09hSm5OV1JVT2hwZ09yQ3RMRzVKamRVbHl1aTRrM2IzRGtxRW01VTAzbDhzblAzV0ZmRVRyNUpmZXZOeENBSEZrMlcvMGdUbUFuOUxJSzBqVGpvcjUyWkQwOUE2WmRlRVFMbStBY1
-JFYklwcVFhQVBoOFd6VHNRdU5SV1kxNWcwbkE2NURDMS9zaUNKR3lUaGtLOS9mL05ibDh0dWYybW9ia1pJWEJzMkU2YlYzZDdOODhhLzJ5RDk4YWI4NUxsZ3hqeVBEQzVvajVQUVpTWGs0R0tlaURYdEoxS3ZY
-aFpoOFB1em5XWEZjNFMyZEJzeWlDQTFMLzNESUhEU01FWWNHQm0zaDhkYnRSV0h0ejNNTjJUSXhJbW00dmN0MGZqN0JXRHBHNEFGRXBGNThvcXN4cHdVWWcraEtNMEFJT2ZCdTRrQmdhb0VsVU9TWllYa1RtTW
-hrL1N3QW9VSzQzQ01NbStuMWxyY3R0ekVRVVNJSXBQZWk0c244MHkrOEpuLzFGN3ZsNXorcmtNb3pIYlplRUxPVzN3TmVJYVlUWEY1SEg5MmZBOXg1L25Ebis4emRiUHZHK0l6VkMybjYvdG9iZEV5c1lQclZT
-TUQ4NmpUTjBzRWhKYmFPR2lxcmsrUm9wWnJDM2NPU21SNlN0ZXZ5WmQzNkFpc0haYU51cUFQbUJDL3NCOTI5YzNKMEhKM3BJcGF3R1B5T1VBRXVqYWdUMGVRTGdXQzZ3WWVhTVdXQnc0WDVRM0JoSzhZVjNMd1
-h6aGp0UzNTTXlKNkErRUVzdGxPL0cxYXlJSGQ1K2FseTZFQ0wvT3UvSEpMUGZPcEYrWXYvczl2MjE2K3Q3VEpDUWlyQVNnVit4Mk9qZVJEcS92N0I4dzVxanU4NWovTWhHZWVWTDhxU1gvbTE5ZklQWDMyZGZQ
-NlBkOGlkcjNkV0JaMkIxYmIzbGs0VitwQ3NyQUN2blU2V3l1YVFkSFlQeWtLOUwwNFp2S1Bjd05YSnBlRHFyS0FnM2J5N25FOGVWS2FCQWx3ZVVXV0VNM0cwUVpCZ2lOakR2S0cyTW5OOUVCRWdYUWtBcjJEd2
-5ESnBqZWV3b0RCTlB2TkgyK1RMLzNTVFhIKzkyNWFOdVRRY0tKaGh1M2MzV3F6bGIvNjNaK1QzZnZzRitlYlhqMWpZWEdORHR5MDY5dlVENGZnTjI1dHg4TjRMT2xFK3pHWHUzOWNzWC92cVFmbkVienlyMXps
-cW1kRTJYMUZrMStBd0VoTDBVRnVscmFoMTdPdDlraGhTYzFUU2hxVzFPVWwyblVpV1RyVjBNN1cvM0xDaHdEU2kwOUNVTy95RHk0Q3BublI5SHNCYzR1Z1lNY0NsRU5KR25YenJYUXorVW94YmlQOGsyZ050eU
-dUNyttM09hK3BzSEhkZW5NSS94b0JxTmN6T3IzMzFrQkdSK2NZdi90MzFXbnkzdHdNT20rZWZyVk16dFVHT0gydXo4Uk5CQXJhVVNpWFhDekVhQXMxV1dwb3BKU1Vaa3AyYkpvVUZibDdTbzZtcFIwaFJYMS9Y
-YmRkbEVhMVN6a3c3cGdZKzhjbk5jdHZ0aSt3ZW1JZFdqN3VlZFZGRzFQRkVtUklKSHBUZlpRekxRenRUNWJ2UHBFcHQ4NUNVbHFUSmh6NnlWdTU1NHhMOW11dUdPOWdKZ0V0KzVlLzJ5VU1Qbk9VdnkzYnd5ZC
-s5d24wWjRLS0lMaEU5RUk0VEI5d3JFL0JMVjFsR2JtNDAwUWFkVFhnTlVIbW1VKzc5NFVtTHB5VE84M29kbi8zK0gyNVhZWE5WaHNzZVFxSU5jZG16WVEwNVVYSGdFQ1puejZzSHhNVGp5YlBiNCt0QkFCSGF6
-eGtJbUllTXZkVHMxYis0TG1hd0k3Sll4b0RmL01RbVdiK3gwRDQzcTVRUXY5ZWVjMFNhWXNkbWZXS3EzbEZmLy9lOTZiSzdJc1hHd3JmZnNWRGUrLzdWc25KMTdzaXo4c0w1bFBGeVp1by9xVlh3d0gxbmhBWE
-JkOXkxMkRvUnBqbTRSZ0kwLzZ3Z05xckpid3hEZzZFRnd4dk9KRkliSURRUWl1VThDQ0JlMDdVUnF4NDhxWEJPbEpabG1VUG4vUjlhSTMvMCtSM3loNSs3VWo3NGtUVkczT1VyY3N6Qmc0T0RDWG5Hbk9STkpR
-Y05yR042eEFlWUUwUkFHZ3hXd2hQT2RzT05aVWJBMzFLTnNtSlZudDBQSXRna1BsblFDUU9FaEdHeVRBazZCRHhZbFN4bjFUVEZJWlNkbldURVp6SWV1T2QwWTF3NmxJbDBwRHd2ejBTcGVCNmVteUpPcDVoek
-hkSFhpRnp1MEM1bmxpTEJSTktzMys1QzJ4SUFrYlh4eUVObjVUdmZQR3BUQ0JEcWR6NjkxZktjb3FrUXpNaXE0NjBuSjRLSGs0Sm9HTFFsNWlYeGx5endKWFVqbjJOZU1pMkJTWW9KVENJbzFobVNzcU5FRDhM
-WW1LcmdsVFdJcG9YOC9SaC92L3BNT0ZwSlNleHU3cjZiQkV3akZnN0p2OStmTHZlL2xpTE5MUU55elRVTDVFTWZYV3VKbndEYUdXOHc1aktkQ0N2MGZUckZpd0VyNGljL09pME45ZDF5L1UxbDhxdS90c0YrUT
-MxZFRwdk9WMFJQSTNvaElVaWJTV1lWVm91T3dUVE5jQlBBaVFCSExyYnM3alhoSSs2VVdFbFdQa0FXQi9lc1hqTzY5Nk5jd1BsQ0lEU1o0Tlp2TEpBZFZ4Zkx6YmVXeXh2ZXRGVGU4YTZWcGpuZitaNVZkazNN
-MDk0K2x3enFuamN1bFR2dlhpTFhYVmRxaE9mM2tORHVRYms0WUk4NXd0VGl3QkhHWi83R2s4REl6L3BDY3FZaEpBT3FaREY3MTY3TnR4aFN3RktuLy9qK0Nmbm5yeHlVZi8yWHd6WlcvdUVQVGxwbkF1aVF4Z0
-5sSm1DZXI5bi9ndmhkVjJmam54OGcya1Rrd0N3bGJRUHZtYTRnSEEzZmY0TEFQMFpqUTQ4UkVXM0crSWFNWk02VkQ4NFgvRWhDQXQ2Nno5d3J6aDFNTmJRYjVNUHN4R1RqK2s0K2gyWDEyandqT3ZjZ0hZWDdy
-ZnY5ZWNBczdRd25pWnFHMDR0bkRLVU55N2xXY3BZbVNmOWdTSExVVEM0cno3UnNiY1Rjc3N6cHB6ODZaZXNOaVNFOWVyak5wbXZRK080YUZQNUM0QW5HRk9jbXZUMUUxd1JUR0pkRDlCamlKWWVGdXdnSm04d3
-diVUhpSm5DUlJvc25tSENHaFovOUpTQWpYc29zRmN3VkszTE5ySEtPbkRIa0dBZitPcEduSXJqY2cvSGhENzUzd3NhZ3pzUVZtMy9ENHpwNnZpTzN1dzUvaHQ5d01zRVMwNmxPLzF0dC9hNmVrSkZ3b0cvUUlv
-Z0lwMlBIWHd1blV6QWZ5dnVGU2xCeWxMN3Vsb1ZHMVBITVRJb0dzQ0RvVFBpYmRZcWtJQWx3YVVTSGlMNEZyT1oxM0dLeGo5cElMRnRpYk9pL2ozczRraUZrVENNd2hRQTVXUEM2eExLWHVUazhJOFlrNERua2
-VEUnM0OEtYWHFnekFhZG1FRnFYUDhlUno3MjYzNTRIdTRDYXBpeWlqdFNHazYxZmYyMHU1OS9xZFZtWGlUT0kyMkFGWUZLVDUvVWQ3MTRoNzNuZmFoczd2dkhOeTBhY1MrTjFTQlNGYkcrWXByeEg4N05RT01D
-bEVUMGkwaWg0OGRDR0xOcjE0ME5XU1NRSW5Ed1BXMmdXMnFxbHBjY0NtTmxpckh3eDQ2YUxFR1FTUUhpSmlrSFFXV09JeHNFeGdtUG1zbnl5RTdRQVRPRDdreW5RWkFyRjc1UjBJZlpBN0J1dzlZYXB5Y09Tck
-9Zazg1aTI2a1RKdzJrclYrWEpPOSs5MG5MTy9OSmJsc2sxT25abEhoU01SMElQSEZFOEc1ME80MStmQjhnWE9jQ0ZpSjVwQ25EU3NDeUhjUXhyQ3lFaURvWEpDc3VzSW1TQnltakV6cTRCaXhKaEtSRGpPL3Qy
-aXMvQjd6alFkbXpteWJRRkc3eXcxdkhXMjh0TjZ4cEhMaWFzL2t2cWsrM21XREROTWpNNlBRN3FIRWZPQlVmNGU1LzF3RzZnWlNFSVB6bGJDcFl2a29MQ0RFbld6b0dsUzNpSUxRV2luc2VqWWhHa3A3dWxUdn
-JqaTVkdkREaU5nLzMrWFRLcEFKZENkSW1JazhZVEVVRkpWK0dkb3VET0JoeFpuS01HTWlKSmFXb3lzanJmODJDcVJBUmVtQkY2aU0xNDA4V2tPcUgxLzQ0TGZzdkJkQVY1ZVphdmMrczFtYWZGS1VhYUVTSnN4
-aDZXMlVDMW1HVTJ5SFVMcnUzM2EyVjR6UlV5dlBGS0tWdFZMS2twU2pJdFNGVlZwNDVoV1RIaDZzSTl0eXNYbjQwZEYwYkNuZWRXaUREdmFqRzVBU2FFNkJDUkZnTzl2YTZYcGtIUWlBaUlhMG4zZlp6RFB3Wk
-Izc3laNGZuREZWKzJVSVhkU0tLTW1RWmNWYmowOHhzMnNhcUJtUjIza2dPdGNkR3hvWWQ5cVFlcFEwaSt0ZU1ta1MzWGlHellMckpxZzh1S04vWllzMGxFeVNaWFhLZm52MDVrNjdVaW0zYlkxdWZEWlVza3BC
-cDIxWnA4eVZKVG1RN0Mwb1YwRE5pdFBQRXVXNjR4UU5zejVnMTRPSEZFbVloZHp2eEJXQ0FpNDhRRUJFNGFYTzc0UTRqemREdEQ4WXlUa01aeDRJV2JNUlJidnlIZ3ZEK3d2OGtDdlM4MkwzY0JVS0dBVEFla0
-R5Rm9RaldjWlQ4WWU1QldrbGhmMnoxWnRTS2RZN2k5L0VZeVJBZWw2QmpSTnlNeHJnRm1GdEUxVGZHV0lpU1lSSmhEa0RFQjRaSklPUTJGVXlWL0pFQjdla1FFRUJGbnpZWk5oVktrNWlsYXFMblo1YVZoNGh1
-TjZVM0JpOEo3VEcwTU9FRXR6VFhIbkkvR3h6VGV0N2RaT3RyNzdCUThwengzZ0puRnRJazRJalEwTUJ0azhvcWdNRGFCa05GQ3BDQkZDRk1zd05JZGx2QXd2WUMyOEh2R1J4TUkrODIzTGRUaDlMRFIrOG5IcX
-MxVFM1ckVDUk9lZW82Y3hyZ1VVSGNSNXhORkEzYStYQytQUEhCV2VucUdqSlRFbUpMdkZlMDhZUTBkWU5xWVlDdGVIQ0ZQUkV4U3krSU5FWk9kVXdFUDMzVGhDUWk4SUhuaGl5SWh1UlMzWXM0TEFiUnhrWDZP
-L1ByRDMzYTY4QXVNNzd5TEhhcndhU1ZiT0JtSmwxaE1PeUd0T0Ezd3JHaEQ3dkd6SDFkSXJ6NXpsMW9BYkxsMnd3MWxVbEpDc2lmR2hkVEE1REZFK2NQdkEwd01VUkl0QlZKS3U5R0wwb0JlSTNvcG5pcjRyVj
-FiWC9IR1d1Uk9yL3N1V3N5SUFPWWg4Wkd4aEZ1Qkw1WTFqbFQyaUcxYkcvdk0xOXYwZ1NQQU5PcnNNdkJqUXh4U2RYWHVmb1ZGYVRaeHp3b1QzeEZZTVNZRlYyNVNLYktjeWpvenZZaXRHQWx3U1VSUGttbGMw
-MUFYOW9XVDd0MDUzLytHdVVuU0JlNTVVZTJvWjBSMnYrRFc0YjM2ck1pWkU2Z1hkMTZVWUxlT2ZPLy9pQ0lRY0xRaUFucnpyUXN0TDAxNkJrNmJWamxiMmFIR2hhdkhXR3BGOTJ6RHR0V2JLNDlmaGpWS3dNbm
-UzLytPV0ZTQ0FoaHFrbThudjhEUHdkcExnSEVRUFNJeWJlR0R2YWNiNUUyTEVhSERVcXA5cjdoZG91cXJ0UXR2ZGdIUDVHbGhZZXl4ZlNJSGRyb1ZIMUVVV244cGloRUw0WEhYZFhWMDNmVmxzbnhacnFWc2JL
-anJNc2NKRzg3b0dlRWordkFhT1NjbnpUYUlZUkV6VnNDUDd6MWxPWGVZUi9YYWJETHc5WVdtaGRSY0E3T2JlY1VBbDBiMGJUdUVaM0x0ZHlISXhYTHlrTWdKUGRpQXh1WW53eDVaUXVZUVloOUt4MjVReHcrbz
-V1d0svM2g2WVBWREpwUFIrajU2MUw0UUNDeGpVWEs4WEhuVmduRG1zNURzM2Qwa1p5cmFSNFE2RnZEM1pqNlR2VFNJb3gzVXY1dVVnS3dqL00vL09HbmoxYW1DNlI5V2IvQTh6Q2tXcWRrYjROS0lIaEVacnpI
-UmpEMHlSanROcW1kbHc1clRSOXhlaDVDTGNTRlRJYVRwWitKNjR3NDNJYzB1d0ZDRlc3R3ZSa3VUSXl2M25vSjI5SUxQdkY0eU9XY1VYSVpkb2x3aTRTbGQ5cUtJckJLeVp4TnBRL0Eza1Mzc084ODJjWmlHc1
-RCUC9iTnliZll0L05pdnJyTjFpTnlKbFNHUFAxb2xEejVRS2RYVmVIRW43ejExY2JwOVJrUk1VNWVRbUFlT2VPZ0E1eUY2UkVSTGhmZWZNSW4xaC85N0ltaFRNbFVjRTJtb2RWTWhYSS9NNEg1eUdqS1dscnNR
-clpVYjNCNFl0QzNhc2JIR2VXMm5pRWhpa0NTWGRCVUlJVkVtckpad2p6UEI1NWdnRUZTd2VFbTJyRm1YTHhscXhtRW1raldPelZ4QWxHODVBanBIRHRZT1huTnRxWHowNCtzc3lDQmZPd1JNeTkydk5jcUpZMn
-FaYUFVNzBycmZYUXorZTd5KzdKTkkxanFtZjZoTGlNZzFKbXZxemlkTW40aStjdEdJTEFibGI3UVlTM1V3SFNjcVNXakNpdU1pVFVwQ3ZLTEVxcElabk5BdE5wdGgvd3RQZE83QnBqUkxWK3A3T2dBOWZETGpL
-SUQ5QnhFZzV2Z1FLcEpJNllPRWorZ0NjaU9nVjExZFl1RjBnR1RGYUJWOU9IdlVXSkVSY0grc0FITHUzUDJHcGJKb1VaYU9WME1XV1VTMGoydmVjQnRmQWx5SGNwSitFdE1VTFlvMkpES0pKVkhBWFN2QWVJZ2
-lFYld5YldNWWZZV0lmdFBSaVlEZGdkR0VhRFhTeHhPUlExaldpclZ1MjdYeFF1VzRMd0hNQkQwaktHaFE3dW1sZGdyUzZ6VWVxU0x3OUxFb3VFVzFJUnVaZWcweWhjdGVFdjZlbXpZWDJISXJWanRnSHA1Vjht
-T2U4bXorbkdnQ29uQlozM3hNT1RRMzk5Zzhha2cxTmY5TjViYkhWSXNTcTR2M2xWVW1hSHNRZzBlWVU1ZytFVDFvVVJZQ1EwUTBJV2FpbisrN0NFekFtSjQ0bzVxUXJianh2REwzV0xKSVpOa2ExWHFGNTdjZz
-k0QU00VCtOK0t3cUFGNExoK2ZJcGdKdVJaa1dMY215SkU0NE05QU1aODYwdTlVWU1TQ0ZKemVhWS9XYVBGdjl6ajFQSEc5enFUU2lxSVg5ODQwK2dsdDdlZlJJbTl6L2l6UHlzNTlVbUVZakJJL1BteHBkcUo4
-LzkyTGdtandIVXhablRuZTRuS3o2R2NIeWVHWDlmUU5jSEZFaDRrZ2xvNTJJcHNHNzZaTklqUWM5M3hvUDBwQVdzS2JTL1FhaW9RR1hqeUVobjBlQVJnKy8wV1BNSTB5andkMWxRK1k0WVNjb1VrZDBkUTlhU2
-tYMnNvOEZIQkhaZ3pESmlJZ1hsWFdLVExUWHFXWng1OWpMcEVGVmNPM0lLdkdmTWIxQUxsYTJCZi9ldDQrWnB4U1RtTzh3VlZtVHlDYXB4NDZldSt6OXZUT0hyRzNWMWV5U05XQm1LUnVWc3A5aWdNc2pLa1Fj
-Q1hORE8yRkdRa1kwb3AvZkc2Y2w3UlAyeE1ja1JadEJTa3hOVmhGY2dvUUFZYkZYeURzWTdySHRQSDlNRFo3Z3pIMlJicDRVZ0tRNlpKSHdybDJOT2dSMWMyUCsvdEdDdng2Uk5pV2xHZWEwWWFVOGdrMDZRNT
-dKWWlVdUF5N0R0ZHpoMzlzMzlqMUJCTXdSa2dEcTZTZXI1ZC8vN1lqOHl6OGRraGRmcUxmekNIQzNwRThLeUZoeHVsMWVmckhlMGo5NnpUMFc3ak5YYjRjUHRacEp6YTdDSk1sYXNUTFByZ2xHT3M4QTR5STZw
-cW12NU93Y3QxaVZSYXBNN3JNdG14KzNqVzFGU0hwa3orajNaSHRqL1Z5dTIzM0lybm1SeHZQRUQrR2NNYTJyZitPd1lkWDVOTVBldkNBdlc1WmpLZmJOVkZSQjNQVnFvMDBydUhQc0pXcndRa29XTnpRSUc2Rk
-NSRXZucVBlMjV4dGpHbEtHQ3c4MzFlQTBGQWYrcXlHYlNvQlV1N1V6K2NtUFRzbmYvYzFlK2VkL09DZ3ZQbDluZ1FRa3JzSU05ODhPdkZiY3M3dkpzcGY3NjQ4Rkh4RWhoRmw2WUgrTGpXOTVHc2FHekUrNnNl
-aFV3dVhtRjZKTFJEUWlPL3l5dlJEanhLN3dqbEFScExMR2hIeE13cmNyVWMzYnF1Y3pQVkZZTE1QNjk0UjZUNjZEcDlWUDVETmVOR2VSWGkvaWZwTUZHby83c3dKaHk5WWlXNDNBcW9UYW1tNjU3MmNWSnB4Kz
-JpRmFjUGZVNnNzZ0gycUdhV1RDeE9ycmVreURlYUFWUnc5VzlydUQyRkYrVDVYMDk3TU53S0I1ZTg5VWROZ21PRVRNL1BXZjc1WS8vcU9kY3U4UFQ2blcwbkdna3FlNEpOTklOT3E0OFE0cFJ4eklpUGYydFZj
-YXpOeWtuTno3ZkxnUEtpcmFUU09TWHFSQVRYdm1KeUVpMXdsd2VVU0hpSUNXNU1Dc1pBRXFUcHNPSlNMbXA1bWU3dnNRNzV2clJhcE91OEJ3SEN4TFZybzVRVFZySjBSQ3lJWXBXNnRqUzg1SE90REdtTVcrSE
-5PQXZ3UkpuVzY0cWN6U1pSQUN0dk9WUm5uNmlSb1QzQXNGY25wd2hCcTJuS2NGQldtbXFYQVF1VW4xOEVtcTVUZ0hFeE9UdGE4UFp3dkptUVl0M3d6Uk1HaTVILy9YU2ZuSEx4K1FQLzVmcjhqbi8rZ1YrZlkz
-anVwM0hVcndGRXVIei9wS2dnZTRoaWZkMkdybm5oQ1JUbWp2bm1ZelVVZkxNUXEvbnlUMXdxNVhuTDl3b1pxbEszSmQybjM5THRvZDExeEU5UGJROTYySmFjcDBCQWZURjR6aDBqTFY1TXgzMzZQQkRyenE1dn
-pRbWtXbDRaMmlKakdvcDNYSkJuQjR0LzRSYm1SV29oY3NjTm9WakpXc1NjQS9DcG9wV1FXdHRyYmI1aElScUxOVm5YTGQ5U1htVlBITG1hSUJSd2hNdkdIYnM1OVZHUFEzT0l6d1BtS3FNdEhPb21VY1IwZFUr
-MENPSngrcmtsK29wdjdwajA2YjU1TnRBbDU0dnQ2OGx4Q04rVkFPSnU3eGExRjEzSXRYNm02OGpzOXJSZjg5WGx4TXordHVLRFZ5MGdueE0vK0t0dnpldDQvcm1OWUZQdHgyUjduY2VQTkNJeUxmajNlUEFPZE
-RoMXV1U2FJS2kvODg2RXhQdE40Q0pkdkc3YTdWVGgzVjQ1QXpJN2sxZVZSSTl3QmNxN24zbHdJRXQvMDFWS3N5M2NIay81VTNPVzBjSmZoYWdXelBQVk1yLy9UbGc3WUhCT0Z2MTE1WEtwLy8zMWZaOXdnamhK
-a3V2RkJqa3JJdCtCT1BWWnRXVk1wb1lTakhhRE1SRndvSU9QRGxwRnlRaEhsSVNBY29POStQTnJFemdTY0MveHM2R2haSjV4ZWt5cS8rK2tZTHgrTTd5SVVXUnlNeTd2ekJkMCtZVm1idThMLzloanR2b3ZjS2
-9QVWNmbzBLZk9NTkY1ZTdQQ3JrUjJIQk1JSGJMRmtpK1RCeG9UaHpJQlB4b25rRk1reUxJYzBYYXptdWk2VHl5dlhxYTBTcWxZUmNuN2xLVEZ2VnFOSHNVM3hSOENKaW9yN2xIY3UwQ01PbUlWOVNUZlROYnh3
-eGNsQnNpalpkK01kSEN4Y1haMGdXMFNnaE41VkFPZzNNWTMrZ2FRaW1KaElITTVNTlZBbFdaNHdKUWRCZUF3TnVnYk1ualR2Q041c0EvRy80UFdZc1dRdm9IR3pDWHo5MzFvQVRuNTB2MVF0Ny9ITmNkVTJ4T2
-JsQUZKdGp6aU9xUktTQnFQMFFEYlJ3aVpzVHRPNWN5Y044NGFIWEhIRTRqK2daTW94ZGJsem9XOU5MZkl1Uyt0aGUvVnMxSWFrYmlVVXRXMnJYdStSMXBnQi9PUVQ5eHBzVzJrWXltR21RNDZjL3JwQm5ucTVS
-d2NSUkV0ME9nR1JWUlVwR3pGUTBFbytPVThVZmZPYWVkZFRUeWVHZExnNmVmTk90RTNkUGh1UTRZeDc0UmFYZGczdUJGM1JNZXVKNHV5VVNMaXZMa2gxWGxlZ1lNWmc3bkN5aVNrU0RiM2pHaWdSbjUrdTR6Uk
-xoNnNFdVJvQnpWaXNKMHpPaHFTTmJwRnJ4ZjN1cDRudzhyYXhQUEJ5ZThzRHB3MnFQTlp0WmZlck9peEhvK1pjdXpaRTN2WFc1ckZxZGEwdDhNQXUvL3JYRGNtQmZzemtvemlmQjFPQTEyTXBWdWJhNzhFRC82
-QVhIdXpiVjRnbko0WWhuWDBVWjVHSjEyNVEvLzF5ZDdaUkY5QTJhOTFFZGt4S0ZnL202YmtPK0xGbVNiZWZ5SExFcHk5eEU5SWtJYUFHOHBtZ3JKdWlMOUpVdWxjODVrQ29heWR6dTRkYUtiRFYvSGdjT0hUeX
-ZMQUkrZWRqTlAwSlNOT3E2clc1OHliMGlmeDlGK010aW5yR3YvQy8vNm5xYmQ4TkVZLzNldDc5NVZNNVdkaHFKb2dYQzNSYVdaNm1abW1TRWQzVVV2ZXRQRmlTMDhwcVowRHRNVkswWm01dmN2N2ZaVnZubjU2
-ZktqYThyQzI5TkVMUG1tTE9JRFJFOW1HQXZMdE94NFBKUjV3d3RoS2V4OHFUSUFUVlZXUURjV092bUhBa0M0Q0F2RFN2d0szVmNlVlFKeUg3OGpDMTlGbkhXSjY2N3dzYWh3OUhNRkhjUmVLRWluY1cyN1F2a2
-ZSOWFiWUxKK0JGejdmdmZPUzYxdFc3dG5qMGp4NVRBalZoTW0yb2JveklmaC9NbVhvU2FaVTFvLzhjZXFiS3BsWWNmUEd2emhyMjlRN0p5ZGQ1SUpBM2xuYjVKUEw4UXZlbUxzZkRDU0lOZ2twTHF3Z3NwWkNJ
-aWhxa01WdVBqWFcxdFZzMVhKOUtrUnlPSGtwTlhKdTBoSnM0ZDVnblJnQ3lOZ29RVG5YZU1Bdnh0MEl5c2tyQjFnMGZhYlB4VVZkVmwzeTlkbm10N0RLb09zM09uVWpUSTdEMlZKMCtlczBBQ0hEaFUyMndKOS
-todG5XWjBBZkFpeno1VGErc09LZlBiM3JsU3RtNWJZR1dsbkxOVTFJUkY3SWhJUzNCQU9FZ0l3VWl4U0NnYnBpb1QrWXoxbUUvMFd0RFBQNklkTVVINUhET1U2UW5XSDdJcVkyazRjM1d5YS9DWmhCT3drSGtu
-eXhkbFdXQjJiWFczcFErc090dGxRbGhlbmoyeWJSbVlUQkU1MXhHT1IyYitzc3ZTTEFJSU1KdGs5TEJ5cUJsT0pvR09kcWNOQ1FkOCs3dFcybHJHZ0lSVFEyeE5VOUN0V28rWVU4QllqcW1OVlJ2ZEN2dEZ5NV
-NVcXVFZ0p5czNPREE3Y2NKWU9ua2xiUGxTdHlScXRmNkdXRlFDQU9KQUdBbmZldS83Vjl1S0NmNW03U0NtR2w1RTV0T21DdmRvSVROTFY2L0p0NDFEOGN6eVdid2dTVTF5NG04Wk0xSTJKdTl4TGxIMmdJUlRR
-K3cwb2tkcms4cy9nN01Ha3VHOHlTOXlCNUV3eEtaeTVCYU9mc1krRFdoTlZ1aVhoYWRCTElZMWRjUmxNZHVhQVdJZ2ZNemZIVC9XWnN1S1dGeExnTFhmb2h1dE5sbjQ1L0t2YUYxQzE1Z3lBYlA1M053YXJRd3
-d5ZkdXa296NEF4OWFZeGFDSzF1Z0VhZUMyR3BFUEo2WXBqaFphQjA4bmZrdStzWGFrNFhFYU1pbHE4TjVhVlJMK2dNdGlBbUt0dlJoYXdvYWV6YUZjU3h1VW0zd3RuZXNNRThxVzE1RHlrY2VxcFNEQjVyTjBj
-TDR5UXZ2WkxGVVRiN3RWeTZ3YTJNQ092TjBpaGVMRWx6Vk8wOHVuWStmYW1FNkk1N2FKZEVRR3lJaUxCd1EwSytPd0N6RjNKeXNsOU1MSG8wY1J3MU5VVHpKM3ZpbXBmTDZ1eGRMZm42YUNlVGUzYzN5OEFObj
-VkVEpkaHZpVHBhTS9sSFJnbVRlaG96TTJYRXRoSDIyeWVqQnVrbkdpazJOUFZhK0FGTkhiRFVpemhnMEloS0VWaVB3T3d6clBUa3VoNG1lTnd2d0dvQUovN2UvYTRWY2YyT1poWjRwN2VUbGwrcmxvUWNxYlhF
-dnAwMldQSTY4dzdKOGVhN0ZiVEltN2U1aTMwSjN6OW5tSXZPbXJNSS9jZXljUFAxVWpaeHI2OWRQZzBuOHFTSzJSTVFqNnZQV0VQclBHSEdPQWNGREtNbWF6WDd6ekRObVo2WGFETTN6ejliSkEvZFhXa3BHNy
-9XY0tCemgzSFFCMlFMdXVudUphVWlmSlFDaG55MUVhdVhjdkRRMXhhdWtrcTBDSWdMVEEwd09zU2VpenpXS2FacnVvaTdpeGJTS0Zpd1dVeCtKYUppTm13c2tLNGVVRXlGYlJFd0kySDIvT0JPT1NYWEd3VVRC
-K1J5RlJlbHl5MjNsY3NkZGkyd3BGREdva1dTWUhiaG5aaXFudWFsSEhuMjR5aHhMZkRiSG1uZEdFRnNpV3FzZ2VmcUtyNXNGdzRxUkhEZHpDRzZIcFdIYmdwc2RwWmhiWkQ2UmpHYS8rR21GNVloQmMwNDFRQn
-lTdi9jRHErV3VleGJiaERwVjZNZ1lQbUdHUVFkQlI4QXJaR1NmUlhMN1dGdnJNZGM2MjFnanRrUTAwR0s4NmorUWNaNkJjUlNMZVZtdnQzdFgwNVEwR2FkenNMcmhOejZ4U1Q3ODBiVks5ajRqUWJoeVp3MlVL
-eXM3MVVqNHdIMW5MT09kdGJrZEFTYUtHRE5qL2pVR1M2WUljd05lWXhCeDA5RFFMZC82OTZNV05EMVpNbnJDOFJ0TVhyUXRLVEs0em16Q1B3Y0hHUXQydmRaa0NiYUlSL1hsRFRBeHpJeUtRbDV3MXN5eTRNUV
-MvdEd5c2xJbExVM0h3eXFEeUNFSGhnQUVPbjJ5WGY3dGEwZHNMdzJFbU1XMUU0RVRkdWNVSXBuVHd3OVcycGJpOFNIb0xxRVV6M3l1dFU5MnZ0UmcyZWQ0dnRudUtCSUpNMlFyYW9Nd2hyTFVoL3AyRGpjUW00
-NFNHRDRLdElaYnFRRWhEKzV2a2U5KzY3aDk0eEl2WFo1TUNEU2VVakt6M2Zlek01YUJPeU1qSmV6NG1kMjZkRTNwbm9HdDVYYSswaUQ3OS90Z0J0Y1JCYmc4WWt0RTBpcXlZZ0lnTmN3ckt1WnlUOG1rUGp0Sm
-VmQ28vbkVoSTIrZmZMektsazQ1NTgybHpWUXZ6RGlBMk1TVVdGYWZsQWtDeEVOVittZEkwdzZJREFZdnYxQnZFVVlCSm83WUVwRTFpSVN4SVN4KzZWTVU0VXkyZU9seWVjaVFKVS9LemlFbTFwbVRZNEcyWlBy
-aEovZWVzb3hybDlxdjN6MmJTNEZ4NW5TN1BIamZHY3NPUU40YStyVzQ2OUMwUE1UWEhqdmFhZ3VHS1N2bGo1ODJpbC9FbG9na2QvSzdOUkYzeWhLbmFFRWJGMEUwWVl5RGhuWmxFZHNMa0VCd2NERUJ4SG1EaH
-Z1UDd4MlhWM2MyMnRyR3NlZTZQeDI1cTZzNkxVcm44TUZXTTBuakU2NVRZS3pZZm03QUhEZkhqN052aHZzOERwb29yaEU3SXRJQVJOSllzbUc5RFVSay8vdkp6R2hmQnZIVTA0Ymx6ZllDSkVnYmdVU1RnZkdL
-U1ZyOW11b3UrYThmbmh6eE5FWStEOWZqSUVUdXljZXI1YmxuNjJ4TTZmTEJqTjR2WGtCNWZMbFNVa055UWttNFoxZFRXQ3RlMnZ3T0VDc2llaWxoZkdnYjA2UnBLeWtCV2VqcnRlSjBHZ1l5a3kyY1ZCb2NaUH
-dtZ2lkT0dwdDBpRGxxbnBKdnh1SDhjdmxpWXNJZTNOOHNQLzlwaFNVd3htUkZZTDNRRWt4TnByakhINnV5S0IxU2RmQlZ2SkhRdzVPUlRvank3dHZUSkVlT3VMV284VnJtZUVGc1RWUEFHSkYwK0pDSFRVaEpn
-UUc4TkU0V2FGWlcreC9iTHlHU0dMT0hCb21seUhNYWRnYk5GanlCV0p0SDJud1hpbVlmWFFCT1pVb2pYVTNOWjU2c3NmRmlveExQVjh1NWMzMFdPUDdvUTFWU1g5dGp1V0Q0THQ0MWl5OGVjYkduS3pya3BSZn
-FwYzEySGc2MDRxVVFleUt5OUNtdnlMVVFEaHMwbVJMR3BqQW0yekNjVHhxTkU0ZmNkVWpSQ0xrN085eTIzMnpmSFVYVGQ3S2dlQWdiT3pxUkt0OW41QjRMVDA3T3R6bEgvZUR4UjZya3ljZXFiZFBRa3lmYTVZ
-WG42dVN4aDZ0c3owTE1YVjlkZnN3VnIvREZnNGlrWDl5L3I4VjJpWEoxNDQ0QUZ5SjJSUFMxemppUnhjQzhtc09telVnMGFZSGlXZ1NSTjZoR0pja1U2VFJZYUl3ekNLY1FheDlKUXNVNXM5cmlJU09oUzRlWX
-JJODgvaFNGSTVZelE1bU93SlJqMTZadmZlT29mT2ViUitXSFB6aGgyMkNucFNjSlcyblAydU5NQVR3VHo4ZFdid1FndlBKeWc2VVNjZlVRUGluQWVZZ2RFV2tKRHRZaHNzcWVOQmltd1pRb1pQMG1LeHZmVHhT
-Y3l4aVR0QnVzNU9CYVpCTm5GeWxhbCtzeFBjTG5zd1RmdWVEWlpQMGc2ZkJaZFlHdmFqeDRnbkl3R2M0aytDc3YxOHN6VDlWS1hVMjM3WDNCM0tQSFpLcHJOdUVKaDFZay95dGpSYnpEMmxEMnJBRXVSR3hOVX
-lxZGc2emZwTDNBZVVNN01FNGtUNm10V0pnZ3pPdXFaaW5tSjZ2OHVSWUpwVEtaSGduZkI3TjBGaHNhb25odFFKTGd2THhVRThSTEVjZ0xMYTlvVUpKRnNXdHdkazZLYVVMZ3ZyZTNDUU5QT0RiRWFXcnFWVk83
-MXFac0xGWjI5a1lQY1l2WUVoSHA0Y0NFSkJrVXUwSkJLRFRhMGIwNjNuTmJlMSt5bCtRN0RrelBadTFWVFNMMWIvS2JzcGxOVjVmOTZkWTdxb2tha2Q5bU5zQ3pVRnlTS3JHZEdxRnBQTElXM0Q0ZkR6d1N2Mk
-82ZzVRVFRHVkVMckpOTkJJQ09oYWVCL09VMTBNSFcrU1ZsM1JjYjk5ZHBDTG1NV0pMeEVoazU0bXNXRThYNlRRWDB3MzdYakhIRFkxbW40MG5xZnFkZmRyYjY3Si9jdzduTGw1aFg1c0hGZmlwa2huSS9IMHA4
-Q3c4RGc2YjlSc0tMRGliVmZWODVucU04ZUYrZC82UjZPQVpJQ0VtYWx0YnYrM2ZTS0Q3WEhpMmFHUG1pRWpsa3hJUk1wSStBeTNab2ozazRWMk9sQVJBaDA4ZEFhVFR3NmhJUW1MR2wyZzhRdWNXTEhUcCt0bX
-dGRzhzSmlvNWNiZ3U5NXFseG5acExFaENuR0x6aWN3VnNwMzJ4Y2FKY3gyUWpqcmhPSE82MDRMV1FXQ2VubytaRlE5SWdpWWpWU0xaM1poanJOV3g0dDZYUk5xYUxyNXkzNllvemprQ1k0SkNhSGFHT24zRW1h
-YzRhTWlCbXBFOVF0N1poRE8xaDJYSjBoeExRTXo2UVNkNDgxVVR1SFdVN0N6ODVCUFZOa2ZxZ3EwQ05uck1MQkhSVWt3M3NDVWJXMjNqQmFWRlNFSzgvMVduNFJnM1JzQW9oVWVVdVVLdkVja2V6czdEQ0Ria0
-xORHhJb21JbVNLWlJXM280VXl2a0cwa3MzbExvUnNuMlRTR0orbjhBbzlzV2xISlNOYTNCKzZydE0rZDlSQUF6THpCaERReXliOTJpeU1qbmxOTVMvYTZJRnh0NzR0dWIzeThxbDN0RXNKc1pWOE1OQ0xhRUdD
-bXNqYy9yemxxanJJSHY5K2pQdzVBTVRqd2dwSWttSTFIdTFVYnpHZnoxR3RGS29iQWhkWldvcURjR0RLQTFvVDIwRE5lRTl6U0dvY29HVXhUekV6SWhvWkRXbTE2UWcrMEgrZGgxeEcreHF1emFaeDJKRFgvMn
-EzbWtSM1d6K1BKQ2VDcnRiNnV4eWJxNy8zUGs1YUtuNDlIbm44ZWdlZDJUVGxzYzZ2dmZmOHErZUJIMWxwenpyZTZHQSt6MGtmN2loL096SEZqeGcxWHVyVDdyTlJBUXpKVllYT0dyWHEwT1hPVnova1oyaE9T
-c20vK2h1MGlDMHFNc1BIWG1KVEhSZGxzMmx4b2FlbTd1OGhKNnI2ZGovQWRFRTFGYkcyUWZuRVVzeW9XTk1vdzRXbHNac3JtTk90VnV6RitMRnZzVEUwQ0FTQW5UaDVyTEcxQnlBc0IyVkhLZG9hS1Q4bEcyQk
-E4eG9lWXA1dDByRWprRE05Z3p6M1BwSS82Y0oybG04NGc2OXZERDFTRzZ5UWc0NnhMOFlnbUl3d09od3NlVlRhaFlXLzhOVXBLdG1Kamh5ajI0UWZNRlpZdmM1N1RPSWNqbk5qT1VGZGZYV0xSTWw3dzVqTncw
-ckJoenlNUHUvMUJDR0tnWTVyUFpJdy9kY0xFUEhHcGtIS3htcCtMbHV2ZkJjNDVRMFA1eUJuZmFwN0ljUWl2QmNoaHMyWmR2cXpUZzUyQTQ3aklNd2JtV1FrSWYrYXBHZ3Q0bisrSUR5S09KNWtRamNPKzA4T0
-lwNGNmWkNWWTkxbFNraUUzM0xUUUhzV0ZyODFYTmpxem5HYUZqQkNSL1I5WnV3a1NyRm1qaHZqVGlMU1FQd0F0azhDTjR4NGxKSG41YWJKdHh3S2JXMFFEMEovTXQzRWlpR3hXc2hpdzVma1RqMWJaNG1IZ3Y1
-OXZpRDhpemxGQXVnVkY2Zkw2dTVaSWZ4OWpJa2ZRZWNqRjhITzdZUCs4L0ZSNTlwbGFXd3hOVE81OFJXSVJNVUc3UzYvNWlEdTk1cm9TMjJXWHBFcnVjZVloRXcydUV5SkRRV3RMcnp6eDJQemVUU3F4aUdpdE
-ZINmZRRUFEdU5kaEtkYXg0cDEzTDVidTdvSHdzemp0TU45QWxmRGN2R1ptcGRvcWZzYUtUaXZPdndYRUNhWVJHVmlGelplRW5CbkhnNW9pdDk2MlNCWXYwYkdpa2pGQmxYelVRS1FOZGNKV2M4ODhYU3RWVlYy
-QlJveExRRDdXTU5xay9wREl3T2c0SXBGNlRiU2lDM0lPV1ZyK3E2OHR0amxGOXd6ems0M2VVZ0FreU5yMWFvTlVuRDQzRW44Nm43UmkvQk1SelFjSm1WOGt2TTN5M29ROWJBbmFVT1NuZWQ4SDEwaTJhb0xCRW
-JmOS9CRzZzWUI0R1ptcDB0TGNKeTg4VjI4NVh1Y2JFa0FqYXEvcGM5UWdyQ3lKOHR1Qkp5RG9WOUNNTEJwKzNhM2wwaHRldlQ5ZlRkUklEeXFSUjJ6bWV1cWtUOVUvZjd6SzhVdEVMNTBjYUVTZmpwRlZHRDJK
-UzBRd05EUmtNYWh2Zk5OU2ZXVlRHalc1NTZuVEJuZ1QxZTJiMFNjdnZWaHZLZnZuRStKYkl5S1lIS3kySURqY3I3emdTR2k0SlZ0cjF1YkxOZGVXYXQ4eWFPWVo4amhQdVRqU0NiRjQrT0NCRnR2V3pYMDJQen
-lvOFUxRXJ4RlpTR3lyTTdhNVlIQWY4QjN1U1JNTkZKc3dOeFlPMy9DNk1oMGZzZWtvd3NienpGTW1oa0hZVzB0VHIrMEZ5YzdEWUQ1MFR2RS9SZ1NNRDBtSHNXejFhSDVVa01CRTVLQ24zM0ZWc2VXMTRUMUhw
-Q2R4UHNHUEZZbnBoM2hzUGVETVU3OXN6SjAzVjVFWVJBUzBFR24yWnpsZFlqU0E5c05oZzRDeHNlbml4ZGsyVm5UQ05yODFJa2tZMlA2OHJyWmJEaDFzbGZiMlB2dDhycHVuaVVQRU9RQXZURTRiaWxTY2JwZW
-YvZmkwSEQvZVp2eHp5bkIrYWtUZ3RTS09yUDcrUWRXSWJiWmVrWHB4ZFROM2tWaEVUTUFXZ1hBSWx5Y2hZME5pS2g5L3RFcSs5NTNqOGgvZlAyR2hYUXdSNTRNSk5sR3dpcittcGt0TlZMKy80dHhtNHF3a2o1
-b3ZjQVFjZmQvYTJpZUhEN1hLcnAyTnNuTm5nOVN5MFl3S1hEbzdQb1ZKT01mbGJjTEFmR2ZyZ1Z0dUxaZGYveDhiSlM4dnplcHdyaEl5SUdLTTRLdVZCYTl0U3NEVGFvWWUyTmRpbTdHY1BIbk81c3d5ZEN6RV
-dKRlQ1N0tRVFEzRDB0TXpLR3hiOExHUHI1TXRXNHVzanRpK2ZDNGlJR0lVRVZtVFZHdjd1WDRqSUh2SlA2OEVQSDJxUTVLVmVGblpqb0E0Sm56MUJ5UWNCWFZDZlJDTHkycVZkNzU3cGJ6cExjdkRSQXcwWW9E
-THdFL0tkM2NQU2tOOXQreDhwY0dTNlo0NGNVN0k5SjJUbXpwQ3VORnFkK2tGQTR6Q0U0NHQ3VERkNzNuak12bVZYMXMvWWozTXhmb0t2S1pSQkVLQ0dVcUkxai8vdzBINSt0ZU95TEZqNTJ6LysveUNkQ01oUX
-NiQmUzZUVmeHpnUEZDWEVJK2crSmJtSHVubzZMZlBDQStjaXdpSUdBVkFMTHloMVZXZDhzMXZISlV2L2MxZWVlM1ZSb3VjWWJOU0V5ajlQcEtBQVM0RlZ6L3NsanlvVmtaVFU0ODBOYnI0WXNnNEZ4RVFjWnJ3
-QWRzMU5aMUt3SDF5LzgvUG1MQVVGS1NwSUFYandLbkNkVnJPMlZWWDE2UDEyODJuQVJIbk0yaDhDT1VPZHZOMWgxdEZrV1RSSDEvNzZtRUx5OHJPVGpGTmlDQkZFakRnNE1UaDY0cFgyODZ0ZTBEcWE3dXNIcG
-5zbjRzSWlEZ09IUEVpaWNSNHhSOUpaakp4OFA3TW1RNzV2Mys1UjNhLzFpakpTa29POTd0Z0REaGRVSTBRYjBETit0cGFFa3M1MDU0T2NhNGg4SnFPZ2ZkOGpqVWpjYVUzNmppbHJhVlhOV0MvVGNZZk90Umln
-Y25zNCtESXlXOGNDUU5NRDU1MDFDYzdMclBQNUdjL2Q2WGs1cWFhTlVKOXp5VUVSTHdJbUg1Z0tZNWZqdFBkTlNEOU9oNGsyZ05QSGl2cklXU3Fha0NjTVJ3Qm9nY3ZsVmdoYkZOUVZwNHBuL25EN2JKMlhiNE
-5DZWJheEg1QXhERmdXK2tYbnF1elZQQVZwenNzN1NFT2c5RWVHbTFwTC9hS1FKQW1jWGc0TUVPakRTU1RPcVh6eThwTWtYZStaNlc4KzMycnptdUx1WUs1MWExTUViNHZZcTdxd2ZzcjVkNy9QR1dha0JSL1RE
-c3dUa2xOVFRiSERCUE1tRVY4NXN3amZodVFNQmJ3ZGVyMzM5Ky9yOW5ZT2RkSUNPWTlFY01jdE5lbm42eVJSeCtxa3BycUxrbFJrckV1RHZMUjhMUzliMy8zNnY2WWkwSVJiNkNPZGVndWxXYzZaTzhlSmFPQ3
-NmeGNRcUFSRlRUMG9ZTXQ4c2lEWjZXMnRrdlMwblRjWjNPQWM2dXhFeFgwZFl6QldiM3k3Tk8xSTUvNVRuUXVZRjRUMFkwMXhES0hQZlJBcFUxRllBYlI2SE54SEpMSXNPaWtnU0haczZkSnpsUjBXTnZNcFk1
-eTNoS1IzdFQzcUMrLzFDQzdYbTIwd0d6R2ZRRUo0d3UrdzB6U3RxbXA2clNWTE9GdlJ0b3cwVEV2aWVpZE0vU3lwTzM3K1U4cjVOeTVmak5IOFlBR0pJd3Z1UFpnUlFiL2htVG55dzIyVnRGM21uTUI4NDZJa2
-UxMnRyTFQwbFVjUDlvV1laS0d2d3dRVjZCZElHUmFhcEljTzNwT2FtczZ3MjBWRURIaDRFbEdpQlFldU85ODg2aTgvR0s5cEtXN1NmbkFKSTFmZUsySXM1cTUzV05IWEFMaXVkSmU4NGFJbm9TRVIwSENmL3p5
-QVhuc2tTcExXZUZNSE4vWTh4ZlV3ZGdqM2tBYk1aZkxQSzhMUnd5SW1HQmd6ZUNRWlV6N3V5L3VWVTFZWjR0MW1aaEg0T1k1QjBmcVlPd1JUMk13VnhTM2V2L01HVythemczTWVTSWlTQnowbm1SUSt6K2ZmOV
-VpTkVwS00wM1E1bUlrLzJTQlFGTVhnRWdpaTZmVlY0REdpUitCcDVBaFNkSHgvSm1LOW9DSWlRTFhVSGhDUTdaSzRxdi9kRkJxYXJ1bHVDVFR2bk5qakZFaG5JOXdkZVRxZ1cyemVWMjBLTXZXVlJKVzVoRVBR
-dS9iaXIxcldRM1QydHBySGV4YzZFem5OQkY5d3hHOC9lTjdUOHRSMVlpc25LZng1dEpBZjNwd3BoNTEwdGs1SUsrL2E3RjgrZysyeXZVM2xwN1hXWEZldklCMjArTEsyY29PSzdmYU5lNkxCTWFjSmFJM1NUdm
-ErMlhYYTQzeTR2TjF0bGM3UWhXUTBNSFhnNzVZZ1B2MU41YkpyWGNza21VcmNtWGo1a0lwTDg4eWNycXFpZzhUMVhjTUJGOGMzTjhxQS8ydVVQRlF0dWxnemhJUkFlTmd3djdwSjZ2TmxFbE5TdzZiTVFFSkl6
-dWoxcFplV2JlaFFONzZqaFcyTXhXQjdtdlc1TXY2alFXU2VwNHphL2FsblhLZ3dSbkQwcllEZzBNSlQwSXdKNGxJdzNBUWZYSHlaTHVORDhrajR4R1d2M2tKVnpmbms1REZ0aC84eUZyWnNxWFFBdDc1Zm1GNX
-BxeGVuU2VaYWtXd2tXcTgxUmtCR093WWhXYWNDNHVFNXlnUjZTS0hiUXh4K0dDckNwSkw4dVRObXZrTlIwTHFBV2ZIMnZYNTh1R1ByWlVyZHl5d0RWT3hGcWcrNXVwS1NqT2tzQ2pkVWhyR0M2eHBGV3hYVUYv
-ZkxXZlBkbG93dUJ2M3UrOFNFWE9TaUo1c3JDc2s1VDJtVEVCQUIwaEloOFNTSXN6UUQzOTByZXk0dXNSMjZuWGYyNHNKTmRvd0p5YzF6Z1RjbFo5QURKN2gxVmNhcEZzdEg1UmlJcmZ4bkNPaTA0WnVQZ3l6Q3
-llRVMrbzBmK0hyQkpDSEZaTjlnNDcvUHZLeGRYTE5kYVdtWFlBWFpGNDVPQTluamY4c1hzRGpVQjdNYUZLYVlQbjRkQ1lSajVwUW1JTkVkSzlkWFFQU29rUmsvNFNVMVBqdytNME9Sc2VETmsrb3I5dTJMekJ6
-OUlhYnlzSW0reWpSUEdseGFyVTA5MXBueHNZNThWSi9ycHl1UE14MVZsUjB5S01QVjVsMmRFak1ocDZUUk9UbzdJQ0lmZWJlZHJsbFFGamE1ZzBRU2hWYUhUL1JJWkg2NDdvYlMrVURIMTRqMTF4Yk9rSlFUME
-xnQ1VjU3JkcWFMdW51d3R2c3lCb3Y5VWQ1S1E5RERweHdUejVlYmROVDdMNlZxSmh6UlBUQUJNUGJGMCtPaHBuQ3FDbnEzUHlrZ1N3c1RKZmI3bGdrSC96d1d0bHlSVkg0Ky9OSkNMeDUxOVRRWTh2RWlLN0J0
-Qis1WkJ5Qk1qRzJ4ZnI1Nlk5T3k1N2RUWlo2TVJFeFo0azRYd0dSbkVNbXZDK0h2bG02TE1mbUNELzAwYlgySGtEQXNTUUVubkJzTFVkV083SnNvM24wbTNIUG55MVFGdGRwREV0T1RvcWxPU0hkeWFsVDdlSH
-hZdmpFQk1HY0pTSU53ZUZsSjlFYVpySnd6K3RJaUN1L3YxL0h4anIrWTZmZGoraDRrTTArYzNQZDl0Y1RBZkdjb2JDM09aNElHQW5mNGRES2pCZlpqL0tsRityTU42QzFNZUZualFmTVdTTGlVY3ZJVERhQmNn
-SWEvbUtPQVZuekFxZTBjU1RzRzdJOTU5L3dwcVh5RzUvWUpOZmRVQllXV0NlOGw0TC9ubW1Mb3NJMHkyVHVWMkxFcTF4VExwOTM5Z2tkTHg3WXgxckZ5ejlyUEdIT0VaRzY1OGd2U0pQU3NreWJieHJvSDdMUH
-RNbnNuTGtDUjBCbk92SjhhRUZDK2Rhc3paUGYrQitiYkhwaThlTHNrZk1tSXBlKy9zb1dac3FxMWZtU2xaMHFmVXJzZUJWcVZ5eW4vWmlHSWRxRzFKanNxY2hudnBPS2Q4eEJJdEl5SWJkTGIzNjY1VGloUjQ5
-VE9ab3lFRENlRlkrd256TWxsdmE5NzE4bG4vbGYyK1YxdHl5MDZCamtrUE1tU2lRM0hneVpFNFFKLzZYTHNzM2pHcy9nMmFnUHlzNXhjSCtMbkRweHpwNDlRWGc0TnpVaWpZS0pscHVYYXBweHJuaE9uV0E1Uj
-RRalljakdRMHcxWEhOZGlmenBYMTRySC96SU9pbFRTOENGZkUydkE5cDhSYUhOTlNicFJYeG54alhqRlpTUHNyYTI5ZGtHUWZ6TmtRaVlzMk5FR29BRnJpdFc1cXIwdUFucWlXcUZlSVFuZ0RkRDBWSTExWjJ5
-ZEdtMi9ONW50c3J2Zm5xcm1hVEp5WTZ3UEt2VGJwTUgxK2RBSzY1Zlh5QWJOaFZhd3FaNHJ6NmVtODZKMkdJTzE5N3hPZlV5Rm5PU2lMNEJGaS9KdHFCbXZIOXVpKzM0N3RFdkJzcnN6QzRsb0FwWW0vYjQvUD
-NMdjdKZS92aFBycFpiYjFza0M0b3o3SHRQd09tU3h0WFRzQ3hia1NOWGJDMlUzaDVXWU1RNUU0RVdNUkdLT1JaemxJanVJT3BpNWFvOFdiY3UzeHdPaWJwYUJnS1FSNmF0dFUrU1UwSkt2SEw1azcrNFJ0NzJy
-cFd5UkRVaUVUUHVtYU1uZ2ZDUUF3ZElYbjZhZVNUakhUdytKamtkRWZYa0VjVnFpUm5tSkJFandYaHA1ZXBjODV4cWs3Z1BFd1FJRU9GcGJKSUtLUmdIZnVLVG0rVWpIMThubXpZWFNtRmhXcGlBSE5GOU5uL2
-RyczRCYVc1eXVXRVNBWlF6S3p2Rm5IVm85VVN4Z09ZMEVYRmh2L1pxb3h3NTNHcEpoQlBOTEVXTE14MkIxbnYvaDFiTFJ6KyszcHduakFzaG5pZGZ0RWtJL1BXcnE3dms2SkhXc0FjMmZ1dVBzbHJ4OUtCK21M
-cEtwT2FlczBSa3dlZ0R2NmkwZlMycXozYVptVXJEeEVKb1l3SG1CREd4cnJxbVJENm1ZOEY3M3JEVVZ0THpISkhQRUl2bm9aNDRNSWRKeG56cVpMdVp2MDZ3NDYvK2ZBZEJhQnYrZ0RWYVQ0dVhaRm5kSkVwN3
-p4a2lodHZDd0xaZEQ5NTNSaDU2c05JV0I3dk5aZUsvUWZ3elFBRGM4RmRkVXl6di9jQnF1ZTZHVWlrb1RIZGZoaEhMeC9HQ1hWZlhyZHF3emFZQ1J1Y2s3YXU0Z2lPY1M4Vy9mSG1PZFZoRUJpVVM1cHhHWk1V
-QXdiOHNqV0U5SFJvRXpSTHY4RUxPNjZEMjdHdlc1cHNXM0xpcE1IeUd3MHc5QzJTc1Z5S3k2Qlk0QW9aN2lqaUNyemZNK1BTMEpMbnA1b1VXaUtDZjJ2ZXUzUEdQT1VGRTE0TVBtL2FEaEU4OVVXM2JyREVQNW
-9VNy91RUtpVW1hazV0cWpwa05td3BHUHVjNVpscW8wTXdXM2hiK085N2dTWWlEaHJIMHRpc1h5TFhYbDBwUjBmbldReUpnVGhBUjA0UVYybzgvV21VSDZUSGNXR3Ewc2VJWnZveDBLQWcvcHRYbUxVV1NuWTE1
-TmZXSitlbUE4bUNPVW8veFdJR1JkWVpYbWNDTmU5NjQxQnhiNFRQaXZ0MGprZEJFcERFQXVWWElYZkxvSTJkdERWMGF3cVB3alJYL2NIR2p2YjFEa3ArZnByMTZpVTI1ekRaWVdwU3IycG1LOUhVZEQ0QjhSa0
-xWaEFRNGtHbnU3ZTljSVZkc1cyRFRGbTdNbUVBc1ZDUXNFUkVNRHN3U05wWDV5WTlPUzJOOWp5M2JvUkg0THQ3YndwdlVsTGUvZjlqU0FwTE02WXF0UldHQm1wMW44UGNzTHM2UVJZdXo3SU40Q1JGMEpIVEx2
-VEJIaXhha3l3Yys1UEx2V0tlUm9FaElJam9TdWtpWnV0b3UrZWJYajBwRGZiZHBRdHpYOFVaQ2hHZjBDSDlvb0pBdS9JNlVGRXhWdlBtdHkyWDVpbHc3Ny94elp3NElPZ2RoYzBRbXNRS2VzU3R3bmNmTUkvSz
-IxQmNlMHBLeVRQa2ZuOXdzcjc5bnNhMi9UR1FrTEJISjdveEoraS8vZEVpT0hXMlZ0RlEySEhYTFllS0xoS09DSGY3RWVuUDJhaVJ3dTdPejN4YnkzdlBHSmZLYi8zT1RyRnVmUC9JTXMva2NsSnNERCtUVjE1
-WklyM1lVcmt5dWptY2EzSnQ2d3hRbDd2V0dHOHZrLy96NU5YSzFkbDRzQWs5MGhMUlNaNzVXb3dCYy9EKys5NVI4N2FzSEpUc24xZGJsT1FHZVJlbU5nSzlXeWtOYWVEb055RWRub2ZKa0tRcVRkQ2g3MWRVbD
-hzNzNyRElDdXFDRCtIZ0dMeFVVaGVpa2YvelNmcHNhd2hUME9VUm5vcHkrSEdoa2trUVZGMmZLaHo2NnhpeUh1WVNFSTZMYlJHWllxcW82NVZQLzgza2JXNldrMGlQR2l3Q1BFaENnOWZDRUxsbWFJOWZmVUdy
-ZVBWSjRzTlBTb3NYWlJrd080SVU3SHA0RFVCNGVoMFJTenoxYksxLzl5a0U1MTk1blkwZldKN3BIUGY5NVl3RTBZWmFPbVcrN2M3SGxZMlZqSElJMHFGdGZkeGREdURrTWtVVU1oWkpzYUJNdlNEeU5xRXpzNk
-JxVXYvbnJQZkxNazdXV0pwQUhtQ25aSGR1d28zK1BmdUhJNUFRWXpYZnI3ZVdXUzVSRnltaHV2ck1WQW1FaEdyTGV4WDNPRVcvZ0dUR2g5K3hxMHZINEVUbHl1RTBLaTlMVUpFd3hZZlk1YldJRmlNZ0trTnZ2
-WENTMzNGWnUwVFBVTWVXYWJuMzV1cDl0VWlZTUVTbWw5ZERhS0tjck91UnpmL0N5VFZVd2FjL25NNmxGdUpYWHpPNXZSenhYQkJhbXVyRWZadHdiMzdSTTN2eTI1ZFpoOEozK2twTVU4ZFVqWHdxdTd0VThWQT
-JFSmZMQWZaVVdRb2k1emZJbzlzamdXV0xSQnR3WFlOWkQrQUlsNUpKbE9kWVJMRnFVTGNVbGJxTWNidDNhMG1menlSQ1hnL2ZNS1NNek9QSllpVU93Qksrc1V5MHF5Z2kzbWV0TTZCeGo4QWdUUWdJUkVRZUht
-L0IrK3NrYSthcy8zeTBMRm1Ud2pYNDNjeFZJT1NBaGd1Y3ppQ01rTExOaU14UWNMN2pSTjE5UlpEMDRubEJIUWtkVWFudTJHbnM2b053OE82K0VEdGJYZGNsREQ1NlZRd2RhcFpsRVRYcU9JMkwwTzBVbm9reF
-pETmw0bTcrRzlMT005QlJiVlVQZ0FVQTJiT05TTzUzczV1Ry90VGkwRjRuRVV0U3NoWlNZdWt6K3N6a3JVVXpFcHM1bUtHVENFTkgzY3FTQS85Ri9uWlIvL1BJQmk4ZDBidldacVVCcWl1cGlzU3phZ042MlR4
-dWZpVytpWUVxMGQyWXN1UDNLQmJiSko1blErQTdNcE1hT0ZVWWx4YjJwcWVtV3R0WmUrY2EvSHJIZzhCUTF0WmsraWcyNHA3czJiWUFzaUhiQTBOS1hLN0tLeDZ0dmQ1NDdtZC9Ua2JLZHdPYk5oZkw2dXhmTD
-F1MExaaTFZUE9FMElnUzQveGRuNUN0L3Q5OVNZZmdVR0RNaDZMNGhhU3hJaHVQRlRDUFZlR3dMenVlTVpmZ3NLeXZWQkdNTzhPODhqQW96Q2FYY3ZwTmYrZnQ5OHNTajFmYXdsM09lVEIvdTNoNlVoenIycnhN
-RjUwUEdnUUczM0t5a05OTThzVGZmV2o0cnNhcE9weWNJTUM5dzhXOVViWVB3OTBRa05JS29Ua2hpQjM4dm5EQXNEV3BvNkZHdDJHL2FrQVJMbUtPUUV5MFlVdE5vTW9LUktPQ1p4blo2VENuZ3VYWjllb3diWV
-l6MTQ0c3lsYm9tMFJZK0J1YWtxODUyMnY0WlR6OVJiUmtKWmhySlgxQ0UzOGMxZk9OVGFaaUdwMCsxeS9GajU1U1lLZUZlbU9OOElZaVZsbVNjd3I2QnJQWmc3ZVBKRSsxeTh1UTVhU08zcUFva3pvdVVGQmZ2
-U3BsbVFsdlBOSGdraUljMklicHAzOTVtRzZNbHlqYmFya2xjY0FMUFFMc3g5bTFTRWk3V3NTT09JTjl1TTlGOENVTkU0Q3NHYzZpZ0lGM09uT20wdko2WXJIeUZFR0QzTzFtSVRlMVpHZlR3allORG9MR3hSMD
-RwR1ZuSlRxWnBncmR6ODlKR3hodHprWWdPcnBNaHF4ejdUdGgwVGN4TjAraUM4a05HbWdpNWFtenNOV2Zic3VVNTVtR2RxWTQwb1lnSXFCTW1jeGVXWjBuUmdnenpVaktONGZPN0VQVUJNYkdTT0RjV2xlaXZT
-MDhLOFRHWHliTE5Ha2gySmFvNDNXNUpsMGhpUktPNmdJTzVCMWZISVFzNWUvN1pXck1TRW8ySWthRHNQTXVBam4yWHJjZzFId1FJaUhoSmhHVFpzaHhaczQ2ZzVGUTdWRS94Y1hnRmhwc2I4cVNKRmZ6WWxIc1
-E4MGl2eXZ6VjhXTnQwbERmWTN0SE1KK0k2M3hPZ1lkVzhOeWtMbnp5c1pwd3ZsVlg5NGtFTHg5MHJMM2FvZE9wYnQ1UzZKSlRLMmFDaUlrWFdST0dFMzVIQkNvS0lXQzh4aTYzN0J4NzhHQ0w3UXJFeHBXNHFQ
-R1F4YkpDZlRYNmV6QmVZbUovOWRvOGVjLzdWc2wxMTVmWm5OZE1OR3FzWVhVZWZtK05vUGpVYnowdko0NmZNKzJQUUNjS3ZQd0FaSVJBakIwN2lpMFNDdWNibUlublNWZ2llZ3lwR2VIbXJqaEd0Uk9tMG5lL2
-ZjeWNPaXlSWVpvajFpUndOZWthbGx1aGtUR1hTWEQ4OFY5ZEoxZHN5dFZ2WFVrbkJDSUhobjBrVGd4QjlQbGs2Z1ozSStmN2g5SDNuL3ZEblhKZ2Y0c0pyWC8rZUVaa1cvRWVFaEs3U3BESUJ6NjgyblpYeGhF
-SVp1SlpFcGVJTHNiTXdBTm9QVHE1MWNkaDNMWi9iN044OHh0SHpadFhYSnh1R2lyV1JQVHdWWXBRRW5GRDJhN2RuaXUvOWVGaXljM1NRZzdZMTVjR0JPenZKYTZNQzRZL2pBSHdiR1ZrNml0Q2Q3bjYwWEp3U3
-FhT25WTDBmTXBGbmFhbXlKZStla2FlZmJIRk9wOTRIQ2VPVjRYV1R2by9RUmxVQSt0QTMvcjJGV3E5bEppemJTWVJIMFNNSUpVMTdLVUk0NHVMb05wYlY1bnVkWFF1OGVTSk52bmVkMC9KOHk4Mm1zT0VIZzhw
-bWlFdUdpZ0w5K3Z0SDVhTXBFRjUrM1VEOHNFYno0bjA2SWZoY2w0VUkvVXdBd1cyK3I5Y2dTTGcyOHRYZG02U2ZPdVpmSGxnZDVyMDlJZGtaT1ltRHVDTDZLc1RveHFSeDZuWHI5WUtvWEliTmhUWVJENEI1U3
-lHOW5VeFV4MDNtRkVpY2l1OVlmZ3ZoWnRuT0IrUjM1OVhOSDJQQVBSMHFjMm5yMTBkcWxsVVczUjNZZ05xdDZiYW83ZEh6OUgzU3RLZXJuNzU2VXNpUDN3eFZiU1RsbFFWRG4rNUdhemZrWHNTaWJlcWRGaSsr
-TUZ1U2NuVUQvdm1nQ2ZWdG1QV3RzZ2NrcDg4bHlvL2ZENU5PclVaMHB4Rk55dUlGQm5menY2MVQ4blgyUnNTRkhaNldraHV2YmxZN3JwbmlheFhJbzQ0MCt6Y01RTENSU011UEt3WGpEWkpZMDlFL3hBVS9HS0
-ZIMVJicmIvZkVRdWlRYktlYmtKWTNOOUdNbjAxclJZdXJoVmJyeGM1aHZLUEFzR3prdVJ3YllwOC80bDBlZjVZaXVSbk1SNXdYL3ZUb2x5WEZ3VlZEQkh6czBUKys1MTljdVBXQVJucVpQckR2blFuSlNpR2h2
-VTV0RzZmMjU4aS8rL1JOR25XNThxWVJyam0yT3E0V0J1TlYyMyszTWpmVU84ZGFvSDBxb2dWYUFlNHNtUlFibGc3S08rOE1VbVNTbk1sT1NkWlFrUDVla0ZrUmszdXpCenR0ZFVzVGRXSFNOSGpZZ1h3VnNGNH
-ltUUtpQjBSL1dVakh3UnQxYWtrNjFEenJGZEoxdG51WGlFYnhJTndnTi80dy9kTy9qcjJFbjRmaWNqN0FQMTdJSGxZRHA1Tmt1OC9sU292blVpUlBHMEllbXQ2TTB6VnlDY2YrL05vWTBBZlBVWEw4OWFyQitR
-amIraVYvdVlraGxZSkQrUXhTY2U5UjA0bnkxLytMRU1hMnBNa0srMzh1cDBxSWtWb3ZPdnh1VHRjNDdrMkhaYSt3WkQwOUlYMFZhM205R0ZadTNCSXJsdytLRmVzR0pUVnk0WWtOWDFJTW9oUkhsQXRPS0FLQU
-huaVFmeE5JR0tHOXBycE9uWk9UM2NFemNyVlEwbWFyYTk4SHdtcmhPa1JNdllhRWRPeG9WYWtwVkdKcHFZamhJTjRrTklxY0tRMjdXMzRuNUdYa2FGTHVMTEh4Y1VlSVVrYlEzOVcwUlNTaDNlbXlvTjdVNlJi
-UDhqVWVzeFVZYUVCZVh6ZnVYbGM2bFpUQlQwejk3bHR5NEI4NnYwOTB0OHd0NGhZcDgvenVmL0lrT3EyWk1uV3V1WHp5ZGJqYURPNnRyRjM5cUY3NzJYZGVXWXhvb2EwZzNPRTQzNTJwbjZlbHpFc2E4b2MrVF
-lzR3BMUzRtSEp5bGZ5aFlZbFJkdC9VTFY0U29oRzE1TXZFSjN3Qjd4d2J4TU9mY1d6bks3alJ3aWFwdVRNTHhSWlVLWk1WMjJxSmpybG5JNjVHanNpbm1zVnFha1FhYXAzWTdmQmNNOEQ3R1ZNb2YxRGpDM09O
-QjdPUVFmbWVvblc3cEFjcTB5V2gvZWx5djZxWkdsUnhjeXRjclRSMGxLMVljTU5NUGIyMGFnZEhvRU9PRmtGNGEzWERNaEgzOUFqZzYzSkVsN09tTkF3SXFxbGNlNWNrdnpGVDlMa2NIV1NMWWNDazZrNzZvan
-pHZjVET0RvdXJwS2hZem1BbUdKVjlHcGo5cW9vb2ZXeVZiTmxhYWVhclZxdnZHQklWcGNPeWZyeUlTa3JIcEpjVldLNUdmcTlXcGRxaU5pMU9aS0c5SHI4N3k0N2ZpRWpaUzd5ZS8rZTRSQm1Ld2VFWExaR2I2
-YXZUT3RNRWJFaFlsdXp5T21qcWdsclhPRjVNRHYwTys0VythREFueE1EMk5PeEVrSWJ0MDhib1ViSE1BMzFTYkxyZEpLY3FITkhVNWVPRi9TMGRLM1hWRzAxQ0dKVGsyUGdpdWkwNk9YZ3orV0JFZFp1Rlo0Rk
-9jUHkyYmYyeXFiVmc2Tmp4QVNIRVZFMSs2QVM0OHNQcHNxVEIvVVByYnowRkQrbjY4NmJRSlhKT2Uwc2x5MFlrbHMyREVoMWEwaWVPWndpYmZvWndObVdyNFF2ekI2VzR0eGhxOHNsUlVPeXNHQllTZ29ISlNk
-dldIS1VsSG5haHVsNkxoMnIzVksxbjcwSjMzOUNZdVlMTzk3SjlwMGU5aEkrTDF0TjFrMVhPVklpYUZOQWJJaFljVnlKZU1TTi8rZzF1RVZraTB5b05xSUllMEp0R05pbGpVVHFoRVlkanJib2VLYXFKbG5PTm
-9la3FrVVBIYmZWbnd0Smw1b3ZWaXQ2K21qdE9MYzhKVTlTWWdOZWNWWUFsajJSS1FEZ1UzS0hta0VxcUh4YW5Ec2tyNzlpUU41M2M3K1pTTU5tbWJ2ekV4bStma0xhekR1UEpjbDNuazJUSXpVcWpQcG9WTGRW
-ZWJoamMwM3Y2b202Nng5SzBqcHlIZFdnZHBKRk9VUHlIclVZWHFmMTFLbEcxT0V6eWRLc2xndTF4RFVLVmQ2TGxJQTVTc1NzdkNISjFzK3lsUGNaU1hvTlBTbWsxOVhMMm8yd2NUeGZvbGJOSXc4NzhqQ3VKMk
-t1ZCtOMmtVVXJSc2VQazd4cGJJaDQ5cVRJeVVPcUJuUXNPSFpnQzhiZWNpWUVVbS9wN3FyL3FsUU1hZU5oU0RDKzZPb1BTWXRxcUthT2tMVHBhN09Tc1ZYZjIyZnRJV252MFVON1pzaGxZM3p0L2FrMjN4N0Ez
-dk9HeTZ0cGxxSkNrcVphb1NBTFQ5MlFiRjB4S0p1V0QwbTVDcENZbFQ0RHp6eERzTHJReXV6U2V0bDdLa2xlT3BvaUo5WHFhTlYrdUxjL3llck16ZVBxWTl2NTd2RVpJME5RNm9neDNaYVZnN0pENjJpQmFqZE
-82aHZBaWhtdHFqUTlPVlhialE1c0VIdFQ3NmQvNnV2b05ZRzloTjlQQzc1eEl4SFpicnhuNmd5UC8rWWRJdVhMTHUxcHZRUmlRMFM4b1pVblJHb3J0U1pWOVZDd2lZUlJYZTdCb3dHOUJYZmhWdFpMMDZEY1Fn
-L1RVUHBuVDkrd2RLaFdQTmVyaC9iTWFNZ3VmWXdCSldTL2toWlNJaVQ4Zmp4azRXaGo3S2tDbHFlbVZMbjI5T1VxWERiUlBjZEllQjYwTHJFQWFuUzhXSzBkV1hzblJsRkllbnFTYkg1eGJQTXVVTTJXck9PN1
-BIMWRsajhzcFZwSE9seFgxcnJ2aldYYW9SbjRMUllIci9xOXY1YXZ5aWxWNmNWRS8zSVg0M2VNRXlFaDUrSzBXYnRseEhFekZjVE9XY01VQldQRWxvYlJlVUhVT0FYbmxyeWFKRWM4OUpScWMzcUlmSHAvKzJF
-dkFCemhJbkpla3BKdlNHMmdibjNGY1hDeDRtWW80ZEpTMVFUVFY2YW5RcHlydnpFQm00Vm5uREZvSlpsMXptaUVmcGZtMW1jZjBHZnZIdkR1TUFkT1k3bmZzSjJyV2s3UENXRnBSSWpJcFJDVmF2UnlPQUxlaD
-I4OFVnQjlOVzN1L3c2Zmc2VkhxRjllZ2NqQ3BmcGFGSWZPR2c5ckFTWGh1UmJuUmNWN2F2T0dlakNKNzIvTkt5MWdmK3VEOHF4V1Fid1BIeGNEdjRsS3F5akM1YkYva2Fqd1pYMHhyYk9MN0tVdkJvcWtoUFdQ
-Wkk5Z0gwYXBuSEVNWDFjVHFyTUIvVkJQUk02cEdULzJuckY2aWl5c3ZRKy9Xb05SaHZBclI3TGEwV2xLdnJRTU43K0lnd2J5UWNRcG1xT1JpQmtSdWF3VnpSZVEyekNQMk43bVRGZE1WaVpUR2VoYWNEUHY5Ul
-YxejduK3NOK3FSSHR0Q3V6VnYzY3ZFVzlHejdzVXVQWWtLODhYNTVMdzUraWxKM241T1llSjFGZlU2dWlDbStuZkl4K0YzM0NPdmRWL0dDb0JYTmQ4aG5WR3I4SGZhRHQvTUdjSTBYaGxEdEVtOWZYd3Y5ZHI4
-dlBwT3Q1aXF4SDlwU01MR2ZrWjd5R2lrWkxYOFB0SVl2S1p2ZXJCK1VaSS9UMkRFYXJBWDQvUC9YdGd0N3hNNWZDMS80ay8vN3lmaFArSXZLN0hmR2ZaeFVCVlhheHF4cTNIOEt1SG5hTC8rRlA1ZnB5ZmpTTD
-haZVE1a01tM0Q2OUdNSDhqZmNXRVRGVmlHZEgwU0lab25uVGhWLzcyNXhoWnd6Y1kyKzU4SGdWWmlDMFJ4ME5ZczNIVHkvWWlma0JNRkk1NXA1U1VQUVFIaEYvNUhET1hSeUJhQjFPWTkveU9POWdjZ3A3andi
-MDVBTGUyYS91LzlRTXJ6amhsR3EreXgvdnNjcytUME5Ebk5Wem1HUzhxVG53K1hoM3l4bit1ZjF2N2hmOEVrSUNEY3pqTlNCWW1CdWFpZWR6ODU1eWpyMFRBb01WWXF1VTFHcVR5Zi9NOTUvRzMxNEtYZ3BVcF
-hDaTdCd1dKTG1hZWlCSGcxbHFBOEY4Um1NN0RjajBJNjhuTG1CU0MwbHFtY1pYQXRDZ05TTndyWTFVUHpvc2tLdGZpZS90OUJQamNlNE1qd2Vkbzl2R2VLUkwyZk9IM0U0Ry9ITCs3ektVdkQ3M0FaTzROL0Qw
-djkxeDhqOUNiMHlMeUp0eFRoUjN0d3NmK01yeUhJSHhubitzWGtBS0MrYnJsZWtZYy9kdUhtUkdRVFNmcnc4MW9zd3o5M0p1TFV3WDNIL3VNMWxiaHNzUVFzMHJFeTJKc3hjeEFwVmpuNE8vQnZSbkhRcTVJWU
-JaRDhMR0EvSFFDTnM0TmZ4WUpOTFUzeFNmekhKVERyMUF4YlQ5VjZEMGhDY0k4RlpncGQ1bmZlZzBVK1hqVUJRUmpBZkxZeDhieE1WMENUUUlYZFA2WDA0WXpoUGdtNG5UQm8wM204V2FBNk5QQmVaM0VYTVZr
-Mnl4T2lEUmR6RzBpVGdGanEyTmMwM202U0VUaG1TeEJKZ2dXMlVaaXpuYzBGMEZBeEFBQjRnQnpRNjhIQ0pEZ0NJZ1lJRUFjSUNCaWdBQ3pEcEgvSDRwNVU2R0FOZGs1QUFBQUFFbEZUa1N1UW1DQyIvPgo8L2RlZnM+Cjwvc3ZnPgo=" alt="Character" width="170px" height="300px" style="display: block;">
                         </td>
                     </tr>
                     <tr>
-                        <td align="left" colspan="2">
-                            <p style="font-family: Arial, sans-serif; font-size: 12px;color: #555454; margin: 0;">This is an automated message.</p><p style="font-family: Arial, sans-serif; font-size: 12px;color: #555454; margin: 0;">Please do not reply.</p>
+                        <td style="padding: 10px; text-align: start;padding-left: 20px; padding-top: 50px;">
+                            <p style="color: #333333e2; font-size: 0.7em; margin: 0;">This is an automated message.</p>
+                            <p style="color: #333333e2; font-size: 0.7em; margin: 2px 0 20px;">Please do not reply.</p>
                         </td>
                     </tr>
                 </table>
diff --git a/django_logging/utils/console_colorizer.py b/django_logging/utils/console_colorizer.py
index a540cf7..d82f37e 100644
--- a/django_logging/utils/console_colorizer.py
+++ b/django_logging/utils/console_colorizer.py
@@ -3,23 +3,24 @@
 
 
 def colorize_log_format(log_format: str, levelname: str) -> str:
+    colors = AnsiColors()
     color_mapping = {
-        "%(asctime)s": f"{AnsiColors.CYAN}%(asctime)s{AnsiColors.RESET}",
-        "%(created)f": f"{AnsiColors.BRIGHT_BLUE}%(created)f{AnsiColors.RESET}",
-        "%(relativeCreated)d": f"{AnsiColors.MAGENTA}%(relativeCreated)d{AnsiColors.RESET}",
-        "%(msecs)d": f"{AnsiColors.YELLOW}%(msecs)d{AnsiColors.RESET}",
-        "%(levelname)s": f"{LOG_LEVEL_COLORS.get(levelname, '')}%(levelname)s{AnsiColors.RESET}",
-        "%(levelno)d": f"{AnsiColors.RED}%(levelno)d{AnsiColors.RESET}",
-        "%(name)s": f"{AnsiColors.BRIGHT_MAGENTA}%(name)s{AnsiColors.RESET}",
-        "%(module)s": f"{AnsiColors.BRIGHT_GREEN}%(module)s{AnsiColors.RESET}",
-        "%(filename)s": f"{AnsiColors.YELLOW}%(filename)s{AnsiColors.RESET}",
-        "%(pathname)s": f"{AnsiColors.CYAN}%(pathname)s{AnsiColors.RESET}",
-        "%(lineno)d": f"{AnsiColors.RED}%(lineno)d{AnsiColors.RESET}",
-        "%(funcName)s": f"{AnsiColors.BRIGHT_BLUE}%(funcName)s{AnsiColors.RESET}",
-        "%(process)d": f"{AnsiColors.MAGENTA}%(process)d{AnsiColors.RESET}",
-        "%(thread)d": f"{AnsiColors.CYAN}%(thread)d{AnsiColors.RESET}",
-        "%(threadName)s": f"{AnsiColors.BRIGHT_MAGENTA}%(threadName)s{AnsiColors.RESET}",
-        "%(message)s": f"{AnsiColors.GRAY}%(message)s{AnsiColors.RESET}",
+        "%(asctime)s": f"{colors.CYAN}%(asctime)s{colors.RESET}",
+        "%(created)f": f"{colors.BRIGHT_BLUE}%(created)f{colors.RESET}",
+        "%(relativeCreated)d": f"{colors.MAGENTA}%(relativeCreated)d{colors.RESET}",
+        "%(msecs)d": f"{colors.YELLOW}%(msecs)d{colors.RESET}",
+        "%(levelname)s": f"{LOG_LEVEL_COLORS.get(levelname, '')}%(levelname)s{colors.RESET}",
+        "%(levelno)d": f"{colors.RED}%(levelno)d{colors.RESET}",
+        "%(name)s": f"{colors.BRIGHT_MAGENTA}%(name)s{colors.RESET}",
+        "%(module)s": f"{colors.BRIGHT_GREEN}%(module)s{colors.RESET}",
+        "%(filename)s": f"{colors.YELLOW}%(filename)s{colors.RESET}",
+        "%(pathname)s": f"{colors.CYAN}%(pathname)s{colors.RESET}",
+        "%(lineno)d": f"{colors.RED}%(lineno)d{colors.RESET}",
+        "%(funcName)s": f"{colors.BRIGHT_BLUE}%(funcName)s{colors.RESET}",
+        "%(process)d": f"{colors.MAGENTA}%(process)d{colors.RESET}",
+        "%(thread)d": f"{colors.CYAN}%(thread)d{colors.RESET}",
+        "%(threadName)s": f"{colors.BRIGHT_MAGENTA}%(threadName)s{colors.RESET}",
+        "%(message)s": f"{colors.GRAY}%(message)s{colors.RESET}",
     }
 
     for placeholder, colorized in color_mapping.items():
diff --git a/django_logging/utils/set_conf.py b/django_logging/utils/set_conf.py
index 6cffa65..eedc36d 100644
--- a/django_logging/utils/set_conf.py
+++ b/django_logging/utils/set_conf.py
@@ -19,7 +19,7 @@
 )
 
 
-# pylint: disable=too-many-arguments
+# pylint: disable=too-many-arguments, too-many-locals
 def set_config(
     log_levels: LogLevels,
     log_dir: LogDir,
@@ -98,6 +98,8 @@ def set_config(
     except (ValueError, ImproperlyConfigured, AttributeError, FileNotFoundError):
         import logging
 
+        colors = AnsiColors()
+
         logging.warning(
             "\n"
             "========================%sDJANGO LOGGING%s"
@@ -106,10 +108,10 @@ def set_config(
             " A configuration issue has been detected.\n"
             "System checks will be run to provide more detailed information.\n"
             "==============================================================\n",
-            AnsiColors.RED_BACKGROUND,
-            AnsiColors.RESET,
-            AnsiColors.RED,
-            AnsiColors.RESET,
+            colors.RED_BACKGROUND,
+            colors.RESET,
+            colors.RED,
+            colors.RESET,
         )
         return
 
diff --git a/django_logging/validators/config_validators.py b/django_logging/validators/config_validators.py
index 611c121..67de299 100644
--- a/django_logging/validators/config_validators.py
+++ b/django_logging/validators/config_validators.py
@@ -237,3 +237,16 @@ def validate_email_notifier(notifier_config: LogEmailNotifierType) -> List[Error
                 )
             )
     return errors
+
+
+def validate_integer_setting(value: int, config_name: str) -> List[Error]:
+    errors: List[Error] = []
+    if not isinstance(value, int) or value < 0:
+        errors.append(
+            Error(
+                f"{config_name} is not a valid integer.",
+                hint=f"Ensure {config_name} is a valid positive integer",
+                id=f"django_logging.E019_{config_name}",
+            )
+        )
+    return errors
diff --git a/docs/contributing.rst b/docs/contributing.rst
index 851e6ee..bd8b3e9 100644
--- a/docs/contributing.rst
+++ b/docs/contributing.rst
@@ -1,4 +1,4 @@
-Contributing to django_logging
+Contributing
 ==============================
 
 We’re excited that you’re interested in contributing to `django_logging`! Whether you’re fixing a bug, adding a feature, or improving the project, your help is appreciated.
@@ -32,7 +32,7 @@ Setting Up Your Environment
 
 3. **Install Dependencies:**
 
-   Install the necessary dependencies using `Poetry`. If Poetry isn't installed on your machine, you can find installation instructions on the `Poetry website <https://python-poetry.org/docs/#installation>`_.
+   Install the necessary dependencies using ``Poetry``. If Poetry isn't installed on your machine, you can find installation instructions on the `Poetry website <https://python-poetry.org/docs/#installation>`_.
 
    .. code-block:: bash
 
@@ -49,7 +49,7 @@ Setting Up Your Environment
 Testing Your Changes
 --------------------
 
-We use `pytest` for running tests. Before submitting your changes, ensure that all tests pass:
+We use ``pytest`` for running tests. Before submitting your changes, ensure that all tests pass:
 
 .. code-block:: bash
 
@@ -60,14 +60,14 @@ If you’re adding a new feature or fixing a bug, don’t forget to write tests
 Code Style Guidelines
 ----------------------
 
-Maintaining a consistent code style is crucial. We use `black` for code formatting and `isort` for import sorting. Make sure your code adheres to these styles:
+Maintaining a consistent code style is crucial. We use ``black`` for code formatting and ``isort`` for import sorting. Make sure your code adheres to these styles:
 
 .. code-block:: bash
 
     poetry run black .
     poetry run isort .
 
-For linting, `pylint` is used to enforce style and catch potential errors:
+For linting, ``pylint`` is used to enforce style and catch potential errors:
 
 .. code-block:: bash
 
@@ -123,7 +123,7 @@ Once your changes are ready, follow these steps to submit them:
 
 3. **Open a Pull Request:**
 
-   Go to the original `django_logging` repository and open a pull request. Include a detailed description of your changes and link any related issues.
+   Go to the original `django_logging <https://github.com/Lazarus-org/django_logging>`_ repository and open a pull request. Include a detailed description of your changes and link any related issues.
 
 4. **Respond to Feedback:**
 
@@ -154,6 +154,6 @@ Here are some additional resources that might be helpful:
 - `pylint Documentation <https://pylint.pycqa.org/en/latest/>`_
 - `Pre-commit Documentation <https://pre-commit.com/>`_
 
----
+----
 
 Thank you for your interest in contributing to `django_logging`! We look forward to your contributions.
diff --git a/docs/index.rst b/docs/index.rst
index 1e8d2f8..a4cd4f1 100644
--- a/docs/index.rst
+++ b/docs/index.rst
@@ -5,21 +5,51 @@ Welcome to django_logging Documentation!
 
    <br />
 
-.. image:: https://img.shields.io/pypi/v/django_logging
-   :target: https://pypi.org/project/django_logging/
-   :alt: PyPI release
+.. image:: https://img.shields.io/github/license/ARYAN-NIKNEZHAD/django_logging
+    :target: https://github.com/lazarus-org/django_logging/blob/main/LICENSE
+    :alt: License
 
-.. image:: https://img.shields.io/pypi/pyversions/django_logging
-   :target: https://pypi.org/project/django_logging/
-   :alt: Supported Python versions
+.. image:: https://img.shields.io/pypi/v/dj-logging
+    :target: https://pypi.org/project/dj-logging/
+    :alt: PyPI release
+
+.. image:: https://img.shields.io/readthedocs/django-logging
+    :target: https://django-logging.readthedocs.io/en/latest/
+    :alt: Documentation
+
+.. image:: https://img.shields.io/badge/pylint-10/10-brightgreen?logo=python&logoColor=blue
+   :target: https://www.pylint.org/
+   :alt: Pylint
+
+.. image:: https://img.shields.io/pypi/pyversions/dj-logging
+    :target: https://pypi.org/project/dj-logging/
+    :alt: Supported Python versions
+
+.. image:: https://img.shields.io/pypi/djversions/dj-logging
+    :target: https://pypi.org/project/dj-logging/
+    :alt: Supported Django versions
+
+.. image:: https://img.shields.io/badge/pre--commit-enabled-brightgreen?logo=pre-commit&logoColor=yellow
+   :target: https://github.com/pre-commit/pre-commit
+   :alt: pre-commit
+
+.. image:: https://img.shields.io/github/issues/ARYAN-NIKNEZHAD/django_logging
+    :target: https://github.com/lazarus-org/django_logging/issues
+    :alt: Open Issues
+
+.. image:: https://img.shields.io/github/last-commit/ARYAN-NIKNEZHAD/django_logging
+    :target: https://github.com/lazarus-org/django_logging/commits/main
+    :alt: Last Commit
+
+.. image:: https://img.shields.io/github/languages/top/ARYAN-NIKNEZHAD/django_logging
+    :target: https://github.com/lazarus-org/django_logging
+    :alt: Languages
+
+.. image:: https://img.shields.io/codecov/c/github/ARYAN-NIKNEZHAD/django_logging/main
+   :target: https://codecov.io/gh/lazarus-org/django_logging
+   :alt: Coverage
 
-.. image:: https://img.shields.io/pypi/djversions/django_logging
-   :target: https://pypi.org/project/django_logging/
-   :alt: Supported Django versions
 
-.. image:: https://img.shields.io/readthedocs/django_logging
-   :target: https://django_logging.readthedocs.io/
-   :alt: Documentation
 
 |br|
 
@@ -56,7 +86,7 @@ Issues
 ------
 If you have questions or have trouble using the app please file a bug report at:
 
-https://github.com/ARYAN-NIKNEZHAD/django_logging
+https://github.com/lazarus-org/django_logging/issues
 
 
 Indices and tables
diff --git a/docs/quick_start.rst b/docs/quick_start.rst
index 94c2c88..0587774 100644
--- a/docs/quick_start.rst
+++ b/docs/quick_start.rst
@@ -3,49 +3,54 @@ Quick Start
 
 Getting Started with `django_logging` is simple. Follow these steps to get up and running quickly:
 
-1. **Installation**
+1. **Install the Package**
 
-   Install `django_logging` via pip:
+   first, Install `django_logging` via pip:
 
-   .. code-block:: shell
+.. code-block:: shell
 
-      $ pip install django_logging
+  $ pip install dj-logging
 
 2. **Add to Installed Apps**
 
-   Add `django_logging` to your `INSTALLED_APPS` in your Django settings file:
+   Add `django_logging` to your ``INSTALLED_APPS`` in your Django settings file:
 
-   .. code-block::
+.. code-block::
 
-      INSTALLED_APPS = [
-          ...
-          'django_logging',
-          ...
-      ]
+  INSTALLED_APPS = [
+      ...
+      'django_logging',
+      ...
+  ]
 
-3. **Default Configuration**
+3. **Run Your Server**
 
-   By default, `django_logging` is configured to use its built-in settings. You do not need to configure anything manually unless you want to customize the behavior. The default settings will automatically handle logging with predefined formats and options.
+   Start your Django Development server to verify the installation:
 
-4. **Verify Installation**
+.. code-block:: shell
 
-   To ensure everything is set up correctly, run your Django development server:
+   python manage.py runserver
 
-    .. code-block:: shell
+when the server starts, you'll see an initialization message like this in your *console*:
 
-      python manage.py runserver
+.. code-block:: text
 
-   By default, `django_logging` will log an initialization message to the console that looks like this:
+  INFO | django_logging | Logging initialized with the following configurations:
+  Log File levels: ['DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL'].
+  Log files are being written to: logs.
+  Console output level: DEBUG.
+  Colorize console: True.
+  Log date format: %Y-%m-%d %H:%M:%S.
+  Email notifier enabled: False.
 
-    .. code-block:: text
+By default, django_logging will log each level to its own file:
 
-      INFO | django_logging | Logging initialized with the following configurations:
-      Log File levels: ['DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL'].
-      Log files are being written to: logs.
-      Console output level: DEBUG.
-      Colorize console: True.
-      Log date format: %Y-%m-%d %H:%M:%S.
-      Email notifier enabled: False.
+- DEBUG : ``logs/debug.log``
+- INFO : ``logs/info.log``
+- WARNING : ``logs/warning.log``
+- ERROR : ``logs/error.log``
+- CRITICAL : ``logs/critical.log``
 
+In addition, logs will be displayed in **colorized** mode in the ``console``, making it easier to distinguish between different log levels.
 
-That's it! `django_logging` is ready to use with default settings. For further customization, refer to the [Settings](settings.rst) section.
\ No newline at end of file
+That's it! `django_logging` is ready to use. For further customization, refer to the :doc:`Settings <settings>`.
\ No newline at end of file
diff --git a/docs/rules.rst b/docs/rules.rst
index 8e029d8..d61c253 100644
--- a/docs/rules.rst
+++ b/docs/rules.rst
@@ -17,7 +17,7 @@ Available Roles
 
 2. **Request Logging Role**
 
-   The Request Logging Role is specifically designed to log HTTP request details. This role captures information such as the request path, user, IP address, and user agent.
+   The Request Logging Role is specifically designed to log HTTP request details. This role captures information such as the ``request path``, ``user``, ``IP address``, and ``user agent``.
 
    **Key Features:**
    - Logs details of incoming requests.
@@ -54,7 +54,7 @@ Available Roles
 
       log_and_notify_admin(logger, logging.CRITICAL, "Critical error occurred!")
 
-   **Note:** To use this role, ensure that `LOG_EMAIL_NOTIFIER` is enabled and properly configured.
+   **Note:** To use this role, ensure that ``ENABLE`` option of ``LOG_EMAIL_NOTIFIER`` is set to ``True``.
 
 4. **Context Manager Role**
 
diff --git a/docs/settings.rst b/docs/settings.rst
index 2fa4672..02ef085 100644
--- a/docs/settings.rst
+++ b/docs/settings.rst
@@ -1,75 +1,110 @@
 Settings
 ========
 
-By default, `django_logging` uses a built-in configuration that requires no additional setup. However, you can customize the logging settings by adding the `DJANGO_LOGGING` dictionary configuration to your Django `settings` file.
-
-Example configuration:
-
-   .. code-block:: python
-
-      DJANGO_LOGGING = {
-          "AUTO_INITIALIZATION_ENABLE": True,
-          "INITIALIZATION_MESSAGE_ENABLE": True,
-          "LOG_FILE_LEVELS": ["DEBUG", "INFO", "WARNING", "ERROR", "CRITICAL"],
-          "LOG_DIR": "logs",
-          "LOG_FILE_FORMATS": {
-              "DEBUG": 1,
-              "INFO": 1,
-              "WARNING": 1,
-              "ERROR": 1,
-              "CRITICAL": 1,
-          },
-          "LOG_CONSOLE_LEVEL": "DEBUG",
-          "LOG_CONSOLE_FORMAT": 1,
-          "LOG_CONSOLE_COLORIZE": True,
-          "LOG_DATE_FORMAT": "%Y-%m-%d %H:%M:%S",
-          "LOG_EMAIL_NOTIFIER": {
-              "ENABLE": False,
-              "NOTIFY_ERROR": False,
-              "NOTIFY_CRITICAL": False,
-              "LOG_FORMAT": 1,
-              "USE_TEMPLATE": True,
-          },
-      }
+By default, `django_logging` uses a built-in configuration that requires no additional setup. However, you can customize the logging settings by adding the ``DJANGO_LOGGING`` dictionary configuration to your Django ``settings`` file.
+
+Example configuration
+---------------------
+here is an example of DJANGO_LOGGING in project settings:
+
+.. code-block:: python
+
+  DJANGO_LOGGING = {
+      "AUTO_INITIALIZATION_ENABLE": True,
+      "INITIALIZATION_MESSAGE_ENABLE": True,
+      "LOG_FILE_LEVELS": ["DEBUG", "INFO", "WARNING", "ERROR", "CRITICAL"],
+      "LOG_DIR": "logs",
+      "LOG_FILE_FORMATS": {
+          "DEBUG": 1,
+          "INFO": 1,
+          "WARNING": 1,
+          "ERROR": 1,
+          "CRITICAL": 1,
+      },
+      "LOG_CONSOLE_LEVEL": "DEBUG",
+      "LOG_CONSOLE_FORMAT": 1,
+      "LOG_CONSOLE_COLORIZE": True,
+      "LOG_DATE_FORMAT": "%Y-%m-%d %H:%M:%S",
+      "LOG_EMAIL_NOTIFIER": {
+          "ENABLE": False,
+          "NOTIFY_ERROR": False,
+          "NOTIFY_CRITICAL": False,
+          "LOG_FORMAT": 1,
+          "USE_TEMPLATE": True,
+      },
+  }
 
 
 Here's a breakdown of the available configuration options:
 
-- **AUTO_INITIALIZATION_ENABLE**: Accepts `bool`. Enables automatic initialization of logging configurations. Defaults to `True`.
+``AUTO_INITIALIZATION_ENABLE``
+------------------------------
+
+Accepts ``bool``. Enables automatic initialization of logging configurations. Defaults to ``True``.
+
+``INITIALIZATION_MESSAGE_ENABLE``
+---------------------------------
+
+Accepts ``bool``. Enables logging of the initialization message. Defaults to ``True``.
+
+``LOG_FILE_LEVELS``
+-------------------
+
+Accepts a list of valid log levels (a list of ``str`` where each value must be one of the valid levels). Defines the log levels for file logging. Defaults to ``['DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL']``.
 
-- **INITIALIZATION_MESSAGE_ENABLE**: Accepts `bool`. Enables logging of the initialization message. Defaults to `True`.
+``LOG_DIR``
+-----------
 
-- **LOG_FILE_LEVELS**: Accepts a list of valid log levels (a list of `str` where each value must be one of the valid levels). Defines the log levels for file logging. Defaults to `['DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL']`.
+Accepts ``str`` like ``"path/to/logs"`` or a path using functions like ``os.path.join()``. Specifies the directory where log files will be stored.  Defaults to ``"logs"``.
 
-- **LOG_DIR**: Accepts `str` like `"path/to/logs"` or a path using functions like `os.path.join()`. Specifies the directory where log files will be stored.  Defaults to `"logs"`.
+``LOG_FILE_FORMATS``
+--------------------
 
-- **LOG_FILE_FORMATS**: Accepts log levels as keys and format options as values. The format option can be an `int` chosen from predefined options or a user-defined format `str`. Defines the format for log files. Defaults to `1` for all levels.
+Accepts log levels as keys and format options as values. The format option can be an ``int`` chosen from predefined options or a user-defined format ``str``. Defines the format for log files. Defaults to ``1`` for all levels.
 
- - **Note**:See the **Available Format Options** below for available formats.
+ - **Note**:
+    See the `Available Format Options`_ below for available formats.
 
-- **LOG_CONSOLE_LEVEL**: Accepts `str` that is a valid log level. Specifies the log level for console output. Defaults to `'DEBUG'`,
+``LOG_CONSOLE_LEVEL``
+---------------------
 
-- **LOG_CONSOLE_FORMAT**: Accepts the same options as `LOG_FILE_FORMATS`. Defines the format for console output. Defaults to `1`.
+Accepts ``str`` that is a valid log level. Specifies the log level for console output. Defaults to ``'DEBUG'``,
 
-- **LOG_CONSOLE_COLORIZE**: Accepts `bool`. Determines whether to colorize console output. Defaults to `True`.
+``LOG_CONSOLE_FORMAT``
+----------------------
+
+Accepts the same options as ``LOG_FILE_FORMATS``. Defines the format for console output. Defaults to ``1``.
+
+``LOG_CONSOLE_COLORIZE``
+------------------------
+
+Accepts ``bool``. Determines whether to colorize console output. Defaults to ``True``.
+
+``LOG_DATE_FORMAT``
+-------------------
+
+Accepts ``str`` that is a valid datetime format. Specifies the date format for log messages. Defaults to ``'%Y-%m-%d %H:%M:%S'``.
+
+``LOG_EMAIL_NOTIFIER``
+----------------------
 
-- **LOG_DATE_FORMAT**: Accepts `str` that is a valid datetime format. Specifies the date format for log messages. Defaults to `'%Y-%m-%d %H:%M:%S'`.
+Is a dictionary where:
 
-- **LOG_EMAIL_NOTIFIER**: Is a dictionary where:
+ - ``ENABLE``: Accepts ``bool``. Determines whether the email notifier is enabled. Defaults to ``False``.
 
- - **ENABLE**: Accepts `bool`. Determines whether the email notifier is enabled. Defaults to `False`.
+ - ``NOTIFY_ERROR``: Accepts ``bool``. Determines whether to notify on error logs. Defaults to ``False``.
 
- - **NOTIFY_ERROR**: Accepts `bool`. Determines whether to notify on error logs. Defaults to `False`.
+ - ``NOTIFY_CRITICAL``: Accepts ``bool``. Determines whether to notify on critical logs. Defaults to ``False``.
 
- - **NOTIFY_CRITICAL**: Accepts `bool`. Determines whether to notify on critical logs. Defaults to `False`.
+ - ``LOG_FORMAT``: Accepts the same options as other log formats (``int`` or ``str``). Defines the format for log messages sent via email.  Defaults to ``1``.
 
- - **LOG_FORMAT**: Accepts the same options as other log formats (`int` or `str`). Defines the format for log messages sent via email.  Defaults to `1`.
+ - ``USE_TEMPLATE``: Accepts ``bool``. Determines whether the email includes an HTML template.  Defaults to ``True``.
 
- - **USE_TEMPLATE**: Accepts `bool`. Determines whether the email includes an HTML template.  Defaults to `True`.
 
+.. _available_format_options:
 
 Available Format Options
-=========================
+------------------------
 
 The `django_logging` package provides predefined log format options that you can use in configuration. These options can be applied to log formats. Below are the available format options:
 
@@ -91,26 +126,26 @@ The `django_logging` package provides predefined log format options that you can
         13: "%(levelname)s | [%(asctime)s] | {%(name)s} | (%(filename)s:%(lineno)d): %(message)s",
     }
 
-You can reference these formats by their corresponding integer keys in your logging configuration settings.
+You can reference these formats by their corresponding **integer keys** in your logging configuration settings.
 
 
 Required Email Settings
 -----------------------
 
-To use the email notifier, the following email settings must be configured in your `settings.py`:
+To use the email notifier, the following email settings must be configured in your ``settings.py``:
 
-- **`EMAIL_HOST`**: The host to use for sending emails.
-- **`EMAIL_PORT`**: The port to use for the email server.
-- **`EMAIL_HOST_USER`**: The username to use for the email server.
-- **`EMAIL_HOST_PASSWORD`**: The password to use for the email server.
-- **`EMAIL_USE_TLS`**: Whether to use a TLS (secure) connection when talking to the email server.
-- **`DEFAULT_FROM_EMAIL`**: The default email address to use for sending emails.
-- **`ADMIN_EMAIL`**: The email address where log notifications will be sent. This is the recipient address used by the email notifier to deliver the logs.
+- ``EMAIL_HOST``: The host to use for sending emails.
+- ``EMAIL_PORT``: The port to use for the email server.
+- ``EMAIL_HOST_USER``: The username to use for the email server.
+- ``EMAIL_HOST_PASSWORD``: The password to use for the email server.
+- ``EMAIL_USE_TLS``: Whether to use a TLS (secure) connection when talking to the email server.
+- ``DEFAULT_FROM_EMAIL``: The default email address to use for sending emails.
+- ``ADMIN_EMAIL``: The email address where log notifications will be sent. This is the recipient address used by the email notifier to deliver the logs.
 
 Example Email Settings
 ----------------------
 
-Below is an example configuration for the email settings in your `settings.py`:
+Below is an example configuration for the email settings in your ``settings.py``:
 
 .. code-block:: python
 
@@ -122,4 +157,4 @@ Below is an example configuration for the email settings in your `settings.py`:
    DEFAULT_FROM_EMAIL = "your-email@example.com"
    ADMIN_EMAIL = "admin@example.com"
 
-These settings ensure that the email notifier is correctly configured to send log notifications to the specified `ADMIN_EMAIL` address.
+These settings ensure that the email notifier is correctly configured to send log notifications to the specified ``ADMIN_EMAIL`` address.
diff --git a/docs/usage.rst b/docs/usage.rst
index e9d741c..6b7d82a 100644
--- a/docs/usage.rst
+++ b/docs/usage.rst
@@ -1,9 +1,10 @@
 Usage
 =====
 
-Once `django_logging` is installed and added to your `INSTALLED_APPS`, you can start using it right away. The package provides several features to customize and enhance logging in your Django project. Below is a guide on how to use the various features provided by `django_logging`.
+Once ``django_logging`` is installed and added to your ``INSTALLED_APPS``, you can start using it right away. The package provides several features to customize and enhance logging in your Django project. Below is a guide on how to use the various features provided by `django_logging`.
 
-1. **Basic Logging Usage**
+Basic Logging Usage
+-------------------
 
    At its core, `django_logging` is built on top of Python’s built-in logging module. This means you can use the standard logging module to log messages across your Django project. Here’s a basic example of logging usage:
 
@@ -21,9 +22,10 @@ Once `django_logging` is installed and added to your `INSTALLED_APPS`, you can s
 
    These logs will be handled according to the configurations set up by `django_logging`, using either the default settings or any custom settings you've provided.
 
-2. **Request Logging Middleware**
+Request Logging Middleware
+--------------------------
 
-   To capture and log information of each request to the server, such as the request path, user, IP address, and user agent, add `django_logging.middleware.RequestLogMiddleware` to your `MIDDLEWARE` setting:
+   To capture and log information of each request to the server, such as the ``request path``, ``user``, ``IP address`` and ``user agent``, add ``django_logging.middleware.RequestLogMiddleware`` to your ``MIDDLEWARE`` setting:
 
    .. code-block::
 
@@ -33,16 +35,16 @@ Once `django_logging` is installed and added to your `INSTALLED_APPS`, you can s
           ...
       ]
 
-   This middleware will log the request details at info level, here is an example with default format:
+   This middleware will log the request details at ``INFO`` level, here is an example with default format:
 
    .. code-block:: text
 
       INFO | 'datetime' | django_logging | Request Info: (request_path: /example-path, user: example_user,
       IP: 192.168.1.1, user_agent: Mozilla/5.0)
 
-3. **Context Manager**
-
-   You can use the `config_setup` context manager to temporarily apply `django_logging` configurations within a specific block of code.
+Context Manager
+---------------
+   You can use the ``config_setup`` context manager to temporarily apply `django_logging` configurations within a specific block of code.
 
    Example usage:
 
@@ -63,15 +65,16 @@ Once `django_logging` is installed and added to your `INSTALLED_APPS`, you can s
           foo()
 
 
-   Note: `AUTO_INITIALIZATION_ENABLE` must be set to `False` in the settings to use the context manager. If `AUTO_INITIALIZATION_ENABLE` is `True`, attempting to use the context manager will raise a `ValueError` with the message:
+   Note: ``AUTO_INITIALIZATION_ENABLE`` must be set to ``False`` in the settings to use the context manager. If it is ``True``, attempting to use the context manager will raise a ``ValueError`` with the message:
 
    .. code-block:: text
 
       "You must set 'AUTO_INITIALIZATION_ENABLE' to False in DJANGO_LOGGING in your settings to use the context manager."
 
-4. **Log and Notify Utility**
+Log and Notify Utility
+----------------------
 
-   To send specific logs as email, use the `log_and_notify_admin` function. Ensure that the `ENABLE` option in `LOG_EMAIL_NOTIFIER` is sent to `True` in your settings:
+   To send specific logs as email, use the ``log_and_notify_admin`` function. Ensure that the ``ENABLE`` option in ``LOG_EMAIL_NOTIFIER`` is set to ``True`` in your settings:
 
    .. code-block:: python
 
@@ -82,7 +85,7 @@ Once `django_logging` is installed and added to your `INSTALLED_APPS`, you can s
 
       log_and_notify_admin(logger, logging.INFO, "This is a log message")
 
-   You can also include additional request information in the email by passing an `extra` dictionary:
+   You can also include additional request information (``ip_address`` and ``browser_type``) in the email by passing an ``extra`` dictionary:
 
    .. code-block:: python
 
@@ -97,18 +100,19 @@ Once `django_logging` is installed and added to your `INSTALLED_APPS`, you can s
               logger, logging.INFO, "This is a log message", extra={"request": request}
           )
 
-   Note: To use the email notifier, `LOG_EMAIL_NOTIFIER["ENABLE"]` must be set to `True`. If it is not enabled, calling `log_and_notify_admin` will raise a `ValueError`:
+   Note: To use the email notifier, ``LOG_EMAIL_NOTIFIER["ENABLE"]`` must be set to ``True``. If it is not, calling ``log_and_notify_admin`` will raise a ``ValueError``:
 
    .. code-block:: text
 
       "Email notifier is disabled. Please set the 'ENABLE' option to True in the 'LOG_EMAIL_NOTIFIER' in DJANGO_LOGGING in your settings to activate email notifications."
 
    Additionally, ensure that all required email settings are configured in your Django settings file.
-    - **Note**: For more detailed configuration options, refer to the [Settings](settings.rst) section.
+    - **Note**: For more detailed configuration options, refer to the :doc:`Settings <settings>`.
 
-5. **Send Logs Command**
+Send Logs Command
+-----------------
 
-   To send the entire log directory to a specified email address, use the `send_logs` management command:
+   To send the entire log directory to a specified email address, use the ``send_logs`` management command:
 
    .. code-block:: shell
 
@@ -116,4 +120,53 @@ Once `django_logging` is installed and added to your `INSTALLED_APPS`, you can s
 
    This command will attach the log directory and send a zip file to the provided email address.
 
+Execution Tracker Decorator
+---------------------------
+
+The ``execution_tracker`` decorator is used to log the performance metrics of any function. It tracks execution time and the number of database queries for decorated function (if enabled).
+
+Example Usage:
+
+.. code-block:: python
+
+    from django_logging.decorators import execution_tracker
+
+
+    @execution_tracker(
+        logging_level=logging.INFO,
+        log_queries=True,
+        query_threshold=10,
+        query_exceed_warning=False,
+    )
+    def some_function():
+        # function code
+        pass
+
+**Arguments:**
+
+- ``logging_level`` (``int``): The logging level at which performance details will be logged. Defaults to ``logging.INFO``.
+
+- ``log_queries`` (``bool``): Whether to log the number of database queries for decorated function(if ``DEBUG`` is ``True`` in your settings). If ``log_queries=True``, the number of queries will be included in the logs. Defaults to ``False``.
+
+- ``query_threshold`` (``int``): If provided, the number of database queries will be checked. If the number of queries exceeds the given threshold, a warning will be logged. Defaults to ``None``.
+
+- ``query_exceed_warning`` (``bool``): Whether to log a ``WARNING`` message if the number of queries exceeds the threshold. Defaults to ``False``.
+
+**Example Log Output:**
+
+.. code-block:: shell
+
+    INFO | 'datetime' | execution_tracking | Performance Metrics for Function: 'some_function'
+      Module: some_module
+      File: /path/to/file.py, Line: 123
+      Execution Time: 0 minute(s) and 0.2132 second(s)
+      Database Queries: 15 queries (exceeds threshold of 10)
+
+If `log_queries` is set to ``True`` but ``DEBUG`` is ``False``, a ``WARNING`` will be logged:
+
+.. code-block:: shell
+
+    WARNING | 'datetime' | execution_tracking | DEBUG mode is disabled, so database queries are not tracked.
+    To include the number of queries, set ``DEBUG`` to ``True`` in your Django settings.
+
 
diff --git a/packages/requirements-dev.txt b/packages/requirements-dev.txt
index 09d5cc2..9e8a590 100644
--- a/packages/requirements-dev.txt
+++ b/packages/requirements-dev.txt
@@ -1,4 +1,5 @@
 alabaster==0.7.13 ; python_version >= "3.8" and python_version < "4.0"
+annotated-types==0.7.0 ; python_version >= "3.8" and python_version < "4.0"
 argcomplete==3.5.0 ; python_version >= "3.8" and python_version < "4.0"
 asgiref==3.8.1 ; python_version >= "3.8" and python_version < "4.0"
 astroid==3.2.4 ; python_version >= "3.8" and python_version < "4.0"
@@ -7,10 +8,11 @@ backports-zoneinfo==0.2.1 ; python_version >= "3.8" and python_version < "3.9"
 bandit[toml]==1.7.9 ; python_version >= "3.8" and python_version < "4.0"
 black==24.8.0 ; python_version >= "3.8" and python_version < "4.0"
 cachetools==5.5.0 ; python_version >= "3.8" and python_version < "4.0"
-certifi==2024.7.4 ; python_version >= "3.8" and python_version < "4.0"
+certifi==2024.8.30 ; python_version >= "3.8" and python_version < "4.0"
 cfgv==3.4.0 ; python_version >= "3.8" and python_version < "4.0"
 chardet==5.2.0 ; python_version >= "3.8" and python_version < "4.0"
 charset-normalizer==3.3.2 ; python_version >= "3.8" and python_version < "4.0"
+click-option-group==0.5.6 ; python_version >= "3.8" and python_version < "4"
 click==8.1.7 ; python_version >= "3.8" and python_version < "4.0"
 codecov==2.1.13 ; python_version >= "3.8" and python_version < "4.0"
 colorama==0.4.6 ; python_version >= "3.8" and python_version < "4.0"
@@ -22,16 +24,20 @@ dill==0.3.8 ; python_version >= "3.8" and python_version < "4.0"
 distlib==0.3.8 ; python_version >= "3.8" and python_version < "4.0"
 django-stubs-ext==5.0.4 ; python_version >= "3.8" and python_version < "4.0"
 django-stubs==5.0.4 ; python_version >= "3.8" and python_version < "4.0"
-django==4.2.15 ; python_version >= "3.8" and python_version < "3.10"
-django==5.1 ; python_version >= "3.10" and python_version < "4.0"
+django==4.2.16 ; python_version >= "3.8" and python_version < "3.10"
+django==5.1.1 ; python_version >= "3.10" and python_version < "4.0"
 docformatter==1.7.5 ; python_version >= "3.8" and python_version < "4.0"
 docutils==0.19 ; python_version >= "3.8" and python_version < "4.0"
+dotty-dict==1.3.1 ; python_version >= "3.8" and python_version < "4.0"
 exceptiongroup==1.2.2 ; python_version >= "3.8" and python_version < "3.11"
 filelock==3.15.4 ; python_version >= "3.8" and python_version < "4.0"
+gitdb==4.0.11 ; python_version >= "3.8" and python_version < "4.0"
+gitpython==3.1.43 ; python_version >= "3.8" and python_version < "4.0"
 identify==2.6.0 ; python_version >= "3.8" and python_version < "4.0"
 idna==3.8 ; python_version >= "3.8" and python_version < "4.0"
 imagesize==1.4.1 ; python_version >= "3.8" and python_version < "4.0"
 importlib-metadata==8.4.0 ; python_version >= "3.8" and python_version < "3.10"
+importlib-resources==6.4.4 ; python_version >= "3.8" and python_version < "4.0"
 iniconfig==2.0.0 ; python_version >= "3.8" and python_version < "4.0"
 isort==5.13.2 ; python_version >= "3.8" and python_version < "4.0"
 jinja2==3.1.4 ; python_version >= "3.8" and python_version < "4.0"
@@ -49,19 +55,26 @@ platformdirs==4.2.2 ; python_version >= "3.8" and python_version < "4.0"
 pluggy==1.5.0 ; python_version >= "3.8" and python_version < "4.0"
 pre-commit==3.5.0 ; python_version >= "3.8" and python_version < "4.0"
 prompt-toolkit==3.0.36 ; python_version >= "3.8" and python_version < "4.0"
+pydantic-core==2.20.1 ; python_version >= "3.8" and python_version < "4.0"
+pydantic==2.8.2 ; python_version >= "3.8" and python_version < "4.0"
 pygments==2.18.0 ; python_version >= "3.8" and python_version < "4.0"
 pylint-django==2.5.5 ; python_version >= "3.8" and python_version < "4.0"
 pylint-plugin-utils==0.8.2 ; python_version >= "3.8" and python_version < "4.0"
-pylint==3.2.6 ; python_version >= "3.8" and python_version < "4.0"
+pylint==3.2.7 ; python_version >= "3.8" and python_version < "4.0"
 pyproject-api==1.7.1 ; python_version >= "3.8" and python_version < "4.0"
 pytest-cov==5.0.0 ; python_version >= "3.8" and python_version < "4.0"
-pytest-django==4.8.0 ; python_version >= "3.8" and python_version < "4.0"
+pytest-django==4.9.0 ; python_version >= "3.8" and python_version < "4.0"
 pytest==8.3.2 ; python_version >= "3.8" and python_version < "4.0"
+python-gitlab==4.10.0 ; python_version >= "3.8" and python_version < "4.0"
+python-semantic-release==9.8.8 ; python_version >= "3.8" and python_version < "4.0"
 pytz==2024.1 ; python_version >= "3.8" and python_version < "3.9"
 pyyaml==6.0.2 ; python_version >= "3.8" and python_version < "4.0"
 questionary==2.0.1 ; python_version >= "3.8" and python_version < "4.0"
+requests-toolbelt==1.0.0 ; python_version >= "3.8" and python_version < "4.0"
 requests==2.32.3 ; python_version >= "3.8" and python_version < "4.0"
 rich==13.8.0 ; python_version >= "3.8" and python_version < "4.0"
+shellingham==1.5.4 ; python_version >= "3.8" and python_version < "4.0"
+smmap==5.0.1 ; python_version >= "3.8" and python_version < "4.0"
 snowballstemmer==2.2.0 ; python_version >= "3.8" and python_version < "4.0"
 sphinx-rtd-theme==2.0.0 ; python_version >= "3.8" and python_version < "4.0"
 sphinx==6.2.1 ; python_version >= "3.8" and python_version < "4.0"
diff --git a/poetry.lock b/poetry.lock
index 30fed7a..b5acb9d 100644
--- a/poetry.lock
+++ b/poetry.lock
@@ -11,6 +11,20 @@ files = [
     {file = "alabaster-0.7.13.tar.gz", hash = "sha256:a27a4a084d5e690e16e01e03ad2b2e552c61a65469419b907243193de1a84ae2"},
 ]
 
+[[package]]
+name = "annotated-types"
+version = "0.7.0"
+description = "Reusable constraint types to use with typing.Annotated"
+optional = false
+python-versions = ">=3.8"
+files = [
+    {file = "annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53"},
+    {file = "annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89"},
+]
+
+[package.dependencies]
+typing-extensions = {version = ">=4.0.0", markers = "python_version < \"3.9\""}
+
 [[package]]
 name = "argcomplete"
 version = "3.5.0"
@@ -329,6 +343,25 @@ files = [
 [package.dependencies]
 colorama = {version = "*", markers = "platform_system == \"Windows\""}
 
+[[package]]
+name = "click-option-group"
+version = "0.5.6"
+description = "Option groups missing in Click"
+optional = false
+python-versions = ">=3.6,<4"
+files = [
+    {file = "click-option-group-0.5.6.tar.gz", hash = "sha256:97d06703873518cc5038509443742b25069a3c7562d1ea72ff08bfadde1ce777"},
+    {file = "click_option_group-0.5.6-py3-none-any.whl", hash = "sha256:38a26d963ee3ad93332ddf782f9259c5bdfe405e73408d943ef5e7d0c3767ec7"},
+]
+
+[package.dependencies]
+Click = ">=7.0,<9"
+
+[package.extras]
+docs = ["Pallets-Sphinx-Themes", "m2r2", "sphinx"]
+tests = ["pytest"]
+tests-cov = ["coverage", "coveralls", "pytest", "pytest-cov"]
+
 [[package]]
 name = "codecov"
 version = "2.1.13"
@@ -505,13 +538,13 @@ files = [
 
 [[package]]
 name = "django"
-version = "4.2.15"
+version = "4.2.16"
 description = "A high-level Python web framework that encourages rapid development and clean, pragmatic design."
 optional = false
 python-versions = ">=3.8"
 files = [
-    {file = "Django-4.2.15-py3-none-any.whl", hash = "sha256:61ee4a130efb8c451ef3467c67ca99fdce400fedd768634efc86a68c18d80d30"},
-    {file = "Django-4.2.15.tar.gz", hash = "sha256:c77f926b81129493961e19c0e02188f8d07c112a1162df69bfab178ae447f94a"},
+    {file = "Django-4.2.16-py3-none-any.whl", hash = "sha256:1ddc333a16fc139fd253035a1606bb24261951bbc3a6ca256717fa06cc41a898"},
+    {file = "Django-4.2.16.tar.gz", hash = "sha256:6f1616c2786c408ce86ab7e10f792b8f15742f7b7b7460243929cb371e7f1dad"},
 ]
 
 [package.dependencies]
@@ -526,13 +559,13 @@ bcrypt = ["bcrypt"]
 
 [[package]]
 name = "django"
-version = "5.1"
+version = "5.1.1"
 description = "A high-level Python web framework that encourages rapid development and clean, pragmatic design."
 optional = false
 python-versions = ">=3.10"
 files = [
-    {file = "Django-5.1-py3-none-any.whl", hash = "sha256:d3b811bf5371a26def053d7ee42a9df1267ef7622323fe70a601936725aa4557"},
-    {file = "Django-5.1.tar.gz", hash = "sha256:848a5980e8efb76eea70872fb0e4bc5e371619c70fffbe48e3e1b50b2c09455d"},
+    {file = "Django-5.1.1-py3-none-any.whl", hash = "sha256:71603f27dac22a6533fb38d83072eea9ddb4017fead6f67f2562a40402d61c3f"},
+    {file = "Django-5.1.1.tar.gz", hash = "sha256:021ffb7fdab3d2d388bc8c7c2434eb9c1f6f4d09e6119010bbb1694dda286bc2"},
 ]
 
 [package.dependencies]
@@ -612,6 +645,17 @@ files = [
     {file = "docutils-0.19.tar.gz", hash = "sha256:33995a6753c30b7f577febfc2c50411fec6aac7f7ffeb7c4cfe5991072dcf9e6"},
 ]
 
+[[package]]
+name = "dotty-dict"
+version = "1.3.1"
+description = "Dictionary wrapper for quick access to deeply nested keys."
+optional = false
+python-versions = ">=3.5,<4.0"
+files = [
+    {file = "dotty_dict-1.3.1-py3-none-any.whl", hash = "sha256:5022d234d9922f13aa711b4950372a06a6d64cb6d6db9ba43d0ba133ebfce31f"},
+    {file = "dotty_dict-1.3.1.tar.gz", hash = "sha256:4b016e03b8ae265539757a53eba24b9bfda506fb94fbce0bee843c6f05541a15"},
+]
+
 [[package]]
 name = "exceptiongroup"
 version = "1.2.2"
@@ -642,6 +686,38 @@ docs = ["furo (>=2023.9.10)", "sphinx (>=7.2.6)", "sphinx-autodoc-typehints (>=1
 testing = ["covdefaults (>=2.3)", "coverage (>=7.3.2)", "diff-cover (>=8.0.1)", "pytest (>=7.4.3)", "pytest-asyncio (>=0.21)", "pytest-cov (>=4.1)", "pytest-mock (>=3.12)", "pytest-timeout (>=2.2)", "virtualenv (>=20.26.2)"]
 typing = ["typing-extensions (>=4.8)"]
 
+[[package]]
+name = "gitdb"
+version = "4.0.11"
+description = "Git Object Database"
+optional = false
+python-versions = ">=3.7"
+files = [
+    {file = "gitdb-4.0.11-py3-none-any.whl", hash = "sha256:81a3407ddd2ee8df444cbacea00e2d038e40150acfa3001696fe0dcf1d3adfa4"},
+    {file = "gitdb-4.0.11.tar.gz", hash = "sha256:bf5421126136d6d0af55bc1e7c1af1c397a34f5b7bd79e776cd3e89785c2b04b"},
+]
+
+[package.dependencies]
+smmap = ">=3.0.1,<6"
+
+[[package]]
+name = "gitpython"
+version = "3.1.43"
+description = "GitPython is a Python library used to interact with Git repositories"
+optional = false
+python-versions = ">=3.7"
+files = [
+    {file = "GitPython-3.1.43-py3-none-any.whl", hash = "sha256:eec7ec56b92aad751f9912a73404bc02ba212a23adb2c7098ee668417051a1ff"},
+    {file = "GitPython-3.1.43.tar.gz", hash = "sha256:35f314a9f878467f5453cc1fee295c3e18e52f1b99f10f6cf5b1682e968a9e7c"},
+]
+
+[package.dependencies]
+gitdb = ">=4.0.1,<5"
+
+[package.extras]
+doc = ["sphinx (==4.3.2)", "sphinx-autodoc-typehints", "sphinx-rtd-theme", "sphinxcontrib-applehelp (>=1.0.2,<=1.0.4)", "sphinxcontrib-devhelp (==1.0.2)", "sphinxcontrib-htmlhelp (>=2.0.0,<=2.0.1)", "sphinxcontrib-qthelp (==1.0.3)", "sphinxcontrib-serializinghtml (==1.1.5)"]
+test = ["coverage[toml]", "ddt (>=1.1.1,!=1.4.3)", "mock", "mypy", "pre-commit", "pytest (>=7.3.1)", "pytest-cov", "pytest-instafail", "pytest-mock", "pytest-sugar", "typing-extensions"]
+
 [[package]]
 name = "identify"
 version = "2.6.0"
@@ -697,6 +773,28 @@ doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linke
 perf = ["ipython"]
 test = ["flufl.flake8", "importlib-resources (>=1.3)", "jaraco.test (>=5.4)", "packaging", "pyfakefs", "pytest (>=6,!=8.1.*)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy", "pytest-perf (>=0.9.2)", "pytest-ruff (>=0.2.1)"]
 
+[[package]]
+name = "importlib-resources"
+version = "6.4.4"
+description = "Read resources from Python packages"
+optional = false
+python-versions = ">=3.8"
+files = [
+    {file = "importlib_resources-6.4.4-py3-none-any.whl", hash = "sha256:dda242603d1c9cd836c3368b1174ed74cb4049ecd209e7a1a0104620c18c5c11"},
+    {file = "importlib_resources-6.4.4.tar.gz", hash = "sha256:20600c8b7361938dc0bb2d5ec0297802e575df486f5a544fa414da65e13721f7"},
+]
+
+[package.dependencies]
+zipp = {version = ">=3.1.0", markers = "python_version < \"3.10\""}
+
+[package.extras]
+check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1)"]
+cover = ["pytest-cov"]
+doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"]
+enabler = ["pytest-enabler (>=2.2)"]
+test = ["jaraco.test (>=5.4)", "pytest (>=6,!=8.1.*)", "zipp (>=3.17)"]
+type = ["pytest-mypy"]
+
 [[package]]
 name = "iniconfig"
 version = "2.0.0"
@@ -1019,6 +1117,129 @@ files = [
 [package.dependencies]
 wcwidth = "*"
 
+[[package]]
+name = "pydantic"
+version = "2.8.2"
+description = "Data validation using Python type hints"
+optional = false
+python-versions = ">=3.8"
+files = [
+    {file = "pydantic-2.8.2-py3-none-any.whl", hash = "sha256:73ee9fddd406dc318b885c7a2eab8a6472b68b8fb5ba8150949fc3db939f23c8"},
+    {file = "pydantic-2.8.2.tar.gz", hash = "sha256:6f62c13d067b0755ad1c21a34bdd06c0c12625a22b0fc09c6b149816604f7c2a"},
+]
+
+[package.dependencies]
+annotated-types = ">=0.4.0"
+pydantic-core = "2.20.1"
+typing-extensions = [
+    {version = ">=4.6.1", markers = "python_version < \"3.13\""},
+    {version = ">=4.12.2", markers = "python_version >= \"3.13\""},
+]
+
+[package.extras]
+email = ["email-validator (>=2.0.0)"]
+
+[[package]]
+name = "pydantic-core"
+version = "2.20.1"
+description = "Core functionality for Pydantic validation and serialization"
+optional = false
+python-versions = ">=3.8"
+files = [
+    {file = "pydantic_core-2.20.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:3acae97ffd19bf091c72df4d726d552c473f3576409b2a7ca36b2f535ffff4a3"},
+    {file = "pydantic_core-2.20.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:41f4c96227a67a013e7de5ff8f20fb496ce573893b7f4f2707d065907bffdbd6"},
+    {file = "pydantic_core-2.20.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5f239eb799a2081495ea659d8d4a43a8f42cd1fe9ff2e7e436295c38a10c286a"},
+    {file = "pydantic_core-2.20.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:53e431da3fc53360db73eedf6f7124d1076e1b4ee4276b36fb25514544ceb4a3"},
+    {file = "pydantic_core-2.20.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f1f62b2413c3a0e846c3b838b2ecd6c7a19ec6793b2a522745b0869e37ab5bc1"},
+    {file = "pydantic_core-2.20.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5d41e6daee2813ecceea8eda38062d69e280b39df793f5a942fa515b8ed67953"},
+    {file = "pydantic_core-2.20.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3d482efec8b7dc6bfaedc0f166b2ce349df0011f5d2f1f25537ced4cfc34fd98"},
+    {file = "pydantic_core-2.20.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e93e1a4b4b33daed65d781a57a522ff153dcf748dee70b40c7258c5861e1768a"},
+    {file = "pydantic_core-2.20.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:e7c4ea22b6739b162c9ecaaa41d718dfad48a244909fe7ef4b54c0b530effc5a"},
+    {file = "pydantic_core-2.20.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:4f2790949cf385d985a31984907fecb3896999329103df4e4983a4a41e13e840"},
+    {file = "pydantic_core-2.20.1-cp310-none-win32.whl", hash = "sha256:5e999ba8dd90e93d57410c5e67ebb67ffcaadcea0ad973240fdfd3a135506250"},
+    {file = "pydantic_core-2.20.1-cp310-none-win_amd64.whl", hash = "sha256:512ecfbefef6dac7bc5eaaf46177b2de58cdf7acac8793fe033b24ece0b9566c"},
+    {file = "pydantic_core-2.20.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:d2a8fa9d6d6f891f3deec72f5cc668e6f66b188ab14bb1ab52422fe8e644f312"},
+    {file = "pydantic_core-2.20.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:175873691124f3d0da55aeea1d90660a6ea7a3cfea137c38afa0a5ffabe37b88"},
+    {file = "pydantic_core-2.20.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:37eee5b638f0e0dcd18d21f59b679686bbd18917b87db0193ae36f9c23c355fc"},
+    {file = "pydantic_core-2.20.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:25e9185e2d06c16ee438ed39bf62935ec436474a6ac4f9358524220f1b236e43"},
+    {file = "pydantic_core-2.20.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:150906b40ff188a3260cbee25380e7494ee85048584998c1e66df0c7a11c17a6"},
+    {file = "pydantic_core-2.20.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8ad4aeb3e9a97286573c03df758fc7627aecdd02f1da04516a86dc159bf70121"},
+    {file = "pydantic_core-2.20.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d3f3ed29cd9f978c604708511a1f9c2fdcb6c38b9aae36a51905b8811ee5cbf1"},
+    {file = "pydantic_core-2.20.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b0dae11d8f5ded51699c74d9548dcc5938e0804cc8298ec0aa0da95c21fff57b"},
+    {file = "pydantic_core-2.20.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:faa6b09ee09433b87992fb5a2859efd1c264ddc37280d2dd5db502126d0e7f27"},
+    {file = "pydantic_core-2.20.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9dc1b507c12eb0481d071f3c1808f0529ad41dc415d0ca11f7ebfc666e66a18b"},
+    {file = "pydantic_core-2.20.1-cp311-none-win32.whl", hash = "sha256:fa2fddcb7107e0d1808086ca306dcade7df60a13a6c347a7acf1ec139aa6789a"},
+    {file = "pydantic_core-2.20.1-cp311-none-win_amd64.whl", hash = "sha256:40a783fb7ee353c50bd3853e626f15677ea527ae556429453685ae32280c19c2"},
+    {file = "pydantic_core-2.20.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:595ba5be69b35777474fa07f80fc260ea71255656191adb22a8c53aba4479231"},
+    {file = "pydantic_core-2.20.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a4f55095ad087474999ee28d3398bae183a66be4823f753cd7d67dd0153427c9"},
+    {file = "pydantic_core-2.20.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f9aa05d09ecf4c75157197f27cdc9cfaeb7c5f15021c6373932bf3e124af029f"},
+    {file = "pydantic_core-2.20.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e97fdf088d4b31ff4ba35db26d9cc472ac7ef4a2ff2badeabf8d727b3377fc52"},
+    {file = "pydantic_core-2.20.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bc633a9fe1eb87e250b5c57d389cf28998e4292336926b0b6cdaee353f89a237"},
+    {file = "pydantic_core-2.20.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d573faf8eb7e6b1cbbcb4f5b247c60ca8be39fe2c674495df0eb4318303137fe"},
+    {file = "pydantic_core-2.20.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:26dc97754b57d2fd00ac2b24dfa341abffc380b823211994c4efac7f13b9e90e"},
+    {file = "pydantic_core-2.20.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:33499e85e739a4b60c9dac710c20a08dc73cb3240c9a0e22325e671b27b70d24"},
+    {file = "pydantic_core-2.20.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:bebb4d6715c814597f85297c332297c6ce81e29436125ca59d1159b07f423eb1"},
+    {file = "pydantic_core-2.20.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:516d9227919612425c8ef1c9b869bbbee249bc91912c8aaffb66116c0b447ebd"},
+    {file = "pydantic_core-2.20.1-cp312-none-win32.whl", hash = "sha256:469f29f9093c9d834432034d33f5fe45699e664f12a13bf38c04967ce233d688"},
+    {file = "pydantic_core-2.20.1-cp312-none-win_amd64.whl", hash = "sha256:035ede2e16da7281041f0e626459bcae33ed998cca6a0a007a5ebb73414ac72d"},
+    {file = "pydantic_core-2.20.1-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:0827505a5c87e8aa285dc31e9ec7f4a17c81a813d45f70b1d9164e03a813a686"},
+    {file = "pydantic_core-2.20.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:19c0fa39fa154e7e0b7f82f88ef85faa2a4c23cc65aae2f5aea625e3c13c735a"},
+    {file = "pydantic_core-2.20.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4aa223cd1e36b642092c326d694d8bf59b71ddddc94cdb752bbbb1c5c91d833b"},
+    {file = "pydantic_core-2.20.1-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c336a6d235522a62fef872c6295a42ecb0c4e1d0f1a3e500fe949415761b8a19"},
+    {file = "pydantic_core-2.20.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7eb6a0587eded33aeefea9f916899d42b1799b7b14b8f8ff2753c0ac1741edac"},
+    {file = "pydantic_core-2.20.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:70c8daf4faca8da5a6d655f9af86faf6ec2e1768f4b8b9d0226c02f3d6209703"},
+    {file = "pydantic_core-2.20.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e9fa4c9bf273ca41f940bceb86922a7667cd5bf90e95dbb157cbb8441008482c"},
+    {file = "pydantic_core-2.20.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:11b71d67b4725e7e2a9f6e9c0ac1239bbc0c48cce3dc59f98635efc57d6dac83"},
+    {file = "pydantic_core-2.20.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:270755f15174fb983890c49881e93f8f1b80f0b5e3a3cc1394a255706cabd203"},
+    {file = "pydantic_core-2.20.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:c81131869240e3e568916ef4c307f8b99583efaa60a8112ef27a366eefba8ef0"},
+    {file = "pydantic_core-2.20.1-cp313-none-win32.whl", hash = "sha256:b91ced227c41aa29c672814f50dbb05ec93536abf8f43cd14ec9521ea09afe4e"},
+    {file = "pydantic_core-2.20.1-cp313-none-win_amd64.whl", hash = "sha256:65db0f2eefcaad1a3950f498aabb4875c8890438bc80b19362cf633b87a8ab20"},
+    {file = "pydantic_core-2.20.1-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:4745f4ac52cc6686390c40eaa01d48b18997cb130833154801a442323cc78f91"},
+    {file = "pydantic_core-2.20.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:a8ad4c766d3f33ba8fd692f9aa297c9058970530a32c728a2c4bfd2616d3358b"},
+    {file = "pydantic_core-2.20.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:41e81317dd6a0127cabce83c0c9c3fbecceae981c8391e6f1dec88a77c8a569a"},
+    {file = "pydantic_core-2.20.1-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:04024d270cf63f586ad41fff13fde4311c4fc13ea74676962c876d9577bcc78f"},
+    {file = "pydantic_core-2.20.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:eaad4ff2de1c3823fddf82f41121bdf453d922e9a238642b1dedb33c4e4f98ad"},
+    {file = "pydantic_core-2.20.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:26ab812fa0c845df815e506be30337e2df27e88399b985d0bb4e3ecfe72df31c"},
+    {file = "pydantic_core-2.20.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3c5ebac750d9d5f2706654c638c041635c385596caf68f81342011ddfa1e5598"},
+    {file = "pydantic_core-2.20.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2aafc5a503855ea5885559eae883978c9b6d8c8993d67766ee73d82e841300dd"},
+    {file = "pydantic_core-2.20.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:4868f6bd7c9d98904b748a2653031fc9c2f85b6237009d475b1008bfaeb0a5aa"},
+    {file = "pydantic_core-2.20.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:aa2f457b4af386254372dfa78a2eda2563680d982422641a85f271c859df1987"},
+    {file = "pydantic_core-2.20.1-cp38-none-win32.whl", hash = "sha256:225b67a1f6d602de0ce7f6c1c3ae89a4aa25d3de9be857999e9124f15dab486a"},
+    {file = "pydantic_core-2.20.1-cp38-none-win_amd64.whl", hash = "sha256:6b507132dcfc0dea440cce23ee2182c0ce7aba7054576efc65634f080dbe9434"},
+    {file = "pydantic_core-2.20.1-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:b03f7941783b4c4a26051846dea594628b38f6940a2fdc0df00b221aed39314c"},
+    {file = "pydantic_core-2.20.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1eedfeb6089ed3fad42e81a67755846ad4dcc14d73698c120a82e4ccf0f1f9f6"},
+    {file = "pydantic_core-2.20.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:635fee4e041ab9c479e31edda27fcf966ea9614fff1317e280d99eb3e5ab6fe2"},
+    {file = "pydantic_core-2.20.1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:77bf3ac639c1ff567ae3b47f8d4cc3dc20f9966a2a6dd2311dcc055d3d04fb8a"},
+    {file = "pydantic_core-2.20.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7ed1b0132f24beeec5a78b67d9388656d03e6a7c837394f99257e2d55b461611"},
+    {file = "pydantic_core-2.20.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c6514f963b023aeee506678a1cf821fe31159b925c4b76fe2afa94cc70b3222b"},
+    {file = "pydantic_core-2.20.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:10d4204d8ca33146e761c79f83cc861df20e7ae9f6487ca290a97702daf56006"},
+    {file = "pydantic_core-2.20.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2d036c7187b9422ae5b262badb87a20a49eb6c5238b2004e96d4da1231badef1"},
+    {file = "pydantic_core-2.20.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:9ebfef07dbe1d93efb94b4700f2d278494e9162565a54f124c404a5656d7ff09"},
+    {file = "pydantic_core-2.20.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:6b9d9bb600328a1ce523ab4f454859e9d439150abb0906c5a1983c146580ebab"},
+    {file = "pydantic_core-2.20.1-cp39-none-win32.whl", hash = "sha256:784c1214cb6dd1e3b15dd8b91b9a53852aed16671cc3fbe4786f4f1db07089e2"},
+    {file = "pydantic_core-2.20.1-cp39-none-win_amd64.whl", hash = "sha256:d2fe69c5434391727efa54b47a1e7986bb0186e72a41b203df8f5b0a19a4f669"},
+    {file = "pydantic_core-2.20.1-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:a45f84b09ac9c3d35dfcf6a27fd0634d30d183205230a0ebe8373a0e8cfa0906"},
+    {file = "pydantic_core-2.20.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:d02a72df14dfdbaf228424573a07af10637bd490f0901cee872c4f434a735b94"},
+    {file = "pydantic_core-2.20.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d2b27e6af28f07e2f195552b37d7d66b150adbaa39a6d327766ffd695799780f"},
+    {file = "pydantic_core-2.20.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:084659fac3c83fd674596612aeff6041a18402f1e1bc19ca39e417d554468482"},
+    {file = "pydantic_core-2.20.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:242b8feb3c493ab78be289c034a1f659e8826e2233786e36f2893a950a719bb6"},
+    {file = "pydantic_core-2.20.1-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:38cf1c40a921d05c5edc61a785c0ddb4bed67827069f535d794ce6bcded919fc"},
+    {file = "pydantic_core-2.20.1-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:e0bbdd76ce9aa5d4209d65f2b27fc6e5ef1312ae6c5333c26db3f5ade53a1e99"},
+    {file = "pydantic_core-2.20.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:254ec27fdb5b1ee60684f91683be95e5133c994cc54e86a0b0963afa25c8f8a6"},
+    {file = "pydantic_core-2.20.1-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:407653af5617f0757261ae249d3fba09504d7a71ab36ac057c938572d1bc9331"},
+    {file = "pydantic_core-2.20.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:c693e916709c2465b02ca0ad7b387c4f8423d1db7b4649c551f27a529181c5ad"},
+    {file = "pydantic_core-2.20.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5b5ff4911aea936a47d9376fd3ab17e970cc543d1b68921886e7f64bd28308d1"},
+    {file = "pydantic_core-2.20.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:177f55a886d74f1808763976ac4efd29b7ed15c69f4d838bbd74d9d09cf6fa86"},
+    {file = "pydantic_core-2.20.1-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:964faa8a861d2664f0c7ab0c181af0bea66098b1919439815ca8803ef136fc4e"},
+    {file = "pydantic_core-2.20.1-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:4dd484681c15e6b9a977c785a345d3e378d72678fd5f1f3c0509608da24f2ac0"},
+    {file = "pydantic_core-2.20.1-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:f6d6cff3538391e8486a431569b77921adfcdef14eb18fbf19b7c0a5294d4e6a"},
+    {file = "pydantic_core-2.20.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:a6d511cc297ff0883bc3708b465ff82d7560193169a8b93260f74ecb0a5e08a7"},
+    {file = "pydantic_core-2.20.1.tar.gz", hash = "sha256:26ca695eeee5f9f1aeeb211ffc12f10bcb6f71e2989988fda61dabd65db878d4"},
+]
+
+[package.dependencies]
+typing-extensions = ">=4.6.0,<4.7.0 || >4.7.0"
+
 [[package]]
 name = "pygments"
 version = "2.18.0"
@@ -1156,13 +1377,13 @@ testing = ["fields", "hunter", "process-tests", "pytest-xdist", "virtualenv"]
 
 [[package]]
 name = "pytest-django"
-version = "4.8.0"
+version = "4.9.0"
 description = "A Django plugin for pytest."
 optional = false
 python-versions = ">=3.8"
 files = [
-    {file = "pytest-django-4.8.0.tar.gz", hash = "sha256:5d054fe011c56f3b10f978f41a8efb2e5adfc7e680ef36fb571ada1f24779d90"},
-    {file = "pytest_django-4.8.0-py3-none-any.whl", hash = "sha256:ca1ddd1e0e4c227cf9e3e40a6afc6d106b3e70868fd2ac5798a22501271cd0c7"},
+    {file = "pytest_django-4.9.0-py3-none-any.whl", hash = "sha256:1d83692cb39188682dbb419ff0393867e9904094a549a7d38a3154d5731b2b99"},
+    {file = "pytest_django-4.9.0.tar.gz", hash = "sha256:8bf7bc358c9ae6f6fc51b6cebb190fe20212196e6807121f11bd6a3b03428314"},
 ]
 
 [package.dependencies]
@@ -1172,6 +1393,57 @@ pytest = ">=7.0.0"
 docs = ["sphinx", "sphinx-rtd-theme"]
 testing = ["Django", "django-configurations (>=2.0)"]
 
+[[package]]
+name = "python-gitlab"
+version = "4.10.0"
+description = "A python wrapper for the GitLab API"
+optional = false
+python-versions = ">=3.8.0"
+files = [
+    {file = "python_gitlab-4.10.0-py3-none-any.whl", hash = "sha256:53ea6d977fb26d256390636616ca91d127cd04bdefc6c5ce2d7711b8e5100b2a"},
+    {file = "python_gitlab-4.10.0.tar.gz", hash = "sha256:86f99c1915088e2d2573817aca8bf6bab5e4f12d42b04ef6b2df2abb528d57fd"},
+]
+
+[package.dependencies]
+requests = ">=2.32.0"
+requests-toolbelt = ">=1.0.0"
+
+[package.extras]
+autocompletion = ["argcomplete (>=1.10.0,<3)"]
+yaml = ["PyYaml (>=6.0.1)"]
+
+[[package]]
+name = "python-semantic-release"
+version = "9.8.8"
+description = "Automatic Semantic Versioning for Python projects"
+optional = false
+python-versions = ">=3.8"
+files = [
+    {file = "python_semantic_release-9.8.8-py3-none-any.whl", hash = "sha256:df43d02234ce4be3802bceca804c3a357aebf833a97624dc74563ec69da8a3ef"},
+    {file = "python_semantic_release-9.8.8.tar.gz", hash = "sha256:19ac268bc417b2b8ea869caede307c50bc1fc2c6c70ee42e88403e321d13f494"},
+]
+
+[package.dependencies]
+click = ">=8.0,<9.0"
+click-option-group = ">=0.5,<1.0"
+dotty-dict = ">=1.3,<2.0"
+gitpython = ">=3.0,<4.0"
+importlib-resources = ">=6.0,<7.0"
+jinja2 = ">=3.1,<4.0"
+pydantic = ">=2.0,<3.0"
+python-gitlab = ">=4.0,<5.0"
+requests = ">=2.25,<3.0"
+rich = ">=13.0,<14.0"
+shellingham = ">=1.5,<2.0"
+tomlkit = ">=0.11,<1.0"
+
+[package.extras]
+build = ["build (>=1.2,<2.0)"]
+dev = ["pre-commit (>=3.5,<4.0)", "ruff (==0.5.0)", "tox (>=4.11,<5.0)"]
+docs = ["Sphinx (>=6.0,<7.0)", "furo (>=2024.1,<2025.0)", "sphinx-autobuild (==2024.2.4)", "sphinxcontrib-apidoc (==0.5.0)"]
+mypy = ["mypy (==1.10.1)", "types-requests (>=2.32.0,<2.33.0)"]
+test = ["coverage[toml] (>=7.0,<8.0)", "pytest (>=8.3,<9.0)", "pytest-clarity (>=1.0,<2.0)", "pytest-cov (>=5.0,<6.0)", "pytest-env (>=1.0,<2.0)", "pytest-lazy-fixtures (>=1.1.1,<1.2.0)", "pytest-mock (>=3.0,<4.0)", "pytest-pretty (>=1.2,<2.0)", "pytest-xdist (>=3.0,<4.0)", "requests-mock (>=1.10,<2.0)", "responses (>=0.25.0,<0.26.0)"]
+
 [[package]]
 name = "pytz"
 version = "2024.1"
@@ -1280,6 +1552,20 @@ urllib3 = ">=1.21.1,<3"
 socks = ["PySocks (>=1.5.6,!=1.5.7)"]
 use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"]
 
+[[package]]
+name = "requests-toolbelt"
+version = "1.0.0"
+description = "A utility belt for advanced users of python-requests"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
+files = [
+    {file = "requests-toolbelt-1.0.0.tar.gz", hash = "sha256:7681a0a3d047012b5bdc0ee37d7f8f07ebe76ab08caeccfc3921ce23c88d5bc6"},
+    {file = "requests_toolbelt-1.0.0-py2.py3-none-any.whl", hash = "sha256:cccfdd665f0a24fcf4726e690f65639d272bb0637b9b92dfd91a5568ccf6bd06"},
+]
+
+[package.dependencies]
+requests = ">=2.0.1,<3.0.0"
+
 [[package]]
 name = "rich"
 version = "13.8.0"
@@ -1299,6 +1585,28 @@ typing-extensions = {version = ">=4.0.0,<5.0", markers = "python_version < \"3.9
 [package.extras]
 jupyter = ["ipywidgets (>=7.5.1,<9)"]
 
+[[package]]
+name = "shellingham"
+version = "1.5.4"
+description = "Tool to Detect Surrounding Shell"
+optional = false
+python-versions = ">=3.7"
+files = [
+    {file = "shellingham-1.5.4-py2.py3-none-any.whl", hash = "sha256:7ecfff8f2fd72616f7481040475a65b2bf8af90a56c89140852d1120324e8686"},
+    {file = "shellingham-1.5.4.tar.gz", hash = "sha256:8dbca0739d487e5bd35ab3ca4b36e11c4078f3a234bfce294b0a0291363404de"},
+]
+
+[[package]]
+name = "smmap"
+version = "5.0.1"
+description = "A pure Python implementation of a sliding window memory map manager"
+optional = false
+python-versions = ">=3.7"
+files = [
+    {file = "smmap-5.0.1-py3-none-any.whl", hash = "sha256:e6d8668fa5f93e706934a62d7b4db19c8d9eb8cf2adbb75ef1b675aa332b69da"},
+    {file = "smmap-5.0.1.tar.gz", hash = "sha256:dceeb6c0028fdb6734471eb07c0cd2aae706ccaecab45965ee83f11c8d3b1f62"},
+]
+
 [[package]]
 name = "snowballstemmer"
 version = "2.2.0"
@@ -1672,4 +1980,4 @@ type = ["pytest-mypy"]
 [metadata]
 lock-version = "2.0"
 python-versions = ">=3.8,<4.0"
-content-hash = "0fe240ee8025de3e00f6f3dbe0a27bf6a5c193d78fb22d86d617d16bdb4d0e28"
+content-hash = "6833036a9316476ee7f391226a5ab935d7180b7d2a2c73a54b57f519d4f11b8a"
diff --git a/pyproject.toml b/pyproject.toml
index 2971bf3..e02c6eb 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -3,12 +3,44 @@ build-backend = "poetry.core.masonry.api"
 requires = [ "poetry-core" ]
 
 [tool.poetry]
-name = "django-logging"
-version = "0.1.0"
+name = "dj-logging"
+version = "1.1.0"
 description = "A package for logging in django applications"
 authors = [ "ARYAN-NIKNEZHAD <aryan513966@gmail.com>", "MEHRSHAD-MIRSHEKARY <mehrshad_mirshekary@email.com>" ]
 license = "MIT"
 readme = "README.md"
+keywords = [ "django_logging", "django", "logging" ]
+
+classifiers = [
+  "Development Status :: 3 - Alpha",
+  "Environment :: Web Environment",
+  "Framework :: Django",
+  "Framework :: Django :: 4.2",
+  "Framework :: Django :: 5.0",
+  "Framework :: Django :: 5.1",
+  "Intended Audience :: Developers",
+  "License :: OSI Approved :: MIT License",
+  "Operating System :: OS Independent",
+  "Programming Language :: Python",
+  "Programming Language :: Python :: 3",
+  "Programming Language :: Python :: 3 :: Only",
+  "Programming Language :: Python :: 3.8",
+  "Programming Language :: Python :: 3.9",
+  "Programming Language :: Python :: 3.10",
+  "Programming Language :: Python :: 3.11",
+  "Programming Language :: Python :: 3.12",
+  "Topic :: Software Development :: Libraries :: Python Modules",
+]
+
+packages = [
+  { include = "django_logging" },
+]
+
+[tool.poetry.urls]
+"Documentation" = "https://django-logging.readthedocs.io"
+"Source Code" = "https://github.com/lazarus-org/django_logging"
+"Changelog" = "https://github.com/lazarus-org/django_logging/blob/main/CHANGELOG.md"
+"Issues" = "https://github.com/lazarus-org/django_logging/issues"
 
 [tool.poetry.dependencies]
 python = ">=3.8,<4.0"
@@ -17,7 +49,7 @@ django = [
   { version = ">=4.2,<5.3", python = ">=3.10" },      # Django 4.2 and 5.x for Python 3.10+
 ]
 
-[tool.poetry.dev-dependencies]
+[tool.poetry.group.dev.dependencies]
 pytest = "^8.3.2"
 pytest-django = "^4.8.0"
 pytest-cov = "^5.0.0"
@@ -35,6 +67,7 @@ sphinx = "^6.2.1"
 sphinx-rtd-theme = "^2.0.0"
 docformatter = "^1.7.5"
 codecov = "^2.1.13"
+python-semantic-release = "^9.8.8"
 
 [tool.black]
 line-length = 88
@@ -155,6 +188,8 @@ markers = [
   "validators: Tests for validating configurations and inputs in the logging package.",
   "config_validator: Tests focused on validators that check configuration settings.",
   "email_settings_validator: Tests for validators that ensure email settings are valid.",
+  "decorators: Tests focused on custom decorators used throughout the package.",
+  "decorators_execution_tracking: Tests specifically for the execution_tracking module.",
 ]
 
 [tool.coverage.run]
@@ -209,7 +244,66 @@ B104 = { check_typed_list = true }
 
 [tool.commitizen]
 name = "cz_conventional_commits"
-version = "0.1.0"
+version = "1.0.4"
+tag_format = "v$version"
 
 [tool.commitizen.settings]
 increment_types = [ "feat", "fix" ]
+
+[tool.semantic_release]
+assets = [  ]
+build_command_env = [  ]
+commit_message = "{version}\n\nAutomatically generated by python-semantic-release"
+commit_parser = "emoji"
+logging_use_named_masks = false
+major_on_zero = true
+allow_zero_version = true
+no_git_verify = false
+tag_format = "v{version}"
+#version_variables = [ "django_logging/version.py:__version__" ]
+
+[tool.semantic_release.branches.main]
+match = "(main|master)"
+prerelease_token = "rc"
+prerelease = false
+
+[tool.semantic_release.changelog]
+template_dir = "templates"
+changelog_file = "CHANGELOG.md"
+exclude_commit_patterns = [  ]
+
+[tool.semantic_release.changelog.environment]
+block_start_string = "{%"
+block_end_string = "%}"
+variable_start_string = "{{"
+variable_end_string = "}}"
+comment_start_string = "{#"
+comment_end_string = "#}"
+trim_blocks = false
+lstrip_blocks = false
+newline_sequence = "\n"
+keep_trailing_newline = false
+extensions = [  ]
+autoescape = true
+
+[tool.semantic_release.commit_author]
+env = "GIT_COMMIT_AUTHOR"
+default = "semantic-release <semantic-release>"
+
+[tool.semantic_release.commit_parser_options]
+allowed_tags = [ "build", "chore", "ci", "docs", "feat", "fix", "perf", "style", "refactor", "test" ]
+minor_tags = [ "feat" ]
+patch_tags = [ "fix", "perf" ]
+default_bump_level = 0
+parse_emoji = true
+
+[tool.semantic_release.remote]
+name = "origin"
+token = ""
+type = "github"
+ignore_token_for_push = false
+insecure = false
+
+[tool.semantic_release.publish]
+dist_glob_patterns = [ "dist/*" ]
+upload_to_vcs_release = true


Test patch:
diff --git a/django_logging/tests/conftest.py b/django_logging/tests/conftest.py
index e2d6245..ed441f2 100644
--- a/django_logging/tests/conftest.py
+++ b/django_logging/tests/conftest.py
@@ -18,5 +18,6 @@
     request_middleware,
     reset_settings,
 )
-from django_logging.tests.fixtures.setup_django import configure_django_settings
+from django_logging.tests.settings_configuration import configure_django_settings
+
 configure_django_settings()
diff --git a/django_logging/tests/decorators/__init__.py b/django_logging/tests/decorators/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/django_logging/tests/decorators/test_execution_tracking.py b/django_logging/tests/decorators/test_execution_tracking.py
new file mode 100644
index 0000000..316f10d
--- /dev/null
+++ b/django_logging/tests/decorators/test_execution_tracking.py
@@ -0,0 +1,192 @@
+import sys
+
+import pytest
+import logging
+import time
+from django.conf import settings
+from django.db import connection
+
+from django_logging.decorators import execution_tracker
+from django_logging.tests.constants import PYTHON_VERSION, PYTHON_VERSION_REASON
+
+pytestmark = [
+    pytest.mark.decorators,
+    pytest.mark.decorators_execution_tracking,
+    pytest.mark.skipif(sys.version_info < PYTHON_VERSION, reason=PYTHON_VERSION_REASON),
+]
+
+
+@pytest.mark.django_db
+class TestExecutionTracker:
+    """
+    Test suite for the `execution_tracker` decorator.
+    """
+
+    @execution_tracker(logging_level=logging.INFO)
+    def sample_function(self, duration: float) -> str:
+        """
+        A sample function to test the performance logger decorator.
+
+        Args:
+        ----
+            duration (float): The time in seconds for which the function will sleep.
+
+        Returns:
+        -------
+            str: A success message after the function sleeps.
+        """
+        time.sleep(duration)
+        return "Function executed"
+
+    def test_execution_tracker_raises_error_on_invalid_attribute(self) -> None:
+        """
+        Test that the `execution_tracker` raises a ValueError when an invalid logging level and
+         query threshold is provided.
+
+        Asserts:
+        -------
+            - A `ValueError` is raised when an invalid logging level is passed.
+        """
+        with pytest.raises(ValueError, match="execution_tracker.logging_level"):
+
+            @execution_tracker(logging_level="invalid", query_threshold="invalid")  # type: ignore
+            def sample_function():
+                pass
+
+    def test_execution_tracker_raises_error_on_invalid_log_queries(self) -> None:
+        """
+        Test that the `execution_tracker` raises a ValueError when an invalid log_queries value is provided.
+
+        Asserts:
+        -------
+            - A `ValueError` is raised when an invalid log_queries value is passed.
+        """
+        with pytest.raises(ValueError, match="execution_tracker.log_queries"):
+
+            @execution_tracker(log_queries="invalid")  # type: ignore
+            def sample_function():
+                pass
+
+    def test_execution_tracker_execution_time(self) -> None:
+        """
+        Test that the `execution_tracker` decorator correctly logs execution time.
+
+        Asserts:
+        -------
+            - The decorated function logs its execution time and runs successfully.
+        """
+        start_time = time.time()
+        result = self.sample_function(0.2)
+        elapsed_time = time.time() - start_time
+
+        assert (
+            result == "Function executed"
+        ), "The function did not return the expected message."
+        assert elapsed_time >= 0.2, "The execution time was shorter than expected."
+
+    def test_execution_tracker_logs_queries(
+        self, caplog: pytest.LogCaptureFixture
+    ) -> None:
+        """
+        Test that the `execution_tracker` logs database queries when `log_queries` is enabled.
+
+        Asserts:
+        -------
+            - The log contains information about the number of database queries when `log_queries` is enabled.
+        """
+        settings.DEBUG = True  # Simulate a DEBUG environment
+        caplog.clear()
+
+        @execution_tracker(logging_level=logging.INFO, log_queries=True)
+        def sample_db_function():
+            with connection.cursor() as cursor:
+                cursor.execute("SELECT 1")
+            return "DB function executed"
+
+        sample_db_function()
+
+        assert any(
+            "Database Queries:" in record.message for record in caplog.records
+        ), "Expected database queries to be logged."
+
+    def test_execution_tracker_query_threshold_warning(
+        self, caplog: pytest.LogCaptureFixture
+    ) -> None:
+        """
+        Test that the `execution_tracker` logs a warning if the number of queries exceeds the query threshold.
+
+        Asserts:
+        -------
+            - A warning is logged when the query count exceeds the specified threshold.
+        """
+        settings.DEBUG = True
+        caplog.clear()
+
+        @execution_tracker(
+            logging_level=logging.INFO,
+            log_queries=True,
+            query_threshold=1,
+            query_exceed_warning=True,
+        )
+        def sample_db_threshold_function():
+            with connection.cursor() as cursor:
+                cursor.execute("SELECT 1")
+                cursor.execute("SELECT 2")
+            return "DB function executed"
+
+        sample_db_threshold_function()
+
+        assert any(
+            "exceeded threshold" in record.message for record in caplog.records
+        ), "Expected a warning for exceeding query threshold."
+
+    def test_execution_tracker_logs_queries_debug_false(
+        self, caplog: pytest.LogCaptureFixture
+    ) -> None:
+        """
+        Test that the `execution_tracker` logs a warning when `log_queries` is enabled
+        but `DEBUG` is set to False.
+
+        Asserts:
+        -------
+            - A warning is logged indicating that database queries are not tracked
+              because `DEBUG` is set to False.
+        """
+        settings.DEBUG = False  # Simulate a production environment where DEBUG is False
+        caplog.clear()
+
+        @execution_tracker(logging_level=logging.INFO, log_queries=True)
+        def sample_db_function():
+            with connection.cursor() as cursor:
+                cursor.execute("SELECT 1")
+            return "DB function executed"
+
+        sample_db_function()
+
+        assert any(
+            "DEBUG mode is disabled, so database queries are not tracked"
+            in record.message
+            for record in caplog.records
+        ), "Expected a warning about disabled query logging when DEBUG is False."
+
+    def test_execution_tracker_error_handling(
+        self, caplog: pytest.LogCaptureFixture
+    ) -> None:
+        """
+        Test that the `execution_tracker` correctly logs errors when an exception is raised.
+
+        Asserts:
+        -------
+            - The log contains an error message when the decorated function raises an exception.
+        """
+
+        @execution_tracker(logging_level=logging.ERROR)
+        def sample_error_function():
+            raise ValueError("Sample error")
+
+        with pytest.raises(ValueError, match="Sample error"):
+            sample_error_function()
+
+        assert any(
+            "Error executing function" in record.message for record in caplog.records
+        ), "Expected an error message in the logs when an exception is raised."
diff --git a/django_logging/tests/handlers/test_email_handler.py b/django_logging/tests/handlers/test_email_handler.py
index 2256d1a..2f70235 100644
--- a/django_logging/tests/handlers/test_email_handler.py
+++ b/django_logging/tests/handlers/test_email_handler.py
@@ -197,6 +197,7 @@ def test_render_template(
         mock_template.render.assert_called_once_with(
             {
                 "message": "Test message",
+                "date": ANY,  # The actual date is not critical to the test
                 "time": ANY,  # The actual time is not critical to the test
                 "browser_type": "Mozilla/5.0",
                 "ip_address": "127.0.0.1",
diff --git a/django_logging/tests/fixtures/setup_django.py b/django_logging/tests/settings_configuration.py
similarity index 95%
rename from django_logging/tests/fixtures/setup_django.py
rename to django_logging/tests/settings_configuration.py
index f54799a..17c95b8 100644
--- a/django_logging/tests/fixtures/setup_django.py
+++ b/django_logging/tests/settings_configuration.py
@@ -49,7 +49,3 @@ def configure_django_settings():
             ADMIN_EMAIL="admin@test.com",
         )
         django.setup()
-
-
-# Call this function before running your tests
-configure_django_settings()
diff --git a/django_logging/tests/utils/test_set_conf.py b/django_logging/tests/utils/test_set_conf.py
index 072cd76..900dcbd 100644
--- a/django_logging/tests/utils/test_set_conf.py
+++ b/django_logging/tests/utils/test_set_conf.py
@@ -194,6 +194,7 @@ def test_set_config_exception_handling(
         -------
         - A warning message indicating a configuration error is logged.
         """
+        colors = AnsiColors()
         mock_is_auto_initialization_enabled.return_value = True
         mock_LogManager.side_effect = ValueError("Invalid configuration")
 
@@ -218,8 +219,8 @@ def test_set_config_exception_handling(
                 " A configuration issue has been detected.\n"
                 "System checks will be run to provide more detailed information.\n"
                 "==============================================================\n",
-                AnsiColors.RED_BACKGROUND,
-                AnsiColors.RESET,
-                AnsiColors.RED,
-                AnsiColors.RESET,
+                colors.RED_BACKGROUND,
+                colors.RESET,
+                colors.RED,
+                colors.RESET,
             )