From b4fcd7e5eeda2d1ea77b434e50367103e38fed3e Mon Sep 17 00:00:00 2001 From: Horilla Date: Fri, 12 Jan 2024 21:24:01 +0530 Subject: [PATCH] [ADD] ATTENDANCE: Attendance dashboard --- .../static/dashboard/attendanceChart.js | 184 ++++++- .../attendance/dashboard/dashboard.html | 494 ++++++++++++------ .../attendance/dashboard/overtime_table.html | 92 ++++ .../dashboard/to_validate_table.html | 142 +++++ attendance/views/dashboard.py | 160 +++++- employee/not_in_out_dashboard.py | 16 +- employee/templates/dashboard/not_in_yet.html | 18 +- static/images/ui/attendance-validate.png | Bin 0 -> 14198 bytes static/images/ui/coffee-break.png | Bin 0 -> 11878 bytes static/images/ui/comment.png | Bin 0 -> 15901 bytes static/images/ui/overtime-icon.png | Bin 0 -> 26567 bytes templates/dashboard.html | 83 ++- templates/sidebar.html | 86 ++- 13 files changed, 1069 insertions(+), 206 deletions(-) create mode 100644 attendance/templates/attendance/dashboard/overtime_table.html create mode 100644 attendance/templates/attendance/dashboard/to_validate_table.html create mode 100644 static/images/ui/attendance-validate.png create mode 100644 static/images/ui/coffee-break.png create mode 100644 static/images/ui/comment.png create mode 100644 static/images/ui/overtime-icon.png diff --git a/attendance/static/dashboard/attendanceChart.js b/attendance/static/dashboard/attendanceChart.js index af42f929e..286c11d5a 100644 --- a/attendance/static/dashboard/attendanceChart.js +++ b/attendance/static/dashboard/attendanceChart.js @@ -1,4 +1,33 @@ $(document).ready(function () { + + // initializing the department overtime chart. + var departmentChartData = { + labels: [], + datasets: [], + }; + window["departmentOvertimeChart"] = {}; + const departmentOvertimeChart = document.getElementById("departmentOvertimeChart"); + var departmentAttendanceChart = new Chart(departmentOvertimeChart, { + type: "pie", + data: departmentChartData, + options: { + responsive: true, + maintainAspectRatio: false, + }, + plugins: [ + { + afterRender: (departmentAttendanceChart) => emptyOvertimeChart(departmentAttendanceChart), + }, + ], + }); + + var today = new Date(); + month = ("0" + (today.getMonth() + 1)).slice(-2); + year = today.getFullYear(); + var day = ("0" + today.getDate()).slice(-2); + var formattedDate = year + "-" + month + "-" + day; + var currentWeek = getWeekNumber(today); + $("#attendance_month").val(formattedDate); $.ajax({ @@ -11,6 +40,148 @@ $(document).ready(function () { createAttendanceChart(response.dataSet, response.labels); }, }); + + // Function to update the department overtime chart according to the response fetched from backend. + + function departmentDataUpdate(response) { + departmentChartData.labels = response.labels; + departmentChartData.datasets=response.dataset; + departmentChartData.message=response.message; + departmentChartData.emptyImageSrc=response.emptyImageSrc; + departmentAttendanceChart.update(); + } + + // Function to update the department overtime chart according to the dates provided. + + function changeDepartmentMonth() { + let type = $("#department_date_type").val(); + let date = $("#department_month").val(); + let end_date = $("#department_month2").val(); + $.ajax({ + type: "GET", + url: "/attendance/department-overtime-chart", + dataType: "json", + data: { + date: date, + type: type, + end_date: end_date, + }, + success: function (response) { + departmentDataUpdate(response); + }, + error: (error) => {}, + }); + } + + // Function to update the input fields according to type select field. + + function changeDepartmentView(element) { + var dataType = $(element).val(); + if (dataType === "date_range") { + $("#department_month").prop("type", "date"); + $("#department_day_input").after( + '' + ); + $("#department_month").val(formattedDate); + $("#department_month2").val(formattedDate); + changeDepartmentMonth(); + } else { + $("#department_month2").remove(); + if (dataType === "weekly") { + $("#department_month").prop("type", "week"); + if (currentWeek <10){ + $("#department_month").val(`${year}-W0${currentWeek}`); + } + else { + $("#department_month").val(`${year}-W${currentWeek}`); + } + changeDepartmentMonth(); + } else if (dataType === "day") { + $("#department_month").prop("type", "date"); + $("#department_month").val(formattedDate); + changeDepartmentMonth(); + } else { + $("#department_month").prop("type", "month"); + $("#department_month").val(`${year}-${month}`); + changeDepartmentMonth(); + } + } + } + + // Function for empty message for department overtime chart. + + function emptyOvertimeChart(departmentAttendanceChart, args, options) { + flag = false; + for (let i = 0; i < departmentAttendanceChart.data.datasets.length; i++) { + flag = flag + departmentAttendanceChart.data.datasets[i].data.some(Boolean); + } + if (!flag) { + const { ctx, canvas } = departmentAttendanceChart; + departmentAttendanceChart.clear(); + const parent = canvas.parentElement; + + // Set canvas width/height to match + canvas.width = parent.clientWidth; + canvas.height = parent.clientHeight; + // Calculate center position + const x = canvas.width / 2; + const y = (canvas.height - 70) / 2; + var noDataImage = new Image(); + noDataImage.src = departmentAttendanceChart.data.emptyImageSrc + ? departmentAttendanceChart.data.emptyImageSrc + : "/static/images/ui/joiningchart.png"; + + message = departmentAttendanceChart.data.message + ? departmentAttendanceChart.data.message + : emptyMessages[languageCode]; + + noDataImage.onload = () => { + // Draw image first at center + ctx.drawImage(noDataImage, x - 35, y, 70, 70); + + // Draw text below image + ctx.textAlign = "center"; + ctx.textBaseline = "middle"; + ctx.fillStyle = "hsl(0,0%,45%)"; + ctx.font = "16px Poppins"; + ctx.fillText(message, x, y + 70 + 30); + }; + } + } + + // Ajax request to create department overtime chart initially. + + $.ajax({ + url: "/attendance/department-overtime-chart", + type: "GET", + dataType: "json", + headers: { + "X-Requested-With": "XMLHttpRequest", + }, + success: (response) => { + + departmentDataUpdate(response); + + }, + error: (error) => { + console.log("Error", error); + }, + }); + + // Functions to update department overtime chart while changing the date input field and select input field. + + $("#departmentChartCard").on("change","#department_date_type", function (e) { + changeDepartmentView($(this)) + }) + + $("#departmentChartCard").on("change","#department_month", function (e) { + changeDepartmentMonth() + }) + + $("#departmentChartCard").on("change","#department_month2", function (e) { + changeDepartmentMonth() + }) + }); var data; @@ -149,7 +320,12 @@ function changeView(element) { $("#attendance_month2").remove(); if (dataType === "weekly") { $("#attendance_month").prop("type", "week"); - $("#attendance_month").val(`${year}-W${currentWeek}`); + if (currentWeek <10){ + $("#attendance_month").val(`${year}-W0${currentWeek}`); + } + else { + $("#attendance_month").val(`${year}-W${currentWeek}`); + } changeMonth(); } else if (dataType === "day") { $("#attendance_month").prop("type", "date"); @@ -163,7 +339,7 @@ function changeView(element) { } } var chart = new Chart( - document.getElementById("pendingHoursCanvas").getContext("2d"), + document.getElementById("pendingHoursCanvas"), {} ); window["pendingHoursCanvas"] = chart; @@ -174,12 +350,13 @@ function pendingHourChart(year, month) { data: { month: month, year: year }, success: function (response) { pendingHoursCanvas.destroy(); - var ctx = document.getElementById("pendingHoursCanvas").getContext("2d"); + var ctx = document.getElementById("pendingHoursCanvas"); pendingHoursCanvas = new Chart(ctx, { type: "bar", // Bar chart type data: response.data, options: { responsive: true, + aspectRatio: false, indexAxis: "x", scales: { x: { @@ -187,6 +364,7 @@ function pendingHourChart(year, month) { }, y: { beginAtZero: true, + stacked: true, }, }, onClick: (e, activeEls) => { diff --git a/attendance/templates/attendance/dashboard/dashboard.html b/attendance/templates/attendance/dashboard/dashboard.html index 3f10f46da..6d5cd0ab3 100644 --- a/attendance/templates/attendance/dashboard/dashboard.html +++ b/attendance/templates/attendance/dashboard/dashboard.html @@ -1,181 +1,333 @@ -{% extends 'index.html' %} -{% block content %} -{% load static %} +{% extends 'index.html' %} {% load i18n %} {% block content %} {% load static %} +
-
-
-
-
-
-
- On Time -
-
-
- - {% if on_time < late_come %} - - {% else %} - - {% endif %} - - {{on_time}} +
+
+
+
+
+
+ {% trans "Today's Attendances" %} +
+
+
+ {{marked_attendances_ratio}}% +
+ {{marked_attendances}}/{{expected_attendances}} +
+
- {{on_time_ratio}}% -
-
-
-
-
-
- Today's Attendances -
-
-
- {% comment %} 100% {% endcomment %} - {{marked_attendances_ratio}}% +
+
+
+ {% trans "On Time" %} +
+
+
+ + {% if on_time < late_come %} + + {% else %} + + {% endif %} + + {{on_time}} +
+ {{on_time_ratio}}% +
+
- {{marked_attendances}}/{{expected_attendances}} -
-
-
-
-
-
- Late Come -
-
-
- - {% if late_come < on_time %} - - {% else %} - - {% endif %} - - - {{late_come}} +
+
+
+ {% trans "Late Come" %} +
+
+
+ + {% if late_come < on_time %} + + {% else %} + + {% endif %} + + {{late_come}} +
+ {{late_come_ratio}}% +
+
- {{late_come_ratio}}% +
+
+
+
-
-
-
-
- -
-
-
-
- Day Analytic -
-
- -
-
-
-
-
-
- Overall Conversions -
-
- -
-
-
-
-
-
-
-
-
-
- -
-
- Birthday - Katie Melua - 29/03/2023 -
-
- -
-
- -
- -
- Birthday - Katie Melua - 29/03/2023 -
-
- -
-
- -
-
- Birthday - Katie Melua - 29/03/2023 -
-
-
-
    -
  • -
  • -
  • -
-
- -
-
- On Break -
- -
-
    - {% for emp in on_break %} -
  • -
    -
    - Amy Winehouse -
    - {{emp.employee_id}} +
    +
    +
    + {% trans "Attendance Analytic" %} +
    +
    + + + + +
    +
    + +
    +
    +
    -
  • - {% endfor %} - - -
-
+
+ {% include "dashboard/not_in_yet.html" %} +
+ +
+
+
+
+
+ {% trans "Hours Chart" %} +
+
+ +
+
+
+ +
+
+
+
+
-
+ +
+
+
+
+ {% trans "On Break" %} +
+ +
+ {% if on_break %} +
    + {% for emp in on_break %} +
  • +
    +
    + Amy Winehouse +
    + {{emp.employee_id}} +
    +
  • + {% endfor %} +
+ {% else %} +
+
+ +

{% trans "No employees on Break...." %}

+
+
+ {% endif %} +
+
+
+
+
+
+ {% trans "Overtime to validate" %} +
+
+ {% include "attendance/dashboard/overtime_table.html" %} +
+
+
+
+
+ +
+ {% include "attendance/dashboard/to_validate_table.html" %} +
+
+
+
+
+ {% trans "Department overtime Chart" %} +
+
+ + + + +
+
+ +
+
+
+
+
-
- +
+ - + - {% endblock content %} \ No newline at end of file +{% endblock content %} diff --git a/attendance/templates/attendance/dashboard/overtime_table.html b/attendance/templates/attendance/dashboard/overtime_table.html new file mode 100644 index 000000000..1bd5df56f --- /dev/null +++ b/attendance/templates/attendance/dashboard/overtime_table.html @@ -0,0 +1,92 @@ +{% load i18n %} +{% if overtime_attendances %} +
+
+
+
+
+ {% trans "Employee" %} +
+
{% trans "Check-In" %}
+
+ {% trans "In Date" %} +
+
{% trans "Check-Out" %}
+
+ {% trans "Out Date" %} +
+
+ {% trans "Overtime" %} +
+
+
+
+ {% for attendance in overtime_attendances %} +
+
+
+
+
+ +
+ {{attendance.employee_id}} +
+
+
+ {{attendance.attendance_clock_in}} +
+
+ {{attendance.attendance_clock_in_date}} +
+
+ {{attendance.attendance_clock_out}} +
+
+ {{attendance.attendance_clock_out_date}} +
+
+ {{attendance.attendance_overtime}} +
+ +
+
+ {% endfor %} +
+
+{% else %} +
+
+ +

{% trans "No Overtime to Validate...." %}

+
+
+{% endif %} \ No newline at end of file diff --git a/attendance/templates/attendance/dashboard/to_validate_table.html b/attendance/templates/attendance/dashboard/to_validate_table.html new file mode 100644 index 000000000..f02471f2f --- /dev/null +++ b/attendance/templates/attendance/dashboard/to_validate_table.html @@ -0,0 +1,142 @@ +{% load i18n %} +
+
+ {% if validate_attendances.has_previous %} + + + + {% endif %} + + {% trans 'Attendance to validate' %} + + {% if validate_attendances.has_next %} + + + + {% endif %} +
+
+ {% if validate_attendances %} +
+
+
+
+
+ {% trans "Employee" %} +
+
+ {% trans "Date" %} +
+
{% trans "Check-In" %}
+
+ {% trans "In Date" %} +
+
{% trans "Check-Out" %}
+
+ {% trans "Out Date" %} +
+
{% trans "Shift" %}
+
{% trans "Work Type" %}
+
{% trans "Min Hour" %}
+
+ {% trans "At Work" %} +
+
+ {% trans "Pending Hour" %} +
+
+
+
+ {% for attendance in validate_attendances %} +
+
+ +
+
+
+ Mary Magdalene +
+ {{attendance.employee_id}} +
+
+
{{attendance.attendance_date}}
+
+ {{attendance.attendance_clock_in}} +
+
+ {{attendance.attendance_clock_in_date}} +
+
+ {{attendance.attendance_clock_out}} +
+
+ {{attendance.attendance_clock_out_date}} +
+
{{attendance.shift_id}}
+
{{attendance.work_type_id}}
+
{{attendance.minimum_hour}}
+
+ {{attendance.attendance_worked_hour}} +
+
{{attendance.hours_pending}}
+
+ {% if perms.attendance.change_attendance %} + + {% trans "Validate" %} + + {% endif %} +
+ +
+
+ {% endfor %} +
+
+ + {% else %} +
+
+ +

{% trans "All Attendance Validated." %}

+
+
+ {% endif %} +
+
\ No newline at end of file diff --git a/attendance/views/dashboard.py b/attendance/views/dashboard.py index 588b7af50..ef6386c19 100644 --- a/attendance/views/dashboard.py +++ b/attendance/views/dashboard.py @@ -15,11 +15,14 @@ from attendance.filters import ( LateComeEarlyOutFilter, AttendanceOverTimeFilter, ) -from attendance.models import Attendance, AttendanceLateComeEarlyOut, AttendanceOverTime +from attendance.models import Attendance, AttendanceLateComeEarlyOut, AttendanceOverTime, AttendanceValidationCondition +from attendance.views.views import strtime_seconds from base.methods import filtersubordinates from base.models import Department, EmployeeShiftSchedule from employee.models import Employee +from employee.not_in_out_dashboard import paginator_qry from horilla.decorators import login_required +from leave.models import LeaveRequest def find_on_time(request, today, week_day, department=None): @@ -29,22 +32,12 @@ def find_on_time(request, today, week_day, department=None): on_time = 0 attendances = Attendance.objects.filter(attendance_date=today) - attendances = filtersubordinates(request, attendances, "attendance.view_attendance") if department is not None: attendances = attendances.filter( employee_id__employee_work_info__department_id=department ) - excepted_attendances = 0 - for attendance in attendances: - shift = attendance.shift_id - schedules_today = shift.employeeshiftschedule_set.filter(day__day=week_day) - if schedules_today.first() is not None: - excepted_attendances = excepted_attendances + 1 - late_come_obj = attendance.late_come_early_out.filter( - type="late_come" - ).first() - if late_come_obj is None: - on_time = on_time + 1 + late_come = AttendanceLateComeEarlyOut.objects.filter(attendance_id__attendance_date=today,type="late_come") + on_time = len(attendances) - len(late_come) return on_time @@ -52,13 +45,9 @@ def find_expected_attendances(week_day): """ This method is used to find count of expected attendances for the week day """ - schedules_today = EmployeeShiftSchedule.objects.filter(day__day=week_day) - expected_attendances = 0 - for schedule in schedules_today: - shift = schedule.shift_id - expected_attendances = expected_attendances + len( - shift.employeeworkinformation_set.all() - ) + employees = Employee.objects.filter(is_active=True) + on_leave = LeaveRequest.objects.filter(status = "Approved") + expected_attendances = len(employees) - len(on_leave) return expected_attendances @@ -67,6 +56,8 @@ def dashboard(request): """ This method is used to render individual dashboard for attendance module """ + page_number = request.GET.get("page") + previous_data = request.GET.urlencode() employees = Employee.objects.filter( is_active=True, ).filter(~Q(employee_work_info__shift_id=None)) @@ -76,7 +67,8 @@ def dashboard(request): week_day = today.strftime("%A").lower() on_time = find_on_time(request, today=today, week_day=week_day) - late_come_obj = find_late_come(start_date=today) + late_come = find_late_come(start_date=today) + late_come_obj = len(late_come) marked_attendances = late_come_obj + on_time @@ -85,15 +77,30 @@ def dashboard(request): late_come_ratio = 0 marked_attendances_ratio = 0 if expected_attendances != 0: - on_time_ratio = f"{(on_time / expected_attendances) * 100:.1f}" - late_come_ratio = f"{(late_come_obj / expected_attendances) * 100:.1f}" + on_time_ratio = f"{(on_time / expected_attendances) * 100:.2f}" + late_come_ratio = f"{(late_come_obj / expected_attendances) * 100:.2f}" marked_attendances_ratio = ( - f"{(marked_attendances / expected_attendances) * 100:.1f}" + f"{(marked_attendances / expected_attendances) * 100:.2f}" ) early_outs = AttendanceLateComeEarlyOut.objects.filter( type="early_out", attendance_id__attendance_date=today ) + condition = AttendanceValidationCondition.objects.first() + min_ot = strtime_seconds("00:00") + if condition is not None and condition.minimum_overtime_to_approve is not None: + min_ot = strtime_seconds(condition.minimum_overtime_to_approve) + ot_attendances = Attendance.objects.filter( + overtime_second__gte=min_ot, + attendance_validated=True, + employee_id__is_active=True, + attendance_overtime_approve =False, + ) + + validate_attendances = Attendance.objects.filter( + attendance_validated=False, employee_id__is_active=True + ) + return render( request, "attendance/dashboard/dashboard.html", @@ -107,9 +114,30 @@ def dashboard(request): "marked_attendances": marked_attendances, "marked_attendances_ratio": marked_attendances_ratio, "on_break": early_outs, + "overtime_attendances": ot_attendances, + "validate_attendances": paginator_qry(validate_attendances, page_number), + "pd": previous_data, }, ) +@login_required +def validated_attendances_table(request): + page_number = request.GET.get("page") + previous_data = request.GET.urlencode() + validate_attendances = Attendance.objects.filter( + attendance_validated=False, employee_id__is_active=True + ) + context = { + "validate_attendances": paginator_qry(validate_attendances, page_number), + "pd": previous_data, + } + + return render( + request, + "attendance/dashboard/to_validate_table.html", + context + ) + def total_attendance(start_date, department, end_date=None): """ @@ -138,6 +166,14 @@ def find_late_come(start_date, department=None, end_date=None): "attendance_date__lte": end_date, } ).qs + else: + late_come_obj = LateComeEarlyOutFilter( + { + "type": "late_come", + "attendance_date__gte": start_date, + "attendance_date__lte": end_date, + } + ).qs return late_come_obj @@ -322,3 +358,79 @@ def pending_hours(request): } return JsonResponse({"data": data}) + + +@login_required +def department_overtime_chart(request): + start_date = request.GET.get("date") if request.GET.get("date") else date.today() + chart_type = request.GET.get("type") if request.GET.get("type") else "day" + end_date = request.GET.get("end_date") if request.GET.get("end_date") else start_date + + if chart_type == "day": + start_date = start_date + end_date = start_date + if chart_type == "weekly": + start_date, end_date = get_week_start_end_dates(start_date) + if chart_type == "monthly": + start_date, end_date = get_month_start_end_dates(start_date) + if chart_type == "date_range": + start_date = start_date + end_date = end_date + + attendance = total_attendance( + start_date=start_date, department=None, end_date=end_date + ) + + + condition = AttendanceValidationCondition.objects.first() + min_ot = strtime_seconds("00:00") + if condition is not None and condition.minimum_overtime_to_approve is not None: + min_ot = strtime_seconds(condition.minimum_overtime_to_approve) + attendances = attendance.filter( + overtime_second__gte=min_ot, + attendance_validated=True, + employee_id__is_active=True, + attendance_overtime_approve =True, + ) + departments = [] + department_total= [] + + for attendance in attendances: + departments.append( + attendance.employee_id.employee_work_info.department_id.department + ) + departments = list(set(departments)) + + for depart in departments: + department_total.append({"department": depart, "ot_hours": 0}) + + + for attendance in attendances: + if attendance.employee_id.employee_work_info.department_id: + department = attendance.employee_id.employee_work_info.department_id.department + ot = attendance.approved_overtime_second + ot_hrs = ot / 3600 + for depart in department_total: + if depart["department"] == department: + depart["ot_hours"] += ot_hrs + + dataset = [ + { + "label": "", + "data": [], + } + ] + + for depart_total, depart in zip(department_total, departments): + if depart == depart_total["department"]: + dataset[0]["data"].append(depart_total["ot_hours"]) + + response = { + "dataset": dataset, + "labels": departments, + "department_total": department_total, + "message": _("No validated Overtimes were found"), + "emptyImageSrc":"/static/images/ui/overtime-icon.png", + } + + return JsonResponse(response) \ No newline at end of file diff --git a/employee/not_in_out_dashboard.py b/employee/not_in_out_dashboard.py index 7150ee52b..064c6a546 100644 --- a/employee/not_in_out_dashboard.py +++ b/employee/not_in_out_dashboard.py @@ -15,6 +15,17 @@ from horilla.decorators import manager_can_enter, login_required from horilla import settings from employee.filters import EmployeeFilter from recruitment.models import RecruitmentMailTemplate +from django.core.paginator import Paginator + + + +def paginator_qry(qryset, page_number): + """ + This method is used to paginate query set + """ + paginator = Paginator(qryset, 20) + qryset = paginator.get_page(page_number) + return qryset @login_required @@ -24,12 +35,15 @@ def not_in_yet(request): This context processor wil return the employees, if they not marked the attendance for the day """ + page_number = request.GET.get("page") + previous_data = request.GET.urlencode() emps = ( EmployeeFilter({"not_in_yet": date.today()}) .qs.exclude(employee_work_info__isnull=True) .filter(is_active=True) ) - return render(request, "dashboard/not_in_yet.html", {"employees": emps}) + + return render(request, "dashboard/not_in_yet.html", {"employees": paginator_qry(emps, page_number),"pd": previous_data,}) @login_required diff --git a/employee/templates/dashboard/not_in_yet.html b/employee/templates/dashboard/not_in_yet.html index 7a16654c1..267999482 100644 --- a/employee/templates/dashboard/not_in_yet.html +++ b/employee/templates/dashboard/not_in_yet.html @@ -1,10 +1,24 @@ {% load i18n %}
- {% trans 'Not In Yet' %} + {% if employees.has_previous %} + + + + + {% endif %} + {% trans 'Not In Yet' %} + {% if employees.has_next %} + + + + + {% endif %}
-
+
{% for emp in employees %} diff --git a/static/images/ui/attendance-validate.png b/static/images/ui/attendance-validate.png new file mode 100644 index 0000000000000000000000000000000000000000..8090bced74269f8bc991e77b62c5425ed472b4ba GIT binary patch literal 14198 zcmdsecT|(xw(l1LiL_uuM5IZ?N)tjepx`E;fWTH1rK?B~X+gTQWOI}#3W^9OQUydr zDS`sh;s!-Gp%_#U5Mm2N1fro6$Xfxu_nh7*VArK@f zEBpL6GU(AptC-=#!WXs&_>7_zxQxt z=Ggn#`T%d|2|=eA3N-0*u*Mp68#*KQq&aL3OxfJ~ zYNLjwZnJ$Z^SNGgV#~+0?48U3o4{v3R(($2e?kKjxwy36>*>i#6*es-Icmu3a_7Pn zP3L&!Tcx2e-7PbZ#&yS|@r2taE>W6EpUC;-g!Bfe)MfgKRLwSQb;gV0z$lf|7l;2y zmsBL3xJZGM9Z7a{v?6~xfPS9tOpR)B*_SA>Bpyk2UFeGk^q17ykiD(lqANR4^oDm? z1PsTjB`xIYyp!;^aiHy3dGXGN&7?S7*0cC7-;}6x5kiR@_OncJGm>uV{JRD3h0VzL7R$KO$u>3Q179nC9WN$S8R+kDdmxfa(yR58`8 z7%Ptre4ul;-?#gjR0fUc>X?w52bBFQR(4f+7LjXapO-Cz(|5Mtu6*)uE03`iu#ptI zLiqjM=Lal~dbRs8^brPc8=fCe`XV_-=*fV&{$=;JILa?7Ikm8IRLrDg& zGXqYaDGh6Xci}GkTu-K5TQ4-({0gj<$M&~y40+(!VTd>Asbl-QJV)fJqIM`Bmp1TG zq|yA`LmsQ$s~t4(>DDuZ7Jug<@BLRVoLMq|^UoY=Byy3M+g}Cyshp6f^7Iv{Wjdh! zsrtVeLaFLku1b^Ctv8*5Z?tBvdiQU6yq4;Wvp9nJm`(pchxa!PO7_b1Rxggm)$w`R z-l;ask@uo*G6P*pQ}gaia~gCxx(``Hk5_X3tdnn*v^oBpv=Us&65FLCJwLOJYMc6+ zDkum*^!02d*Cw5STo^iJ$b^>)B1@}h8yNMap*MY}9>OS;1*k}*X@8}XLu!F#ol2xEcb>sdVV*F&cNB;@AQOq^ z9$;02Dv8vuF;?i!Cn{N|I-SK5Rk*IyC~wZr(c&kt z(>>!&t0T7)GyV)#x2Clik+tZfX9gW}`+!KvVjXwhQEhqZnflr@5v~gUWrYvZcyrGex?MrN<8{u4W16bo{?d`8fjJq1KU}%XT`mLa zo8k|Pw8|x8tPf=@i9}ivJX~@6zYE#Gmev~AoL+66y6%%L-BFLnOjWz&E^@kv?ef?{X51@9- zz1ZFp5vPYWt9_B6J-Nml&tJtosKnoF?Q+(Wl|Qz=cBiBtg!w4SI>`!5!rf7~-W_bj z`WSxSjdETeLVwp}y{CI58E1p%Rr1{NaK<;cVW7x*(MZYi=$_V8_2S`hjz z7CL2CnU*-WKegaWlslpEZi&%^KO%R`L&%QSAz7CxK5`0?+Yt9Xy|$@B-TD*n8^hFR zFbFpT9wvN$AKC7iS`bwuHp^iQ;5v=6{NP=sC+gQvOlPS3W(SI@WKiQx%8W8y;a%h0 znS*Y_I@X8e8xj1G`f#aCTkvo!e%Cm6D^O~ql<6szPSnjPIr9be{0J5cQ1*;V)_bWq zpfg+b=<**N7uBs@(ptMOH(;q8pcEx|jA*ad+l{H}z9)^~DIE;kqS%CDMG~b~b#^O@ zg+?ztyA@ndLmJs3_rskcHIo9UIiRz>Y3o9w2CMTLw#WOts<%e zBYV}Y4-Ko_qN>s+lePvzn3E2y>+}zfi0kUs?`uVj^{_#-&q+oP;{@j~2XUKFvulY* z7M`4YH{>bic7tjZs*J&~1q}ACzZler0_Oa(v&}=J7etU_Kb~|xY!bj&<4G?LU2OJ! z{#EOG%y&E%LIa2d=5IFya0)nL6N1tG~P5bjO>nj+7&wEdKhH3FMxMuqC)VX&IQ}IaS_M1D^qjx@S{^M;Xa0(NMJu=^R zHMv>FZiuudELn0kDxRp;;hJ^@n98$tFv)NaNz=Qb>AU9E5%&{38v5k#8^O81UC^EN zls1)&Bn~0stq;xgReX4=@Ad3n0wHBU!8q)J&ap6|KNE|&wlp*szn%M;!MEXT?0(oU zAE`28m@WDKOl#8&)SA|zm#;`#craZ>e?)-n3k3-RS90rQ6gNX%%gKabdVwItsf;BL zmrd&&74FsK)dBLiA@@@I_ad1zYS1?2Q!3x4#j=r4t_=VA5#Le<`H0kIbm$fOktRAA zuHlRFCG8MjeNmZT2G8D^29$8v-Xz_WOz`LA!^y1=CUuGlCd&Vw^#CNQDq zuH@}9MG9W?r=MNnj}yg#6!zG~_+hcX(TYY-BLtl{P@x%f} zQ4B_zmZ13t5af1zfCaU``nR-_aD{&`4VJ;fLqN#H0cUZtM^;iAy2 zHw=**Bx6~#HqwK$Iztm) zPpcI_1qBGN#r&hO4{ZY<98wS4m>?SNhbBuK-%%bV_jf|3O1;tFqwf6hWsMbD>`%3t z7}NJUr25Sc`xagu1gTWcYC1;0wCUe~>XrU4Kto7RvZc=UEH8MV^5{Y@5+I2_X8*YWmZ_<<({p~>R!8^M`2koT=ks?^olp`1&inf?Axcw_XC z=kq)Js=SsSV4+qhx^!vkP0dEEnFkIJGlx!JwvTP%w$Hbju(!X5JkBeweG9g7n>GrdkNqRB z*G*|1y5#0OPicBi2I_YkLLl<-jgE>x0s;)Rz->>D)IR(`#_P@41`=|elwR?kwU2D& z(^2JrY`{vpUoj}t?Oy--*vtm3mW%51d&u7^jkvqX%HEatM{TKdy9+JS)}oOj{p461 zAK$TpsPYzr!i38gmsfqQfmu>Et_e*JQz}wf;0CWOZ>`U?n>X)Ei?ad8D{_X zW_~9@S%qFns!p?inA}QWC)y-#)51*WN4fD}=kvcosCLGvO2cV1O=rP2%qqt`{tJ;#+I1hWO-vQTtuM*TUV*Wj+ueEeB z96qg;byE3}eDDW7Ecv?gH)Na!@ocpJkriBc@9;wJqaalRRI06D=V~^w5&7f-LCIQ-sjKl zuYTqKB`RI<+~logO{AgGLrAxSxYiA&(kxf~PGsquIBJvyXLamabRw)3z7LMnir(9u zrQM(n*Z!fV(!8RWBv}wW3?{A+9ibzhtuGndvi5@beu;9gwdeg?!5R?O^#30r;D0B& z{{La^=rmOBIKJfs{X6{?eQ%owbW|(a9pRQn?YI5>ZIfTWvhY*#MdSrj?QJUcAkHEO z-$JHur*C0Vq~jJ0S--LFGwKP0@8&!D!dr!(bXoL~lrlpI4gdtK2v#Jrz?cm;A!Er{ zJ>I-?Ej!;?ma8UPj+WEWx_^^DZNNz8RHXs69*(RGpQ!>q4g(!tr2@B z2UZRn$$QLey!tG*E5l#R(3|jPn4$TLAWO(Zw9BEWa#jX6rt6?X9I$-&_; z{XTqGw_E=Vf7cm?{*?{!$s4e~avmZhlHU%EN{OQ}9N z(RZ^R=d7GF__@e(qSKrgPV_n9S|uJ&EhYp8)OiU%1~MS;4?e+xH2zuTcKOe9@_$wz zFc_5RW5-TjQ-nyOHycDT#$P`z^lhgtL`#~s2m>&tEpu0z%#)ut;LUwty4OJYXV#Qx z{$ZO5$pXup|8p1n`L7q-6`*#zg%5phIAnR$Y1PnQx6v6`-T{IKTRy%>xoNytA83g z?SizqgE!m$xNH)2zW=xGFB5L`ic6KhuE91Pn3Op_b5&+Le?oL{FEIGiWfRW*RxJw#(*gsz_3J2l*fPhd48^KNQ57fos3~ zLF=+V==RH5A8tz2Cw4uQ*YEu1aSk}6&laXze0~Zc-?mJaTCnF{1B@v5?=GPHTU>nD zrwagT5fg;vpZ7KQ06=r|21TGlM*fhx^#(OX$U4<(xI-UuT@(fN|JM1#o7#3z^(aDU?qxbWB6sluBsPr zqDDy*mkse9;Vi;DwLsglC5}E!hD+>w2UDU^dlFn>pw3eqPJh2_b-rAra67mRsyyT> zVb#kd)ZEAbyL2H@R?$qj4#&88)grg_c;TNKu%M)+Wo`oH9KdeW`OAs**&P{AL>%wx zbHAI6Oh%wwrvD(Md@bzprdy8Pk)x4*p8Ep}6ImjT%S@JeBo;YmlVH{hN!i!2C)XaA zCAJ`%VinsbUpw2j;X@UFxyUk#G1~anTp6l&Z%Ffym|yHQX}Wn;+W~vHz4x^A)^O&1 z*WF%o%K2X2KW%0q?{oZCMG|b=drK7cC)=@{HCO{fXtz^aSb^Fvci&uoH`>4-I=2He z4eRgB)m)YmJRaQ-Ye8Q2S0Tl^t$8w zdN$zg#JjPBtG|NxxP?*Or4JOTPlo-_>XTCtnhs|8)#60P00nrw z(klO=?BV!{<$Gy^q~7>t2*QYP@qZ91&a4BNV*mfWP+=eqaL?Vv@~i{A53XsTX<#A9 zbzO1yu6E6c+#qV=9as#=GZ?rAq-8*${$VfLL0F0qnaHiJ^{MKa z`DK|~PQZ7r9y^=cO>(5hdR@)ZA5H4yc6j*pZx&j7$rQNz|80brk`xC8p znN~(~!W4+tWWL|b{H4URE2%}ve>&3_LQjW&2ppjA-=?=Io2RP3-vWx#rt4;PS<&Rh z{vLO-A1U6?GY2+!oti`aYFr}$Ubv0UZPMI z$?{!NOA%S$$HGMfvc_0!klRdeFYwG&MD+Jh^c-l0#&h))=bs^XRK1mtlFe1OmRyUj z+t*S;n!yU5sat(ZImb;TJpOQ_ZYfXbe8V&`*%FyYcm5ecYV~0w)0gN%u~C*S zYVJyOVz@ywm*HiIsTE%5;Wu|Tr-Bhj$6)D+fvmej4iZ- zcvFelor}&M@ehPy4NIZa!39!EZn!qY!0QZq%hUpwMfBnZKCJYykev;OfBLR^9dd6OQ`iYU~Nfn`fJ*uuQ&ES%rRWC1*xs{X)7l6aW2 z8jCZ+3S#C|0YXnLID&8SA}9GiZ)@yBnd)PMjx8lFlY$lta*w#uVO*P3AR_rCBV}S< zr(P83?XQl!A+SY_qZ{~76@aabZ^UFv))$8+E4Yi8ZoxKHGMlP|d!a2oTR&~;|!uT*%GBCYP~V9BBWkr|c@m+6cEI4U=y?-oQdA4s(j4kTDHh^4NMIUZ;tO_ zYR=W2d294zjd@e1)f`NMCRKC;rRxLaE2s1(vA4&^s_6e4s`np z>L?8dWQ~;B-Lx#zg>N!gUM=q&)&~T;wOTaFnp~JGde4W2?{nb3%Llo*X(N51h%c&>R@rN8#_FNsD&)-u8DZ2*cXI>XvOlQ9z>1vu zABTZ^$`67$aLxfhO=`T^_Bchk_*aHqykji2sTw|`ndNPz)4_1i{%F43YBmSe*p)>6 zP(YmY>~|pVWE|^C67D9D@wMq{(9>RqXtxeup+s)u(wMsllX5Htcda?si-6)El3%-f zzu~{xRelcYTow^@KP^?j0jX-Qbh=l-+?F>VBgn{fly3e|8>7i>a<4n0R~G%<_p58q z6D_RjVO-1o`ww0_pew{99fazXXC>buPLPH7;fDP?hkMS{R}k z!u}nx%}-;h!*?>C8}IpYd6gT>Df5?{fCjj+KDJCJ(<>0HBZCgs=g!cxgg!1F+DBj? zwYdPU&Az_9Cqg(%batNf?{A&%dE&oWRDLe&Oo(URpV7h1CP z_Sw9NhI3xmvmgA6kwxFK4(r`; zo?YFYC28yw4ED9J?(>8){XOuduY9R<9Hv@2Z_Ura4~76Wt*mcUI2GF$aOSPk4h>9P z){@!Ca04|ehO@fvAs8VESLpYp7c(03+U;p!-+dzYJ$dy0F2xv%#BdYnvE&H^N+j^M zZ%jCJ6rKUakAZr!9iG3M8&BFT)RqB=P2p*%hZ>3`vTwvAlk)_L==_ELp!{0cxTc^e zX5ZWJu(2Qaec%p=WLS6(*Hw0QEA3WYhsqhpf-6asSl^B-&0w9qA}O7WBwM8OMQJ+8 za;2iE-$d4G$c=i-XO8NzZZifvFg~iz{Z{yIFjL7{I~HAGXxxPrrf-)zgTL&Cua}Ml zSOa@5mXPg&YXMMC-EK1gAobKavrAKEq?~q!Ovha88(DPl8m>=a2xH_d>jRiF;A{kQ zG*_!m2w{L7JzH7%<2u$es&hAXLltO7@1~oD`U- zkjb=&NHEi%S)GYSPh6%n;7pTuFtz6vWaoE-SnV<<%trV3-86#f9AkaY7I9mPj&Nq_ z9_a{z%!EPmF@dcLYINc{u>G|Cc+-qKux%eU(Srw-jNQ=RSFwUPGpS7_r_=fFuDBQK zK%55}!gl?IhYlweOjujpcNm+Fc_?PUXLPc>5#pw$4n}3?#LbzsKF*9;K7Z3ORq+_m zgL5)YWKZ}DHiuJBOO(7&_m>E z)xGeDj{8k2=#89o z5pujusgdD&(*zE${Y|(x8T><>jkE)J{!Z?}E%B!hUuis0`FX<37D-J9ZqbPs`Bjyl z7v(ard2H&`5pB%4MCQIGq+kMam;hV>?s1y&Dunyf)%5M?c|b<@Ad&H-K<6GAR8_#x zNl4+?#%!{Vm9dirH#Xt4H~M=e-BF0h%tUl_luv?WO#K0y#Dv`;deT6>nz=VL8uYE( zFPOzXmW@0^h^q^|8U?Ui6>X0p1R}1_}dtz)Wug2-%>4?F92l*=~q!zLx0k3M{hFESpFM5Y{1fJ0_Di7dlDV@SD1_^-FSC0719R{5yRpRXoUVzd0uy>CDqy+fQlj`9 z9BL06Zc3)8YAK)k8<=Mq6#D;uYLqo+wfpk6+ia0H^JB?PmndGgNQETI>@Jp%&I33zEIrC{~2c z@W=}lx=H^c#~`0lW5Pwv?=IEUnp5PnWEPiXHv8&&$hf)V@cY2Phzi=w6ZZn*s}YHS z?>RfdQUGUl(nCd}BWJbWMM~q)e$12$Ar9Vq;7f+2Pq`w|9?w6?*%&K_?i97x6e6X3 zpcnmccquRrWl+)Hc*ULIv5F7MVagILJM{Oq!h}h?pUDIENj5-4Mj5Dw`|Doa54%s5 zCLJa-V&sI5Cv+Rh$f~6nP+Q^$E&@orM;N@)7)pKF@}r=t#ND8@>&o)przB zr=bq@1=8h&?~K#)Z4$3mJq#b4bUdA&ApI_cT#d))ltnv$j%>kPP<;eP6FXlxZJm){ zt;l@`Qa)}06Q=&4bTQzoFTLN^htrEChip1I!`v&;E24A+Xsx4-!Lv!cYYEMW3WHR# zjyHQI4W;HAFt&D1Rix>6Aji^WcAjp2?=EeOif!fB{LT#XQc;yus;7=}!MZwc_EEAx zQ~8uKa$n0U(Asx#C2Zj)(I+xGm=!s&rTg#2gSs#$<7w2aJu*wSwo6L<4Cg25U%Vmf zkZV`kCk2FxDN}{Wi0FWr7ae(mk_wL-)Ob%EJ|KMqsV_)WR1qpZs>c(fPo#Ccs@N*x zy6I#YbMKSY=uR=rt5``}C!kSK>Y)ii7lcU+5a(lJt6!XDnM9L0_R6q|Ol_o3-j} zXT)nL-*&Qe&%!K%q9vjl;NN+wm{f!pu-ZT@hHjGVP@ z)&ex4@KoE4dHj(KA!PTShXxl3?F+L)a_O}QW?_E+pkEhvxNW*iO`4p<$zL9V_xVg z>u$fJGxd@+A;3@0uWA268Y@fyGRTse3V^1AkSbu9DhdLIf*@<(h=j%YW~y(mqE5 zqdj&ySiy$b?emow-wnuD`Y@RtnV$m8b)2@{|8Rpk7jK(5QevVHQKOW(@?sAeU&r;M zgZoAI?@p(xBC;W=x#}m;-J0ka;>Co0Ej)6LX7ION^Q+nyC233>EY#K626YXb=IQDn z_b-As#NtF|&jG=3&@2(J^yo!`705sZWFC&?OWpN3RvlOE0_W~w^;sgQ`E~GkIdsz@ z9HoHc%@*Xn%P7c*{^~HIqTi1&i$NokC=KhMr#69Nm;l)Mgp)s{$Lpu>lI+lPsDleM zFde};P;rwU?-RXZaz;MYI!2xtjMqFl^=6bb;YkmE5^7IqED5Ek)imqTT?LjQi6inH z0WViaEc;tB`B1!N%QZUE_fC7_R|KnuQD2Z`ltRh5oih`mHB&}ENUg05y{dL>Yz;I< znq!L*IDhHVzW|7-x>0?~kr1~gQlDt|VViqj2HT3=+OcqD(?@e!-O_@;@5`J7LFWBF zsLG>tXZY|FnfA?B;-?S(dC1J0Z3tjU+xh%Z-yl{4`ul8D!wI}7QF}3Gca*bm7Ov&$ z{dZ86k#lC<&25t3H_~K!_F+DrC~O7@lu<7dxwbv|oW&#gasy1Zana0z98FFxcKQVC zGE?mW;Y~CYxcCRf;&f@zy+<|9Ol6`5ahi#7-pQMpDH90rKU zZb0ZkD)d$LtQQ|k*Q_?yz#=Oi@4<}2VxVIqgY#coB(dFfOD2!=5YR@(sGM1KqFWyzO1E3Jep@f9-zZODZ>f|7h5jS> z0l8TXR-&!Xs|&F=0CIQ(#+{x%X@er(*vl_jA)VE4gn*)2<KcZt<%{*hFML=9gQI1A+~cL?()8NI3vTV2f%X+(5an@U-)8oiURr?BSiz>Kr=tf)78K?tpzaz`C`pNppm?0g5sW%6( z5HuEFQ>6RNC)Cy}3?jO4R`a^{^n5DTcjerxSEhIFn$5uSr05TV)&{F{53&M7qAaW* z^@=MQ<|@M@;DaLk7>?$qnHI+6;N?FE*|1}&)Ev?5RRhLlGiis<$C4ZYaL-`yQCv+{ zij9v#MWr&o?N+~Vz4gH&+`!{AwT%@8sgJ$cx!I3<2Ad|W5U&R&TZ+i4{zp&W&8=;R zG+#0v&~-W%VmHf$ftC%po~GWPGRQrkxQiJA1-xOFC%JZ6DJbr!dwq4m$z&bnTuExw z4sIWFm(|B-V_!}l$-NG22J0zVUs^JgQAGr|sp|%VAI3UT7$P;W;HzDGcTJW7Q0yEg zQ~c_MkGV|PlQe2s%a!&gKR_i%d#=Q`NE#Zz$#VT!>7^-~iyadJAxJMol6#xE3o$Z` z<(b(ec8!G%Li7hSqI`XAblSW>R~j-WG@@qT0Fuu$dOT3g7)fR~N)g)=EWseR$AISk zulb64Ax%uRb(_I(S*A3eqq%!pmvwNAxBf8oJVPjYlUUr^YU%X(k$X(oy6xB@QB&ls zJs_JBV?`nb=d`MTDMm=etZG-zOP%*REM%!2px`fCu4{5yt$HBn6k8Q;mSm*o@Kuo>Or5I*l#ek$$S0CLLGTnrTdw&c7Y5PO?F61KShJToqFpnr<^zP|Fr% zfMihbnIc32c1^hT%8^tipS+2a49 z*GUb3ZAm>B0EQb0;{bNA!hGC%8u2ReM#n=~53EV1UJVN37z@z@Y4!|KqcKFy_ORN9wk@gm z9wo3Zn3c^%+%sw*wIili^XY4{IxufCp5q}@pu zQvd3=4zU<0_L$+t4qsT&=y-#!^V#P_2SB7 z*fBf&!1aC_xtSdODrWUefZ)lHw&0uQA7{eh#5WIxa}axaivrQXTUm|t*uEaJ27i&P zFNlAlFpFqUE;b>>=hvn;P0k->IfAy|$#{u3;{v3)%%=;BYh9he|B-{NE$#88za9VM Fe*xxY#jyYY literal 0 HcmV?d00001 diff --git a/static/images/ui/coffee-break.png b/static/images/ui/coffee-break.png new file mode 100644 index 0000000000000000000000000000000000000000..aee150c2ca75411603d077838164fc63277c3347 GIT binary patch literal 11878 zcmdUVc|25K`2U?5V_&mnCxh(!zLscimKZ|zXtQOC?8{6lBHJK4r6H6kd$wDV7Eu#f z(?pSd>^tAv=llEr_xIP!yk_pX=bYy`+xz`I&w1|ISf6HN7GwqhfDOc+!T|sh{)q$_ z>EW-nu>KwRi!SISXwL}$MKNAXfS;N0*z-XEz~1@qgUFI+7lI1~g3X+Q?E)_chhDgG z2?z}hRr0y!7vy~be@Q9u#+Cd<13>@~2f$M&?86EceuOr;oy*-?Ub2#uxXu2EJHj?G zp*-`oZ6%7&zDDhFoSM^%`)z&YLoo@r5>wbND2RJKVq}d&^Vsvq;xdn5|1x1D3^xxB zoU(r%!7a93X^UJ~**EBmKpOo1v7~pUxb|o5#)uyg1Csua{bvn2>LEZD3=xLHv^|(U?kfbJnGGN%E z!%NlNUVGYNyK0gr zJ$ONqv#$Y7k9zr|2NYEIcD3DrgsJcQ3KeE{T%GohmH6zIh5T*K@l;McIlE zxOp*Px)E}Zb?9O6FoC?S0sqL{Q}A+aG#OEK|K^E)_61lBiqOX2|%i)+_JwL zOSxf~hmDLP4>OP?IF*#y0c88LV1)!gQoq1b z=^nZ%IPzv+bqNM!TSb^yFAGi8MDsHp z<<>FNQ76x1Dn7Ks^GS7Ge{ER6&1vy{T(17mWyL`Z+s~ua7O1S0yJ83h9RgQS(}?{` z-vmThfPoJ@o`N->Z^T}s_owsM**ZKWAkK@}M1>;0F&wsfzwh`7%86rM=M&>tL}LYf zhJQRI<`X&)n}}7S*@^C!)U~*h<()G!53QXUhD3$}XnjA3B0leMkCH$Sjac+^p_S)&s#76#P700ps2+ zjWxHOHzWNaC>rP)C@f+VWKg`-XKsvVJ{yyF8i)8sXhd{8+PhPm9H58S!((D*D#lAX zP<%+`s%P3HhpYP3eR8+|84vN6{zaM3kHX%~{ybKJV>lAI*oQ81IUk5Ie9c2$ClAk; zD&N*>65R@Y)%YcGcII?v;at-3mNG*B`CY(6<{Y(DIif+Pu@u^dY{^+1rIl4@1&dPk zx;<>&95Ggi@!O_*R(_$#rAGoRG8Km7*fHJcGk5mW^a8l4k0H~{j+|lhpM1zGK%{ur zuA=JnvL+ZP~}H!tXmBSp6ieD$%d7M zKIj6rtvP>hdTJ(X!^F4w2eBA;P~!d6qlIpW#pid(v8jTwHn>SZJz_>RPid+3ic9pI zOn`ZvB84VmdJwdncP8>7ub`bCV*MhLW=&m!T$W?19jZ9O1n`nRo9{kc`eti7f0T1| z7oi&O99K6v1@Fi;Rnz*9Cz|%3S2b$IY1rC0XVt!sT{Kh_?^`B6;Z>UYkgBIFy0=vQ z_H)BQs!N(yp9AFh_xoe_O`s7Gir@e^*c*1~4-43OB%{BGiSFqKVf&7n>h%qZ90_Eu zVfXR*woY7!-!uE4h)8~t&SyFM=J@b7$rO{wc&5h4bGjZ$Yi79R&B5jiNmo1mn6?%wpEzWSdAMW5f5*{)L= z=G$cF;X7;PmNQAOuZ|p{W|KwcUhOTueZiL!aP;P&{YtUpVV-Q` zVQ*&N`P`NCi0=#qCQDfX0|8nz5$e?z>h`Z|BSm}D z{a*!EMshShXrDIvgyoJYEzzQnG2d3+|JBe;p4~=o6)a$%nMH^m#*-DJEjm))`b=je z9=-WV{e7&`pRijq9_rJlDcc@J;<+O z6Z54wqt~O}rSpA1pTNq_xv2uB4`~@1{*k2bH06D>_7W|zExETY=PX{Zi+|=VpEN() z2*9gW1 z5hPK&RX3ER54TBv{Lq+jQSXP$>^ht`q0i>PB62%K%%{RdW_{r2cgUyzDW}sJz1V)y zCGjcOZR@hV8+{ocva;(=a)YMLr5(@W8_ttKBR}+pi>j6+FY?n;gu}~dkib@-qCmEy@m6m^$*5ArP*4kbz*xF>4gqbAsF5VH^UQut9dSb5taXlq1YWy zpQbnntc+=jS8rZ=ZxKOSAmkrE>@qOf@hm1jb+7+wM3#!TDE3B?7reFE7piWI(1mgP zv@E<|o!GJ5Hh*SCdu7?InV28lIg-70)J?>}riD}|&?k0Ari9ZG)rWAm7VK5fO<$dX zs)?pVeda0KEKN{Sbu`^*&JLUZ*RrhrlUJ%#)oKSX&AxItS$!~Xm+NfNm?)>6NQk)4 z-QXDyZ*_wA^|IcIG^XCU?JajxMVjYPGK75+Z0y6Dpz zE7kprh~|A&yKA#e-m)!TqemzTxt%|RR_xBnwt&uc!O=n+_{LBFihYZ z--4rQKO5Dio}}zJeq`quKRNQs&N=r5)M2-{(H}q2q9d09a$kIW<#p%_MTsSYv`?rT zQ7-TH`cG6poL4>!obWOdY=4p_`k`{ipiS(k$BDzce#dC;vu(Rx-&}gpAq~<~r@wzw zpDIrY=lXNmrH?)(WvRsZsuk{+)4J~No}8XGYdp#PGfa7-V+ZEr;CnIF_t!;@*sE>z zGH>|3^f=Mp?c49xO=_omsuyUCvubqkRi}74l`5wM1hRbC{q!m|2R)$lG3T+~Z?WUr zwL2QFL2ldg%wr~+(~APU>po`gW`^IV{+^7SRQZ|lE755`5Li0&McVdNbYjUGMg!ZU-H+3c+X8cO-wZi zJ67LDq(5MAG;>qxgznQj<7V|@m6ym;%B7SB@jhiA_rrHW3}>|dj=YUFjZnEW6fHM}vXlQCFSs~ozlq3a5Vp5!boOzh>}nRUeESJL zP4rm{L9};&%;t>AS$i5g$9yB#eCLw$&avULhRn6UKS0R+ZH!EWc2S*1;KiTqHs=Ec z#W!!U1zZ=NxrMva9kcD>{&jieG6RJpoT7=_Ckw0uf&Be?dD=r$KqE>!uq~l!Ko2H&%jCnxxfrn$T1F0a zvO9+PD1Ud`;(nXr$9c+WG1PV5^@=L@lSP{o)lFhy-=0~#`eCzvCsx`=ZER=RZT@zB z`L&w^jgI{?n*As28zXXLyqBJ1e(o;cN(^!gv@RWCIgBPR1jsmiZB7}=8X7(@9j$lz z?Z^9F(u%cW;-W!YiBbKq{R*Go&vLEkbx-BW$njVKJbldtDZ{xG@AKQ-m}VDayrme@BN?0M+>YCu4UyQOt0aimdhCRcEd zu~L_-TBgeK$@rgfiD$E?i!}7A%kuhW`@m0P@~K9Y>Vt$IQjPeSxj*`lTa(EQ3!r>ayM`XVc99=g`u49=r zm&$PN-6!iZ)LO_;c-$0#2D)*PsQbF)tl23BvD3aS>)6cs z9lPYb)bYRW$vFYRZyh>$=3$!<8M*GdH{kJ7@l8_f*;g72R3|U~yGO;X93qa>j>0ZM zYR>TX6J+T6QEwNj|Co4rW;3~7Lg}AsfyZW0V&{`%DqfDi=OSFwiQ8LRMS6Z?Z7$?b z%MS=!I6YmbhW3{<}WZ#J%BHeFsYa*?}SjAN$^U}73$-d;owI=n7Ys5)^TIHm?K9$W=o<`UhWKg zvZe*5YMozbiuB_rM(Cp)ez`iAE@S|M$Z>(Ahg_6bdXC-@+h}=Y>$jRce!X*%dEI)YN(TPxGzXt_VIjOAe~7h>p?4LANAdDA*wXiBZSek!z4__-oI0u1 zUg!fvc{vk&8m^h0?l7BJleyK+T&k4hWH&i=|3yriszbIS(2f;c&=t)&uT{9{nX zRX==6-pwF+J>%tEZMgs9fN@X9yY+c4OBDSOeV7nFbU3(Qn&F7H?j?jz819lTQ_T-{ zsl(lt&?(_Y2}RH);*G1_h#JN2X!j92st?ad6FW4D@{Z*d+s!C3a}}SuoD!-(<1mSC zlK4{T$`Qq{!_uMe_ap!f@j+ZCUhpG}*%B3Ju4kZN^MZ3VmN=bujp6r@XF1zc`em92 zoh#!QPD`Zf%qTNqkZaTbph5>Ut326xrO8-a8afBr5jIhQNNKdllN3IrHf`(3C&#p+ zU!i=lrgas-QByhKSWmadA<4mCi?#%H6W>?gI z>3lr-dl`~yGx7cJ0Utir#vfcz;n#_*0qY0La{H<|67@}r3_GR3%H#$f!0ulD-liS3 z?BNgz!~69Cl6nr>dN}04m?#h8R0Cvz6sE*THhehT2`SOX6rsWvW^UuZv~NLju3$q$ zswN&LW8pgaj--BEz;PgjJu#B6f)Nh;+{|+a{8{FCd3J?PT$cjnp3k67`hRzH0395O ziXiT~l`>FLw7)snfvFhCa|NC;%yV-#ipdEeB;>#vI(%a$7{*OF16Yz? zsSg^ucH(+0KhM90F9E{n^-W_C*R4?n3>k_~1){vpknH`e$B=HcLpabf6eQx`8Ik4H1-6if7;gYF1SV5`1mB0c45E}OWr z02M`-kzxy~?@m&!$Xsaflh2v|wDgRC=c{d37(aFVa1p=@)4HQ(unQEp-6SEWmZ%FW z`$rYnW1-D(9khi*7R1^cGMIYMj+wxQ@*3yjw8Oc7B5WcVP=n8=4n=@=j(J3ZP(gNo z*yI@*70Wq>&Yta@bh1-6GLoZ#KP`m5kXb<@`avwq9^Ldh_U-pfq_`Iyl=Yf?SpbMJ z9>T1b%c3EAgz6P^=d;HPL~oc|l4Px<7M>jkXKTuM04_0W**L3_6CHKeuLlkE zw4l~43zEZQSfC(6l^@-yu#gNrFU?5940yo9OW-0%Ayh43_opTJ2#I{T2Dq9UO|&{A zBLVu-vk*3hs)LbmIQHsCJAf+)7=ibcyB^|_Hdl_l9+PaX8MH?M%XQK45$h?1yIDD@ z8j)1dU9>EOtfqHooVV`T;m3*eAg%#1^iljxE&h5x`ZHaCB$Ss{>6XCrNDG-Sp6aqL zza!1(_yMj)-ZQUCgOO|@L9e~5O`ThQ zWx$c?o1afnxGg*AwB!pco&+}oS6%AEjTTy}Y_p2_^cKS??d$QpdhPZyyJ-#44V=%h z|Hf+;2@j&DWbDqf4^xO~9=#0^3Stp)seJ54_+}yVmDfrZXho|Sh(Wf5^c@9!EOGK0 zOKUT9z4Vnn{ZL2n5w|aYkPibS0YDqEBwKhY&K1myvVWtWaQ^2>-?-2$>xV4xMpa-; zXbv&y(c6lJWJ@!y5`+kkkJrk;zNf7*C?CS8+5-6|z)M$)^lAw2Zsi7rP=?NW>3Mqb zYmAiWJ1HH!HD-^zEv!_ShH8V41Po>(sgDRbLhxqEsD{s=hxF9CUtTF$;N2l(D{GF6 z3cuJ*l0)BsRh;G}Rbdvw*IcGnrZ9P$C8e{rLSs6*?*g9+YD+{_5`6s2+nO?4<)TMy z@cVcNLO#@n!#d;76$%pwIi*#l4a-4Cp2;=>qO1wSQ@Q{NQ-%BAEnge=`o`Z{MY6Xrm_k?E-i86ss*rU$QeHGU}aSqFA&R=pvyiaBmNJFFCo%|Isb!1 zUuOhfpJrk*w*PP7_AXZP06pO+eP^`RXJ;M|zW9KV5@om%ss?$&lJ1dF(d2q6k(W5pgn##6bQVd?|Oi#C@Hcw5xfTzA zf`(7LNW~=6VM+aRFuel3%!&H!I;zJTFkn|*DbU2X6%E%1gy{bDm;kdm-~qF{z%&w8 zsmuxuZ4#PKy!d%{ln$nAGW={XA<9(1+^YAlgDgKg1aQ3(0T?k_GTv7PahKq;>&mvL zdwkdiN7(2c5iuEknHa@@By{NK>ByFGBu{2Q6TALeLVo^2sjDyL?UU! z|Ll%CLXLVwlh8B=hA1nWJ$__7vV$>E8FUK)d>RMcdnA6a$MA#!O}tM1-jL=sS7z)@0tRX2aM<- zRq7N=@5nQZ^R&BZvV_%Q!ZV(1pzm3wsW0X< ztgfBxp?q8AhNSb$1B+~PK-_9pCw)!YT;TKwX-EVmb+hYkDR=o7Tc{BmL?>9~2Orif zh$Albg~)OSyHthJgG}p(Ue!n=M?I$G-UnpOlE?9h?jEr3etaBhGwOe8`_cB1g)Ck7 zR@^HcB!K6q9WbW^3D(4-yVJ>}V}Vb<56?ior5Q)7p7X(5k3NPw>i#l$lr0}EcA8}0 zR!>mB`nSF=9lS!}5I*hv$(T|G$K!8PC$Xf;O;+j_1-x&b%>oeeLHRASQGT7$TmQXb zq8KEY&qN>qnk@A$bINKU)FQ8w0?))8B2c;Tw)quhPp)Nk^If7N?D`L6pGCkE*v>=4 zk4QqV+S=33-Jlb1rr*M&yJsX9l-9?XQ{bK4JEGyQL_kB6Ml5@Q=CbTY1l~aLw;BnWAmlMRwF!<&+5Yt1~Cg#-rqQAGvdB#QQg_sc0~R(a}UYE z<)7#wp)FIYD$n2Jl`U5^L~Y9OggUYu~Ol#Ov08X5AU&=lU#R=$Y?< z*Um~B@;OEF0rCx;VN5g=v+hx@Cf1?Wl1UIZSjZ4%Ain72SxjgeJ`X$_3&!1PdR8*I zaB?Kyb2l+X26Wq$r8W?n^yxc$dXb(3a9G#oPIo^2p5Rc`8}BnXM@4BvWRZ(x2xA@K z)RsXIa|~;>!rqCmeI+G3p8CO<-*c{K`J@x@Y#i`;XRp717tS^q{Fe*xcYs$kNRpZj zaq)`UkzV~ZT3KSK4Vem)Pyp^;F`^x#v=S*x>uJ~vy_GD3R4Mc{g69(hgPDdrcL5Ycfu`S|H)inYHBS9`sR!U0Xu5l zEEf!3X_o>Ju^L0cv{kOBPoZ5|{cWjRB=X%_;O~!7LN%}6Mi60+=m=Xgn2JYm zRc)XEh^qdwJc#JUEL{JQAX1J2|C|SYf8`LiXg&r|FF~3R0v(iw(Y%c|F|q(H=noxV z3zwxo;50%xb$E)B$a%HE`=?@IDEy7r!tlvY``%#G@UL7DE)N947-%2fg!?0-;_HeD zXPL32A_yto%RtynXTC*pXB?x8V$8AE;RkV6PC%y~QZn2Ks7U9;V4x4?CW zOC)TXQn#Ub$~_<-^#tVz^vM+@VJgH~2)=vDH5@biVIl@ebx$BENS%557$^r@BYLr@ zBCDNsH+}|$V+J#^jRh{ROhcR0iz3+{&EGm9zv3i;S4v^T;$)lv`#>Yw8ETm4^?8tw!TP}Z;?eKoit2lAl;iLEu-puT zvbmWUpD+brb{avsvtCR*%`&a#>Ia-olV&$M6_H4NO#X1Y$eUzu8lyWnC_uilQY}~b zo-tX0(fS;7G986@^WU)pPO>a6uxxbEQNxp=G42djSsQTah~Vz(MeUX zC;)lh(laI7a@32Sk6+GQR8I-^^K_vY-0D`KU!-3Y_77!kXdyBX&&LJStzy25_-`Uu z%mqwIf}fBN!+VbzD$>Ltp{q+b+PK47Rh+WS4BS~2g!cl2!lKrwwiLB)KhiaAe`bGr zOTi=F^mqhbn)Z~n*@DF5t4+mGkS7}q7NRC(_6Tb7khE33q2@;6jZWUYY|{J1mL% zj>3dx&e{cwiT|PA)k}-$_EUL4Bkv5;E%~eO?-hRar@o|sSmt_gDl9o{egtXqRyA&o z?)3qr1?dwk!lE|Yw04zzCdlNC5xJn&W*F0IfG^k|Oa-jMC!N&~J*nU7f^wqxd`2&U z3z}?0vOzuO3SHL_58V~SKMRB@(|9QHf9WXIQ==?XS#Q-S5lkEptWV*}AHz;EAE$cD z^-^w|r(2_C6K|FV3T~v~i{%=Ib^rD!w{%gf3E%pRIgt+1rCj48^-Gj8lcBKlH9P_-3 zO`p?Z#|51vb*f{i&Xo6Ep?FGhKROUG&dC|7ioaaDj^R4EPTBYv`%^V(Me(j`Ey?iX5p^jLOidq zDb7^HT5$ON@W%f$`woI$-K*l-JP@1IgZ-*M%T*Mn`?uj_B(SZ8e=B4LWBvwdLW08@ zMRj_<-cE3kra!-hP@QS*MOFYX;Oysn8o!4RVdTevf^95>APX5)L0CE_xz~{FW-9an zZruM=$=zay=uO-`BctZ*7WEAShF5v$5s}v96Q2&AC;Ss8xynSfD9!kr1wT|c*1{IW zqYNTPmh~|P768Om?^wv#5D`>ENT2?&d3lV@hD1J>k7_M?u&{OoP7$Mg+-K6EZ>kSI z)*Q|PYb%q_(JB_kr`Wm`2Rn8cw)*=T{f9=>-Z#y+Ujk_uCO+g(1|#$sPAB`!zY)Fi z6~LqM(s(TzemJ=D65QczVhbUkI7j?M@Ia*Ud@dLNr-eu%a<8@fXb>?xF4hQ8_^Vl= z^#bl~;H!tvmhS4vb2IJVXhbf;ec%|*|C_B7|7PR=TYN4MG_lNHcK|0*UglBO zFq{(X+rkm5gK)5kZ7`FN6NK{eWrU+h5nO1KPW~DVS3ic%I)L#qLj0WaL{h+8LJkEV zz{&XyDW3DMX@YWt2<#!gt@k#uWFdI+0l4)kz(T!yOg6~C2Xl;>FpN-z85piv3W?-; zFFw#M(m2xG*Rc)V?@_H6h6UZvSMMHWACe2Q^wE(<_Voy_@;x*TvQ+Fwn#f6p!Ukpm zEOK`KtQ_)2;#SmEU08$wmj^x`4yrlGOtjVlY5mT-2vqLq<4%KA#i|}BO54uZ^or`a zkdvfJ4Pu?R&7yMepu;fJ&2fp}#__vEtEcm~G3OS%R${~5-F!IuZ%&gAh1(xdM1ymJ z0P+nbj)ZMiDwWVgSqVYAALZP92}cj@<@+#))lU%AY`ELPbwjV-pN}iyZn9L^!_sn; zzh>JHaop@{Cr7R~_l=rC5pY%$DN#2o2T4^LJLaVN4jFrFs@1UZO$-)iYukvRCn!6> z4Z0%}^sjihUNFW~G<6(Vy)=^QQT}l*mwaI-VRc=?GkNyaG4M|`p~=I(mJslCF45Uv z(o^sH^lUc#8#C~>3_?z{I|U-No@A6m>>Hz)c2)|hB_Wgz@S*~!f% zk6bjsOT3t#4*&1fWs8Z$Dt1MrFw+;TCB2gPMys&6qNfyCxNbGkaW#;>p#pYX>XNY* z7N?6dI?5|eN%oHVK+?U#H_?nbFH4LnayMkEq`0D$HZnrqWs-Y$HI_YIrA9Buh~~gI zrv03g;Mr1zM|rEX9^Y3|;CiDpUVk8Jn>{V&Pg@FI5>H8dR!8^oV8|25}Y_* zxqBq$+5W9ygw3V_n@)UA{l4SCxU<s3o#m>;9A*Y2Gx_#(RZ+o*=ghp!pGgADplkB%-hbxiEN%p zTWSy#i?m>w#tHEOl#f=(cC$PlnTqWLhA@E{K8I=e$jZZMNa)s*;A5nhJ8U!qN@aeb zLp+lNPNc0+<2;CK@i%kE&rMM7Wlk{?)-KK=V&6s{;9L|DAyU!3`cKy;&2SGxDax&V=Vd8w#mXMNqEA-VWh50^$j}#+;^=geY! z98dm&G>JH-e1HoL-dVkd5I6i94gKTJ%2QY34__lqoX2sLGHudGfR@VR;3HD7#%DLa z{o~(IBaxr{&=Y_xGm2;;ru-DkbY27~FQLLe{}gRRddL^vCaX+;T~0FAL5f%PV5pAJ zcqw;!=0G821nt9Vr=Ph1pDsS&G(!6yd1{3sPE)(Y;0bp4qeLBsI0(cy&Dhz`U1X1g z!E9@?k^=A_3Jb$lA486#mIx?Wlcq6xs6w@&j=!AgPlAtadMyw^esl}@~ literal 0 HcmV?d00001 diff --git a/static/images/ui/comment.png b/static/images/ui/comment.png new file mode 100644 index 0000000000000000000000000000000000000000..54f3ad364209c8ba2a76b833ab82f77c7551ab62 GIT binary patch literal 15901 zcmbt*gYnG^bI&>V+ypZdJ!S?z1`r6u4A<8-2Z12KBLqZ8 z1AP1qA3Xv-sDf|9E$M)NQFQm?f$#Kz`gemtAeOGP|KKbs7JlGI-bXsNk1PT_9)-C) zbO(ing~@vP`vkkW1iH%xJoGHs(%=JuE`i|Mw=Ba8H)q3IM0N5=#O-zt=ks_bh!)LL zFgStXvcb8DcwstC1)QV@8`Ec3?g`XqUFYxk8nC^!*_S$q2bB&RZ1uu(4JGW-@$uWO zA1*BiL)RR}90WRwS0jpfADI+4AN{=+5E2%`rH_We|G)l5Ewx%X(qI*(WspBm3th_b zMQ6v3M=-cK?>NK}8b#Z3(H8Qe`rH8s1DazU9Lgwz!3|tg2+X)U7o7+;+^Y~;JXZu9 z&F7{@xa-Uo$3x~?48w+wmC3=;G#{@AQWKvd4#TO!EwYl+VDQsv{_wO9-H1aHYn$jL zxcPex#$3~gZVZnT?K3Iw3>ZBBrd9X62@(cZz7s-h<^VuEhJ~2^tNKKmrcZ-OWX$|; zl&i|{f1^6<)+d`(`e@6BPuvJ~FdCLsvh_cZge@;!ZfpE2?~(wII@-}O7#pD&p|)+g2wIY58i1@8Ss zjE7Rxpa#~1_KMGyu}|||Wg@ZSY_QN03~V$&8eAh5^*TlP(QUDuiAQirUj_nn=hQJJ z^ytJy=g<>yqZBKimU! zakRx2;oAo0s=zy_G{JIlEl<-=gDA$iX5t55CQ&2~!p!Z+d*(SItpI`FRMH|w=ga9# zFWDP-9qE(piIL95x57S^m{i&k1;KN+-buZxOogMKDU01ES)Q}(Rgm6u*6IDxpeCUh zI*p)LrZ>%VM(atb=V-z(@47-w@AJ8U-@a*$R1dwWg}Qs>FHDJ@XtD)GZ z#7%Kr0;GO3e4#gy$Fr}wUPYu@;^nckPvi{4h5uGPg)3(JCCLY(bB-w{*mbM}+qG?{ zppN7#RBiNn`!)jewBy^0yXm7Q?p%~qXd_aJBcQq81Pj9Pu!SrODTg*QiP)$s(w! zHwqU_iXf_~bspG)*zW`W_rX^ewUw`Az%jZlIZE%J?3XHPUqyD@EZSp95kIlj_kLd3jVZ5ri5%^wuwVG2T4rNr z4F1d+&Qo_w`Mc!UecVl4xuv>4E(fKP15>sW0Bmwr4P22#p$m$mwcC`+wEHjwCRa3! zTLuJoTE#|K{-kdyd^{(cK3c5CMJf992-1I{(h_5I1P!8J$lG_2^wsnK1KOtD zDm^j5zC@Luhba%pFI2oeLzsDqR7|9ZVE3Wh2`q;leMATkh9bjLXIe!26 z+wc9zpT}k7>nHX**MB_Z2RHvmVF6ghWE&OuMR%T0P*el&2EAdds4>6c@34|bN$mf` zPGHyAt> z9-Ld{^-!||^Q4mv1Em%cQ%a6VRK)qsW4i9E&p(Ahq{#_>G#e}%RMkb-a+>mKPE^-0 zOgwDdDrigAZQ<`>$C4XVwkKnfdT4UcmtuA?f%MGzn37}vY5F=+m3tBEpy+1K;$l|Q z&5>|xQTxtj4rgLc&j*e`^|g*m1EgLNRrJo$6)#5T9Ca`^;^RoRM$9=6BMtrLa*ynF zSMIfdy^wkU#ir`Juyk?ZI%BYq{KpY){d;p)aK8N#@itI?>xsZxPsSwpGqysp=AHWY;bRqVNC$7e+dvGi?}iB#tV~f& z@=a#SJAHZ7xxDq9zHxIFY7e#7%YD+|RYZ3ZOQ22)QE~}-b4cGL>gDBG_Y1>X8ij4?Zrh?{0s^3hY=!02c-@RQ8>6A1K zB=v^y^W!Gi*(D!SnfELk#u`poZ&l! zU8z{57BRp_947@Be%Ux}$IxUBN{-esOYY-+54P+?d)<#txl$GTF|)6p(H(p>|FGAW z7@RXzW73UDeu?bHege=u_F+ukcE3`NobnH64$cu&a6&sVUM8XE<3}qwYU6m!d_7Nv^ctX#`A%oY`*@v7VuE#;pctVJzxkT00TnWU_uuB5 zB{O=NiaQI^MEXXykxaTHCOQQrni{k3Y#+A`3(xLuy6XwZEKE$M;+^0B884{!tk&rYd2xqCFDY16PrtA{|t4z{z>rBEStL`QHoafOFhV3vl8H9 zya8~T!XxDByb}(`hdR2pKO{>HKX(0!@`?)P*?B{}T<5ma&hCl8Pwy3HdCDjo*5K!V zmY85~l*o`pu%8Y48pmU9&aiwgJIb_KcUzLf*9TG8-CGynSkvqJxaP91eh`~!w*}y! zfC!*Oj=T!3f(_R1tB7foaW(#2A9tH#vDGF+iiB^ZhtGFS<&zed;{ZNmP7aBPVa9g> z;?4mhJd^_VmPus`ZYKK2N6-CLdX@}CJQ2QGfe&wY;(7CH367vkZYF+fv(lkVdd_80x@HiZ5 z@ht*jf_rw`3UG zdy-2@*MiiEykq4WubVk0in>uxth1Hli{abDqANCC=K^KAryEg64r6Kkqkr-97CPcs zyc1eEp1(U9z9&&@xv~6Pk{dBuWcD|4r6u!dRyEZ@1owTcT-yCdHURE%2L2}JT(ihP z$MBVR->_Po0mG-3&G`#(wulsvT-D{_nD4?h7Q2h<7TJ;$O#q6nI8IHPTzaI~9k!(C zyxXr-G+EOnaACVbegX(rtIT?rpA5eak6ig#U!gj7%~*giQL9KpQ}$wrm1Os0k8?f` zGn}^F-Qt)gxdZCiT44GHAKFO=qaOh!JALuRhyK1ZR^Dc= z@ROG!q16$P)ORq>bXYU^sp~zfSvQHX!rQNXL$gTHpSG*ZIQ$nSXij^^%G>+vUZ$yLE9Xr9?tTFc^xPGlpZ z%4W8Z6J4+b=l5&NmfaOh-~+QZW6C|iY97{epzof@kV}6R_X<#D zi(DYO;lDh7Kf{!kq)M-FweTk)Qd;t8I4KK*+Zc;3pIYdaahAU8uCSwe-^0ubCN@>- ztr^P%*#7hQi5sGKxy>&Q3vZGN!=S~6E$s~(x5G6eUK(v980%PFgqrUS%z|?Th*O$k z1H$dJB95P<8>Ek#MdjOZK6>v0XmKa;6GLK!x8TNEJL5onrALi;Low19A)KBSHECB=g7;CxPKLiLgEE21twlO{V)={5r34> ziVYQAQei6O&6}nRyiea++H}2pnrHXQb4&5(^2Aqv)Zc9nR!T`$k>n_J`y5Dwn2{<4 zgR(2_1rLAiEbbz5QtED`3C#g4y*&= z{m*d(MNsFv1xAa~+Ye?3dG~ zfcQjFvz$bG(8hGg9dgNwbxIU9VR-o@FD&*{p)+qfIqr`-u|+x zv(e0zo-h|^HJZ2@C|p~NtmPw4QGaW=JfDhm0w0S`&A~d6MOt)mOmb8;qSDcyGyjvA zEF{D`@n(q1T(UQQfYxEF4Z)^n4x6CXqAiA!9bQI$_hC}_k6hE>;b(H?;hzhpJSr+QcDIpE7AIe4q_jFDs!eSb z6~hz+uVjPe&MV%QDY8DbZ&+Fuk2o$ZXbpX ze&eJ#I~54ckA{j~c-6{yq8()K^}cophPT%6#lO;19!`qYB#_+p%yG<1(f2?5a#L6U z=dC$Y=7iq*#n|pC4{6y;e-4Er00FOwKZq21K zX>FzWiS!uI;H7$|s|owFyD4|m)&QfZAjvq@)l55cf0z$l-MN$y$Ir9?V7 ztJEpfjXz-G5Idi5YP++;hZF0}eIlFBqM?A_vne&ueyPHI6*{T;W8dHO!^_Hz+qNTN zFHzHlTDBtx4XA0$ZgLX79V2H`T*J5G#i`lB4YsHw*$`)hl27x)tUkEm#aSdiuv%ar+Wdelr%T}GXFwm`zXQ4i^z6Pa(u*tzJ^qf9F$g(S)g5Tf#iyK;Q@Jbqp> zzbMOuhzJZwB*2nrQZ^LSfSI&(tn~zw)sqQ59S&thP5vFKTFOXoke4 zO?Dpiv}GSS;Ii0iH5sl7-I4Xq88tlGZ!17Z6CFI=W!63m21a!HRep)lw-4Ak9Vx%O# zJ+8Pv*k?}>cZGxR>i*W&FFK4|spY$tOM()@x|nYk7@Tl+_be_7Ij@3mJg;vPx^>Z0cjZ-R z9m(#*N=Xarl%RRe?IPoe`I7_Ho|J-E@xPQi8a>h@C(hSD;*P7XpXHgrDq(BesGU+n zlH!77>)^2mF;-6wRK!x8%zV|>CvUwG!KN~{)lPN)v!!4JkU*Ts#C^wLz-yTEJ(I+; z8=4tK6Jp`R?&16MA!h>4M}*vCdZ5G4#xgR&-UID=EEs5COxd@@rBQ8HWEC*_YURH0 zbZ-)#;l9^C`l7^@Oil9Lf*qOlblz}i%9ZC>i+hWhqqSG!vq>RGKo`2S7AN__X$eZV zO%+3iqu5+pC$l2d7UKG&J!VROdrGWY1@7y-?YOhD7Yb|2STOl_+5DWi6_}tQY-dmbk6&clYSgvUJ@?bXBdf9XEw9F<_Nj8 z@EkTqY^0jxZt;JD*tP1EeqlZvzEXQ@mZtD_?(?OF!B$IezuR(`yXh#xM4#KY_y;UF zI);-`AJ+zoXf<;-=>!TakNn!YLEe8pFMK*@{eNK^9@;_rL+SV>HK zmrn+I6I0i#voH0QKH62>^X*(do*Z6Mmhuhr8A-KNdBN#IRP9fEPA^qhquR6j>wE^X znL}51W$v|Gw>i#zU^!C%iC>5K!(!!MzW7?IlSi$a@AdLcp1PEdY}|;q>m()Syyp9g z3m0`a82qeyM1T_vPi42J`k*JL6EvRZ4kFr+S28qtb=T`i{H?AMgrFWlY|(5PwsmR# zj*jsD90emjiSVlz2->|o>Q^1_^1_*@y3U3X)ktxW8Wtan$&6fGVkpN%NsDhNOmPAn zO%!OuWtEBdI;A69!whO#RAP9VhG@T0TF>hy{@$4(>qfiL(-&P$$}91R4>ZNYoDF=1 znL}@FQF;G11x~owNjx}<){Ng@Wr6ZnUMt5PcQLjyGs?|D-NaDPGdhb#-S!B>zm4(6 z6Eo@RV2P2>L64or?6zSi;SA$DZ$ub0Y1>}oe5O~nX6Q%%a{vemw-pfhZNj(_w{inK zsjhxXR6SO${5)KLj&%LCI9b&WUZ*SHO$K^f-z93eY8ZrV> z#+o~SrPHLgfiMXUZ>v-X?Z#f0^vYX5%P#^F*HCQ7;^yQ_-`%l)`n~(+GN%g;sR``P z-uH|CfO0Z(R})=mam30EkhHMIvr7Lne^KBq=_0Y$czOFEP@xX7-lZyf0alUWKyz|# zQYNT_A7Yb}wr%?lYaJv_?N7rI^sk@sC~~!2by1|yRy$nD)Axa5wnTa- z!#PPBb$6A&S3b2uiqKgI=d>dPFEQy_sh;It4oYz!dQT2H3t_)!=`%r&6;W?IX(n{AkEm zR4dscYX1Q8hh=A_*yL}IxJ5A@(`Ex=weZt(mUSt_I*tYx8{N0)%(LJ!wW>ZpFTx~k z`A>9)XR#Ea?+StTn1E083yz^1{NyJjcy#{( zK@a~O8-}zK>uXMI5tytU<*xES+ijEm!~&IwytLOb6bLy>{`;m!$!EVhmW3N+ex%&Fm`4`L2l{N99@t|mZ;d2Ow-ZOC8ZmWgp0>LF zMEALMc!nwm&1N?VMEKU{w?yFV%zgSP#w+_=$7mQREQK6>(S_wn#9Int_#TSo>%F)2 z3NANL$?vvL|LW1_oM4Qu+Kw>;C2)OBL_|)`-dy`^9DLbANya>fxUYE<^$=1YEm`{d@vZtpZHC7u7`>+1)8&9r2F za_8iJc$$39&7VbyW*Wu22iFkH{s??(#xFNNlG}gl>zN>sK+0J!Ksx_*r68@~0`2qs zX646=ehKcVFVFb*Prcq5YwR8jI(45Gwzw_3x%pk$AL%Tru)E8lgj^&x-K@Nt>cPxz zb?+=j!Efly5FgGa^3U9O7>AL5o2A?+LlEh|i)m#Hk_kMYDi~h5b+)9ldII9r{hMrK z-1Kz(H{3;)8&X0+CfzAFF+m&zUFV0f(eL;F)h@Dz1`^amQvksE)XD!&v6b#08+t;a zCgK_~IiLH+6>4A??zi&9n#cT8!G|(7nmat#V>+5odR(m^9eaBj`#zJQALj3kI)64F z_u}H`IY(S)rX<-rArZqg`{j4Q-xW4~Ua+I(Ly-bk=1v$RLJT2PqqaqJgVmR#oo7t! zY+n7l?D&+@WFbz%8-Cl{wraMiA7xzjO4YwP6%Hhdq681L2#T1C!;$2`cCWXw*~%@%n14Q#qEdH|Yqc3vc&Z{U5ddoZRA2eVpf7+>+>PNBRJlXieBM&!y-dCWi zpn_B}`uWQj-P~je>bJijcx(F0zx*RU{)1DqDdt9A%bIO%O1R&I3}i?kxhRBQQ+S$# zyLYX-3{{a}(V8RAKN^Cfe_TT&%Xhl%PCu_VyHFWZvtGX5J&McAh#eDA2@LM?*$Y2_ zcqaGkl(DPPnu5j!PlLr4^qQMDws*MCWluO5*bd<4e&lLheVglKah;8jpCF+ zTW?6BsJmp&(dR&so9}{R^CC$?y-*0|0z@_Ab|lS&$_qXDG^X0Lr&BRe7_hgV5+R%N&yi zkaZf*o;1#$>d&5xLP6O|{8zy(EVlYbf>+*BS_H2$hReuDykV6w=fAOAxj$z6kD$$9 z5Z?iwj~9}1)_Kr76CPzx<9mJXxs92f=C0!YSol9EyTST1sB7sbnln9JL4tK-;eyU! zKk}f(c2)g9aXNArmAAT;gDxK;>XONLSLcyQ!Nr@O2zljGHg5k!Vo~Vzok{X>rfbPQ z(Hz&M5c?H0zmY@Mlu~E^FT_QKUOxZ==e0yhSD{H#>OFxSPm~U8ggU+NJJZeQt_z=o z%-#R8~R5Vj3TXluh{6KnKeJ%4hMNJ%^(~w*z3o4O}K4 z0OyU2UH0V4xR-s1yz%qWG4dyLb)I4N=&c_YhH?oYi}X>Ls~`EGVV^vN?OdpM+L&QzC8)Qn`>g?bDP)in=LsAdZC3)>O(=Lv+;7@pQqTAdEzJeT zIl=?v#ic9t0AL?I09JHp`2B1w-X^1i6uBa&oFf3LfQCXYegR%#4*3fUa`a&pc;YPU zG)x6Jdbe_%nMY}FBlOb8$&M0-qe(ErJaQ78cF&tVkbaHfl_%N!^V!#RnKMfpA#H&4 zWj=_lWvj-7b+_^?yCb~hLqR3nM|55cxO%QthfGiM2<{9>2^yY8f`kL7hdfJp7|R!c zAnrGGqQECgb>6^lzyWmP8Ph%vWNTNnsvu2MjT#ZswjtLIOy*YjzTf?pzFP=)$rXqWuME=6b0^>T@BiZUuX_c-`UK3lJaoPu9M zWRUR%19Dua{KM{wQB#XVim&r6yhieV@0U@%g;1tsa_KuYdj?)e4Y(*%olPRH6crn2 zvtn}p+Go%z=nrgWAlX6W^KH$j7gFT38oL^kT%oos{m#iNO|lQg#PQJa*74`xthW<2f9(04&K0mNvV7FOIVSR)sTg?od#y%9k78fk&dpGdwe|ZAvQJY7SI~qC&qUUK;xOwup3`bsbsEn@3|nDm(DPcG zW2C8{&sebC*yYxYH1AjI(_rJa4NTiptQS{X>eQ-vE;n)z9*zuW6~84NTtHdG z^Pl$izRSsN>S}NCNP%1wqkvt{hs2M*L|P$-v(h|)()q3_R$z%T_~NK13a7tb9#}9X z&w)!+p_eeiB4dbLn3gjTl=Pbn^c6j?bU=rsTvG zoXSoJNSDrMhE?$%g2p9c^SMF4CyNWW7CZ=8NXq*ccep9H)WB8HUJz?$?sLG1ds&c{ z7F8S!j$3$4g9+9f`vdDBiUB-^!NA!_FBCvac|TpIhYJVCComTz`kN`IdIo#Ym%Dd|@_x(DzQm3hqZ z#hL4h7mqI-y}lCA^NAn%o?%-DF6DMMwwNGSM4MVa`}M(47BUHWS0}Wnq(f(n@FwZE zbk!SobEqGK^rfw&2%*K{55Isj@B=ziZhc7`OIlpV6S=nL#B4b8UuHbxZ$|5#iy@m- z(o}QT{+mN{ic~@a9l!7t+35_FJo}YMI{u6Jz1zM%P7hS74T@V04bA|JzVMKJxMVW; zRwBE2MowwMF=~$>7r{3mM!c5-;9lAxpz%u@Z`J#fRzN=1KNKr&HHpOhC=3SRzSBu% zE^mMe>3tP$4xvX9*Fm5QHz}I-hPH>N@QNf8@s3wpzj}{-8KRhNGjXS`YLcH>n<8OZ zmp(y31PWcwj@VHzEA)BhEMG-z=vxwpay#jp!JHcum(-={a*ksaa?H{JfWzRlAZJ4y zCbm`T%a@uU>CvbV6Nw0uRZohW^(m>GC7xRF7g` z+BQ?#6DdZd-beIKZsnu8QLYml@d*RSxbp}T2s}b`8>GKJUz>2uE(h)-&Qp6up(acEX0w>SY>ze#a#dNUNUDzK+d1{yUW9d>#zzSL@6;M>(B56vehxW ze4GCx(#*vXOc(s5IzRM4UosECjDse~wW)$8L?=ytv^TS|6@jMBKs8*_RLyRHJ-5D^B|6n-D9iH7=u0k$TxVvY4mxr8W zhX;%L^S`j^*xguTI+3cLwj?o~{$e51p@iPMsZcw-#tDt~ z`f33>C!6e_qfRf8t{!U&aT1Z{k%liyM5)&?$AQ3eNe9|vQ3sH1A&s$z!rTbBDBm9j z>=xDqTZ1*~yuObCm78r3Y!-v&iq+{Wkk66B;9_yJ+RRRBH%N(d=e_+2y z1O=)R>~QyS_MJ1QXvtCu?4a;Wj!9Ua5RII23_FgmF^FoVz=Pv{C9!O z0Ru)zG|USGM8xp*OF*m)3rPcFXS7-$3(yBG07NM05*8r3ft%9;dpoQm4)9Ot(Odt& z;13>dQNcpy?&AV+^3FESFWc7i5zTZh)TC>H!hyzfk4E?t=-`P8{4Iqo^Fm+W33G!5 zX`a2y>Gb2{J2ku$GR=n0cT)+xC@&HwJOVNSrS!k-ddM&l2+031m&%@MBTb#H0+|CY zUp8^IT;SWfbQ6B94U&Y(|6}n1M>Pqg2^SoTfI3^JH40pne3n44BvXi%tD9(GF9hbc zjC&j7{Rybk#RERooaJD}#_-q zs~nP@Iem`6-sz3}4CaSad3@JrSOKZB4UsSg*K2Kc-c#41B<61<0A+kTM?F5f5su$IK6iZ2sPP#Zm8oEKXy;2^s< zFA}G!K>H#_Ff&;8$P?vsQMh+*9*WQYL(H~7B(?MTaO^@3+msG}8;o1xsIMk}&W+GgkyuIo9Z zUP4alQ*2W`yj|Sowg@T$LKg63%7l4^;FM5PxeenT>N*d#u&Es4Dv%l7^Pa#W=MezS zXdfLNaopZCan*&xQ$VXJTd4cr4A7Qtk!)MTId?1qz#e5LBwkb`gF8$Ea>5%fLw(T( z@C+;CRF1SKPj}XTL!5^j_yRAlZCg~IPd&H7a+PWFRrRy8YZ7;{Qb2=_=Iz#x!SsQI zOW(L!H^?fuE=aA^Is*=Z^TzRYqQA0&c9DnJw_Gd2aP#3SotHY4>6-ghsXbDAEP(#7 z+yT2-Io6#gZw_WPX`--}{dK${vU^EWEcqc`*IBjy;9jRy@64w1i{(XI#R#e8RQmX2cU13r;3|&b zyNl!0DIgQ^Sv79mV4!FzI?-^!Do%y3XQ!SjoH0+}cFRe2r03tpMiXo~)6{+L1;#*@ zh28JbFL)ysx%=-viBi?*c=5RVEz?z8tx+U9&Fb=;#A(+@Y|Zipjg>P45X}6s96epn zxD$QCxOUn`v#I#PafWKcH=F>dBwuia@8R>md$Q)60Gd!x1 z9%`6;)Gh3s`)I%7R>2GZ9)SfbPNy@|19W|rpa5FRw;ynMc(9(s<|=ReuE zr$MwXOb%6^!VX;F%q|jLYP0hW2CW^yW%VAU72(dxQ{Le3S)$sw?$k=4IbJ^tU zOeD3y>xVbai_=TavxV!rmn31p(`Fq|`UB74=7|T6_OwyS^71j!-fxD6IfpK3n6!NV zU2Ml8wru-SUfweqxPfDM(&6-)W>=~iXtzwl76gmG(FGbKw-Y%{R!_{SX(IsNx zl0i>(x~p{$mC9wn9k+7zZUe44_x5E@ouol;pgA~PDK=Q5nN-ZIQCdj@1S4K7-HhKK z1GF0a=u$_stVnXyMR)G{z~IT;jfAw+7kk@lnW|b-uDGlHd5aF{QS)YtHiB=i(7c%1 zi=DE)Qz@5Hz#Gy$*3*e}}mFrde0*_Fy(+e?9hkYC~=9JSduqpC8{SJ{WDa0cr>b(99 z+#PiDvb*2cJk%titsvX2|(LTl_$seC)u|oM3TH0aHs5>y&sV^i9GKG6qgDHf@50&Di|80 z8sK6DtlME|t6%a_t+;e+!6(9TZZS-vAnCFrHncx2Age!WFaS*0>AxooA7OA^c|R|z z)nRp)`s&k%iIixpQk73444!(xlgQHmbcxwL<;8AaE+;wZHLsec!N$6%IpsV|zo!NK zYJ&McEJ?se;poSdb^P(z zKnlTj{-2QVXCgS|d?SJ0QYJm9A>4_S0}80B6F|fEHtiF6T0HOfsg}aA^qIlqnu1qf zeJayOU&)=fXzSa|5}LOxgL;~o5HT71H-v=XFMsSy+{@8vYpOW-s0tdQ3YBu1wgJh3 z{AFFH(IpJZAN%%vVEB((-x}TxWyETln-D2n3r+FePUw5DHU*Hf4&X^16146v{WMvH z5QY1~-XsGze~2j|wQrpQa*w{ozRe6CrX*e2^^S*Cd>twaUzpa^>d?7h+%l5>i6BQa zXX&C2TxeX8PUOL^-tP-Lml0cQHguO_-zkcKn;RZ-VoB>7G|nM7%YKQGFpwOT>_5r! zA4Jl=N;U=i(w$IEwxax;3@($Kv+Mle=ETXh|L=0sogPpAZ6d@qgn^vjOXzV1lD7iEfEJy}(tm zFdZ!v#Gyx@LXDM@^htnKSWn%ctNZ2#vIck1w>6;rG(l~gBtQD;Y?$)RX?2i-8|Yyu zXdE0vx8cy)6abU{9c=Y)Q2T7q2K0~_G6Ny;))~`JcOV0O7PrpS=AAZ^(>gHzK?-CF z9V#!xQ$#wS+yVqQ|Dz5v{salUMDTGwWp9es2$U!2|D$FGP&00Y1YRLPoj-O>JE(oy zoO=R9X(658I1xr$bqqUFy9yXR`T;6K^xvy~f>bS6@gJ*T1FpVR;CbMjKWFMfr?xIn z=9$_UKeR&w5nVnLhS}Yd(>I`#?SN8sa>oyz{gW-BDGaog6uxPJb|>1J!ZcQzL+Gb( z6ccji+eLlt&?PHK!2W8Uv* zn-_*iW14wpKqJG;B~n-fWR7~HQ?rJ_h^C2(g*L_{H?$dWcieRz{Q@Fz^MX^xWzHqG zeyM$_9#uHS_6-dFzDX@me2jBlQSE%M*t`fpNPDp4W~-|ZVO=rw84T{Az}xcVM5lc| z97(1X00M9N4LXh6WPC?Mi{BL+I6AX$y3YwGo|qJyZ0OStB$N9NJ3L4Ac&5(3-Dp?^ zRR&$-@v%U=xELHP{6BT&E;cI81zT0EjK-DpB z3S+Ea<%2>X?VYE=!m;fAGA9SnUfhQcG;FND30qMjcd|?0%s*an=0v>ArlG~6TjN-E zTn?5W$$NG&c!c!qq4<9w3*`0K>$;Q~UR%~&l^#s=xt0g5S7}?S@~?=(*NX*^_%i4p u;Cxs1H7Rw;Q1AcilJo!WNPognpteE0Qd#nqIlxtJ5M0MZyXLm@lm7!90qnZ~ literal 0 HcmV?d00001 diff --git a/static/images/ui/overtime-icon.png b/static/images/ui/overtime-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..30e15900adf6876792e284541ac6880db7f2775e GIT binary patch literal 26567 zcmb4qbzD?m(Dw%2AtkkROLs0UNT`4y-5}k~?t+wbtE3{Rgml-6C?z4%xe|hebjQBe z-}Aih|L=ZS7VgfRnKNdmL5(a}w z)s(!2b#=v?TJJ=?6@H=2D9lf!lgr-8tCN2B9W@L`m1Lo3IQf(S(F z-jnQJcv{Dvgf|KMp<;Ben{!bkh24IrCrC4Nej&nOk55?WVHsHbjt6NJ8YKdXf+<%( zw?WilxB8oWt6{g@lj--{bvlS1;1=SQfkuzB_!P0bt~O$0*}66q4f3`i9C#=mEb~ee z{SD2HzEs3|uva4(z36Bm2B6fFtiG_@+x87FXC+s-A)*IF0FjqN2B4}?LSZ_4@02A< zKJnL4yu?w!SyGI)sv9y5M({L| zMoICIAd8v*s4yL$YH;5uA}IlirSG_&nn|c_WP1Wf0z8irPi5?065bNg&hk-EV~1~4 zPcUT*RSTqr=;f;?`V{Z}jWAM)&qTn46x<~r5a9VhkcbRJ4k2~Zf8s6vQv(86W=kEv z2I|ebuW$1O7~=Ily*HaT<%$-?Hx)x-;Op`ckd6789+uZ`oP1o2VV1w8a>EOUi-=zr zu$b{ISmv$_Q$ijq&e8+iTY_s=?=UAJ_?QIX9%DOpZ_fQlP7wo&te&4}FO)R}JU;3L zU>!p_0XE&MKK6|xD538Wdq!ZhH13|ijgknXSx({XQ4p=~QiLb<2|11?TRK@B+plE& zqo?J+exPM+)(g8ku_+q~-uQL=`{rwMxbXB|QpT))kc}_~8ZU0${(PYTwIg~~HWX1d zijDke5F(k2ULX6sg7-PtM#y2(X}1tjJ$bY|9}|NvLiweG)G3`|yf1+0%P^&Wb-Wzs zFj>Jd%4YVLUh!#jw=Eq?+wDzfd`4@cPa_5c;}NRaAtdK!2CoXubb-Y5 zmC{^_{0##emzxwq?}3yEcU0FX`oG$6-hRPH6>-e-xAtjPI7)d-)zMJlzzyY3LH9Is zRQ!~^^Z3ZwyR!yWnQmV{P30D_uN{&0+h+CfvilN;asr3yUAwImS`qt zv)Y75FyJ$xf>)H)ZfmEtLm&s42~}k||};VFMQRc=MQ99|KIznZyA5Cs!eOOxK(=*MEVg%Z=& zZ^+rqDdA}^Q2m4GYChqVue$xuEGDBlaN&mZ(6saG%mHliwh$JguX%`%gOV;uhp9`m zZ=CrplXtH3tyz(7Ou+~yI%r4vC<6RsEGjg-Z!H6h~C?>5JSeA>ur!>Tl*F!0W zHCf`f%RF5u?(~}Wx{3s)y%C@&;UtKXdK=V=kP2Z@80FASx2J9vC(v;s@D|($T_hnx z`a9{#n&4x2J1I<*g9kOOtg9y~41C!WVUrI_oC z!_^d@)60>>sjqkfL2hfJ z7L^gKtiqyxD#gL%O0hY^d@c||f*MLNoQE6UPx-8DzO06R*vp8ZFs&EPI3AoQcnR)c zP4K11f&Y2{y7&2vO%(TBBtuS;Aj-d^KtaC)0iN=8v8KQg^5qpF?T+iQz>u($dQk+6 zfoAQF^oJCw6UG^E;P52K$mczH4Z%Qy(&rK%IE7#~C7KT{7*2{Jj;CjV8{)KsQdfeG ztfB6^<8?5CyS9)+2YE`*5w+%2a)o3HKS;d#fSbpXss2-<-U{b0MU@2%8{UKq5d%OEof){mCK(4EtR{o=zR@G&tc5pT8)KM=#?fow=F-YA~bT zYlo?IkuVu>o)bg`_PI&gh}C31&WplJAS@P4!5iVKqF&0@UMU{pneI;=X~+*1>fnF*@0Mre{+}{)~A)c7pFjE6ZR^qPZte733_axM)pfy(4hZFvBFnbS}1!k72uh+n8#!mA(}| z7P#|Vu%N81wG2k41Xq$$8Bs-$x8Tmk4k#YvSQX;jCNZHDDNI`jl*o5xm|Aihrmt{q zq^t38;e<>N<_0jn4hAy&_P90%4l8X`!3o!yuFN`g83~6Lm6WPeowGWMt-S(E)BCfYULRU-#W@A~mr8xJ7txUYydL76H9*8Q= zAyGM9eY~iWi7Hrp`m@j-rSR?(5BGJ(Ahot(-WLMpsH{rxg65oC2rXr{#0Lg7%D8GH z>EVFh3W%$!sT=Gsh6?WD?(wkSxwa2x4!2{`M_W?;}@9 zdh^R6%8h}A%*S_@4+ZxrtH|!OzjBJ2y+j23-!$LNi{ElkDT=rhg0<1Ftf`$3 zOFB$$ar2+cwBinnQxG~9ZhgRrqq#k+2qC!U>G#m1((xRTRU(w)HhYh)} zwYXIKTm&`B>8UAZjQZ6dvO5`e`zgjjbw|kU;pqBN3{Yq8!L;TC3dpM5<}NjQry)C>j2#!Ti`?ic9XhdEEQ61nJVf@sSkH%19UETXq-_<9A3CJ} zM|&HN4U2_L8vlvxEwyw{Qs zxDJ(P%=t#y?-%QsAW)U23D@=(I<5i!sxHF%(5fSi_7BaKGZk^ zGxR=fbxbYQAp9_?w-6FIHxj5>U|wY%APZ1y!;~~yvtGW;aR7E6 z*T3C*%=45Dlx}Qfra914M;n7asjLwdP9=mf%V9OlE3`=6B(^8$OWX;Hoa39x3$*!E zDX|&hQ)LZjqbyQw>Q{bZH7VBOQGqs0rzjyS*b>R*Vc<9}d9C0mSXs@)!|uMaGBjPq zY`OG$Hwsr#j$^n=1l&S?6&Z;`zX#0xTN2J~>@Emcb4Bs$9D=wmSVx8gGLh9Fc?z$K z(t6o_YxMH{+k^68#B$V>>2q>C=d7;hr&~EE4dip2)-Hg?h@EI;wr>pd!&J zZ$`N5wh=Q0r?W?I!ZFKX>ig1c1T>D*Eh0eM5ocl04PF&h%!dc+{t~F7WboiN8kzd= z_tI{CzfS{mMx#>y*WcQMbAA2FBRPW8?0miRuZ%R&8WZ9K#%VA2?36FOe$Pc6&LkWz zeWQiYu{&qsm$`)+5-@B3O(|mA=<`eMUJ_$H7psnO@YH(50Cou*tT$7J`uJx}^hf3gnKBQ0X5PI5o?NZv2^gPM4FOz4rX8B%zs`?s9)O4-X3XYTH zj1yb!(tP@=b|&w~Szo$+rMWO`Nta}}_VH)=e&v*EoT&%%3+xQ3`G1;shFsNE%4`TV z?c6-NAUnHrQDXF|&y|L6&>fV)ZYxbDxE|JcRNc3#4h*u>FAGuh^}FBNX1ZPmK*>QR zz`U|_@%O`a@SgB^zjPxW#26krZ@1&l@C2v{XwriM-SMtpcZ^i-w%o0eJth2ntD1jF zm{uZf5?xN5;JB=xq{;H4l_fqAsZ3>?ovT3)I(3KSYbmK=xE#XX7R=yY8U0xH@qimL z?e$1mY`%|JcXl>7l+(4;RNvZ86#%RRl|NY&c{&K>~=dRAZJ$;Ee`o zj~55pcyZRGpF#gJVCd(L6dH0wK;gi>y&dZ}tWs;*=>Rf_yD1_F>U%8yLDu?<=a_{Q# zN7+R&K4{5vrQWvm=2rpCb5DYLK>b7f@%4qJ^*#tkmO49=AWb_)v6jSBg`P#)%D4i_ zTcX`xGIhB7yj|4T=muwsQlozrl>BOu|0ezf!YoX0hoi-FWiARPD*&^#t*Yz|)aLgQ z@f8nNto+TvLp=Ajs3%bbG-wN3soZE4@>Z-V*IE^;V{Q_Ku)vy_-M-GwkfvY*r~c~U z?`wqT3VLx?{{1I`rNWLeqM`dxB4f8^gz5S20lMgFko?hs{tn((+=+SW2%LTVYnBH; zU6WdN6WN3_8yG9A3-JsEUTxrH z!cm;|oJQ$vfgMw?G(4z^zoOtiX)R3s3Mw!J z2laqH5P5wOt~?$6Q0<4&UUM8SufBz!a~Wq;+lzx}+4}Ie2k)Ib9<-Crpx>Lp$!$SK zaSzd6`>k}q#;gr(@&O9vsqncq4IHQ!m@5>YnJ`#-zLcOF3AdG4v`RFuxK4=#>jcKe^8u z6-IO-FYWPAK!I4zvuWt zwEa!SMlA4Vf((w~AK*tH%~-5a15!jN2tCt74~x_lm$}Pz=s_noq!^R&rFK7LbFgH8 zy0l&M3o$66GSi)JUuP^Zx*x1AQr zGwn=iUdG-=1wz6ubqq#CFgoMwzlwUpW?DH;-iV6g`p;a*(B@}G$1 z%*BX+<`SjT?zK)^*gOFQY#?g3^W+$`G{oui{8IynH`ByA_5|4(G>rkxZ)TWe$MaXr z_StI^tRH8H-D#iroC*;*AM`R%iW|laE2{sSm9O14fFPW;cZ#DHp~CfHJwYXpeUxQVRwV`O94? zdPU!%Q+`uRCZ_5QVF{OO=t%07{LB?R1e57>H6NUU(}vSq$hDBN8OCyA?9A)UDiz_I z01R)d?0#=d6mV88L*T=z96|EOMOPcpZ=M=2#l69v16%h@inCiVX_2D_Bdg6GB=Kiyw77wSC=zq8=e*-Qrs=xK$ z;lakJ+ZDkGXr0wCxb8)g!iEtB=gKxe=~xeGt&C%B>ep_hyncP#NwDnNS{m0-9N7lW z*GE&d2d#&kN0vXH5>^JFE;g@zne`rsZN?eA-P`GIsc3RksMGQa;Rt+u6VVDI826Pq zeV-h;HU|l-d{kAmDb(>S2~?;xJx~xo9d68^@_LPVBUp-^AZpN;=ybH`i-oz(5WRbo zmX%6|IPMU}Z&Ut)=Wn@(Ea_F=9)I~BIVBE?Rr%{F!!gyQzR0PM`z4!+ZSH4n&Wx-w zKW9iqD6zDI!OqzYmb7whCKg6eJ__3rC$Q2AScQ_PQkA-1*>H|p7JlbQ0@s&jv=VsTW!hK)35xa-TOGWIHdi^RD zCo*Fn_uu+yG(UelJ+tJJh`g~hr^xzF(aYc#LS|KfCJ$3$!~vPxQPVaz3xWc@Jy1fl zK4wmo6`(}h^tH0V4Z-Dv-8Jg~UHKYE&f%{S-G$yJL{_Wb?vRz^oH)w3J^ngzsR-}3 z`oDH&lsEHOdn4)b@!;bwa^0Mx^oh@K5y-2tJZ80K_A@66P&oCxvr%?Iqp-&E?VtX^ zpm{&4%Mpbs%SL9}=#O3((gzr_=O#Q@5l9pl1IPlk=vPiWGu?L~ECW8V6>`EWvH$qCOq{Ep6M- z!9L$z!!lZ5z~7h}{3qd%Yv-FWPfcQVxOik@*G=ZfPuSNlIDP~zeFoea$t;)ca^`H2NPaXTfSdZlT=*PvTaY5Vx1Xm#Dyok zE4=$ku%N#eOsP;14=cg7z&V!}mu=t7+G%LD zT7~_d6eOIC8AP%AJ*jf0sPnK5sQ(U`3IIylyRHA(#Yz)wU?*Kx{!%J9=y><1yVim4+}ch)Y}{cP4dntunBlaR%^5jFEf!LOgi5_aK6%#Zp!+5P@PJ62AQ zC*reZV_|kpz{`vJ>g!?=omc-R8G1n(xcc$M?BNosYw_qqNJg>2+wEdAG=0!yXe4rR zSd@8ym7;;CRPUd~VXNc(0p2vs5P2m2So4j#*RMi__)mUayTWF}WoXqMmWI9yz$R}e z{wV_D)G3}cL9dU@2?YyZ1}Z<0Ol>|JV%d~)V)H$1cxI8X2tCz&CMOdW$rtg@hM;rV zKzmnV=iR4x_SCEE!%IDiW3hVIo!t(SIh5GnKe?^me%}5txW=lfB0?Js&hzn?o+Lhr zXYGwZI)NX%29_Q!hx%s zynqZ7HRb8f7o3R|q(xfOY-g9cCiWrJ3IrqvfFV@|rLpE|&Bs~Ylmg)0`}l$OTZEh* z;o0ZP$Gf*L+PBpGL8))HlgQgErbKZVT1?2tn~10xKuVe2eO@t?V}UX}hr;9}5)8a@w6*kZA|~S3ult@%Bvvm&%1^Zeos7l@iu!@M?fat zPZs4kYKW0OJd_93mb^ZPXJfRQDq%j9QmeoHofn_p#&!+owN^-}TuEJ1BL?`DVivy~ zc#OxUQF)2BHuEg z;YN^G+2S;in}k5RHiaxc)AznI__?IDU@S0u*D{**6i{1chb2Bt#*O^?u(psg*LW!2gQ{uwMsx{URDsSzeNEtMCMS>_^*Qb2WcYnNe(M_M2ik zuZ65Eyz*VyG5^#zMX*1GfKCp9=p;t?XDT5U8-R6aH|N8e+P7%O9B%Vc)qhqHb$|Yi zdeUf|S}c1@*F8|*d_7}`m1Q`7vSLfu@cq?HQl@k;@soX6Ta%LRuX&cIdsy9n^2%p+ zWB&fFRNS|B8yC(Kt`dYaNsM*t8Cc35d)XE%^JXTXRgYKKrk8qX!WkmM^hjCU-bblr zEq9~UW5`**IlVgM?hTXwz{AR(I;m8=(cH*nz_P(1a07p(fO|bvT=*qjD29JuD_V|B z>;ne__HDpWna&V4x`z1r$i#UUB~1Pcd%9rG@}cGSiu4$Ny^c?+LbvFE_LE9Gsf~{T zkFBCVY5Rn=?~p0;P5Y2}Fh;+e!!J3j74LGxaYDII1z{+K&{Wpvet5nV%-Z#$tCP_z zq1IyV=RG~6KlJ&N<7;M`Cphcl1qaP>j1vz_jBfuuTaYQneuk5}c)pb5yjgyc*Oiiaxca7a_fQDLY^uoVXL!RTbA>VMV5_IsGzV zfu{M}(u~5w$Qdn*gGLylp#*GmU_x(%pJ>>6)>7e_4A$0E(=#6pc+$yKSbP#|_fQBiAS8M> z?|kxW;VMZ+9fWFWDokD_@%@xWe;#5D>|$_FQ#rQl&!;xY6xHP^_M`&pF-bdefaxI8 zoyFIf=qcq)J=eZkFGYh0Z-po5`|h8_`glcb;0E(%-%oMv%f)eq#K^BD1VwSmKSH5S zpy(T}=HB&9{0-Ie)sJ_x;FF|Cm`fHMeYDxPV71g^z9!|r+o36-5|-})Ym+{&Kt0L6 zt6)kvGhJM$n|_1^@GYNL{Mo}+pQcEC_!2FUy}X?Kecn;NxZY-I<5P=dWe)ZXu$58a zf)}P0q3j|orKSAa38K~!(~J(>oWIlznv6JK5L1_YTJB4Gt8+}ZWmaA*O_QbZmr&+x z4}Z50Pe&UvQPVAi49{JQ03z^GF-2 zsv`!!k?o8z_}`G3qS~*6hi57V2e(;&G#-tcAWZ8aHHjog`M>1yQ3U&2Ju-+k;H==Tq0QK7QALbT$p37VDqdLgbLHfE6gKLP7!lc1TduY2HYwF657 z!JL#(Y64uq3&VafhgSlI$*ah@kXkNfqzMTUg>I_4HYGO}0httQBt9d&C;owhAgb81 zb)h(=nSLVu?ruj5shAg+R=c#P&nG3xus6$B`Q%B*v@8=T3t{^}&=3@=NaO9D<}OIA zBJcU{F4WGldN|_Rw9|I|)TNu8pkv!P}?u$Eg zPenlzR=ea-VS%o_uZ4I4E`Eym0BtC=80v#3$eiebEZesNe;B+)454T)y*uH|z_+_2 zC;dJuq`Me`m*Kd@(3y@|)<0jEU+jg}5{Ej!phI4fHUJop2Kl40QD$In4IT@3UzISH znL%yzI5qt$8isDM$>qJ?qQ(5IKK$_kD3z zmI;UT0BMk5PQ2$oH&g}_*N7h4%n-ap?!=^Q@qy|?2Q7M$H_{>rA`a1YE#O7YF7diS z^EyOMV4?dU$R(D{A@%JfuSQ=Pl~e!O4=pA60m}eG=Z00$AVP@1sg^R!bik8ErukyG zWrf$KvtCZbHl+SmS-W+R{h(;MC}4VDYh^S)4cM=K=Cny)x%z@^WW4bf$3w>syIqi5 zYJbsjq7cG)WE!Q>|L~tN&^dId_gMiF%tE8DE;bDy5*?%%N036oj&RQRZ=0hDO9mIa zBvG&r{By?0aZ=D&5zb7*5Ask35IJAhcFga1d*Rw^RvdU5+3tPhcr!=^L1j~-sXUVe z9`i2Mg}1-^g^B?i##sCd2V;$^Bui@3SygRSmM4+jwpx8oBuLVy6yu3aa29tb!@f?u zfPYv%-3@*JU%qdyJwUs}M{>!LH4IQ2yCb<bcZPn~HBhQZF^1>yYLwRD8Naf20Q7-(C5{U6yJYY@hLN!8AIjXNb2a8)2~c zKAjb@G80bK+lZ-WOmm%Mo_W1?$S1^`#*LXT&mdcmhFxkF}=xF$p% zW%A?lX;t!q7uV_v!KN)JtLvIv>fp^6u!u|cXEZBP(U;iAMhjzSNke$zdO95zI$ODyd-VSblV(ok1F{$rrtW+(> z9zX&wTX&|DOFjctmQjcqA6N=E;GvB;AKOt#4DldKd=vZ8qUiU&i3I$Kr!j63)HHvB ztuAh2^}!Nb7fWf9wImIs_lH%E-!rk)Q&2T9&x4l(&kJ%<-H>LO{mDS#_^{h3(nnh` zX*kWk{p$3(IV+r)uqYyIWtniRFLQ9u&7@IrtV_o2_s+Cv^wcQFUpGEZF!hfjzuV;Y zt>UdD2n*Zd?A0tf6=~_Z8@~?Fc|CXg$Y-#Ve_I+IW;!}jv{Xenn zWOP+Tv*SA2?5C<&3i(BIf5VUwuHomGg8Q;INpGeeqFpzwaB`kRx_ppyAy0uz|JE^B zkOD=Bz%n_S-S{+IuJIMd$liHkOoJxj*|RLB&v!Z72wrJFF05xI4W}kFva5=ie%=;+ zS5MflB+yP(&( z=HxvfZyU$;vkJ@x#o9&*UVuM%@BMe7_qh~Bpk#X!;Xa@;m?&zi2Dv;LtG@zed4fow zvAo+aJ=r)vNJ5d(BwH7vT}!vahXxn~>6UDUHy+95`@eX|z}ua(^-fBtO^d1uknyx^ z+SXDZI6g?r7oSOnkez!$g+5-0g_Z;dxTosiojANcyb4%`YzF<+_W)87A~If_GM=0d zQ^u#CIDnRmPFeN*{;--yx<#;+EVUHzM*uWOQvc=hN~N6N^ACn;PM_p4Edm36TT+B3*lDc zRR7KysjT=@DB1y6<>&os-mYypp#Ui7V8Waa{!~h9Z|u~Zm~G_R;^GE{HlbCGT7R^@ zks27qRDK=#jK3S#Fq8#J1psW9+^eo{A8S;(0G zqd$0PBD{dCJ84|JnD*6G z$qVugG`WZV-@FG#Yrmw{&vXr@sMa*vzgo0`iwl&m^n&u|K)eyY4Fpn;LK&kwTvG2U z+P-Bc5904;#Z#$KXz=PUWdzNg1|0uSFq``VCZxqfYHa>2?s8Feg(|qRu~W}!d(eIa zGVoClR7D=~njUmxQpcnNY`9Gz9WVPdx?MB-L>&3nG0kT`WnlOxJQq|UP7S-;L6M0< zAjMh;g&;YwMU1Iyur%NyV=_GrtsD9XbP*vxKY72T2fc1~@PIy|768GYHBh%mnHlRh zoMCOKY2cPWQmV&`7BwnC6SAgBz>an)_9!iPBWt<(kn=-w{hQ=t+KIe2Mv#UK_*u?@ zZctr~sa4e>R8Bi}3dE~ub#XZM4A>X6@BaaU?xflp%H9YJaagKBQ3S-m`Ws15ITMMq z+WHyCs3u^D+H1fW4Z>qLT^K1lkW2o8jy1SO1f(PF8x@|U&Pw1yOw9IbtSO={;YIN$ zmjd-KAeZ6{IY!VC5PMLV>0J(#0FpWD#6^v8!+{P+n{XU4Z3BAH(EH`q_QhsU4?avA zzPEPr~B(GrD^6e%=-yY)!@YIG)k}ro)WfSq zv@*akR601yx=X9_=i>sr@_XjKP#~w9V?dZlY%ZH|f=fZKzKMuKUI_gp`(AGdvdZO75 zG5jy4^-Mq#cq)G~?WIKk6aMia8OO+8oE@5NEW73GA`R|N_=!^D$!r#_Q9C#__$4NQ zi~qbEe*#k3!!K@BjowNR9YvUt;EcTge)Wv=?J&F3XJHax^+=r>UDE(|T3$O`6>)gZ zdGS-KDpvFsu)3CG8aKKHr_{OoGwKYiSabn>(xw16}QIw0zRm6?i?)g>+D58%JgmV0&Q-9(#~x z4E%nID&fPn*cbDh6~L_NQV_v$s?)ysjUcW=6uteMiyXDdlebYfD0oce+Lf;T zfJUN^a`W4Q-oNVb&gIoJ4FS=gH0&vLRO#{AKZ1@87L4)v?kiqY$M;@zN&oQj=Lq}L zjT893ai9@8!*EV%XY_7dmeI5tHv%5!C)Vb3CV&{wt7T|A9d=vOx~r(G5HrP0rDM&4 zAS6^Qzu!^wCOrqH%*TA|iF>-*c+*#ck{{!_0WukRcAE94zwTxiT@ZitQ&+K++VzMZ z-G=7w@9m~@ZKe*DB^!x=7Kgz!duuX=MG+06qg_JLw#d)ZxaJ=7lkOvYjT@nB`@ z>J6Ml0Z8U6FP;bn#|O4WCK&74yCplar5&noWw zl8Sdhhg9Ik+4U9fn&6F}BKGf%Jg(2yjx=j$R5GyowS&jfQq{!qR4RZC5w!2+kB5G$ z{r7j|kud((jPYN4QdY_rXTIEaDv|7;_j0}~&akkN^t!s|DLJaG&Auai`7>xeD4V-$ znot36fm~r?V~^9F1nMy{&_^QiP8|qd&o#AScW{FauoJ-WkiU0bKy|4XY03F$hCOL4 z*M-E&0Kz6}SvY+_dkr0X$`@T)CnsjryvsKas&F)Jkcm#aA3BiGMjd?T9Dl{xPuzE* ziXoOGHaQlk6%_2>zKt^&ZxipK&QYa0cz8VWVE1tU6C($5`~E5>P#`&Mg-neJ=dtX3 z_9H8hlt+z0)HFTe4skyCntGER+t|SWIDNADF~$4ITPht_1JB{o>&HB~#cr$4f?t{5 zQq&>E>~e%tJAaU`jJ8&gH3SD=Nq;eQXosCaWsO59LxS;d#3_7w6`&#Je>t%yNBlog zM@TiZP;cH{N_5!OpDU_!o;E2KPd+E}(wF0@7nKQ-V}%=^j_?(g+eK!~S%2^DR zm9BENr>PuN;oTiZ+z-v%S&KY>njQ8bR@jgX4>q*q%r-LBT5UYAZVW&^JslO_OZ(c2 z)e&8GJ^lGKi<{n%Mj^j3`WaZH*D_#Cu+-o-;(~KuhrP;bT{^3XoD;tS`W|eMiM`us zE?bG(&dgjKYZM-6y0RpKe;k!H-*-EPy14=6wRnpERTJnoTib6?4BzJy zDXnwZnpu6?_4EhJM5$PnXG^J{A~GMvw`sF&9^Q#cx*)kkov;A>B}P7ndycrA3;uuc zolDl`2G6bz900hQ(a*FB^H*9I`hS*HroRo{y?LX#3PS!}aG+6LU-B^QGXZWgPm^#y zsh>Wra$U>s&iRbaA>3|WF~b;fj)Vp|331hk?VDj%-$_zLe+!{7%`#V4c6q{^fg^iK zP-V_pJ&v6nSxAB-nojY&e!#npE{2N=FLhJNMWE;GwbRQ(GQB_Cxi6~qvc3)p=S0lD zfah@vCX6l?>O3@#&&6`KNsW}Y8fU|VN?A_aG_j-!$L3iZX$hVWUjKfQQrp{W9V$wi zmWd>DVENH-;KBF2s_c$&jCKfc@QZHpd%`T3{POx|)`j*&Q_#cP@{A!Mz8;>FTca`;ymR^zqQv-$T1?^3!6`hn{(#YMKvxT5T00Ln5#JOxwZpgnZoCb>#`W!)Z~l z*{cCbQK9PZkWZRDM0*;uTB3b0&Cdu9vT3fnkB=y=YnW^owb+I4-@U;vy(0tX`^&-i zmEjHPmziXG%3XDVhg+WCoa|ljRT)N0<;G|KZ>-LNqEaugukV&2C%1aLC`8sSMCjrP-fdK6`@Ig*rp|JfL^&GZ~Wf_2rNTho5~&Y8&<=h15Z zlFo&6O@ghwzR6YyZr=ivH1BhzKU|LnWH<2#f)&^rd?GSp^33IhTDINtI$x8du|8K z=5~6eGkak#jEe^%XUw}WpXTUN^M=}b^AKTmRKB~4-)5GP1>vu01mkvpc$i5)j?{EZ zS>6*r_c)^)cBZkjgwWD^-<2Ydl3Vq$H_Lf>J)e1iR(!{5{WuLI<&$5{6iO{S%z1Ny z6&jXby?Jnv_p@JQ>9&}n1Nlt7d7LF=M>7Y!-GTG+GPX`o^rD$(8}`xracVVjJVyjq zJ)Sq;pT5suC2|jr!O_cp8_#LKp61*Dox$f{qgU?)O-8=!dR3|O;C6R_8|^TjQk9Dg z3X|kD^pp5wKy0CAFWg%3MmfRP*KM)bKJOpv-oG}6*Be$6pfPpIv99M}tiV0`@_NXg z8N&du3+yLQv(5m|eQJ%TB)cJLE`RtmeBRqx2$gOC9#PdKwhJ4IxXm!PqjSeovowId z>p%(qCp>uk-qk2rNqy(!Nda}5&>y4KHL9FF>U~|u8^3h>DzlbKFlvb361@e~re)AP zuHNcU;vn|PwZHN zlP)2t-D^2xWgWYCEG30r#2-Ch^FJsQy~yn&7-uh_DN`!wsYfZbbX_fP)t!f&CuHY6?SkhbvU9qIc6na&Sx9S^z2 zEi(DgQviN#(B=szI^`tzDZx%+FX79Q%I!LbDzB*2w{E@8|JraSV~QA2R$b|~`?@D^1!gOk^=ubcB~b9K`nTBJXH{B0Iw$>I60dyiE`{P^qtq#)-` zrftH1taW_*VyDwu^e8eB zS7La<^nfhso}bFW$uuap0c_>Ad0`0*+v+za`5RhYU8g;T{-$>P9svBk-6hs*Th6;* zL=~h_`fcHIdk}>2-Kids?3E<68ucFU#A$dGS_gD@&0zQDIWY@9@&ZR{JFfG;6`;k%Ii?M_VO5L;}V6VCNv+0z6T|W^9N86DNpBETxu7Ja)FWKNQaWq0MVGfjOkE16K?H>-w2-!J;j_VlqBRI__b_#vHMiKK8w(_AsY`I59?@ET` z@1K&tc6P*o59vWXat+n4Q<}Nc!FZD)99E2s&S(VSSY#tOEpz5bn6aw*M}{MRO)Y?f zm#ZZci|rsqk}}UtQO)@sdI60tv0OVp(V#P0&j*$yNFZgMAWiABPSljQ5XE-r(Lvrd z&xJ&VWLNAbpKkvr3vyTXesJMqfSUO~>N4p30}o4ecPu)^{y-emwL4LkGec{+YJ~@Y zoII0J=*&&wO?HRn_Hv^|Q2ao5c*>X4w)|fL$}Z4bd{$`jc~V_!u^Z+Wko~_o-R}WM z={=+$>%c&aTqNOI_5N+M(0F%Dy2F4}6176CyAr*)Z5C|E8T$&*J8Ag;Nek2E$q0V? z!f5i};CJ(r7XyGNmzT(*?j&*Qxoj;RDt4DOjGS)XZB2VtFmOXFMR%s)^-I&}$A9GR ziNmgWo}ArRfnA5uQVwA@VAn#Sufo`~L*BO7$Qb~CP>CAG-Fx?1E2G>A)VpR)Du-mO zZI|i;5M*;NAJ-t79+W|bu$|%5mi84{?DT8LQC~G~v+F&H%N_ntVP6>*Rn)aTFfc<2 zg3_s!fOO}8NC}eCj37uT-61i6D4hZlk|IcV$I#L}bSNMr-7(a6e7?`;df#8){G03A zd+oi}I(zSR_PW=7{x+w7EL~Lg?Fq?9)*%s+&01|)J8b>-WpzGQV=NP)?khq!xmcfp zq8B5SS)34AwVSC|_v3dbf6X;NeTpHxNN(?zP+~NeIuc*B zgQ&0<%(C3yuy$O|9qDeDjx>F#fy(jjAsy%#H;dsz8)L%fZwlQ_Hlk+W+nfr};vlSj zX7CsOi%UL=FsQk+ACD7?0Y~-lon6mi@C#d+*Y?L8k|a+0C7o}VH$)1ntbvQna&eE0 zH9ytIm-+3SW2pPTewfB);?Gc5?;RzUZuq#}X`M8!42PGenH5&9=`>>KL{w|V@NQl}b81eM*|s*W22{@(we%RcNv*mgbed$04`w2_ zHgk=77MaJ-AVx47-AK@vEI=RTQ)s`}kV3 zWBiRE3RwT1exIIDau_Dzz zrL~6S8a)6P1HltugPp>)1T!p9S1J4%3}mxo!!u9sM@6gDnEU4K1Y2WJD-0)%&Hv zMwmPG{A91jFzuv@2>P?^Hii*!XG_T0E52Vl_6_T=;lHu-Ew)rLnx5yu0+L=6Ra)jw z`Q_C)-Qmj3Bmz)|B^ymMcP3*bY#l#wE+Ak+qYc$$^H@HoUB8Xew~L#2X~AcY<@LkX z9n6?>Yd0KJ$unT8huv(#JSA>g6>H9Op~^>(mLE8%=shuyGbWn+gDh-4q|G4^HG7ZE zLm8p`X5xqE9pb$0x|_dM{|_KLBa6iLeeK~$!sj+7dKZDfMBZgN?k6wkZdDLqk3~s6 zR?X!UHS2#ZTR}fcQ)IDxgnw$`9WeG^jJ z&I{@U1W-ldoK(=1?;R&D^XfKYb>cmWm>4^|9Qe^%D9Y%d_C1W& zEO{aCs{rlH*N~eZCC0`sl`@$3-f(2&QirgCfpnq-c($`=hMsU6a(a~5rslGYWKE(i zFc^;}N)Ktx9Pva+y?^U{DQdi%b8*GoAZ)AZz@xbQVWLIBb_Uck<(km+mbNu=5$Q+M zR}-5C4E}xH?s+~c9SiA-zVza?Ud$97HSrPu-Y3&nqHpX{MS>AgbI~tZ(?HX<)HS`8 zmXC|D6!yAZ;R^V^)*7hF9f9D!e{E!a`gFN1=2sJWJ)|})?-_Sh+yr%0ym49WCj?5o zm3F2wk&z+m{u1Xhf5ECM#NDe3Bu-(|{p!UaVRaN0LaYT+wgHE@rw8wWuU>O{tQ9IK zj$d)gX04h4kTAi5&P3xeW9cPTgq{Ho?2m1QBbqCK-^F;JHTjbK+DISr@YOrv>qgLW zmci;HuG)Z2fsZ}+@YYdNd}#)~X*9#Sqw$SoS;+cnB_YLF zwZlGz{ZnZCSl{M{9hQ-#A7JiH`;TPCpfV-Nl;KWKUVrzs;u?>~gGyvRdB;sOq0J4v ze53OrBO(!c)^Mueo6qOEyM>8FxEXRVywiOOhb|mDZTZur@5(YR8vbTqTcX$16xvX6 z{AgzM^{nAhQ=(5(9JDFlxm8p|5lKpHR711%{?u*3m-F-I?FlqgPS+1hmMq*rU83$G zmTL1%kWYw04W~2F{)xf)b@Q^}Q3@or2H(@@=RJa!mi0?w37~%$Df)7C=kF|(mP~5y zz($ShA5gxMyhvZ?%4DQ|Tc&yuSE#fV=8^99ixG3infLo$pX-7TQzdTRn15cd`i`F- zyJ9Zvj?;&xw_ur%{!D5QGufMyrUH}8zaXRl2!6ZBwA|D{4U(Xcp@f|zduy65OoKrO zy~9>!feITKn^N}flFL1PSwvfxyA?Bk&ALU6uO<(pDx~vTSGHr%7C+~aBf;`le&+~% z{A9_6nFP6&f@lrUaMLdl9TYuEzGAF3hz7O-A!yVbzm{lgcqxoRdkmqQpTkHrqBYiY zw(n}k{0X9iG>dN|3BLC0*$lD)lQotu!>)|mLoqr(Q^&nhqdm3c2@c!tb@bb> zgPx-W^!MB?NRIs~%K)_$%~uKcSsj0Vh(xl9JXv-jJW!-r+aPjV^%C)}Juj4zODt`3 z^IIa4yZz->*z}fJ{Rxc83cT79LR*RJf|?!2JEw0A(+M(Dxe0P0+K^Z^Il(V46X?&7)hkg0&s_lmB6J*>x0`X+9G zy1P)~bIwXixFt^)3WUxHqRtI6Dwn_O-VNf2j z(aiEm#W+%dC8T_mGgCk`3flhYu)y>5SIAn{=DinxFsjqZ!DHx7jkcON#(vVQ9N5e5 zo;XKdmPl*e6f8P|W^;oLrxoqOHVLv95%vHWl;j`+AINiCuB~fyvPJn8JOzVR>X2~A zi7!-~Ku34CL#DRfpey@rj&qA#`C|Z15e#H*vLqIOtm`+R`3rCsq4WDufxx$ngg9a( zmtO^JnZ`Et1WQHnl6n;T_h7Gc9^w^tO84)HR%2^QBxfx%8!4ZF0qz$79LtzRTOUkd z6+^(;8-ecm^WY}_R(|TNKy})*vDIWdrqnd!EZJ^^4V}OYVDvPvUH6L~_DU8QJ`dlNP~ zd$+Z%br<~WvF7aNca(JFpY?(r+1iYk?w~p1#iH_js^P9mrrppyA|kXIE0EiktL?Tv zES#x;At7-&b7mP@Xa+)jHSj}bWt=^fQz;zwRJph71?xgm#b@niNgJwOTz~&-RUZJd zfPd}xHb>-d|CjE4Aly+|Z>3D$nle`Fhh%}fFq3&OELE=0R$ zkdtCu--)b@g~v}^ikIWEcCX{M?Q`!<(pOW?@!tn>z)d;AAido^u&w||b{uzvzhI+N zxnQMGkVKsM`bALVGR_sba|aOs*6B$JB}Zhzy%jI6=cqv=AXCADeDFE-i5U9@-M-a0 zj{gh;klPY)7;OcB88{^em4}zt4p=YZ+L3ML;+RuE>m80+0x$f_)xbsI&7rdavJ-at za)`dWYO{Cp*5fbw*{xe+iuZ%8&h$NgE$JbVSwYT=(sN z+WoaFVE5{_*D(Lkp{`S+6C=)9T9pUs9eAHf=+>t{WkJ*wM1S{Os=kc;_cW-Z zF{-B)3SFw>=H{0`m^s-DPNO4G<$}-PSP{$xH=uir+oILNzW?*?Yj-z4!D-VOkrPHg5gpb$Om3#q&CL40ibOt{7A*tD*ub`9s}@K04A1Gf zQpFRCCz3jmUoei!&Dz{cEk^Tt^Z(mm#Hk}o9Vvhw)|P8{>D})=*iQ(9n_!imnf-WP z_h-gSgyp6_2Rrz#M=Klt+hO`--TbPMrY;P`9S%<TvH~dCDLKmZLjrw|!p47RT+ugCwYr@S_48ozbWwAUUe_pJnix z6)j1(+zkkyA+vF0kQI$yTKS&}%o4ztCq?e>9~zJzsMV$Zh(1W%>!Cqje-*}V z45an(=d#h*l@;}0`d?bl62g}krj|)waMPMG4=S?lsOMsavom@ZGH{ph7E;eWPeHp_ z#L8Eaaw#@dFQWOiNO7j*X>gy zK5xy$v{wS?o!sXyaO6%#C3Mcx2(wBdAmnu5eB|aF-nsC}cA0nR(OTWTTXm=tofGd# zKa%P(ki;%8{I^ztjXaJq?0kE3({_ zFu{PO4F_-SMb0dHJ{oTz0KWkoAD_g{ADGZm0*Wz$lASsQ|C{&Q-#>~V@v zos&MCZ!1SbZM<$l=~{YD5}_0Ku{`;KlQdbuqXMXWT=QBge?@E4=JbE}Q1geF*6){B zlS0r}TO>~6JEVVhhkg`(OeW=HJZC)I2qLlb!dvwEK}}Tf??8(H;)>)yH}OU7)8$`^ z{nxl)w6<7vtJXMf%qeR!$}Jj2)nLjTT4?4W5KH`9Y7Jtz@U{g2wNFDNyR^W~UZ?{% zj*XF1_6^Wr&Z2cz_Dz$&3=;CiT|9w}09F3~o!&2Bx9daKfWE0$taeAZZV%)f=0ZAS zUnDGjKq@F}e#4?)DZcuk`LX@A+T-9y5nUH_Z^}qIO=Uc09_-1gshu-E6|4h;hT=tkP>M!U{BZLvw6<;FRuvVpMweUIv_kPmKIrWX>nhc$E?QcPf12w#fLnx z7+5k%M~!!%YSWXb&M%mWyD@za6rSeqO^Z6M-?9Qih)#;XLJpMKX(7m8>3@SsEQ>|m z=}=Fz+uuICJ6m5x?mJgcwyGF@dV>@VbO*@T4A_iJ(*n*_^&G9&Bh9^jxwr{yGdPb@ z0sR+(N@2SP$tEzF@ar{K%8OxvWPtEecTE(#krcdV{`$L}X1^jd;y}f1+McvLwd!}< zBjIHwhUJhzw2qJI&n%sHywhQcqm0SY1911}7m(9?Bd}PZrk%l8$O%A*&%hDV6E9zm zq*gAVWofJULJd5`=!qiou_&TFZw*#2>5<5e`aByYWeNsMj55NFj4mWAlmxN+PW3x# zWtUx``~1H!U(K0(NH&(mZT;)C9YqC(&zvWlc}3bAh&@LOrwrI{LQ8oi-t6gGxqbjm zo59Ae2ygQS$!4i8yVNKwA2_l85~J!taBpNciB#PMk4GHLbk!Pwe1odzvA}Vn0TF#| zgp3=OCBu#756M*YCMfHGvK8=$T+cxRBX2r`kqUa&DlR9k3%0BEMD;aHK=`Tj(5t>| zbXgz&aOxi4=z{UCQuw?oFJs0_OfrC z!%V){@G-5Gz+*DLT^QD>^h)knUP*-Zou0Gi%bg`;b2&V~Y`(k`q3r zb!HguPRozwMRZAPPY}<|efI-)CaXr{Pb+{@X%;yj7shQ93CrF(Q$QL;`}Dp_6R$oN z$j={Qu&F@>>W*H@OFwUpWwDmt&c*d$PFSR+o7cka0hvOq;%@_Ilnp@(kzG*g zxf@ewH%4eeeqKc#=@HXb$d-efyi*Iau2HddrZ_k)Z3|WM4(6whDwZ!Ub^ipDQDD#? z_dlskcLtq%p-C)b=j`QmLku(A(j3KQdZ+D2jaJa1=2YbwGD@>F9ekUb)5;%`cf4Y!Li56aWsMWQm`Boc|=O2(qvzlivK=^)1L+CwsH*8Alpm!zH>5vlVl|N?8lL1 zVS>wy^V+%UVOrp+Wip5D%9c&HcRvwOQRy&W_}iz$H$Q{86wy~uY*lQ!y@O=!GtzNn z4vZM}3H&YdPN~LRbS~Zik`S1O47SiHYahA(`6S7+Lc^)=Qw68zm#2iE``+{i0G8~6RdzC%!DubhyV zAXkDb-Vuup;T%AUG7<9or+LPe2o`1jTg{I&QT^9Tq47fNUd>x#J_|}Uf?b9!ZeSA9 zZ;qzP=QG^pd5^G^iW5wEjfjM$bb}=p+&-0FupO(uT<_v@4^N-n88qT%Rm)ro7r-;> zZUKO@G2Ym|APxLAK8h)pa~&ae!i= zI!$&a`Q|s#xdmnuX34KM!Bp*O9R z`WjW|Nm;J81+K>()gK)#`EaAI%t^3QHNZ%lk@&BZRm`8se0glro##%7or~Z79abX7@Z+ zK(D%bP!TMe;BdE`UKi=Q_=YPuuHam|;HHI8*GAB`w+UYd)j++4mmrCJyD2dK9A5~L zuW2Pxweb61E!~lo*~@VXgD;Pn7I+dNKH)2GOFh)85SJ>Vcs5y2@4M;<4R1g4PcFa4 zh?^+_4e8VIq%>w)yAgmR+9AOEI+G~ zC%;V`d%#}d1H{5{Vw3@n7gbr`ayG5ML$U6xG$B(C(rh3$(z21Qt=QJx)iUfL64KVp zl8)J%$ML2L^Xb|o*u>bkp>Jo?xow(F5oY79FR4YA9vOsz_Fdxa{!*_b2SJ}fzHvfRxH0#a6;3LL%Jj2Nhx?_So~GydR3%(WLcu?09mv4T|{iu z3+G&ZWhhPtTvThyzI$4R@}jpSm3p8uATj@R#m9{O&#dn+$Q3?~tg*q6tJe0^bx8#YNiLsgH ztnDsa)_b)yAMqZWa9bDyYvP`)SC9mCW#UKKgUkYWrh_ z!?TLcZn>4T0!Yh7d`vN+u3*a-w=Gdj?=*tHg7&Q*v=c#+!>!ezQ7Io*V>3UKi1hV! zDGk!m4CymQFebE-+!4u;ogiBhAGPKze3^Q5xqxdz-jr?Se&XPk>>7K;KAYX6x586B zwZAbMZZTjjv_F9ky5L0)tnD#p{{lIQ?vqMXWk$(2D7E5mv+j9T(1=MpxDH8lav&*{ zn=lf3$2s(n0Fo<;el@WN3rd#UieT&9kqZhTlC&*;r_GsQZE92Xmdk0D$sWfn$=!v_ zcf3x5!Y_;eD5WM1h#lMbah#+%1~7OvhcZ%>Y2-FZNH)Gg(wRL-^)LiA*PI{iNA~Jc zKoK9c0(0LXZsoz*oSTZ&QoM>By~&yx_Km#RCZq!{jLK>ZAOiv0BhGJOZ z_@sV8y~57DXZlo!`O9kwCv8&Ku@HY5qr5$`QE=V8dd52t21W4jj$sV?M>Kf&iAMi0 z?r?Vc1Z`dRmxuF!OglhkikiG@2BU%w?iX{I&)a?A$YmI^c6{`5I@hmPmzpIV!LvW1 ziCfEn;W@1uqrY)Zi7wftLAu(6zt%m#P?eXSdvdtt?loT=|1Pm1_G94ef1x*$!|}~% z`K0a;gzPUMv=0MlkQrMI5Ii@uV`eMlZpn4@C3!Zj0VV6#!@p|k&Tr3h{q~+qqSNB3 z@FVRnJWHkqqm?FvR}ly3XnWrQSXwC0@kC%I=hE~EhkD|Ud`!)BHn!1LxEJY3#Pq0n z6TDz=JGbmMQhtJ$Su=o&Pz~}eiyV_Mh8sZa7u?Kw5_tV6A9;e@9qf(&1O@4NtOk-~ zmB9Bp{7{1(4YZb)S6aK^zIJwcyRn#!)t_Rl8&JLAS>W0l7D9LGVYMaN z<#=Z7ag95Y9yvXB+-p7hM3JjZ9|42jP)K7$s|dE9Tz0}@1kTo%B)1DZi@^?0ie@gS zqp3ciN~BDKR^6KUYq6*Idun*B^qApDb2s)=stXN?XrHdPn0^(KuV$0VE25*N(F?sx ze=2b6qg@kc~k-A2bvrt^>e ztwfyejV5*QX4`8vXlO>ebgLpukmNST#>#NyJ5BnqC9>+8;R8OSM<#jpp;k#VzHT4) zO>H!Mckd-L+izpH2G=6KC`!1F(F93Mc05wumb3I3Vdy$D^P)shqqTO-SFFRuC}9%C zY4AsmH`ho%q&&JKZopvW`q9z)#kq;p{UXhV-TA=h-XwXc3x5WQh3VEG!}3EtL4uVG zad%KwD^TPukPZLHu~%Cr{%CB97o2Y;lT>N^u@-&dA|+vs^u7y6?{S*5rf$_Cr9gay`Gl6NCI(&Dn9aGE zK2L+hYT9#WQVoi-BJ{lR@|&Kl6ON7CcBHuwUP1Bo&ji<9o2Ejb1yempAN`e&6mAJ8%UOv@8G1JsXAqiGUt3_6^%#2aY zo0<%u&+Ahm6jY}m!HCaOhyD=G3gepl-`;8c`IQ{*Ma{i3hv3;AA-^rYxA)s3<-@mZ z3eeGLP{&2V3s>TKAmqwx`JIs7tA%gQg$1Zy_*3k~J3pTT3Gx!r&!dMD6<+klS7)7C z+@1)Pj~6NTye!_%TV0<)=JJVCWBl$+g$A^EEus!LN**n4QdA%M>l^?{v)@Ltz1i%V z(l$=s51)Am<#~OH#B|_ICM!ClKTXMCT95n+0=8v6kB0VqnH%e2F%a)vu+{(P2R^
-
+
{% if perms.employee.view_employee %} @@ -144,7 +144,7 @@ {% if perms.candidate.view_employee or request.user|is_reportingmanager %}
@@ -326,7 +326,7 @@ style="width: 100px; color: #5e5c5c" />
-
+
{% endif %} + + {% if perms.base.change_shiftrequest or request.user|is_reportingmanager %} +
+
+
+ {% trans "Shift Request Approve" %} +
+
+ {% include "request_and_approve/shift_request.html" %} +
+
+
+ {% endif %} + {% if perms.base.change_shiftrequest or request.user|is_reportingmanager %} +
+
+
+ {% trans "Work Type Request Approve" %} +
+
+ {% include "request_and_approve/work_type_request.html" %} +
+
+
+ {% endif %}
@@ -539,6 +590,32 @@
+ +
+
+
+

+ {% trans "Details" %} +

+ +
+
+
+
diff --git a/templates/sidebar.html b/templates/sidebar.html index 1ee3fc5de..f42c8a64e 100755 --- a/templates/sidebar.html +++ b/templates/sidebar.html @@ -399,6 +399,11 @@ > {% endif %} +
  • + {% trans "Encashments & Reimbursements" %} +
  • {% if perms.payroll.view_filingstatus %}
  • +
  • + +
    + + + + + + + + + + + + + +
    + {% trans "Configuration" %} +
    + +