From f4140503e43a95ac330e829ef0e2d2766af00ef4 Mon Sep 17 00:00:00 2001 From: FandyHanz Date: Wed, 11 Dec 2024 08:18:44 +0700 Subject: [PATCH 01/67] DELETE: features of pelanggaran --- Tata_Tertib/models/Dosen.php | 0 Tata_Tertib/models/Hukuman.php | 0 Tata_Tertib/models/Pelanggaran.php | 0 Tata_Tertib/models/StatusPelanggaran.php | 0 Tata_Tertib/pbl_tatibsi (3).sql | 405 +++++++++++++++++++++++ 5 files changed, 405 insertions(+) delete mode 100644 Tata_Tertib/models/Dosen.php delete mode 100644 Tata_Tertib/models/Hukuman.php delete mode 100644 Tata_Tertib/models/Pelanggaran.php delete mode 100644 Tata_Tertib/models/StatusPelanggaran.php create mode 100644 Tata_Tertib/pbl_tatibsi (3).sql diff --git a/Tata_Tertib/models/Dosen.php b/Tata_Tertib/models/Dosen.php deleted file mode 100644 index e69de29..0000000 diff --git a/Tata_Tertib/models/Hukuman.php b/Tata_Tertib/models/Hukuman.php deleted file mode 100644 index e69de29..0000000 diff --git a/Tata_Tertib/models/Pelanggaran.php b/Tata_Tertib/models/Pelanggaran.php deleted file mode 100644 index e69de29..0000000 diff --git a/Tata_Tertib/models/StatusPelanggaran.php b/Tata_Tertib/models/StatusPelanggaran.php deleted file mode 100644 index e69de29..0000000 diff --git a/Tata_Tertib/pbl_tatibsi (3).sql b/Tata_Tertib/pbl_tatibsi (3).sql new file mode 100644 index 0000000..6f9060a --- /dev/null +++ b/Tata_Tertib/pbl_tatibsi (3).sql @@ -0,0 +1,405 @@ +-- phpMyAdmin SQL Dump +-- version 5.2.1 +-- https://www.phpmyadmin.net/ +-- +-- Host: 127.0.0.1 +-- Generation Time: Dec 11, 2024 at 02:16 AM +-- Server version: 10.4.32-MariaDB +-- PHP Version: 8.2.12 + +SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO"; +START TRANSACTION; +SET time_zone = "+00:00"; + + +/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; +/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; +/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; +/*!40101 SET NAMES utf8mb4 */; + +-- +-- Database: `pbl_tatibsi` +-- + +-- -------------------------------------------------------- + +-- +-- Table structure for table `admin` +-- + +CREATE TABLE `admin` ( + `nip` varchar(50) NOT NULL, + `nama` varchar(50) NOT NULL, + `password` varchar(50) NOT NULL, + `status` varchar(50) NOT NULL, + `role` int(11) NOT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; + +-- +-- Dumping data for table `admin` +-- + +INSERT INTO `admin` (`nip`, `nama`, `password`, `status`, `role`) VALUES +('123', 'admin123', 'admin123', 'admin123', 1); + +-- -------------------------------------------------------- + +-- +-- Table structure for table `dosen` +-- + +CREATE TABLE `dosen` ( + `nip` varchar(50) NOT NULL, + `password` varchar(50) NOT NULL, + `nama` varchar(50) NOT NULL, + `status` varchar(50) NOT NULL, + `no_telp` varchar(50) NOT NULL, + `email` varchar(50) NOT NULL, + `role` int(11) NOT NULL, + `foto_profile` blob NOT NULL, + `id_kelas` int(11) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `karyawan` +-- + +CREATE TABLE `karyawan` ( + `nip` varchar(50) NOT NULL, + `password` varchar(50) NOT NULL, + `nama` varchar(50) NOT NULL, + `status` varchar(50) NOT NULL, + `no_telp` varchar(50) NOT NULL, + `email` varchar(50) NOT NULL, + `role` int(11) NOT NULL, + `foto_profile` blob NOT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `kelas` +-- + +CREATE TABLE `kelas` ( + `id_kelas` int(11) NOT NULL, + `nama` varchar(50) NOT NULL, + `id_prodi` int(11) NOT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; + +-- +-- Dumping data for table `kelas` +-- + +INSERT INTO `kelas` (`id_kelas`, `nama`, `id_prodi`) VALUES +(2, 'TI-2B', 2); + +-- -------------------------------------------------------- + +-- +-- Table structure for table `mahasiswa` +-- + +CREATE TABLE `mahasiswa` ( + `nim` varchar(50) NOT NULL, + `password` varchar(50) NOT NULL, + `id_kelas` int(50) NOT NULL, + `status` varchar(50) NOT NULL, + `nama` varchar(50) NOT NULL, + `no_telp` varchar(50) NOT NULL, + `email` varchar(50) NOT NULL, + `alamat` varchar(50) NOT NULL, + `nama_ayah` varchar(50) NOT NULL, + `no_telp_ayah` varchar(50) NOT NULL, + `nama_ibu` varchar(50) NOT NULL, + `no_telp_ibu` varchar(50) NOT NULL, + `role` int(11) NOT NULL, + `foto_profile` longblob NOT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; + +-- +-- Dumping data for table `mahasiswa` +-- + +INSERT INTO `mahasiswa` (`nim`, `password`, `id_kelas`, `status`, `nama`, `no_telp`, `email`, `alamat`, `nama_ayah`, `no_telp_ayah`, `nama_ibu`, `no_telp_ibu`, `role`, `foto_profile`) VALUES +('2341720165', 'mhs123', 2, 'aktif', 'Fandy Hanzura', '3456789', 'saya28@gmail.com', 'jalan taman berbatu', 'sutomo', '567890', 'katiyem', '234567', 3, 0xffd8ffe000104a46494600010101006000600000ffdb0043000402030303020403030304040404050906050505050b080806090d0b0d0d0d0b0c0c0e1014110e0f130f0c0c1218121315161717170e11191b19161a14161716ffdb0043010404040505050a06060a160f0c0f1616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616ffc0001108010e01e003012200021101031101ffc4001f0000010501010101010100000000000000000102030405060708090a0bffc400b5100002010303020403050504040000017d01020300041105122131410613516107227114328191a1082342b1c11552d1f02433627282090a161718191a25262728292a3435363738393a434445464748494a535455565758595a636465666768696a737475767778797a838485868788898a92939495969798999aa2a3a4a5a6a7a8a9aab2b3b4b5b6b7b8b9bac2c3c4c5c6c7c8c9cad2d3d4d5d6d7d8d9dae1e2e3e4e5e6e7e8e9eaf1f2f3f4f5f6f7f8f9faffc4001f0100030101010101010101010000000000000102030405060708090a0bffc400b51100020102040403040705040400010277000102031104052131061241510761711322328108144291a1b1c109233352f0156272d10a162434e125f11718191a262728292a35363738393a434445464748494a535455565758595a636465666768696a737475767778797a82838485868788898a92939495969798999aa2a3a4a5a6a7a8a9aab2b3b4b5b6b7b8b9bac2c3c4c5c6c7c8c9cad2d3d4d5d6d7d8d9dae2e3e4e5e6e7e8e9eaf2f3f4f5f6f7f8f9faffda000c03010002110311003f00faaeeafda65030b820761e951a5bc722ef2aa0ff00ba2b3373a90467a0fe55a1a6dc2b300e78f4ae534126b552a48dbff7c8aa796b76fde80befb45746628255e3b550d42249e378540c8e3deae367b932bf40d2f50b511e77c67f0152cfabda4786f363009c678af3ff001468725b09ae2da7950e32d187c035c2c93dc728669319e9b8d7a787cba3595d4cf36be612a2ece07bf4d7b1150ccc8548eb815e63f15ac2d977de4062cbb6780335cbc3aceab146234be9b68e80b66aadccf35c36e9a5773fed1aeec2e5d3a3514b98e3c46610ad4f97948e1b1b896132c68a5475e05562a4761f90ab71bc88bb55d803d81a9ae1ad0daaa450912ff1393d6bd4e692679b68b466edf61f951b7d87e556560dd196dc06ded9a88a569cd722c45b7d87fdf229f0c8d1b74047d29db7de9361a035342d264239c0fc0568daf96dc8db9fa0ae7e32c8dc1ab305c15208241ae7a94afb1bc2a773a9b648d970e067d7144d688578dbf90acab5d41380f953eb57a3bb0390f915c72a734cec8ce2d115d59320254023e82a8496bfecfe82b6e3ba47e1b1cd39a2493a0fa1a1549477138465b1cccd6cdfdd047d2aadc427d07d08ae9ae202bdb22a95c5ba1ed5bc6b18ca91ce342de9fa54662907f08fc856e4969e9556484ab6315d31ad730953b19f1c4c5be6007e02a65840e817f215656225ba523427b66873bf505120d8474c0fc2a58e465e0a8fca9bb1d07033f5a72371f32d2b5c13b130915b82a3f214c96356e001f90a55da7b5392262d95a8d8bdcafe481d97f2a8e451bbeeaffdf22aff00d9dfb8a49201fc42853b75172b32d90f5007e546d7db9fe9579e053d0d47e5f3815aa9b64f2d8abf2a8c1504fd29873e83f2ab8ca14722a3655ea2a936495f3ec3f2a5e7d17f2a9c206eb4d68c0ed4f998588bf2fca8c1f41f90a936fb53826695d8588c293d147e55b5e05bd9ad35f8504fe5472b6d7e38a3c18b8d723fdd249fecb735ebfa0f8434a78d6eeeeca3566f9b0474af3b1d8c8d24e125b9dd83c2cea3538bd8bfa1e91688cb75bccb29e4331ce3e95b0d24312e64287fe022a979769a7c652d8b63b02738acabcb890c9c935f3129b93dcfa38c525b1d0ade452fcb85c7fba2a55116c3b82007fd915cc5bde88b93d689f539243cbfe151763d0e8cbd9a2edf2e2c7a6d14e87cb75c42aaabeca2b951767396635623d5dd22d88b8f7a2ec0e9d153b95fc40a4ba94c30120023d428ae76c6e669a604b9fceba1b56df184ebc5080f2bf8a7abc706a0cb042774e9b59f66306bcf3273938fcabddfc71e188758b1689d30c3e64651c835e45ac787b54b4b978fec570c919c07d9c115f499762293a7cbb33c1cc28d5e7e6dd18f93edf951cfb7e5524b0c91c852452ac3a83491c6eedb514b37a019af4ee8f2ec273e83f214a3e83f214f9209a33892275faa9152db59dd4ed886de47e33c29a4e692dcae57b58839f6fca9467d07e556bfb3ee92332342ca17ae78c545b4d4735f660d35d06007d07e42add9b0c6081d0f6aaf8a7c2086cfb1a4f5089ebb77a8e951465649e352a06727a714cb796d5d83c3323a9eea6bcae52ecd9662c481924fb54b61732db49812384ee15abca96551b692d4f5239b36f58e87a178c35db8d26d15ac4ab367927a573d63e29d485e7dbef222616186f2bfad524bfb29adfc8ba2eca4fde3d4554d55eda2cc3673bb44c3907d6ae8e16118f238ebdc9ad8b9ca5cf1969d89fc57af35fc85619d9a361d31822b9b68ead32e171b473de9bb2bd2a54e34e368ec79b5ab4aa4af2dcadb0fa5214f6ab2529bb4d697322b15a4da6acedf6a36fb53b815b068c54e50526cf7a77020db49b4558d949e59a3980afb68518ed53143e94850d3e618b1907ad5ab7c8e03553da6954b2f426a251b94a56359036dc8a9e17978018f1ef5976f78f1f519ab31ea1175208ae7953976378d48f734da6238916abdc3c7d54542b7d038c6fe4fad3662197e5350a167a9aba9a68c74654b547322f522aac8eeadd714e8e4cafccd5a723dcc7da27a162ce046dd814e7b71ce07e94eb49044db81041abf14b0b8ea2b3939266b149a3224b427b544d6593d2ba15581b838cd4cb6d16dc802a7dbb457b14ce5fec4d9c0a92dece40dd6ba06b65ddd29c208ff001a6ebb12a3a986d6ee3a9cd376367052b6e5b452d9dd511b4c77a4aaa29d3315a053daa096dbe6f94d6ecd6ebb7a551b88476e0d690a86728196d6ec39a89a2eddeb47cbf5a468548e95b2a8cc5c4cc68f6d37157648c8e31503467d2b58cae66d10e3daa4b7d8a4ef4dd914edb46da1ea0b43b6f8390d92df34b76abe6758723afe35e9b79745a3c2b6057877877579f4abc59900751fc27fa57a8787b5eb2d4ed62324eab2c9fc1debe7b33c3d4f69ed3747bd96e229fb3e4ea6949731a7def98d54b9b9f3380b815a5776902479dd96c5664d01cf15e41ea159bde99dea7f2d07de6cd23c4319514088e9573d969c889fc46ad47242ab855a0636ce42ac37b6d15acbac450a858be6f7ac0b870cfc0a8f2dd85007596fad2372e47d2ad47796972bb1d1483d4115c48761dea58ae644e8c68037756f0a7862eef12f67b55f314e78380df515359e9be1eb39bceb7b2855c8c6428ac07bd99fab9a417127a9abf6951ab393b10a9c13ba8ea75525968d7dc4d690bf1dd4510db6976cbe4c70461578000ae76de6b86385722b52d3cb8a2335cbe147249ed4b9a5b5cbb477b15bc61e1db7beb1692d12359369e08e0d793eb1a4ddd8e1ee1142938054d76de24f1b4715c4b059bf9c83e5c81fd6b88d42f67bc6ccae4ae490335eee029d78af7b63c3c754a137eeee51db4e453bbf0352aae1ba55cb6b759b903b1fe55e8ca56dcf3546e5665e7f01fca9a56ad3c64b74ec3f9547e5fb555cc6c57db46dab1e59fa5376d170b106ca5485df3b149da326a6db5e7ffb444f7769e11b09ece692171a9282f192303639fe82a2ad4708397634a34fda5450ee76ec8475149b6aa7c3fbcbbbaf86fa325e4df6897ecfb9e761f349963c9fc3153788351b5d1f497bd9e3790e4471431f2f3cac7091a0eecc78fccf414e152f05268274f966e09dc9368f4a42a2b91f175ef893c31a0b7896ff0059b695d194368cb6a3cb9d98e0410c83e7329ce0372091d00abdf0a75dbcf11786e4bad41addaea39c87fb3fdc50ca1c28c8072bb8a9c8ce54e79a1555cdcad5983a2d47993ba378a526cab3b2a9ebda9695a1e9c6ff005bd4ecf4db51ff002deee75894fd33d7e8326adcd455dbd088c5b7644d6b02cf791db1bab5b7694e15ae675893fefa6ad4d63c2dabe9ba70d4245b6b9b3c806e2cee5278d49e9b8a9e3f1af09f1a7c7ff86169a8c0f169577e2b6b262f147f6558edbcccf5df2f2463d10d6078cbf6b4f14eb170e7c35f0c7c0de1d3202ab2a69fe74cc0f62c4a293f55eb5e356cdb92b5a36713d4a597a952bceea47beede71deaddae8dabdd2eeb6d2af665fef25b391f9e2be60f875e2af8e5f13752b986cfc7bfd9f6b6ca1ee574f45b331027010ac481b27079ce062b98d796fbc47f18acfc1d73f10b5382c5d4437daa6a5ad4f7502dca83e60462c1769600286e84e09ad279a4ad78d3d3cda261972bb529ebe87d9a9e16d7dce0695329ffa68ca9ffa1115ad63f0c7c697881e1d21769eed7517f46af8a7e3b780b42f87fa65a5ce85e35b3bfb89243e7d9fdf9655c677643b018231c8e7775e2b8df0afc45f15e83731df687a86a5a6cd090c934374d0852391ce403f4aca59a558bb34bf3fd4de197516af77fd7c8fafbc37af5bea7e2ad47464bed3a79a19fc9b68edef623960fb4824b72d90781d2bb7d5bc1be28d34137ba05f22af57584c8bf9ae457c3bf07e3d0edfc7567aef8bae35c874959fed52c3a548be64d287de012e30149073819c7435f71c7fb6a7c261771a4d6de208a59a4c3886d15c440f563f30240f6c9ae4c262f17879cfdacdcd49dd5d5ade49f6f23ab1384c2d651508f234ada75f37e661b47862a7865ea0f047e14f8cc8a786e2bda34bf1cfc28f1e5ba98f58d07523228216e0ac730cfb9c303f8d45adfc28d06f6233e8b7f7162cdca863e7c27f1fbc3f335ea52cd68cf4969f89e6d4cb2ac7583b9e39216714cc11fc35d6f893e1ef89f480d21b217b6ebcf9d667cc007a95fbc3f2ae63690c54f041c107a8aefa75213578bba38274e707692b0c86468f8c707b539a4955b28c71e94bb6957729abd04a4cb305d48132d9a957569231c0cd56f3015c32fe351ed04edc75acf922f7469ed24b6668c7aaf98dc8c1ab31ddab72dc1aca86dc6ecf5ad1162fe482076ed594e1046b094d937da941ebc7d69c2fe256c13bbe959b3c6e3e5c7e749641449893ef76a5ece361fb495ec6da79532ee1d0d4571605b94aa8accad98cfe15720bd93ee94c7bd64e325b1b2945ee67dd58bc7c91555a26ddc56e3ccf27cb2464e7b8a7ae941be6cf5e82ad55e55a90e9733f74e7fca3dc52340adc915b973a53a8e1eaa3584c33cd52aa9f521d26ba18f35b2f5150347838ad86b67c7cc2a16b7dcd8c0cd6d1a9e66328333427b56e7826df535d6166b1b6f30c6406ddd0035a9e13f08cbaacde679882dd4e188ebf4aeaa6f0ade69f0b1d166db2337cc5ce723e95c789c6d3d69df53b30d83a8ed51ad0d5d425630c6ac17785f988f5aa9b1c8e4d64af83fc457d2f9b7fa9ecfee84622ac6b1a6f8974cb3530ce9751c38e76fccc3d2bc5787836929ab9ecaad3b36e0ec596501b819a91412002368abba55b35dda2cf245e5b1eab5663821218146dcbea2b9a5168e84d3334c5115c2a9cd446d9cf5056b72086053b9828a92692d06360cb548ce796ce566c053537f63dc95c9e3daafdf5f7d9977cbb628ffbc78aaf1ea88e772dca6d3df70aae5935b0b997729b697386c629dfd9a517748eabed4dbaf1469692889ef54b67076f6fc69875dd10abc9f69dea9d79ad3eaf57f9599fb7a5fcc863428ad856cd083e6c6dae73c41e287926d9a6af9680fdf23935457c4baaaae04899c609db5d71cb6b357392598d14edb9e836325adbe1a6c0f76347887c45a12d84b65712a36f4236a8ce6bcbee2eaeee9899a776c9e72dc7e55188ceef9b26ba69e5b18bbca473d4cce4d5a311974b11ba90c0088f71da0fa533153b47cf4a4298ed5eaa968792f723c558b2b8689b1d5706a2d94f8d79fc0ff2a4ecf705a1717e59559ba003f95741e1cb1d22e312493aef27ee1ac374e7a761fca9bb08e47e95955a7ceac9d8d28d5f66eed5ced354f0be93716fe75bb61bb956e2b87f1e0b1f0bf85eeb579a47ba6b775410424024b1c0c93d07a9ab314f7512148e79155ba80d5c67c72985b7c3db899d6471e7c5b8a2eec0ddd4fa0f735cf1a752945b7534474ceb51ab256a7ab3374ff1b5d5e36574e8235278cbb31fe954fc67e14ff84e754b2b8b8d524b45b588aadba0062725b3bb04fdeed5e796fe3cb2d3b01ac5dba0cf9a067f0c1ae9f44f8b567a7c71bbf87afe58e5c1df0bab30c7f09057839fe95c55316ea2694ae8eaa3469c1a925a9e8be0cf07f88741f0dbe9d69ab58ead1dbaeeb36bb5920651c7eef2bbb2a39c102b3754d2bc49a7c32788b56b48f55d62dd08b0d3ecf3f67b1ddc3152dcbb91d5c8071c0001394d07e3cf803e587504d72c0f52b2daab8cff00c05f38fc2b661f88de07d61556cfc4f65e64a72c93e6124fd2403b63bd44319522946fa2349e1a8c9b76d59e49737fe20d5b56b7bcd555ad2face7dda75ccd132c36f3e380636041071d8641e7359be1dd7b57f0dcd7fa9e95f648a7d52e165974b9fe58a7930c5ca92c0ab703eee7a92400335dcfc63959a4d225b7124acd7d1946b620b3f5fba41ea7d735e5f2789eead6ed6ef4cbab88ae92f9fcb72c04c158b0605ba67079f5aa7564dc657b151a31e571b23d9741f1ae9bae7c33bcf15db4cb669676d335c89be6fb2488849ddea0707dc57c9bf15edf50b9b2d1ef358d7db5bd63c43a77f6981e6991ad1327099ce002a4f000c15c62bd87e0b78efc3963af78e2dbc6779676ba7ea1344caad6b8827cc5b245f2d41196ee00c1e7a74af3cf0beadf04fc39aaeb16ba868fae5c58dcea8eda5bda3f30db8c05dc5d831cf27a0c74e6af177af4e32babebbbb7cce7a10f63392517fd74f91e6fa6a00ab1deb0d3d8705a789803ee0e315b4ba6e831db79f79ad43247fec4aa14fe039aea2f6eb4bf1478cf51d2fc12459e8f68e42deddb34b34c80e372c6c0019cf1bb38c73e954358f07e95a5df4736d6bc9ae33992e36e781ec303f015e1cb0d3bbe67f71ddce9a30e0d6346b7918e8f6ba8dcc850c6d25b174debfdd2d9191f5a6d8cd2ba98a1f0946b1ff0a9b81fa8c1ae9b49d367bcbe86c74db2b796697ee45236dc11d8b310a2af6ada578934984bea3e1bbe8235eb22c45a2ffbec7cbfad0e8b51f85b5e6d8b9d5ed73948ec35c9bfd5e9fa4d8a9fef6e76fd3154f56d02e6ce4b6d4efb528ee163b84578d61d88aa7be49f5c7e75d343a85bc8858b84c750d54fc4573697ba05dda072cd2c2761c7191c8fd452a578cd5a23bb21f0fd90d56796eb517786c132b104719958752cc3a0e9800f7a35dd1ace0b19ee6cdf54558a3123ec8c08480c06d2dc6dea39c1cd54f85179e5c6a37ed6b5b859148ecac39ffd047e75ea7f148ba7c33d54a9cabc68198e4ee0644f5fc2bd48b4f57b8f63cffc1ed15f5f4eef0b47f26f063999594e47420d779e16f167c5cf0962fbc2fe28b86b4ce52237df301e8caf853f9d703f0f7fe3e27ffae3fd457ab693a7c6745b49966f26468064838cfd7d6a6a423277681bb23b9f03fed99e32d1248e1f1cf8723bc8c6333ac660931ebb87ca6bd3dff692fd9f3c57676d2f8926b9d327b97d8667b276680e33b9e5881c2f6c915f38c964b1c84a35ba96fbed18d85febb783f8835cff00c48f08590f09aeb7a5c11c178b728aaf6f1ec772738185c2939f6ce6a69c25195e2dafebeffc44e4a4ad2575e67d9d1f86fc2f7966babe83e30d1f55b379bfd1ad8ea30abdec45558796fbb058e4f071d3b5721e59efd6be50f067c36f89be34f1368f7a92cda7e896c8a62d467752b1203fbd8d13aef2e1b823af24e2beb858b7305404f619eb5ee60ea5669baafd0f17194e8c5a54f7ea5758896c0a5f2cab74e95a379a65e59a869e128319cd5756038da1beb5d6aa296a8e474dc5d9e8c8d4b1e94f5b9b85f95588fc6a5f310c991080b8e42d6ce9da3d86a3756f1437055a45cbfb5673a9182bc9686d4e9ca6ed17a9cec8d70e4939f7a7c0a587279af44ff842a286de458e732e57b8e6b8fd6348bbb0b86927b568a3ddf29ed58d2c5d2a8da8b35ab84ab492948a56e4c52fcc335ab69716ec7f78a16b25a5238d8bec694caecbfc3f4ad650e6338d4e5371a7b4e8afcd4b2497021cc7b59477ae715cefebb715345a85cc6a555f23dc566e8be86ab10ba9af0b4d32b6eea3b0ed56acd5641b0fccdf4ac5b5d66ea1f3080a59d700e3a54da3dddd3cd9f9bcc66c973d2b3953924cd215a0da48eaec3c2ff6d6266ca46076ea4d6adaf833478577188c8c075269da6df1834b59eeaea31f2f4e95141e26b35704ce4e7b62bc9954c449be5bdbc8f5a30a092e64afe650b85bdd22ec2691a7b8889fde03d1aacdaf892e61b851a84061dc7a11d3df35a8be20b275de1c63d3159dafea36b7f6e6158fa8fbdb791446f3769c3e62768eb09fc8dc86ed265df1b86cf7069cf74c17aaedaf3f116a112f976f2c88bd806a6c7fdb2b118bcf9369f7aafa92e9217d71f58b3d12de68a4f9475f6acebed4c5a6a06da689c2b0f92423e527d335cf6837bab4332439593d59bad75dbd1e1c4f1ab0239dc3a5612a5eca5696a6d1a9ed2375a152c6f12eae9a258feef539ef4dd62f534e84bbc3f779cfb7b564f8bb551a55e42fa72c458fdf5c76ae635dd7752d4f898aa463a2a8ae8a584751a95b439eb62e34d38df52df8e355b3d56d144578432f3b07dd3ed5c886603019b1e99ab324585e951f975ecd1846947956c7895aaba93e67b90e29429a97652ecad798c88b6d284cf6a94254de57008a4e4166430c67774ab1e58a9a18976f4a5d84f18acdcae6aa36441b0506307a0ab1e59f4a9a3832b9a9e6b0d46e67f93cd0b190df81fe55a061c76a8fcb078f63fca9a98381a961a25edd5c0430b22f19623daacbf85b50f318281b57a13deba9d4b57b7b79bcb8a48d99541201f6ac5d63c492cac9f64dc9b7ef67bd79f1c4626a3f75591e84f0f84a51f79dd94edbc297acb995d13dbad66ea9a52dbc9359de5a2dd4122ed915d72aca7a823bd6bcde21b931811ee563f789e7f2ac9b8baba96566799db775cd6f4beb0dbe7d8c2a7d5925ecef73e55f8e13693ff0995c69be0bb09f4d1632b4578b7f1111b37051a1c82769f9bafa0c572569178be26060b8b499fa85f299413f8266bdfbe33e809652eb3e37d72392eb48b2b3465b7b439999c0541b811f2a0272581e95e63a2e7cd50a493918acd622a464ed14acfaabedd75befb97c91925ab7a77fc3e471fa86a3e28da23d5740b3bc09caf93300df82b804d66c9e20b678e22ba21b759a4f2f7cf6c40dc0fcc011f2e47bd7acf8ab46bcd6f47fecbd3612d7d78cb0d98242ed91880ad93c601393ec0d6afed757ff00053e1df84ee3c03a2785c378aa48e0bb8efb0cc2224ffad91dd8eedc15fe4031c8e98aa96320a4955a51979edf968691c3ce516e136bf13cbb5ebc3e14d175077bc4b8b6620dac56d74066621955d3a9030492bdba678ae53e1acb2ebd70e2699a382d94bb4a39c91ffebaa90de6bbaca1f13db58dd5f5969f2883eda53cbb4b47932446840c063cf1d7db15d05aea4d7516a172f1471cb35bc70b88c6158e792318eb8af3a9a52969b23b22b956a73de09860d53c5f15b5ec7f68b7b8d4238a48c92bbd0cd83c8e41c13cd7be5d7ecc9e092b2dbdcbebd78566636f711dfc5132a1c7c8c3660e31d707fa57887c15b77bdf889a2db6f6fdf6b36b1ae4f4cce2bec3fda3bc6ba47c20b3b39fc4266693569658ec0430ef5668c02c5f91818615db46546d6a872e2635db4e99f37df7c36b3f0178cb549f4fba98c316a7158bdbcadbf11cd6be744fbf033f32c8a78e703a55bb7f076a7e33d412c3499ed21b9b7065cdcb32ab2f420100f3c8aeebe35595fdc58ea5afccf64d1ea1e1dd2b5f83ec824c6d82f3ca6dc1c02184778b9c7614cfd9f5e01f1734fb6b8198af1248baf43b4b8fd500fc6b92b3a5ed2ebe12a31abc967f11c2f8dbe13f8d3c2de195d592e16ee7927581edf4a59649115813b8b000e3200e077af52f81fe015b5f867a6c9a9dbea5a76ad3248f318aea486440cec543283b73b71c115f454da168bf291fbb03a107ad4b6b0e8b028863815867a91d688e228c1de29b2a585af35694923e7cf127c30d3f5339b83a7deb6304dfe9a9e61f7f3a131be7eb9ae23c49f0074e6b59aead6edac3c989e56d9319e2c2a927e57557038fef1afacef3c35a55c33c90bed67e719e05725f157c3674cf867e22bf175f25be9370fd39cf96401fad6aeb616a2d56a61f56c541e8f43e56f05f86be0be9ff000a5837c43b84d56e6259ae6d4c686549c2822310eddc76918073c824e464d677c40305c7c0bb8d4fed0cd279102c898c90448a1b23f0af32f1d5a9d1fc6565a981886411313f4f9587e4bfad7b07c289e1fec59ad9e3f36486468c06e9b5863fa1ae7e66b63d1a693dfa9e47f0ff005ab01a84b6e2491a5913622242ce4b6471800d7b45b699a9410c1693e9b7a970b1a8f25eddc3e71d36919ae3bc03e29f1b5bf899d6c3c5d7d69630710a58c8b08751f2853b00c118c1cf3c7e35f70fecdfa8dcea7f0a74bd4752bd92e2f66f343cb3365982cacab93dce00ab72e557159bb1c97ece3f0c34c7f0acda8f8cbc331bdf4d719b48ef10ee8e10a39299c0cb67a8cf15e7dfb6069967a3de6a10d8c11dbdac173673ac71a0554184ce00fa1afa93748198c0148ef5f38fedb1017b4d4e565e5ac6ddce3fd9771fd2b2849b9ea54a2924759fb2c69da278abe114d3d95d2490c3adddac33447ef2b1593afb1723f0aecaefc077914ca6d67591707393822bccbf60db43a4fc3bd4f428aede5583565756650a499624ec3a0c835eedab6a17d6774c2c34b8af2d62e0b35e98e672382402853e8323eb5a7d6eb536d465a19cb0b46a2bca3a9cadae8d7bfda4a7595630c6b804b6471eb5b8de1cf0dc8a5dadc1ddce54d59f11f8a7c3ba2c857c453be8f0b4c618ee7518b65bccd9e36caa5979f7c1ac3f187c42f0ce856ff696d335cd52d36e45e68fa71bbb6c7fd7543b47e24544b1539bd1d9f9150c3528e8d5fd4deb3b1d060fddc56318e3192b9a54d3f448ae44b0c2a9203fc3c57827893f6a0f09c73b269ba1ea2a54e099aea15fcd46ec7e75989fb506912ca0c9a54c83b84990e7f95118ce5af3fde549c63f60fa6c436fb774770c9bbbe6a9eb9a1dbea8aab3de48157b03d4fad783e9bfb4c7834c9baeecb5055f4508dffb357a5784bc77a4789f41b5d72c8dcc7a7de03e54ee8028604828d8270c083c54a8558cbdd7a8e52a728da4b4f3371bc0ba4bc3b52794be3ef66b84d634d934fd4a4b66f9bcb6fbdea2bd2b4bd534f6531a5e47bc8c8cb75ae7bc69258b15c3879fd0720d77613115d54e59dd9c18cc3d174f9a165638d8c20972e9b97d334926d66cf97b4e7b7a568795148de87d2a37802b74af4f995cf2395d8ab3245bbf75bb18e8deb5b1a0ea76d6b0bc7716e24c8c29c74ace68c0e829be5f3d294a319c6cca84e5097344b575706590e0308f3f2a96ce296dd656fbbc7e151da290ff00773f5ad96d32f62b55b848b703d875ace728c2c8da9c653bb3364f3d171baa3fb5ddc7f726357aeac353fbc6c261ff0001aa66cee7cdd9244cac7b11446517d824a69e899343ae5f263cc557abb67ada4bc4a9b0d653db18db0fb94fa1151b46a4f53f950e9d3974055aac7a9d45bdfc3b83c522eefad4b7dab5c4f1ec693e5c60e2b90c10783566dc90b96723f1aca58785ee6b1c5cb6342e9e39db749f310300e6ab4891e3814b0b420fcd9a9d4c0fc2a9a7b06922834487bd45240bdab4648100e0355792303a1c7d456919194a16281879e9418b1d455ad8474614328e86af98c794ad1ae0f4ab91c692271c5445076a7c27676a4ddca8e9b92aa63814ef2cf5c5496a8d3c81514b13d856cdbe8d7d247f2dabfe5584aa28eece985272d9186a84b74ab3180abc0ad68bc3daa3f22df1f5353daf866f5df12a88c7724d652c453ee6b1c3d4ec623a0718a87ecfcfe07f95760be161b48174bbb1c0c5243e1425c87ba8c7071f9547d6e9aea68f0951f43969226dd9f61fca99e5d74371a530018a363039c7b556fece67cf971bb63fd9add6222fa9c92c34d3d8c6286936d6b1d327dfb3c97c9f6a56d1eeb785113127da9fb787727eaf53b1c37c5ed2d758f853e24d2df1b6eb4b99492a5b185dc0803a9c818f7c5781fc2b68dfec725c2382628f2265dac0e0751ce0f1d2beb5fec4bd69046d03156e0fd2be3ef86d6b7da44ed617f0ddc3e55ddcc709ba89d1a7896770b20dc32410383ed5cb889c6524e2fa1d14613869247bddf5b5bdde976777b177dac91c90ca102b295607b7d2babf127813c07e2ed72db57d6fc3ba46a9a859c663827bcb70ec887276f3c30e4f041c64e2b96d11bed1e16c9c0f307eec671b40e0d755a4b79ba65bcc0f2d129fd2b1a54a35534d9d356b4a959a57b9f39fed8ba3af8635b4d2b4055b0f0fea56304d258411ecb5fb5c733a868940daac13ef01ea0f7af1cd341585d7d483fcebe95fdb6e353f096c83286ceb1175ff00ae7257cb770d2db5934d016291f324793caf7c1ed5bfb354d596c14ea7b4576ac6c7ece6bbbe2af86c819275db323feff035f7cfc52f087813e2459d959f8e7c3b6bac41a65c9b9b549e47511b9183ca30c8200c83c1c0e2be08fd9ccb37c4ef0db176c9d5edb1c0fef57dbfad6ad65a45af9fa8ddf931b921405676720648545058fe02a161d5549b76b0ea625d27ca95ee711fb706bba4e8de10d2f54b9477b29acf50f0ec91daa82631756ea60e09002acd6d17d074af11f877ad0d2f5ad03c45349b20b59239ee5954b3051f7b68efc6ee2bd83e355df83fe217c1837d6f7969ace8b67acd84d786da52308b731ac8ad8c32304918e3822bc3b4b85b4afb569932ee6d1f519ed594f3911ca40073ea05615a8aa6d59e811aeeaead6a8f4cf147ed197d7ab79a6f86d74d5314e23b4bd0b2b49242067ccf2e450a0ff09cf7e4022bd47c21f137c1fa978774f96fbc4da4daea525b21bab69ef12374931f3654918c919fa1ae37c49f06ec7c5915e6aba15fd8e9825b1fb6c518d3a3552e7ca291828008a30140caa962647c9af9c2d6d24b5f8a31e91adc504ed0eac96b748ea244204c1180dc0646338cd64e9b5a35635856bea99f61f8f3e23e91a0f87d27d1eee3d6352d42436ba659e9b3c533cb705199491b800a3692493db1d4d79ceadf1635ed7ff669b89fc45e1dd584faa69e2de4d5ece18e4b092532052184723343fddc3a8e7d335d378f7e03fc16b2f0eea9a9dc68da96990c36eef2cb6d0349243b549dd1842ca08c679c2faf15f1ef8ae3b5b6d72eec349b8925b00cbb0853199940187740cc031e0b60e339c63a54595cd1ca563a7f8a9a447aefc28f0e5ae8708d435bd47c4b2dbc105be1a478fc8418c76f9f1d78fbde95b767a078a7e1d5a8b9f13e9581716ea585bdca480b2e0310c0e0907a8ebf3571be05f10df7857c490f8bb4bb5b26bad1c198dacd1b2c774bb4ab2939ceedac70473deac78fbe237893e2af896d2f648e0d1f4db28de3b3d3ed98b8676c6e2eec3049c0ed80074ad22eed8926add8c2f035b78c66d5229742f0c6a3a82cb33edfb3c61c4bc924020e3a66bed8f847e22d1b43f85fa1697abea365a7dff904cd6d25caf991bb3b36d6da48046e15f3c7c3dd2ee747d2fecdaa5ddbdbf9cc5cfd9edcb2af001181dcf7c715af706cd66d96fba440010ed1f964ff00c0431c5745395bde667522e5eedcfaead3568e1b689ecff781c6492db9587b1af20fdae44ba8785efa7962118fec93c8f41237f8d706df133c6167e1b4b1d2ae6decd6d6dfcab564b7562bb4704ee0735e51e36f88babf882ea3d33c717bad4d732a111cb06a1e640501ddfea880a403d8639a551c3a2d454e33bfbcf43e81ff00827a788edf598bc4b048b0c17105ddbc821326e7648d25cc98e38cec07d323d6bdcaeb5ab1b0d4ace0bdbc1e65d3bbc3177956143349f8044393ee3d6be5ff00f8279e9d736bad78db599ad9e36b6b0486df7ae3719e50323f04357351f1d4dae7c44f89de2cfb46ed37c0de0fbbd334d23eef9f3ba41238f7676619f45159d4a5bcfa1b46a2bf2753ca3c75e36f10f8bbc4c6ef56d526bed4ae89632487e4b38c9cec893a20038e3f1cd58f867a678fbc43e24934cf8657375a73e9ea24bfd5a3b87863b504f591d79249ce14649c1e31935c368324ff00d9f2de223497578e2281075624e1547e2457db3f017c171f82fc1da6f85d1bf7b3c8b3eab2affcb79c8cc8c4fa00368f6515a42929defb222bd65049757b1e6777e0bd735276b2f1cf89bc23e3878be597ed9e1199aee33e9f6bb5659037fbcc4fa8ac2f1efecc1e1cd4745b3bcf095c6b9a0dfdf2cb2289e7371a7c411c2e1d650274ddf3e30cf8c0cf078e9bf690f8b09f0aee34c834a1637124b1c934ba51600b29230ce47cc80e4907b90720d6b78ff56d52ee1d0e1bd98c521d02ce6b9b684958d26993ce7006727fd681cfa57453c1c255146f6ef6ff0082717d62aa83974e87cd7af7c0ff0011787ef5e2d5fc4919b785774b7364e928231905632c1fb771d8d763f097c67a9f81b4fb68ad25bcbcd22062238e68dbca949cee76edbb24d763e26b712f85f52540aae6ca60ac5723fd5b7de1dc7b57cd7a6eb375659b5b2170ef2c7b5a58ee590c6dea40e187ae7d6b0c5e01c65eecdaea8da8d49548fbc7d85e1bf8c9e13d4b6adf41269f29ead0b657f235db691aae93ab286d3355b7bb2dff002cc1c483f0af927c0fe28f0d4d746c7c5de1e8ee209a4ca5e5adcb5bcf0e7b0619523eaa457d15f077c27e1bbeb1b51e14f1419eeb4f67922b6d460486f111bfe59b489912c609eb8c8f6ae3a98fc4e07deaeef4fbdbf3b5ec29e1e13d2da9dd6c23da95437ad753e17d1a2f91b57824fb405cbaa0dd1161d70c0f4fae0d6cb49a641c2e9c091c67676aefa79c61eb479a8be64614f2d9b5793b1e7eb1c8dd232df415a96fe1bd5ee201225a6d07a063835d7457b63d12c907a7005367bc98cb91285f400e694f309bf8626f0cba0be295ccbd0bc22633e6ea2576e32006e9f5adb8e7b3b1b7f262cca57a16acf91e6914bc979b53b93c0a6c36d14fcc17aae7d057254a956aeb23b29d3a54b48975b599049feac63dea517fa74ecbf688a32c3be2b2ef2cbecf1b34d2b657a00339a5b5b28a58c48d30543dc8c567c92b5d1af34762e5c41a09b833b20727a8ed4d51a029cad9267e94c6d36dc0245dab81d81e6a8dc44b19c6187d4d3e6a9b5d93cb0dec8d09f4cf0e4f2f9d240159872aa702966f0fe8d3c2a96f208f0738ce723d2b2fcb62bb80f97d49a3122f463f81aa552b746c974e8f548db5d13451c154df8c139a73e8fa4471953e5a8618c8eb58092458dcf72171efcd47717d681708d348c0f3938155155e4f4b932961e3bd8d98fc3ba57964a5e499f52d4e4f0d6932a8fdeb161d4e7ad602ea502af10c85bddf8a6beb53ac2f1c51aa6e18dd9248ada34f14dee73bad845d0e9478774a85b2f1ab60e4126b2f58f0ed83bf9b633c7185fbc84e41ae7a6b9b994e649e46fab1a62b483a3b73d79ae9850ab177e739e788a5256f67a122416c2591257c6d6c02bdeadd9c5a2a48a6779245239006306a82a1279a9d235c71d6b692f339e3249fc28e81efb43b35f3ac20dd32f4c66b4acf5a7ba4055bcb38e8457296eb1eec3f1f856b59958e3f90835c7528c5aeb73ba9579dfa246b49797a0e567147dadd63cc939763ce0563dcde4e38502a2fb6b81f30e7dab258546cf14cd8fed331ab6223bbd775556d6250d9719183d0e3b55786db52bce6083e52320935621f0f5e4a84cb3471be0fca7e955cb463f111ed2bcbe1b92dc5ccff00c3718e0741ed4ed3eeda1dc1e6241e40f7a8261013c3b741fc3ed50b2c7d8e7f0ad5c22d5ac732ab38bba66a7f6a7ef31bd40f52287d53e6d8b24793fc42b276afa531916a3eaf4cd3eb9511b2d74db40698ee6e9b48af0afdaf20920f1b787358690c86e2ce4b7727d51f207e4f5eb653dcd797fed5568cfe10d2f51079b3d4429279c07423f9a8a161d4754c258a735cad117c3fb869f4bd8793b4841c6dc7b7bd7a27c3dd3deffc3113a2f11c8f164b7a37f8115e57f0b27dd6ab123ed661d0300315ea9f0a66dfa5ea5666631f9572aeaa3d197fc56b255250bb46ea9c6a5948f32fdbbb459edbe0a41764a95875983763b6e59057caba0dba5d4d240e46d319273d31dff9d7d9ff00b5c69536a9f0175f86279266b548af15719cf97229381feeeeaf8c3499869dad5a2b3ab3c80f9e01c8894f0013fde3d71d87d6b7a752538ddee2f671a724a3b0ef81734561f1034790cd1ffa1eab6e47cc3902600e3f0afb43e2c596b765a75c6b5a4d8daddcda759ca5adeeae1adc00bf3ef0e15ba6d395c738183915f16c6834ef1f5dc27e45bccc90bff777f707d9c1af75f885f1dbc43e1bf82a9aaac7fda03528d2d6e2c752b590011c919491a3703e650c1b90472e3d28f68e31b7426a5153926607c0dd1358d27e08f8f8f8bb4cf10ff6a78c22b8b8115b68b3cb6f0111c85583aa9049660723a003d0d63789a559bc77aa5ea63cbd6edacb598f1d0fda6da376ff00c7cbd7d13f00fe24e9dad7827415f12595f477f71676ed29c99366f2c155890081b141e7a023d78f9c3c65a9e8cbe37b3f0b5979cba9f85ecae344d55648f68260bc9bececa7f8818593e98ac2ad44e095b612a6d49cae7d13f06354b9bdf04e8b6e9336cfb014b903f8b649b1413edb7f4af993e20da596b9f13b5cb9d46f4786ee2f2e6e66b4b8bbb7996daf886da8132a1a20769cbb6796e0015f42feca7a85943e0ebefb6d95f5d34777e5c7e45b348a8b8dd82474e5ba545f1bf4bf0cf8a3e2b787f4ed6bc37abdde95a8e9f708ca96d2473c3728c855a36ea328db7a119c67ad0eb45ae56285169f3267886bdf18bc497ff0cedfc1973a94925e44e63b9d4adae1d0dd42061518f1b8609c9fe20067be7819a06821491e12a8572ac57823dabaef89df0cff00e111f195ae9561abcda85b6a11bcf04975a7c96b2451ab6dc387fbc7b6578e3b550f155acf69e13781e757542abf2a6de33d2a5d46d1a46164ca3e0bb2d2b516b85b93232a2f09bf6824f5c9edf5aec3c41f04a6f02fc3b7d426f126932bd9edb82c9236270d9016239c331dd8e833b7debcd7c1b2fd9b5fb72b2b2f984afaf3ef59df1004ba7fc528e333c8d6b7212444f318c6bbc6c6daa781f3026a549dca89ed70dd4575a5da5c3479deaac769c6411ce3dc1cd5975b011996198ee0321588e7d8fa5627806e21bcf07c71c8aa248188de3ef00791fccd68de25dc16f1196d638e3901d9204077e0e09cfd6b589a323858f9c01e8ab5e7df119a0b8f14456d14483ecca17207f131c9fd315e8505dac31b33a44c369ddb93a0f515e5b14c750f137da9bacf7064fa0ce47e98aa7d8515d4fa57e0deab1781ff00657f1978d182accf3816f9eae6180041ff007f265af2ff0086ba8681e17fd94bc4faa78af43b8d72d7c49af58694f6b0ea0d6724c5564b966f35413c32a923be6ba9f1f5b0b8f813e07f04c8f3a5aeafa55c6b17be436d63baed0202483c1f24541f113c33a6699fb3ef82f40fec9b8d4967d56ff572bba4200511c0acde5e09e8c076a2a7c09bdae445a8c9f71ff0120f86de25f889a6dae8bf0e754b49f488cea48f71e256960428405dea6125896618e7a8af76f1efc42f0ff802c2d755f10e9cf025d5c1b687c8bf32bee64605c279392141dc7f0f5af32fd90f48986a1aaeb16be1cb6d3ad66852d5e70d36e95d4ee088aec40033963feed7977c7ef88fe23f10fc739b47f0beb5716b6315dc5a4dafd9d80f31bcc0aee0e33cbb374ec056b4629d2bddea73d4939d6d3a1ea3e26f0b7c2ed6fc797da7bc17835ebc816e2e6e6e16de6924122aed01a78c724491e140e33818ad7f8ad2e9575e3ad40694f72c6d66fb2ce9218d923f295630a8c8c4e309d1803c570df0eb5743fb675f781ef6396e2da0f1248f6934e373ec809760e4f55c46483dba7a63c3fe37695a9695e35b9b95bcb8921d7269ef55a39194bef94960e0719049fad6385c4b85453bdd6a9dcf431197aa74e51aaed2b4651fef26d6de89fe0cf47f8e7e2bb2b7f06dc693a46a96cd7f3c8b14e893ab34711c962307af0063a804d78ae9374f05a4d1082ddad7ef79a62fdf6e1e8ddc1f4aa76f61b1401085fa2febf5ad2b59a1b692126d16e12270c6290e15f1ce0e0e719adaa62a9c9de535738e9d3e45648efbc07e0eb0f10f8634d9f57d4bfb2eeaf2e2e63b54860f34dc85da4163d82e1c678073d6b5bc133dfe91aa5e787e6bc68f53d1242f6d710b95df1838ca9ea08c83f427fbb5ca7877e28ebfa55bb5bbd9585d48a8f1d8c8ff00bb16a1882408d46180c0c0e3bf5cd6269bad4d69aaa6a52cd7135c890c9248fc9909ceecfd727f3a9fad51db99151536df31f667c18f8ca2f9e2d0fc5d3ac378484b7d41b0a939ecb27656ff006ba1f63d7d9a1d41c704e7d4115f06e9fae697abaefb1b85762bf3c2e36bafd41ebf515ee3fb3ffc4f20c1e15f10dcfa269f79237e5139ff00d04fe07b57c3f1064352845e3f2d765bca2bf38feabeeec6f4ea6bcb23e8557b09bfd7da46d9ea4715634db4d261937c29863d9ce715ceadc156eb5621ba39c66be6f0bc598ea6b9672e65e66bece37bd8e86fe7d3557ecf77e5a2c8382c30a7f1e959f268da6ca0fd9af0c0188276b7cbf5ac387c65a1f97228d4a376898acb0852d2290db5818f1b8e0919e0d4578da1788f4f9a0d2f54114f229c0b1ba30c9bb1d941054fe18f506be9b0bc51a7ef20e3f97e24ca3096eae715a5fc50b5bbf88d75e108bc33ad35d585db5b5c48f77094dead80179c1cf6c915ebf3695a76d05edd9bd406e057ca3e1f16fa77c4eff8492cdb595b395e5332ce5a631cb8c1f364c0f9d4824e4718af78d27c67a3de5ac2ababe5d800c1f8c1c7249e98e3d7b8af5b098ec654af5155f874e57a79dd3f332a71a6934d1d94da2698fca0685baf0fc525b69621ba3249731347b718ea6b3ad4f9ca18dd8f2cf4743b87e62ac98ec224ccb7edbb697daaa59b68ead8193819193d057a7ed2a356bdcd3d9d2bdec5c36da7c7206525c8e400d803f0ab0bf6392378d5a34671ebd2b26348af2c9ae34cbeb1ba89b20491c81c71d70471594c2f40ced931ea055c29ca7f6889d5853d394d1ff847ed24621b501bf3ce16a4ff008456220325dfcb8ee2b185c5c052048c33d69c2eeec2edf3e4dbe9baba946bff0039c4ea61bf90bf37877cb381203ef518d08f7956aa79f76dd667ff00bea9a64b8ef237e75a2f69fcc677a5d225b6d142f3e6ad4d67e1d1326f6b858d41efd6a95b0b977c47b98e7d6b7a0fed83188e6861c6382c6b3ab52a4569235a34e94deb165293c2ec4e60bb8d971dfd6b32eb4db8b6b9f265db9ec43715d04b67aa4d105fb5c2a01fe1aabfd8978f216bab95519fbc4e73514ebb5f14915530e9fc106616006da4d59b5758ce0495ae34cd320606479642bdb1c35486f6c221b069f1fb0228962a1d15c21839f57633f6349d0834c9ad9baf4f7ad11ab46a730d8c6adeb8a9135773f24d6f1e3d08acfeb2fa236faaab6accd86eafa0db1acc4af602b5edefed3c806e247f3172769e39c54b0cf6cd890dac7b877514cbabbb277265b0dec01e48f6aca556127f0d8d214a715f15c85ad6d848337236e076f6a592c2dff82e5791c669ed05b96044dc60751cf4a6f936f9e27ffc76b6e77fccfee39d53feeafbc174d8cf1e7fcdec38a93fb321001cbb7ae29a1157ee5cafe3522a4f8e361ff8154f3cbf98d1538afb023585b11fea645fc6b84fda37425baf833adcb13ee36691dc818e7e475cfe84d778de71ea8d91dc1ac9f1a59c57fe0dd5ec272156eac268f2cd8009438fd714e3292fb44cb91fd83e7af84d76cd2441107cc3193dbdebd6be19dc243e24ba8a4c98ee2dc3000f5dadd7ff001eaf0cf84f7120f2c8c29180d838c8faf6af54b5d60687aa45aab1511c511593233f29feb4aa4a30bb96c10bf2e9b95bf6b8f1a5be89e0d93c2f612f997fae44cb220620a5bff173db77ddfa66be4f8747b47f2353bb91ed62be8cf916a17e669304e33d978cff00857d13e385f0f7c47d5ad357f113df58de58c32c31c16ccbf6660436c90a91bb7738c83c578878a74bbcf0c6a89a5ebe249a19a4336917710dde74846ddb8f5390197b1c1e9cd461f1346ac5fb37fe65295eca5b9c76b093dde9306ab02bc9259b61c20cb6d3d47e991f4af71fd9c7e27785effe15ea9f0f3c74a93d9b16bbd16590311e73027cb52bcab0930ebdb961ed5e05e1ef123e8bafc76efa7dc48a77457714f88c14538605793904704e3915d8ea7f0cef75358b57f03dc2bdbdf03208ee1d62898f5c658801b83d3b8e95d8e50a8b505747a32eada2f873c1eb79279da45fc43fd2afa099d45c12dc2b20721c9ce00099fad7996b174baa7c45d63c5674196c6e6e75281ee2696e58318a585550790dd37323317ce79c629d2dfebeda9691378a74cc476a1a2b196da649adee27e0170eac55a40b90075e49c567788a55ff0084b2e24babed563fed58d122496c14aaf92e182ee0c0b1e5bb67e6acf113a366a2b7223192dcf52f85fe2ef1378427d5bfb1a5d39adae024cf0dee705d5482cbb791851cf6ac9f1a7ed0fe2cd5756d36f62d274fb4bad0e67daca1dd642c0039cb7ddf954fe153eb89e0dd3668f41f106b1a647a8412c4d71e6f9aa4e5a361f329fee9fd4f7e6bc97c7577e1ad33c412c165a9433dacb6b03a340cf3066312ef3bb1c1dd9e3b564a4d2b072c5f43d12e7c79aefc43f1543ab78816d63b8b4b4fb3c49046506ddc58f049e726b3fc7c71e1c9b3ddd07fe3d5e73a4f8cf4bd3ee92e156ee465182162c678c1e4d4dab7c40b1bd8fcafecfd48a7f74ceb8273c122a5dd9a455a36346d1a0fedeb48adac9436f5dc0c85c9f53db03f0a83e3e5b91a969f7c91b2958da3dc7191fc4bd3e868f047c59baf0a4825d27c3d6ed703399e7891e46e7b93938f61e9593f11fc712f8c6ebed375a0dbd8cc58316b6caa139c9254938c827a605277e6f22945257bea765f0f7c48d15b5ddba44638b6acde7cf17eedb3ced520f07e63d7d2b7a1f17e97f6756ba8de21c8f37eccfe5311d707247a579bf8260bdbdd2562b78249c46a37ac49b88019b69c0e7be3f0af47f057c52f885e07d062d0f4abd8a1d32191e48ecefb4a49103b9cb1cba13c9f7ad14b42ac9ee67f8b3c7de1cb7d16e2ca0bc826babb8b626c8ce6207ab13db8cf15c97856fecee756d96f32b3c71b103f41fcebbfd1fe215edd5c5cea5e23f875e0bd73fb50b79f1dce91e5ab1dc5b729520ab7206548e0015ce687a5c5aef8e2eb53d23c336da5ade5c6fb4d36c0e6385548c2293c91f2e79e4e7bd0ea4609ca6ec975e85462dfbb1576cf68f8dfe1f9f59f1d5e782ac6cede6ff847fc01696664964dbf6164fb3c924aa3f89879aebb7bee3e959df183c12ac7c13e19fed6b889bc3be0db4819228d8e64959e7766c7aef1f90a97c5f6fe2cd4fe365df8cececee24d07c502dfecb7f12930bb39855ada423a32c919054e3f84f715df7c50f8ababe8ff0015b58d1b4816b6d1d8dd0b18668b4b80cd208d563c19590b372bebd285515918bbee759fb2ff0086203f0964d3267bd8a69659237bc82e0996607203ae3262650401c7606bcfacff00650d67c2ff001abc39e21d1b513a9f876cb5bb7babd5d4479375046920727270b28e3a8c1f6af429bc45ab2b695789e21d4ef98c3b355d2eeae644881c644a8530149248db820800f18e5baceb897f1f96347d3e24deafcc6646254e46598e4f2057cbe67c5794e0e5eceb55bcbb46eedf769f7b2a34dee91c2f83fe1feb56de2bd4fc63e366d0fc2f771e93a9416ba95eebd6ac0cd769246bbd6362542994904e3ae3bd7cbdf13ef6f65d5adf471aadbdf1f0f46f642fa370f1df61f3bd59720af60d9f9872706bed3f146a93788b45b8d1b5ab6b1bcd3ee9764d6b2daa18dc673d31c1040208e41008ae0ed7e167c3c800dbe13b16c7fcf42eff00cdabc59788593abde9ce5f28affdbbf4377ed5c142fa2eff00d5edaec7c8d06a091c9b7500d1a0eb2429bff4c8fe75ad64fe0eb98cbc9e2bf271d55edb69fd5b9afbbbe02f82fe187f695d68f7de00f0ccd7573197d3e5b9d36393f7801fdde581ebc11f43eb5d0e9be05f195adad9bdbf85fc1ba3889633724e9d62a5d8c11ab28f2e338c4de630f62a2bdcc066984cc70b1c4e1a9caceeadd535dff3f43b30596bc5735eb4216fe676bfa68ee7e6a7880d91d5a45d32e5aeece3c08ee366036464fd39fe54ed36fe384ffa5da7dad3d3ce3191f88cd7e83fed2fe11f12cbfb24f8fa2d7b51d3ef85ae8b6f7517d9a3dbb66b7b8f319c28450a0c6173d4e41e71815f9d719cad7af4d73d35cd1b1cb8cc3c70f59d38d4534bac767e97b1d6e9baef8252446b9f0fea70caa7878af4be0fb72a456d4de3ed0c46160b0d50e0705993f9939af3b8625926f9a48e300705c903f9569db5840c33f68497d91c63f9e6b683a5455eeefe4723d4fa0fe1a7ed27aedc32e9b7da7d9ceb6d1288e4b99764b281c72c0e0b7be39af51d17e39e8b32a8d4b49beb5f57859665fe87f4af8d56dd225c08820ff771562d27b980e6dee658ff00eb9c8457cfe2327c9ebb6e54395f78b6bf0dbf02d4e6ba9f53f8cb5cf09ebfaf5c5d6997d751c778a6494c4d1a93318c21263919181f9232769392a0f515d0785b44d7ecacb4fd5b4b45d526802ca924570b1150039da6238e4ee6c824f2e39e2be4bb5f116b508c7dafcd1e92a06fd7ad6b693e3bd46c24122c4d0b0fe3b59da26fd2a6794d074953a359a4bf9a3cdf8a69ff005b137d6f63eb2f889a4b5ec3ad6856d68aabe2dd3a4b8b6b694855178136cd193d9990ab71dd5aaefc25f85ba57867e19697e1cd46e8df5e5ac65a7b92a305d8e485e01da3a03c138cd7ce5a1fc5bf10ea29633a6ab7d32e9fa946d11b9db288e5da4609eb821fe86bd4b45f8ddadc585d4b47b2ba1dda07689bf23b8570d6c8f37a74631c3c94968dd9d9b6b45bdba7e269cd07ab3d363f01dc59ea0d3e8fadcd6b1b29242b9e5f8c641ea319e7359daf685e2db4b5bc769daea1bab56b6bb682731492405b7b2e7f879e720f18f4aa3a2fc6bf0dcfb56fad750b163dcc6255fcd4e7f4aec341f1f785b53da2cf5fb1676e88f2f96df9360d7347179e60bf8b095bcd5d7debfcc3d9d396c79e7c0fd3ff00e15a6a9791cd3eb13685a8012a5bea686592d9cf3b84aa00618e3a0af67d37c5ba1ea3620e9da85a3b3fcaa864dad9f42a7069ab35bdcc79654911bf88720fe22b22ebc1fe1cbb792436a11e56dc581e870071dc74f5aeec3f12a97f1621cb28eccd45d32e5e525eddb0c73902a693498d5a34795524949088ce3739032703bfe15cdc7e11d56cd9d748f13de5bc0c0110bb975dd9cf42781c0ef5cf6bde1df1b1f1868dac5cdd5e5f7f61b3cd6eb6b721239776d044808cb74e99e99af729e7d46aaf72493f3d0c6387a6be24cf42934d08707f5a5874932ff185f4cf7ae6a1f1c69efaed9e95aadbdf69f7d7b2f9508b98f11c92633b438e01382003d4f1e95d95bddc702796cadf47cf15ebfb77282941dcce34e9b96ba22bc3a4de43b9a275040f5eb4b25aeac23ce7781d8364d4b35f21ce36fbe01e69f1ea50a0da13af520567ed2a3de26dcb456d2b7cca4abaa44a7292e1bae2ac5b9d41572f0c8cbe8e32295af9779292c8a0f500540d7b3ac994924201e371aae693fb289b538fdb64f33310a5fca4f5539aa49697372ccf1282bbb1c7415666bf9ae14a3c519c8ea4734fb3b29bca5922b90a4f503b517e55a8b59cad16da0b7d21cc63ed172ab83c2a9ab09a5d9b03bc499f52f519b3b8ddb9ee541ec42d4138bc8894591994f52ab51cd293d2468d422b5832e41f63b4dcb1903d773541e75b7999243f07b9f4aa2c66e8e5bf1142e4b73e87f951ec9b776c4b1314aca26abc44fdd2adc0e87da97cadc40c018ee2a47c0e883a0efed491efeaa179aae764fb357d843193c3329dbd06da48edc1cfcc7f0ac1f1478d744d174f9ae2eef62291fcaad1387cbe71b081ca9c91f7b19f5af04f881f1675ed43296f3c9e5c322b0788f931a2a9ddb88dd924f18fa0f535cd5b14a979b2a5c8b747ba49e37f0f26beda749733dbaa16579e61b14383d3079c75e7f4af2ff883e3bbfd56fa4d22eefad6dad1598c9e41f3229155b2b9623273c1eddbdeb83fed8d235eb59bed7ac48b35c02ebe69527271f321f6f4a964d37c3765279b224374d0a10c259322462073b0f19233cfbd78d5731ad2bc5dd12ecfa197e0e3f64d6ae2d58f31ccc377a8cd7a0f8e2ead2dbc0335ddf5c47045e495df2640c9e146473c9c579bd9dc24be309e48a131acac1829182bc7a0ed5d0fc6eb9f33e09de3120ee9ad93001f97120ff0afa283f6908b7d52fc4886cd1cae85e33d1e2999b52d4f0a141531c2ce5bea07423a567fc4ad63c25e31f0fdb591d57548ee74d99a7b4952d7f765d94aed7527918c72391c9f6ae021825947cab8faf15634b5dab229c655b07158d1c061e9d46e1277f97f917c92d1b431b4db6bdd72cf58d508370a823be10a6e6b8083f76c19b807b3719200e7ad6f417918d583dadb5a5e4acbb61b8d7009445918daa806c451db83f85677b531802b8aefe545753d0bc2bf0f74cd6ae146bbade6ea47ff008f18b4d56866e7a05e9939c00067be41a97c45f00bc470dbdeea1a26b8b3787d5d673a6eaa934935bba1fbd1c8990005c80598376391583e0bd6ef63b328ee59ad5d7c997710e9dc73ec40c57d0da3fc48b5d4bc13a5f8a1f4e6b9d46694d8dd59c50a07170320babb293b180c9f4cd47b38f35d6e12b1f2afc69b05bcf8a1ab5ca40af387898a8752ce3ca88a90a083c94c7be4579feada2e9a97fe55deab1dab2a850bf662e78e339f4e2beb1f8eb1c26de2d6ef7c0be16b89f7466495edc99bca07ee33aedc8048fcb8c115e550dcf8767bd865d47c27a688a555462aa5bca4c01950d9efcd4fb0e676bdaffd7993cc947d0f27d73c177369a7c77b6179f6ab7da5a6919562551c63079ce79a4b4d17c3260467d4757776505d22878071c8cedae9be246b1af689e299f46bdb832450e0da98f889e13ca32af4e9c7b106b9f9bc497cdb41919770ce0376a50c03714aa4ecfcbfe189f68fb08be1ff000e1398ad7c432fb8423fa513786b4e92175b7d0b5ff30a90923b70a7b120f5a636bd7f2308924918b1c2a82493ec2b73c3763aa5d4c1e681ae1872232e7cb4f773fc5f4158e26185c2c79aad47e97d587b497617e17a1d3bc58fa7ec78ff00d0ca847186180adc81f8d767ae69dadebf25868ba068f77ab6a134ede45a5943be593e524e71d801d4f007a56478bbc305f527bed2b56923bf8514a5c98c44928db8d8caa7e5e38ce4f18ae97e1cea9ab68ffb3678e75b3793c3a96afa959f8722937fef218c8796e111c766544048ea2b3c2e2a15a568eeba1a4649c6c61b417da5dbadade43710c9630dc79cac418d66ddb08561c161b483827b56efecf08350f135c690ba05d6b7a9dc5930d2846eaab64ea4b3cb233b0548c024962702b916b885f4dd4163bbfddc662b654e484c0e78e9cf35df7c21b76b1f833f10f538a6921975186c7428e511956559e5324a067d6388e7d457672c650929aba655da6b95d99bda12789fe1c6b561afc37fbad52ea3370348d6d65b6bb65f98c4ed131c6403d57a74ae1bc65e2d95bc41797cf26d9af2ea49e75dac705d8b6030f4dde959b7175aa6896124dab5e5a5dc28a12ddd20f2e667ec08076e3033c63a57310eb71cad99263b81f9f7a67f124562a2393b1d62fc59d5f428c45a65d5adc34877b47721718c7f7faf6e9c5695bfc7dd66dadfcdbfd134b9b0c0620bbf98fe193fcabcc35c5d1ef35488dd5e8b61f67918f95129cb0c940791d4e3df1d335896b1da8919ee5ff74b182c43e3e6248fe9d3ad78f8ae1cca71751cebd15293ddecdfcd585cd25d4f76b1fda3f4c69825ef85eee35279922b956c7e04035bb67f1f7c0922e67fed280fa7d9b79ffc74d7ce739d3228cece4cc004e3714e7920f638a8e2b2d7de3675b0b9da549429031dfec40e9c579188e03c925f0d271f493fd6e52a933eafd07e2ef812fee13ec5afb433290c9e65bcb1b03d88257ae7d2bd6f45f8fda3ea5a249a56b1a9e9d7d14d1f96f736d7cb6f718f5c9e377b8c57e785f69de23b6844f71a6de4698ddbfca276fd71d3f1acbf3e4618dfd7a8da2b0c1f0a2cba6e580c44e17dd3e5927ea9c4a751f53f4cb58d47e14f887e1f7882d2dafeee3bbbed16f6dd1af2eda640d25bb275562bcf1d78e335f995a53b49651b3fde28377d7bd6a787355bfd36697ecfa85cda43346527302824a1e0fcbd09c138ac9b17814bc703ee8d5b0a4f5c7bd7d460e18a8c1aaf352ecd4797eff79dfe562252b96e9d040f3cab1469b99ba0a92dfec51847bf6b858e419cc3b728b9c6483d7e9c7d6a4baf0ef896e6f1a2d234bbdd4638e402192c21694c9900ab855cb004107a719aec5193bd96df913a2343c17e3bb9f0edacb6d616d6f2473b06916e61dc5c81c739e07b55cd4fe25b5c2863e0ed0666ce1b742e8df50548cd470fc1bf8bf747ed31fc35f13b79bf36e6d3d9339ea7e6c62aaeaff0b7e24e9189355f095ed8eee82e258909fa297c9fcab17570eda8b926df9a1d8643af8d4749ba9adacede1be8419042a58a95cf3b413ce07afa573971a95f5d7334fb94ff0008181f956dc7e10f13408b7b73a6ad8953f2bcb731c4c7f02dcd4763e09f13df4cd1e9ba5fdb08e42437111623d146ef9be8326b474e305cd6b017fe1feb51c7a1df68c711ddbca97968e3a4af1e098bd890a71ef5eada7ead6f35a432798bf3c6ac0fa823835f3e481e29b6b068e48db90786520ff3045779e06d5dee7c3e90c8774b66de5b13d4a9e54ff31f85690aad6e163d4fedd12c2d207042a92707d2ad47711bb14cab7ca181c7041af36bed4fc9b195ceefbb8e0f5cf1fd6b5a3d51a3bcbe449581b711afd32cdc7e95bc6bb172a3d1749d6351d39c3e9fa8dd5a91d3c99d947e40e2babd1be2af8d2c76a9d512ed7fbb750ab1fcc60feb5e2f6fafccbd5d5beb57a3f110558da451892357041ec464563568e1711fc6a6a5ea90b95ad99f43e8bf1cae970ba9e851bfabdace54ff00df2d9fe75d768bf18fc2575b45c4f7562c7fe7bc04affdf4b9af96edf58076e619fe619188d8ff004abd1eab006c48e633e8e0a9fd6bceabc3f96cfe14e3e8ff00cee3e69a3ec3d175ff000feb8fe6e9f79617d246036632ace9cf071d4735a17f2c7385e1b72f727ad7c93e01f16a681e2cb3d4e29c6c4902ce14fde89b8607f0e7f0afa9bc3d7d6d7d6b2c81d5c4641c83d8d79f4697f6663e387e6e68544daf55bfe037cd38b45854cf414be59dfb719fa572bf113e26e85e0fd523d31f49d5353d42588ca21b2895b60071862cc31d4763d6b8eb3fda334b170d16a1e01f125a142773c4aae1403d483b6be81546f632f6515bb3d9a18115406b7dc7b966a5b930ab60db86c770d587e13f12c3e20bdf36d629a3b6f21b11cf1ed72c193e623b70d8eb5b1244ace70403fddc562e4efab3a14525a2b9621fb395e61897ea734a85c330892303eb557c91b724b7e0b4aaa63527cc50bdf7718a3e63bebb58b2e6e987cad1afa95ac7f1a4b7d1785354f2a47565b5760e8c411819c83dab441c460995369e873d7e9543c5cc87c2baadb99e3121b098ecc80c46c3db39a4a5aec39474d1b27b8d42ea5d48584900dad6bf6812639fbe171fad737f16bc6707c3cf07af88ef7489f5084dd2db18a170ac0bab1079e31f2feb478bb5d874db1b8d561d443c96fe1f9db368c92488e1a3da00e46413dfd0d7ccfae5feb5acc916a1e27d7750bcf3143471dcc8e55c1cfdd507038c7402abdb5382f79ffc130a8acfbb3de97e266ab02c10ae9d6b7accdfbd9cccca080071c773ebd2b98f1278efc49a92ca269a4585597ed10d89236216e831cbf6af1ad07c7b3258cf791c1e5c9e4aa1cbfcb9c8fba3a938e78ad9f07f8f45bdaa9bab6f304b23076db8230b91851ce3b66bc0a93c5f272b77b7dec5ced8bf1e3e226abf6cb187ec8b12dbc87cb92651e65caf4e48e76f7193e9c579cf8abc56d7183a7c490dacd16c78412769073d7b7e18ad0f8c9e245d7e7f39c0f314044654c0db93818e7dabcee0b9b8d92c44c8808cb293df35d987a77845c96a8ca4db66ee8b773cd78222e111e4e598e0463b915ea5e13d2b4ebbd361325f3ab17cc9225c1dd3a73838c600c939e3d3debc6f4902e238c4d2b244376f098248fa71deb77fb5ce9f1da8b2b9961648da39188ddc16c9da47033c0c52af073d13b31a3d575d6b3b6d7ac4da3c8d1476e222cf9dc4a9e0e7bf0455df8d573b3e0bb82c32d7d6db863903713c1fc2bcd7c1dae4f7fa83dbdcdc4970d10122bca70cd938271d0751d2bd69bc3b6be33f081d02f6f2e2ce33325c79d100cc360381f371ce6bd5c2a71c3c13e811f899e0d36a92b0c20017ae180353e86c5e295cf77e7f2a6fc48d057c31ab5bda457f2ccb7111743244b9c872a471f41f9d6469b71a8066b7b5b98f731c2e5070dee4f6e95a465468b714ac6b2a929eb26748d9a00accd26f9c41226a865370a188fb394da0e70abc8e73ebfa53bc2a356d50dc9b846b78e27f2d183292ec3ae38e40c8e6b5a75a351da3ab279e291d4f85788e638c8deb91ebc5767e1bf19c5a07c27b46d1d34ed67511abcacda78d4912485496f9989c9c0c01ebcd79fd8d86b560d3467531f27ef0fee132c07719acff000ff82f484d40dcdcdcea2db9cb6d458f192724e0e3d6adc67d83da41d8ed7c6de33f1c78bed6586ebc3d15bc7b7e586deed150f39c125b739e3a7ca2b021b0d51b4c69aff4dbab7ba5f9445f2b0551ebb723a7a1ad86b2f0dc5a7bca975ae1688957cdac1b41e3a7cf93d7dab2f58fecc8e155b7b9b866914911cf6ea995f72ac71f88ae6aeea420a4afa3bfaf97cc25cb2564c9bc69e09d03c47ae41a86abe31b1d2245b48e28e29a44038e327273d598fd17dea9db7c33f86d751ab0f8a3671b0552892cd0c64a123ae7a1ebf97bd790f8974cb8d17547d3e78d43b0df1618366339dadc7b550ba8634550aa39404923a9f5ad3eb151ea254fccf42d16cb4cd3fc9315a5c5ecf7d230b660ea10aeedaa0b1c707824e06735bba845af5a5d359bdc5a584b1e30908f30e08c820f4c6299e0ebdd29bc1ba7dc4f2986e2084242a899248ea72480391daa0b8d6207d51ee351bcf29657dd2ca48323e3b0e30381d857c3d4c44ab54a929a6e77f3db5d17e1b1328ea4d1d85e3c335d4b2dcdf340bbe79a424a443d48e83daba7d7025a7c01f00e95191ff1506bda9eb9263f8a3564b78cfd308f5e73f133e231bcd0dbc37a05b1b3d3f19948fbd37d7bf38e49e7e95e8df1b18687ac784fc3de5971e11f04d845246a3a4d2a7da24e3d7330fcabdcc8b0f8987356af1e56f65d6de7e7e5d0d14794e22e1ad6c3494bc643b6f2f9a67453f78062001f857b46a1ae8d57f67fd0ef5629613e20f125ddd14908c98eda21129e3b6e95b1f4af9cee6fcdeec593ccf26dc11126f1f28efdabe80f174034cf03fc3cf0f81b4d8f8552ee5527a49773c931cfbed095edd4c2d294a15e4bde8dd2f476bfe48b526e4d743c97e336a0236b2d3d57f79b4ca5bd01e3fa1ae43476b70edf6997cb5e39c649ad3f8b17026f1b4eb9f96de248ff004cff005ae76f3cc8a22af1ed180c1b3f8d5456a0f7343c57f640d6f2e9ca64232af12124907a633ee4d334fd1ccec8f3c9344bcb35bc0bbe4627d4f4156b4fb2b29b45d2f5f8f5858d61b8dcf11420b81d47d3b73d735a63c522398ae87a4c8d87ca9dbb00fe64d54e696c5c60ba91691a758585c0b9ff00847ee6e76024b5cc9d3dc00b8cd772b61a7cda69beb38fc9923557cf99d0633dfd4533c1faf0d434ddba85b2c72a968a688766c64039ebb862a9493a69fe6424ab47d153960a3b03eb8ce2b9a527267446292364ea16e74df34c8ab2038523ef119c75fa550f16f87f4dbfd09af6c6d5adf5165ca0814112be33829d0e7db0726b2a1d4032b4047eef19db9e335774fbdf32ea274700c47381c027d692728ec37cb25a9e736fac6a76972305639a17e8f6e9b9187a823a8af61f86f6fa1f8f3e1f4cbaae93a5aea914a636ba4b08d4923054b0503a8e0918ae37e354f05fad9dfc566448ac6396e0263771d1c8ea49e99f4357ff00669be316aba8d816e248d6551ee0e0ff00315b26e4ae72f2f2cac6549a7787ee7c6cbe1fbff0cc6b0ac447ee6ea5591b6a9214609c1dc0f3835e9ff07edb47ff00846d2fecbcfb38a42d1c7e5c8c93c6a87688db0718000fa915c278923b1d2fe32dac735b5d477af3a942b2a1876396c64633921bd7bd757f091c43a06a36ee702cf53b80dec33bbfad4d4a74ab53b349c5fdcc7194937aefa33acf1278c97c31a4b5b594f77737b7b96844ee5c4680e37b73cf20e077c5794f8abc56ba746d7924a750d62e4fca1ceed9eede9f4fe95e77e30d5eef5dd425d4249ae259249b6ec5958044c9da00cf4c56c78574ad2b4e1f6bf10ea6d6731e6182120327bb01ce6b8b2dca70d97f3d48c573cdb6dfcf48aec92ff312d742ee98daeeba649af6cc8849c3cd7313609f4c60ff002c552f18f80b51b1d346a9a746f230f9a4b5b7dd21c7f79703a0ef5ded9dbc5a549badeee6bab4bd8bfe5b396c1f5f61c8fcaa4d2f5892dae61759431815be51c64fd6b554e119f3c347eaf5fbcd7d8c7aee78adb5d417f882f4aacdd239d86327fbaffe3dbbd6e784ac82addc76c2286e0c78633b1441861cf00e7f2ef5aff103c26a9ad5a5e69c05e4dadcc48b6110f312527ee8f5049fc3bd5b6f093d9eb573a558ea10ea3a859245f6db4890abc726e52ca99e2403a71ce7b57ad83a74ea548aaafdd7f2fc4e2c44e74e2f956a636b8935b6b0fa55c9476b597f7cf0b6e4c83c0048e467f955efb5c4bfdb1289558c9731edc11ca82c063d78fe74fb8f09ea9a8fc44bab0bc8ff00b396495ae0b4d80cd116257626724903db03935d7f8fa1f00497965a3e9fe1f8f4f925b8850cd6b971e7aeddf03c85b38647638001525324e2b82b4a2ab4a10eeede972e2e5c91735ab499c14fa82985806c165201f4ad1d21c451c7249cb2a05894f3b00e0707bf1f856f78d3e1de97a0e8f1dea5dce8d1dc1512dc026221df08b211f748ce377438e45767f0a7e06cde36f0dea33db78956d753b39a28e2478435bc85c13c907701f746ec77e86b2c4e2f0d9752f6f8b972c6e9757bfa1ad184ab3b535767052f88b53b6b59eedafefa65b788c9e5237dec745181dc903f1af3d5f185c26a7f69bcb097ed3bb73ffa64aa5bd4157dd9aeead2ddf4dd6354b1be8ee267d3ee8db4d258a89511e37219b2c31b72b90715bdac695a6eb5a549a3ea815bcd1b45e88d4c911ce448b91d718ce3ad74e26a2a8d59dd042968cc7d1b5b86ef4f82786c60114cb9def33647aeefa735a1a67ed1de2eb24bab1b2f10d91d3ae97c996dee34b23746381b645dcc0e3bfbf4ae1fe174cf019ac6e44e3ec72caa425bb3b8c8c0f93af5aebeebc33e1fd634336b25bdbc524d1ffa35eadbec784f62c339241c8209acb134e955f6729453946f676d55f4767e6108377b33b193c71aa6a4b6de218ae96eace48be59482c51541015b383d8f7ed5d4785fe23dbdd3bfda879f149112b94c8e983c77af9ffe176b37f6de1abad2d6e1e3fb1dcbe108ebb800460faed35d142e90797225cc858aee50c0295c924838e9fd735e5d6c2427a3463aa67d02fe25d756359bed8da5c66310c6b05c845640075239cf0339f415466f115c35b2db49e259da156caab6a2c067d73bb27ad617c3bd7f45bfd1e68755d86d5630a629718ddea3fc6b42d744f00fd97c98ed6290ac25622cede5ff00b2d8fa91838f4a2963a34972568b6d754691a9a6c5bbaf114bf6a170fe2295aeb6155737e41c7a67774ae4a6f166a8aef2c57ca0acc59e1598b894fd73c9ac5fb15935e342abe64d1129919c8e79e4f4e95a3e1ad66cbc2f672fda34b56be5cf91be20dbb3d0ee1838fd6baf1b3a718a51d5be813949eeac765e15f17c9e22b74b0bcb20ccce0c2e55982e07de1e87af3516a179141a86d2925d5cef285906768ef963db19ef5c4e93f1023d234f9d16dd967dcfe526728b9e7243738e6b2e4f13dc8f0fb0fb1dca999d9639a2ddb006e78cf7273d2b828ba949cb91593dbfcc9552491d469be28827d7365a4392cdbd780b9c71cfe04d75ba4ea1e13b9592deed96e3e621229940303107254f615e0531d4a163750da4fe5e410cb13657f1fc2b47c2fabce350f3e08da7b863821c77f5fafd696230fed2f2bea426dee76363ff0008c5bc7b13c13abb2e0ed91e767e4e39c6c03ffd754d74ed1b7425749f1108d302644b50db867b3751ff00eaafb71753b4791137c417603838f6e31559b5ed3890a9323ae0e5d7a63d8f4af96ff5a93ff971ff00937fc03e97fb2177fc3fe09f25693a47842dda448fc2dae5eb4b2068cddd8b308c7f77b039e793f874a6de7c28d16f526bab7d235c81a47cc70380542fa8c1cee07b74c75afade3d7e16b88e25937af97e6310dd3f2ab31eab6ad86f3570c3f76debebfd2b3ff5ae6be1a7f8ff00c013c9977fc0f83f5af8797fa66bd22e9fa6df0b1c2a2c9771033371ce55095ebef59971e13f110324b06897924601ce216e83b608c01f4afbd750f15d85b2c8915c2cd246e91b2a740cdd327d6a6b7f10da4f7df6612b16118665faae6b5ff5b67a37457dff00f00cff00b0f5bf33fb8f847c1ba66ab6b7d35cea3a1df5a0f2f6c52496eeaaa3392324631c75af6df87173e65b850098ca61b9e48f4e6bd93e266a965ab7c3dd5b4b4955daf2c245037f0a704af5ebc81d2bc07e19dd0f2d0162bc67693d78ed5f5390e6cf31a13938f2b8bef7dd7fc39e663f06f0b522af7ba388f8e3a16a3acc1637ba7595cdd7d8e79d1d6de0695914ed6e4283c707ad721a7f847c506de4bb8bc3fa9aa23e37ad8ca4e7d33b7dfa0f6afa87f677d6a0d3bc51791dc4be58b8462473d8e7fa5757f187c6fad6852683aaf87efe392cef2792c6ead5901c991774770ac79ca15231d0ef071c573e69996229e68b054e09b924d36dae9e8fb32f0f8384f08ebc9bb2df43e40d2be1a78eaeda3d41744bbf2d90bec6b793730ce39f978fe75d9789b499b48364b71632597ee0e44c9e517c1c920103a671dc9c57aa58f8c249a633dc5fdc49331e6492566627f13572fbc43a5be96c6711bb48ca9bd9039cb3007af24f35efe130789a35a352735a7449fe77e9e879d3953945a4793fc40d29340f0fdbdeea97d6b6d3886395e27976b2c528f97767be083c7ad61e87e75f5d3c5a559cf79b1caf9ce4416e31dcc8fd47d01afa035ad774cd4756bf926b1845b49391e4ddc2a461785e0e7230062b2750bef0cbc786d06d663b471f6754047b1c57a2ea4a7ab64724533c974df0eebfa809c5cea11b405cb7d9ec21f9473de47e5bf002b888f4cd486b7a8d8ea621379a7cede6abdc039538dbb371cb0208c639c57bdea1a925b46b058695656b148f92a9b89f5f5e2b2b47f05f872f356bed466b29cdc6b2b8b97172c824f9836e5038072bd7eb5cf5a9f3dafd1dcb83499f377c53b336fe2e6ba917647259c45791c90bb703f235cddd3fdcca38f906094383c57da971f093e1e6b1a3ac17fa35c499218335f4995c1ce41cf1c8af39fda27e1a783f40f863ac6b1a6db5f2de5a1f3e032df3caaacee8a70addb1dab9a3196bcc6aedd0f14f045c0934d92dc9f9a17c8ff74f3fcf355fc75682d3c5d032b165bad3e2b85cf62558103f107f2a67c3bb3d62eef269ac74ebbbbb5b78b1772c16ece9083f74bb01c648ef563e2d4935bea3a425c4525bcd6f62639125428d912311c1e7eeb8fcebc78d3952ccd34b4927fe7fa12b49330643147aa5bf9abba35757947f786791f966be82f8ed35f1f8c5e2bf114162d7316aa96b73a58f2cb23db496f108d948fe10015cf4054e6be720ef3cc4aa1918e7042926bd1ffb7b5ab6f07e90ad3dc5d476e92471a49231f223524ec1e8bb998e3a64d7b9aeb62fa9cec3192926e032c5b38faf6afa4fe284375a8eb369aeda5acd2e973685a67933c71968e38c5bac40161c0fde4720e7b835f3b5affa9c9441c7385af6df86fe3cf157843e1a5f7872392def347d42ca4df15d82c6cf721dc62f4f5c74cf506ba2bdd4636269fc4cf0af1631bcf136a136fc6eb8739f400e07e82a6d0ececaf7c197d218a7b9d46d98bc08a7823d0af71dcf7a8fc282cafafe6b2be2c1f5052b6f26ec049792b9f5c9aa1a2c9abf8775b9ee279e4b55b70c92c0f1e4bb1e3201efe86b38e88d228dad22dd2facedf52be5285a3c985f88e023afe1dff1aea3c1de24f0fde6a4d636b244d3468195235fbe17afcd8c13f4ae0ecb4abef12499bcb9782d93e75841e0f3dfdebb7d1fc09a75be922e628278e584f9b1ce84891481d7e9cfe22b19b3685fb1abe221642e85fdb9dbb9467031e611ddbdc74ae7b50962766926b85822e9bcf2ce7a90a3faf4ab3ac651162794336796c607b9ae7b5a82e95a49d955e188852d1b6e55cf4fceb92bd49421eeee7a997e1615ea3e7d974eeffafd06de5e5a062b6f73751b7f7f72b03f862ad787754952636b26ddcc99565e55c7f781fe63b572fa82f9728923fbaddaad69523b36c4277a1f362fa81923f15cfe22b969d69c1fbcee99e856c042b45a846d35b5baf97cff0033d3345d42d134e9d2ea08e582642258e65ca11ea477ac0f82ae96df121443bbc99924440dd76f519fcaae6872c72aa3be191c0e1b918fa54fa2d95969ff0011b4f974fdeb0caf9d8c47c84e463e95eb53b6a8f9aa89b4995fe2de9ada57c43b5d4753d46e61b9bb55bbd3e36b4dd1c918959570e1b850ca5791d8d6ce853dfe91e17f1b7f6b7929776eed24c2dfee067847dd27af5aa9fb4719755d734859f53d2ed4693a7b430accec923a995a4ec0eee58e3f2ab1e3b8dee340f19089c27dbb4bb1b8dc7d0c7cff00e826b48d9248cba9e5be0dd1e597519e46f3208d42ba4817fd783c654fb5771e197f040d4d74c30c125ebc677924b92c073ed9c7e35c5e9265d56c6ced45e4dfd9f14621dfbf12300795f60326bbaf0de87e188f4d912d2388490b8daf93bc30e4367a8f6f5a9a9235a68b17d343a5c7f67170a96f19c2339c855ec0faf15cdc9ad4515d6629166841f9f29b5947ae3b8adbd77c3dab6b162d2595b79f02e4361d436e007404e4fe15e776a5a2b8c11cc6dca9fd4579b5aad484b4d97e27b583c1d2ad0b4b56ff0003d07c491e977fe11b8bbbb778e6b58bccb7955f1b1fd0fa83c573be17d4351f10ea96ba2dfead6e164045b5edd85696d5d4165db29f9941214753d7815d2781aed6cd164b828d05b86de6400aedc704e78fbb5c6dc6b779e2ff001224f3da59ff00a36e546b2b3f2b7c6a7e52ca3bf20fe35e8d39a749f67f91e35455286213da517f8a67a86b1737375e0892ff00c4b692daf88f46f322b6b8b79024b7499547208ed8933e87a8ef5e67ae69f245f0eec7c991d248f579d8e58ef790c5110777af539f5ae9f46d4ed2e742d7749d5a4bb9fceb3898399f3e546265040cf42c4ae0f4e2b2f50d3d2d3c1f2e9a93c9710c3abdd959891b9a31044c189e80e3f5a5423251e696e4e2eb46ad4bc15a3dba2eb65d95fa7fc31c8cf0f892e3c3b757f35c6a2f6313a45234b72c63676e42904f27bd75d6be35d634ad5b4b93c23ab5d585efd955da5b425655618e037a0c73d456bf8a22d157e13e89691aad9bea962b731c453e69de220b33b28ec9bf04e33f2d79fe873dc59b3c76ea924b261eddcafdc53c139f4e79155685583534a4b6b5935f33186fd8f4cd06db564486fe3b9b7899d7ccd46dd486378ec5b3231ec79e9ebed58f75e2085b5858612db6297649fddc038f97e952783ec2cadde6bd7d5e5b9d49231e62b4981b48e9b7a0038ae5ecad254d70c4e8ca7cde73d70ddff1cd70e2ab3a7692febc8f6f2cc1c712dc1efd3fcceb2d74ed6078db54d523d72dec5b501198671f339e31b0a9e87e51cd1afebbe4f8805a28c4d19066da7e5c919200f5e73556e93c3fff00093589d59ae26b892250908c95888ce1c28efc75ed54afb4eb993c5b25c05f3126937ab21cf192b83e84608aac55474e0a4ba1396616389ace9bdda66af83fc3775aff00c4af1258a5c2cd3cb02de2b21db8248f94e7bf3c9e6bbaff00856faeff0066c76f21b7877463fe5a1dc0f5c700d79f5adc2d8f8b2eaf74f778afa3b78bed0586d5ddfc2564ddf29206390064633f357a0f84be34de5b30b2d7f4bfb44919da2e2265498ffb255b00fe183ed518b8e2d2e6a093f53ca4ecde853ff8579af232c31bee19f99b772c7f1c7f2a9e1d0b57d36fb6ddcc8f243116004dc458cf0715d347f17bc3b0da8f334fbcb772d9726dcae067a292bf4aab278e7c2179a8dc4d716e8d35c0c186e260a718eea7079ce6bcd8cb1b3baa94b4f25ff04992d344910693677ba87953cd748b2601c246707d8fb8ab7af429a59df79671ccf81b642372f5c8fa52e97af787eda667b086e50bc655952f232141c13b463dbf5abd7be2cd16ef0b3e9b78d104db8608dbb8c723dbad7254a35d4d7b8edf70a11a8cc5d4351d25bcbb8d474cb7999a3d8ac540565f4e3ae3f4cd58d0ed85f496a2286344b67cc5f31f97b6303ae0536cf54d02cee0cf690ead0ca5644f3048a480e083818c01cf4f615634df12e93656ad0c76930dee0bb8823de70739dd8c827bd3952a8a368c5972a73e858b833695a84924c449138c21380b93db1d723fa573fe25b9b19625114718954ef60800de31c827fad6d6b5e20f0feaf6f1c57565791794e1d1e3da594e39ebfcaa86ad3f86351b68e278af6dfcb8da3cdbc3146cc0f42c40e5bdcd2a54a71b3945dc3927cbaad4f6dfed279a68e28ddd54da865746e183a02307ad57695d63b7599ddb721f9cb018c0c1200e99cd65b44ff680d246ca6340ac9bb2195400a07e54cbab893c96b8c7dd0704649da7f847a722be256592bad51f4ffeb0d0b7c0ff00037ad6e5a2b5c4b279823425dd5f0bb7f87f9d36f351b87b75f299a3c4a048c1b909d73fa0ac7db7315bec5daccedb7af0c4f5e3d29cf23c530891c0f3402cc385538e73f98a1658ef77242971152e94d9078ae46fb65ce6765841495dbcee58ee5c29039e79acff001878c2fb47f1b69b63a4d8fda7fb45e54622e59444b1aa6646e09206f3c647402a78ae937b46046d20c0dec3ef0e98c771d2b9ef8c5acdb7863411ab9f2db51789eded7e6cfccc73f90c063f402bd7cb32aa53c4c215b58abdfeeff80671cf27565ece952f7a5a2d7abdbeedcdcd5bc69a61f0f6a975144c23d0dcc5390fc6e587cc60bd718e9f535e6bf06bc4da7eb925c5fd92ceb05bb14292aedc1c0231f98ac6d0edf55d3be11eb37373a65c5edb348eda986be58c90e8bbc88ca12c54302cdb87248c1c1a83e1ecb65e1fd2745b2bbd2eff004db2d5034ba7ddb4cb32dd0cf39c0073c8fcc715f6d9365f430d2abec6c949ed7dacb6dded77d8f1735c54ead4506f99434bf7eefe67a5f876e278e65bf81955c4c5796fef039fc319ad5f1a5ee9d79a2d9f85a6d41d354b8b89e6d39e40fb5b67cdb0b9e9953c77e38e95876b0c715b89a1b85b88776f0c83b0ebc7afb54be27d7fc05e2bd3a6d22d35b6b6d412749ac6eda16516b3ab651812071c9539c0c135867d80ab2c651c4d38caf15ba57b5b6befa6afd7530c2e3e54b0d3a1ca9a977febc8a5bafb47b8ff00848756d062b8b5987d9ee3ed6c7c9b6ba6c0498853cab1c1e7e5c961e95a5f192f3557f0cf86f5db5d38a35a9115d5bc20496b3498dcb3c4a0655580605493864ad1d175b826867b3d534eb7d434fd4eca6b3bc8269b6e1b90adb475604f047702a3f08cfa7ea9e0b87c3be25d42f66d48449068d7f692fee4cd11c88a751d77210430c7ccac08e2baa38b9429f3d56d77decadd7fabf4308d352565b9e51e36d7f571abbea30493c56f2410c9e7c08c0619472db73920f04fb56a784fc47ae4b6ab3cbacfdae16e5308a430eff36335da782fe12f8c7c5d14d65e1cb099ad63760b35c4a4460eef9800338e47e15c9f883c317de0cf16ea5a2eaeb0c778ae9249e5ca1a3dbb428c7a7dd39070735eb51a71bf33776fccc25cd6d8dcd4f52d4a7f0fbdec16325b24643a5eab9023dac093fa633daba2f0ef8bcf8c756b4d7193fd2ad18492de5bce365c2aee38f28f00c98dac477c91d715e77aef897534f07be83a35a433b5d131bcb24a76c6ac725b18f9883c601ef5cb43e246f07f8db49b9c37d85ed4c17aa07de42f92c3d4a93bbffd759bab25cceac2c93b2d6f75dce9c161678a9fb3a6fdeb376f457b1f4bff00c2d0f85d15d7f675ac570d771b18dadd6e5da4420e0829db1d4fa0acbf1a6b3e00d7f46bbd3757d2f529ad271b66883b0dc01cf50411c8af33f17785627f883a578c34f01a19c04bd31f4395c4728f620807f0af68d6f4cd363d32e88b185b6c4e721475da4d38eef991a62234d283a4ef75777e8eed35f81e4fa3f85fe17e83a5c973a345e2ab6826c5d328ba539e32a391ce07001ae63e2cebb7167e31fb05a3ba43369d6f229b811c8ee1a301773104ee31aa671e95eb7a7dbdb0f81f14de447bff00b1890cc0124ec38e6bc37e367dae6f884df648219dad347b17958c632805bae4eedc3fdae31eb5c19a6156230dc892d1f5b2fcfd4e5570d174bbd6d01f5db8be8eded22b858bcb5622439c7cc3b639ac3d6e45b6d1e787cd195b50b863c932ca4e7f2149a3c37fae68b23add584715bbaee84f9ab22e4e148e0af272064faf4aaf7facdfdbf89a6b15bb922b749554ec504aa81ce01ebf8d6796e165467252567a27adf5dff26b42a1749b29d82891a38d483bd80c7e35e83e389859781ef997f86dbcb5fa9c2ff5ae6b40bebebdd62dede4983a338ce625ce07be2ba0f8811dbdde8f169b35c4d0b5edc2245e4d9bdcb3b0e71b1083fcfa74af62bcb6b954f66cf1fd5924b0fb34aae18b2acf13a74f6c7d39fc456ef882e135b9acfc53f6e2d70c441716e5c30181c8fa743d38cd755aafc26bc16971a7aeb6b335992641258ca86da5dc432f4e14e070790c0d7956a56e74dbabcb181e39668e531cb3c648040eea0f359a9c5e89edb9b72b8a575a336752f1125a486cf4c5fb44c4ed63cecfa71d79ec2bb1f0aea9e219ace1fed5b2f9c0cc5730385e3d197b1fa715c87816cece18d279f6a48d2845623279f41debd4ae8d8c16b1c16f0c8c163c0b8f3bef1c63eee318ac2a6fa9ad3bef7327ca4babe512cc523077395ea79fba3d2bb4fb4b45691db403cb8e31c80bd4ff008579578eaf3ec76f672aa82ad30ce739e39af4e2fe722c8483b80208ee31c553768a426fde6707f18b46b78228754b68d23172e56544185dc3be3b641e6b92d05596e229b1c46e0fe4467f426bd43c79a64baaf869a388a868255939ee3915cce81e1c2ba79debf333b73f828feb5e2636708f3247dbe4385c4d78539dbbd9fa3b173475fb1c725b900ed731e4f5c06ed5a1a659b5bf892c65382af3a956073df907deab5e4217529b73602cc4fd4e6ae68bbdb57b45639c4eb8c0f7af630cdb8c5f75a9f218e84615e705b2934bef19f1ff00c3ba96a9ab585e69d6c27db1323a87552bcf5f988fd29be359eead7e1b3ea3010b70da1d8649391ba3b82841c751563f690d32e6ef4dd32eededa49bc99191fcb52c467d87359fac5cda45fb3fdb9be6556583ec9240cfb65c0b953c29e720127a76ae8e870f53ce1f51bbbcd41acf4ef2eddae1f2ec83e5427b2fa5771e0bf0b5b69ba5ff0068f9dfe92c4867336d6978e46dee33eb5e756f751e9f33f921a4915bf72ec082abdb23d7f95775f0ced7579f499af25ba98dbc7260c45942024679279dc7d01acea6c694f567a3785180d16242067cc724fe3ffeaaf30f16e92cdf10b518ad5098ccbe67038c9c311f9935dd7826fe796eee74d36b31612096070876b2b001803d3861cfd6ad49a60935a9ee4a83ea477e9fd01af2732c553a7051bea7d8f09e515f1988954b3505d7a37e472fa6da4634f6b5bc056392d82cdce3e52b8273db8a5f807e24d13e1fe83e2fbc8bed17d7da9c2da5e917312aed45f98b48c49047f07407eed69789ade1f32e2da693ca5fb2f96ef9c6c25704feb5c36a1a5da681671d9da6b90ea76f1a997ce8e2d9b1db82a57279181ce79ed5a3c1d2c6e02387adf0b516d77b59dbef4afe47859aca14b32af65b4a497df636fc1ff1134ad3ecd7451e1e5b9604896692343e6739f9b3ce060601f4aebac7c5ba66a56786f0d5afd9f71249b752aa48c138fa01f80af059247fb59958ff001ef90a7f19ff003f9575ba3eb921d225b686e1a0827e6484374edcfe19af4a5ed1ab466d7ccf268470ea77ad16d793b6a7b1c77ba0eb9e0a9af1acec6e2ceda2d9705e2f944017cc9955986130aa57eac300f6f9fef2ea7864f2ec46d82695a6b3489f78855ffe598279240c039f4f7ad8beb88bfb06e208255696464d88256c328fbc0af4391fcab98dc1632d06796c18f77cc84f18fa1f5fc29d382a70514f4466a366d9df7c3b4d145bdc5a3b3cb7d26d12483b2b02186ef51f97d6bb7b5f0d5bdade36d4691222a91bca7736d4e1727b9c01cd79afc27bb8e3beb8d362b713dcdd440b4bc6d8954e5b1f877af6e6d674f8fc2a26b7911af25b7689a32992ac54a96e7db241af1f34a75a728469ecdd9fe1afe67dc708e2f03868e22ae26dcd18de37ead5f45e6db5fd23c9ef3505b6f889636b6fa625c5e49185dedfc4adbb181edcd7a2685a2ac9682ed2340190bbedc01f2e4b1fd0d78c78bb57b8b7f1e8961ba016dca0499082638f8dc33db9ddef5eb1a3f88e393c252585832cd6b3b3182e0e77326707f320feb5be61879d78c541db557f4ea79fc379ad0cbabd5a9595ef0928ff008ba7cbb9ce691a25ceb1af6af235dc76ad6f15b8b369b291c8a436f50e012181e70782383d4634f5cf01cc975e5e9ba9e9f796fb1764b2cab11391cfc87a283c7cacbfeed2dd789e13e1bb7b2579b7d9ddc532b42193cd1bb3d7f88007918e80d5ad77c6da74e966f0de3432db5cba4f2282be787461b5d4e46d0476f63debd3e68d8f977cfcda17fc3be0d5f0fdf5ceb369a969da95c585bac9a65ab482349eecf019c86002464eec3677103a5607c41d124975159b54be8f50b9b8895ee658f538b0b29eaa525249c7761d49ad5d63c57a55c456b35a5dc30dc5bdc95bb645c2ca8e8c363291850081c8fad3f5af1068d7b6b6b71686d2def2dee9127911119648986df2ca30f97923e6f5a9a92d3ddd074dbba73472b37c3db88e0b5b8d3b525bc5b88848f041731799093fc18662acdfeeb2d69ffc203e2ad3ecadae2dae7519dae0b6d86293e78c019c3a390413d9779ce38e78adad5357d1e6d1a1934f4b2b7beb59a2cbac48e8f1e543232119dc777decf1c5497ba9d9ff00c237752593c36fa94080c52960f1719de245273920718fad2836f49b094ac9382336db43f1f41a6a5f1b38ee2392511241323c72b13d09ca8da38c7cc7af7ad2d0ecb5dbcb3bc9ef342bcb036381289948dc4f6418c9ededc8e4d5bb7be81f4fb901bc9bc4467b69012c9e6672ab2293c263d3af4a77877534bb887f68cf341e6c2bf3db4ae56172bd949e54b719cf149d3a33b798fdb558dfc8a332bc3334532489221c3230c107dc53370ecc7a549757f7179b25bfb6b586f0065b8fb31628ec1db0dcf3c8c5570c3ae45704a369348ee8caf14cedf52f88d69342d1ae9f73b5b951e6a8c7f3aaf17c456485a21a696dcdbbe79ba1fc07a5715fbbead1e381f8d2292188f2c7d7ad70ac0e192b7213eca1d8ece4f88ba949c45a740b839c9763fe155a6f1debd237cb059a6eff00609c7eb5cc61cf7c71eb4aa9f2e372b0cfdeaa585a11da0bee2bd9c3b1bd378bbc412a8cc96c31d196dc71fe71599e20b8bad766b69f5711ddbda1cc1bd4011f20f0075e40eb5517207afb74c548acdd14918f4ed5a469c22ef1493f42a3ee3bc7463b59bdf105ff0086f56d05357fb3d8eb0dbaed3ec8aee09c07d8d91b036d19e0f7c63349368e9ad5bf85b4e3a8ada5b785e3d905bac2d8ba90e3e766c9c6768e07bfad22899892a4fbd2a0922943a921947aff004aeaa55b966a5249db5f339ea61a2e2f9346686ad2f8874bbe826b364582dc324f6e0068e738272dead90a31c1150e93ae786fc55b85fd92da6a50ae6786525654ec4a4a065867b38ae23e236a5ace81e2e7f1069334b0c1a8aa19d0fcf199428565753c1071919f5f6abfe13f1b697ab5c7993692f6daa94d84db45e6a4cbdc0fe25fa722bdb8e329f4763cb952947a1e8291d8f87a485b5e96fada19e22d04ee18ef39c021954e40e77103b015dff85fe1847796f71240c24864b55b8d6164be48a4450a4a4d1023993760853c8070df7b15c136afac78c3c1f6ba15f5c5c5c5ae8bbdb4d8ae89c5b863cc7923201c0ebfc80ad9f0bead736fa5d9e91a0dbdc36a77424b6bcb6c1665214ec9cb671c743db1c573d58c6ac6eece25c7dd7e64579f10bc41e04b1f10786f4ad72feda4d62030ea73dbe5581dc089e2c7dc66859f95e7eef719ae3fe3547e16b1b0d165f03a69736a57b37969169803bc906dfbf2019e8db7e76e7e639ef56ee3529678604bebc59ae2d233119bca2acc0312037b8ce07b015c9ebb6f0c525c6a36fa3bb5c3ca61492d2d813e5104ef1b790c70724f4c81dabcfc2e0634947f7b7e56ecafd1f47aea6b527372bb8d91d5fc56b6d1344f115af873478645bebcb5171716eafbfcac31c313db201eb59daf78723f10f8066b68b67f6859b99ed406192428dcbf423f502b1b43b8f12ea73244741ba958f96ad2864579572172412390bf5fc2bd37e0ec30af8e9a210cc2258a558fcf652e4ec21d5940c7a77f5aee8c1aa3ece72e6d37b6e4d1af3a35e1560ed24ce3be01f8a85e78666f0c6aa6659ac763da1fbad243e6a65013dd491f81f6af6ef11ebb1c1a24932e8fa8c89756ee5437c808c104e71cfd6abfc4cb5b2b7f0fd8c70410c39d52d40f2a303fe5a83dab77c6572e7c2f78b2cacc2daca548c67ee8da4902b0e5ac9d3e597ba9bbf9ab3b5be76f923ab175e9d7ad3ab1872f36b6bdf5ebdb738c7d526b7f8542d9341964b74d2c2f98f39da57cbf51838e7b62bc33e3c1bd8be2cde7d922654974cb389f030a57ecebdcf619233f866be80d4248e3f81adf3f03461b509ede5f3fcebc2be3d497371f126e602cef15b59daaaa7641e4213fa9ef5d128466b964ae8e58dee72ba6e85358f893488893b6f1966511cfb8328e7903faf352f88b47d557c5d7d29d2afc4465256436afb483dc1c62a2b161616f36b0f87548a48022b8f30315c86c1e83deaaf86f59be9662cfac5c59c7fde6b87e31ecbf5a54ed077ff3ff008268a2e5eec7a9d2f802ddcf8803491b2f951b1c3291eddeba0d43529ec3e20e8725b5d496b35b473dc47344e51e36c000a91c83d7a5617867c492c179234970356d8b80934b26d5cf7cf073c563f8fbc493dcf8920b98acaded6486dbca1f662cb90c49e724f34549b954b25a77feb5fc0a8c5c159ee77f79afde24778f0cd205b8466b891ce5a4fe22493dc9cf3d6bc2350beb4bd860bb28c97aae5ae884c2b8ec41f53dc56ef8a35cd42e6c77aef8087c32c770e55c11ca953c63deb9bd5a089773d84ad2d9e73965dac0e06722a614a30e69456af7f3e9a952a93945464f45b796b7d3e7a8b35d5c5fccb0c5fbb4e800e8a0f6af4af04f8705b68706a090e1648f064966dab21ff6431c13f415e6ba4bad9c2f733aef0e311479c191bfa01debd134ff001636ad6f6f15bd92a2daa2c3248cf848f81908bcf7e6a2a5cba76bea47e34d265d57455485e38e4864de4cadb41c03919f5ad7f03eb9749a35a697a8c4df68540904f1e1d645ce17763907b734f84228912750f1961bc30fbe0fa7e15d27817c24eba845aa4ab17d8e26df02c7cf987b31c7f2f5af3f198afabae67fd33e8326c956653e54ddd3d6ddbbff005fa9a1a959b43a3f94f8f36561bf078fa7d0555b5b031471a95c773ffa11fd02fe75d435a7da2fbceb98ff0076a73b4f1bbdbdbdcd6578c2e20b1d3e4757c4930da831d01ead8f73d3d857cad2955c5e2142f7727aff005e87ec15961724cb6559c6d1846d15ddbd979ddeafe6ce1f506596f99885ff0058481f4eff00ceb9dd67c4b049243f6579b6e409f0803f5ec4fa8ef5bb218f7aa4eeb17983cb567c7de6faf7af3cb806d35430dc22bb5b485491c872a71f957dd534af647e03524deacdfd63c493c1e6c7a2dc5f58c574c0c6cf739915549f97231d7773f4ae67c497d2bdeedd44cd7114b003b8c84b090f21c93d48cf43d6ba1d2fc4b0e9fa6fd99740b0b993767cfbe8164233d40ae73c5574d797cd78b1423cce248628c46980001b1470302b58479558c6576dc99951228ba2f24e5a38c86de3ef484f200f7aedfe1c6b3a9ea57526916e2358958cfb1547c8bd080ddb0392c6b84900108f21f78cec55db86427ae4773db35ade15d7cf872e257861593cf84c32c87af51f77d863f1a99ad0709599eebf0bc2b6a575683fe3e5e3c4273c1c72c07be307f0aeb12cedb4d5f3afd77428dbe619c1603f841f7e9f89f4af2bb199a186ca486e4b5c5c46b3294382dc6723df079f7cd696a3addfdfc6ab757924f8e0293d48af031794fd6312aaf3593dd7a76f53eff27e30fececae584f6779abf2be9aebaf5d3f1db4333c692497e35024f9525e0631055246ee4851f962b8192d35068ff007d0491e173b648caf18f715e91a65c4e2f9650a9242ca732071956f4c771fd6b5008dd491e63641e31eb5ed2a9cba58f889479df337a9e496da3dd5ca33c70236debfbd45c7e048a77fc23fad052e9a3dc95efb1462bd524850ae1e3326473b501c1f7f5a56582324077403aed400134fdb3ec2f648f2bfec8d504641d0ef781823c927f95654da16ba6523fb1efe438c2b081b763d1b8e47eb5ed5b0310cb27e60e685525588957dc1c81f8d1ed9f617b14fa9e39e1cd3bc4da6ead1dc43a4dfa2b1f2e77fb39c946e180e38e3d3dabd3d45e3c2cb0c06066cecf300c27500919c9e8091ef5b0d1c8761591768eb8edf8d4437a8264e7e61ef9159b9b65c69a472171f0db489e669e4d46ef323179022ae3713938cfd6b4745f0b58e9b6c6d92eaf26841fbaf36d03d86d1c0e7a56e49e5993e772a1873fbbce3f2a924453b7cb973e985fe9d693937b8d422b64337211900f038c0fe54c76b77e48f6fba38a95a3712e77eec0c95c67151e199727b1c602d22867956add62858e793e50cd27d8ac9be47d3edce472760e7ebc7352471b15dcdb482d8183fe4d0a80a90064fb70734c0864d3b4c32313650876187fdd8e9fe7150ff63e9db772d9c218aeccaae3e5c631f4e4d5efb3c9b76e761f2fccdace3714ce3207719a6c292199635032cc157009249381c0193f85172742a2e95a7c4eae96a54a8017f78c3fad3e3d3ada350ca9263b3798d9c7a024f4f6ab37492453bc1346c8d131464c72a475c8fad22c527979896460080ec49e09e40a0765d858ced3b411f3648c63f1a6a10092460e303e6a5c3abe5b3b7ae41ff1e9402de7609793fbbc60d032599555b851d0606695940ec39c74ea2abc7ace94c7f77a95a8f4f9c5576f10e89136d6d5a2183ce013fc857172cbb15cd1ee68aeddc1b3f7bb914b2602f32360f6e6b9db9f1869693058a29a78cf4746fe871532f8bf4468f7b0ba4619ff009643fc6abd954ec2f691ee6d2c419771491bd3e944687705287e6ef9ae66efc75611ee10dadc4b81d4b8507f9d5293e2049b71069d00cf4df2b1c7e58ab587aafa0bdac1753b9f2f2a07ccdfece69dc2f051ba74cf4af3abbf19eb33b060f1431f40b1a707df249354a6d7b5a914bcd772aa37f7485ab584a8f727db44f4e99d1bf7661578c8c32b60a9fa83504296168c45b416b6dfdf31ed4fe55e59f6dba6ca1bc942f53976c544d333c9f3cc54e3381cd68b06fab25d6f23d4d753b28f747fda70c7bbef013800fd79abb67e38974ad26f6d2cb5ab754bd2a27f26541210b9e158723af4ef5e38a87396665efc838fa7d7de98414766452847439e08f535a470dcba2910ea27ab47a847e24d156dfcd17f0e7fba5b07f5151ffc25ba12cde79ba659c28f9b1938f62335e6532e5550fcf8ef9c7ffaa9d83b77295c0380a067f5ff001aa8e1a31774d8a5539959a3d1dfe20e936f2fcab732b29c8648f6f3ec735d37c3bf8abe0fd335e8f50d465d415424acc16d4b33330c75071eb5e29e5a8411e396390718dd5249e49976b429e60c70a71d3dfd2ba55d2b5ee73ba506ef6b1f466bdf1e3e1aea51a429a1eaf74b0cf1ca8646f288756c83f7fa0239c8aa7adfed0b1279889e0ed245bc80ef171a9c72b11dfe5456ce471d6be7e863671f2c6a1d78505462a2d8523c3af39c63231f80a9e52b911ec127ed41a8ae96d671787ec74f11c4890c0213346bd8af51f2818c71dab83f106bd378d75e9b5bbd92392e27657952388a2fca0053b7b600fe75c7dfd94722b2c52907f8908e0522db5ca2c8914fe5f9c02b812952cb8e94acd3d09e53abd36dee75bd3af62d2e159db3e5467cd45f308eb82c40a8e6f0478d6cedf0fe1abe651cee855655fcd09cd7336f6b2adafd9208f193f2b75c9ef81f8549666f20b7db0cf224c3a1572b4d5efaa2acfa1d5f85ac6f2d3cf4bcb2b8b69dd8622962657c63ae08ce3ad64788fcc7d6ae8a8659236d9861d30318c55ad23c5de31d334ffb25a7882f2d91e4dcc62900918ffbc467a7be2b1af2e2f2e269ae2e2596e269a4692499d8b3bb1ea49eff005a95cee4eeb4f5d7f22ac3ae3734242c786da03aff007ab1e788c6cdb4b2c64ed972394fa8ad78567f2f2aea848fe2cfe954f508664b8328daae47cdb7e6561ee3bd69e44b3366989c1ce377ca9cfdd515de7c168edece3d46f6ea5814ac4a61495800a727f7a47703b7bd70c16332f9cf12c6231ca6786fa536e1ee01dc1c892600be0e30074158cd68ee38cacee7adbde9d511ae21779369f99981dc7fda39ed5d0f837c49a968abb2df32c1272d0b7233dc8f4ae37c37ac4369e0186ee69a25bb924292a6f00cae3ee023b71cf3ea6b4acee7cad285e19beced2af08e7a738ebefce3e95cd56942ac1c2a46e8f47078caf84acabe1e6e325d57f5afa33d02fbc6ed2c3fbbb248d8fa9ce2b90d5b547bebc633bb48cbd4551966920822324b0c7e66305a41f81cd67ea1acd9e9faec3665f73ce42b484e0459e87f1e3f3acb0f84a1874fd946d73af32ceb1f9938bc5d572b6cb4497c9597cc8fc6860bfd2999af5235b6957ed3f2b310c47ca0e3a0f7c56159e8525f102c750b1b9973955f3595ff001dc01f5aeea1f0f69e14c91da44e67c349217dc4f719f5fe5532e849106922b18c9c9f98b16fe66baa352cac796e9b6f5382b9f0a6bc8cdb6da075ce7e4b807f0e719aab75e16f11c7f27f67798b20f982c88475efcd7a8f97e527ef59f0bc003b7e14ab141e66ff002656623aa83c63d4e718a3db483d923c8e6f0878851430d3bccddfdd954e3ea41c8a1bc13e2311ac8f6518eca04e8768fa66bd6764665504303cf07038ff000a2e0795e5b44519d8f3c13b7eb47b56c5ec6270de16f0ff008a34ed41649ee60962fb33c5087b82e22f438c7ae7a7ad7496ba55d882dd2f7519be58991d6103e766c82727918cf15a64b3dc88c491b9ea700fca7f0e94e8a32f1ee5f307cd8f9fbf350d96a2915346b4834bd3d6ced8c9e5c4495de771e4f73577cd54e4ca71ea3b1a63196599a311ed651d060e78ed46c60db9900caf036edc71d7d69143db76e186650df78b6403f4a333c6a061486fef71fce9908f30ae54300bce3807f0feb4d85e607aee8f1cfcbfe7bd0048b2b2c8594e17f871db9f4ed51c6f2f5dbbdb19ca9e49f7f435247349b890b1af3fc3c9fc476a8cc9c2867dee0ff7412a3d4f7a0074724832aa9cbfde049c8a7accfb8132328ecbc1e9f5ef498fdd329224d9d80ea3eb524602953208c228fbce39c8f43da9011bc9197c977c6d3819fe669ece4b0f2b6f03b8e8692442555fccdf1b9e46e0703d862a275902fccedb54f1b8f3d7d7d2801e92b6fdc19fae304633fd6a4f3199b6e5b9e141e09fa7ad431b82b80065480723ef03db3526ec850abb437f106ea3da8183cbb1c6d505fbee1cfe1524322b46d868ced3f2aff8d446d1ddbe6055463738e481dff9d3238a166021b5e8bfcbd3d68d0352c7fcb5ddb219013c81de9d196cb1f2c02bd091f77d327b5555c3ee0bbb007071c0fa0a2e0cb16c70eea3f89b20673ed9a2c172c31db202b6ff003bb640dc0a9fae7bd3176a7eed2029838daadc28ff00eb76f4a6868f86f3097e85718fc7a544f33139898e187386278f5238a2c2269add668d55e12f83bc1dfd31ea41a0ce873f28c74192467029ad79b57cbdbca8e993cfbfb52add43c16b70463a9e719ebd7bd3d40e366f096ab6db3ca92ce5e321594e31efff00eba58b47d6e29d647d1f4e9191b236caca3e98dd5d94b22d94724ef2465235dd2310c7031d862b5351d22f574f5d48a6fb38f1189d30cae48046d1ff00021f4ef55ed191ece279dde45a948b9bbf035bed0d92d6ae5091f81ac56d3af1e66326977914201f962819ca8f73dfeb5eb171f61b9b380dae997b0944c4f70e7891b8c90070b8391d6b9ed63c2e7505262d7b5185933b55a40ca7d80183551abdf414a9df63cee45d8ac1a09226ecd226d3f88c75fa54782e7cc3b49e77051e9d80ae9752f076b4832f70976139dcee57f9e7350ffc231e258e0cad923950182acb1b281f43d4d6fcf1ee65c92ec63eed9f318554f524fd3a63b0a6b473b02ff28c9e1b6e73c7f2a9b56b3d4ec99a0d46d6489b3bb94c0fc31c556b79517e4128563d4839aa113a19fcb29bf6af2d82bb73ee7dbda98a37cbe488f6b337ce54039fa669924abb7cc552cac318600f3ebed4cd8ca36b2121c0c312771f7f6a622dec8e762a93411ed3f3b48092c7dc6393f4a174fba96ed6382e6dfe6fb8e640a001f5c555923da142aec214e761cfe27f0ab96d729159b0fb25a4934678924572df5cee03f4a977185c586a1699599a2ea48fde236d1ec01a8d23776de209647feea83b79ee6b534ef18eaf6e8b029b4312ff007a0ed8f5ce71f8d6943e3dbf3959b4db7918f0a6072bc7a735379f62ad1ee73bfd9da99906fd3aeb61e5dbc86c01db8c7f2a864b7bb064736b711c607df685828f73e82bb29bc7d9daaba5c71360f324dbb8fc17f4cd1078a59f60935d361bf81143a796fcd89c63a718a5cd3ea87cb1ee719292518957008eb29c71eb93d8d323456c2a264b1cb161fc8e457713e93e1fd56e81b8f134f7f248a4b46260807fc040e0fb0a6df781f4796d985add5c46cabc13f3851ea471eb47b58f50f66ce256dc282c02fe19c531042cc7f7aec7eeaf41cfaf3ed5a7ab786b59b09da48e137709eb241d4fd57a8ace9ed6fedadc43f63b88f00870d11ff0ad1493d991cad742cdadbe9cd204bbd585b6ec8262819ff33c55a6d12c6e6e1574cf10d85c12bc2cee603f886e3f5a3c272f874b791afc36687fbe7cddff0042436d1f9575567e19f08cfb6e2ca0376a3961e7978c0f620e79f7ace53e565c637472f3786f5b833b6cfed0179f32de659067f0355e5b0d4a16293d85d2f1c9f2cb73f8715e95a6da58d8ab2d958c36ea0725631961f5fe956f70128762e79c29fba147b567ed9f634f64bb9e41751dc430091ed2e5632dc97858807be0d575f2ee777956f332e3285626ce40f615ec3740b2e5215db20c9937e78ebf85332a8cac83273f390095c53f6fa6c4fb2f33c4feced7336cb6825df8f994216c91ec0714874fd4216dd258dcabc9f7498187e5915edf1b08d9ba46e73bb6f61f4feb52195966511b121b92a78c9f5c8a5edefd03d8aee78c0f07788a7837ae8b79b1be62cc00273dc826bae9740f15ea3e1fb084adb58c76d100527937bc84703200e38aed9a49126604b28504ee2bf7f9ed81f4eb4c6b991f74aecd83c63f847d3fc2a1cdbe852a714615f783a5d52187cfd41adfc9403cb840c6eef927df8fc2aea683a70d506a2f06eba1cee3939c0c74e98e9c63b55d3216f2e43233a3e47039033d3d8fe753c93421719c2b0046e5c1523d3fc6a6ecbb223fb4ccdc79df3838dbb06011dc01d6ac4266672a46e627240fe11f4ef554cb34797914ec6fba83820fa74fd296198cb85611a9e8c31f366a6c3b965a7712388c60719c0ce3a5482788481258c943ce78e0fad5008cbb428f994720b6793ed9c1a448c3aef323c837636a71b31ebd38a7ca82e68318e1236fcadd7a727e82a19240f0e235dad925980c647a73d2a194486e1d90348cb8230fc01f4a7c1f6811b24d12063ca6eeac7b7cb4ac1723ddbd57ca6451e9b464fd3f5a8a4f37e5312ae557e7639f9b3f8d4ac97122aa797e5fcc43333e0b1f40076fc69668e38a72b295df9c6d60542631542086e8a460ce8aa738c01ce78fcea4915d5bcdf31954f420127f4a6178cae50c8f81853b4f07d413d6a285a7708aaa1b0d9dee79fc47ad0048ff00313308ff008721ff0089ce7926a0652e7702db4138e3bfa73d6a68a56f3892031fba09e981ea0f2693e60ea8c36ee3f780e83d850035d9c9ddb5149cb023382401dcd48ef19ff56df330cc876e07d067ad30f9259525237648c107728cf278a746b1bb790aad9560a15b851c71cd002472869320f18e0636d13346a5371dac71b7040c9fc7ea2a663187916768f09c05739da3f0fc3a547e5c13158f6420edc2fcd800e7b8eb40c647e56dc29ebc004e327bfeb48d32823767b000658f34f985b2b8f94820fcac9dcff4ef4ffddb336186ee492e3181e80d021b25d42aac1641e663d00c542c432e5645da5ba93d7f0a24b6657dca8adfc40afa7438cd396d495dc7e5183b0e79c51a06a3f713301e66cc9c329ffeb7e1f953942c2c1828f979f9ce70de98f4a8648a59119cc913320cf23b7af4eb491c2ca9b9c063b7839dbbbf11400030893cbc12ee7ae7839ee31d3ae29d23becf2c80caa71bb1cfe63a8a58a20dfbd65c103682cbd0e7b11ef4d962465c492c6183e793827da8027f2d608d0621937b7cbf3739f4e3d2a092781226e7218ed25401f2fbfe351c6ac72252c70d8da49c28f6a7fd9d1e4c4122ef2a4043d7a679f506811343240e46c555765da5ca7cadea727e82a1dc8a78915430c6f07191cf4ed5060190c691b103ab291db8ce0f5e73535baf9726e9c809938382723e98e28026825695d61823248070a5feff00be2891a445d855d464e304f7ea79e95a4d7170fa7fd82ec59380eacb29b744914018dbbd40247b1cf35405bfcccc0ac807f11e01a9b95a92dbeaba85bd9bdac57b75e548bfeada53b14e79c0c7b9e9deaa2cf72edb50371f75b3cb7a0cfa62a69236f2f6b2a3719f9685b48b68fde1552bd038c9ff00014f400b796e2256324030dc02473f403b5364bb312b85cb06237024800f5ea3d2a6cc715b8569073c11bb2dd3822a10a645fddc9bb69dc4b8dbf80fad20d4267b99f6c8d711c8bdc32b1dbf893cfe5597a9c7ac3b7976369a5ed5ff00968f66a7f9ff003ad589a47991259123df8fbdb5b1f853afe2486e81669197ef8382031f4069a76135738abcd375dfb56e3a6e9123bae4b450282073c9cf1da9a9e1ad7ef2e13ed7f64b7897a6c289c7d1075fad75de6a496aac238e3c823715c30f5e067b54f0c2e8a803c2f1cbc962e7e41eac71fd6b4f692447b3471d77a35b5882cda05e5f066e1a3bc08c07aed03a77e6b0ae34ad5966261d1aeb664e15d777e7eb5e9f6f145129dcde7479e83fcf5a726c6d8cb6a594b6cfde019cfae3b53559a074d33ca2e2cf5748c7da34e9a260dc9688edf4c13d2a64d075e76568f4e999987c8a9b5931eb9fcebd37ed110924dde6228380c4f07d7a7f2a1a388a1600bb93c294e7f3aaf6efb13ec977383b5f096b770e649d6dad7031991c3b67dc2f15a56be075f38c97babfccc3eec6bf9e589fe95d249242212af6d37c8369c1c64f6e3fcf4a974f669216712f9728e3660631eb8a8756452a7131ad3c29a25990e8924ae5b3bcc87e6fcb0056dc31234cb04785503e6f9890a7ebce6a191de31e4bbf9ab9dc413d79ff001c539d5a093cd40a55bae075cf5c5436deecb5644b1bc714cc546f907552320e73daa53f697b58e455d9193c92327150431f9b26197cb3d01650307de87b7b5f30aed91f6101981e3f9d48c8ef2d74bbdc9bcb5b7ba6c9dbbedc15031d73804f3ef4e8e1b282111410470938deb12845faf1f4a648f146d93fea4b1da473b8fa9a9edcc52318e042c71b804c951c738e39c62ab512b08cb2ed95fcb89401c139f9be949e65c47b640afb790703b8ea39a995031c4abf230c292a4ed1ebed49e41999a58999e25e18aa92ab81c74ed52323b8b895b62b0c8fbc7e639fc7dfd852a48acbb962609d705bf9fb523aca242d284468ff00846739f5a45b623cb56bd51bc72c54ed5cf2327a629f4016e264e3c94da24c7ca074f63f4a9243bae16129b598618824718f41515bcef16628b040f9b0c9f2b1cf51ebcd4b32cc196e43ab6f3829b7a1ee33e9fce900d68dda0448e66914642ab21db81dd80f5c52790cd1b4ab1c6a91005b67ca5413d7d71f4abb3666876ac89c7dd6c119e3a01deaa5bc0cf205c393d15508cfe945c086de2d8f24aa4ac9210007248619ea298ae515fcd766563821b1f21f5e3b75abf1c7133989646dc08c90c0a8f63556ee296dae99a20be547c9dc47d323db24629dee1622bb80b4823170b2aa73ba352323d81ebc0a8892fba272542b7c87a163efe95a4b1c9ca31d9c0dad81b94f3d7d4556cbb49e58483730c3162769e7afb53b8ac477113060e234f2e3f943a02339ef9eff005a55f99c12ce19b23ee93f5c9ab32dbdd05d9e5ed91012be63edcfd01ffebd478822cfda27c3b2f624ed3f45fe6695c2c2f9cc36b121760f9640801cf53d39fa527da8ca8b3a481849c72dcb7a8fd7ad25fcb6f14267591553230d2b9001f43e9c53becf01b0170b3c6c93361b69e430e723eb46831cacd2e4b46049b8b020f4c7a763f5aaf3b2001a74612b1e91fcd93f5ef4b0bac8d96b73bb1d79181ea4ff009cf4a7c91ee902ccb1a2904a3f964b381e981c5021bbdc47bd57760708ff002b8fa7f8d399a45937c70beec64b7000f604fd69d6c1cfdc32329e5801c8fa52c8d0ace525ba918eee2356dcbc7ae3ff00d540c6cecad1acab232b0fd3f1f4f7a5f35c3952615de33907730e39ff0023ad1753bdc2e0796031c11b7191edd066a95c35c450e040ac5b97936646dff6463ef7f8534ae26c9ade3c950f3ab039507b819e87bfe5d2acf970ac6d952e0b732be588fc7d3f3aa31a4c6659205926565ca80bcf1e8073d074a9049b9a45b891b2e3e5519c93df8a2c04d2c1073e53c6c01190a872c0679c9a8523db2332a96ddf32f4f97da8591bce56259a32a3e6c74e7804fe14f6ba8de78c332ef662546cc038ec40e280d07db2c914db4c7e49dc4ee661b893ed8e9fad32ea19561772c4e4f1b792deb9f4fc69ead6f333c9020566389141f9411c9007e7510265871b94ed0599718fc28015d6e0ec924797ca0a42af439f41ea29619655dcb04e599b852f838f63ea286983c691c63681cedc1ebeb8ec69f18df1189239ddc02ccc5073cf6f5039a0004570d18983c385525983652439ecb8ebf4a5904a6dda7781635dd800e7af7c0fd7352c22dd22da06edca48f90952718ebfe1482696e14471b5d30c6d3b17b03db3df148640ed0bb466469513cb1b49e83d7047a9fe74e86257564ff96854edcfcd93ef51b40efba4c08b61c0da4a93e84fa9e3a513595cc196d88182a92300e3df9e3d29fcc915845f673033ac722e1b3c0c1c67820d2ee22e15bcb85ffdff0095ba7f9e29b722e5ee94ce3eca540f2c851bbf1edd49e9448a5d9a3552aaa321e46386fc474a009a468542ec3db2a3a30a8d964788984b6e2d856f3783dba8a6ef377b6dc95246017550bb71dc74f7ab9bc42bb4b47205071820f6ee68d8657637a1b6c9b9550fcbe627f207a8a6c7280be523ee6ee428c8e7afd3e953c13f9ebbd9149d9fc63767d78a5b38d7685015581e081ce3eb486453279df244255503e695f0b9f5c0152b0b6085e13fbceac7b7eb4c87ecb73be678dc6e6db9ddcfa55afb118f6a2ac6625404823938edd28d81146e3caf2fcc2c5fe50a429182debc53adde40cd1a90aae0ee1bf8cfa934f40648c4436c2a64c46a83201f7cd58bdd32782de3966991c5c70c00f4fca968067a9f3199a3f2446a087ca8193ec4f7a7c8f2f96ae6486553fc3b4aeccfb9ebdaa768eda3863448d972a0f5fe59e94f5b78ee5d8876566e3ee8007d3d0d17416650b78d43395076b0dc7d0fd7d4d22ec66f23322330ce19be5f6e4f6ad1d4e23115770ade67dec71f9761d2a9a40ad7003aab160325b27f4a7701cbba63b10aa770fbb6f3ea29d67e68567dd31913eef94c0679e770ed55125430abc4a55598a0cf51ef8a8ae980ddb1dd8c4c371618c9c718ebc53b0ae68caa9e42111e5777de600f27b54917991c7b6668b000ca21f9f19fee8acc9a50d092d2caccac06d206d1ee0f5eb488b1bee81916572c4979074fa014ac172edc4de5b6242db00c820eec8cf4a688619a557192d8f9b6027f3edc0a8f7244de4f232ca032f6fa7a74a2e2f0496ff64b7530c122e58afdf2c33efd2801fb9567d862f9641fbb8db1963db83497371747964b758d3eea83fc5ead8f7151f9d0d92f9ca64959d768f3146318efebd29d713a3696f24f0ee9565c2156da0371cf03a77c6280095ae95a491a09b183b896c8527dc9ce2acc7f22e372bc6c065cf255bb727f1a6daadc158a09e62cd8cfca481cf3535d33dbdd410388e433920311d00ee41ea690c80184295827c3641c601381d79c7f9cd29b8861fbb991ce46e27047e1c76a492c239aebed0646da8df326d183d68997edb1fda244882aa7ca110290338edd7a530068dde2db1b6e2c30c19f008e7046698a26863fb1cb2cd1f50555fa8efc8ebf4a7f901e46dc7f87231d07e1f950f13fd98dcf9bf228185dbc9c9c7d3f4a0435de3658e2b78dd6d9d70b1cca59dc8f6e83afeb4b70264daabc053c2b375e7a71dbaf4a8fed076ac986791a3dc77370141c63df9a64c61322a286db1e0f23ae4f4f719cd3b0c2fa6696e942c51c023c809133380727919fa52b6cb68bce79a3f3188d8ca7bf7ce3ff00d42a5842346cdb9d56105cedc673dc8f7a75c436a3f791a3989802be610cc0639f4009a42b0b6f3de32ac4b1b3ac84e5d4e147d18f7a679b24f29412796a1ba8c6411d07f3a4d4a3314227695c85638c751d3a7e755a0945eea4c5a5963fb3a0076003729e7ea4d3df50269238d7f7918693beee99c7f5cd2c69298564de14642beec8e7b11dcf3fca97720dd1be7c960182aa8e1bb727b5319d65532292be548ebb48cf23bd003d5d1e49226ba8c804f972c99dbc0f4e79cd3a48e59d49fb2088c63e690fdefa919a3ccb69583c9190aad860802e4d588e38d83388d5507de03396fc696c3239268a5b0f2a4572e8010dc8c0ee0e4f00718fad568e181b74880984121dc36e271e94fbab88dd8e5037967cb50c83b1c73cd450ba4ac5a17902c6c06c60307923a76e94c5b8eba36eee42b331f2f3b3f8876e4918c536148d76c4e8cad9c15209073cf18e9da9d31b6331648d976f3dbe623ae7eb9a8ade759a32194e3713b73804a91939f7a35b0ba968c86d601223ed49b0bd3e53e83daa4b7d96d3884b170df3ba86fbf9eea4fbe69970e1e6657766dbb500da3001e807b0a629b69215730e15895520fcdbb1827dbda9144ce59959e2864283e625c8c804607be7a74f5a68924c14558d9a25f99770dca3e9d8e69ff668e1468d0fcb1b1ebd7d3af7a453e55f1567cacd19ce573ca8c83edc51a011c700b9b68cc9298e456256191983b719241c73d6a492e608e08ed03c4bb0e142c7ca9ff69bfcf3556e1a49ee7697fdf22643e31819e403d6a4d4a18e190e19f7ae3739e490471f8f14ec2b92cae228d24329d8011c1c056c77e33eb9a647b16369177466438dca7209073ce7df1551667564944acd048d92a461b1f875ab764cd70c1e3da98192ac3218f6cfa516b20b82c525bef92e6e3d1b0d1614f19040ebf8d462179dbcc255411b8464f5cfa7f3fc6ad78874cbdb0d3ed750bdbb8ee239382a170e0ffbddc7e55421bc486101958ae482c3ef363d7b76a3a5c5a5cbb25ac7f6654976b24831c390c71df8e4608c60fad25c25b85187669570a10904e3b8e3a8a66a1a9acefbda040a99c058c2ee3d79aab1dedbdcd89b96b52ab20dca15c0239c1078e47b50931e84b72c1ee3ce82d95650a3193f28c8e7af38a96da78626d93ee5b99005501c6deb93c1aad6fba3790c78658d772ac9d978e33f9d356e95d594c285b71dae57907a1a7615cd0fb4a2b85c83c9c06c9007b8078a9d240547966358d548254fcc79e0fbf6aca80a3ceb8c872837646467f3f7a81fca923955cc8ad9c129818c1c71fa52e51dd9b92cb95c33b2f195f97bfa11d29b6ed6bf696372f2112101769c7cfcf7cf1f85509af6e52da3496432ac048da4f51d3afb62a58656ba4674d88c08e0a679ce01073c7e5458772ddc5bec7f986d46700995558f07fbfd8f3fad33529ad595408f217864620647b11d7f1aa179670c9711dc092503781b477c7afe22aeca37c6246232a3e60171f97e54682d48e3923b9b6120091b16eacc011f975038ed4d956486e99248d259b96055c6d231c739c01f8d43e5c7359ab08d3e662df3039e3df351492c4b7296655d84b1fc859bee8e9d298ae7ffd9); + +-- -------------------------------------------------------- + +-- +-- Table structure for table `pelanggaran` +-- + +CREATE TABLE `pelanggaran` ( + `id_pelanggaran` int(11) NOT NULL, + `nama_pelanggaran` varchar(50) NOT NULL, + `kategori` int(11) NOT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `pelanggaran_mahasiswa` +-- + +CREATE TABLE `pelanggaran_mahasiswa` ( + `id_pelanggaran_mhs` int(11) NOT NULL, + `id_pelanggaran` int(11) NOT NULL, + `deskripsi` varchar(50) NOT NULL, + `status_pelanggaran` varchar(50) NOT NULL, + `lampiran` blob NOT NULL, + `bukti_selesai` varchar(50) NOT NULL, + `nim` varchar(50) NOT NULL, + `id_pelapor` varchar(50) NOT NULL, + `id_role` varchar(50) NOT NULL, + `tanggal_lapor` date NOT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `pelanggaran_tendik` +-- + +CREATE TABLE `pelanggaran_tendik` ( + `id_pelanggaran_tendik` int(11) NOT NULL, + `nama` varchar(50) NOT NULL, + `status_pelanggaran` varchar(50) NOT NULL, + `deskripsi` varchar(50) NOT NULL, + `sanksi` varchar(50) NOT NULL, + `lampiran` blob NOT NULL, + `nip` varchar(50) NOT NULL, + `id_pelapor` varchar(50) NOT NULL, + `id_role` varchar(50) NOT NULL, + `tanggal_lapor` date NOT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `prodi` +-- + +CREATE TABLE `prodi` ( + `id_prodi` int(11) NOT NULL, + `nama` varchar(50) NOT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; + +-- +-- Dumping data for table `prodi` +-- + +INSERT INTO `prodi` (`id_prodi`, `nama`) VALUES +(2, 'Informatika'); + +-- -------------------------------------------------------- + +-- +-- Table structure for table `role` +-- + +CREATE TABLE `role` ( + `id_role` int(11) NOT NULL, + `nama` varchar(50) NOT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; + +-- +-- Dumping data for table `role` +-- + +INSERT INTO `role` (`id_role`, `nama`) VALUES +(1, 'admin'), +(3, 'Mahasiswa'); + +-- -------------------------------------------------------- + +-- +-- Table structure for table `sanksi` +-- + +CREATE TABLE `sanksi` ( + `id` int(11) NOT NULL, + `id_pelanggaran_mhs` int(11) NOT NULL, + `sanksi` varchar(50) NOT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; + +-- +-- Indexes for dumped tables +-- + +-- +-- Indexes for table `admin` +-- +ALTER TABLE `admin` + ADD PRIMARY KEY (`nip`), + ADD KEY `role` (`role`); + +-- +-- Indexes for table `dosen` +-- +ALTER TABLE `dosen` + ADD PRIMARY KEY (`nip`), + ADD KEY `role` (`role`,`id_kelas`); + +-- +-- Indexes for table `karyawan` +-- +ALTER TABLE `karyawan` + ADD PRIMARY KEY (`nip`), + ADD KEY `role` (`role`); + +-- +-- Indexes for table `kelas` +-- +ALTER TABLE `kelas` + ADD PRIMARY KEY (`id_kelas`), + ADD KEY `id_prodi` (`id_prodi`); + +-- +-- Indexes for table `mahasiswa` +-- +ALTER TABLE `mahasiswa` + ADD PRIMARY KEY (`nim`), + ADD KEY `id_prodi` (`id_kelas`), + ADD KEY `role` (`role`); + +-- +-- Indexes for table `pelanggaran` +-- +ALTER TABLE `pelanggaran` + ADD PRIMARY KEY (`id_pelanggaran`); + +-- +-- Indexes for table `pelanggaran_mahasiswa` +-- +ALTER TABLE `pelanggaran_mahasiswa` + ADD PRIMARY KEY (`id_pelanggaran_mhs`), + ADD KEY `nim` (`nim`), + ADD KEY `id_pelanggaran` (`id_pelanggaran`); + +-- +-- Indexes for table `pelanggaran_tendik` +-- +ALTER TABLE `pelanggaran_tendik` + ADD PRIMARY KEY (`id_pelanggaran_tendik`), + ADD KEY `nip` (`nip`); + +-- +-- Indexes for table `prodi` +-- +ALTER TABLE `prodi` + ADD PRIMARY KEY (`id_prodi`); + +-- +-- Indexes for table `role` +-- +ALTER TABLE `role` + ADD PRIMARY KEY (`id_role`); + +-- +-- Indexes for table `sanksi` +-- +ALTER TABLE `sanksi` + ADD PRIMARY KEY (`id`), + ADD KEY `id_pelanggaran_mhs` (`id_pelanggaran_mhs`); + +-- +-- AUTO_INCREMENT for dumped tables +-- + +-- +-- AUTO_INCREMENT for table `kelas` +-- +ALTER TABLE `kelas` + MODIFY `id_kelas` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=3; + +-- +-- AUTO_INCREMENT for table `pelanggaran` +-- +ALTER TABLE `pelanggaran` + MODIFY `id_pelanggaran` int(11) NOT NULL AUTO_INCREMENT; + +-- +-- AUTO_INCREMENT for table `pelanggaran_mahasiswa` +-- +ALTER TABLE `pelanggaran_mahasiswa` + MODIFY `id_pelanggaran_mhs` int(11) NOT NULL AUTO_INCREMENT; + +-- +-- AUTO_INCREMENT for table `pelanggaran_tendik` +-- +ALTER TABLE `pelanggaran_tendik` + MODIFY `id_pelanggaran_tendik` int(11) NOT NULL AUTO_INCREMENT; + +-- +-- AUTO_INCREMENT for table `prodi` +-- +ALTER TABLE `prodi` + MODIFY `id_prodi` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=3; + +-- +-- AUTO_INCREMENT for table `role` +-- +ALTER TABLE `role` + MODIFY `id_role` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=4; + +-- +-- AUTO_INCREMENT for table `sanksi` +-- +ALTER TABLE `sanksi` + MODIFY `id` int(11) NOT NULL AUTO_INCREMENT; + +-- +-- Constraints for dumped tables +-- + +-- +-- Constraints for table `admin` +-- +ALTER TABLE `admin` + ADD CONSTRAINT `admin_ibfk_1` FOREIGN KEY (`role`) REFERENCES `role` (`id_role`); + +-- +-- Constraints for table `dosen` +-- +ALTER TABLE `dosen` + ADD CONSTRAINT `dosen_ibfk_1` FOREIGN KEY (`role`) REFERENCES `role` (`id_role`); + +-- +-- Constraints for table `karyawan` +-- +ALTER TABLE `karyawan` + ADD CONSTRAINT `karyawan_ibfk_1` FOREIGN KEY (`role`) REFERENCES `role` (`id_role`); + +-- +-- Constraints for table `kelas` +-- +ALTER TABLE `kelas` + ADD CONSTRAINT `kelas_ibfk_1` FOREIGN KEY (`id_prodi`) REFERENCES `prodi` (`id_prodi`); + +-- +-- Constraints for table `mahasiswa` +-- +ALTER TABLE `mahasiswa` + ADD CONSTRAINT `mahasiswa_ibfk_2` FOREIGN KEY (`id_kelas`) REFERENCES `kelas` (`id_kelas`), + ADD CONSTRAINT `mahasiswa_ibfk_3` FOREIGN KEY (`role`) REFERENCES `role` (`id_role`); + +-- +-- Constraints for table `pelanggaran_mahasiswa` +-- +ALTER TABLE `pelanggaran_mahasiswa` + ADD CONSTRAINT `pelanggaran_mahasiswa_ibfk_1` FOREIGN KEY (`nim`) REFERENCES `mahasiswa` (`nim`), + ADD CONSTRAINT `pelanggaran_mahasiswa_ibfk_2` FOREIGN KEY (`id_pelanggaran`) REFERENCES `pelanggaran` (`id_pelanggaran`); + +-- +-- Constraints for table `pelanggaran_tendik` +-- +ALTER TABLE `pelanggaran_tendik` + ADD CONSTRAINT `pelanggaran_tendik_ibfk_1` FOREIGN KEY (`nip`) REFERENCES `karyawan` (`nip`); +COMMIT; + +/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; +/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; +/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; From c504864fd77901ef2ec86b783f4f2094d838dbea Mon Sep 17 00:00:00 2001 From: Ekya1411 <142556703+Ekya1411@users.noreply.github.com> Date: Wed, 11 Dec 2024 08:30:55 +0700 Subject: [PATCH 02/67] change : programming concept --- Tata_Tertib/action/auth.php | 78 ++++ Tata_Tertib/assets/icon/book-open-icon.svg | 1 + .../assets/icon/caret-down-icon-filter.svg | 1 + Tata_Tertib/assets/icon/classroom-icon.svg | 1 + Tata_Tertib/assets/icon/filter-icon.svg | 1 + Tata_Tertib/assets/icon/log-out-icon.svg | 1 + Tata_Tertib/assets/icon/user-list-icon.svg | 1 + Tata_Tertib/assets/sidebar.php | 56 ++- Tata_Tertib/controllers/StatusPelangaran.php | 0 Tata_Tertib/core/Koneksi.php | 15 + Tata_Tertib/core/Session.php | 60 +++ Tata_Tertib/index.php | 110 +++-- Tata_Tertib/login/Login_Admin.php | 97 ---- Tata_Tertib/login/img/logo_polinema.png | Bin 3856008 -> 0 bytes Tata_Tertib/login/koneksi.php | 6 - Tata_Tertib/login/login.proses.php | 37 -- Tata_Tertib/login/login_mahasiswa.php | 113 ----- Tata_Tertib/login/lupa_pass.php | 0 Tata_Tertib/login/mahasiswa_dashboard.php | 0 Tata_Tertib/models/Admin.php | 150 +++++++ Tata_Tertib/{controllers => models}/Dosen.php | 0 .../{controllers => models}/Hukuman.php | 0 .../{controllers => models}/Pelanggaran.php | 0 .../StatusPelanggaran.php} | 0 Tata_Tertib/views/Admin/table-dosen.php | 43 -- Tata_Tertib/views/Admin/table-karyawan.php | 43 -- Tata_Tertib/views/Admin/table-mahasiswa.php | 43 -- Tata_Tertib/views/Admin/tabs.js | 91 ---- Tata_Tertib/views/Dosen/Daftar_dosen.php | 0 Tata_Tertib/views/Dosen/Komplain_dosen.php | 0 Tata_Tertib/views/Dosen/dashboard-admin.php | 59 --- Tata_Tertib/views/Dosen/script.js | 40 -- Tata_Tertib/views/Dosen/style.css | 332 -------------- Tata_Tertib/views/Dosen/table-mahasiswa.php | 48 -- .../views/Pelanggaran/Daftar_pelanggaran.php | 143 ------ .../views/Pelanggaran/Edit_Pelanggaran.php | 0 .../views/Pelanggaran/Tambah_pelanggaran.php | 0 .../views/Pelanggaran/get_dosen_data.php | 21 - .../views/Pelanggaran/get_karyawan_data.php | 21 - .../views/Pelanggaran/get_mahasiswa_data.php | 22 - Tata_Tertib/views/Pelanggaran/script.js | 69 --- Tata_Tertib/views/Pelanggaran/style.css | 413 ------------------ Tata_Tertib/views/Pelanggaran/tabs.js | 119 ----- .../views/dashboard/admin-table-dosen.php | 55 +++ .../views/dashboard/admin-table-karyawan.php | 57 +++ .../views/dashboard/admin-table-mahasiswa.php | 55 +++ .../tabs.js => dashboard/admin-tabs.js} | 18 +- .../{Admin => dashboard}/dashboard-admin.php | 16 +- .../views/{Admin => dashboard}/script.js | 0 .../views/{Admin => dashboard}/style.css | 57 ++- 50 files changed, 673 insertions(+), 1820 deletions(-) create mode 100644 Tata_Tertib/action/auth.php create mode 100644 Tata_Tertib/assets/icon/book-open-icon.svg create mode 100644 Tata_Tertib/assets/icon/caret-down-icon-filter.svg create mode 100644 Tata_Tertib/assets/icon/classroom-icon.svg create mode 100644 Tata_Tertib/assets/icon/filter-icon.svg create mode 100644 Tata_Tertib/assets/icon/log-out-icon.svg create mode 100644 Tata_Tertib/assets/icon/user-list-icon.svg delete mode 100644 Tata_Tertib/controllers/StatusPelangaran.php create mode 100644 Tata_Tertib/core/Koneksi.php create mode 100644 Tata_Tertib/core/Session.php delete mode 100644 Tata_Tertib/login/Login_Admin.php delete mode 100644 Tata_Tertib/login/img/logo_polinema.png delete mode 100644 Tata_Tertib/login/koneksi.php delete mode 100644 Tata_Tertib/login/login.proses.php delete mode 100644 Tata_Tertib/login/login_mahasiswa.php delete mode 100644 Tata_Tertib/login/lupa_pass.php delete mode 100644 Tata_Tertib/login/mahasiswa_dashboard.php create mode 100644 Tata_Tertib/models/Admin.php rename Tata_Tertib/{controllers => models}/Dosen.php (100%) rename Tata_Tertib/{controllers => models}/Hukuman.php (100%) rename Tata_Tertib/{controllers => models}/Pelanggaran.php (100%) rename Tata_Tertib/{controllers/Mahasiswa.php => models/StatusPelanggaran.php} (100%) delete mode 100644 Tata_Tertib/views/Admin/table-dosen.php delete mode 100644 Tata_Tertib/views/Admin/table-karyawan.php delete mode 100644 Tata_Tertib/views/Admin/table-mahasiswa.php delete mode 100644 Tata_Tertib/views/Admin/tabs.js delete mode 100644 Tata_Tertib/views/Dosen/Daftar_dosen.php delete mode 100644 Tata_Tertib/views/Dosen/Komplain_dosen.php delete mode 100644 Tata_Tertib/views/Dosen/dashboard-admin.php delete mode 100644 Tata_Tertib/views/Dosen/script.js delete mode 100644 Tata_Tertib/views/Dosen/style.css delete mode 100644 Tata_Tertib/views/Dosen/table-mahasiswa.php delete mode 100644 Tata_Tertib/views/Pelanggaran/Daftar_pelanggaran.php delete mode 100644 Tata_Tertib/views/Pelanggaran/Edit_Pelanggaran.php delete mode 100644 Tata_Tertib/views/Pelanggaran/Tambah_pelanggaran.php delete mode 100644 Tata_Tertib/views/Pelanggaran/get_dosen_data.php delete mode 100644 Tata_Tertib/views/Pelanggaran/get_karyawan_data.php delete mode 100644 Tata_Tertib/views/Pelanggaran/get_mahasiswa_data.php delete mode 100644 Tata_Tertib/views/Pelanggaran/script.js delete mode 100644 Tata_Tertib/views/Pelanggaran/style.css delete mode 100644 Tata_Tertib/views/Pelanggaran/tabs.js create mode 100644 Tata_Tertib/views/dashboard/admin-table-dosen.php create mode 100644 Tata_Tertib/views/dashboard/admin-table-karyawan.php create mode 100644 Tata_Tertib/views/dashboard/admin-table-mahasiswa.php rename Tata_Tertib/views/{Dosen/tabs.js => dashboard/admin-tabs.js} (85%) rename Tata_Tertib/views/{Admin => dashboard}/dashboard-admin.php (69%) rename Tata_Tertib/views/{Admin => dashboard}/script.js (100%) rename Tata_Tertib/views/{Admin => dashboard}/style.css (89%) diff --git a/Tata_Tertib/action/auth.php b/Tata_Tertib/action/auth.php new file mode 100644 index 0000000..56ffa92 --- /dev/null +++ b/Tata_Tertib/action/auth.php @@ -0,0 +1,78 @@ +db; + +$act = isset($_POST['act']) ? strtolower($_POST['act']) : (isset($_GET['act']) ? strtolower($_GET['act']) : ''); + +switch ($act) { + case 'login-mhs': + $username = $_POST['username']; + $password = $_POST['password']; + + $query = $db->prepare('SELECT * FROM mahasiswa WHERE nim = ?'); + $query->bind_param('s', $username); + $query->execute(); + $data = $query->get_result()->fetch_assoc(); + + if ($data && $password === $data['password']) { + $session->set('is_login', true); + $session->set('username', $data['nim']); + $session->set('level', $data['role']); + $session->set('nama', $data['nama']); + $session->set('status', $data['status']); + $session->commit(); + header('Location: ../index.php'); + } else { + $session->setFlash('status', false); + $session->setFlash('message', 'Username dan password salah.'); + $session->commit(); + header('Location: ../index.php'); + } + break; + + case 'login-tendik': + $username = $_POST['username']; + $password = $_POST['password']; + $tables = ['admin', 'dosen', 'karyawan']; + + $data = null; + foreach ($tables as $table) { + $query = $db->prepare("SELECT * FROM $table WHERE nip = ?"); + $query->bind_param('s', $username); + $query->execute(); + $result = $query->get_result(); + if ($result->num_rows > 0) { + $data = $result->fetch_assoc(); + break; + } + } + + if ($data && $password === $data['password']) { + $session->set('is_login', true); + $session->set('username', $data['nip']); + $session->set('level', $data['role']); + $session->set('nama', $data['nama']); + $session->set('status', $data['status']); + $session->commit(); + header('Location: ../index.php'); + } else { + $session->setFlash('status', false); + $session->setFlash('message', 'Username dan password salah.'); + $session->commit(); + header('Location: ../index.php'); + } + break; + + case 'logout': + $session->deleteAll(); + header('Location: ../index.php'); + break; + + default: + echo 'Aksi tidak dikenali.'; + break; +} diff --git a/Tata_Tertib/assets/icon/book-open-icon.svg b/Tata_Tertib/assets/icon/book-open-icon.svg new file mode 100644 index 0000000..1a1a82b --- /dev/null +++ b/Tata_Tertib/assets/icon/book-open-icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Tata_Tertib/assets/icon/caret-down-icon-filter.svg b/Tata_Tertib/assets/icon/caret-down-icon-filter.svg new file mode 100644 index 0000000..e05d669 --- /dev/null +++ b/Tata_Tertib/assets/icon/caret-down-icon-filter.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Tata_Tertib/assets/icon/classroom-icon.svg b/Tata_Tertib/assets/icon/classroom-icon.svg new file mode 100644 index 0000000..5405b0f --- /dev/null +++ b/Tata_Tertib/assets/icon/classroom-icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Tata_Tertib/assets/icon/filter-icon.svg b/Tata_Tertib/assets/icon/filter-icon.svg new file mode 100644 index 0000000..daca1fc --- /dev/null +++ b/Tata_Tertib/assets/icon/filter-icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Tata_Tertib/assets/icon/log-out-icon.svg b/Tata_Tertib/assets/icon/log-out-icon.svg new file mode 100644 index 0000000..a7cc7b9 --- /dev/null +++ b/Tata_Tertib/assets/icon/log-out-icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Tata_Tertib/assets/icon/user-list-icon.svg b/Tata_Tertib/assets/icon/user-list-icon.svg new file mode 100644 index 0000000..c226fcb --- /dev/null +++ b/Tata_Tertib/assets/icon/user-list-icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Tata_Tertib/assets/sidebar.php b/Tata_Tertib/assets/sidebar.php index 23b2282..ad4249d 100644 --- a/Tata_Tertib/assets/sidebar.php +++ b/Tata_Tertib/assets/sidebar.php @@ -1,11 +1,61 @@ +get('level')) { + case '1': + return '../views/dashboard/dashboard-admin.php'; + case '2': + return '../views/dashboard/dashboard-admin.php'; + case '3': + return '../views/dashboard/dashboard-admin.php'; + case '4': + return '../views/dashboard/dashboard-admin.php'; + default: + break; + } +} +?> + \ No newline at end of file diff --git a/Tata_Tertib/controllers/StatusPelangaran.php b/Tata_Tertib/controllers/StatusPelangaran.php deleted file mode 100644 index e69de29..0000000 diff --git a/Tata_Tertib/core/Koneksi.php b/Tata_Tertib/core/Koneksi.php new file mode 100644 index 0000000..27a24f1 --- /dev/null +++ b/Tata_Tertib/core/Koneksi.php @@ -0,0 +1,15 @@ + db = new mysqli($this -> host, $this -> username, $this -> password, $this -> database); + if ($this -> db -> connect_error){ + die("connection failed: ". $this -> db -> connect_error); + } + } +} \ No newline at end of file diff --git a/Tata_Tertib/core/Session.php b/Tata_Tertib/core/Session.php new file mode 100644 index 0000000..befe265 --- /dev/null +++ b/Tata_Tertib/core/Session.php @@ -0,0 +1,60 @@ +deleteFlash($key); + return $value; + } + public function deleteFlash($key) + { + if (isset($_SESSION['flash'][$key])) { + unset($_SESSION['flash'][$key]); + } + } + + public function deleteAllFlash() + { + if (isset($_SESSION['flash'])) { + unset($_SESSION['flash']); + } + } + + public function deleteAll() + { + session_destroy(); + } + public function commit() + { + session_commit(); + } +} diff --git a/Tata_Tertib/index.php b/Tata_Tertib/index.php index aeecc02..62ef360 100644 --- a/Tata_Tertib/index.php +++ b/Tata_Tertib/index.php @@ -1,9 +1,39 @@ +db; + +if ($session->get('is_login') === true) { + switch ($session->get('level')) { + case '1': + header('Location: views/dashboard/dashboard-admin.php'); + break; + case '2': + # code... + break; + case '3': + # code... + break; + case '4': + # code... + break; + default: + # code... + break; + } +} +?> + + - Login e-TibPol + Login Form +
-

SELAMAT DATANG

- Polinema Logo - - + - + + \ No newline at end of file diff --git a/Tata_Tertib/login/Login_Admin.php b/Tata_Tertib/login/Login_Admin.php deleted file mode 100644 index 9940559..0000000 --- a/Tata_Tertib/login/Login_Admin.php +++ /dev/null @@ -1,97 +0,0 @@ - - - - - - Login Tenaga Pendidikan - - - - \ No newline at end of file diff --git a/Tata_Tertib/views/dashboard/admin-table-mahasiswa.php b/Tata_Tertib/views/dashboard/admin-table-mahasiswa.php index 1aa99f3..e655240 100644 --- a/Tata_Tertib/views/dashboard/admin-table-mahasiswa.php +++ b/Tata_Tertib/views/dashboard/admin-table-mahasiswa.php @@ -88,8 +88,7 @@ -