<?php
class Company {
var $departments = [];
function __construct($departments) {
$this->departments = $departments;
}
public function totalEmployees()
{
$totalEmployees = 0;
foreach ($this->departments as $department){
$totalEmployees += $department->dpEmployees($department->employees);
}
return $totalEmployees;
}
public function totalCoffeConsumption()
{
$totalCoffeConsumption = 0;
foreach ($this->departments as $department) {
$totalCoffeConsumption += $department->dpCoffeConusmption($department->employees);
}
return $totalCoffeConsumption;
}
public function totalSalary()
{
$totalSalary = 0;
foreach ($this->departments as $department) {
$totalSalary += $department->dpSalary($department->employees);
}
return $totalSalary;
}
public function totalReports()
{
$totalReports = 0;
foreach ($this->departments as $department) {
$totalReports += $department->dpReports($department->employees);
}
return $totalReports;
}
public function totalMainReports()
{
$totalMainReports = 0;
foreach ($this->departments as $department) {
$totalMainReports += $department->dpMainReports($department->employees);
}
return $totalMainReports;
}
public function totalBlueprints()
{
$totalBlueprints = 0;
foreach ($this->departments as $department) {
$totalBlueprints += $department->dpBlueprints($department->employees);
}
return $totalBlueprints;
}
public function avarageEmployees()
{
return $avarageEmployees = totalEmployees
($this->departments) / count($this->departments);
}
}
class Department
{
var $employees = [];
function __construct($name, $employees)
{
$this->name = $name;
$this->employees = $employees;
}
public function dpEmployees()
{
return count($this->employees);
}
public function dpCoffeConusmption ()
{
$dpCoffeConsumption = 0;
foreach ($this->employees as $employee){
if ($employee->isBoss == true) {
$dpCoffeConsumption += $employee->amountOfCoffe * 2;
} else {
$dpCoffeConsumption += $employee->amountOfCoffe;
}
}
return $dpCoffeConsumption;
}
public function dpSalary ()
{
$dpSalary = 0;
foreach ($this->employees as $employee) {
if ($employee->rank == 3) {
$dpSalary += $employee->baseSalary + ($employee->baseSalary * 0.5);
} elseif ($employee->rank == 2) {
$dpSalary += $employee->baseSalary + ($employee->baseSalary * 0.25);
} else {
$dpSalary += $employee->baseSalary;
}
}
return $dpSalary;
}
public function dpReports ()
{
$dpReports = 0;
foreach ($this->employees as $employee) {
$dpReports += $employee->reports;
}
return $dpReports;
}
public function dpBlueprints ()
{
$dpBlueprints = 0;
foreach ($this->employees as $employee) {
$dpBlueprints += $employee->blueprints;
}
return $dpBlueprints;
}
public function dpMainReports ()
{
$dpMainReports = 0;
foreach ($this->employees as $employee) {
$dpMainReports += $employee->mainReports;
}
return $dpMainReports;
}
}
class Employee
{
function __construct ($rank, $isBoss)
{
$this->isBoss = $isBoss;
$this->rank = $rank;
}
public $amountOfCoffe;
public $baseSalary;
public $reports;
public $mainReports;
public $blueprints;
}
class Manager extends Employee
{
public $baseSalary = 500;
public $amountOfCoffe = 25;
public $reports = 200;
}
class Engeneer extends Employee
{
public $baseSalary = 200;
public $amountOfCoffe = 5;
public $blueprints = 50;
}
class Marketolog extends Employee
{
public $baseSalary = 400;
public $amountOfCoffe = 20;
public $reports = 150;
}
class Analyst extends Employee
{
public $baseSalary = 800;
public $amountOfCoffe = 45;
public $mainReports = 5;
}
$pdEmployees = [
$pdBoss = new Manager(2, true),
$pdMe = new Manager(1, false),
$pdMe = new Manager(1, false),
$pdMe = new Manager(1, false),
$pdMe = new Manager(1, false),
$pdMe = new Manager(1, false),
$pdMe = new Manager(1, false),
$pdMe = new Manager(1, false),
$pdMe = new Manager(1, false),
$pdMe = new Manager(1, false),
$pdMe = new Manager(2, false),
$pdMe = new Manager(2, false),
$pdMe = new Manager(2, false),
$pdMe = new Manager(3, false),
$pdMe = new Manager(3, false),
];
$sdEmployees = [
$sdBoss = new Marketolog(2, true),
$sdMe = new Manager(1, false),
$sdMe = new Manager(1, false),
$sdMe = new Manager(1, false),
$sdMe = new Manager(1, false),
$sdMe = new Manager(1, false),
$sdMe = new Manager(1, false),
$sdMe = new Manager(1, false),
$sdMe = new Manager(1, false),
$sdMe = new Manager(1, false),
$sdMe = new Manager(1, false),
$sdMe = new Manager(1, false),
$sdMe = new Manager(1, false),
$sdMa = new Marketolog(1, false),
$sdMa = new Marketolog(1, false),
$sdMa = new Marketolog(1, false),
$sdMa = new Marketolog(1, false),
$sdMa = new Marketolog(1, false),
$sdMa = new Marketolog(1, false),
$sdMa = new Marketolog(1, false),
$sdMa = new Marketolog(1, false),
$sdMa = new Marketolog(1, false),
$sdMa = new Marketolog(1, false),
$sdAn = new Analyst(1, false),
];
$mdEmployees = [
$mdBoss = new Marketolog(3, true),
$mdMa = new Marketolog(1, false),
$mdMa = new Marketolog(1, false),
$mdMa = new Marketolog(1, false),
$mdMa = new Marketolog(1, false),
$mdMa = new Marketolog(1, false),
$mdMa = new Marketolog(1, false),
$mdMa = new Marketolog(1, false),
$mdMa = new Marketolog(1, false),
$mdMa = new Marketolog(1, false),
$mdMa = new Marketolog(1, false),
$mdMa = new Marketolog(1, false),
$mdMa = new Marketolog(1, false),
$mdMa = new Marketolog(1, false),
$mdMa = new Marketolog(1, false),
$mdMa = new Marketolog(1, false),
$mdMa = new Marketolog(2, false),
$mdMa = new Marketolog(2, false),
$mdMa = new Marketolog(2, false),
$mdMa = new Marketolog(2, false),
$mdMa = new Marketolog(2, false),
$mdMa = new Marketolog(2, false),
$mdMa = new Marketolog(2, false),
$mdMa = new Marketolog(2, false),
$mdMa = new Marketolog(2, false),
$mdMa = new Marketolog(2, false),
$mdMe = new Manager(1, false),
$mdMe = new Manager(1, false),
$mdMe = new Manager(1, false),
$mdMe = new Manager(1, false),
$mdMe = new Manager(1, false),
$mdMe = new Manager(1, false),
$mdMe = new Manager(1, false),
$mdMe = new Manager(1, false),
$mdEn = new Engeneer(1, false),
$mdEn = new Engeneer(1, false),
$mdEn = new Engeneer(1, false),
$mdEn = new Engeneer(1, false),
$mdEn = new Engeneer(1, false),
];
$ldEmployees = [
$ldBoss = new Manager(1, true),
$ldMe = new Manager(1, false),
$ldMe = new Manager(1, false),
$ldMe = new Manager(1, false),
$ldMe = new Manager(1, false),
$ldMe = new Manager(1, false),
$ldMe = new Manager(1, false),
$ldMe = new Manager(1, false),
$ldMe = new Manager(1, false),
$ldMe = new Manager(1, false),
$ldMe = new Manager(1, false),
$ldMe = new Manager(1, false),
$ldMe = new Manager(1, false),
$ldMe = new Manager(1, false),
$ldMe = new Manager(2, false),
$ldMe = new Manager(2, false),
$ldMe = new Manager(2, false),
$ldMe = new Manager(2, false),
$ldMe = new Manager(2, false),
$ldEn = new Engeneer(1, false),
$ldEn = new Engeneer(1, false),
$ldEn = new Engeneer(1, false),
$ldEn = new Engeneer(1, false),
$ldEn = new Engeneer(1, false),
];
$pdDepartment = new Department("Purchase", $pdEmployees);
$mdDepartment = new Department("Marketing", $mdEmployees);
$sdDepartment = new Department("Sellers", $sdEmployees);
$ldDepartment = new Department("Logistic", $ldEmployees);
$departments = [$pdDepartment, $sdDepartment, $mdDepartment, $ldDepartment];
$company = new Company($departments);
foreach ($departments as $department){
echo $department->name . "Department" . "\n" .
"Employees: " . $department->dpEmployees() . "\n" .
"Coffe: " . $department->dpCoffeConusmption() . "\n" .
"Salary: " . $department->dpSalary() . "\n" .
"Reports: " . $department->dpReports() . "\n" .
"MainReports: " . $department->dpMainReports() . "\n" .
"Blueprints: " . $department->dpBlueprints() . "\n" ;
}
echo "Total Employees: " . $company->totalEmployees($departments) . "\n" .
"Total coffe: " . $company->totalCoffeConsumption($departments) . "\n" .
"Total salary: " . $company->totalSalary($departments) . "\n" .
"Total reports: " . $company->totalReports($departments) . "\n" .
"Total main reports: " . $company->totalMainReports($departments) . "\n" .
"Total blueprints: " . $company->totalBlueprints($departments) . "\n";
echo "Avarage Employees: " . round($company->totalEmployees($departments) / count($departments), 2) . "\n" . "Avarage coffe: " . round($company->totalCoffeConsumption($departments) / count($departments), 2) . "\n" . "Avarage salary: " . round($company->totalSalary($departments) / count($departments), 2) . "\n" . "Avarage reports: " . round($company->totalReports($departments) / count($departments), 2) . "\n" . "Avarage main reports: " . round($company->totalMainReports($departments) / count($departments), 2) . "\n" . "Avarage blueprints: " . round($company->totalBlueprints($departments) / count($departments), 2) . "\n";
PD9waHAKCmNsYXNzIENvbXBhbnkgewogICAgCiAgICB2YXIgJGRlcGFydG1lbnRzID0gW107CiAgICAKICAgIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRkZXBhcnRtZW50cykgewogICAgICAgIAogICAgICAgICR0aGlzLT5kZXBhcnRtZW50cyA9ICRkZXBhcnRtZW50czsKICAgICAgICAKICAgIH0KICAgIAogICAgcHVibGljIGZ1bmN0aW9uIHRvdGFsRW1wbG95ZWVzKCkKICAgIHsKICAgICAgICAKICAgICAgICAkdG90YWxFbXBsb3llZXMgPSAwOwogICAgICAgIGZvcmVhY2ggKCR0aGlzLT5kZXBhcnRtZW50cyBhcyAkZGVwYXJ0bWVudCl7CiAgICAgICAgICAgICAgICAkdG90YWxFbXBsb3llZXMgKz0gJGRlcGFydG1lbnQtPmRwRW1wbG95ZWVzKCRkZXBhcnRtZW50LT5lbXBsb3llZXMpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gJHRvdGFsRW1wbG95ZWVzOwogICAgICAgIAogICAgfQogICAgCiAgICBwdWJsaWMgZnVuY3Rpb24gdG90YWxDb2ZmZUNvbnN1bXB0aW9uKCkKICAgIHsKICAgICAgICAKICAgICAgICAkdG90YWxDb2ZmZUNvbnN1bXB0aW9uID0gMDsKICAgICAgICBmb3JlYWNoICgkdGhpcy0+ZGVwYXJ0bWVudHMgYXMgJGRlcGFydG1lbnQpIHsKICAgICAgICAgICAgJHRvdGFsQ29mZmVDb25zdW1wdGlvbiArPSAkZGVwYXJ0bWVudC0+ZHBDb2ZmZUNvbnVzbXB0aW9uKCRkZXBhcnRtZW50LT5lbXBsb3llZXMpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gJHRvdGFsQ29mZmVDb25zdW1wdGlvbjsKICAgICAgICAKICAgIH0KICAgIAogICAgcHVibGljIGZ1bmN0aW9uIHRvdGFsU2FsYXJ5KCkKICAgIHsKICAgICAgICAKICAgICAgICAkdG90YWxTYWxhcnkgPSAwOwogICAgICAgIGZvcmVhY2ggKCR0aGlzLT5kZXBhcnRtZW50cyBhcyAkZGVwYXJ0bWVudCkgewogICAgICAgICAgICAkdG90YWxTYWxhcnkgKz0gJGRlcGFydG1lbnQtPmRwU2FsYXJ5KCRkZXBhcnRtZW50LT5lbXBsb3llZXMpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gJHRvdGFsU2FsYXJ5OwogICAgICAgIAogICAgfQogICAgCiAgICBwdWJsaWMgZnVuY3Rpb24gdG90YWxSZXBvcnRzKCkKICAgIHsKICAgICAgICAKICAgICAgICAkdG90YWxSZXBvcnRzID0gMDsKICAgICAgICBmb3JlYWNoICgkdGhpcy0+ZGVwYXJ0bWVudHMgYXMgJGRlcGFydG1lbnQpIHsKICAgICAgICAgICAgJHRvdGFsUmVwb3J0cyArPSAkZGVwYXJ0bWVudC0+ZHBSZXBvcnRzKCRkZXBhcnRtZW50LT5lbXBsb3llZXMpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gJHRvdGFsUmVwb3J0czsKICAgICAgICAKICAgIH0KICAgIAogICAgcHVibGljIGZ1bmN0aW9uIHRvdGFsTWFpblJlcG9ydHMoKQogICAgewogICAgICAgIAogICAgICAgICR0b3RhbE1haW5SZXBvcnRzID0gMDsKICAgICAgICBmb3JlYWNoICgkdGhpcy0+ZGVwYXJ0bWVudHMgYXMgJGRlcGFydG1lbnQpIHsKICAgICAgICAgICAgJHRvdGFsTWFpblJlcG9ydHMgKz0gJGRlcGFydG1lbnQtPmRwTWFpblJlcG9ydHMoJGRlcGFydG1lbnQtPmVtcGxveWVlcyk7CiAgICAgICAgfQogICAgICAgIHJldHVybiAkdG90YWxNYWluUmVwb3J0czsKICAgICAgICAKICAgIH0KICAgIAogICAgcHVibGljIGZ1bmN0aW9uIHRvdGFsQmx1ZXByaW50cygpCiAgICB7CiAgICAgICAgCiAgICAgICAgJHRvdGFsQmx1ZXByaW50cyA9IDA7CiAgICAgICAgZm9yZWFjaCAoJHRoaXMtPmRlcGFydG1lbnRzIGFzICRkZXBhcnRtZW50KSB7CiAgICAgICAgICAgICR0b3RhbEJsdWVwcmludHMgKz0gJGRlcGFydG1lbnQtPmRwQmx1ZXByaW50cygkZGVwYXJ0bWVudC0+ZW1wbG95ZWVzKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICR0b3RhbEJsdWVwcmludHM7CiAgICAgICAgCiAgICB9CiAgICAKICAgIHB1YmxpYyBmdW5jdGlvbiBhdmFyYWdlRW1wbG95ZWVzKCkKICAgIHsKICAgICAgICAgIAogICAgICAgICAgICAgcmV0dXJuICRhdmFyYWdlRW1wbG95ZWVzID0gdG90YWxFbXBsb3llZXMoJHRoaXMtPmRlcGFydG1lbnRzKSAvIGNvdW50KCR0aGlzLT5kZXBhcnRtZW50cyk7CiAgICAgICAgIAogICAgfQogICAKfQoKY2xhc3MgRGVwYXJ0bWVudAp7CiAgICAKICAgIHZhciAkZW1wbG95ZWVzID0gW107CiAgICAKICAgIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRuYW1lLCAkZW1wbG95ZWVzKSAKICAgIHsKICAgIAogICAgICAgICR0aGlzLT5uYW1lID0gJG5hbWU7CiAgICAgICAgJHRoaXMtPmVtcGxveWVlcyA9ICRlbXBsb3llZXM7CiAgICAgICAgCiAgICB9CiAgICAKICAgIHB1YmxpYyBmdW5jdGlvbiAgZHBFbXBsb3llZXMoKQogICAgewogICAgICAgIAogICAgICAgIHJldHVybiBjb3VudCgkdGhpcy0+ZW1wbG95ZWVzKTsKICAgICAgICAKICAgIH0KCiAgICAgICAgcHVibGljIGZ1bmN0aW9uIGRwQ29mZmVDb251c21wdGlvbiAoKQogICAgewogICAgICAgIAogICAgICAgICRkcENvZmZlQ29uc3VtcHRpb24gPSAwOwogICAgICAgIGZvcmVhY2ggKCR0aGlzLT5lbXBsb3llZXMgYXMgJGVtcGxveWVlKXsKICAgICAgICAgICAgaWYgKCRlbXBsb3llZS0+aXNCb3NzID09IHRydWUpIHsKICAgICAgICAgICAgICAgICRkcENvZmZlQ29uc3VtcHRpb24gKz0gJGVtcGxveWVlLT5hbW91bnRPZkNvZmZlICogMjsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICRkcENvZmZlQ29uc3VtcHRpb24gKz0gJGVtcGxveWVlLT5hbW91bnRPZkNvZmZlOyAKICAgICAgICAgICAgfSAKICAgICAgICB9CiAgICAgICAgcmV0dXJuICRkcENvZmZlQ29uc3VtcHRpb247CiAgICAgICAgCiAgICB9CiAgICAKICAgIHB1YmxpYyBmdW5jdGlvbiBkcFNhbGFyeSAoKQogICAgewogICAgICAgIAogICAgICAgICRkcFNhbGFyeSA9IDA7CiAgICAgICAgZm9yZWFjaCAoJHRoaXMtPmVtcGxveWVlcyBhcyAkZW1wbG95ZWUpIHsKICAgICAgICAgICAgaWYgKCRlbXBsb3llZS0+cmFuayA9PSAzKSB7CiAgICAgICAgICAgICAgICAkZHBTYWxhcnkgKz0gJGVtcGxveWVlLT5iYXNlU2FsYXJ5ICsgKCRlbXBsb3llZS0+YmFzZVNhbGFyeSAqIDAuNSk7CiAgICAgICAgICAgIH0gZWxzZWlmICgkZW1wbG95ZWUtPnJhbmsgPT0gMikgewogICAgICAgICAgICAgICAgJGRwU2FsYXJ5ICs9ICRlbXBsb3llZS0+YmFzZVNhbGFyeSArICgkZW1wbG95ZWUtPmJhc2VTYWxhcnkgKiAwLjI1KTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICRkcFNhbGFyeSArPSAkZW1wbG95ZWUtPmJhc2VTYWxhcnk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuICRkcFNhbGFyeTsKICAgIH0KICAgIAogICAgcHVibGljIGZ1bmN0aW9uICBkcFJlcG9ydHMgKCkKICAgIHsKICAgICAgICAKICAgICAgICAkZHBSZXBvcnRzID0gMDsKICAgICAgICBmb3JlYWNoICgkdGhpcy0+ZW1wbG95ZWVzIGFzICRlbXBsb3llZSkgewogICAgICAgICAgICAkZHBSZXBvcnRzICs9ICRlbXBsb3llZS0+cmVwb3J0czsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICRkcFJlcG9ydHM7CiAgICB9CiAgICAKICAgIHB1YmxpYyBmdW5jdGlvbiAgZHBCbHVlcHJpbnRzICgpCiAgICB7CiAgICAgICAgCiAgICAgICAgJGRwQmx1ZXByaW50cyA9IDA7CiAgICAgICAgZm9yZWFjaCAoJHRoaXMtPmVtcGxveWVlcyBhcyAkZW1wbG95ZWUpIHsKICAgICAgICAgICAgJGRwQmx1ZXByaW50cyArPSAkZW1wbG95ZWUtPmJsdWVwcmludHM7CiAgICAgICAgfQogICAgICAgIHJldHVybiAkZHBCbHVlcHJpbnRzOwogICAgfQogICAgCiAgICBwdWJsaWMgZnVuY3Rpb24gIGRwTWFpblJlcG9ydHMgKCkKICAgIHsKICAgICAgICAKICAgICAgICAkZHBNYWluUmVwb3J0cyA9IDA7CiAgICAgICAgZm9yZWFjaCAoJHRoaXMtPmVtcGxveWVlcyBhcyAkZW1wbG95ZWUpIHsKICAgICAgICAgICAgJGRwTWFpblJlcG9ydHMgKz0gJGVtcGxveWVlLT5tYWluUmVwb3J0czsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICRkcE1haW5SZXBvcnRzOwogICAgfQogICAKICAgIAogIAogICAgICAgICAKfQoKY2xhc3MgRW1wbG95ZWUKewogICAgIGZ1bmN0aW9uIF9fY29uc3RydWN0ICgkcmFuaywgJGlzQm9zcykKICAgIHsKICAgICAgICAkdGhpcy0+aXNCb3NzID0gJGlzQm9zczsKICAgICAgICAkdGhpcy0+cmFuayA9ICRyYW5rOwogICAgIAogICAgfQoKICAgIHB1YmxpYyAkYW1vdW50T2ZDb2ZmZTsKICAgIHB1YmxpYyAkYmFzZVNhbGFyeTsKICAgIHB1YmxpYyAkcmVwb3J0czsKICAgIHB1YmxpYyAkbWFpblJlcG9ydHM7CiAgICBwdWJsaWMgJGJsdWVwcmludHM7CiAgICAKfQoKY2xhc3MgTWFuYWdlciBleHRlbmRzIEVtcGxveWVlCnsKICAgIAogICAgcHVibGljICRiYXNlU2FsYXJ5ID0gNTAwOwogICAgcHVibGljICRhbW91bnRPZkNvZmZlID0gMjU7CiAgICBwdWJsaWMgJHJlcG9ydHMgPSAyMDA7CiAgICAKfQoKY2xhc3MgRW5nZW5lZXIgZXh0ZW5kcyBFbXBsb3llZQp7CiAgICAKICAgIHB1YmxpYyAkYmFzZVNhbGFyeSA9IDIwMDsKICAgIHB1YmxpYyAkYW1vdW50T2ZDb2ZmZSA9IDU7CiAgICBwdWJsaWMgJGJsdWVwcmludHMgPSA1MDsKICAgIAp9CgpjbGFzcyBNYXJrZXRvbG9nIGV4dGVuZHMgRW1wbG95ZWUKewogICAgCiAgICBwdWJsaWMgJGJhc2VTYWxhcnkgPSA0MDA7CiAgICBwdWJsaWMgJGFtb3VudE9mQ29mZmUgPSAyMDsKICAgIHB1YmxpYyAkcmVwb3J0cyA9IDE1MDsKICAgIAp9CgpjbGFzcyBBbmFseXN0IGV4dGVuZHMgRW1wbG95ZWUKewogICAgCiAgICBwdWJsaWMgJGJhc2VTYWxhcnkgPSA4MDA7CiAgICBwdWJsaWMgJGFtb3VudE9mQ29mZmUgPSA0NTsKICAgIHB1YmxpYyAkbWFpblJlcG9ydHMgPSA1OwogICAgCn0KCgokcGRFbXBsb3llZXMgPSBbCiAgICAkcGRCb3NzID0gbmV3IE1hbmFnZXIoMiwgdHJ1ZSksCiAgICAkcGRNZSA9IG5ldyBNYW5hZ2VyKDEsIGZhbHNlKSwKICAgICRwZE1lID0gbmV3IE1hbmFnZXIoMSwgZmFsc2UpLAogICAgJHBkTWUgPSBuZXcgTWFuYWdlcigxLCBmYWxzZSksCiAgICAkcGRNZSA9IG5ldyBNYW5hZ2VyKDEsIGZhbHNlKSwKICAgICRwZE1lID0gbmV3IE1hbmFnZXIoMSwgZmFsc2UpLAogICAgJHBkTWUgPSBuZXcgTWFuYWdlcigxLCBmYWxzZSksCiAgICAkcGRNZSA9IG5ldyBNYW5hZ2VyKDEsIGZhbHNlKSwKICAgICRwZE1lID0gbmV3IE1hbmFnZXIoMSwgZmFsc2UpLAogICAgJHBkTWUgPSBuZXcgTWFuYWdlcigxLCBmYWxzZSksCiAgICAkcGRNZSA9IG5ldyBNYW5hZ2VyKDIsIGZhbHNlKSwKICAgICRwZE1lID0gbmV3IE1hbmFnZXIoMiwgZmFsc2UpLAogICAgJHBkTWUgPSBuZXcgTWFuYWdlcigyLCBmYWxzZSksCiAgICAkcGRNZSA9IG5ldyBNYW5hZ2VyKDMsIGZhbHNlKSwKICAgICRwZE1lID0gbmV3IE1hbmFnZXIoMywgZmFsc2UpLApdOwokc2RFbXBsb3llZXMgPSBbCiAgICAkc2RCb3NzID0gbmV3IE1hcmtldG9sb2coMiwgdHJ1ZSksCiAgICAkc2RNZSA9IG5ldyBNYW5hZ2VyKDEsIGZhbHNlKSwKICAgICRzZE1lID0gbmV3IE1hbmFnZXIoMSwgZmFsc2UpLAogICAgJHNkTWUgPSBuZXcgTWFuYWdlcigxLCBmYWxzZSksCiAgICAkc2RNZSA9IG5ldyBNYW5hZ2VyKDEsIGZhbHNlKSwKICAgICRzZE1lID0gbmV3IE1hbmFnZXIoMSwgZmFsc2UpLAogICAgJHNkTWUgPSBuZXcgTWFuYWdlcigxLCBmYWxzZSksCiAgICAkc2RNZSA9IG5ldyBNYW5hZ2VyKDEsIGZhbHNlKSwKICAgICRzZE1lID0gbmV3IE1hbmFnZXIoMSwgZmFsc2UpLAogICAgJHNkTWUgPSBuZXcgTWFuYWdlcigxLCBmYWxzZSksCiAgICAkc2RNZSA9IG5ldyBNYW5hZ2VyKDEsIGZhbHNlKSwKICAgICRzZE1lID0gbmV3IE1hbmFnZXIoMSwgZmFsc2UpLAogICAgJHNkTWUgPSBuZXcgTWFuYWdlcigxLCBmYWxzZSksCiAgICAkc2RNYSA9IG5ldyBNYXJrZXRvbG9nKDEsIGZhbHNlKSwKICAgICRzZE1hID0gbmV3IE1hcmtldG9sb2coMSwgZmFsc2UpLAogICAgJHNkTWEgPSBuZXcgTWFya2V0b2xvZygxLCBmYWxzZSksCiAgICAkc2RNYSA9IG5ldyBNYXJrZXRvbG9nKDEsIGZhbHNlKSwKICAgICRzZE1hID0gbmV3IE1hcmtldG9sb2coMSwgZmFsc2UpLAogICAgJHNkTWEgPSBuZXcgTWFya2V0b2xvZygxLCBmYWxzZSksCiAgICAkc2RNYSA9IG5ldyBNYXJrZXRvbG9nKDEsIGZhbHNlKSwKICAgICRzZE1hID0gbmV3IE1hcmtldG9sb2coMSwgZmFsc2UpLAogICAgJHNkTWEgPSBuZXcgTWFya2V0b2xvZygxLCBmYWxzZSksCiAgICAkc2RNYSA9IG5ldyBNYXJrZXRvbG9nKDEsIGZhbHNlKSwKICAgICRzZEFuID0gbmV3IEFuYWx5c3QoMSwgZmFsc2UpLApdOwokbWRFbXBsb3llZXMgPSBbCiAgICAkbWRCb3NzID0gbmV3IE1hcmtldG9sb2coMywgdHJ1ZSksCiAgICAkbWRNYSA9IG5ldyBNYXJrZXRvbG9nKDEsIGZhbHNlKSwKICAgICRtZE1hID0gbmV3IE1hcmtldG9sb2coMSwgZmFsc2UpLAogICAgJG1kTWEgPSBuZXcgTWFya2V0b2xvZygxLCBmYWxzZSksCiAgICAkbWRNYSA9IG5ldyBNYXJrZXRvbG9nKDEsIGZhbHNlKSwKICAgICRtZE1hID0gbmV3IE1hcmtldG9sb2coMSwgZmFsc2UpLAogICAgJG1kTWEgPSBuZXcgTWFya2V0b2xvZygxLCBmYWxzZSksCiAgICAkbWRNYSA9IG5ldyBNYXJrZXRvbG9nKDEsIGZhbHNlKSwKICAgICRtZE1hID0gbmV3IE1hcmtldG9sb2coMSwgZmFsc2UpLAogICAgJG1kTWEgPSBuZXcgTWFya2V0b2xvZygxLCBmYWxzZSksCiAgICAkbWRNYSA9IG5ldyBNYXJrZXRvbG9nKDEsIGZhbHNlKSwKICAgICRtZE1hID0gbmV3IE1hcmtldG9sb2coMSwgZmFsc2UpLAogICAgJG1kTWEgPSBuZXcgTWFya2V0b2xvZygxLCBmYWxzZSksCiAgICAkbWRNYSA9IG5ldyBNYXJrZXRvbG9nKDEsIGZhbHNlKSwKICAgICRtZE1hID0gbmV3IE1hcmtldG9sb2coMSwgZmFsc2UpLAogICAgJG1kTWEgPSBuZXcgTWFya2V0b2xvZygxLCBmYWxzZSksCiAgICAkbWRNYSA9IG5ldyBNYXJrZXRvbG9nKDIsIGZhbHNlKSwKICAgICRtZE1hID0gbmV3IE1hcmtldG9sb2coMiwgZmFsc2UpLAogICAgJG1kTWEgPSBuZXcgTWFya2V0b2xvZygyLCBmYWxzZSksCiAgICAkbWRNYSA9IG5ldyBNYXJrZXRvbG9nKDIsIGZhbHNlKSwKICAgICRtZE1hID0gbmV3IE1hcmtldG9sb2coMiwgZmFsc2UpLAogICAgJG1kTWEgPSBuZXcgTWFya2V0b2xvZygyLCBmYWxzZSksCiAgICAkbWRNYSA9IG5ldyBNYXJrZXRvbG9nKDIsIGZhbHNlKSwKICAgICRtZE1hID0gbmV3IE1hcmtldG9sb2coMiwgZmFsc2UpLAogICAgJG1kTWEgPSBuZXcgTWFya2V0b2xvZygyLCBmYWxzZSksCiAgICAkbWRNYSA9IG5ldyBNYXJrZXRvbG9nKDIsIGZhbHNlKSwKICAgICRtZE1lID0gbmV3IE1hbmFnZXIoMSwgZmFsc2UpLAogICAgJG1kTWUgPSBuZXcgTWFuYWdlcigxLCBmYWxzZSksCiAgICAkbWRNZSA9IG5ldyBNYW5hZ2VyKDEsIGZhbHNlKSwKICAgICRtZE1lID0gbmV3IE1hbmFnZXIoMSwgZmFsc2UpLAogICAgJG1kTWUgPSBuZXcgTWFuYWdlcigxLCBmYWxzZSksCiAgICAkbWRNZSA9IG5ldyBNYW5hZ2VyKDEsIGZhbHNlKSwKICAgICRtZE1lID0gbmV3IE1hbmFnZXIoMSwgZmFsc2UpLAogICAgJG1kTWUgPSBuZXcgTWFuYWdlcigxLCBmYWxzZSksCiAgICAkbWRFbiA9IG5ldyBFbmdlbmVlcigxLCBmYWxzZSksCiAgICAkbWRFbiA9IG5ldyBFbmdlbmVlcigxLCBmYWxzZSksCiAgICAkbWRFbiA9IG5ldyBFbmdlbmVlcigxLCBmYWxzZSksCiAgICAkbWRFbiA9IG5ldyBFbmdlbmVlcigxLCBmYWxzZSksCiAgICAkbWRFbiA9IG5ldyBFbmdlbmVlcigxLCBmYWxzZSksCl07CiRsZEVtcGxveWVlcyA9IFsKICAgICRsZEJvc3MgPSBuZXcgTWFuYWdlcigxLCB0cnVlKSwKICAgICRsZE1lID0gbmV3IE1hbmFnZXIoMSwgZmFsc2UpLAogICAgJGxkTWUgPSBuZXcgTWFuYWdlcigxLCBmYWxzZSksCiAgICAkbGRNZSA9IG5ldyBNYW5hZ2VyKDEsIGZhbHNlKSwKICAgICRsZE1lID0gbmV3IE1hbmFnZXIoMSwgZmFsc2UpLAogICAgJGxkTWUgPSBuZXcgTWFuYWdlcigxLCBmYWxzZSksCiAgICAkbGRNZSA9IG5ldyBNYW5hZ2VyKDEsIGZhbHNlKSwKICAgICRsZE1lID0gbmV3IE1hbmFnZXIoMSwgZmFsc2UpLAogICAgJGxkTWUgPSBuZXcgTWFuYWdlcigxLCBmYWxzZSksCiAgICAkbGRNZSA9IG5ldyBNYW5hZ2VyKDEsIGZhbHNlKSwKICAgICRsZE1lID0gbmV3IE1hbmFnZXIoMSwgZmFsc2UpLAogICAgJGxkTWUgPSBuZXcgTWFuYWdlcigxLCBmYWxzZSksCiAgICAkbGRNZSA9IG5ldyBNYW5hZ2VyKDEsIGZhbHNlKSwKICAgICRsZE1lID0gbmV3IE1hbmFnZXIoMSwgZmFsc2UpLAogICAgJGxkTWUgPSBuZXcgTWFuYWdlcigyLCBmYWxzZSksCiAgICAkbGRNZSA9IG5ldyBNYW5hZ2VyKDIsIGZhbHNlKSwKICAgICRsZE1lID0gbmV3IE1hbmFnZXIoMiwgZmFsc2UpLAogICAgJGxkTWUgPSBuZXcgTWFuYWdlcigyLCBmYWxzZSksCiAgICAkbGRNZSA9IG5ldyBNYW5hZ2VyKDIsIGZhbHNlKSwKICAgICRsZEVuID0gbmV3IEVuZ2VuZWVyKDEsIGZhbHNlKSwKICAgICRsZEVuID0gbmV3IEVuZ2VuZWVyKDEsIGZhbHNlKSwKICAgICRsZEVuID0gbmV3IEVuZ2VuZWVyKDEsIGZhbHNlKSwKICAgICRsZEVuID0gbmV3IEVuZ2VuZWVyKDEsIGZhbHNlKSwKICAgICRsZEVuID0gbmV3IEVuZ2VuZWVyKDEsIGZhbHNlKSwgCl07CiRwZERlcGFydG1lbnQgPSBuZXcgRGVwYXJ0bWVudCgiUHVyY2hhc2UiLCAkcGRFbXBsb3llZXMpOwokbWREZXBhcnRtZW50ID0gbmV3IERlcGFydG1lbnQoIk1hcmtldGluZyIsICRtZEVtcGxveWVlcyk7CiRzZERlcGFydG1lbnQgPSBuZXcgRGVwYXJ0bWVudCgiU2VsbGVycyIsICRzZEVtcGxveWVlcyk7CiRsZERlcGFydG1lbnQgPSBuZXcgRGVwYXJ0bWVudCgiTG9naXN0aWMiLCAkbGRFbXBsb3llZXMpOwoKCiRkZXBhcnRtZW50cyA9IFskcGREZXBhcnRtZW50LCAkc2REZXBhcnRtZW50LCAkbWREZXBhcnRtZW50LCAkbGREZXBhcnRtZW50XTsKCiRjb21wYW55ID0gbmV3IENvbXBhbnkoJGRlcGFydG1lbnRzKTsKCgpmb3JlYWNoICgkZGVwYXJ0bWVudHMgYXMgJGRlcGFydG1lbnQpewplY2hvICRkZXBhcnRtZW50LT5uYW1lIC4gIkRlcGFydG1lbnQiIC4gIlxuIiAuCiAgICAgIkVtcGxveWVlczogIiAuICRkZXBhcnRtZW50LT5kcEVtcGxveWVlcygpIC4gIlxuIiAuICAgCiAgICAgIkNvZmZlOiAiIC4gJGRlcGFydG1lbnQtPmRwQ29mZmVDb251c21wdGlvbigpIC4gIlxuIiAuCiAgICAgIlNhbGFyeTogIiAuICRkZXBhcnRtZW50LT5kcFNhbGFyeSgpIC4gIlxuIiAuCiAgICAgIlJlcG9ydHM6ICIgLiAkZGVwYXJ0bWVudC0+ZHBSZXBvcnRzKCkgLiAiXG4iIC4KICAgICAiTWFpblJlcG9ydHM6ICIgLiAkZGVwYXJ0bWVudC0+ZHBNYWluUmVwb3J0cygpIC4gIlxuIiAuCiAgICAgIkJsdWVwcmludHM6ICIgLiAkZGVwYXJ0bWVudC0+ZHBCbHVlcHJpbnRzKCkgLiAiXG4iIDsKICAgCmVjaG8gc3RyX3JlcGVhdCgiX18iLCAzMCkgLiAiXG4iOwp9CgplY2hvICJUb3RhbCBFbXBsb3llZXM6ICIgLiAkY29tcGFueS0+dG90YWxFbXBsb3llZXMoJGRlcGFydG1lbnRzKSAuICJcbiIgLiAKICAgICAiVG90YWwgY29mZmU6ICIgLiAkY29tcGFueS0+dG90YWxDb2ZmZUNvbnN1bXB0aW9uKCRkZXBhcnRtZW50cykgLiAiXG4iIC4KICAgICAiVG90YWwgc2FsYXJ5OiAiIC4gJGNvbXBhbnktPnRvdGFsU2FsYXJ5KCRkZXBhcnRtZW50cykgLiAiXG4iIC4KICAgICAiVG90YWwgcmVwb3J0czogIiAuICRjb21wYW55LT50b3RhbFJlcG9ydHMoJGRlcGFydG1lbnRzKSAuICJcbiIgLgogICAgICJUb3RhbCBtYWluIHJlcG9ydHM6ICIgLiAkY29tcGFueS0+dG90YWxNYWluUmVwb3J0cygkZGVwYXJ0bWVudHMpIC4gIlxuIiAuCiAgICAgIlRvdGFsIGJsdWVwcmludHM6ICIgLiAkY29tcGFueS0+dG90YWxCbHVlcHJpbnRzKCRkZXBhcnRtZW50cykgLiAiXG4iOwoKZWNobyBzdHJfcmVwZWF0KCJfXyIsIDMwKSAuICJcbiI7CgplY2hvICJBdmFyYWdlIEVtcGxveWVlczogIiAuIHJvdW5kKCRjb21wYW55LT50b3RhbEVtcGxveWVlcygkZGVwYXJ0bWVudHMpIC8gY291bnQoJGRlcGFydG1lbnRzKSwgMikgLiAiXG4iIC4gCiAgICAgIkF2YXJhZ2UgY29mZmU6ICIgLiByb3VuZCgkY29tcGFueS0+dG90YWxDb2ZmZUNvbnN1bXB0aW9uKCRkZXBhcnRtZW50cykgLyBjb3VudCgkZGVwYXJ0bWVudHMpLCAyKSAuICJcbiIgLgogICAgICJBdmFyYWdlIHNhbGFyeTogIiAuIHJvdW5kKCRjb21wYW55LT50b3RhbFNhbGFyeSgkZGVwYXJ0bWVudHMpIC8gY291bnQoJGRlcGFydG1lbnRzKSwgMikgLiAiXG4iIC4KICAgICAiQXZhcmFnZSByZXBvcnRzOiAiIC4gcm91bmQoJGNvbXBhbnktPnRvdGFsUmVwb3J0cygkZGVwYXJ0bWVudHMpIC8gY291bnQoJGRlcGFydG1lbnRzKSwgMikgLiAiXG4iIC4KICAgICAiQXZhcmFnZSBtYWluIHJlcG9ydHM6ICIgLiByb3VuZCgkY29tcGFueS0+dG90YWxNYWluUmVwb3J0cygkZGVwYXJ0bWVudHMpIC8gY291bnQoJGRlcGFydG1lbnRzKSwgMikgLiAiXG4iIC4KICAgICAiQXZhcmFnZSBibHVlcHJpbnRzOiAiIC4gcm91bmQoJGNvbXBhbnktPnRvdGFsQmx1ZXByaW50cygkZGVwYXJ0bWVudHMpIC8gY291bnQoJGRlcGFydG1lbnRzKSwgMikgLiAiXG4iOwogIA==