From 0574b8c221ca372fcbfd2f5de28a422edebf2515 Mon Sep 17 00:00:00 2001
From: Ajmal Cybro
Date: Sat, 16 Oct 2021 16:10:02 +0530
Subject: [PATCH] [ADD] Initial Commit 'hr_payslip_monthly_report'
---
hr_payslip_monthly_report/README.rst | 42 ++
hr_payslip_monthly_report/__init__.py | 25 +
hr_payslip_monthly_report/__manifest__.py | 51 ++
.../data/payslip_mail_template.xml | 22 +
.../doc/RELEASE_NOTES.md | 7 +
hr_payslip_monthly_report/models/__init__.py | 23 +
.../models/hr_payslip.py | 76 +++
.../models/res_config_settings.py | 46 ++
hr_payslip_monthly_report/report/__init__.py | 22 +
.../report/hr_payslip_report.py | 81 +++
.../report/hr_payslip_report.xml | 78 +++
.../security/ir.model.access.csv | 4 +
.../static/description/assets/icons/check.png | Bin 0 -> 3676 bytes
.../description/assets/icons/chevron.png | Bin 0 -> 310 bytes
.../static/description/assets/icons/cogs.png | Bin 0 -> 1377 bytes
.../description/assets/icons/consultation.png | Bin 0 -> 1458 bytes
.../description/assets/icons/ecom-black.png | Bin 0 -> 576 bytes
.../assets/icons/education-black.png | Bin 0 -> 733 bytes
.../description/assets/icons/hotel-black.png | Bin 0 -> 911 bytes
.../description/assets/icons/license.png | Bin 0 -> 1095 bytes
.../description/assets/icons/lifebuoy.png | Bin 0 -> 1199 bytes
.../assets/icons/manufacturing-black.png | Bin 0 -> 673 bytes
.../description/assets/icons/pos-black.png | Bin 0 -> 878 bytes
.../description/assets/icons/puzzle.png | Bin 0 -> 653 bytes
.../assets/icons/restaurant-black.png | Bin 0 -> 905 bytes
.../assets/icons/service-black.png | Bin 0 -> 839 bytes
.../assets/icons/trading-black.png | Bin 0 -> 427 bytes
.../description/assets/icons/training.png | Bin 0 -> 627 bytes
.../description/assets/icons/update.png | Bin 0 -> 1225 bytes
.../static/description/assets/icons/user.png | Bin 0 -> 988 bytes
.../description/assets/icons/wrench.png | Bin 0 -> 1205 bytes
.../assets/modules/approval_image.png | Bin 0 -> 51818 bytes
.../assets/modules/dynamic_image.png | Bin 0 -> 59839 bytes
.../assets/modules/list_view_image.png | Bin 0 -> 59706 bytes
.../assets/modules/multiple_ref_image.png | Bin 0 -> 60159 bytes
.../assets/modules/print_image.png | Bin 0 -> 60151 bytes
.../assets/modules/product_return_image.png | Bin 0 -> 58986 bytes
.../description/assets/screenshots/hero.png | Bin 0 -> 77855 bytes
.../assets/screenshots/screenshot1.png | Bin 0 -> 88435 bytes
.../assets/screenshots/screenshot2.png | Bin 0 -> 54423 bytes
.../assets/screenshots/screenshot3.png | Bin 0 -> 44551 bytes
.../assets/screenshots/screenshot4.png | Bin 0 -> 30476 bytes
.../static/description/banner.png | Bin 0 -> 61172 bytes
.../static/description/icon.png | Bin 0 -> 17359 bytes
.../static/description/index.html | 592 ++++++++++++++++++
.../views/hr_payslip.xml | 18 +
.../views/res_config_settings_views.xml | 29 +
hr_payslip_monthly_report/wizard/__init__.py | 22 +
.../wizard/hr_payslip_mass_confirm.py | 37 ++
.../wizard/hr_payslip_mass_confirm.xml | 31 +
50 files changed, 1206 insertions(+)
create mode 100644 hr_payslip_monthly_report/README.rst
create mode 100644 hr_payslip_monthly_report/__init__.py
create mode 100644 hr_payslip_monthly_report/__manifest__.py
create mode 100644 hr_payslip_monthly_report/data/payslip_mail_template.xml
create mode 100644 hr_payslip_monthly_report/doc/RELEASE_NOTES.md
create mode 100644 hr_payslip_monthly_report/models/__init__.py
create mode 100644 hr_payslip_monthly_report/models/hr_payslip.py
create mode 100644 hr_payslip_monthly_report/models/res_config_settings.py
create mode 100644 hr_payslip_monthly_report/report/__init__.py
create mode 100644 hr_payslip_monthly_report/report/hr_payslip_report.py
create mode 100644 hr_payslip_monthly_report/report/hr_payslip_report.xml
create mode 100644 hr_payslip_monthly_report/security/ir.model.access.csv
create mode 100644 hr_payslip_monthly_report/static/description/assets/icons/check.png
create mode 100644 hr_payslip_monthly_report/static/description/assets/icons/chevron.png
create mode 100644 hr_payslip_monthly_report/static/description/assets/icons/cogs.png
create mode 100644 hr_payslip_monthly_report/static/description/assets/icons/consultation.png
create mode 100644 hr_payslip_monthly_report/static/description/assets/icons/ecom-black.png
create mode 100644 hr_payslip_monthly_report/static/description/assets/icons/education-black.png
create mode 100644 hr_payslip_monthly_report/static/description/assets/icons/hotel-black.png
create mode 100644 hr_payslip_monthly_report/static/description/assets/icons/license.png
create mode 100644 hr_payslip_monthly_report/static/description/assets/icons/lifebuoy.png
create mode 100644 hr_payslip_monthly_report/static/description/assets/icons/manufacturing-black.png
create mode 100644 hr_payslip_monthly_report/static/description/assets/icons/pos-black.png
create mode 100644 hr_payslip_monthly_report/static/description/assets/icons/puzzle.png
create mode 100644 hr_payslip_monthly_report/static/description/assets/icons/restaurant-black.png
create mode 100644 hr_payslip_monthly_report/static/description/assets/icons/service-black.png
create mode 100644 hr_payslip_monthly_report/static/description/assets/icons/trading-black.png
create mode 100644 hr_payslip_monthly_report/static/description/assets/icons/training.png
create mode 100644 hr_payslip_monthly_report/static/description/assets/icons/update.png
create mode 100644 hr_payslip_monthly_report/static/description/assets/icons/user.png
create mode 100644 hr_payslip_monthly_report/static/description/assets/icons/wrench.png
create mode 100644 hr_payslip_monthly_report/static/description/assets/modules/approval_image.png
create mode 100644 hr_payslip_monthly_report/static/description/assets/modules/dynamic_image.png
create mode 100644 hr_payslip_monthly_report/static/description/assets/modules/list_view_image.png
create mode 100644 hr_payslip_monthly_report/static/description/assets/modules/multiple_ref_image.png
create mode 100644 hr_payslip_monthly_report/static/description/assets/modules/print_image.png
create mode 100644 hr_payslip_monthly_report/static/description/assets/modules/product_return_image.png
create mode 100644 hr_payslip_monthly_report/static/description/assets/screenshots/hero.png
create mode 100644 hr_payslip_monthly_report/static/description/assets/screenshots/screenshot1.png
create mode 100644 hr_payslip_monthly_report/static/description/assets/screenshots/screenshot2.png
create mode 100644 hr_payslip_monthly_report/static/description/assets/screenshots/screenshot3.png
create mode 100644 hr_payslip_monthly_report/static/description/assets/screenshots/screenshot4.png
create mode 100644 hr_payslip_monthly_report/static/description/banner.png
create mode 100644 hr_payslip_monthly_report/static/description/icon.png
create mode 100644 hr_payslip_monthly_report/static/description/index.html
create mode 100644 hr_payslip_monthly_report/views/hr_payslip.xml
create mode 100644 hr_payslip_monthly_report/views/res_config_settings_views.xml
create mode 100644 hr_payslip_monthly_report/wizard/__init__.py
create mode 100644 hr_payslip_monthly_report/wizard/hr_payslip_mass_confirm.py
create mode 100644 hr_payslip_monthly_report/wizard/hr_payslip_mass_confirm.xml
diff --git a/hr_payslip_monthly_report/README.rst b/hr_payslip_monthly_report/README.rst
new file mode 100644
index 000000000..ce66e3c2e
--- /dev/null
+++ b/hr_payslip_monthly_report/README.rst
@@ -0,0 +1,42 @@
+Payroll Advanced Features
+=========================
+* Payroll Advanced Features for Odoo 15 community edition
+
+Installation
+============
+ - www.odoo.com/documentation/15.0/setup/install.html
+ - Install our custom addon
+
+License
+-------
+Affero General Public License, Version 3 (AGPL v3).
+(https://www.odoo.com/documentation/user/13.0/legal/licenses/licenses.html)
+
+Company
+-------
+* 'Cybrosys Techno Solutions `__
+
+Contacts
+--------
+* Mail Contact : odoo@cybrosys.com
+
+Credits
+--------
+* Developer: Anusha @ cybrosys
+(v14) Jibin James @ cybrosys
+(v15) Aneesh @ Cybrosys
+
+Bug Tracker
+-----------
+Bugs are tracked on GitHub Issues. In case of trouble, please check there if your issue has already been reported.
+
+Maintainer
+==========
+This module is maintained by Cybrosys Technologies.
+
+For support and more information, please visit https://www.cybrosys.com
+
+Further information
+===================
+HTML Description: ``__
+
diff --git a/hr_payslip_monthly_report/__init__.py b/hr_payslip_monthly_report/__init__.py
new file mode 100644
index 000000000..7ba707783
--- /dev/null
+++ b/hr_payslip_monthly_report/__init__.py
@@ -0,0 +1,25 @@
+# -*- coding: utf-8 -*-
+#############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2021-TODAY Cybrosys Technologies().
+# Author: odoo@cybrosys.com
+# You can modify it under the terms of the GNU AFFERO
+# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details.
+#
+# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+# (AGPL v3) along with this program.
+# If not, see .
+#
+#############################################################################
+
+from . import models
+from . import report
+from . import wizard
+
diff --git a/hr_payslip_monthly_report/__manifest__.py b/hr_payslip_monthly_report/__manifest__.py
new file mode 100644
index 000000000..bbd7d55be
--- /dev/null
+++ b/hr_payslip_monthly_report/__manifest__.py
@@ -0,0 +1,51 @@
+# -*- coding: utf-8 -*-
+#############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2021-TODAY Cybrosys Technologies().
+# Author: odoo@cybrosys.com
+# You can modify it under the terms of the GNU AFFERO
+# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details.
+#
+# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+# (AGPL v3) along with this program.
+# If not, see .
+#
+#############################################################################
+
+{
+ 'name': 'Payroll Advanced Features',
+ 'summary': 'Payroll Advanced Features For Odoo 15 Community.',
+ 'description': 'Payroll Advanced Features For Odoo 15 Community,'
+ 'Payroll-Payslip Reporting, Automatic Mail During '
+ 'Confirmation of Payslip, Mass Confirm Payslip ',
+ 'category': 'Generic Modules/Human Resources',
+ 'version': '15.0.1.0.0',
+ 'author': 'Cybrosys Techno Solutions',
+ 'company': 'Cybrosys Techno Solutions',
+ 'maintainer': 'Cybrosys Techno Solutions',
+ 'website': 'https://www.cybrosys.com',
+ 'depends': [
+ 'hr_payroll_community', 'mail',
+ ],
+ 'data': [
+ 'security/ir.model.access.csv',
+ 'views/hr_payslip.xml',
+ 'views/res_config_settings_views.xml',
+ 'data/payslip_mail_template.xml',
+ 'wizard/hr_payslip_mass_confirm.xml',
+ 'report/hr_payslip_report.xml',
+ ],
+ 'images': ['static/description/banner.png'],
+ 'license': 'AGPL-3',
+ 'installable': True,
+ 'auto_install': False,
+ 'application': False,
+}
+
diff --git a/hr_payslip_monthly_report/data/payslip_mail_template.xml b/hr_payslip_monthly_report/data/payslip_mail_template.xml
new file mode 100644
index 000000000..33dfdbea1
--- /dev/null
+++ b/hr_payslip_monthly_report/data/payslip_mail_template.xml
@@ -0,0 +1,22 @@
+
+
+
+
+
+ Monthly Payslip Email
+
+ {{(user.email)}}
+ {{object.employee_id.private_email}}
+ Ref {{object.number}}
+
+ Hi,
+ Here by attaching payslip details of this month
+ ]]>
+
+
+ {{(object.number or '').replace('/','_')}}
+
+
+
\ No newline at end of file
diff --git a/hr_payslip_monthly_report/doc/RELEASE_NOTES.md b/hr_payslip_monthly_report/doc/RELEASE_NOTES.md
new file mode 100644
index 000000000..886bb0de1
--- /dev/null
+++ b/hr_payslip_monthly_report/doc/RELEASE_NOTES.md
@@ -0,0 +1,7 @@
+## Module
+
+#### 12.10.2021
+#### Version 15.0.1.0.0
+#### ADD
+- Initial commit
+
diff --git a/hr_payslip_monthly_report/models/__init__.py b/hr_payslip_monthly_report/models/__init__.py
new file mode 100644
index 000000000..a47a0d167
--- /dev/null
+++ b/hr_payslip_monthly_report/models/__init__.py
@@ -0,0 +1,23 @@
+# -*- coding: utf-8 -*-
+#############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2021-TODAY Cybrosys Technologies().
+# Author: odoo@cybrosys.com
+# You can modify it under the terms of the GNU AFFERO
+# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details.
+#
+# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+# (AGPL v3) along with this program.
+# If not, see .
+#
+#############################################################################
+
+from . import hr_payslip
+from . import res_config_settings
diff --git a/hr_payslip_monthly_report/models/hr_payslip.py b/hr_payslip_monthly_report/models/hr_payslip.py
new file mode 100644
index 000000000..300027258
--- /dev/null
+++ b/hr_payslip_monthly_report/models/hr_payslip.py
@@ -0,0 +1,76 @@
+# -*- coding: utf-8 -*-
+#############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2021-TODAY Cybrosys Technologies().
+# Author: odoo@cybrosys.com
+# You can modify it under the terms of the GNU AFFERO
+# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details.
+#
+# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+# (AGPL v3) along with this program.
+# If not, see .
+#
+#############################################################################
+
+import logging
+from odoo import models, _
+
+_logger = logging.getLogger(__name__)
+
+
+class HrPayslip(models.Model):
+ _inherit = 'hr.payslip'
+
+ def action_payslip_done(self):
+ """Checking auto email option is set.if set email containing payslip
+ details will be send on confirmation"""
+ res = super(HrPayslip, self).action_payslip_done()
+ if self.env['ir.config_parameter'].sudo().get_param(
+ 'send_payslip_by_email'):
+ for payslip in self:
+ if payslip.employee_id.private_email:
+ template = self.env.ref(
+ 'hr_payslip_monthly_report.email_template_payslip')
+ template.sudo().send_mail(payslip.id, force_send=True)
+ _logger.info("Payslip details for %s send by mail",
+ payslip.employee_id.name)
+ return res
+
+ def action_payslip_send(self):
+ """opens a window to compose an email,
+ with template message loaded by default"""
+ self.ensure_one()
+ ir_model_data = self.env['ir.model.data']
+ try:
+ template_id = \
+ ir_model_data._xmlid_lookup('hr_payslip_monthly_report.email_template_payslip')[2]
+ except ValueError:
+ template_id = False
+ try:
+ compose_form_id = ir_model_data._xmlid_lookup('mail.email_compose_message_wizard_form')[2]
+ except ValueError:
+ compose_form_id = False
+ ctx = {
+ 'default_model': 'hr.payslip',
+ 'default_res_id': self.ids[0],
+ 'default_use_template': bool(template_id),
+ 'default_template_id': template_id,
+ 'default_composition_mode': 'comment',
+ }
+ return {
+ 'name': _('Compose Email'),
+ 'type': 'ir.actions.act_window',
+ 'view_mode': 'form',
+ 'res_model': 'mail.compose.message',
+ 'views': [(compose_form_id, 'form')],
+ 'view_id': compose_form_id,
+ 'target': 'new',
+ 'context': ctx,
+ }
diff --git a/hr_payslip_monthly_report/models/res_config_settings.py b/hr_payslip_monthly_report/models/res_config_settings.py
new file mode 100644
index 000000000..51e4d7bcf
--- /dev/null
+++ b/hr_payslip_monthly_report/models/res_config_settings.py
@@ -0,0 +1,46 @@
+# -*- coding: utf-8 -*-
+#############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2021-TODAY Cybrosys Technologies().
+# Author: odoo@cybrosys.com
+# You can modify it under the terms of the GNU AFFERO
+# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details.
+#
+# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+# (AGPL v3) along with this program.
+# If not, see .
+#
+#############################################################################
+
+from odoo import fields, models, api
+
+
+class ResConfigSettings(models.TransientModel):
+ _inherit = 'res.config.settings'
+
+ send_payslip_by_email = fields.Boolean(string="Automatic Send Payslip By Mail")
+
+ @api.model
+ def get_values(self):
+ res = super(ResConfigSettings, self).get_values()
+ params = self.env['ir.config_parameter'].sudo()
+ send_payslip_by_email = params.get_param('send_payslip_by_email', default=False)
+ res.update(
+ send_payslip_by_email=send_payslip_by_email
+ )
+ return res
+
+ def set_values(self):
+ super(ResConfigSettings, self).set_values()
+ self.env['ir.config_parameter'].sudo().set_param("send_payslip_by_email",
+ self.send_payslip_by_email)
+
+
+
diff --git a/hr_payslip_monthly_report/report/__init__.py b/hr_payslip_monthly_report/report/__init__.py
new file mode 100644
index 000000000..ac5e36282
--- /dev/null
+++ b/hr_payslip_monthly_report/report/__init__.py
@@ -0,0 +1,22 @@
+# -*- coding: utf-8 -*-
+#############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2021-TODAY Cybrosys Technologies().
+# Author: odoo@cybrosys.com
+# You can modify it under the terms of the GNU AFFERO
+# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details.
+#
+# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+# (AGPL v3) along with this program.
+# If not, see .
+#
+#############################################################################
+
+from . import hr_payslip_report
diff --git a/hr_payslip_monthly_report/report/hr_payslip_report.py b/hr_payslip_monthly_report/report/hr_payslip_report.py
new file mode 100644
index 000000000..501dcd34c
--- /dev/null
+++ b/hr_payslip_monthly_report/report/hr_payslip_report.py
@@ -0,0 +1,81 @@
+# -*- coding: utf-8 -*-
+#############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2021-TODAY Cybrosys Technologies().
+# Author: odoo@cybrosys.com
+# You can modify it under the terms of the GNU AFFERO
+# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details.
+#
+# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+# (AGPL v3) along with this program.
+# If not, see .
+#
+#############################################################################
+
+from odoo import fields, models, tools
+from datetime import date
+import time
+from calendar import monthrange
+
+
+class PayrollReportView(models.Model):
+ _name = 'hr.payroll.report.view'
+ _auto = False
+
+ now = date.today()
+ month_day = monthrange(now.year, now.month)
+ start_date = fields.Date(string="Start Date", default=time.strftime('%Y-%m-01'), invisible=True)
+ end_date = fields.Date(string="End Date", default=time.strftime('%Y-%m-' + str(month_day[1]) + ''), invisible=True)
+ name = fields.Many2one('hr.employee', string='Employee')
+ date_from = fields.Date(string='From')
+ date_to = fields.Date(string='To')
+ state = fields.Selection([('draft', 'Draft'), ('verify', 'Waiting'), ('done', 'Done'), ('cancel', 'Rejected')],
+ string='Status')
+ job_id = fields.Many2one('hr.job', string='Job Title')
+ company_id = fields.Many2one('res.company', string='Company')
+ department_id = fields.Many2one('hr.department', string='Department')
+ rule_name = fields.Many2one('hr.salary.rule.category', string="Rule Category")
+ rule_amount = fields.Float(string="Amount")
+ struct_id = fields.Many2one('hr.payroll.structure', string="Salary Structure")
+ rule_id = fields.Many2one('hr.salary.rule', string="Salary Rule")
+
+ def _select(self):
+ select_str = """
+ min(psl.id),ps.id,ps.number,emp.id as name,dp.id as department_id,jb.id as job_id,cmp.id as company_id,ps.date_from, ps.date_to, ps.state as state ,rl.id as rule_name,
+ psl.total as rule_amount,ps.struct_id as struct_id,rlu.id as rule_id"""
+ return select_str
+
+ def _from(self):
+ from_str = """
+ hr_payslip_line psl
+ join hr_payslip ps on ps.id=psl.slip_id
+ join hr_salary_rule rlu on rlu.id = psl.salary_rule_id
+ join hr_employee emp on ps.employee_id=emp.id
+ join hr_salary_rule_category rl on rl.id = psl.category_id
+ left join hr_department dp on emp.department_id=dp.id
+ left join hr_job jb on emp.job_id=jb.id
+ join res_company cmp on cmp.id=ps.company_id
+ """
+ return from_str
+
+ def _group_by(self):
+ group_by_str = """group by ps.number,ps.id,emp.id,dp.id,jb.id,cmp.id,ps.date_from,ps.date_to,ps.state,
+ psl.total,psl.name,psl.category_id,rl.id,rlu.id"""
+ return group_by_str
+
+ def init(self):
+ tools.drop_view_if_exists(self.env.cr, self._table)
+ self.env.cr.execute("""CREATE or REPLACE VIEW %s as ( SELECT
+ %s
+ FROM %s
+ %s
+ )""" % (self._table, self._select(), self._from(), self._group_by()))
+
+
diff --git a/hr_payslip_monthly_report/report/hr_payslip_report.xml b/hr_payslip_monthly_report/report/hr_payslip_report.xml
new file mode 100644
index 000000000..54c885b8b
--- /dev/null
+++ b/hr_payslip_monthly_report/report/hr_payslip_report.xml
@@ -0,0 +1,78 @@
+
+
+
+
+ hr.payslip.pivot
+ hr.payroll.report.view
+
+
+
+
+
+
+
+
+
+
+ hr.payslip.graph
+ hr.payroll.report.view
+
+
+
+
+
+
+
+
+
+ hr.payslip.search
+ hr.payroll.report.view
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ hr.payroll.report.view
+ Payslips
+ pivot,graph
+ {'search_default_year':1}
+ This report helps in payroll analysis. This helps you to check your pay slips and sorting it out from different group
+ criteria (Employee, Job title, Department, Company, Pay slip etc.).
+
+
+
+
+
+
\ No newline at end of file
diff --git a/hr_payslip_monthly_report/security/ir.model.access.csv b/hr_payslip_monthly_report/security/ir.model.access.csv
new file mode 100644
index 000000000..602a1d38f
--- /dev/null
+++ b/hr_payslip_monthly_report/security/ir.model.access.csv
@@ -0,0 +1,4 @@
+id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
+access_hr_payslip_monthly_report_manager,hr.payroll.report.view,hr_payslip_monthly_report.model_hr_payroll_report_view,hr_payroll_community.group_hr_payroll_community_user,1,1,1,1
+
+access_group_user,Access User,model_payslip_confirm,hr_payroll_community.group_hr_payroll_community_user,1,1,1,1
\ No newline at end of file
diff --git a/hr_payslip_monthly_report/static/description/assets/icons/check.png b/hr_payslip_monthly_report/static/description/assets/icons/check.png
new file mode 100644
index 0000000000000000000000000000000000000000..c8e85f51d612c626d167e4def7bccdbe1d6d17bd
GIT binary patch
literal 3676
zcmcgvdsGuw8jpg4iY%zK;)6~HwPkUVnaO)JDiRS~W01#+Tdm%CgiJ{?ab|#k+GElB
zs)m`Fq^5i_*c#09+YQPFKr}nwM5Uo-TAL;V~rhtuFtx>&0g#C#25Hk&m#sUb-WA~31MBLg4ikrG=iSUHIid9Tb1
z9z?MSXrWNHppa=`3T|)6tVasU1O?OhfLBAPab-$=Aj^bs-a^skcg`{z&c(Sok1Rnf
z5yC>1Y_<@*U9)a?2rbEDiXfxl+}cG;IVE0Blf_9wp~!G!ilE2DR$`Kz#XXhg1%^X-
zXt38Q$b#e)IuIe${frbc@94mx((??I^YI-(m7WmPOQnh&kOeVE5L~UXliA7*Aqh2!
zygrHdutKqvq)a?GfU^Rbv!F1L2n;u3q&9~jDV>4R8gLYj5g8$Gdf5;PM8e91VHO}tH2a0L8XijPj4WT@OfXUAT
zJnhf*@K9tDMU;r4{0y>T@q!c#dc9U3Y|rFt)F2wJDdXk4$u2;9M#3=B({jWE?ZT8AH%
zg#Ynm7{OD-iERSQ3q%07QcjdCs6!Oo2=IDcJmb$VO_7HU?ogqWL}USZT7WtfjpanX
zO$@a45~6_o7yUgq;$EyC{@)i#qZ|N_R=_bJvw}bMOMXYUaeIWvk1PbW5LY2pwz5%~)8GxdCY^PssXRx5eoz
zoO^~fem~r``@rOd6TkZU8il$gE8}Oz-;cgl{mIK`Pdv;QZ%-|s
z|GM{J*isd7WKnONICtpgNp#AiUeQbceyF&&T9d++kK5LH+xFP3BM=)2;)S)A$sTiU6of)b*Y#j{o#0g@7kQ@$&^?Xwd#C)
z*?`OMhxblls7-52Hx9e<G~?b~~OYW?LWQyXXH
zri{BfJ2omM>(N5CCh8@jy!2dILd_cwrrn5}-u1H`e?0w$}WEW5P9XVW2;W}-E(N#mKb@>!_?9;7EcMc
z{$}01S5Kra9GY1>s2abs9zQ>M^!2#Wa|ZgdtCP$7HxD_{=b{ky&9Q_CH6!ldap(T*
zf}8Jcd_*M`3GY@f|5wb3WaRUu4KwLk^ZH)Cx@g9Gqrd$0VaEMIzioWH^;l}xdpp8T
z8}{xXW=4I#;LY(#$DH;dANHu-yZ<(gnNzG17ONUnb$vS3
zb*fD2Tp8xe4);ae*%)~z`kF2F+Q6#SXw|Se#$N^e?zR2i*OIq99+Iy7|H~LN!Mc6)
H^s@f|!zCx=
literal 0
HcmV?d00001
diff --git a/hr_payslip_monthly_report/static/description/assets/icons/chevron.png b/hr_payslip_monthly_report/static/description/assets/icons/chevron.png
new file mode 100644
index 0000000000000000000000000000000000000000..2089293d6ad94cfc015cc0a8c07bb03efd4a689e
GIT binary patch
literal 310
zcmV-60m=S}P)fLA$g5CzAh99{FF(tp
zz^tD4))$4c^0SZV9_X~njUYum@4i`~v!i=obU%PG(6q`OMK>{HG>r}*tHKc2@w+qg
z7|l>B76qkX(U2E&K_1Nf!JbCtpGzwGSJ~CkU>QcDY&q>lnbwQm<|2>>iH5vL6qJIP
zp;W{K-Snrb@Z2gLMVZAQQ5jU>DXT)0mtk@hpq-Sb{2q6{0V4Z;tNXT3P5=M^07*qo
IM6N<$f_?6Y+W-In
literal 0
HcmV?d00001
diff --git a/hr_payslip_monthly_report/static/description/assets/icons/cogs.png b/hr_payslip_monthly_report/static/description/assets/icons/cogs.png
new file mode 100644
index 0000000000000000000000000000000000000000..95d0bad62cf22361b148e1d6cefe2ceab605955d
GIT binary patch
literal 1377
zcmV-n1)lneP)lH5n~Zj$eiG;8wLI!*reT1_VfljL=sA}=JrOptsX2RfC&)+l61t|6JPeb$mZ
z6v1wNClWXiLSlOh+mR64U7bjvhva*zJ0HRRaDbgl@(q$*^PYf*$fE&7)c&&!Rfm?&yLyFbQ?2&R6W6v@rWu!;bZU9|_!
z4Je^Q5$r!vH2{)*ok-wK1%Wz7TG;LgvHhtN39JtxLC&_yAzs|bhFaWtFLrukMR}l_
zP~>z0rF26#(W+H@aXx?6lf(f454Uv()R+QrlZafX3t}g5wp6-Blj;u$XaE#h->+xC
z005Fp0GtMpYoBiuo)VG0UP0_GltOix%1(%-bKgbA0o1pB3&6VoRs+}%fFWUi1MmQV
zmjH~{WZwYT7ng4njIz1iD4PuYIM&NvU6NVO4kNuj`IZ(nzL#XTM^~@uFGT>-aT6dh
zAgaP68%9MDu}+cu7uohT0RHqW9d8lhD-kJqd^i9;Rw)OT!X*D$Y?MvID9;=%I@23T
z$~m4}V3f^0BG}d<_%@?#emG&81LI_NvTQ!T$gzGzil=|K?VCM%e*mZ`d`!0R--N(>
zX_T!|fX{f;z6ZDfz>JL{bFu7UqLI0BExN7c!HmOYg;$V?QB4==-_|4!R<1p=W!b
zXM0?cbrc+q5buUe#ZpdV?VzCxk-Rm+);3(wb8q`(#{e8FI_3z8RwJLQk>}&nRHK0|
zNhvzkFo4$qbT=sr4i@y>Bdr`7j(HfwmH^uc7xH9%r%nnDB_ty3>&opGxGMoP9kf;<
zd%_$N;{SC3V62>WZcCaxpx6frT|FlOj5R5zGbh3vrqY>j1H`{Bkt_d-PcIzGcOeS&
z0OimpMB04AZ5M$FkksHx)9_uX*rDTKrDER^Aij2r>}i8vD4G(OFwKFYV|^yVP5w23
z`asH~GaMjZ={ojt!?Lb#lcy352^1ZBLpqIV|5
zLfz5N09ce%03XI(J-h5`5#>QuTr`wWt<}xj9|=Odm?U{1pyiQF6&>pYfaOUB0`PfX
zSMHvKeKvO?5vfw7-bq{v4vAnDh^?3%L|Q@w6Pmd9iD(;0IfB{ww?bB5NS1mno@&9c
zXC4%!P8Bklxq~Ew%%g071mXR`&iMY{dhWR!JtLt}njRD_-Cxi%N0X&qj~Nq_rI}Yn
za8e0TJ(H#J00000NkvXXu0mjfE=YKA
literal 0
HcmV?d00001
diff --git a/hr_payslip_monthly_report/static/description/assets/icons/consultation.png b/hr_payslip_monthly_report/static/description/assets/icons/consultation.png
new file mode 100644
index 0000000000000000000000000000000000000000..8319d4baa09d6afac9362dff318f63a0f96f555e
GIT binary patch
literal 1458
zcmV;j1x@;iP)fo-7eN@Nx;}%h)9e^5-C?E
zsEH&b3Z#%2B-}L7v^LRRD&QZ8A<7MshM0yxF7rU)x4)gW;*vW;3
z#hX3&)M|C@Hzy`0dbVF71Cp#6E*?;(1E5ZgN|t#IpsRseZTS;fmL2OZ%G1F2%+iN5
z?1unK-3Ni+4&6W$B|ic7=Z$mSG;E8PyRX^_00(R
zZhUjoBfjtdy_aS#1FePDP8??a5dOFCh
z*MWRv)G@zc9y@oAQ6L5)gF{}MFZh1tt%7=2kn>q6`mgJDye)VpNyeX>nXy(;k)8%5c~P{u8)+YKOVK2Ka7pM_X}a`O
zk#~c24MYp^y)u3b+*+!2>R#%t}=?wy_<
zpYKn-%7CQNC`x``VuKC^f_Kx@zC4JDHDk0HCO^O4#RC{@^;{j6<{9
literal 0
HcmV?d00001
diff --git a/hr_payslip_monthly_report/static/description/assets/icons/ecom-black.png b/hr_payslip_monthly_report/static/description/assets/icons/ecom-black.png
new file mode 100644
index 0000000000000000000000000000000000000000..a9385ff13f696e96d517a56ce2b2ff7d282c748a
GIT binary patch
literal 576
zcmV-G0>Ax5}Z)a!cc0ra5uqqg5lnhXD
zTbP_`oKdQ!!sJxrjN&KdC#M>hn6H53Z@_@W06J)|I<5r7bODP7TpFfK@D$$y9ro1J
z_#n7|3NU9+Eg3t67i6kk1G7mAm}&y~>LPq;59$DNz9rz_PKFAe2JQYcbvs+lNHw^F+;#7cCP*z(AJ2&$C0H1W+ddn*~CoC?@7snGmV!9
z<==r}6|tyA>`?)>6k{b=2d<=(_5rWxzxsKgUs~Q{+du)!y5s>SG|Pu>T2kaR7OcV&-NYURtom{p?~^a9V+
z7O-a3C?=EC%HIJ!R*hUb72^tZzf-`AuuDDSkJJnF?!xs=oN3JbnbTGPz&Os^S>dl1
z(84w;APbb-b_k@KC|~4YkNmz@^KPH*e34{*2J>2yF9_24A}NIoShST-^{Ye_(vLmm
zd~pgm3F$kIkw;g)NYXe9tbV#5fWaonr$h>8ffe1h+u&f*`C7F2cl-b`l5Ye!`u+O=
O0000##3Xw+{I#MbTYoZ-I?3FUBiCh!QRfyd*8S0
zzBhAFP*6~?-lzdrfLY+Hwprk^9?LDGz;$2=SdFk>z#U*LBaI?QQKD9e7VcUbxCb21
zK<^(;Xc0+8N7+;0G_au`qDwm1ixh;r_7XS;lzSn3Ks%r7fpFK}0T+SIX$T+G&OY=(
zxNCJ_5*Q8nGpO{QD=gKm=?w>jvsI4EeCbfxmVgL)==l)8DLS{4AE!e?Z8#kPQdt|>qP=~
z0Jlc(3Gg?f*M1lL)`j_1YkWB%UdQh2b66h*ZnCzsy7n_B0ckvzW`}^r+Q1XwyiR6N
z+Zb>`kF^u{kzSF3ZWCxE2%MHJ3h_5t<4fjdNthVL50AOsk~o%60t*2`LXkdVyV0$h
z3!el&2Fvm1lW@sw^on`m-Vx`wwB6`P4R}rO
zE6^)ow-A5YnfJ&y0Ye!WLUqzpz$M^$fY4`p?Mdxxh|Yg2?gAd7ipc|DXJ`UZ90Kkq
z5IzMQOgng*oJH-CT;UDiOoqC=IL6w|-va-Bgt_N1s&c*2*98Ry1?!OCgV~htO4|
P00000NkvXXu0mjf_K8qG
literal 0
HcmV?d00001
diff --git a/hr_payslip_monthly_report/static/description/assets/icons/hotel-black.png b/hr_payslip_monthly_report/static/description/assets/icons/hotel-black.png
new file mode 100644
index 0000000000000000000000000000000000000000..130f613be065b02c7b942088c4d90db37ed8acf3
GIT binary patch
literal 911
zcmV;A191F_P)sqyP_dDm_d+wti*Wu|Jegr#e_!#{@68vYp!)bLlu6Zk`LG>4b)
zEtVJfV|c&7EyFk1UEqgt9*;Njw1VZ>g|{(-Ih??2*p8dxr0-%j^2hNC#&IhqaU^nc
z@$+Ql#-r}>$jwGuyQA&xajp}QpNYQgQvRX3un9j@9GJrg7>xWw!mm^1U#(2=6#lMo
z|KQokEyJGV*$a3$^4H^V!vBQLO`Y#xXJTY1;rCX!>CE#}6@DtiPgnT82{)9?y|d)x
z(wYD^;79DoMQqIQU*HgKi6iBw;@FUI9sNVmM#^uDbMB8mr2J(psR`f_e2lfYQ^?Pc
zD*O(-j!VKyGmVpx8^nFlK|*>Q!@2nVHmt#iLfSnlYCO2
zdFMZq-%%fsUm+%4DcBAM@nlB#OJUtlu?=@5vKyk0-(~c{nEb2TSI|FD&|jC)U02XO
zP_VtPpg&ess@n%zfz}7m^l)@9-pa_g6!iB9hqNkI7IY^HwJpfkw1vjiEIS#Wpt0?`HcKIp}DC=(*S1hNk)FAp#M3(Ph`2hp<^Rwd!~tF
ztxuuW2aq1-#_&}}?@!(9I-!5fU3;7r`rs;-;>L{bUqXMKVkK5&4iq?1871GE)(+iE(2hg+zdgWT>s_5?n3yszX(6k07r<#7z+xi};Iw>y+AElqG*-EPDTmCjr_EtL
l9oc+vR{1Wfk3Rkj{so);rk=IPI$i((002ovPDHLkV1j5u&D{V1
literal 0
HcmV?d00001
diff --git a/hr_payslip_monthly_report/static/description/assets/icons/license.png b/hr_payslip_monthly_report/static/description/assets/icons/license.png
new file mode 100644
index 0000000000000000000000000000000000000000..a5869797ecaa7583c552c3bb7c9bce5910df78e0
GIT binary patch
literal 1095
zcmV-N1i1T&P)?DLX
z+1Y*BO%2WWvTu05Ki}`p`@J{sJ=nx1)&%L)P@|a%i#deKSU(9Ndee~mRtn|o9hqkt
zsH)g_?j-1Oz*{rH&X9nd_6n5~S%#SclCXXhkhBHYOR<={+%T9HHm_+Rj=iH!?az_sX`LfziH+4|52SPxCd(lFQ#&
zy}6O4ybXVUJ6qGPGqH9kZO+TqO1)ZNXdyA~iK
zjU@8F177OZcQq)~$=N9vU#B7D6{_#K`1J!DzKA!x0H-08MD^1m@!Cu1^1Ay68A9JiW%_
zS;VTfBGKSzreWdMUn09>mmHnKrHDNn2a^cnnZ|MXDzMjuSf_9uLfT_HXSmEliE3?k
zXG5qm?Zm1JIMsm2cnJK_V=hkE@UzgSfJcoDFQBI%WSu~xnTe+6cI1o%43w{m$eK<(
z*6j^w>_69x>X$9vq!B%D)n2i2Fx3eCH`fw(T?A+}`>a(i3QK#4M*6$U2tPE#;4RnK
z>mxwS8DJZNZzlfX70^76^jmNLyX*lJ7YEWlH{
zcu!SGBHwAI5D}|zA|-av#xj{i{y7^5SAdUFv(H6FZ!P*Haqu>f2gqsj_qOq~2-w*F
zS(Vp;I|v^e^)8@E=esPmmg4ZVjs4>wpR8c|FGJSOYN$8)|IM@rI3xAI#QT>#L{?m_|*Crlo{0DLwqmu7G?&JUf
N002ovPDHLkV1nf|8?OKW
literal 0
HcmV?d00001
diff --git a/hr_payslip_monthly_report/static/description/assets/icons/lifebuoy.png b/hr_payslip_monthly_report/static/description/assets/icons/lifebuoy.png
new file mode 100644
index 0000000000000000000000000000000000000000..658d56cccfbc0e46060ad4850b9fc60c656baf18
GIT binary patch
literal 1199
zcmV;g1W@~lP)K~!jg?OD%n8$}d;Z#;H3_Ux`{Y$>IOhC`GK2Z&mUBGl%91P8y|S)kfJ7y@Fv(h8fJTCuS1y-dl~V3Bn@u?h-V-e;5wUK!dy#X#2mo{Oe@Ws202*N!
zUYebq1*Oz(7=|0J>pn(AT~tHi06fpT5Cp+8=UfzYF~>QdlTyCudEUcDqp?-Q3ClZy
zh`8_jS1ilAN<>A)|0jSkVOiEy-}kQ++2pw<5YcQ91S^cOdS0R|Fvb>wAgB}3_lVdx
zo@Z(pi+`PnCN6%2qaJh2n$9r_fQWby1S^wxWem84@B1sJuai*#Qp(HIeDX(8DwXO|
z%F8CUnE~{Az4MH*g_Fz52gcZf=Xn=0?a~H`hylQ*oZNq<_}k0ls8Xpc6H#iiO$}f$
z7+lQz-Xr3jB4gvg7!%!YH+A(>1Bjw%(UgpcwAQ*+tJSUpz&ZeoCZ;U_SQA3r;GDOJ
z$T;)HSw0bo%R@wVuh)CagoKDRBK{zR*fFtJO3f3|HAFNzMEd>yw@I~AqJ#bY{dp7T
z002bv$W%N4fDmGbh<-J-uT(0DT8^y%5pku|M*#3XBv+M(*h9qcYPH&RL>!t5ih0Vt
zUhhjHdIJES%P?;Pz-K~;bwmtD2ac^kEdHi}cmRNNMD(sw>ZYmi5uOi;=pD!w4*<{v
zfK{c`>d}E?De;q!JM+w*2G6)Xkk{#{&dFU)|KBh!fb9Z)o)nlf5uR}Y
zd|trusm)0`Mppsg1Ndk6r(q8O?g$}n6g)=1h>y{88Rl&O_*4k-$x*rHnJTQfhuU9KK{~
ze{gV+s3kFgxc1mJAwWb%MAv-ZUm~J%N@uP-7z~#3)Ik8So7O{0t+hLy&I_FLR}6^`
z@phbH$Kh*4{3egHFbsdG*XzG0ji){Z*L5FjtyLbvcvB|f%{;ykQM#_XnP!t303zyA
zsq`QZDWumnCUwuh==b}N5RuYsGT*~mt@c!Fo%$4}0j>3>Nw>~uBiXinKZ>Hx$z_=#
zilR=d)w*wDYuue4X>6r_BNNeAsf38{WsIw8wR+FAJ7-+XA!5H;t=^mFN<>lA$s-;h
zXEln5eaCU`PGe7Ktv4OVxtm8kK!NspT#NkddEOtDN@bZbcA|D8B1!;w=r~T1>a_U%
zK%>#vBBJeXx4STU!I1-p7aW^eM`ao&dc|bh_WW=-{0Wl3r~lMizvej3Q$);_Ad@h$
zFS2H{DJ{#|0D#*mX186}-I$d4sUW^)U5g92(PHl7XX2Xm3}<-8@HhS0PsfeRnq&X~
N002ovPDHLkV1i;vH)8+*
literal 0
HcmV?d00001
diff --git a/hr_payslip_monthly_report/static/description/assets/icons/manufacturing-black.png b/hr_payslip_monthly_report/static/description/assets/icons/manufacturing-black.png
new file mode 100644
index 0000000000000000000000000000000000000000..697eb0e9f2c06e40c9c720df7b80b8f6fac63b34
GIT binary patch
literal 673
zcmV;S0$%-zP)xK~!jg?U=D^6hRope;$f(2!dRQAe>DQQeT=B*H{T+6R=CPGo?i;
zwb3GCV`G=p7B(h-MB0d*S1Kujl2}+MniNSfJM7zGW^Qgb$r_ypLnbqCci)@+?wfB1
zGBPqU+Qfwk`Okp9XM78I>x?Y|Ll1WcSarsR1>c9|Nd%6=HgM!=YaZ@efV=JCJ_>M;
z#tG_7>fmofHqbV*fwqwi6!_g1x2b_In2ly7f%_eJ0o+aC9sujWOnqs7*p2KnX7jli
z;o6OCA9xO2jd1No_NTb+#z~0v;T`Z0zwl|`n*9F~cmiDUaJy7Xk_W&W{K7lHtvX^;
z(Zj6p4`48cdl|FZyT#uaI>0^PBmPpQF;uv%TS5j@xaEcnsPI^=RU1CxAp>3Du_HWW
zz$g4f4a9`I24ccp10CQ#@F~J=WS|GU0)9pwVB0W3xNXY`!W$Ww23{u$x9zmJwG4zl
zNZM#Y1GyGz8>t31fw`hBIdgN;Ml!xCHr9#=MoC1iB|&YhBqA8G
zu?X7OSOnBURJ8DgX)FXmEY-qi6Qc+|;sZf^#TXGy#8}J>ckeKJckY?{hP0VaJzj0X8RhK^60Y~Xz{&a9?$@^
z`*!wmV5Zy_F}!tF1}J$Bj0DI7)BwvuZXk8w60j{qaRkSJJyKzx5OU#xRG|a+LWHFb
zOd6COC^gCslp0b8n(}BvP?neGfxW0~`7uN}P!H_L!mj|jfWyE~sgms!uaGmXN9#VL
z&o{&wH`(XFRQ($pDUuL+1@xib4Gb0l2lVkR;3DeD8LS7k>f__UV1%mzx>4a$5ZEDf
zFs9!N;)lCQb0feM2j7i5gwE^pjd8|FLg;tGbr&DyCbIB3L*hWI<61T88h);WH`i)_
z#w>i!kj#Nyz$P-ET7zx?XMsbOOtb!-1`Gk8B3ufXFR%lU=Ye?%_gs{PuhlItkT`G~
z*iYsNGy_*qE6PdWv?bF996`l@7wT=!Aca~OHVbSKIdC1d{b6GWSPEPQ9$MUMlmo*+
zzeDyaLI);$B1?p11lFKJCR&>;B)yV!00U$$m*(l#18adt5v~eYC$PgCrL2V#6Pa`s
z8YOcQ*O0DT0KSqr0(GRrbsYE};VKANl_YcE0xA?5BdrDarup5doDk*PG&c?`vA8VaO=C>m4%I|X)lqm$yVLT0P+oIdY}GtOrO29vww9VSooqbBNnh
zcu(I|YQ)0zb`*zp)aRe-TomMhG1NxyHQX;fPUPZ16kAXwMG|^ZYrnxPV4v0J8EW^T
zsOZBl9Hv`x%N>1ggc$PASEFSIN{zAurN)2jfOsd(fgd5lQU?Y?lv>E=CtGh+0(VGG
zWW%UGZ@o!Njc1h3(oB}@JmzAS!6!o=#PN)%o0h~rfH{E-AX#fBK07*qoM6N<$
Eg49ZXX8-^I
literal 0
HcmV?d00001
diff --git a/hr_payslip_monthly_report/static/description/assets/icons/puzzle.png b/hr_payslip_monthly_report/static/description/assets/icons/puzzle.png
new file mode 100644
index 0000000000000000000000000000000000000000..65cf854e7ea72e36142ffc1a407bf2b8355cc85c
GIT binary patch
literal 653
zcmV;80&@L{P)9a`;n_Do>R91)@YfrZ;WIBYI)WE@w%y
z7IC%30~nX`B(&|Bi6!}ZGuBf8IAM^
zQA&SX2=P2@*<+`kI7+k$-1A&gaYV-{Ks?g2#0TH?II!as;HNYK-X1sS_e0Z#CLzvF_5wZZ}7k)9y#mQhdC00000NkvXXu0mjfog*sX
literal 0
HcmV?d00001
diff --git a/hr_payslip_monthly_report/static/description/assets/icons/restaurant-black.png b/hr_payslip_monthly_report/static/description/assets/icons/restaurant-black.png
new file mode 100644
index 0000000000000000000000000000000000000000..4a35eb939cf065c6f8cf83781a15f357348769da
GIT binary patch
literal 905
zcmV;419tq0P)?`PC*pLe{WG*jTWtl`Uu)I!h(oI7q&uZZ6pM-kw|Ur
zMPftz3s_jOvBN@wkko<{5h@lmjYJTFNYSdk7WZDgxt))5&f8mkk}hV>Idh-qo-=c2
z<}K*Z0h|JE0{hdxYd{s)k+v@ZXMrAIo@0zw;4N@F7c(R11%8u|tpdl>{-S`voX=~=
zI9qe}3E(2Iz)Gr4;kyl(s~mqF&>XN=fMdX2piMb8pcAmd@&I7Dz-K#&h$ije8Ud@c
zgQt)P0N6-UPAX^wv}*@XAr$~{fXT%{gxOL;d7J^}NS&nu>IqNA5SA(ZHvoI3&Qbww
zBrApmt%jI`Qb(zPr3MliEX(6AgxqFAfF%PhK$pZ(DxlHPm#x|JJ?#vOh0iFWL*gX;
zvNkySP6D04&a{0VI7IUG&7=5n`XhX%X!6%0pdIMTwKt`IMHB^02%jlh^`s@_+Eq$X
zUua7+@KNF<74Svq=fdYgTbhAkiIY^oW1*i5PYP{`fFHnsWN@i~VW3~=Tf~(@TO!~V
ziHK=MH!#NJVMOxR&(xQ+UJ$o$y2)oaLNW;@b@MoYxa>1*DRX}LjYb1P&7s^nlmWWk=>z*h>g|NU{%5MtF5CHx%
zsv|6})E_wVDBiwF?G1#>YfMYTD&SYd?mLjjCb;?_Zxs-Gkk1|~y%8;uG6am{&rq!N
z-f4+g1^f)yLT_-QuCw0J!G4)Cg3XY
f0eA)+t%bl}x(3Cqe?`Zc00000NkvXXu0mjfu`-q5
literal 0
HcmV?d00001
diff --git a/hr_payslip_monthly_report/static/description/assets/icons/service-black.png b/hr_payslip_monthly_report/static/description/assets/icons/service-black.png
new file mode 100644
index 0000000000000000000000000000000000000000..301ab51cb1363cb8a0063c4f9f7cb9cf73c91e10
GIT binary patch
literal 839
zcmV-N1GxN&P)wG}3wsU*IR)z|Z&+>zafrqJwCq*x@FjvNVI2F^z|C
zN%{bO#A+2K9mjI&psYL^8b1O*HWO0*iAfK
zwBzye?BGqTEZN2s-YR-iRRhR^{{@@H!rmxCX)mp)h^Mf|a7g;p*wW?ud=J0RL?CEP
zkEcMj#QI2Tc@Mv*2kEq`DKw7vdi=Jb&-aer)!-Z0qjz+QFK@N1&aRXO}`izA!9+A#$97UmLtKG(#D$V@JG;R0Xua%1u4_kNMazOP^ayYznp(_+pa
zmHp&*7l9|T=r9&<9@|?Ko;a_$GXn6R3=
z-_eWeE8>!NN6sWQh>p|@{|B~~h0NN}OyO(k|0o{Eevvy?ir79Q%G}xZ=i2u5tSHu2
zwf(N(bFnYJT6O^a^n}=lCZF8Nx;w2}uUkB4XPd5v`7Z>im~HzdJMCK7trz|-8@38>5jc3xX@h`{
zh@iEj_%)@#V~J@-!i)2n-XCy!_SC5Qyigi**PVuC+h<}!~>FElyR+PxP0svs|A}^vKikR
z#>I0>S!0;4UyI{*IK1PzbOF;IshL(A_k5A?+#7WY^+>e^YX;p
z=xW)DcRQbIOIo!~v-$kABZfD^J?Ag~CjG!0N_ye{SWo@7I2vn7n(V-R~kb-3M9=yBBG68O-n8v2ber%t!Zu
Pq0ivy>gTe~DWM4f&Ev8V
literal 0
HcmV?d00001
diff --git a/hr_payslip_monthly_report/static/description/assets/icons/training.png b/hr_payslip_monthly_report/static/description/assets/icons/training.png
new file mode 100644
index 0000000000000000000000000000000000000000..884ca024d71ca9127a5393134632ee92a61b07c4
GIT binary patch
literal 627
zcmV-(0*w8MP)Ji_yZ6G
zgCi9sC+SZOF3B?A-3o?c9a^B`5B^xi{atdGlsx
zfu5coC)9d9*W)+29w+CYx6HE5(7FIXTmz`}IuU&auvT&%3np6<$3JExZ8|Qv1`yF6
z{uK`ZBO-bN;C9iN>oGlP1At#74phASP()5l1Dq?6>v00$qR~ktYISg_G~Q>PN9l*Pyjm+=0joaxS5K;Rj(=Ddy)iyD^P2j9tz7$MRPPN-6X6Ic<
zC{O?T4(yVQo5t(DjmAqa0UQ-9Bj}SmO~ZA+0wO7a=S3S8?~`nFrw($EDaoG!IQ?TF
zt|2?U(I}QLQFZXyQiDB8SX$~v-8kVA@YGU+KFk?f>fJUiwWsHQ*BQQneoi*
zIdjgY7w2;~&-47A-}lQiGr#AVfgU}2^thi$w2V8gP8xe`iYA|^nQ(?HLC@=`7Uk<})
zLeWEQiU$yZ^@<(}ZFDXOrZ=@2KTECwL3TGYp{o5;VR!&Zenfb(Y~lunk>o@WhF_@a
z!ghmmZ=oQx3ZUrTMV_|@z*@URl_LrpnuMspmx02LayE1`&DBGH7
zIB$fJR!y{I;6E2v5gyA7yJ&>%uIrAsk}Qk0c3q+z1eRyI&Umi#qKMSynj`laxQDEG
z$>9=BWqAjWxCde)_&ZYtQ_uHfppNAb)C&iMgDG4Yayz-APl492qWnZ
z+2s4qPerk;Qd
zRTxgcUKCf(0QEW%Si8S$d^23v9Y;Bm$|Jh7D5kUlU|v?DQjz!5DcCSIHI;o!&C;0x
zy1x?jTA~w;DMb2S$s6C7*Wr6^*LJGyqHt8;>Dg;xBk)zTu^q3#d?0F4bwS{Xys;0Y
z0b}%PxF6sy{*u>yU@TD!7kg>wn=-H#OA+vz;H27KSYpwM_&kp%X2ny`^Yp0@|(y-wyRtOEu)
zkZMr2S!>sIk}ylBD^a-LQPoOlqjSJ;L-U^%BWoPTxn4GDGXiV(qm1VDmv{z1L}Jvu
zn`vGi$NH_RE@&E5g2~Cr0o8JExjDBIzCUyV^vhJEFcOB*@hFO_Ws){xtzG=^;Lve_
zQnzMHdm+ztcL8TpjlxKr=$THQiK!@hAyIz4N4%2V3+2+10THPgVGEG`aJ3>)#)7~e
zj-qI|S!^?IMA7OXjJ}pce+C{;_v(adyt>r~yRAcuwRTCOd=IQ`K0+rHj*6O7#^_|N
zR=ZNIR{yzq^QL#_j;<2XwFs{P&o>X}q=;_wJnsh7KQIfj8}c9GwohHEy0HGyN#1EU
zwtz&CPhEFtR77q!cFdS4^%iP|h}3+~+kwg^h2P66zKc$%k(WHr*_9O!^)V)55l)iG=bkroSVWSt8oK?9X|oC&>t|S94mi~JQz6J@L4Q+~({Wt+
nVe#UD%iYS|qeqV(_m6)8sc^)gW+q6200000NkvXXu0mjfv*t}m
literal 0
HcmV?d00001
diff --git a/hr_payslip_monthly_report/static/description/assets/icons/user.png b/hr_payslip_monthly_report/static/description/assets/icons/user.png
new file mode 100644
index 0000000000000000000000000000000000000000..6ffb23d9f036834a32954f83bcfeca00790ee443
GIT binary patch
literal 988
zcmV<210(#2P)cAU
zg%n1_!UO~hi=Zajq!7VI@CUR>p`!Rx*a$&o3k`~bXb@RtC1&nyR*WQ@xp&s=+|MHZ
z%qBDA%sD6P7W>?P9RqF}kWv6&A-zOAepFK7
zn%moe*=$Tc@)I0INT*#4Q(tpt!c>;Iw0DH*Nr(MZj6)>|hd7}=D`NRPh
zXvGuSy!q^~M868;^;_^453rHAwcCa0XTYMJUi@XTxY>o~XCPvW7k?SF)lGsQoZDZQ
zP)=G_j{)g77n-L5oA={)hSIDH&Cfs)ee1>VM9F4cXnqDNc7ia=s32eb!iDI$gsOi4
zLvKEpLvw7Jbc*9=pw+k^81;$)fYoTt-RZ*gtblIt<9DK%bYb~+p`ZNt9gylSG|w)y
z^f7S3E5=1EFtYA*7owK|ZMZhYc+MxrUpVY~%?xuR%hGp%`<%$)6(zO(uDSg$G#5pD
z;K6<0FLeNz{gRNEPQuWq)1OJI*Gp=<<_=N;X(Gq;tOM~GAMp_MS;a)29s}JqVCIjM
z)b8=k8|EJXBpK4+2QuS_5P5?c0HB~e#B8sn^Ebj8h&ak%8{2szdo@hTfKXDKM!FmH
zW1nf?P!ziqZws=70=&$bXf^g?93W~xqS9P$i-O)xkbdQkw>_W_=3j
zHL&MZ+4h#Vli`J@6>FxCSeAZmS!$N0X3g}h<>^5?bLOg^ymRRmYovK~+eD>9insPXvj3+6Gb@v&hmf9xq1t2!EP|dQ8Gk{Nb(_%F
zfZ2)l~DhpZ1%x!dRjm
zO=;u!cb$X1D_}gv>Jbl6rqq7)(!s6*&8$S;I1dcnm#;8RsZyKh9Ozzw#ra8ApLl@n
zmu`~X4VYcGB63`?zPU_W_r4w%$5|}xSP?5ge^6@en%S9MO4}qmpBLGc
z+0FjUY-Um~^1{NNbKdiv_nq_2d}juhaAqNAYGGAPQ!by+?CdIx=|Q!EF@IoLzlew*
zHqN3N&|>jiL`D#~5!H3TiYBy2#kO~cjhT*5UTf&o)WxJyJAvB(gK7(+j!7;TT0A7Y
z1FE_V&)W$+3}iZx$0V2A6?Kio3}~@vBQg$L-C2d~l5BRYn{^UNAuSXJ5cvdH*O{zi
zV%uGb2Qb}EY>Q0hdBTeCB5i_*J%!Y9hB4-|&cua_ha`5unC%@oF^Pv{Qs|lv<4<)f
zUXLH|SJ!zQN!xgltnuI
zA*#cGrK&x(v3Ly_Q|`zSxko)OA2y^qPL@<^KO#f_bvjN$1}w`3PIqAS3hH^A
zP<=n*vz)54C3ehdJM0g+#tCDPU9e*A9n+;vw!rRxEBni5
z)-Ry*UUp(jA$8sBfPFx3TrnGPh-`L9MCxAWV%Y)pyc>XbNlyG}DwX>i#X}4RsyFRk
zVEIC0wZTI&IM}qlEXaTsi?^UUPIBUXU{q}T#a4t=w~?!r^mSlaglPrljv8T7?RP}(
z65D>Q9jU9ESY3A%*b`~K>IAlZtB6c%p|F}v<_biHP`wm58|VX$0ly;h9+vfvh)j11
z8_9sG3ZAzI7>zOy_>^pRvxuCEIIkl@7qaR%o>zf8Bd&3X>FJx35Dy`DKpiKGG2_6-
zi1EL|_pg8qr_|L-ofg+klMsFq4s0+U^c|Cvl?
zW76WGjRAGt5q$puurgxIe=ugV^!5FI`VHxE7Je0$oQCSazOkXL=HEJ@iy7)<8ccM
zi$(+ef&T;QIOo)jsy2Ql_>yw@-e%|Y#X_Tj-|AYa)EhMu>Nvyr{xgBmKbe`?Dr?r9
zOju)E)IDj`^R}b-mDwQojt1IgQcl=+(LyKais%c845mdJTs}XVW{eu|uie$6SB5Pd25|YHf6OMZB
Tt+q0v00000NkvXXu0mjf(ZE2?
literal 0
HcmV?d00001
diff --git a/hr_payslip_monthly_report/static/description/assets/modules/approval_image.png b/hr_payslip_monthly_report/static/description/assets/modules/approval_image.png
new file mode 100644
index 0000000000000000000000000000000000000000..84fe94e80630af4aeddd28587b56fdc4840638ec
GIT binary patch
literal 51818
zcmeFZ2{_d4+c!SiXpuD~lqGA1`OZFeV<&4`QO%07j%937p%N)e*=36qDTz>&vTvc1
ztffd~iIQyZHQaUIzvt=h?)N;;`~Sc1al9QzN0@6l_w#d}=ampM6Fts#Ti3y0Firz~
zZ3`G|r3(zkc8_BP_(^C^B=`ol)NQ_>Rv7+$}yU|D4Aw!@1!a|R$4ADYEM-a--j_q7`tfE?CkY@7_{9!
zCYBVRV-x~aTwP66#Y+hs;7D^PiF!FYIJqf#sfsV1s|3Dg{a8_4bZLqEF;#I*)`g<`
zjm<>0oEbDxi~<%;fzWtS96s<@rIyNi;dB9qBfV4@V98McZLfdI}xDk70^umbMp?c`4Kf;+iMd_O^(
z=0;)IySUpsJBhMRB$1sx+*QQ^rOPZhy8JlS$?Xp@0f8xckz5oZ1q6$wrG-?=k995{
z42Px5sT4(;1I>}<rjLZWvf
zFyM>jrN+)wd%E}crAP>@gF|2`RtbSn!u;z}U~*KFJLw-6Qz=SxXNDsQ2+ZD*WJ^UC?uRrqmbZq8X8G}PdrlW&d>U{{(IO>`3lznl3J)BqyqMZtv(XHSyD-$>#=En}Ul$O?7K3RC_RkcqhQ(uu1RR#2
zNz}m*kXl5nrVdtHiwNN{x_Dh}Bw_hV2m2rDRr|RyBan0~g-jvC$ygK>4nZ_5oP?y~
z;3O21OhJ+nWZ+)EeHI;w#~`r;ID$&2FP}vqkg0G275qa1j)B7=fA=g1kHX_ABs?6A
zgV3zA2yikP0m11=Dvpf9Ag~lH=6BBmtRNwXih$z@BnX^^17}fCcsK!#q>``%1O<a@OU^LB9NAOB-6=sI30^6q48)eor=W$_E{8gH3CP60~s%!MSv4n#1U`=
zGz|^mX;dWochABg5d;baO@pJ*2*R?wNK_mKD3e0QU}$(enflv2Vo(GE5``nNc*OlT
zdBmV;I0PQ35RC&ywyZ}gM1j-EI06BK!r`$P(r@#K!5}GADhRx+oV9coorCN0SMFN;CqG
z_-*?lV+g=ikT^IE1*loJ2|Aeu5-6I4MUoISB!d3CJW^0pJQ_owvSQA6Jz}wRIG%(<
z(nt^mhob*>oB)C+P!I$<9EZRy$sV{Oi2{LO0a3|RB$7lz{We`dTsRDsLV(lh^zU&M
zg99N5L&YQLEQ~j?`RGI0S|z1
zXao+4z~UkB9Ues_=t3AY2Bc$1`xiTr+S&+&E|P#m;8{43pru9B#A0<&IGiS08`AyN
zP7)ay6|e*X1nM~w8pL}N4Fzltm>32^BIzjVuXdAh5D+h%j6hJ}NHhpwBw%Q81c0;z
z1W+mYXQuFjUlNceg-U?qX($RDSSJL>(?R&dV@W71ibTetF_gc*8$xJf&}bbjLh}!4
zA(5I|x)1?~O$QGVf1;l6_d+-fiB1CbC5?om!AUeUh_eue000YuKxKgiH1;P+^T%#H
zPMbi~hW@H0O$ei{gF~TFSj?~P)z;F|L1QrpBoTlK9gHRxfz*T$n&1zL0KnKUc-7X$
zYiWT>(3qfnZVF7Tp1
zed+hK^iMU_-&2eNwunLFF+VH=Sfq}wt}Ys{L(ta3YyDy;4ok!WM+g4)!}EWWTB437
zfr!)j>zxEVj(`BM21g+NB+-A@4hrNcAY%aA(MSZGKt=-xAOJK2Yyuz{JV5o-UwA%9
zn3_a19{KNEB$|dNqcBJ^97O|Jh)Mw7hbMqUf<_}i83LgIIQ~g0`c5?lMM9wfYygRj
ziUuBwri0jnC&9@m3JFD{KoH24e=lbYjszkVFd~o>Kv>6uXa~|Y9@rF_1OZHeKw*9Y
zy?@+I!a`^yKzP6aK|z547D>hc0D~go2?!DvMC+dcz8||OBqWUrVkI4c09ck4X$c4b
z%cv*}L_<+gB;2o}9TvnkjHb5kU-hgDz$_6%)ImTf#NYFbB~z&&kpdtB&<7mgERf2m
zcmU?ecn}By9-xzc0xiE&4eCSC=V0-SLxHr+LZ<-2fPjxdV^IVumO`Tb!p3lTJjjKF
z|AI&0KprDPSR4eZlBHY-eChWh9!`sh&?4fsen<-F<@bCEr=vv#xe)p9dm)|(GA#n+
zUV<);mGkig6r=^N)zKkfG*Ozr&<>tTr6CA-&;$Y?6ktW59XtU^0oq~3Z3>A5u*To(
z7Eec!&{PBsPQlYKaDa(XZ~}TFqW!{`2nbyqPD>kJo4O
zc>KZ>2naHW6`(exBXQtLmJbtXWC|RE$56-+z=l7C%-?Mau#1K$tl9)k0lhRFK(}}t
zD1gy)6b((s5wJAq7ZwTH0Z2R@L;x%Z@o@2a7{$
zqBU^@-JbyK?|cH7g40A0wf>5&e$V@~aYQ5%uM6b!XC~9q(bhp?A)Gc+=NGt22Mw|(
z0^Ezz(Pd#+O(GUgAVLIf(9qBUc=qolM8bgB4d6W-gC>J?MguyR>K4ZEEt1cYGbp|Af7^nV?nbBiAQ4bWXdlrf{Z7Ck_TinG?IdZqbO)lZ;$|B
zqSL6L;e;aro&Uo7DI^F7k_if2h9|>8>lfUO#epU>0iqxQI>S&9zrd3eGLq%tU?Txk
zP#6{uBmx=WD*`KfBdG`+?I(rncO6q9h(rVK04I~k1h9t;S`NSsff!JL4HTIG;P>Cl
zoQlFxkXTmTfB+R2L}2A%I%v;;Oin^muz)Wt?H9W-2;jwFHys0V67YJERX|G&jsdj<
z4S;h5VC@&XX=ohqV&J(r3)b5)Z*KG!SPY6rh|y28|jTno320WJRT6f8kf4q6OVL
z2rvp7lW-)NB{eF*K2#hlVpBi`i~NPmX-FziI4~3x02^=wc`0^*Mk^Xcp&>yCM3GUy
z$Q8g+Kr4p?dZ_^Iz^S0}2k8bF4~YO!91XN^DL-q!eCL}+qEjfWA^;Q&1TeN>**U;r
zpg{#PCK>}#v4~%I2_2O87_b7U8byF(sjNzX1`G~#AFv3P_d=v!pf);|2F5P{q=K0V
z=;k6or+|RN(?BVL0R1P>vBS}RwHpKk9D=}d3lthoC4(B3K&JyZM8~4ANI(ktUs}pP
z@3a4`p$|r8W`&=|JeQ~L#BT!
zJ-+W{+R?y)zZknMU*YCVcW06qG)-GDjQYuBZ#VWYQ@y{;F8-BnH
zs)Je{LTQ3{4SV5SZ1f_=|ufw1pZ?>BO!;qdx24D4Ew*R{;${kph5J1^1^?#
zG+p%n6&m_|!TqTQmQwyfZ-1|;e-<3(zb81t{~<1lhmZiMU?DijSD+uoLOgiTrUzvR
z63jeM06v0uE&n0hupS(s;Yje{0HK5i5$E6JO=pY=dj*4
z{B3CaeS`Z46ZnL&a1;cFgIIvt!MyQj{QUHR)o;NoBzPewDq~Ed
z*gLTvyn)wV|1aGAqndv2aoB$j5C7ZMv{cM2*CdMnv0PdHUV9nj>9TO+(i1|ZpA{y*
zYlq-Xp%QrO_7AV$K$8u;R|5k>FpdI6JQ|Gz{dfW>$gxx$Xea{@CZSn&$2!gVzw`R-
z$GfS&JQ@A|lnT54A(_UcUsWl~pjNNTJTdobO@
zSMB+xr<8V}wQ0KA@YBJAwI3?|{h2#jk7AS=^247S?vFj)=j?MDyyIOZojmBBJk3;m
zC>93wbH3)%-9p;sbpn!_)8U|~H1Fc*_bxMjlv~>N6HNNruz2w=$f|
zxui|j#q8{IUMDY_vI=&hPnS^VwJMs;nBO>lp`8$qzMzLpo(RIRM`yM6W5a5n*5h%?
zDbck(!l*B0nt|QNC6BCJVF-h9IBm(;K;5{@EvhL!^1jPH(~be2A-y}1U1M4Y_rE+h
zgmUZW1D7~xYOIC9G`Rw!Pu2$OL{*@fMrR$KKgoF$q(422fXjMUPQ|U2yEJQjQiMZ>
z4JP`YbP);bxFF>{q!Xn=$x$NSWiS>`yKn`anC9F%7eJ|WQUiQjJ)PQJRS$;K|m;&K!Q2uRNp3RBn;-xCtNM)6Z%O`Brk}X_CmM2R>gC%U<(16|Qt5
zvh>=`X~;2i+8u3gVL0wW8ueSmLhUHC@0FV1;azd3gGON|Pw>KEC1Tm=5b{~0=fgY8;?tIWCsU2;=@l8;JE9vkaNb2ey%tNDZp&Dx42f_$Wb?>%
zyJ`HVQvW!>8BDesoIf>7`jB$&B?6bXO)l!V^6`Op+4f*{
z&xz&LKzO3bLT#**L!^W9V`=;+!V*deS=
zlwXwLM0bIvhm-S-*lQNKNvh74)`J^+Z+o-B5+>;4!*cVr7S-SBmU9Yfn;WWalUB(b}3fbGhXZd6xS
zyGDye@}oB*buR{S
zS3J?Ydaq{(-)q5MUhzf$cy>lfbyf8u*4E!$|7>XV_vd)yaO=5koo%lu3SD4rRnpDGp>fr_QR*j
zMN>AoN2XG%-L64FwK!@k|F
z^I+$PoyU&VT|Z`c<6N`A<$)MPvUHGm&Z-m18~A$3ku5u*Gm#c8J17qG_ZsGUAg4o0
zJH;7~tt~m$`Ebarw9J|=l!@lAj0o$e&g*RyR`RBnljir3TAeE|n$h&HA(0Als-<}@
z+BaGRgqxKgOn>c|m*!Lo)Y%^r3%KAgl&yAMv(49!sX(w7G2Ys*?`ndhggJ^N`)8Wo
zPlz$ubH*{bJOy_>hFyJC^vRlNlC+>9vf`|qbyDe(*7t<|$7zX&3ez_1*|;?ZWoI3p
zS^T;0o9gU~k!R>*4J1i2kTwC>T)L{?n^HG)?UR-rit!WJ81^@Ul(1f$%)6%#`EiO#
z*DSy#qI*OJ=*rw2?{DB#`^VHY*lSN300pj(FfBV;^|d}TD9DHYF5jfHY_Z)&*}p5z
z*;zU>)$r7iGweOI!AHw9`K!R@wdAx^gWcVX33L%+qVbC11uL9dedDlhaFD~5au>U>
zQq%yqDD}=6lh4fU5A}tOjSaG?yG!mz%AU9^Hb*>Sd0RLzfgW0Tr*(zJ(yPT_x%I~x$>u?x@Lf9lfvjC;z5@3*tJWQb;))_qi5
zkS$|IQl~+D-x=QD5QXYKl=b=B<<$+rEu3PqXKceJRGLwl{WXeFYtT2kyQ>B+nNyrb
zV}`!$JaHoM1k&s*y(G?+8hJbREjV`0ZI?x&qAxEG-%M$F&!z<4-l%=qD>Y0dEO|aL
z75!4(4i-I#j2d_zr9wI;HI;YPgQ=XT&M7?g_9@8;yW(WF-hJ;Cao+iza`A5^$Pxk5
zQ)7?Q#r=ABdQe{)H_xewOVy#*U#Q`Qm8jR5hkuE_pwl03&?zacye^in(A)C#?COTi
zSFbKAGf&N`o_Y9ecMsuYtz7($0lUbk`pYW*z7F}l$UbpO`ptm3y>ZszEDzae@}g0?
zEVr$sQBpehoXOTU*Nq$X)h=J67CpcDu1Z?|ijvJ~otf^Zp750AE
zEx5vPkurcQ8akhZAs-o?GguhiEEW_Ne@WTJA-vp|4c4dJ?EzhFEN~*%t-Sk+c3X=0
zdHAb5&d5aSnx%SkBA>_`CoI>hdrn`I*RFeEByB8o2r4F)jo&;r*ZpYYGz;=Y
zz*hKZQEYyFffL-i*jv|2T}aL|3=NHV!{FXrW6TXXQ6N*VDG}
zAw-?SncgpyfWXdt5QIW*FO2RvGyeXp!M^5~_viKnFjv7IGVy}d8*&on1stVwODXvY
zgTV!(hpVUaE|?X&5e#cuL!to2RB7|&a9G$NQw@*rk}f?waEt8)*QP-mCFc0EklZs?
zLI+hCsch-&p%?rn=GaGZ!}(2*qcRi1AYwErl}}(zSC0;5(D-E$-PTBp&oF7FM)MES=rSJm_kW@voj5|6<1-7lLVLHS3D%ii&E>PW
z)4Kakt28{`)ulh#vA(_3o3LlU-O;!_7gF?o?ao)5wk-s*SiYHs?ASK8Abc<6aXTv3}7j_pO!$J-qu{w{D=x
z8O^0odo?;ejO)b-3-S@8#dWDnU
z!1PAlD0=pRp`!As!FvVTil6HOl(S&Fu2fR{
zOMUc7pE#>L+#Zoa#(=}6hFoA=N@c!L94%C$^S(C~H7~E-7(JX8zHZVhZ;pueB_9$o
z-a>ku87>~=@a<@BnT@pC72FoAU*W6yVW+QtcMoMTXNCf$H=sUFtb;ubbU`X?$)d?$
zHZhcb!%g{YkPIbH3^VR*ee7^k*Dc6GYSzE1;q6m1)B7tpq{RM??&B!c@JL1AN0hZK?o
z4~UYG|6$L(P}vq>Cl4n0s>O0k^*)(vbg1KepM_Zu_m}Q?e65|<_ybBm-+4WDQ(XC3+vux
zttVQFJ-A~L+QeVdu@R;*p1R{Kue&_2D^Q3epX(M<zX
zl9zM_*O`1&JLH%DbiyAP`srOl9l(`|M=huh(N9fiuHLU}*H`1VO}VcZ8N!F%QVaaH
zPLDmTkx)E&R_D&~Gt|@9tb6H4dgDbrHenRhyK|U}Q)#H+uv?=gih{5c@QRH}YkK;|
z!tsWTp^UfTc(_yR4Z)bpc1dUN9DBZZmU6yQdOc45
z@SX9d8w!$Au6WH8Pc
z7atvH9?QM8J=wFP!gS2v%02%fxyTF~;CP{|i
z9s~i;wK_c4_WHB0LUP@p_hsy@=J(!wK^-pb4&Pdl_0o{4_sarEVO4a?$%0@m*oiS$
zVZAM{51goq7KrMu(y~a8tO&=4O_ZL=5Rld_c5C4dw}Kq$r{wz1$pk9Sh^Oo_G`)>y
zklT6KulSDk$%dXlcB3)!E<4=1Ojdhn#@tTnXb>9UBj!*HtF2-^97QGtm5BNFcB)hFQO!6T)U^^xHNp$rJm?`Lo2;dK)gR~Eh)(C)O}&t`|K5-`*fA}
zNax0wtXp|`b*(x3nyeDh})1Sf+J{QFY-x!;4Y32bIf}+~u2-dOe&w
zQteva=fd+S=XgbhBX5c8?*uSAKJ8P(?n~LRaYK4Z-^0ApqxIJ-^{9*vV0finDavsJ
zplUZr*~H5@I+QWq>s%bS^{SPT^qurH^;mo@U-y}m!Gsg7lc~I7)S7|_0rrNlX2j7p(?l-=VjuY_&0w>D|S4
zvDORoVR5e+MMR7DSU>1pH@Ly|Nz!rtMnSBB-~;(>2WQ6e;JRp#)%PyU9#hUefXiP9
z-6OE_8Zh>*yLEC#K5t<-tD3E<`hM*Z4Psdi3k*kJtJ1G$m5>euOHoU{tY
zaVXltq-wQ^Af~?7DI_?mimkrx+Ebgy@T{i9&yRu(I?P+Py~nw)FXNEOom6jV*&lPd
zX{)1a#`O&1J)TXQyJx(vBB*w$nb-31W0AREa)lz~>F!4w6+$Jh-!j8lac~Y7pf0^g
zzy0d!?wPD<;UYZVV?r3G7kYQ=J_~Oa^i9QI4VXRRmY?9UZf9d)w2$EnV291amnx1-1*A9gkp>KpoI`Vw*s3RYi`f^=gK1s=?YykxA=x*uaFzbg|GHXyf7j(
z)($8XJ+(DcpXfgQ!N)4eUBJ1oJ%An;8Wo$Y;!r|!AI%vkk-}MllASIy*c{t>C`okU
zba&=;&|&L5lhv+We2GMmk^6ACU*2s?%9+VZ-@dou=>mEH)yxihCh=d6k0K?h!gq9W
zXUDl)MITKleO9W{;;_xrqc|8VHidq-c5jUShP;x2KIhUKp>V5&nbP{MW`mp?IUaXb
zgWlVje*9wi?pHVYo*QohK5_)_}6O}?5jMkY?>eeyf
zy1@gk_93j4@#YA{G0>aXL6(0?erO?|8?fDq>i`ZU_d9BhB{v30``WGU?U!5SRq;(|
z(y}ZeemKF?ue|onk;Rsd<7=j)RC;AEZLaTjUIj~;eT@&FoKb_)YMp#NPKCAXAjNZc
ze6wZ_X7_GEd3woXi(y7;-#95_@gK9fy5!YB8LHs_{&JGK^W`otT?UsHvF7CG(#E2l
zp>x9TG02?Zle-bn{vqFJ$w9KfpVkgThNr(VH;W@CKgw=Dv}@yDgVe
z>*8+flZ}o)*+V$Vjw*_Pie5NZ^}nQ|XRyHPer3YDaZ%ehmtVF_j298(0iD;Mw?!
z749n6@+n@)T(?`qx@e#Ngh69%EQ^QaW0+U{LR=*s6%m~59I2VTaC>k6kj&!eNpOMH
z(#&nQ)%M$17#NoLI~i%Y8EM_g)$@4urFFf|lj!Cxw{(uP!R9Kb6W$}*S`9*Loy>)0
z<&)l;PKT6V+&b8F7xY{~)p%d23&1Z7iMI-DdzLfxEXSSQ=xvTo
ziADat!sJ7HEbO85kACYnS(Se~zf}v>wmn+7)4wKS<7|C)x1NC>FAof+Kl!C9EHbVe
zB*d_@Yh=Cs+hWTc#hf_BRMB2FIsEk{^)R}cji$9+x4_ks%wzIu
z2ks3e9PS?3V{Cr4Kf;OP`1n&(D36WZ>-w0>yu=^}VZ-2Bis4#90BG_G+AbbF){@xm
zyz9)mM7c5;>|`x_!f|FaG)B%(Ncxaq_Ovq>9Z!O8=Y=tf#)aLT%S;S*f(z!}UD)W@
zGu$^LJ-uyqs$;REW7fB~S$U*7`r!F56}R1Nz8nRFF%O)%c0J=$o9&{ljd^RFfSj85
zKsk_BrsP>m^jkgemF3g>Lin$0xOh$agCb(a2?k^Lmdz|spg0BOm+Hv&sv#dI?L6($
zHMl!dj)pXK-(CV&e-?4n(Qd|ZNRhq$qll^^?$}q+T7HLI-2~>y$j$9V`cD275+LP+
z+);*N0{QmE2yTl+rv1m(ON6L1wi}1Z&dG10g0HB}mP0Yd!m7vaf41}hA_A@|$=90X
zsQLAPhAgS!{)tEn!!4xfi`~ZxO%I|UC(S!-o9jEEXHx3&bwqLO<}EzltKwEMQ$Anq
zK<~}YqLQ{_db$Af#;BAfw+7daHm2X{N*n>zUkwSm#<$8QC9h{HEWr0-d=yWV@a8DH
zIlAMqmgqw=g{U3&de#TY12t?FnP(m0@$1ht6L>Ei9KMo})T;PAY2l^)qpA94A=c_T}KYem-8N{C=6o
z&3^CCE$-~zd_~?J?pLsP_l^fiMR%IURN=+ji?XazqSy6DR+vdrqRohfi}&o`K7$|w
zr%lZ9l!21WkLnI-15PVoCr~OF6MNMT;}H|jB3Y`H-n7TyIWTT$GuX{-d`e>O{?+4L
z)Pu_Q+xmy23|bD9=Po<
zNuV_x-U1yx65W`j346kA_AQ26$D)7nd`)p+)^rZ%*^$I_E3V`o-xZIeU@#{JDwE&X
zGjyFPIKZ)CL?Lv&dYrwR9$7Ce)YNN-?OA2G#)VTSTDdaT$Oh}T;$iwS2WE%rTIa|C
zUm`D_Gol?+Ux@H@U&lJ@W>hWp=ErGxQzc~Lnb2Pot}`RD^0JCpLiH5IX|7;z9Tmi;
zuv#aV#KkCvkCge*jnLwe_h>84{n`%CYy!%`|B~rZRCUO)|N1s>(eb)thREauYa-QE
zDdc54J$t#Pk`yNWMhw)BRg)^sUdgu~A28_bvQnLSQ)Aw|QRubF`loG2f?Cy;xGdJy
zwk1iItp$hd|MF(mU)H1N)yq%s>WzeWj90+Cwo3Qon?kq_4_gbe@r
zM^~9^ie=`=-T(#}aLHQclW|_%dLwoJ(eC(GxwdU;B1uoicfd|$aX_>f<&Ia)m9LE>
zt`;XwRA$t;9q&3Q^I79dU&QT`7DXFRopt!~G<#uGtNA(4?sF@#lr7Z_l)#UUuOzHC
zUaPRoo}cx)tIm!anHgOyds=u@n*>iYfWh(*;X*GJOzovN>v2dbOM6fH816F`d6sE;
zuj}g6t?^ALdXURY8c*Ws6Rpi7RneITRihEf>dg1M?ETHZrEDPW6m33w?dIZ8K=0@R
zO^9;e18u+>et2odK#~xrDX+M>SETfPuk^d~9S=UWc5h9d^Q(K73Qn|svzWvHlN!lr
zNLN-eh=(XB7L6dvq=q33*OCS|Ci@J&oXKu)OupxG^laVd`LfDacR$X)80}hktedpg
zHr`VYy%yFd!2+2RYmz;}cZxJrifO-ekHB2N#Llqj9;$slbo{2i+s*`bA26s}(38b9
zA2T!D1xZRqn@^f@6FJ1fxF495yUx7oE_V2GMHtV)M(H3!CFTR9@54;%>PQDpaoV=MQ)oc!QC+khwH8cddgJN6p;GW
z)F5-+;0Qy*Ehx@Cyu`Da#U7Km;X?l+(!*;buXpR&Zrpy&;)d}3%X`}{2aL?MII>TM
zCt}`jDA=vU{pcmo_TjTda{`>EO3|Uaw{0GvD>Q{l=zZRMLvPYH#F_~5XBqAyM5DUk*z$L9Ohd#oc>by
zrBJ|_;;3b8PxCN%UfDK7TP=BCbH9uMo-(fA7>Z*##MjVWQvKe^gN?LiW#`Vu1`;jH
zTDa=vmk6gz&~_dn-`Tx^wiVS}~r@JA7q=Lf8XD`I7Ht!LOF!7zS>}x8rM>Hs0pwn}*A^>hUvyj*`YCTc>S|UnI^>F7FA5p+_y~@0C
zPK6;+N!&<$RZP&9C{Lv#%^Y2LqaL^63fL;q7d-osg3^>H4~4wUvs1!3+0gX*|r|mdp=NqDJ>~
z^sjC9iAjJa*$0M~MdBM{S-8>J`!9D^y{iwdeW!R{
z_+x6>$}J=e7@KNnARI#|8@7koIYh2~F1?l#_HkSMK+~RWLdb&6g&)_LYOw~yeYh8Z
zL}O2bEJ0_=0XI)su{0T|^9{ay(ZyFCVkL352=57lro-Y=8afUB0;Z*hp_L%7*>@(y;%;l>-}0&s{e0VR(HC
z=8<^Ee`U6B)7L8Sd+EkkDnE{TqM~A;bXt1SM`vGEP_bVzVAkl{mr0Fswv6S=rPX)Lny;hZIh5veGBa@0`ag#iIJRPGu^($7N;f-qknmGKhvx}mw{1uA&w2(bvfc#1#!JGzN1J@%=ZdUH^qa*-t_eMk
z8X~>MeHk8%a9W99dh~Ka(PL}!jv)7-sLXQ%cX_TG)wU=c?rTXDW1MSdj?4Nz2Kw>Z
zxB2<02G(_QwGr~|(}f}Xu8)qWKSa&1aoMt@`71;Dv4mc!K@;02rG6)U*KAxDRj>Mz
z0@GWTiMTJYs*+d&p{4!vQB5)7=|Rmvl@}hcGs|R(SUo=#r0!J_Zd;rjeg`~OiZ;8O
zRkE%R#B*RZWu&}=7r8AD?K;QEI`}j&&`qV?3MRdLu)y$)llfgyvJLz_wRcra9!8Zw
zqdFwoe&g)hv8=5l=foPHpVBUsUq`tV&wapuY=4a6iPr|>5=$Q+YSFnX>V~$zF5q5b
zdg`Q`YhXgd*|R%uwTpk{S~ltT(czQ>@Uzgs3%_aAmF%wkrSMa|%a>ylhVTQfb@?xE
z#mj8wE7*hV_;_Gm^%V&=xcs?_&}28Z&DEqBQt`IA66SSvxcD_}blE}oyy)@8CDaq#u>kA+hr!rjy`g*LC>jN%`Y$Rx-+quQ
zW~Wna!_$p4wA9^hLrb?}_{?@Tq
z3hJ^?;%#T|CHEeezP?)X$kKC`K1my}`%=q?S2bqs2b;ssZM$;9U6_Mod1FJ#+>YDk
z{;f$fPW-4d50_r|Jfu9C?5@iG7`}*d#mfrg2anDe5Z+x3UwLvR>lM-oTx@=ca$y71
z956|=KCpFrOU_2u+|R4Cvt?5ioSt*^x&A>Dxh%mQyg>^W3WBPdu2z-!T~bE$a-LkZ
zbcpT#MrLS{6}s|L=0^eVx=*dv)*6C&mhfH1liD$CD$6%j3o>g+1LcjA-I=7i{Cj5y
z%r*~}ZnmWcxqMx926oC>4@mF=Pcu_!z3HpiF}1NOziH!n7NM(`?qJ{F%;f8w><+s%
z*Q2l|`gp}-X-O&Xw0hXK<&bnoiObxuk-4uj2y8`sNIip+-&tT&
zG;!K~(dmtk2J4xM1~s~Ke)YJ@GEL&I@;dQm_FMDN@GA~6^@h9>fNtL#jtnKWbK-cc;
zeWY@K95Gd2Uw;e6XR6D4lFEonirQJ^klRsey8F
z#LzBAuOya&pYY@y7Meed?zQ1dJ!(;UPqPVg{F_%{R#{6|*IZsv&%(s)*zoZ1eD`J|
z$IRRQ3(_X>Q+i)7Ku2j<{vhH7eDF)8p{?L%@n=LsfLcuyHAy{x#S_ra~@{ObYqZo|Jp&XD06l@KTU
zfJpn2AGvb3tLyFZ(x<^jn-wt_3=eSwJhyRm@WN<#`oVRI;w(MBmwK{ZCeD7J@Z<`^
zwr5N|>VdAPfzq{NVT1GC!3z83PjU+Q`6{DUb+rpD*?NM!gH&sywzZ=HSPUvTwS57ZyD}9C<|u)um5$FX~M!uj&&nXYW_azq=(Moq5mlG-h&p4g02ANFkN#V_4T;VPkhtGRoN4@Qb$eBL%~2
z*V6d1EKh6e>2Qhgsxq{n^*wrh9K{c{BwCx$kQJ`rE!||;VBDeJL;HHYzF2=;Soyqk
zy5Q~R_f}T(UwG%1<3hp+JY`3iWmT|{^>q#Ki>qX}tY5Qwd!Xj-gC-nnjSWJ!VbSmM
zXTYR+XaAcLzho5^>!i!^D!x*roTIZ%M!m-m-}NZHnO!@px)Hx*an_`~6|`!8yhPBY
zs?vKW7#ju5eE7gSKno(r^PxQtd@IijMSUJrKmB>A-_R;rYFAPs!h`Yd#YgY40JA%`
zSI*3C9bZB}_nOc$vfu7d*sk7QK`S;|9ms)X+|Rjw{kn0wSWpc)%}w2FU*^WUOe`fn
z9~qcwye)IDWT*9+i+D%FHwCg;hrH)2S}&;fyw+HDDMDJ9u-g{<;$WPZNLw#W;k+4m
z=mPR-*QoqUejWjVZQC?CQr89VO1C9t1WiX)^9$2`c*=IlkeE$
zxeMyg_wMUdN*x`Km}f3}kCZNkizw@U3Mv@B*|N7iaiKb4^b3AV$}Iv&w8Oh38ykxR
zp$q%BZZ<2iK!CDhD%>DS`uNP}Psj2~n@rHzx!2Xa76Y>uCo+@lES?^+@}0`I?X27B
zko0uyrm~L>w)gYs8m^_(VZyDLQXpfma85=!t>N7MeJko>x!;+|r%cHdTQ5|rci)+c
zGF>zH_9Y?r>iCdCY%coi?rYfnolKiwd?BQ}f(`S4?T)5(Led1JenM2-<
zJKjSL{s#i?)n~5>#@5JZ^5I`rN|GS&ms4xHT|+&B)|8FAq#k6hjzOmWIs*N+NZ`xcPc&Mp-L6=ICY)<-ku>R4CrHB-|!zf27O>F_K|_)p?KNiIk=H
z#ShIR1qm5$25!5l1{`906jn!rJVOPf6sidxS3CH{zTAJlL}hpHtAk^@Xaf%Wyc-fp
z!}xqUhG5TX=^Z|qfvS7l-KW%h
z{M;TsWD8e2X;D|aiO2lF=EbLCw{O?I+|N|t>09z?d}@7|aNB*{4NrToNNyw>+f^Yd
zvg7dLm$@efQNjW1B%U;GT7&eExm{{_l3_i4Q#WKO9d5Frzr815Mh`k8-Pz5{JyJTo
zFq?P(gPdNIivQHh;0odeYxI+oa#P4X%mrJWr5YOTs=HB48!3?`Rd?wG?_~FAEYjn{
zgX!MEnm9>G$qOn|Pb<^JFIeLW_T}9){qVwj?~;Or#Z4wg-Mj9e&3Dr^am?7s_U@h+
z_3b?wxaxdvzytX3Q9^oO)CIM==4Mk9ebFGZ&;av69Xi*CPr@LC`)*!qw;TaQO@^@D
zn^o=l?6iXFf<5)pS6nrcxoWCDyQ_dAlrlItm^b&j`YFOATH0`?=5a;ZnGK_#(1$ul
z7w!TaRX5tt<-8!Nwuujb;j$e~qf*-FO@}t~)F~e}isVHi1=z0cbh_tSn^^27qT*eN
z>wVVVuBWSuEUlCf;a8?x>hBZmT612vw`&9(cex7}!}BRirn;6YtaE!W>b23M*hddh
z$Zy6}7HAkG5=XA2=Vm+R<$5e0WUC)$yXtMUyRP;vBThy8QSH6a2MW(YypP+Z
zOB2o;?8G>JJSfsU`NilX=%w`C(x0HGjc2G;Tspy6bz0hnF)PAU!gm;R94PfUpLzEZ
zce7uQoVfTKX_NP#3JUA$3eOpGSu2`(<5H+W<0^T$_gloW=Ofv}>qE|lqzP9TNEl{o
zX64D0ub`$c0>f=a$16YOR-6M@y7?d_1Nos7|W*Y~{SN1t$M5Zwh)#d=rhCNJR3fT&oBtF~b#rf_
z$1!8$^I11DsbVgz46UIpzFic*$W(KY^$>#~>=qgVGzlP(C`%J847PWI}Wn4BK#+&7YH
zI1mILzt06(>zOzxG0PTSx?ZrsiF#vF&~~pdx9vm1psNjEs%k#;M7J<=@_{=Q?DwO+bp76Gr=-
z{NTRH;3Fe;QN=aUYpRNdJ>>45>&F*chuh^Ffj1UJj>yX}*b3pOd)>D~abg+f-8wvi
z27&2m-5(E_ibvIsetX;?hWY%fAyp_*Eu7+{AyouKgLzts$!-|!{Fybjw
zWtBMVvA)9YQ=G%?zW2E#)$)H}h
zB3&ZV(%ni*H%LnfNaxU~4ALMaJ%BiLNH<7#Hv>Zq-QDrszR$j2Tz(2j#Xl6gE#H{+h&1B6
z_g^Ebrp@D@G^X@4mN8>90av?a2)5CaUmW5_cZ;ldG&PmT7WREd$H?%
z)41fSQ{C#9P7al?nAEiARs4=WbZ_#kYzd2XQ~vp{W&0Am^(Z(Wy&|B?b%5v#*$aY|
z=7Gl#U}svoe~(GHE`i9;*Vn+-z}L6IfTD)?>hMVXoQDmfym4)!o|SqNvF7IDpcM
z_dk4dJxLRH&bnj3XwoyH+pFQG;O(m#dU|{Pri@GZ0Hu{04
z=Y>{~0fq&KZ>g_h9}p3$JQwGrsnvT+LbMm>(`{;M8i+-;I;O4!6VA1YV<3+GkwBcM
z<&|S3Lh-*AA$yupe0p0=^GKodR3H5niazX2y85RGzt_UwcS<5F+tXapo%D*Z7erto
zl@a^n<%}lOVq(kv=6?#XFPRB#NwU4KVhfo9%KCd4c6@1KQBKa;ipi@7pPriI{1hmY
z)XW@?m5Za&W{L|XWZ|^07q=Rclngt#-Teklzc>UB;+$;DTjsI|$Xh;t_<%NvB^H(D
zeVO~!|B2_HcZmwT{1$)Il^L0t^NXTCyuCPNX2Tii#8(i<*s6UTSH(?14ni+$740I0XZs}FJ#KieSjiIt;;
zb2D-KDI#N_;5WSC5`~9HO+Bz8Y~b5YfTCAgHsh4DQqYKzUlH4k|fwSnu;zd8ywu&l%rdyRF!Ju
z3-Ux{(|$DD6)NIB&Me{%DTb#_<5c`V#C51*VC!|_hH{5wE)uNi!bW>jU?Yl{TLUz)
z4-B(S1smEr;;>D^R3g;B^9vz*tt;x4WQ5j)H+YgjN@nxDQ9Ow-s5i8~d85Rdjq#Ye
zZLoyQ6so3UX}MipvN35C&+n7xS7-Y4UqF6gzFEO1r(LMpCW#3N5PY{&;adCsNwbU60;k7D`EJ`TO^h|VJKHvFT*OI7nB_b?GfAMLMUqByE!+ErQ}B$yu}}Z&e^N{>
zlF5laKcNl$&QxoPCkGad1vYyW5RcD+)>0a=f-K{?+50nYbUe=(8Q)|MR>Sx5pW_!$
zjclE?ao29hhjG*h^NUw3tiykYi`}>#=zkS%i|c+&&(ZP0%gZaRpwYQlXW^#z{=K&^
zO$q%%?W>qmVDSojjhGC|jpunlsV9z>t-_Epn;y-ytg)z)LxY1ubup1lIK15GbLF--
z9g_yh(9ERv#b6-7@NjZE%!#65)2sf0xnLyxjVJvLzt3X!nfCd%ldg|fzEq$jT;4wo=EoUG$x(9zSr|u_t7y8yP8KGEH4a75RCTvMmRf-R>hjDzrHmiB8WAap
z>>g@;`^Kwvt`)9#-YBYk-&=SEoEG=A|2E9~u>Y`_%4;du_?Oa?*pFBYlPp)Xx;vSi
zf5LDJmE?)7m$1?r8;-{#?>3URz@L3tQnqIz6L;ihQJF}1ybJy)GoSs6s~`^Vdw~db
z{wC$x(k%lFff`|BxlT7x#qe;PS;+jZL0wA2PwgFK#a1L_?qu)o#=dWg<90U``j*?{H3wF|UQ*@TMgU;E3vn&7VjTj9FmZhfS9i#&
zxcJP*Ka69`mc4GdE1fP|L;85vw(+V*p6#hF0J8G(JTHUk<>ch90s7QTq*7UBRpniW
z>?DeFEL92M)X0r?E(MjORB?0_1=P!5jQH`I*~RrqGZfSU1g~P#7vcy42cE`eFftmX
zNiudGwe)AoL=;?|Xj>F7aa~+oB=gz;wCeSv`Pj3Ll_uVavE)6@4t^3M0xHy49r7Ky
z40;CExNH4a?XDM_xD{HHhT57}{ZEaMr}6V%=O*{=;XWhA-zm4O_&pMb*E3{Cs^Tf=
z4^`U~PtIHZU8HOhmhhlQQLmDhk5|x(z-Xr0xK(pfpJLI>H@fPv&RZP=T~~)2%0*t&
zg1Pk34cAbrYL9g&UR&I}UhP{(I5cG%vXl+cb|BAIV;JvINi{q}oLR5xi!^C_?iD42
ztKEg_%&kA8iAA;&n|d~sois?q#F#V1W%MJ*UJ>+98P1RP>m@8cj
z9j|Xb7m}=NY$z!d@KNcQ(!sCy99|slB%gE3*wKPb>H
z#=M{7S0owHl%=B%NcC$z_t!VZRE-;+!u6<%SqgI*^Nt623V(GC=0AR*?aw91@
z4*T_Vkkqp-HCp3pMf4tmfR-U3P>~H*=Ws%`a47LN1rH&7&>05A7{&
z?X4%u^^XE+MXQff^ay>=mxW^0;KGs=&-2EuaP~yqE!V!P#ysE{#i(DKd1_ZF`XL3f
z5xOR}?_+V#vl{6?LOUM~qzZGDvy<{W=p4HnJ3VOTe5r@0{Qi}N4V79XL~CPZ8r|K-
zBtF}ZVhPO#?toS%46}{$iQ-$UAu?aRO1bKO;?d0+y^2DvqNJF_)D{2y?BktOuj%Cm
zYqu``L|u}+aqE+M-)SK#EHXav-4E?!FQ3Q%OyKgUMy*Y1P8jk#WL0Fedl@{S+CNy>
z8Y5eq@>~bxS3@$x2m7^d^kOew5nyP3+#4q6f0k5Pc^DFOdz0#8ayGr&sBbDgTj>
zyLqV56|k)H0}z7#jqnB@I@;ZdrrC`$?7q64kZaSm{1E0BoE`~kh2s_4KV$DMZ#H}5
z^*72y&!ugOs{s?!c~<}uofqAM62jiO@(6?oJ~mwIZJxZXnLcgmyymEXwD4wPgKZQG
z=FD0lKzTHWJ<7*dMOdfCL2ul%44{r7o<}ZuihnR8zLaLv`u6f|K@njbsqZF>td+yU
zrv5mkPHYi)=ZMp3GsPMke|Ci?;l4tdb!?OS?;>y-`%*kR`xu$4M3b
zJXe}ll8(Dg7ArJ1kO>H+H0jX49R-}uf`oG$D+6$9nLw!fZ)K7DD33{Ar!W#8&I0AM
zOVdsfBrQAm7EW`eMlLfEpRdSQG^q0q>zCq)8c$B)B&JS@`XDgW82V`|UT_9*2+1H0
z!DA6S?7>IwO8{R#R+K=D8P4v6IPV}MggD}FWodWdfj@+YO>M_ugue3eZWrQ;Y
za4L|@6xq)=xt^8W$b1i{Sj0lJwg_g*b##jZyLJh2bI$2fKcBv%`|*GGWO`Iq3J`>sbws%7mu6>MhbaY%
z{@z3Q_w0uR6J!1HIXJ9Bi;vv>^wZUHABaWGKK?2yUUSo_7#H6I
zjv{)?+g$edI=UZ@TT2Nh=N$c;gjNjNJ>mfknSEZ7YK)JQmx+^C?r=F}*0^q@vie7U
zGT~hz
zXzTwA;j=+K17AV_+U#TIHOE@uSuTlurZON>CLjjI-RG-Q1|32y<
zda)uu@wBcWhu(YRGP197w|)VTV~Ld45OROx>vMEIYt^1VI*VxxR3O_}NF)(RjCd4l
z;A@Qq{^D%CY|%~cWtC&+{0qBAnhusE;iK;t6P@{TOk$qb6nZ!GQ2m3yCjvFC+x3sS
ztz{dB(Wn6#m&>pHbrZ|OjD>ucoOR@bH(@G*`A%D>m4{B6PNikav4MeW!bfAxS5(L1
z+2kX|Morp=Ubbrk6t=qdYxr01-ad^bYt$b_PV8=%xp!<~c`~7j8rCjHkMGz#{lBcQ51Q;Cc_vh+7zp}*@2RwNYfjX^EcCS60
z?-5ERd7{Xj{~F5!ohFc@J$nD(cBng(TzJ%XDS`%+D9pW@39SU$>)zF6Z0AC>N^LTF
z>?TIx!w7z$#xZ-FI3&cu$}+5^V6!#Fc%hRy6;wF(Dm|=l9`d+;F)0
z*2G!E4j~Z?VZHe6aDF2Gx^xEBu&FlR=p$x$nk%T_vvlq#^C~7Czxuv8GOCOoB73c|
z8I4T0AK^YCmnR#dXPpkFmWUIKMdhg9b%FabM+Q--vsn!~i10OZBYQfr9sP_U?sH&B
z{=bL2n5r%0lvU{XLJv^a`$wG+DsvX~@v^GAu4om7{9LDnXZL|)CNto2TBeRmLRJB?wwg2NYbs5d
z0G3*d5*nJ!Z(lBRoSBlilRa9m9Yg87GQ}ePR6HC7@j+@$RuCx^-Dujou7jdLKM$km
zrTApAMoGoDyO7*cwinbALuBLHp{35~10S^+q^i^(TihnI1v*=7*oF~I?o8{+GOy?T
zqTQjz9$VI3?@Wats>>E$qA8~RpWf~HpIx2qFwe$yKj1!gQvcGJ*I*49`>9!X
z?b1O!c$HJ|LqJG|QCsUpeBs3@QJQ{bau+%8->Aq$kUr|j`xqtSLU(lvfWE}na#3V*
zMve)?LESzDCC<&5P;M!$pOo4B!vZUjzvXfvz;sQQO!qJXR^rRxJawHow9+l$QaY?Jj*v)TV?MT1)(BCq~56b)3Y
zb%c=$9QIGHEG~iz`Q5Ef*L1e{G%+!8mB!e3k(?-fI9}+%0qwZnd7tw7y!xIRt#2t+GWFn8VMmzEJSQRJ@ijsM+4E
zM^Y$5Pnl&3A!d(KGs?I^zkbZl0i8a`(>=0&3vu(Wb*FEB@W2H0&fA^h(_s8Qo9htd
zCULgQDQcdhsqSO~B6gk**+VY*cSca|{DePwcyQ(ZuTju7WyKym3i}h*oLJI*AX7!|
zu)Gng5~0=;(~t}~8+gydXMTmQG0;8s+11vHXHbZ{pqm&)qKr->%?_zb;l2(4t?I?iJ$mufsy*T
z6|`Zxqkp`NG!39dF+qi->zQC6IL=L2Jc2|w2=&4ycD5ol!0aAL8>$Ztj=ntSr2(Q4J;0U=wuw$$g
zLG7b~5J!S8;t!AR&!jk{7#||{lE=_?mXNK1W?)-{)x$~cd)t^BaN3|vCh!%(#YFNY
z4KmbiJj%gI@wrNc%Ho?y3+M{9h%X)Inu?vz4|k@0?qU1*iX+&$NJI*IAF=#Q
zlqhaE>``Xc_S_f$O0)2wXVfb)ZO%`v+I9iUR*;3-?AA7vl|1ftXF4e?CO0l4Md`G+
zQ_SUp`KhV6iQ@YN&Npp~uBF1LfQWXw&K1^#<7WK3&2q>8p*=#!SC9dcgDRfP5665x{{rbQ
zgLV@iwn2Nhco`WBYbNp)VaMF$OX@WP3SfmW;@r1CtMZA3F2{`M{q8DyVV*W7V@2|LvBfBS}mhulM|}5Ef~yM`M}~6#qVs4c_Q}*!fJbN_gD7%ZLXTCHVZlqyVa(-)nsGIFZRfWwEtT~ISmPkI6i?F*r9H?5p|BB=kezJ#;
z7LJdw#{ePuD4L^zQ^Sg*G7n@y&G#d}9yVV|I|qhASkpBGbUvZAB@LvBU3Z~O=kL;b
zS#n0zIvehqTFld!pFfAv^p(`e$pUz>YTmK4zv^0P*rQ%OdsO6ds5M_(XZLzC^%0<8
z#Ya1|npUMEAttTb)`tUYB>cX^dqnu+qlylWK6=r?(w{!>EsJ7kY7WqB2uZ0PXdqZy=-&*AhHn`@w?>7#6qpKtBn2eeZ
z#+Zw7d@s@C^%lg%FK-sl+RBSm5fiK8l8K3NuKg90tkpK}JgIt(C@?WFU_P504PK|!
zv#sg4>GPe_sPET{aaWye2`=LllTwm0xZ*i6aSioy>mdW_lO)H`A3%U@CBKRd6TDu$
z^Ljq~n>}XbBTGid%#*7{B@OYgCN#6jX*}OfkV;Ik-KaC$sT+
z2Q_#8+C5R9?cS*OGI5K7glxq<#6?EEb71Cz4hZ!Bi32ZwTqL&{g(Ljb-8U$Vg?G%1
zHG|tEze`OEma!UWFZy~|dENka(WHHvc9
zgv}TV$S}tBu7J|Tcee|ndSh^Tp>1?~pnL|*m8`W28&|TDYkjz7A2>iq6yVqm2aSm9
zIZQ8i*d&Qd%T9N^a+*TcRfW*~jJ)3?xjP?1Y`g~&rP`(BDFJR#a#R3hJg4~bwgd)j
zBHCtaI$!_Lms%U)-j(vCo2ULYwubfvj0a+A8jRuBxMcl3pe1j#nZ5nr!z()qRMu0r
zkm- |