From 5dc02c6b6467029217453b345476d79a28189158 Mon Sep 17 00:00:00 2001 From: Ulill <148078505+ulilfarhah6@users.noreply.github.com> Date: Sun, 25 May 2025 15:23:18 +0700 Subject: [PATCH] push kode lagi --- app/Http/Controllers/AlgoritmaController.php | 154 +++++++------ app/Http/Controllers/AlternatifController.php | 115 +++++++++- app/Http/Controllers/Auth/LoginController.php | 5 +- .../Auth/VerificationController.php | 35 +-- app/Http/Controllers/ForgotPasswordController | 66 ++++++ app/Http/Controllers/PenilaianController.php | 186 +++++++++++----- app/Http/Controllers/ProfileController.php | 65 ++++++ .../Controllers/RegisterUserController.php | 19 +- app/Http/Kernel.php | 1 + app/Models/Alternatif.php | 2 +- app/Models/Kriteria.php | 5 +- app/Models/Penilaian.php | 7 +- app/Models/User.php | 5 +- app/Providers/RouteServiceProvider.php | 2 +- composer.json | 3 +- composer.lock | 66 +++++- .../2014_10_12_000000_create_users_table.php | 2 +- .../2024_03_21_create_notifications_table.php | 25 +++ .../2025_05_11_232611_create_jobs_table.php | 36 +++ public/assets/images/1748102937.jpg | Bin 0 -> 44798 bytes public/assets/images/1748108069.jpg | Bin 0 -> 26023 bytes public/assets/images/opah.jpg | Bin 0 -> 44798 bytes public/css/custom.css | 126 +++++++++++ .../admin/alternatif/alternatif-pdf.blade.php | 50 +++-- .../views/admin/alternatif/index.blade.php | 10 +- resources/views/admin/crips/edit.blade.php | 8 +- resources/views/admin/home.blade.php | 4 +- resources/views/admin/kriteria/show.blade.php | 14 +- .../views/admin/penilaian/index.blade.php | 76 +++---- .../admin/penilaian/penilaian-pdf.blade.php | 2 +- .../views/admin/perhitungan/index.blade.php | 126 +++++------ resources/views/admin/profile/index.blade.php | 169 ++++++++++++++ resources/views/admin/user/index.blade.php | 15 +- resources/views/admin/user/user-pdf.blade.php | 22 +- resources/views/auth/login.blade.php | 6 +- .../views/auth/passwords/confirm.blade.php | 2 +- .../views/auth/passwords/email.blade.php | 2 +- .../views/auth/passwords/reset.blade.php | 2 +- resources/views/auth/register.blade.php | 210 ++++++++++-------- resources/views/auth/verify.blade.php | 53 +++-- .../views/layouts/_partials/sidebar.blade.php | 15 +- .../layouts/_partials/sidebar2.blade.php | 15 +- .../views/layouts/_partials/topbar.blade.php | 38 +++- .../views/layouts/_partials/topbar2.blade.php | 63 ++++++ resources/views/layouts/app.blade.php | 6 +- resources/views/layouts/guest.blade.php | 4 + resources/views/layouts/pengguna.blade.php | 2 +- .../views/layouts/verify-email.blade.php | 19 ++ .../views/user/alternatif/edit.blade.php | 8 +- .../views/user/alternatif/index.blade.php | 31 ++- resources/views/user/home.blade.php | 22 +- resources/views/user/profile/index.blade.php | 189 ++++++++++++++++ resources/views/welcome.blade.php | 197 +++++++++++++--- routes/web.php | 23 +- 54 files changed, 1765 insertions(+), 563 deletions(-) create mode 100644 app/Http/Controllers/ForgotPasswordController create mode 100644 app/Http/Controllers/ProfileController.php create mode 100644 database/migrations/2024_03_21_create_notifications_table.php create mode 100644 database/migrations/2025_05_11_232611_create_jobs_table.php create mode 100644 public/assets/images/1748102937.jpg create mode 100644 public/assets/images/1748108069.jpg create mode 100644 public/assets/images/opah.jpg create mode 100644 public/css/custom.css create mode 100644 resources/views/admin/profile/index.blade.php create mode 100644 resources/views/layouts/_partials/topbar2.blade.php create mode 100644 resources/views/layouts/verify-email.blade.php create mode 100644 resources/views/user/profile/index.blade.php diff --git a/app/Http/Controllers/AlgoritmaController.php b/app/Http/Controllers/AlgoritmaController.php index ce53c7b..ef564c0 100644 --- a/app/Http/Controllers/AlgoritmaController.php +++ b/app/Http/Controllers/AlgoritmaController.php @@ -18,132 +18,128 @@ public function __construct() public function index() { - $alternatif = Alternatif::with('penilaian.crips')->get(); - $kriteria = Kriteria::with('crips')->orderBy('nama_kriteria','ASC')->get(); - $penilaian = Penilaian::with('crips','alternatif')->get(); - if (count($penilaian) == 0) { - return redirect(route('penilaian.index'))->with('empty','Data Kosong Silahkan Isi Terlbih Dahulu'); - } - - //mencari min max normalisasi - foreach ($kriteria as $key => $value) { - foreach ($penilaian as $key_1 => $value_1) { - if ($value->id == $value_1->crips->kriteria_id) - { - if ($value->attribut == 'Benefit') { - $minMax[$value->id][] = $value_1->crips->bobot; - }elseif ($value->attribut == 'Cost') { + $kriteria = Kriteria::get(); + $penilaian = Penilaian::with('crips', 'alternatif')->get(); + + if (count($penilaian) == 0) { + return redirect(route('penilaian.index'))->with('empty', 'Data Kosong Silahkan Isi Terlebih Dahulu'); + } + + // Mencari min max untuk normalisasi + $minMax = []; + foreach ($kriteria as $value) { + foreach ($penilaian as $value_1) { + if ($value->id == $value_1->crips->kriteria_id) { + if ($value->attribut == 'Benefit' || $value->attribut == 'Cost') { $minMax[$value->id][] = $value_1->crips->bobot; } } } } - //Normalisasi - - foreach ($penilaian as $key_1 => $value_1) { - foreach ($kriteria as $key => $value) { + // Normalisasi + $normalisasi = []; + foreach ($penilaian as $value_1) { + $namaAlternatif = $value_1->alternatif->nama_alternatif ?? 'Alternatif_' . $value_1->alternatif_id; + foreach ($kriteria as $value) { if ($value->id == $value_1->crips->kriteria_id) { if ($value->attribut == 'Benefit') { - $normalisasi[$value_1->alternatif->nama_alternatif][$value->id] = $value_1->crips->bobot / max($minMax[$value->id]); - }elseif ($value->attribut == 'Cost') { - $normalisasi[$value_1->alternatif->nama_alternatif][$value->id] = min($minMax[$value->id]) / $value_1->crips->bobot; + $normalisasi[$namaAlternatif][$value->id] = $value_1->crips->bobot / max($minMax[$value->id]); + } elseif ($value->attribut == 'Cost') { + $normalisasi[$namaAlternatif][$value->id] = min($minMax[$value->id]) / $value_1->crips->bobot; } } } } - // Perangkingan + $ranking = []; foreach ($normalisasi as $key => $value) { - foreach ($kriteria as $key_1 => $value_1) { - $rank[$key][] = $value[$value_1->id] * $value_1->bobot; + $rank = []; + foreach ($kriteria as $value_1) { + $rank[] = $value[$value_1->id] * ($value_1->bobot / 100); } + $ranking[] = [ + 'name' => $key, + 'normalisasi' => $value, + 'score' => array_sum($rank) + ]; } - - $ranking = $normalisasi; - foreach ($normalisasi as $key => $value) { - $ranking[$key][] = array_sum($rank[$key]); - } - // arsort($ranking); - - $sortedData = collect($ranking)->sortByDesc(function ($value) { - return array_sum($value); + // Urutkan berdasarkan skor dan tambahkan peringkat + $sortedData = collect($ranking)->sortByDesc('score')->values()->map(function ($item, $index) { + $item['rank'] = $index + 1; + return $item; })->toArray(); - - // dd($sortedData); - return view('admin.perhitungan.index', compact('alternatif','kriteria','normalisasi','sortedData')); - + + // Debugging (hapus setelah verifikasi) + // dd($sortedData); + + return view('admin.perhitungan.index', compact('alternatif', 'kriteria', 'normalisasi', 'sortedData')); } - - - - - - - public function downloadPDF() { + public function downloadPDF() + { setlocale(LC_ALL, 'IND'); $tanggal = Carbon::now()->formatLocalized('%A, %d %B %Y'); $alternatif = Alternatif::with('penilaian.crips')->get(); - $kriteria = Kriteria::with('crips')->orderBy('nama_kriteria','ASC')->get(); - $penilaian = Penilaian::with('crips','alternatif')->get(); - + $kriteria = Kriteria::with('crips')->orderBy('nama_kriteria', 'ASC')->get(); + $penilaian = Penilaian::with('crips', 'alternatif')->get(); if (count($penilaian) == 0) { return redirect(route('penilaian.index')); } - //mencari min max normalisasi - foreach ($kriteria as $key => $value) { - foreach ($penilaian as $key_1 => $value_1) { - if ($value->id == $value_1->crips->kriteria_id) - { - if ($value->attribut == 'Benefit') { - $minMax[$value->id][] = $value_1->crips->bobot; - }elseif ($value->attribut == 'Cost') { + + // Mencari min max untuk normalisasi + $minMax = []; + foreach ($kriteria as $value) { + foreach ($penilaian as $value_1) { + if ($value->id == $value_1->crips->kriteria_id) { + if ($value->attribut == 'Benefit' || $value->attribut == 'Cost') { $minMax[$value->id][] = $value_1->crips->bobot; } } } } - //Normalisasi - - foreach ($penilaian as $key_1 => $value_1) { - foreach ($kriteria as $key => $value) { + // Normalisasi + $normalisasi = []; + foreach ($penilaian as $value_1) { + $namaAlternatif = $value_1->alternatif->nama_alternatif ?? 'Alternatif_' . $value_1->alternatif_id; + foreach ($kriteria as $value) { if ($value->id == $value_1->crips->kriteria_id) { if ($value->attribut == 'Benefit') { - $normalisasi[$value_1->alternatif->nama_alternatif][$value->id] = $value_1->crips->bobot / max($minMax[$value->id]); - }elseif ($value->attribut == 'Cost') { - $normalisasi[$value_1->alternatif->nama_alternatif][$value->id] = min($minMax[$value->id]) / $value_1->crips->bobot; + $normalisasi[$namaAlternatif][$value->id] = $value_1->crips->bobot / max($minMax[$value->id]); + } elseif ($value->attribut == 'Cost') { + $normalisasi[$namaAlternatif][$value->id] = min($minMax[$value->id]) / $value_1->crips->bobot; } } } } - // Perangkingan + $ranking = []; foreach ($normalisasi as $key => $value) { - foreach ($kriteria as $key_1 => $value_1) { - $rank[$key][] = $value[$value_1->id] * $value_1->bobot; + $rank = []; + foreach ($kriteria as $value_1) { + $rank[] = $value[$value_1->id] * ($value_1->bobot / 100); } + $ranking[] = [ + 'name' => $key, + 'normalisasi' => $value, + 'score' => array_sum($rank) + ]; } - $ranking = $normalisasi; - foreach ($normalisasi as $key => $value) { - $ranking[$key][] = array_sum($rank[$key]); - } - - // arsort($ranking); - $sortedData = collect($ranking)->sortByDesc(function ($value) { - return array_sum($value); - })->toArray(); + // Urutkan berdasarkan skor dan tambahkan peringkat + $sortedData = collect($ranking)->sortByDesc('score')->values()->map(function ($item, $index) { + $item['rank'] = $index + 1; + return $item; + })->toArray(); - - $pdf = PDF::loadView('admin.perhitungan.perhitungan-pdf',compact('alternatif','kriteria','normalisasi','sortedData','tanggal')); - $pdf->setPaper('A3', 'potrait'); + $pdf = PDF::loadView('admin.perhitungan.perhitungan-pdf', compact('alternatif', 'kriteria', 'normalisasi', 'sortedData', 'tanggal')); + $pdf->setPaper('A3', 'portrait'); return $pdf->stream('perhitungan.pdf'); } -} +} \ No newline at end of file diff --git a/app/Http/Controllers/AlternatifController.php b/app/Http/Controllers/AlternatifController.php index 50cddea..57ffc38 100644 --- a/app/Http/Controllers/AlternatifController.php +++ b/app/Http/Controllers/AlternatifController.php @@ -7,6 +7,8 @@ use App\Models\Penilaian; use Barryvdh\DomPDF\Facade\Pdf; use Carbon\Carbon; +use App\Models\User; +use App\Models\Crips; use Exception; class AlternatifController extends Controller @@ -35,17 +37,115 @@ public function store(Request $request){ 'pendidikan' => 'required', 'ipk' => 'required|numeric', 'jurusan' => 'required', - 'lama_studi' => 'required|numeric', - 'pengalaman' => 'required|numeric', + 'lama_studi' => 'required|integer|min:0|max:10', + 'pengalaman' => 'required|integer|min:0|max:10', 'serkom' => 'required', + 'cv' => 'required|file|mimes:pdf,doc,docx|max:2048', + 'dokumen_pendukung.*' => 'nullable|file|mimes:pdf,doc,docx,jpg,jpeg,png|max:2048', ]); + + // Upload CV + if ($request->hasFile('cv')) { + $validated['cv'] = $request->file('cv')->store('cv', 'public'); + } + + // Upload dokumen pendukung (opsional) + $dokumenPendukungPaths = []; + if ($request->hasFile('dokumen_pendukung')) { + foreach ($request->file('dokumen_pendukung') as $file) { + $dokumenPendukungPaths[] = $file->store('dokumen_pendukung', 'public'); + } + } + + $validated['dokumen_pendukung'] = json_encode($dokumenPendukungPaths); - Alternatif::create($validated); + $alternatif = Alternatif::create($validated); + for ($kriteria_id = 1; $kriteria_id <= 7; $kriteria_id++) { + $crips_id = $this->mapToCrips($alternatif, $kriteria_id); + if ($crips_id) { + Penilaian::create([ + 'alternatif_id' => $alternatif->id, + 'kriteria_id' => $kriteria_id, + 'crips_id' => $crips_id, + 'created_at' => now(), + 'updated_at' => now(), + ]); + } + } return redirect()->route('alternatif.index')->with('msg', 'Data pelamar berhasil ditambahkan!'); } + private function mapToCrips($alternatif, $kriteria_id) + { + $crips = Crips::where('kriteria_id', $kriteria_id)->get(); + $crips_id = null; + switch ($kriteria_id) { + case 1: // Usia + $usia = $alternatif->usia; + foreach ($crips as $crip) { + if ($crip->nama_crips == '23-24' && $usia >= 23 && $usia <= 24) $crips_id = $crip->id; + elseif ($crip->nama_crips == '25-26' && $usia >= 25 && $usia <= 26) $crips_id = $crip->id; + elseif ($crip->nama_crips == '27-28' && $usia >= 27 && $usia <= 28) $crips_id = $crip->id; + elseif ($crip->nama_crips == '29-30' && $usia >= 29 && $usia <= 30) $crips_id = $crip->id; + elseif ($crip->nama_crips == '> 30' && $usia > 30) $crips_id = $crip->id; + } + break; + + case 2: // Pendidikan + $pendidikan = $alternatif->pendidikan; + foreach ($crips as $crip) { + if ($crip->nama_crips == $pendidikan) $crips_id = $crip->id; + } + break; + + case 3: // IPK + $ipk = $alternatif->ipk; + foreach ($crips as $crip) { + if ($crip->nama_crips == '3.5-4.0' && $ipk >= 3.5 && $ipk <= 4.0) $crips_id = $crip->id; + elseif ($crip->nama_crips == '3.0-3.49' && $ipk >= 3.0 && $ipk < 3.5) $crips_id = $crip->id; + elseif ($crip->nama_crips == '2.75-2.99' && $ipk >= 2.75 && $ipk < 3.0) $crips_id= $crip->id; + elseif ($crip->nama_crips == '2.5-2.74' && $ipk >= 2.5 && $ipk < 2.75) $crips_id = $crip->id; + } + break; + + case 4: // Jurusan + $jurusan = $alternatif->jurusan; + foreach ($crips as $crip) { + if ($crip->nama_crips == $jurusan) $crips_id = $crip->id; + } + break; + + case 5: // Lama Studi + $lama_studi = $alternatif->lama_studi; + foreach ($crips as $crip) { + if ($crip->nama_crips == '<4 tahun' && $lama_studi < 4) $crips_id = $crip->id; + elseif ($crip->nama_crips == '4-5 tahun' && $lama_studi >= 4 && $lama_studi <= 5) $crips_id = $crip->id; + elseif ($crip->nama_crips == '>5 tahun' && $lama_studi > 5) $crips_id = $crip->id; + } + break; + + case 6: // Pengalaman + $pengalaman = $alternatif->pengalaman; + foreach ($crips as $crip) { + if ($crip->nama_crips == '>3 tahun' && $pengalaman > 3) $crips_id = $crip->id; + elseif ($crip->nama_crips == '1-3 tahun' && $pengalaman >= 1 && $pengalaman <= 3) $crips_id = $crip->id; + + } + break; + + case 7: // Serkom + $serkom = $alternatif->serkom; + foreach ($crips as $crip) { + if ($crip->nama_crips == 'Punya' && $serkom == 1) $crips_id = $crip->id; + elseif ($crip->nama_crips == 'Tidak punya' && $serkom == 0) $crips_id = $crip->id; + } + break; + } + + return $crips_id; + } public function edit($id) { @@ -62,7 +162,7 @@ public function update(Request $request, $id) 'pendidikan' => 'required|string', 'ipk' => 'required|numeric|min:0|max:4', 'jurusan' => 'required|string', - 'lama_studi' => 'required|numeric|min:0|max:10', + 'lama_studi' => 'required|integer |min:0|max:10', 'pengalaman' => 'required|integer|min:0|max:50', 'serkom' => 'required|boolean', ]); @@ -70,6 +170,10 @@ public function update(Request $request, $id) try { $alternatif = Alternatif::findOrFail($id); $alternatif->update($validated); + + Penilaian::where('alternatif_id', $id)->delete(); + + // Buat ulang penilaian berdasarkan data terbar return back()->with('msg','Berhasil Mengubah Data'); } catch (Exception $e) { \Log::emergency("File:" . $e->getFile(). "Line:" . $e->getLine(). "Message:" . $e->getMessage()); @@ -84,8 +188,9 @@ public function destroy($id){ $alternatif = Alternatif::findOrFail($id); $alternatif->delete(); - Penilaian::truncate(); + Penilaian::where('alternatif_id', $id)->delete(); + return back()->with('msg', 'Data pelamar berhasil dihapus!'); } catch (Exception $e) { \Log::emergency("File:" . $e->getFile(). "Line:" . $e->getLine(). "Message:" . $e->getMessage()); die("Gagal"); diff --git a/app/Http/Controllers/Auth/LoginController.php b/app/Http/Controllers/Auth/LoginController.php index e4f9bf3..35290f9 100644 --- a/app/Http/Controllers/Auth/LoginController.php +++ b/app/Http/Controllers/Auth/LoginController.php @@ -30,8 +30,9 @@ protected function redirectTo() } } - public function __construct() + public function logout() { - $this->middleware('guest')->except('logout'); + Auth::logout(); + return redirect('/'); } } diff --git a/app/Http/Controllers/Auth/VerificationController.php b/app/Http/Controllers/Auth/VerificationController.php index 5e749af..96c4b10 100644 --- a/app/Http/Controllers/Auth/VerificationController.php +++ b/app/Http/Controllers/Auth/VerificationController.php @@ -3,40 +3,29 @@ namespace App\Http\Controllers\Auth; use App\Http\Controllers\Controller; -use App\Providers\RouteServiceProvider; use Illuminate\Foundation\Auth\VerifiesEmails; +use Illuminate\Http\Request; class VerificationController extends Controller { - /* - |-------------------------------------------------------------------------- - | Email Verification Controller - |-------------------------------------------------------------------------- - | - | This controller is responsible for handling email verification for any - | user that recently registered with the application. Emails may also - | be re-sent if the user didn't receive the original email message. - | - */ - use VerifiesEmails; - /** - * Where to redirect users after verification. - * - * @var string - */ - protected $redirectTo = RouteServiceProvider::HOME; + // Redirect ke halaman login setelah verifikasi berhasil + protected function redirectTo() + { + return '/login'; + } - /** - * Create a new controller instance. - * - * @return void - */ public function __construct() { $this->middleware('auth'); $this->middleware('signed')->only('verify'); $this->middleware('throttle:6,1')->only('verify', 'resend'); } + + // Tambahan opsional: tampilkan pesan sukses setelah redirect ke login + public function verified(Request $request) + { + return redirect('/login')->with('status', 'Email berhasil diverifikasi. Silakan login.'); + } } diff --git a/app/Http/Controllers/ForgotPasswordController b/app/Http/Controllers/ForgotPasswordController new file mode 100644 index 0000000..a0dda19 --- /dev/null +++ b/app/Http/Controllers/ForgotPasswordController @@ -0,0 +1,66 @@ +middleware('guest'); + } + + /** + * Display the form to request a password reset link. + * + * @return \Illuminate\View\View + */ + public function showLinkRequestForm() + { + return view('auth.forgot-password'); + } + + /** + * Get the response for a successful password reset link request. + * + * @param \Illuminate\Http\Request $request + * @return \Illuminate\Http\RedirectResponse + */ + protected function sendResetLinkResponse(Request $request, $response) + { + return back()->with('status', trans($response)); + } + + /** + * Get the response for a failed password reset link request. + * + * @param \Illuminate\Http\Request $request + * @param string $response + * @return \Illuminate\Http\RedirectResponse + */ + protected function sendResetLinkFailedResponse(Request $request, $response) + { + return back()->withErrors(['email' => trans($response)]); + } +} \ No newline at end of file diff --git a/app/Http/Controllers/PenilaianController.php b/app/Http/Controllers/PenilaianController.php index f290893..6ac0f7a 100644 --- a/app/Http/Controllers/PenilaianController.php +++ b/app/Http/Controllers/PenilaianController.php @@ -1,67 +1,149 @@ get(); - $kriteria = Kriteria::with('crips')->orderBy('id','ASC')->get(); - //return response()->json($alternatif); - return view('admin.penilaian.index', compact('alternatif', 'kriteria')); - - + public function __construct() + { + $this->middleware('auth'); } - + + public function index() + { + $penilaians = Penilaian::with(['alternatif', 'kriteria', 'crips'])->get(); + $kriteria = Kriteria::all(); + $alternatif = Alternatif::with('penilaian.crips')->get(); + return view('admin.penilaian.index', compact('penilaians', 'kriteria', 'alternatif')); + } + + public function create() + { + $alternatifs = Alternatif::all(); + $kriteria = Kriteria::all(); + $crips = Crips::all(); + return view('penilaian.create', compact('alternatifs', 'kriteria', 'crips')); + } + public function store(Request $request) { - try { - DB::table('penilaian')->truncate(); // lebih aman - - $kriteria = Kriteria::orderBy('id', 'ASC')->get(); // urutan penting - - foreach ($request->crips_id as $alternatif_id => $crips_list) { - foreach ($crips_list as $index => $crips_id) { - Penilaian::create([ - 'alternatif_id' => $alternatif_id, - 'kriteria_id' => $kriteria[$index]->id, // ambil kriteria berdasarkan urutan - 'crips_id' => $crips_id - ]); - } - } - - return back()->with('msg', 'Berhasil Disimpan!'); - } catch (Exception $e) { - Log::emergency("File:" . $e->getFile(). "Line:" . $e->getLine(). "Message:" . $e->getMessage()); - die("Gagal"); + $validated = $request->validate([ + 'alternatif_id' => 'required|exists:alternatif,id', + 'kriteria_id' => 'required|exists:kriteria,id', + ]); + + // Ambil data alternatif berdasarkan id_alternatif + $alternatif = Alternatif::find($validated['alternatif_id']); + $kriteria = Kriteria::find($validated['kriteria_id']); + + // Tentukan nilai berdasarkan id_kriteria + $nilai = null; + switch ($kriteria->id) { + case 1: $nilai = $alternatif->usia; break; // Usia + case 2: $nilai = $alternatif->pendidikan; break; // Pendidikan + case 3: $nilai = $alternatif->ipk; break; // IPK + case 4: $nilai = $alternatif->jurusan; break; // Jurusan + case 5: $nilai = $alternatif->lama_studi; break; // Lama Studi + case 6: $nilai = $alternatif->pengalaman; break; // Pengalaman + case 7: $nilai = $alternatif->serkom; break; // Serkom } - } - - public function downloadPDF() { - setlocale(LC_ALL, 'IND'); - $tanggal = Carbon::now()->formatLocalized('%A, %d %B %Y'); - // $penilaian = Kriteria::get(); - // $alternatif = Alternatif::with('penilaian.crips')->get(); - // $kriteria = Kriteria::with('crips')->get(); - $alternatifs = Alternatif::with('penilaian.crips')->get(); - $kriteria = Kriteria::with('crips')->orderBy('nama_kriteria','ASC')->get(); - $penilaian = Penilaian::with('crips','alternatif')->get(); + // Panggil getCripsId untuk mendapatkan id_crips + $crips_id = $this->getCripsId($kriteria->id, $nilai); - $pdf = PDF::loadView('admin.penilaian.penilaian-pdf',compact('kriteria','tanggal','alternatif','penilaian')); - $pdf->setPaper('A3', 'potrait'); - return $pdf->stream('penilaian.pdf'); + if (!$crips_id) { + return redirect()->back()->with('error', 'Sub-kriteria tidak ditemukan untuk kriteria ini.'); + } + + // Simpan data penilaian + $penilaian = Penilaian::create([ + 'alternatif_Id' => $validated['alternatif_id'], + 'kriteria_id' => $validated['kriteria_id'], + 'crips_id' => $crips_id, + ]); + + // Panggil perhitungan SAW dari AlgoritmaController + $algoritmaController = new AlgoritmaController(); + $algoritmaController->calculateSAW( + Alternatif::with('penilaian.crips')->get(), + Kriteria::get(), + Penilaian::with('crips', 'alternatif')->get() + ); + + return redirect()->route('penilaian.index')->with('msg', 'Penilaian berhasil disimpan dan dihitung!'); } -} + + private function getCripsId($kriteria_id, $nilai) + { + $crips = Crips::where('kriteria_id', $kriteria_id)->get(); + $crips_id = null; + + switch ($kriteria_id) { + case 1: // Usia + foreach ($crips as $crip) { + if ($crip->nama_crips == '23-24' && $nilai >= 23 & $nilai <= 24) $crips_id = $crip->id; + elseif ($crip->nama_crips == '25-26' && $nilai >= 25 && $nilai <= 26) $crips_id = $crip->id; + elseif ($crip->nama_crips == '27-28' && $nilai >= 27 && $nilai <= 28) $crips_id = $crip->id; + elseif ($crip->nama_crips == '29-30' && $nilai >= 29 && $nilai <= 30) $crips_id = $crip->id; + elseif ($crip->nama_crips == '> 30' && $nilai > 30) $crips_id = $crip->id; + } + break; + + case 2: // Pendidikan + foreach ($crips as $crip) { + if ($crip->nama_crips == $nilai) $crips_id = $crip->id; + } + break; + + case 3: // IPK + foreach ($crips as $crip) { + if ($crip->nama_crips == '3.5-4.0' && $nilai >= 3.5 && $nilai <= 4.0) $crips_id = $crip->id; + elseif ($crip->nama_crips == '3.0-3.49' && $nilai >= 3.0 && $nilai < 3.5) $crips_id = $crip->id; + elseif ($crip->nama_crips == '2.75-2.99' && $nilai >= 2.75 && $nilai < 3.0) $crips_id = $crip->id; + elseif ($crip->nama_crips == '2.5-2.74' && $nilai >= 2.5 && $nilai < 2.75) $crips_id = $crip->id; + } + break; + + case 4: // Jurusan + foreach ($crips as $crip) { + if ($crip->nama_crips == 'Teknik Sipil' && $nilai == 'Teknik Sipil') $crips_id = $crip->id; + elseif ($crip->nama_crips == 'Arsitektur' && $nilai == 'Arsitektur') $crips_id = $crip->id; + elseif ($crip->nama_crips == 'Teknologi Rekayasa Konstruksi Bangunan Gedung' && $nilai == 'Teknologi Rekayasa Konstruksi Bangunan Gedung') $crips_id = $crip->id; + elseif ($crip->nama_crips == 'Akuntansi' && $nilai == 'Akuntansi') $crips_id = $crip->id; + elseif ($crip->nama_crips == 'Lainnya' && $nilai == 'Lainnya') $crips_id = $crips->id; + } + break; + + case 5: // Lama Studi + foreach ($crips as $crip) { + if ($crip->nama_crips == '<4 tahun' && $nilai < 4) $crips_id = $crip->id; + elseif ($crip->nama_crips == '4-5 tahun' && $nilai >= 4 && $nilai <= 5) $crips_id = $crip->id; + elseif ($crip->nama_crips == '>5 tahun' && $nilai > 5) $crips_id = $crip->id; + } + break; + + case 6: // Pengalaman + foreach ($crips as $crip) { + if ($crip->nama_crips == '1-3 tahun' && $nilai >= 1 && $nilai <= 3) $crips_id = $crip->id; + elseif ($crip->nama_crips == '>3 tahun' && $nilai > 3) $crips_id = $crip->id; + } + break; + + case 7: // Serkom + foreach ($crips as $crip) { + if ($crip->nama_crips == 'Punya' && $nilai == 1) $crips_id = $crip->id; + elseif ($crip->nama_crips == 'Tidak punya' && $nilai == 0) $crips_id = $crip->id; + } + break; + } + + return $crips_id; + } +} \ No newline at end of file diff --git a/app/Http/Controllers/ProfileController.php b/app/Http/Controllers/ProfileController.php new file mode 100644 index 0000000..7291b21 --- /dev/null +++ b/app/Http/Controllers/ProfileController.php @@ -0,0 +1,65 @@ +role === 'admin') { + // Tampilkan view untuk admin + return view('admin.profile.index', compact('user')); + } else { + // Tampilkan view untuk user biasa + return view('user.profile.index', compact('user')); + } + + } + public function updatePhoto(Request $request) +{ + $request->validate([ + 'photo' => 'image|mimes:jpeg,png,jpg|max:2048', + ]); + + $user = Auth::user(); + + if ($request->hasFile('photo')) { + $filename = time() . '.' . $request->photo->extension(); + $request->photo->move(public_path('assets/images'), $filename); + $user->photo = 'assets/images/'.$filename; + $user->save(); + } + return redirect()->back()->with('success', 'Foto profil berhasil diperbarui.'); +} + +public function updatePassword(Request $request) +{ + $request->validate([ + 'current_password' =>'required', + 'new_password' => 'required', 'min:8', 'confirmed', + 'new_password_confirmation' => 'required', + ]); + + $user = Auth::user(); + + if (!Hash::check($request->current_password, $user->password)) { + return back()->withErrors(['current_password' => 'Password lama tidak cocok.']); + } + + // Update password baru + $user->update([ + 'password' => Hash::make($request->new_password), + ]); + + return redirect()->back()->with('success', 'Password berhasil diperbarui!'); +} + + +} diff --git a/app/Http/Controllers/RegisterUserController.php b/app/Http/Controllers/RegisterUserController.php index a15332a..a784e30 100644 --- a/app/Http/Controllers/RegisterUserController.php +++ b/app/Http/Controllers/RegisterUserController.php @@ -6,6 +6,7 @@ use Illuminate\Http\Request; use Illuminate\Support\Facades\Hash; + class RegisterUserController extends Controller { public function showRegistrationForm() @@ -15,6 +16,7 @@ public function showRegistrationForm() public function register(Request $request) { + // Validasi input $request->validate([ 'name' => 'required|string|max:191', 'email' => 'required|email|unique:users', @@ -22,19 +24,26 @@ public function register(Request $request) 'alamat' => 'required|string|max:255', 'telepon' => 'required|string|max:20', 'keterangan' => 'nullable|string|max:255', + 'g-recaptcha-response' => 'required|captcha', ]); - User::create([ + // Buat pengguna + $user = User::create([ 'name' => $request->name, 'email' => $request->email, 'password' => Hash::make($request->password), 'alamat' => $request->alamat, 'telepon' => $request->telepon, 'keterangan' => $request->keterangan, - 'role' => 'user', // langsung set role user + 'role' => 'user', ]); - return redirect()->route('login')->with('success', 'Akun berhasil didaftarkan, silakan login!'); - } -} + + // Login pengguna secara otomatis (opsional) + //auth()->login($user); + + // Arahkan ke halaman verifikasi + return redirect()->route('home')->with('success', 'Akun berhasil didaftarkan, silakan verifikasi email Anda!'); + } +} \ No newline at end of file diff --git a/app/Http/Kernel.php b/app/Http/Kernel.php index a3b005a..a746b19 100644 --- a/app/Http/Kernel.php +++ b/app/Http/Kernel.php @@ -66,5 +66,6 @@ class Kernel extends HttpKernel 'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class, 'admin' => \App\Http\Middleware\AdminMiddleware::class, 'user' => \App\Http\Middleware\UserMiddleware::class, + ]; } diff --git a/app/Models/Alternatif.php b/app/Models/Alternatif.php index 5af5d0c..8920aef 100644 --- a/app/Models/Alternatif.php +++ b/app/Models/Alternatif.php @@ -12,7 +12,7 @@ class Alternatif extends Model protected $guarded = []; protected $fillable = [ 'nama_alternatif', 'usia', 'pendidikan', 'ipk', - 'jurusan', 'lama_studi', 'pengalaman', 'serkom' + 'jurusan', 'lama_studi', 'pengalaman', 'serkom', 'cv', 'dokumen_pendukung' ]; diff --git a/app/Models/Kriteria.php b/app/Models/Kriteria.php index 751880d..238b0ff 100644 --- a/app/Models/Kriteria.php +++ b/app/Models/Kriteria.php @@ -11,8 +11,5 @@ class Kriteria extends Model protected $table = 'kriteria'; protected $guarded = []; - public function crips() - { - return $this->hasMany(Crips::class,'kriteria_id'); - } + } diff --git a/app/Models/Penilaian.php b/app/Models/Penilaian.php index 2c4708a..74e301b 100644 --- a/app/Models/Penilaian.php +++ b/app/Models/Penilaian.php @@ -13,11 +13,16 @@ class Penilaian extends Model public function crips() { - return $this->belongsTo(Crips::class, 'crips_id'); + return $this->belongsTo(Crips::class, 'crips_id', 'id'); } + public function kriteria() + { + return $this->belongsTo(Kriteria::class, 'kriteria_id', 'id'); + } public function alternatif() { return $this->belongsTo(Alternatif::class, 'alternatif_id'); } + } diff --git a/app/Models/User.php b/app/Models/User.php index bce889f..03809f3 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -2,16 +2,15 @@ namespace App\Models; -use Illuminate\Contracts\Auth\MustVerifyEmail; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Foundation\Auth\User as Authenticatable; use Illuminate\Notifications\Notifiable; use Laravel\Sanctum\HasApiTokens; -class User extends Authenticatable + +class User extends Authenticatable { use HasApiTokens, HasFactory, Notifiable; - /** * The attributes that are mass assignable. * diff --git a/app/Providers/RouteServiceProvider.php b/app/Providers/RouteServiceProvider.php index 5302461..b077897 100644 --- a/app/Providers/RouteServiceProvider.php +++ b/app/Providers/RouteServiceProvider.php @@ -17,7 +17,7 @@ class RouteServiceProvider extends ServiceProvider * * @var string */ - public const HOME = '/ '; + public const HOME = '/redirect '; /** * The controller namespace for the application. diff --git a/composer.json b/composer.json index c257f82..12a9576 100644 --- a/composer.json +++ b/composer.json @@ -6,7 +6,8 @@ "license": "MIT", "require": { "php": "^8.0", - "barryvdh/laravel-dompdf": "^2.0", + "anhskohbo/no-captcha": "^3.7", + "barryvdh/laravel-dompdf": "^2.2", "guzzlehttp/guzzle": "^7.2", "laravel/framework": "^9.0", "laravel/sanctum": "^2.14", diff --git a/composer.lock b/composer.lock index d6ece6c..e93cedd 100644 --- a/composer.lock +++ b/composer.lock @@ -4,8 +4,72 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "cb2e4801c4d5a6d3b45e0bc7d7035ecf", + "content-hash": "910e867f92f12159e6b1cdfff092548a", "packages": [ + { + "name": "anhskohbo/no-captcha", + "version": "3.7.0", + "source": { + "type": "git", + "url": "https://github.com/anhskohbo/no-captcha.git", + "reference": "87666572f0dbe1e3380a2e9ae7574bf3a2d0804e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/anhskohbo/no-captcha/zipball/87666572f0dbe1e3380a2e9ae7574bf3a2d0804e", + "reference": "87666572f0dbe1e3380a2e9ae7574bf3a2d0804e", + "shasum": "" + }, + "require": { + "guzzlehttp/guzzle": "^6.2|^7.0", + "illuminate/support": "^5.0|^6.0|^7.0|^8.0|^9.0|^10.0|^11.0|^12.0", + "php": ">=5.5.5" + }, + "require-dev": { + "phpunit/phpunit": "~4.8|^9.5.10|^10.5" + }, + "type": "library", + "extra": { + "laravel": { + "aliases": { + "NoCaptcha": "Anhskohbo\\NoCaptcha\\Facades\\NoCaptcha" + }, + "providers": [ + "Anhskohbo\\NoCaptcha\\NoCaptchaServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Anhskohbo\\NoCaptcha\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "anhskohbo", + "email": "anhskohbo@gmail.com" + } + ], + "description": "No CAPTCHA reCAPTCHA For Laravel.", + "keywords": [ + "captcha", + "laravel", + "laravel4", + "laravel5", + "laravel6", + "no-captcha", + "recaptcha" + ], + "support": { + "issues": "https://github.com/anhskohbo/no-captcha/issues", + "source": "https://github.com/anhskohbo/no-captcha/tree/3.7.0" + }, + "time": "2025-02-25T18:53:34+00:00" + }, { "name": "barryvdh/laravel-dompdf", "version": "v2.2.0", diff --git a/database/migrations/2014_10_12_000000_create_users_table.php b/database/migrations/2014_10_12_000000_create_users_table.php index 995f5af..e8eb323 100644 --- a/database/migrations/2014_10_12_000000_create_users_table.php +++ b/database/migrations/2014_10_12_000000_create_users_table.php @@ -18,7 +18,7 @@ public function up() $table->string('name',191); $table->string('email',191)->unique(); $table->timestamp('email_verified_at')->nullable(); - $table->string('password',191); + $table->string('password'); $table->string('alamat'); $table->string('telepon'); $table->string('keterangan'); diff --git a/database/migrations/2024_03_21_create_notifications_table.php b/database/migrations/2024_03_21_create_notifications_table.php new file mode 100644 index 0000000..f4c3e41 --- /dev/null +++ b/database/migrations/2024_03_21_create_notifications_table.php @@ -0,0 +1,25 @@ +uuid('id')->primary(); + $table->string('type'); + $table->morphs('notifiable'); + $table->text('data'); + $table->timestamp('read_at')->nullable(); + $table->timestamps(); + }); + } + + public function down() + { + Schema::dropIfExists('notifications'); + } +}; \ No newline at end of file diff --git a/database/migrations/2025_05_11_232611_create_jobs_table.php b/database/migrations/2025_05_11_232611_create_jobs_table.php new file mode 100644 index 0000000..a786a89 --- /dev/null +++ b/database/migrations/2025_05_11_232611_create_jobs_table.php @@ -0,0 +1,36 @@ +bigIncrements('id'); + $table->string('queue')->index(); + $table->longText('payload'); + $table->unsignedTinyInteger('attempts'); + $table->unsignedInteger('reserved_at')->nullable(); + $table->unsignedInteger('available_at'); + $table->unsignedInteger('created_at'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('jobs'); + } +}; diff --git a/public/assets/images/1748102937.jpg b/public/assets/images/1748102937.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c0ff96bf23cd3e707425eee64b3a3be3f1215917 GIT binary patch literal 44798 zcmb5VWn5cL^e##%P@q8Z;u3;ufz4IY^_Fgl4&$HIdTF;t)U;b_2Q6gZfFuZ&B?%~042j0IGJS99L z0zx7}0wN+pq6ZI%h)F3)Nl8dZX(=9&Q9h<+V0cVRPtU~4&CbNk#X?WdA;iJO!^)UDX(u_(3x!GTNc?>LP9C>aNZ*z{7@Px4a0uu`&|CD7UIzDx|nH7txUi%+&7? zHp>8Js&WF6A~n^R$GSo&XH}po4+@UxNYFI~=Au-o;i}w-4q-JU?ho8xVRt?i1(_f_ zNLu`Tu??(z59F)+w&ISD6XPX!*!!dlid!+B3;kc%_aR(=`#@P2EN*_h7YK!{`n?<6Gff&2_I3TcH>AoDq z;Dea?@|>fIof=059AAki=#EN`aA9(ck4z?v41vm2l|Uh~4B@&&@$s3@8aq!t<=-8N z(f6xg_kJe4dN#y7B)d@an8P_?nj*GdOioQ~lJqS~KZ_gV{k(&|t|rrf1B<|LH{seA zLP2pYqvlb-P7zh@k6YEiuZ%)!#&5^*Mc~8|WKP&3CSwxwRg@a42Bp571w}by4N$7U z>RdhJ8L;zLOuq2JaUCoupAvbDM^@ z2+ENN08vXKs=AxH8Wd&-l&yq;uv!&LgWKGG)JK(51kKRK`a<<9ef%;4O>s(Hr%Xa_ zH(4zrMXgrd88#nht(2aj=B>evrL)7(HCt*0UvUHn)eb2mg^9*v8qLc(N z;Ln-f8V=D%0k3jBy2;Z_7)a?}J>!(b7)c^cGqaETUK*4ZzwOTeqVzlX;v$=H!>tM! z>rBY7gA_9`F49xn%y;5dhA~$G?D}ip+KyL9`B0x!WhpQ850qQ==aRGH+bxLuntz_3 zp0$@;nBMayUtL`~n@OmtIv#}O6t)gdO00HxJU83P{Wu;7w10`<0aU-V#lp&K1?uX` zl8){dc}l*GHB>7_K~zbA9O;v00;XND5cLzNNbYScX(9raLxIh(h28Bl4V##)o{b}}g?Np8rFiMhEG5DAP#Q6u83(u@S0 zysL;8y%rfJFNnv4OqFLoZc;tl$@V%L&gIr$7zLt^t25Qg_3rxGjQk7|jquO8=}%rg z`83-xV|W%{o+z?2CRR$$s9O@9sVl7WOsFc$dz-nsDe^Fbk;)e2etN*m#jyZRO-^?4 z9xtv#dzYE383R>;z*JJ18Avf&UnhdA^13;w52u=GNV3;R~%|Rm)+GavW=q zB1}{A)1FR=^Tk90Ft)`Mou8_UEXKfAUhM#iDC0wlU59; zz^-mxW@+Zad@%}VayrvX2Ma6Q!OihqU7QKR=2S#vZzJCBy$XD?I-YJ^LMDvDcvK`b zSN^SkTJl0X0mK*<5OA{5;M_kTM}mBTcmrmZ%S}pi&c(c<*>xt5at|mL&tdYcEH5@# zX{8Djno=N5q{A|cG1GA7iW>YVW;Bqb(=bT3_HnkE?qVXO6INm_GZw@*wJTjUV zovjTz45sJX+B>oB*tS2i|Eh=xl$DHRST9jmbKpjM7ce3wUt9y4Bj_`wbyqV9I_N~= z1cZvKFr4&%gF0I?|+e@H7b7iG9XBlr+yi3~A>Fb{3(vcdre(!wkQ0gWv!GEDY zw;9KbHT!KIWRl-qV3xNtK0Xg?zi7G!`RqoAIZIZ$7puVDq;dLMYepKVbvSQV6<47< z$I2$6)fOxwtGK}bBBxUcLJT75%+xUI$Vz^Y@RRbHRBXF8_kbk5kauK`K9R@*Qb8bCCG|YZBF0I9D zJ27=VB=j=L$btp08vE_Orw@t$&St1M{WK^b49zqM5?Zv(L)<+NaR5*?bBh?%j&-6c z!~F=sQA1;9u2^0X1s%GHC@R$caS2T)Gw5we+LJ=|SFtDw`_s>~T`Ywsifln?S&-ZB zurPm-nuVN`o~0wXWwYz8V26Ms1=-ub$sRf`X|OyRHuHcMD%*8EO_PU4z|~ccsXLQ^ z(^r6!0S#x(6IB5z45NTW$KUZ%0nF?&R zb`F(In6Z>Ec=f(OqdTV>WaiA+cEsvq_*qVxv-nKXKm3snL*VP0UE%%im1eG=Qy1U+ z45RCI06WWcK8Y;|&m{BbVyW9rW$Woy4mFNVyE<^=rH^gYQBt~L*twi)Xd^pN%T9+lh{Nz?ee?L?aR`9JT7(ZwqW`gI*1qr7G+j}D{N_SzM zE+5-`xft@k6T)iTbH|ps=fu6cnuXpdDd2lcx6~+vklJe=k4n6{Ix-P&pvfz8H=Sfk z4IDNqnj3YH%Vrv@t2I*Q*B&ZGEi*Tj%^DMuHMqSI(1Fi|&r3Ouib5|_>M@|HgOc_* zJ@>sj{IbV}L~AT-fq9mB?&XEaYry>9Y={c=J;hg{C7 z6Yr=ys(`8IE<`Om%SaFz*tAvIO6{TM$>jU<>_uV1V?LF20~JWe7#p%$h}4{X<*nPg zb=W6VUxxGGwbi&VL=dCe0dslBP$fsUlQFHt1nIBJ@YPl2NEO-iNIKD>+d=i@G(7 zP@^=Bg`!X?v-i6W{Z)u6FK|fyYBB3gTBJp*03*2L^Z=dDK{}xr9dva>&pJtZpz4>etN;iri zU#3F!H8r|`syOVwKF^fd^;PC)6)T_P5ZX6%TS{gxy0Y+AyKh?d^L1gGMo{v5aOQp$WXzEUNYuga*ZHt3(;UG!#CS4KR8ztV z*fsP0l;d}(t1QgZ-kP6NT(u5~Z+X`>xpELRTyYTT-NjP1T^pBR9Gk6+KURgNG+cm<$WUs&3K`s-A?+ZLmugN?IdcKX0mu`l``))fUa#LE{x3usn4)ZSm}Q z)Ol=(7;bf#uY)|zhK&t za_FX=&~90VI6sAh+ITbIy!(CCT&L+WQ@}CQLR8 zNiO$1tS=p4EQ4-i4la_D4hvl&zJo@^(`+vlCRzvbnvX~y5IP-tbvF4JGs~^MF&#DC z-{EaZ|F-jePSKbxfpwTXu-PS>di-^9s>UbHn99vN^F2k1_o8|cQwJA2PWpYMvyGrI ztnRyh{3=sNC6Vcp{O)hbbhKT3XafBuy@U|s*M)kE0St~}E!R1nECuXnrc3bouhk$A z*@lj5YMaaMl=*|2+S$R0&z)fUY8Qdl$Zpp)sa>lh_ql?{D(u!yoLGC%-s{5g7z>*)Wzo5R|63T)% z<%fm1xQa^7`buNp>Fwd6Pr#ZJ_$>HA{$9DXVqLK6#_u0qQIj(B0i9$X@~GM>wK;o{ zVY;S357EzCw)N)QUEXh`Ub@Q`C0~aad=M&-{UzU<_Q_u|G5=Qgr^Mdpz#OG%M0q8` zEP-EL{oY=M^jYVU|8#;$^Y;v!xx5$Ci`#c<$)^n>`4<?>hu*`As16y6Ix(#(AeeYGQS{YdvIA4qEq+8QI<>k(w^8CM#EmO=xrkUHa zgZ7Fqe;>BJT$pZ~Wbkunj&mpg#re5Mn0j@Pou<|jHy0%MgD7+tFZe{yb_aDZ!>AG4*(}DwR((V2a^zGuD zsd%xKWUKv3=9C9-{n%$RADy>7Jpmu&>Me~d4By~AG4N|YPJGzzuaegBLG|psPeyWyVy(;h;%`FZ=8K{bf6f5&E@(qDp9VZynWD*8HF!rDQ-5aW?o0&-1BXob? zxVUp=H#oU(^9eO0;(MxeIlr2@SAD&;RM2zi=hQ>tZa>qUHge*bkDVDmaaDOGJ9(IF zeVH}2rBb$SyWhM83Vty9Jxdhku(W*Y`G(fkB8C$lN-h-;IibJTpk9G?gGQTONA4m(*6zj_9uBPcW@9WxWwwl}W!?iv9;12UU znRZCj94BVn+CbKIQKLOAYB$)ZP)l|6>#zs1o^AQ`$;ITZF+I!M&sjNjQ%eiAN?vn@ z-MQzVU1)DL-Y(7D8`D(bs*ILHk8XJsL0;Jvrf4Bsj_h}lSP!A(J+0vkpIej53YGVL zSH?%pe)L-lEf>=Cw_UP789YxueNGPQ)CsWes=bVJJxB@}=JlwMH;(S8C+cfn97LA=te2AWEMg`>w@ZaJ%4M=<$yw=N z8DzC83W}@eLB%>v#gV1jO>dn)URiwDTfbD0p7Y3RRW>T1(8#%*&cJzQ-v{}feW&H} z<#x>H??SqB-if|`Cwau!5v=*dJKzt?&0;YA0mf%pdtWn-h=5=8VgAT`315#<83-2a z^>!Fwy?o$(N^;PY1;}}MPDftt{&9q(H-=tM^#j_fR2GXpPx%P)B-AN zg+>%Uq+R9zx|8B=|B(bTo}JyXdGgo8G;L)%OCn^W}0d#ySEQ?g_vD*C?t&OhlEYJco(&g4N!Cndc(dNvqovyIj*(LMUMT!_{y`&ul zm5i6fj!CCye+0EI|MbcouVuMTrL`F}v)oo>yBfcil!(*?=Zl%^>W{v9 z)itIiR`l#~R)HvFT!!gQOQEkK#vx0q+C0GdlwVeOUuuutz?4@*E+A!Zf1gy-Ex!BI zW$Q}Z|I%vz;Lz_=|LX6nh1RK0W!}fDNfRCEYl!Ja z(8$K!sk`s4GS?+f zR9-}@HIgp~!nQI5Zmu0v0fEfMbU z7>jDXS73@a)}z)rVgmf2;+zw&{Kzx=y{(5@8GyOTOTN&0nmq}V^PnD9Uaz&+Lw&nv zyYBPTVUFIW^u}jv=zA`$$~`9La^-Gg-qrpI&@epB#-|+%I^VNDq;-jLbbP3k zWpCEmG>!}el&`Ag`-T;+!?=%i?O7iiXVrQoG0!i`2d{iTengvFT_HoF@$pzF`X_JX z4@(&v{ACg*BXf~m&7?xpiY&CKp1p?tPKFDukP)2msuCi}BmSy$d@pFZt6kQgEsG?- zM=`Tw<<`%O^YsB%gm3qb<}!V{?2)YcPh`K&`t-1Q0i88l&TGETGe6|luTh5zUHyUF zB`?ekiF-{Ntv*sTD=jA7V@gwfP_IW}UinG5x0Z;8?8j~K19gz$yTmkemW?kw5+^Ws z<`OL8(nGDl0WBY&UY11xa5i^oVllg4AGGl?3q-v*T==0-n=n?~h@1AB8M<1z92x~dp~Q@%A5-K%_SEgjtp)|tKYYp2kxI@UkUGA5wj zK~JRUo1BsHS6x}J>I;IUespyVT`(% z*2;#N&OI(&Pv%TmZA&xYi|t!sG_heT>2#y4oo4z@x`c?lpS0A_eU1r6%}>?i>KEXB zi;Yjh`73tL^GPaB4lsPHEgoRc*wpVXq?au-bzC5QTW##bv*OE=LZ(2ALJNmV_lc8$ z7OxWCA_rcm_7&IDfc5P0WdJUEfF~F`_L}Q+>V5YYu*Q9C`v_NLt48KMHGwINljD&3 zU2{L0PPjObbaAlP& zu~2YYtaN=R0c1IyF5_6Ru6$ck9)UT~-z7*K)CK>L>rIoEh7UOlH3)Q170E>8OJD;* z*Wq`RmyI3bZVq8$0m5?jjLV<1_f|#>H|7kz(&>$a+70z>wWIMrqrrBXQ7}jUcV-Ix zV*CQJ)?A44Or8e%nZ$$7x#Gef-K|a24tFPZk1y>xvJ9oA6yoM7y6=2y+u!p-7ma{z z{8U+*%9L_Z*fqoRRqGuKT6bkRy{nl0MyIArj8P`?lgE8yEzW8etpK)isne{2anuVb zo>1YEgn*)^Ni2AKma^FeNWWBTY;oLGQ#mxdUEOt`5osLGFGr2Bh)m$jWTy1=blz$8 zcH$Vs%Pb?*c=1lMWGddN{2k~_Vuu?tn<#PeZs!qauEv)(vnyimM1w?plXi2KvR-G# zn2N1|T^_R?6y{f+CUvk~i;8WGeViLPIu>?7Un`6?czgy!KR#-7LGOB8Ag zA_8usTJ$yiP6pni+%^2%s4WN?y^+8%q(y+b9P`)*IS?L$sEA0f9CGW_OnA zK9(sO{=-wW1xh8Ws$k@<9Kl4w2ysJmlc}-lhJ8EIH9DX_#eB1DuUZJGFif$6S1~~f zfk=_^YE9kR-!n#S=IRG;|0!v3VqEkz#!G9aEs(V*9ME>I<*1S|oLK zE{=+b`Z8);OhBq#mXId*1z&$Y!nCA!6E&g2f-_#Y%LTV*_4N9a)MCm(*CswCNu~YNY zq9&HrpY|{3lmu>ls;iw#HL`<}r-Fy3EhC!w4H6d?zR*L|s=47!hrsIU91%5NLw$5{ zmbbm$tJSv+Kv=NsK0ayQD=A46M63{ibLk`giv|IeJ%6@!ICrBxs@(0gZ8(?r7%{6hd0a7n)iYxPeu`&h z%LySod9}(ad{(*;K8C7$9L&2waazy;RCR1Ox>3W<(L7S&fXlY@$Z4AsQ~j(su&;;H3AkFfnvA} z!QlJcqx0cI5Q3;g6t}K`4uBg>Ec@7aB(vil2_S=;r?ehN;R#aW;orMYfd5~?ad!U| z9EC?oML^BL33^Tg28huTPLvou==u< zBiu`hoso~>A6{|HQdxdTNAmccDSVDotEbedh`1729HYU-07hPL1+ol_kBmYcU7{b5 zF?E(4^Kd&84vyt@NGvDLz9Hk_cxZ4MrrE9>)sW<%dnqLU9}xet1~E6OY%#082qNNZroR)4 z(_>8^dMc9Xa3f^TCHplQf)m-^`Ax z{&0H~C3+F^y3{7=Fl#tX;W}{4fEYg=QKI6rTwNzY4xs@uz9|oyBb>l~Aaom4i z2ZXpLdJk4V%6Bcm%#D=o)hNr`CQ%sXW~X}S;nhlgQr zzMS-|-^%4=X|EBM(9wOJ_z#a4AtRvG0iSHL9c{;nV?0vU(q;leN*=r89(2bgZVK$U7?@C2k)mFJ^s!q>3PtvFa0vgWD6* zyV?&4I1B};49IMtI_=ftCoO<8x14|5gLA(V$)ZhUXt1zq)r5REL2y8xx;%&Q5h!gm*RaSCKsXMH{Y< zXWJ&;v|Uo?U5WPJIkcQ(h!)OCMHwk*Jz~QH z_cH?k@ablb&m=Uc8D_A2D5Y+dji?I$X(BRHB4PITA7)Q5XM?t&fVtQ4rxv^$@l^LX zsi>F*(aX>wo0t}8QWhDinUOPzS+&?U^*Cx135KVBc*XT&*st%vQ>m@GFUE0Yjc`6_ zA}f&+0@aQb#9-oY$6pDdsx(TSXP>pu z)WE2_EFz_o@6j@EemHl(VMVe_^fn3vAgQHd6XTV#583%IH=^HFn6~PW8rt4S;P3=? z=QalPR&*G+j$6}6Ge=J3fS=MpXJ(FTB?J72S^kq2^y+F->vK52&{z>fAix${OT(iv zP%8B@NnBXcxVXTZ&YzKycSxzp*0?*vy3BBNr~Mi3>n=;W4V{Z~9p?h$j41`oQ^M`t zZ>m*JTp8Y1TThzmU4CxOUF^+B9+m)M z@S>bYlk8xg7?047;MxfKq;o&#-ufwG6_EnYIW98!Hz`YGe(~ZFvKey5I^oc>*fDPS zkh1e@RwN^H(%wi=^!bFhH1i;5{1+~^17(tOqY~i`#}YkmNb~aie2GlqLJp|#;7`dn z$Bdr8^EkAIe;Z{gqBbAm76=}su_X%p(Y^f>K%5n!MLrwfulrqZ6CNR`BH(pWjhmYQ z&0zUrzCMQZ&Gl8jan~wmnhKp={qEcWm0~auxv}aFJpTP@66}~G@`C9Pam>nB!ag!& z)%kmof+r+a=?(c!2RA>CYrgMP=E65eUM(LkuEx8je_*_Q&AbuiFi5)#dshXJqz|#x zgr_$um;@KP-&1(|v1dgH;Z8mOxbt|q9+6_`O8p>*y+hEj4%OLEIB0XcX z_LrWe9)OXi^acb*R|(l}Kw`j>n6nWzj^AS3y)IBv=|MZ4ngQ{BAfkCRmG4p&i<`NE z6u%rBnb~cowW@Av+9Mubq%7Pv$8LTCATQXtSe3Z^vhp^}yzbZuY*(cxvpXfWP9>=% z?}9HyM5NXKNs#hF$OC z3k8HwTJddLp4(3sZv~s3B6=Cc2OmX~gC5mjwK4vKp8hc_E0E3|F5~Maj-~@4NC+u3 zI_{&_r_I7gSBlODxD|q!e6Mj=dSxp`)5(6}Ot3B3l78ZlrT23FE?#JI9Ry1yaDK9FZqQPG%S+Q5pW*f!;vS*!VW&wIFEu;l=RlUNUpGZTMoa zLdsM$cPL0qy(kZ44ArJ34-aej;>tpl;zSjunW+r*F%}Ripw=J#)NLX3Zh({1lxS8* z3Kb?p6ZTZ(rW1zBp^E}zOh#?Wp4N7WJ~lwL_&i7XFt^g*|VaZ<@+HGT2SeF<#QjwgwUn~CMSz!JgTq8<;zq88yZMTO{nTm|S zhd^MW0Cxrc;+q_D8ABFW8XH40s~)65fA%W+bj#g~Yz?AVWqCWe02wp%^=H+re|9BjCho+?X7U}+)eH{P6r10f8DI;irI#RQa zxhCKF$@qG1@LZ88mfyFAchBFaB8J?8s}j?zj|h1j$%#(HF*siO8F|1rSZMgiu_)_W zl$gBQMAWx0xJj1o*4*-AJ-~6X{-*3l_-IKo|04T(O!iHU;pKx_fFSx|Vq8*kiK5ar zzfqr-iLm4KP>D`^`o;F-w*869B$csoqKyKmu}R&AHETtc3~C4IF!)h-JZv|{?#}ly zV~NZ7s%QoA9wF!^cX71#NbpF%?wPteqz%fo6owL@X8p5$%h=H@8WRRi<3qLyjZ(MV zF*7Vlff}2+iBAi2tnUjnbvza9JDhO%fWO85p0JP02>^Tl=hfw3McMSfx#dvwk85xz z01B}+-`XKPMuLN+nq8zo&y$5vZLT@0KcO*^kP3n8MQP3E?ekTZ5WD2YuvC*>s504 zU(Vk;PKaFHwmbq%%WFD};{HhaU0B3@C>CI28!aUzZLch=K>kD!+;!OgyPouf0T^9- zdK~j*Ff~%p3T~%l{I^4BenxKvQLm=`tK8}D0tsE}$PI)tHWorTq)JDU!-w^jXb}@| zTn@7BlrBb48(d+AdJ8_DJBK(n<#$#HHbKV{ZL^0Y&Yd@0HYi)L*wOGU`(@CoYbz3|G6C&`bdQx8tue?>Ydwbuc*Rx^ zi=mvhm^!~G`YGuuY3EpwmijUo(ck&R1Bt;R6G-jsQSzi5)^u;26FSRUs$Mr%{Fp}q zv}VHY!fEbR<^1`#Pf6|q+p@2v?xofc(%)iM8LCo8oRaONVqkO?PO*{pz36M>zd{vT>YepJ*y9_UtSMttacC!} zKCk4va`q*tNb_o64T}Dq7bU)<2q`QfKaA6W&(VH{tE-Rlz;ifnvyVrH#j$e(Mld&U zwIC>tgv65GhKVts%uwyZ0?H{UB1x`wccu2%71!5Ir%eZ|F+p+^$Zs);BD0(XsLHHlg48lA)>r z8SflR(v0Sbt@UYv#ks0e%(DzmJw-5Ow=oiD!b+sJqks@r zH)@dI_otEp@?GL{%}R`fw{Pgay@50fFfI8C4q$7P^e>);17hQ6l^ty{T95iPZEayn zelS7@vUmdPM9+^iSY3h*K4x`G9`$6HG8r<)GmIfyOv*M$fO<3HzLJ>L#|cwoaT^Pnu>0wHi9Ml8-k!DZ0V*= zMNpY4j)5u`8LsZ?J~mMa9}Z%tPh=2NH5WPgj^Cspc=!*GVKKnFB?x=*fyvi$4_Y3X zR4z0mli`$Mr5LNv#R--krSj~Hpm*#8YLMBh=heiD%m+p))8GR~M^+tx)^4oja2psw zBC|$07UzFDg_Ycg5!Vg&k&gYt+y1I~F3~epf48$*N&8uqt!CH>;HiwTF|{p)K!FZj z%5e!-w)vy*^cc=&0B#zr!xGvLKcVB1{fWv~_qC6sxDm4&Y><$!`Z#1$;aGPg$Z28D zzFoCz1dD!JSaSGzr$YHD@m0+bD2amG#F$lF9^p%@K8ghC)9LNf>Fp@$?Q)yl4x9O^ zs;|u<+s#ws7?5$qR55TnRV$4CtI5i_5p>uZ>XK6s$Q?w%gIh{DVq2CatSo|;h@l?e z4HOy{6y}-?XP^tOT{`(<65iN!F}0w$)eA(n8z8Uw4QSI?n!$2ZLcBWd?p|B(WaXJ)nB+ z6FP@H?kpHm!zP+2j^c|L7t8YZ`%2A>>{3wpvUJrsYp~gT6O@YhXN9@*ld?5Fq&dhO z)qLKE9`NLb`mTLvsHyd73 zsJ92m7qn-v(iaUp?qGx(9Z)}5ZEAggj$fA(9x0bpAw+jX^CsFxBvG!6itF)UgDL}S z1~P($VOrguj9Q_(x>~L5FQndmloAS0S8T;5AEbipaWNT|HC%YZrfRNFw|P=7%{@aU zX}j7g5M}V?usH;N8}%gJi56qEGON;=IB&?jdOpXm(y0STWY{&&l_QY`M7&HhHIg> z0jAIofC(pS&ML7poCPtQ093j}rRTL=UDU*TB(#c=hbhRlwKaL}bvf^k+qM{S7hJ!~ za+!h~<3A3KEr=Oa>1VoWG6n_`lD_^nY2a37EQi7##MMxnm+~PYdkKw8=MdKH(-Tli zd`sb%!}9H~#59+h3bftT|LIXT*Q!l;O@r#Tt2Zb4ca1V-IfQhYz%)@Y#v&lNDII(@ z|E5d>*na5jW)i=$SB}mit{e(ZBB6>4GsQ*Iwnr`L&2m}4jGD(nsH!os@AEd`Fv3mR zk+Xt=2CGDbr@**#dXs9hvW$D6IY^V)AV>GLBpsred!>Rb7ojj)n%X{(i7>Y0$xJAK z>uMWV!U&?U+rx*G*~c}B7a7^d6Kuyddl3c-(~(r+d{^-yMkH&3DwBLPrZy%4U_|g- zL>l%WinZ#RH_8HS0bOF)IjC&bQei2ZU06I(UdTix_d~mIZY#+5&OG~81l-J;Bgh#G zt9k*vNgP1%gYj6y^rE^V#s)~WKEE^64+ zl%TBFgh?uOg5=@VRszE@E^(omF$|?pElOwCMptFG1|Xe?9njs(li!F`{R^tslVpT3 z2AV(BPF@I1>oY`~1W%!V@aaihg~}*%59{f<`btXouob;3Bd`3=jk4@mTFYs3LpJjk zhm~TBMcG16P^+q00PfV3NG=S{2aS~` z+37|qs#KJsAHoN-zS}SiDYkPyii`%Gr#H0Hd)@Jh_<& zv0)N$O?;XFJjA+dZg#Z1ELme?;q%9xUK3K@YI&QVU5$yz!;#n8t)tAGXJ?K15RsD2iqySS#>>ndU8JkmG9sB3d zi9dZ2P|HupqhF+lXj*PO299x53 z1lWc+1HzBe;VS?+dje=^Tn#4Y;AM`}ft3XbJU?zEe^hblG@o1&OtoWCM_*iSF7T!> zw{YPP%zg={s}_vNMx-@W8do#JiDVRJJa@D;??v&5@{UNugg6n!fbzp}>ZT^BhMqIC zS=9l@GuKhDx9w$|ZKgU^ijS3!S@~J3xIJS@Y?kHBU|Tl(V<$2jC3&t-y=13faXc3% z6^`d3{6F@q-J`;%q~;KNcArL@6ZHSGTeyvGPwy=k?ZDFi;c>fY>?Pn5j(L|m6sxD& zHD{g^yfG>d)S~M?1( z!!#}~PJKIj3CX6jxzaS-fzgE|l%QtHP)qrR#;Wi)6?~c3p6~5s)xsXQw{LFC7Sf06$m`5d1B<16{@Xcu*_k<_XNcD@;g(raM9HwrZ2MQE*gOI12(63X88 zDcWep7k;P3*t~FB#aB~a-52{0ufJS+zo3X5Q`ICZTi!(nDkzOF71p6cv$y}8Ap9WLboY1G}u|w;=M0Ej+nAs%+ zL9s@GivRF%kmSHY^1r>6c>jxc{f~O3q{8PAqy7()|AR>U{}6c;L}iz0`SEY(LFoOB zn5p>Xzpdv_x4)9k_A0k#8r$K{EczF{zeLy#7JmCF3b-mC;ci#y66%d-j(Vtuef0)( z*3mPMsr&A*JTBC3UhiL<=-Rj)sK7RDJ<>F;z?Py?g57U?ib+b!l&;DgXBKML&d#y+ z3hWUqVUB6SChMbR%=pX%ggQpY8I|cC!fGx8p2Rt#U)gymD}iU@;|1tjfI7;w+z(L# z?DR6l<>lq^R7z_QteZ`OsKZdaKnudLI3D{@S;#EiZgNuNNH?nXz)at6wo8PLu1{$p z2w`|+vX+8a9$y?6YT7}}UbTDwut^Z=Xqr|*ZwsX;|M!k&JjR~I<6CbUkL(6BpQJ$S zxz<1mw6c1^3^&?Xop`nh2v%vfIDU6n6d}OIn?@_4eGQ4^RKog=c>in~7hwTGXaVga zi8fh+z7!0Rk$}ju*MQ*=s{w2 z)5a+PwV;V$LR4Q8qs#G+HwuN*%88zhppU~;qGA0BOC_V3T)I1*B3{f(JtX7YXcW3jM|{o8R`9iLX;=Mz_xbo+Qw)5Wa1UDPD}vWr+Vu)la>c zn0n5}mCi*A1Z?(4%BcBEm(gl(J`4nZeEo=KG#UTni}6f8rKm2u!zf`0{ppj!M~gzF z2|_)oJD#t!ThJmD^huZP=6q-;Goc>S<4$2dwTOk^Mm>m($6XmBE#(_6&2?*ZAvjuj<>1*i~1*eivOE0 zG%lrGjw^KH(`D4{hiVJ(`qk?DxlrZkRWD@={&&n(jxqVf+F8UK=l)s(RDGj~u^ZS3 zW`;>#bf4n0gSiT=9_o83j+Z~gDJD{n_!m_&do!IFY=lFF%suumwOqMIqiowTvw)rH?hXC7yW(WeCik!w z+4sp(533678tdN*V&U(QPstz9F=!DzNp75_Xv_WqJ@<;|5+y42&c2RKM%R^k#oG>o z)b-dFZ)@j*-jn4>ZMNgS1urfk;(wG9r7nY@N+f?dL1QeH@Zxx;C|aXQ?Xh^le|WJQp+9>cL1X$JseS#;Q9drz zAK6Q*oih+({kHsh$IJ2$H_2QczsMj1Bh$tI@EEZPA>RKzcF&InbaE&lRCV^3OZ7Fk zOSocm>gW9$c{XXw6Kz~(#%tDpcqMiuwC^-Sw(28wAj(Sr@CZqx1<4gDZi2tTz>OqD zF*A|H&8h4&+PGn(hz1aXFtD-cIZFv0%i|B9!e0I1)8(g4QJyOLVZu1i9y+S5Oh?uz zXx$MgF!Q&Bm2?f95f@B0bu%O6Mxd!2(ebD7dHdIEZLBhR=!bj$>+yWs+~Enog^o4> z|M2>LXAkx7mPpZadPE(CBR|tY6o`LWD-Pc=hLo`vTfXQ`ghh~L=ddvMX2Ajl(DgId zy+OJ0H?pDM2mC$u3kDlqg==UMM5dy@h7U}Q3w=PDijrH9hfrveK1V0%O-wgt`@EJ4 z7NviRrhAUBbYa5HH{2IPxc}v^%{)kNHlD8%7d-qLH+Lr<(Z3Y>($ni7p30vn_FoTS zpp&z`s1vJ%jfoyC8>lEOc>l-#S{8Yx)QkKj&rls~w44ADWnOQBJ5Ra3Na(lj!UzBG zQe9q$_FYhs?_<$?Gh@_(-*(cqf1Cv$)RT@A%#JI^Wf2x;iMbj#e;|%f21f%nDp$*# zEK(w3Zb1Ho+8@Ts0P#2TI*^T%Kk4XNYV;2(rFp>y>+d&4{e4N;Yv>_d zHF_Z)dD@9Sz8TAuWLsyd4tDlgS7saLRT(7g7(k6HpROd}fi&pj?X#yshABS{rP;q zkH`1-@BQcAd+zHz&pEH>xLi0Bc-qFC+%XVlYXd}e>>82>8&6~cp<_b{@xMxl8of`c zflZaS4=-(va4yEa;iC7?Mcp9=Y*ZUYG}@fS%xq62Q5|X;U)S`%u{tzIQSG~Airw5I z(vJz=_?cnLib&15EayOF)3!#sP zcac=dG<^1~>?1*LiUs|ID!u7!m?7Sp)Jruf{c)Up=ov%vaJX{@U87G5uJ7E5 zsyfNq+A(-oi_WSH4z}K~l@POh88o~KoJ=%<{xX=Z2^(uveZ;N_+^sIcU@bQwR?Tj$ z+}cV>Upf6zf63Wjcy@pgAh6xVQk)cvIW+^}XtOZi6}AUM zdWgM9y?guX4=@fub&XTwyyh{Xfb8EW*v(hjvPXAzsQqQ0AzHXjSF3aPH5(?0XhY&p z!|~`KtM&=rjCc&svhkv)aqr!cfh@}Ec@Yr1M4Ei;*eB@;g^4A9>Ebba*ci^o5rdLv zyrK;Qai`asy-#M9uWp!5$cFe`I!R1yXfgF8JJ!t@7Z=kYy>w+QdcAZR{8+dNV#uuH z`;Y0Mx>Kt{&PaC3#d54K&gA&c`(&)ErzoCv;%(k=pebXEnmmh90>t%>0UKX*2e;0h z^smjvSUucK@W3EYc4ihdn%Cg!2T9@(-~I$gpcSsqs1NHmKn)`rRof2x4(+=e`hPa?av5GAOIjmc zAhWW>*mlH%b#m$$JJ-|KGo->rUoaM>%Ou&6sWHx^g+Hvi2a(XpeLMaEDL56bt%RsP z;DA1YSz)Xi=qgy==Qrdz5YwqKAU0mLYDBZoap+dPRp!&=#xS7>{c=hx_r#a?XL7#^ zF@vpMHxwF3CV(OF{}l-hHb$U7IihMc`|{Hy)%X_rrJ;`7MvFg3Pqxud-6@fBdep_? zASr5@rGj{h`p*E)yQKmh0$tQ?!n?zaX6Zh|+{_$?b6P-~P`A;^d%mFw8AqR-x!?dg zpRoieW_N6)8VMUw7)e*B^D&XhMhXhGgllQgVGy6Gg&pKD{PAPvVS4qVwCpLy#`k#{Hg+)vvn+*SAsTTe zz)l#YOeL!*N}?#mI+eGs;ZB$>Odz~C!)_oAV0_QA^;{-JuPrh?Erks6ra3E%eP>a? zV@xB`=qq%x&y+!!{9BFlw3a~Uqd zCPmCv=We((2>-Yt-Jnj3rz2!^aPTP`IloDXA?JFPgCHHSv0ZoYyMhXG1UpbV{QQC0 z9x$j;w9uUZ+|}#i!oW7LcwxvcIwt7dQxU6VF1LA~7Fh}d-~V1~X)tq;0?6o=+ynKw zScIQ)1#s`$zt=ZJS(|{Ykd!7M)=TBy5^c^$r!7?9>fST1T20crD}kIiXiGZ zG<2{Qtj;rQ={Sw=W&r?aI@BX0ol%W77`h^>4u1nFh&Cmv`nHFCKQd|n)!Nu3TmuIk z!5}^c8w1`o?3wE8kvAl8QXT|M4SHOxF(4Blct9(<$57{#oYSe17C;qD=N|v+x{$73 zyImEP!p3KWNpm}@9BeWvySr!^!v%NP4S(PwUnpP99_nLMLpO*>O+87;9aXXA)S0eH zk4JDPQ&C0=HJgx1exuG!rzzkqgN-f&{cx=Vsjt<414`(msv5oSCeW>I5yg@Gs9hDo#)r&Q$h@qR)tEHkyD}83$ zZP3>~fo&<|*I|P}BW6=lpW|f~k_Fj+#i`9TQY@^`_GF_)5R?dLko%m#$>Z*tu*ya^ zI-yKBNQHMaypmZgM^@x%$eD)ONQL_HW#4faqqa%_gCBAy=dKP^7fUlUe}^EEWf`3s zm%zAt3MUWJ#*S)4Mh}wF4#M_{f21(+D4HNI-2p;2d0WsVLME+_ibKzYQbY)EOGjzL zq3fZ85)_ds6p`c@>{NXn&HbcILG&vlTJJ=MbPQ91rNL)}QUa9V=o)EMr8(ASJe!E+fN;)JV#EK-KUNiv}irIOsm za4wHI^@l^(IE>BATVP(-gE?gHcphoXhAU)KAa7Io-ghcNZ%oM+)J_A zh*r{h9ZO+;qk+&E4wG3VLk$EW=wQoH!cu%=c4;YTs)lZd`dVEHV@Fk-s5!ZdBBNwGdo?y>AHQwV1dMp}7 z3-&CR;l8Hcx#Nmt8^YfZUYUYq|8K{}E6?&~vuA{1&R`8uP5A-SA+wRs zR|o6C1_BX;>_ciTU6vD_m&@2I(pq`A0 zI3Wr^&wS1EIW}#Xb4UVOn46dHz+6m+i{j(IsT z*jRuX+ygb)9P<6uZ;d3rrB?A)4VcJF%zW@)kx2_8Oux4Ja=Yz*GQcnyBkuS(MV377 z4nD1?h(~TLF{=i?WKx6jsw}p@`y)tWJ;A^yH#gy$rkXElWEqLMMRxIk5KY)l4`h2Md^=oc2KJ*lW+kbr z^**FaS{KIX=i6|zWxIzW?7DvLGoMU zp=xo-FWYq*%ehDg8n-ewN-MJGBBO;Slop?()-R|JGN_A1gpPhf5}au)g%k4}1d0Sj zu+?)=U<&-sX?0wpgUb$ZE68t4FNJ4oeG7{dtr65vK{eN7hrjC}&#EhGHB{ef;Ry7V z$W!IJ{m|T$<_F?>ZHvL7r(6|TWYtIm|Iw#RSUqZ1O{&`)Ml1v9Q{4e49VBlK>9HCI z=XYH!T@EJLCpCGO4qNO#K(lpg>eNiGY@J!+mTVD{+8#sy95jQ5DL&2=wGRSo+^HY6 z4OiE%)RWt&97&)v3Kb}1$!`~@Ag}#$sXk|I3(DefGjP(#;E5C?qe}28PG`_>?)WJd zwf~05j{322>sv`Z?Q2po@nae!J$da|FsltB$$V_+EAKg zBA3#vP2vAY+~7vnMsJu0%VQZ(dNA%r?)A&iO#R}d0RgBT%DnmUGP@?nl|rXxr!3~~ zs38;GEH`)X+{+IyN*QXxz*NX#^ip?@S(`xZ;EyO&U7 zAlBiu@zFFqU-?oI)I2i*upOI8Zxwo<p_Wvb&8V7e*5d*Ntb1s{6 zb5gf4*3bslAR}Sxa7{jjhX8uk?Swz&!FnMo7FvZ%cKSag%*$mmb9IIqTg^=M^NJOm z`3;>udUi4CP=#iWzI<@|ECJ5wY~|yWQ(bEbKPcYbebnh*=)IWE$AMSLfN*O|*+3Dw zBWyn5)fKF8xRmT5e-_fF@tXRYM+yRf8{dN_V_0RfDA&j&bI)Vx%_^u8tDB7P?OVGV zEeeg;vWX|ZECwp`5ALr!@#dxv%d3Pxqc^PO+wT9ap2(W-P558ikLEpH^=LV64T;S& z+pyaJbB)emY=Y$4lTt)S1=-*Dm<-4{Cq^nU--#z>3Vp_|q6(uk++tqrC^Ikz&oZ_9 z$YhBQVfsf({*k23ILZ1L&guHt&W%VE!^*5phS9k&`2{Zy2J|O)O_)FXqFb!k%ZjXK zORI`TXZq1unF@o&PU)5YMW8gFzS0@J+Nmb0-C>ey#7Mt@R)gDs*8hTDFwEC?JvRZ* z?Q4zTIW>cE@${v@+|eOpLxLX>r@%uBALlX{Ba^=g?t_6pG*f=E)^+{&`a}clr8=u0 zsWPg9_8C%BXs<1J(l~}!9EOHUM)V*>p@LR6L2l5=1!Ycd1GjHk_gSSCiF7{2%1!{KHb$p-(sq>u&r|m>;~?M4 z7hI^Z^GI>jjEp>OI?#;KPXK1)*N*uMp$ zu1;8Qz?c#AJrkxzHzJ`Ooc^pz5^RD>A`c={o0gX;gF!2nCQR!i`)_^s zMi13Yu}oHLxX+{9qzp5mLGIvKig^w-rMHrjq1Yxjv(E+0f?(nC$}*!NU-9-oXmu2%J*=tCpc5y_)vYpYu*U5n<>B)&1IwPGgD7D#r8;m z$R*rpv^byWNZzrBvXaV>78H=78IV7nsdHo)ckvn125f`YagY<<#8f(sb(c z!2L;L*{2Iu@YBue1*6t_l{Ldx)(@Rtb8}yFyXATklUVk_>BZ@(SRddB2Wc&b=k&1E zVI%+}G<3^`HT})lplBig)RKY!v#~|b5e7rEKu@Q@XrLX|1XmXXrZ!s!dDRWRNg%tw zengEjpXCW{jntO&Y~t{vHcXC3B45KORl7l*BKtmlgYPq23)~pz>DOR;Qv-7o(-uE zHu=OD&WhMBSMm=uMeAhfXORgdYo);y=Vdf!wmNOGxFxy}k5E_0cgX^QN2SQnI;Bq4 zm)M6NQv(a=*$lq1J^;pOB~qT&ohtPvNdkQcr1?04-Zxq^79()FNILd~O)xj(z`8@- zBbw^BNZD_x)!zp@bCixGZ#U_yMvKmC7Yyh$k*idf~g;3 zlvAHd^MlFB25_$=Pv5fMZ?jSAX2!U^feq-@3i#+De~~g8S7yR%Qctx3>Sow^>Jjee z$m((~Pn*Z&@u+P297E9o!>?$`)0H=JMTO?15;HSEUh~DVL|$6myGRi8Kp4;$T)G;B zg!`vGWTVE3vAUT|zWPU!Fd(BO!374VQBmBc6w9cCWqj1Bso|FJ3{yCAHE>5lfFP=` zHqb|+G>MUNizACmq3Ky(Io*$xGaBmv1WM2z)qSc53HMo(yFe|Up?fo9x2F@LZw^q& zVug=qjnOzCoR4jjsexdfr~&DsfMqq}Wu8(x!iZe(AuZ#BcOs>wDyNQ|KCa4DId9+}11Vvf{8YOp5Pj;hk|{Nmfg=y@ntq9nh< z9a>&t&@o#PG+?N}8%!GQJ^q3~m{Yj{CHCzT^vpcitp@sq6c`!#(wQktCPN*}esc`Ii%nt@vJnK`1q0)`6tDlIpa?OHT}p0Jvgp#A+4OaooQ2*KYQbG= zm`3KS`XMlWesGL_u)#n=&+29F`@{$GZ&T<{(u~uVG^B$mbU>xZr=%LmoqT^iUB(PY zt(x`+utNay(Pl65^=t&llb4k`wh+J|R$mTg%Ac!&f4#yWkT3`451hDHr{EH9GZTON z&l1&aeMtqEoXlTq))GB4<@LF_rw!RNS~dq7BPg^o*uV!Up2|Y!Y_E(0M+VV4tC;l0 zQ=gdKqM$kY;U0F%4!^dg_{_I20Bm5!l;rp-(|K*K$e=MG8f%g-!vzwJOgu5B z>NEz`!(zgGt*OM>hJ2VgpEPh*=V{0$CMfY{*08B=)+G%#H$YRBCEscLC6wQ}Xx7K1 z5N)%b=SpgA^(p{bc6_h;TUv&RB;tuAeL9ipX_g+!yMa|X*GDwPhsDl`rh&x)lPMg}G9w*n4JmJTge20T+PLSW~c#LN9Ox z^K@h>2ph}_tV$%NJyPR0%mEn(+uBZqOTYkji7pW|=_9hDg_jQ^wX1wl5p{#OH+QiM}M;k=Yfc)6Ry`7K5F zV-P(_QwF=a$pbiJY32f`%*_jh`SdsT+Db(!gE2JKDKt=IyZS(*&fxwl2;NdT)8cV; zh0q48wd;n}kDg3{A&`&llJ&x5)eU>}nQ<6N?LHicoLQ1zGrdJ1r_*53b-k3`{zrl}kCYar2WatN zmIqKP3g_=e?sMoEhx|gM=*co*pYn9!jx}y1Dgl(l6j{z3Y#c)P(rbaU;F@=V{9v#g z_wiKolI>c4d8VLO@kS5uer(qo0R=Way#o+>lEU4H&Xz=ez}to zu?%|eJ6e_0dDOqiXy(py^pWFV83KcfwTWbRFYY~E&g=UkQQU7rTy1qUGS&JwK;{f% zYxL-c^RvG}SKoxQl6&|!5yuT(taNXXom`4JE)93e=k0DZZcVCRw$ld!t|Q7VB$$}Z zDh`wMEi2c~)cb|c7fU9peEzP*xI2)sJz`|;GrCr9rZamw$J_PlP`qP~=|_;0qJa&w z1Ff{{G~xK^!ZY^%td@7iBNewl47cZGw>geZ#H-NtsAdnX0Gx$iJQMD>FA4t@gI76J zo~u>?m!##^HoR=Lu8zCo!1j3IZ+H2HYjpat5Rq`Grx#bJj)tve?Mmc!8=`ZlevNg3 z-|?rJ2i7>vCr`%Gj(Fcqi{vH$Ezdw=Nx{-v6DUCY{D-LeU77W#>rQ=}-{wttJ?z_( z<4U-p1VZL$#SL>RhHREY24y1u9BN`Lz>Ej?og3U{D+QW?i0 zFjl1XYe5t;zNeOF`ls3uz2uC1sFU#(ZMLZUX$BqqlHx@6qi49qOXIu;*$RDMzc-x+ z1b9RTY38wPS#(-uvb@@!Q#8|=m9RCjIP@<}=fp_MzlPU&qX!*YI>1$O+?LrtI;67u z4jtf=)pukb-a{`7yc%Jn&N*;2rs5NZqXNtJcUPg?ufF*Q7ryfzPS<-03LoyV+YRp% z3^%{rqtNgDuPyEq0|S;bDRcCkSNb<8twPDc;Gcl-yN3W-3LpTYI>gt^gikS{M4J4u zkolyP0^B_nC~h&Hr1Sjq+-d(blDB7s%dw0fwr2nF*J*z$F*mHBeqXiZ{#Z=*&R^TY zE|)4M7tQ86XLHn_rx+$=f9o^rqR8V$&LrVm?_TlFKbY_NaZ&x~g=&_SmAJv* zf9+niYc&3X26Qs&&H~eZKLV3tGnt>Sbp9qgyey%le!pK-#E|35Hemz+3^67gTvEI- z7Y+`rQAhyvyL)$QGu2D1b?Vtfj;X#qq_JHJ^X(5(I=nXJ>g;@W-}9%HD7lNzdW}w; z7)<8{0^L6x>OPPl#3OWYrj%}_6>lf7EU@R?aPV=ZqxVu>{)Tk=n;pLNb(vc(hYzc= zlr~N+LR1wkUkX=_^3TU=Osl*>p8RGCv}&Gg$jSF4Y!3({M(GZkPE~wg_|4wpYg^o{qwHH+?--i7=X<}63jOWa{1CirAB*Iqd|&ls*x_X)xiG%#iZ@%~;mg)M(bFBJ zy{O738m^xGlzJ)6UbPcfExmgd`~tX6+XQkfj1imc7}R>mBw^-JmMzBrh zR{?;A&{7xv^ULnhU7tOlp<5jkV(_v8%*YB>b#QPn-=0^yj&A4FJNkiPwyw^2Rv1%6 zG~Y>4+lItJR?@ZEZ&E9M#)ux$X%mTFjm*9}HtYJB%@4{Q+I+s2u7(Hf-VEswcaN*_ zaBYVB5*(fvPBgU{Rek#`$8~W%r)urXQX79PXy(Mn=%X;DYfqUnGIQT;?xcVHBk^YV zO;EMf(N^UBMd0Fo-g5T2PqVtp#@p`|*k_SP_SId%mQiB8X13}9w)qmP{Qi*C_VMLd z>fW(V7{%N+_jyp4@kZx#50%Z~)CYr?n^9zR^UoiyI6vb#=cayFp?;tLefDxNZqD!2 zs9U9jFMp@)_VEkDtH)=*zs5!G?ZhXF1deg)-)czS^jdx6Jn7bBwC#HRCGsoji!4oU zVd?uKojdhMvvDz8J+G!-`33F?rRuS*zP}z^VWV`4WLMh=Cn zrV2=i``Urg&=aKZKvHGyA97I@eljKWC?CtRALk%!lm39Z!mhWgPXBKMuLekBYCT4_((!i%kzaGMqWga!I1kx%vv`=Tq@0po0~%p z9#g{J-BV&mhKVJ;0x&6~?iFpi%V+A3aEpO_N{7!p_(bH76L*6IuSN{teC6yxTN`8z zcL5Ujec%&L9iNPHO7N3>-1~ZooE3$F3o=2;%8t!LUnnwUz$c|u9@Y0KeT>66z_q~@ zEaZ%OWMVeyLa=cFDBrE&3GhT#KTR1HI;6zOTdgkt)|HRSEDr}=&$5F6o7iI= zH`EO5Cni%%d}bAIeT=IkfWu`u==vFXj5CI38|{}`FHYH%{AT~N8NSIg2GJq7FSZW zaS9cr6ZZ@MviZ)yxf}iXWEm`}bw)b`9}P!p<=kiPfW3&TXS`eJ_cAwpaaG#ce`8)o zw^L`ZwWEzI?I(Y5m=bR=WSycZoWI*_-#%Q=_sL&!#!eO{8q`^iuyj}`gjSL{pAkk! z|C5f-B4OWzt~e_#R1|Givw&?Q46=)i+A#wpp3FQ>0g!72t?F8GexOMg7wlDF21N`7w`Q8VImob& z>6Hu3!CN4f^^TrLxTBBJdKv?6Tir_rYKrOMLu+?_wl<@(%+4~Qa!c-f6hbMMR5(_R zta)2L1{S)sH2qXPNgCWw8RoNk&JqP|kQ%XuxQ;P9e?~yhxaX$fS zZ#bHi@XQ!m=o3wT#F2#H&}CJfit85N9FwImaOO@vazs9g|?%LZ(hPbZ3H{rxnnqaR3^*r?o3 zO`?5%g4cqK%%_NnvoUc!9g>sH_(;}dZ#w*;&`fn^aY9UPg|GU<^AV*;<)9(BTMJ{- z{K#9Tk_XAa#hKUKdMF0YscvW?XBC8bTtcY+DbAHW`6Ek<7EBD)4H-iS!6G{&?t_qB zQpBKm1mFEa_hVS7-b=K+92_qn1KgeK+9R7o7^CP?V-{xK0mrHanW)6p?iq-FI6 z{u;$L?67KIPy54eE;EbiAke9)2>Fb1JU>!Wbb+7dm0iA-Cuucfq9ZW3R$wXkeIgX` zVY9zjZ%YhJHF!25uWd1YsblWPm~#VuyiEVspz;5M-z^d*MnQQ2J-Po2egBigGiK-T zyOo9CHx~19v6zmU0m?TN%@cLthcH$2Z36?X#djlK;hN6E;!E3 za`I1AF0@xG_ca%Wquaw{Lv+dQ9|b)LH;OBm-8zY*ii4+mocs)r@^%dPn8JxYMqha5 zT22PE>sa!C9U9x$iZx@}QP5~v#`CFg61=%s_NNk-#ouoT5RbHbgD*tH7>06=8EAtX zSFSnQCl7C#@)wB4X2cL^{9AKU+Y?MZ%*U`T_vZ7rh zBA_LIoO%6k`Q@D@*#c1PG7C?nV))u5XnHN&zvj^VBrBzg*Hp0kT6HlXTjD9~tEYRM z`^Wgz=ys1xo$uoj=IMv&6Q6BdDp=Su^O_7Kwxh<-)=1E{oUmmSx>&hiiRAgJ+6h|3O8+8?*{dn@>pH?uc}F}AIDtG{IL*D$?E=c>+>J|az$^%g)Boi z<9xKi!yM96MXNGnft@+RR$9x=ll26Zeclwo;X@tm7uS|lf~HJ~zl@=(4eTIjLd0Tt z&^h>v#BTf0{g3Wkxu4(CZu_ND@pr4h#RK>UsFkSN@{|ouK*0P>& zifI^?xZ4qH?`JG&q}u^rKM?5SGcgEV?~-TnR`UTaXG|!%_#uiN>M>ocMWYeH;=L^F zTA1PJtvdEBrj`qf24~CkIRww zf!pGjEi_x z9AGwW&Y*YrB9Q*(cONKiuHPe`#ds;tl7mk(oWh6e(=dGdkBtC=&XPB3lt*MT|DgNc zx)as6mMxWK8CIia!!Mi&We=b0xEI7R7WBpJ*x%j`x_=}j=otOqf4cHIl%sLSc8I zn|aN{k9nIdni~XXH@n_-$7T=ZCzyZefuTom9|<3ijgpr3qdbPy$ZFx!J4^n{k-suL zNnIA=ef`J!Km_k6yRIS0A!u!4UTTGxW>u7kx=q&9yG z+VV?DLji|I%x-ZY?H+M@lD2r5G%*QIpNF}^jO7^J*4D$QF33#}eA876|J3iI;vcl} z*reFeTV=`f*Cd?OG6!wt*;jN@93xO39+S2<>Z;}#lmCyT%d_3lyNv0A0&-~|c*pG| zLv({DT=m#}b8JU7i|{eS{kLc97R<#vEOwk!F++#xeY>{;TJ6Q6Y7W{T<-zwPz-_HR zbclW=iOA>J?r&CR+08t8HGaVpCq8~S23T9a;@8y#wNpNwUL`+@t0Xc^&fD|q;4}j{ z#57WcGm7WUqKlo|SNYeMF9K54hWK@bKbK^x3_W^)*Da_yXdnBcrQYqOV{ikvK*s+A zw>K__8^^={Tn{8SaC_r)ux4}*M#bkL1>^=WxTF8y>%b^{vGymLs14%(k1VH)|JmD* zc6EElMALv0;r0z#p=AnUi$&Z9fzPsv5EXut%rU)nBhUUv^1hUydqZVX5M3FFj#s*~ zfn%M-ZLivaW95x#S1!Ho;TMp-1$fmnc>es4o8jB^#IrBQh3tQl4M>c;1Le2XX~4Iv zjfUWl4~p&a%W=o(jp8--8#jYWECZ2Umx9PYc0)TC6Q@ttwgdlMyJnn0p`K003o3F; z=-!*@0vI2-n5u#_!DnbnVXycNTjc;c1y1KSBNl2h^n|wSSZxOS=#dJ^u&Jfxmpdr zeo6b|KN4*eA#kG`x*|PtJ8_a?DtV^_;;|-d-ueA9saLhlVznVsM72DIYN75@{m#$W zj7`u^KGAh-j95hoycwuT{*>dJmQ+jN!9No7hU2~tHIH|~Rh$;VDX$m`Jgz_M z+QnTVsk;Ah(Y7e#VLRKpAgy*@Lg1cDta4?Bg8LvVu20X8Rklq9%7#mb>Xm1zQYty^ zL$GX?%#gd*eMAWmIH1&9e8pVUA*h$O^l}a^3699-Z;DNk6301VR&UuDmbXG zPSeAJd+c|#dlNa4qYwzX9{MZ1(V|9FSs|c!y~)=mV!H4B?58SKW#KA?ReZ?d|9P?h zdqFf^tAizeQuBG@+(oU?_`L|M9vc(wq#u z9(->MLlPmb9S02d3b{6!+LXOJmC_g_&$oR%^1c)ideHBV)=|j~ULK^`pky6%?a0U* zYhw7pyR|(d{5RUraOM1u$K$^Rhui1TExRlTm^;#}Y z;^-<>R}(*Wcx~vX+83sm(zi!KAoA$cSimX$;o9EGsfWezoNa>lmWfe7H}qD!KEqh zxL4eG&igZkpHW-8{!d#!$qiH`ctr8@ zNq0Sa9RsKOLWr~cAf2L&gTEqA?7sIs;wm5E#d1}Yv_}^G z4LsBJNg3O^h`5=-vPqWfy>ZgleY=&v2z?!gY;AZ?FtN7V-YB&_ISQmn`HzG-5Phxp zMa(EFLRWsPj4#4_Z*mAv87m*JO(2-P7k;xh9J|kvp{?Ho$sOPfx3}Xh$eJ!yuvoHv zO{8%%`1awih^GJT*rreW(iNZG;8Ff3;};h9l0=sa?`edbsbx-aDk97jW;Vr%AmJO| zQ@CsuA>wA!h) zoHvwmH{D|a#M%VW*4R>mQH-B$&Pf22sb|%Q5zdEyP0lpM>f+6yk62-bh*%AN8EW)C?Y^Rk~Fz~ftws6eGt zi8LGZx0~&VkB4b1`?o*dYG;H_(nV1V(oI^XE-P52jZP10{bwA%H(}=P1t2#%>xynY z)9!U0fge#Ta_SfetPtq7dOETj{4)Vl!w;bUVx0Vw7{V9@kqlrS7H#&H;Je(nYMdB}tIi^^DdadVDKSstpTB}lF z-k&dD#xNn{eIjVg4$|Hi950vu*&~ed-BtZH=ea?0&e$fnR3&OTy6ms_k0i7CBQ8qP zc4Ay{$>kvB^ObbW>e%6>C+<4#nMEvpNA$T`-9>2`&FtF}=h(NZAm7%izJVWl2qX8f zE5WJ~^kc)Hb2+aC5O{}YRGIuL!LCroQmrz;+ojG`;jNcR;>HPs2EV{@D#?9z2RbPw z;xJDfPm(5Wa^}$%e7%&~Gx6K*e&+VzO@8Yf1vd8JWpN-EeQ}f!QINdpS%$K1`(5Fv zNDA*GLckGT@E^%&-1<4a>iYqF^v&5L@G`LO?0RkVDng_0nWcA}XgonL*l(<kTIy6@qqCgG#gAMX)qE}(8#6`atX?xk4k$ zkS*U&%j#vMWSkd%A)MP8sH+vglHr!(o&~gi->dHdWIO-rk-9?pA{JuiA*QOTDVwr% zurK~T5Md$!FFOgs$qWLzNMz)H`<4D9`CUybV(ghS2;dL=x#>UE{J-iPs*EIV-jUYX zY}X*Y*OV0n`%;?Xz4onP(1<-U!W}xcmUL%Y*kJG2fXi?9gSK>chLY~*WAP(elDM$D zAu)fQcT97`QRW^JzwxP0szMrd=L9VHo{9YV{$)96sZ!W{RK_VPTm^II7tNp!nBKUG zOK2yA>f}!Bs$+DBoT7z8Ox~K%6{Rb=ec1}4=1)W#UZ{2wuAQ(&S5bAEAAOTHq{1+k zGk#A@j7EcGyE{O-*y_=tQTF6OboIZU1LKLu9t;#~ta|JBhw`{f_3=qZl zi^!6{d5=2n-j?I~6av}V)BLP5jmlFBaj|r-$8VIJ*U6tADIp-%Y}XS;LurG_pZq(xEW}C_JoAt z+sB(tsB%F$#g99S98_#2dsV4LmwDN=Vf`1$y$<3!lhEe25Jz;~+uPwgZk5stDWJ;; z;2l(bV6%?r^A~67*f@6HUiPMnoV}sNXE+*NlC0+YU}dLPHyoMb#Jz*<=5p` zZP5_gLBOYd!Ie&qCiL(^@nX(eGqyvDJ|s?9J7z=$(oS!Z?MnBk?R(Ozg&TED3#`y@ zQDQ+!(EV)vKt<+5BG<5h{<9lyjf^$)82v z%N!M&;9i3JxJ1V?+{1ABi~l2`>*;H~R&6-{M-n2yA%~g_H|&O@OGb?*Uu3X{*UTZJ zV@bX1P}|k9dGupRp6lV`1gd!keC5M)a{%76G-mwrdz8@T<#TYeR{Xs-F=mhM*t(0p zxhmzaZu`2oi9oqqP#Bp3@>L1C_b`_q_b&Xg~{CGtW3Q;W& z{vE7xru&SqD!Vxz%##VT zo5Z`HEi8@&odmbGu-F_Crpy-W{TSyetwIYIvk%nhJ0S-ih`|4Q}w7kcMT^BaDQ%&CQF*WcXNISE~K}`e*QSsrpp}`+f?(_!XZLPx9Y(m zQTOAuYQ{xehcD;UQcU!OUZwF9X+#Kr2gT?Q$NVq!DxVd_XkLviUcN;rmXAj#y&xVi zvzZxh3%YUSM?lM2-kMa6cq4-9bF#)Y5PS15m9`2P59`!a>j~Hzy*3X99C_lhxSY+H zZ3PjY`+K(u(EqxcPd?J2LND4aZryqy9mY$wMO_wx%XIn(KDz_>4T6wG>%Z7;n4e?z z{1gc@e7{3-W8L{y41+US-oWVs`UZ>zi|5n z;~(NO#s+t^d~&P4wNC2<3`fLvc#$v%?0wD|$(IXR(qw9anP%Fj_F4?{GZDz%hv>YW ze`k0sl4<#aTJULe(vWwcW-h4e+tKY~`nzB+gW@OUxx&tfD=*JiM7N_<&D`ui%i?=~ z_Br=&SG{>78%T4Gf&if>Asw2%EnQ4mYpo)Iywx!^v!0c~+-ap2hC;2w$f)HGZcTXW@naEG* z$~yexw5}+Mk5qs33ZIG1-@}G&!8^t=K3dI#W<6VUoRI>lP(}?S*dK__$zgHoMbfvc zHr;a8yIUzgotU2%tfiuT7b`LuK6a~Jk6yCOw%5A2()FGVENdL&nR_NJj{8r3vZ7Z! zqVd}`du|%KBa3iv8|NM>i?E?3^1f&HWG)z_i~o@vYI%@!;PZn%^nH65?aH3-8iZ+z@+xy-daMUSDS&W|-;1&#%UQO^og ztj_?Wx6mYBWeoY>p2$4F0frYs+Z}!Igy{vJD~lbOO^<{N&L|O8WzWyW^1E_2@Pz57 z0dLU9LqlEgp4v;ET+q=#D9e&!4bYHnwF^stLz zA=;B<9^0;i|J6e4$*$M@Q|R?Wf>#!YJG-P-;(iGH+|_(q*=L)1$NS?)&1Larr*qXm zyV0N3kSl-^?*hIu@b!xY5Kj4#b<~7g)zhiWcV^$-oCaTWycW|dpfZc|=pNKQspZQ;8{BeKn z;LXJ!cvcWT<#M&ZekkjtT zFx6M6__Upp z{*}5LrDKi4dM`jyIhvGskh*sv8(?MRf_@gzEY|Mw7niF{*Sp2XHIyDs9mBqF!J|Mz z*_9`l-9jzGSQ=yeaAAX5*SgJ8rt*7AfCa%J7I>BL^bt+AyR68{hIGGv$wQ za1n0sDqlIpg2?YUsuNf>ILdIdAetAu`0>$$>0|GVEzb2PzStN3GIG;jOVwNJe_9+Y zzJ22P-pvX*-yf>jXi1tB#L*+gi}k;jw~2- zcqNc(Ed)<+yxQvppo@1FMZ7)T8(=crUxxzp*H+3(55^@v-K0Mbe4)w(i%luLupJ&5 z<&v9(_*dR7z3kt!<#3Ff{STp}vKPzBASl2qrzoKUqJMI06e4mP*%IunfPv(W_aeUi z0z@cV5Pv$(!62=8K9?%>RTMqW&@kH) z2dVh)0&q(iC|(M)D)6y;_oxq%8DZuA7b!*fOuXdHpZx<=k-jRJCfb|M@HUt~yh zLl+v{T}L8UH=fTZAy<{Yu~jF776wb^i{P1+(6`Z(K9&C=jeX|o{>vGAH#w;A(fjh#mb$T~bpC&&t~~li*Zj_i<4|SP;R{&U|Lo(y z9nrcQ^~gGMB=YbBO6H2VREm4eoR|sQ7d!vCx(?cP1l)dkPrv+WIiBE7G10 zN{bj1mO6f7+|f=*A5MNN-?MS0gP7Os9_}dx3BcyPD1msQ!>#vwtXzM#Qan2!gU`1Z zk){`6M?%Tk9_U@lYq=gZ@vQ;{0}Z7zKe-&ytg2j`Vb8kq^&=R5>U+CJN;J+O*3(YD!YE#-M(M^*f_nqeb;M6ttY5Zfszdso747fYm z<6ZmH25Fj{jg~l+s4GbM&(^Z+x$Hu^iIaes_qtN;krIZepy8xIomv&rW~BHFo+!&3 zQw-;_-?qsU&(9~G6c{jz6S&FuTy+vph*9?5hQ*6CGiYdcYAi+%RPl~8wrWv*0Jv$I z>3MDRl@8JAh{rk(@E@PlvHF`fZhplwtR+SDUfwZuf8}?e?oliE=p=mHUUVVJ0Q;L~ zo({Z-Ck36{O8(@?zdva}j1L<5o253^79(fE~Ys$j}x<{{>DeKy851#F;0$JM%tFF zYq^a(6#D$y!r*Sif;h>#PtJa#wN`vNL$e7NEF6Q%)Iasy@y};ja}cg+d5_^4RHsKR)#JHUj3(UtP*F601S%f1 z?4{-3q{Y|QW~1#NuS&mm<|5}$c^dKy@V7`R`37p#E4DWgbW?ON4&aORyUpaRzgA^h za*nPJZ*Q{U88dHib7Js%_Y-e^S|DGgzKGK7%J091!8%Vv8ut+PhaT#R#%FDKq z(!9|mCtS=N3!gwSBmf|<2l5mkT6WAAvYfMhp|T@z=;OL~j-633y?H2baLKWLuCRP> zlbq~6)WP!$K)oEsw>qqEf271-JCCu}^XC3cJ@J94B(em6mu)T@Ozz+K9V>_3=cZ)v z;8N3BEezK_{#(GBtTJ_RG9{5!B2OLN`%K?xA{fRiohagB20Oj)DCI_4$SFyIM2iTv zNEs6eFzHzVq4m9dLHLd1EuWFH9 zmMK>vD(xn(9GfI_L^s;3EB8_PEzK&cXo`_y&fgSgUzgvT^a;mPGa8)w1t(JMGm8Bl zApb0me*VZuUwuo)z;OLSl;6{~6D?8~mwr*;UWy!E6v2D)(9SRS+MMc~fVG{$zUpvi zF`||wlNCqb!g_UX9QLi#pG85yP^G&Z)g#5iQ z!f4@;RN>Go30rHec5o*!B}{m}S7ImL3VQBvB(q89DOC>Hfm|=vI*-ab(Oth>{(8NQ z{l3q~+mxBdLlHI6T|^AOP>WNF+FWP#&UjZXB#x)_d~68)H%?(GGEAk>dnTFdfbrs9 zn0!1=(Vg&fOm4WGwX~eUR4W1h*+4*iJ7RuRu8wzlWbf)@iiIcqQ-iw2;>nVRbjtHD z9y*HHChOgSaITNv_Xd96VET{bHRp>spHlO=Ue*v2KG9wsDtrf;p#}*x8DC47% z?s}xDs{v1;D3qrvSa1haeVkfbo zM!|zOBwg_Bj(r==9D8}CGpKiqf@*|0X0y!8;z?QQk$C96$0VMw;pEi4*>bj|dFyp$ zot~N-1?p)gqQ{6+pVveWXSv~xbKk0Ju2_Gj`6i!RN7a7{=#cT$wo7Y|K>imc)0)dw zTxXs4#7xo_Zsd}n8cQ8GW4WrmI~371w4pgtEjNz6HWod?;1vQ7iN|hUh&MeB>2Br2 z01G$<2Rn%3^+ziG0(fw`i9cjtkI$)}bQzEab_gH@=spe*wwF}EM?JKGdtXSHFGH^x zI4q%i+m(SC+?fg1MHv6#N9*4jA4%}}>AW7sF?6(^)mMoux%QZm^=|h54U|mFS}u8= z-S_CKf6G_nbGH=ibv1ur!|%R|iFh`JeBK`w-#XTkWZ#=D_}oQaERAE9iy=?=_}54=3*J>w8sXid37L3P?3^(L+qQ?8Vv z7UG)L#>)1}S!W(9CujNy96<%CzJ*er0E*UfVT98?I?vI|T+7lA%XYM)MD_w?o0))OEqqfKQIc=c8RrwtOh3y;vBAb|&a`StST!CK23@5v@6)cp6w+I-B34lE@xCP8 z-_2^3MJ01X`YYjP4?29_pzKR?R{7!WPo#W?2lmF?D^&fYN9T#;rn_t4s(nz90i{Yb z`0mzPU@g1x=e%@6@M`OFrhgdrCMbX3M~wR~fhS~#V#$Q_o9HMmn(j76`YC5bAPOk+ zsG&}TfTm0x38$4?^UFn$#`>ymNkh8Kj{#&XA zTDKj!G%8@Gt)=~k=<^M(CcT2C-^2^>n|H(68p~`k@4ROj{KZ0>4-C!FdK&*8sAUs9 z;)H{6M!AVGS6+QJn>b*Vz&lUklhZaq3g6?J7QU3q5v?Hg@-^M3pY$EZp9>p6`33`o z6#8?F!wz4x0Crn@23t5B`_B>UldI=2)V)||$vS~3WdT-TRny>M_BAG2$w(s1D*-6+ z0IKtKx31^USab)g^|pavo^<3FvO{^@Rf}qa!nxy%V&j-jW(S~;o_}s6??Qze!QwPA zW#8rMzMbS02;wiSY8E5LKeo}ltf@`YYsxl1=AuOV&KO8NzxoU?oD7Hoqc5O=i7DUW zLUJFDEWCy&HM2|&IuR#M)<>X$g@pa;t-TP>cZE?W7de!mdJzc%?A`A180VSw*xpmzCSNz6jK^*3x!Wi;uSpigIO@y9$|_oPfe2(~MIburMwqEf$W38CWBHy(Wn{V70LxZpqG$musR_>D4nc07+iJV# z-!jqPc{uRhiqJT=Z($$fGiJ*-e13NGv~KxkbFAR%ct--y-yfW6F`m3V>%LeK%cQ-Z z?{`PR0xYv~Ga!=8fv`aHbvo*A!G5Xl7jk<=Ql1(h2VOxJTosyiCIgettj@50%f8tO z>rGyhku8#?PI~>Va(E(xE61Zi_)s5e1|F;JQ9S@l%V|;=EG)X+8yezX^Y`^bVF{}mq zZNTO3G*ND=2_^YMSdVyp5c=F7=MG{y!^6((lGj_0rGRc3Do2v`A1GZFznht&&pAiJ z19P2vDy)OA1~0VUpO@F)-i?W>v(M!p?~s#-@lHy!9I5kU6u`;C25RhEGd-46ELR!w zeF{f<)raWd7mp<>%{&zqZzbna~=`ky){XIK7(03vrgqBdH>pi`!396 zmz7F>W*0iIcY6PeU~hYFeC{qTBYyOEo$I+Ji?3)Vyfq>Cov$Qp5k*(Ul~XNz#h66+zhP}l_ueNzk9xc{4N$==BK%BmmkFBXKu72 zncfc~Bg{XlTD3N+#nP-hG!J}}eFDkO-6TgDxs$D(QMFlnr9VHA^~6_>(~CF)r{w$y z^N~Ce``VT#391*rxcmZCcq}8naDKovTH|d3PgIa&-_P%MpjPKX{mae)S_TIh#X8%nf?ZDQ+36_Y1k#kpay-yDB zE<=&$cLzJta}}shC??4L-q~1xSFd9q-^2h3;}5E~#!=Z!cKRty6Im#Fd0{r16oqUT z*D777JbYN?6F;AZdU8PF<%12e@D(;Dx4;$^EVm$HJK|g#P<&gN*X0pRTpWaRb$tT)zdu4q%q} zwZBeN>y?&=3Sxa*@qYF9K(jc72ipD^DrvusA>oYA*pjR=*4m$k?Yal}bHZv{5L)BN zv-Z)-=_gzMK$t2JWD-F5P4OO9uYRs{EhtB=Y`L=#4sX^BSMhdJiDQ;oeXWTR-hv5W z3T`IIf<20MNPR-Ekk<9F^NInVScdp_o)HP;3rcAc6mMqwF~00mmH#C_$2#;+#}Mek zBN?=vovUq1&9OGHQ+pfMIhLQ4?Y*Y`u=BTVABnE)1goH50K;?3n|pa6cy2p&u7@O2 z5fQ1&Sfq*DHRKr|`IL}^h9WSlZO{<7G7l9Hn0kNuc_Q*Ijv&|B*#oyux;Dyk=Z z74Ir?;dbmqLvtwA#vXt+#lehlKE4{y2V@aNa!IYTfaz{tCspji8>HbsauvoH7 zqvyAV4Cy!(X&XcTT#HOlEV*FRRMb!4%^Qko^jMGUcWXsUeyLuGcd*vY-zRzmX?H9;-KlwJgl?35E-JgQUZA%Ld${sk5%NQ+ec*yZ=#%idyH zI5?1Fd&URCAObwiU&?QnkeM<>>rR}hNydxA-AjjOu1_M1_VGeq2CxX4bOz2jwFr>h zTF_-ikBm{R$m6E7M6~gmzW|>vdo+5AExWGf*pwPyd67huuF9mT@-@vYA0sM{*+HnC zo?zS%>McCm&sYpzU+$naQ^Q1>;ohCZ_GqOuF!OrnkIoM-Bjg;5!_||tXk%joG@#Tg z20rD`z_h0GA$S|~@(t<7V8MFx0LTpS?VVj$2Xo+^t==Sd5q-2gu)rcG0yDiIJB*?J z{P{spzE#ed{Bbe;8O!o#W3BRAA>G3q`6leL>q$TxpJrRg*V6!n!tkzwwb+t<293NF z{QNRqgKwNvgrPwz_n3s~kXJ#a$byS1IPI_OFoN4eo_16Gq`a5fUazEP*hWu5Wjsb! z5u(;N<}~&MNWBeatGOkP>9qdA%71EF@aE+4Nh(`4x+E2v+ znV_OR^ZAj%Gn*KBcUzIbJ(tidk?vA0eA`#H((W-JKLkElTG(PAz7~N(K|ZE>l2fu1D@ohx9IF75wdd`3`<)5BYwmc*|>vAtjgp<7}bPv-M5<%hqrv>lT+s zz|VwVfJ$uVQHaRAJiHT8B6NFG5&&WKAwS4S*pjWqcBgQ;2!Gplk7 z`EdPm$GVU9|Ai65bbluWVpjn{G?h?wE!dEX^4iA^{h_3o_}sT^ zIfK_BF#awUAV&KM$#GPuQfZL`2>GI_DC#g~z=AIly75&2LAStMe`(iD@1g2!P(o1} z-bH~ul0dM2+|z$vz99>eiYukC*15LD)X&E%hk>R&KFwc$oH>%XHYbRG-I^#-ZT8;S zN|duzRAv|pZzAGbexiPqu|2kP%{M1>U=oCV*$7nccspU>3DH(j?O2J={%JRGKBo5W9f_Wtn;kiTWCJ4Tk+Nc8?ebAu(EyKEEfQqRjxLR_p59TUBw zmDm&c(%z7b|_sRb#EUF3Q9aDZI`xe(i-p_XPI7#!7 z`r0t>RpeCOX$!tx^zEu-BW+a029G%tXw@< zm{5NhD~@fRI*ze1ItVmTYCFH*jT<>M0MOHlXUd(bhy{qChtSBfc4s}>hs9&ic+b6B zzdN=j7&|8?Lz6b|?W;y+Ss!;CGv?`u@4|(KF>7CF%&L%E9crk>Hq8uMr!IUk$soal z7c_c*)XCwqK;&UMVbswUwyU`~nm2TqIC|)W?U^6a5=(%0NnD(i*1xIM5_kCW=Yvxa zr0i439t9D`8vE%g-$u2s^4%mp;$WuxA{|GMe)DtHSaajXL52YU_R7C3U!gxA z_w2-1hJbWg6Yp8>`AyIpCPu?DeVf$9eJt}tm1aW)%#?R>eMRhrS|KvM(R#o$#p{KP z{-lxg9XX2_Ly^Vq7XIUe-SMW@tW5n$P1@LjvTWO6zEGs;iTZaHo-U2(9v3?J4BwP( zX?BBOO|VcX>GAC2j0pTMKpamrd?fem>`j1@Lc$u7aqNC0W9&QC{VE`%1TE=18+$dPO@e6k;Q@RIx;E zh<7s0Pkgz%|4qC6pt(w%Un`s-`dtwwDSrJKQpGU*So7LMtDm{y0&p#y>E%RC8YC;W*;l`N&1+{iT717*jcAd9Ub~ zOH#aC5@d5`Rp(V;z}TpEv7Es%y-5X9ALftWVUQinCuF!~6=z;-DJ^yS2*$O=-Pj#a zAvZqP$)n*K9Oo-!S)ZRB?DfKOyP}jYEfMQg|EC*HIlpNZ-+Cm}ZvJc|Un@hH04(vi z;HOilHA2t(1z-^X92WXT{4ap`CHMY?ORs&EHT5PxBnfIDKombA^xEJ8ZW`wg3keH| z?=s2xZn+Fv(#5d|OL4OPKR$J;`dhwfY@+S86`XMd^qm+MKG0wD9y1yli zNWq1I0kUC`6lYR!3Vup#?f!F;m_O<;AMR7kHUO$gysL=N{nFm)dn{Yy>3E+}Y}bBv z6B{FfZXX|col};Rkej<{GbwWd%0f{|MIMSQ*;i*awQo)Wx8?Giq- zm_&B}Zi@c;dz-lTg>s4BTd_H|$Td`rFl+6zW$Ff6E zO>w~9bJSv0tHsT8E6G%Mq4e-Ip!UDgX34r=$EOi&3*eC_nO6mA`f|{B$W=+8N_~`G zJZJxJ`iw?fO6gurJF*Zcp~+E(wGRjx&Wrf3`V_D{3`B@Aus1eO3q1vX6BkS~>l`p9 zAO*r)sxZ-&#I$6XXBgh6mbh=*Sp2{n#F=B$lAIEBQ*Ju$I9Io2C>h1(+5#Fu6zu^gUOfCHrpLF;wAP zN5C)((^nvID0W%%E6B20i@G1m-dGK)Gx3 zZ2o%F5tS`P3E6IuFgP>Yb$1sV6%w6-P%Z4v4dN)I+7!_IWZ3!W>zO@Lu5=V7z767L ztkBh6`mz24xt%n0YEqt*S7ku7$Eil@jJEw48yQr^GK0hW)dmH#_A1;w$6>c2a64;o zxK^N8rAlE|&v@2hGqeQd!s83Cw+6kH*jJk%sYBa^P91n@D@a-S3l@#Ne^)<#)3C(D46?Cb3y zILacudV4q~Kd^OZC}S6v?4bQ-nkVRyDc{Jf4NDp7PG?mU(@tJhX+!37=zu zat^9R6}5eVIPpsrWb(|1nwC2*9P1Ounr{H$x&Ou(vTgnA54>Z?P6XbNXoBXl${8wVYYbrBeh}&V4l*$sDumM(Dj?e1;vj*m$Uvj98-xF30Bt z#9Xb-`jk8$T+{Zzjj5=V7+%ndvQIV?FvszX$!@d<&@O%>aN)h(Wg-rw{UPe20w*^J z=?&=Whzgx_(qL7tR=yzwt!=cy7NwYOx`eGmUwBFG~TQsNma6^kPBw7wUo7Z^Pd{6ydLUn<(xgXO8m z07@hX)7QJh%||-M2wciAB0auLM|k+o=!@>Og)l^Ujgp~)2Rlz1bm6Nf{C{dP!bW5s zUbgrunTDh?C>dJ|gxuQ!x!Etms zeKE*Qk+8cXf_5Wo1U&GsnTXS}e-Ja|H&~@ONP;3KnKk7pByo?r=JSl1T=di?{UfYe z71T}hI>=k`a=*jiEq@N4Oe9r3J7X$Y=VM1^ey-w6QtE@MpGw{4y%{VZQI@d^r1lh< zTzH~39ZP1L#HmbpYMHjv;7zAFmnCqSq)>JM=++-HVSODjEMoJKMx(Tqk_>ZxKSt{w zP|x($+45%5C;88#zb|XR+Q1p>D~r zeL#a!q_u~~O`7NgC2lwYD?xzw>a+3`4I@d2;x0PlYS!N#NzV+W>5oU0-N!}M|Cn6jfV{<*7vZ^*Hjhszo?ZF zH&oZ$L_FlORsu7Rw2rkBfp=)MVC2d~2xg}6v3J_uXl<)61sqD+C6_oBqb?uI9>IB) zI`|rc9KftGyXoKVAf5&F*!06r(_+16`vUG|Tni3@>6|^_VD?g`#m&9Xa>b-&ju>oD z{lzQgk-klYhdXhFu_@sC+GW@l#793yRCv1J?f0%GZ{*7Q<5~EFGj}iTeEGpvo5x^eS>8tn*m3Ffw z?RzRXzBmvxv}))&am(P4W8e03A-y5Vf3Wf1yQavjT1WjokD9Akb4Efh zPf0M?Wd49*XQ9~&N=|5y+avNBZq#vh&Dw(xy#W}=#J|u2T#K&zNX?paU5~Bu!Fu@S z4`T(WBro5j**d!dws!gKb-E(lqHsvzXPeS!KQY7W@@Lo5d66Gaw4}!2nD;5%+7*4q zvwR0^^$z3^Z7jX8GJH(Tv3QLga^jQ54);*E=m|vE&Na`R+3X&PcHSBp%c(a>lk&XG zr786!wY(}z%shG2t-`>5PjCVoi^=-L_79~fiLo_i+(@dT)u3A3CP%lS9liM@U%t&K z?oaKH(;?nOz)=%mNj)g?!61K}lukfX5aj#Y75hGYFL~^^<7G{AH&SPzrXRkt%vU@$ z?G7op>Q>T8KpBVOK~VoPDZ z+G3Z01{BXN(Gyd!(oXWUjo(-f>vp~^nO-amT&KJSm%#K)F>uH19K8;i($Y0gq?X79 z@{4=pM0p%CKu6)m_hWT~?hgjCCpY>VUH57bA>96zyL*UdHk;&QLWht_XF+l;NYwMy zofnR4snZVuRH4ds+#hnpm5w$=1=n(S;%NNFNDDGfzv5YBY{I^oe~8y5pwfmyJ}HjQ z?=N;H`@c()zN*XBVf-M41b(dzgfjb%^DjVYlPpy79C`f1+3iukU^NeJO9R!BiafsM zo5fY1qbq13)Pp&tP{QtfyhURN%fg)y8c! z`FJS$W>S*_VRc>t*?L_McWQ>y`+wVJaTdqFH%V{O*gDr`Y4+qqfk*8~-j~vR>ewcP zq`Da!wvN(+pKU%s4^WI)z#zioV|vWksW81D?cn?7FTmo(Wo9sk`3Yoz>8_nSsZ#0o`Dl2g$GiPnWxdvnAFvegQb9b+!_?@fhU9nIxka z`U`L`N&R7bOxF28$e0Yb9Z1tGt9^N<>K9-GZ2SvwpMa=zLRiFkknK(p8-CmD++NNT z-hGAq2bAQ(P-d$|jE^<)NXE^hQZ5PY1A_>z9dexK>oJ9Ls7?8?bf~FSQJps@G>3_P zzx0;SQIcyhdbxUf^(9BedM6yq9r3}h_uC9~N+*^>_09bP-1S{9*a3(-ek;KL?3q3@ i`^k~rZOol^+jBnl-P~!;L-g7dntz&?|Fq=S{Qm)Cb_Epx literal 0 HcmV?d00001 diff --git a/public/assets/images/1748108069.jpg b/public/assets/images/1748108069.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2b693bae26a7d0f37ac61cad74685d5efc8fb703 GIT binary patch literal 26023 zcmb5VWmMZw@Gl&s6k43(Rvd~uMO$0~ltL+1EP>$e+Tu=uB0-B3m*O5up;(aO?(PyS z=uLnBd++nSc-}m_=X|p#tFtrvnb|qBk28-e076wo6-59V8X7