Compare commits

..

1 Commits

Author SHA1 Message Date
Admin 5154464646 update(ttw): run send image in backgound 2025-12-11 14:47:34 +07:00
159 changed files with 5107 additions and 22111 deletions

BIN
.DS_Store vendored

Binary file not shown.

View File

@ -3,7 +3,6 @@
namespace Modules\Admin\app\Http\Controllers;
use App\Http\Controllers\Controller;
use Carbon\Carbon;
use Illuminate\Http\Request;
use Modules\Admin\app\Models\Category;
@ -30,45 +29,4 @@ class CategoryController extends Controller
$data = Category::where('c_type', '=', $type)->where('c_active', '=', 1)->select('id', 'c_code', 'c_name', 'c_value', 'c_type')->get();
return $data;
}
public function workDays()
{
$saturday_work_schedules = Category::where('c_type', 'SATURDAY_WORK_SCHEDULE')
->get();
return response()->json([
'data' => $saturday_work_schedules,
'status' => true
]);
}
public function updateWorkDays(Request $request)
{
$request->validate([
'c_code' => 'required|date_format:d-m-Y',
]);
$schedule = Category::where('c_type', 'SATURDAY_WORK_SCHEDULE')->first();
if (!$schedule) {
$schedule = Category::create([
'c_type' => 'SATURDAY_WORK_SCHEDULE',
'c_name' => "Ngày bắt đầu làm việc thứ 7 trong năm",
'c_code' => $request->c_code,
'c_value' => Carbon::now()->year,
'c_active' => true,
'created_at' => now(),
'updated_at' => now(),
]);
} else {
$schedule->update([
'c_code' => $request->c_code,
]);
}
return response()->json([
'status' => true,
'message' => 'Saturday work schedule updated successfully'
]);
}
}

View File

@ -1,359 +0,0 @@
<?php
namespace Modules\Admin\app\Http\Controllers;
use App\Http\Controllers\Controller;
use App\Traits\HasFilterRequest;
use App\Traits\HasOrderByRequest;
use App\Traits\HasSearchRequest;
use Illuminate\Http\Request;
use Modules\Admin\app\Models\ElectricityBill;
use Illuminate\Support\Facades\Log;
use Barryvdh\DomPDF\Facade\Pdf;
use Carbon\Carbon;
use Illuminate\Support\Facades\Storage;
class ElectricityBillController extends Controller
{
use HasOrderByRequest;
use HasFilterRequest;
use HasSearchRequest;
/**
* Get all electricity bills with pagination
*/
public function index(Request $request)
{
try {
$bills = new ElectricityBill;
// Order by
$this->orderByRequest($bills, $request);
// Filter
$this->filterRequest(
builder: $bills,
request: $request,
filterKeys: [
'billing_date' => self::F_TEXT,
]
);
// Search
$this->searchRequest(
builder: $bills,
value: $request->get('search'),
fields: ['billing_date', 'notes']
);
$responseData = $bills
->leftJoin('users as creator', 'electricity_bills.created_by', '=', 'creator.id')
->leftJoin('users as updater', 'electricity_bills.updated_by', '=', 'updater.id')
->orderBy('electricity_bills.billing_date', 'desc')
->select(
'electricity_bills.*',
'creator.name as creator_name',
'updater.name as updater_name'
)
->paginate($request->get('per_page', 15));
return AbstractController::ResultSuccess($responseData);
} catch (\Exception $e) {
Log::error('Error fetching electricity bills: ' . $e->getMessage());
return AbstractController::ResultError($e->getMessage());
}
}
/**
* Create new electricity bill
*/
public function create(Request $request)
{
try {
$validated = $request->validate([
'billing_date' => 'required|string',
'previous_reading' => 'required|numeric|min:0',
'current_reading' => 'required|numeric|min:0',
'unit_price' => 'required|numeric|min:0',
'notes' => 'nullable|string',
]);
// Check if billing_date already exists
$existingBill = ElectricityBill::where('billing_date', $validated['billing_date'])->first();
if ($existingBill) {
return AbstractController::ResultError('Bill for this month already exists', 422);
}
// Calculate total amount
$consumption = $validated['current_reading'] - $validated['previous_reading'];
$totalAmount = $consumption * $validated['unit_price'];
$bill = ElectricityBill::create([
'billing_date' => $validated['billing_date'],
'previous_reading' => $validated['previous_reading'],
'current_reading' => $validated['current_reading'],
'unit_price' => $validated['unit_price'],
'total_amount' => $totalAmount,
'notes' => $validated['notes'] ?? null,
'created_by' => auth('admins')->user()->id ?? null,
]);
return AbstractController::ResultSuccess($bill, 'Electricity bill created successfully');
} catch (\Exception $e) {
Log::error('Error creating electricity bill: ' . $e->getMessage());
return AbstractController::ResultError($e->getMessage());
}
}
/**
* Update electricity bill
*/
public function update(Request $request, $id)
{
try {
$validated = $request->validate([
'billing_date' => 'sometimes|string',
'previous_reading' => 'sometimes|numeric|min:0',
'current_reading' => 'sometimes|numeric|min:0',
'unit_price' => 'sometimes|numeric|min:0',
'notes' => 'nullable|string',
]);
$bill = ElectricityBill::findOrFail($id);
// Check if billing_date already exists (excluding current record)
if (isset($validated['billing_date'])) {
$existingBill = ElectricityBill::where('billing_date', $validated['billing_date'])
->where('id', '!=', $id)
->first();
if ($existingBill) {
return AbstractController::ResultError('Bill for this month already exists', 422);
}
}
// Recalculate total if any reading or price changed
$previousReading = $validated['previous_reading'] ?? $bill->previous_reading;
$currentReading = $validated['current_reading'] ?? $bill->current_reading;
$unitPrice = $validated['unit_price'] ?? $bill->unit_price;
$consumption = $currentReading - $previousReading;
$totalAmount = $consumption * $unitPrice;
$bill->update(array_merge($validated, [
'total_amount' => $totalAmount,
'updated_by' => auth('admins')->user()->id ?? null,
]));
return AbstractController::ResultSuccess($bill, 'Electricity bill updated successfully');
} catch (\Exception $e) {
Log::error('Error updating electricity bill: ' . $e->getMessage());
return AbstractController::ResultError($e->getMessage());
}
}
/**
* Delete electricity bill
*/
public function delete(Request $request, $id)
{
try {
$bill = ElectricityBill::findOrFail($id);
$bill->delete();
return AbstractController::ResultSuccess(null, 'Electricity bill deleted successfully');
} catch (\Exception $e) {
Log::error('Error deleting electricity bill: ' . $e->getMessage());
return AbstractController::ResultError($e->getMessage());
}
}
/**
* Export electricity bill to PDF
*/
public function exportPdf(Request $request, $id)
{
try {
$bill = ElectricityBill::findOrFail($id);
// Get month name from billing_date
$consumption = $bill->current_reading - $bill->previous_reading;
$totalText = $this->numberToVietnamese($bill->total_amount);
$date = Carbon::parse($bill->billing_date);
$dateNow = 'Ngày ' . $date->day .
' tháng ' . $date->month .
' năm ' . $date->year;
// Generate PDF
$pdf = Pdf::loadView('admin::admin.electricity_bills.pdf', [
'bill' => $bill,
'consumption' => $consumption,
'dateNow' => $dateNow,
'totalText' => $totalText
]);
$fileName = 'electricity_bill_' . $bill->billing_date . '.pdf';
$filePath = 'electricity_bills/' . $fileName;
// đảm bảo folder tồn tại
if (!Storage::disk('public')->exists('electricity_bills')) {
Storage::disk('public')->makeDirectory('electricity_bills');
}
// 👇 render 1 lần
$pdfContent = $pdf->output();
// 👇 lưu file
Storage::disk('public')->put($filePath, $pdfContent);
// update DB
$bill->update(['file_path' => $filePath]);
// 👇 trả về đúng file đã tạo
return response($pdfContent)
->header('Content-Type', 'application/pdf')
->header('Content-Disposition', 'attachment; filename="' . $fileName . '"');
} catch (\Exception $e) {
Log::error('Error exporting electricity bill to PDF: ' . $e->getMessage());
return AbstractController::ResultError($e->getMessage());
}
}
/**
* Get electricity bill by ID
*/
public function show($id)
{
try {
$bill = ElectricityBill::with(['creator', 'updater'])->findOrFail($id);
return AbstractController::ResultSuccess($bill);
} catch (\Exception $e) {
Log::error('Error fetching electricity bill: ' . $e->getMessage());
return AbstractController::ResultError($e->getMessage());
}
}
/**
* Upload an attachment (PDF or image) for an electricity bill
*/
public function uploadAttachment(Request $request, $id)
{
try {
$request->validate([
'file' => 'required|file|mimes:pdf,jpg,jpeg,png,gif,webp|max:10240',
]);
$bill = ElectricityBill::findOrFail($id);
$file = $request->file('file');
$extension = $file->getClientOriginalExtension();
$filename = 'bill_' . $bill->id . '_' . time() . '.' . $extension;
$directory = 'electricity_bills/attachments';
if (!Storage::disk('public')->exists($directory)) {
Storage::disk('public')->makeDirectory($directory);
}
// Delete old attachment if exists
if ($bill->attachment_path && Storage::disk('public')->exists($bill->attachment_path)) {
Storage::disk('public')->delete($bill->attachment_path);
}
$path = $file->storeAs($directory, $filename, 'public');
$bill->update([
'attachment_path' => $path,
'updated_by' => auth('admins')->user()->id ?? null,
]);
return AbstractController::ResultSuccess($bill, 'Attachment uploaded successfully');
} catch (\Exception $e) {
Log::error('Error uploading electricity bill attachment: ' . $e->getMessage());
return AbstractController::ResultError($e->getMessage());
}
}
/**
* Delete the attachment of an electricity bill
*/
public function deleteAttachment($id)
{
try {
$bill = ElectricityBill::findOrFail($id);
if ($bill->attachment_path && Storage::disk('public')->exists($bill->attachment_path)) {
Storage::disk('public')->delete($bill->attachment_path);
}
$bill->update([
'attachment_path' => null,
'updated_by' => auth('admins')->user()->id ?? null,
]);
return AbstractController::ResultSuccess($bill, 'Attachment deleted successfully');
} catch (\Exception $e) {
Log::error('Error deleting electricity bill attachment: ' . $e->getMessage());
return AbstractController::ResultError($e->getMessage());
}
}
function numberToVietnamese($number)
{
$units = ["", "một", "hai", "ba", "bốn", "năm", "sáu", "bảy", "tám", "chín"];
$levels = ["", "nghìn", "triệu", "tỷ"];
if ($number == 0) return "không đồng";
$number = (int)$number;
$result = "";
$level = 0;
while ($number > 0) {
$threeDigits = $number % 1000;
if ($threeDigits != 0) {
$result = $this->readThreeDigits($threeDigits, $units) . " " . $levels[$level] . " " . $result;
}
$number = floor($number / 1000);
$level++;
}
return ucfirst(trim(preg_replace('/\s+/', ' ', $result))) . " đồng";
}
function readThreeDigits($number, $units)
{
$hundreds = floor($number / 100);
$tens = floor(($number % 100) / 10);
$ones = $number % 10;
$result = "";
if ($hundreds > 0) {
$result .= $units[$hundreds] . " trăm";
if ($tens == 0 && $ones > 0) {
$result .= " lẻ";
}
}
if ($tens > 1) {
$result .= " " . $units[$tens] . " mươi";
if ($ones == 1) {
$result .= " mốt";
} elseif ($ones == 5) {
$result .= " lăm";
} elseif ($ones > 0) {
$result .= " " . $units[$ones];
}
} elseif ($tens == 1) {
$result .= " mười";
if ($ones == 5) {
$result .= " lăm";
} elseif ($ones > 0) {
$result .= " " . $units[$ones];
}
} elseif ($ones > 0) {
$result .= " " . $units[$ones];
}
return trim($result);
}
}

View File

@ -1,517 +0,0 @@
<?php
namespace Modules\Admin\app\Http\Controllers;
use App\Http\Controllers\Controller;
use App\Traits\HasFilterRequest;
use App\Traits\HasOrderByRequest;
use App\Traits\HasSearchRequest;
use Illuminate\Http\Request;
use Illuminate\Support\Carbon;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Storage;
use Modules\Admin\app\Models\Admin;
use Modules\Admin\app\Models\Equipment;
use Modules\Admin\app\Models\EquipmentAssignment;
class EquipmentController extends Controller
{
use HasOrderByRequest;
use HasFilterRequest;
use HasSearchRequest;
/**
* Get all equipments with pagination + filter + search.
*/
public function index(Request $request)
{
try {
$equipments = new Equipment;
$this->orderByRequest($equipments, $request);
$this->filterRequest(
builder: $equipments,
request: $request,
filterKeys: [
'code' => self::F_TEXT,
'name' => self::F_TEXT,
'note' => self::F_TEXT,
]
);
$this->searchRequest(
builder: $equipments,
value: $request->get('search'),
fields: ['equipments.code', 'equipments.name', 'equipments.note']
);
// Optional filter: assigned (in use) vs warehouse
$assignedFilter = $request->get('assigned');
if ($assignedFilter === 'in_use') {
$equipments->whereNotNull('equipments.current_user_id');
} elseif ($assignedFilter === 'warehouse') {
$equipments->whereNull('equipments.current_user_id');
}
$responseData = $equipments
->leftJoin('users as holder', 'equipments.current_user_id', '=', 'holder.id')
->orderBy('equipments.updated_at', 'desc')
->select(
'equipments.*',
'holder.name as current_user_name'
)
->paginate($request->get('per_page', 15));
return AbstractController::ResultSuccess($responseData);
} catch (\Exception $e) {
Log::error('Error fetching equipments: ' . $e->getMessage());
return AbstractController::ResultError($e->getMessage());
}
}
/**
* Get a single equipment by code (for barcode scan).
*/
public function showByCode(Request $request)
{
try {
$code = trim((string) $request->get('code'));
if ($code === '') {
return AbstractController::ResultError('Code is required', 422);
}
$equipment = Equipment::leftJoin('users as holder', 'equipments.current_user_id', '=', 'holder.id')
->where('equipments.code', $code)
->select('equipments.*', 'holder.name as current_user_name')
->first();
if (!$equipment) {
return AbstractController::ResultSuccess(null, 'Equipment not found');
}
$history = EquipmentAssignment::leftJoin('users', 'equipment_assignments.user_id', '=', 'users.id')
->where('equipment_assignments.equipment_id', $equipment->id)
->orderBy('equipment_assignments.assigned_at', 'desc')
->select(
'equipment_assignments.*',
'users.name as user_name'
)
->get();
$equipment->history = $history;
return AbstractController::ResultSuccess($equipment);
} catch (\Exception $e) {
Log::error('Error fetching equipment by code: ' . $e->getMessage());
return AbstractController::ResultError($e->getMessage());
}
}
/**
* Get assignment history for an equipment.
*/
public function history($id)
{
try {
$history = EquipmentAssignment::leftJoin('users', 'equipment_assignments.user_id', '=', 'users.id')
->where('equipment_assignments.equipment_id', $id)
->orderBy('equipment_assignments.assigned_at', 'desc')
->select(
'equipment_assignments.*',
'users.name as user_name'
)
->get();
return AbstractController::ResultSuccess($history);
} catch (\Exception $e) {
Log::error('Error fetching equipment history: ' . $e->getMessage());
return AbstractController::ResultError($e->getMessage());
}
}
/**
* Get all users for assignment selectbox.
*/
public function userOptions()
{
try {
$users = Admin::orderBy('name', 'asc')
->select('id', 'name', 'email')
->get();
return AbstractController::ResultSuccess($users);
} catch (\Exception $e) {
Log::error('Error fetching user options: ' . $e->getMessage());
return AbstractController::ResultError($e->getMessage());
}
}
/**
* Create new equipment. Accepts multipart with optional image file.
*/
public function create(Request $request)
{
try {
$validated = $request->validate([
'code' => 'required|string|max:255|unique:equipments,code',
'name' => 'required|string|max:255',
'note' => 'nullable|string',
'current_user_id' => 'nullable|integer|exists:users,id',
'image' => 'nullable|file|mimes:jpg,jpeg,png,gif,webp|max:10240',
]);
$authId = auth('admins')->user()->id ?? null;
$imagePath = null;
if ($request->hasFile('image')) {
$directory = 'equipments/images';
if (!Storage::disk('public')->exists($directory)) {
Storage::disk('public')->makeDirectory($directory);
}
$imagePath = $request->file('image')->store($directory, 'public');
}
$equipment = DB::transaction(function () use ($validated, $authId, $imagePath) {
$now = Carbon::now();
$currentUserId = $validated['current_user_id'] ?? null;
$equipment = Equipment::create([
'code' => $validated['code'],
'name' => $validated['name'],
'note' => $validated['note'] ?? null,
'image_path' => $imagePath,
'current_user_id' => $currentUserId,
'assigned_at' => $now,
'created_by' => $authId,
]);
// Always create an initial assignment record so the history
// shows the very first state (warehouse or user).
EquipmentAssignment::create([
'equipment_id' => $equipment->id,
'user_id' => $currentUserId, // null = at warehouse
'assigned_at' => $now,
'note' => $currentUserId ? 'Initial assignment' : 'Initial — at warehouse',
'created_by' => $authId,
]);
return $equipment;
});
return AbstractController::ResultSuccess($equipment, 'Equipment created successfully');
} catch (\Illuminate\Validation\ValidationException $e) {
return AbstractController::ResultError($e->getMessage(), 422);
} catch (\Exception $e) {
Log::error('Error creating equipment: ' . $e->getMessage());
return AbstractController::ResultError($e->getMessage());
}
}
/**
* Upload / replace the equipment image (optional, post-create or edit).
*/
public function uploadImage(Request $request, $id)
{
try {
$request->validate([
'image' => 'required|file|mimes:jpg,jpeg,png,gif,webp|max:10240',
]);
$equipment = Equipment::findOrFail($id);
// Delete old image if present
if ($equipment->image_path && Storage::disk('public')->exists($equipment->image_path)) {
Storage::disk('public')->delete($equipment->image_path);
}
$directory = 'equipments/images';
if (!Storage::disk('public')->exists($directory)) {
Storage::disk('public')->makeDirectory($directory);
}
$path = $request->file('image')->store($directory, 'public');
$equipment->update([
'image_path' => $path,
'updated_by' => auth('admins')->user()->id ?? null,
]);
return AbstractController::ResultSuccess($equipment, 'Image uploaded');
} catch (\Exception $e) {
Log::error('Error uploading equipment image: ' . $e->getMessage());
return AbstractController::ResultError($e->getMessage());
}
}
/**
* Delete the equipment image.
*/
public function deleteImage($id)
{
try {
$equipment = Equipment::findOrFail($id);
if ($equipment->image_path && Storage::disk('public')->exists($equipment->image_path)) {
Storage::disk('public')->delete($equipment->image_path);
}
$equipment->update([
'image_path' => null,
'updated_by' => auth('admins')->user()->id ?? null,
]);
return AbstractController::ResultSuccess($equipment, 'Image deleted');
} catch (\Exception $e) {
Log::error('Error deleting equipment image: ' . $e->getMessage());
return AbstractController::ResultError($e->getMessage());
}
}
/**
* Update equipment basic info (code, name, note).
*/
public function update(Request $request, $id)
{
try {
$equipment = Equipment::findOrFail($id);
$validated = $request->validate([
'code' => 'sometimes|string|max:255|unique:equipments,code,' . $id,
'name' => 'sometimes|string|max:255',
'note' => 'nullable|string',
]);
$equipment->update(array_merge($validated, [
'updated_by' => auth('admins')->user()->id ?? null,
]));
return AbstractController::ResultSuccess($equipment, 'Equipment updated successfully');
} catch (\Exception $e) {
Log::error('Error updating equipment: ' . $e->getMessage());
return AbstractController::ResultError($e->getMessage());
}
}
/**
* Assign equipment to a user, or return to warehouse (user_id = null).
* Every state change is recorded: closes the previous open record AND opens
* a new one for the new holder (user or warehouse).
*/
public function assign(Request $request, $id)
{
try {
$validated = $request->validate([
'user_id' => 'nullable|integer|exists:users,id',
'note' => 'nullable|string',
]);
$authId = auth('admins')->user()->id ?? null;
$equipment = DB::transaction(function () use ($id, $validated, $authId) {
$equipment = Equipment::lockForUpdate()->findOrFail($id);
$now = Carbon::now();
$newUserId = $validated['user_id'] ?? null;
// No-op guard: if assigning to the same holder, skip to avoid duplicate history rows
if ($equipment->current_user_id == $newUserId) {
return $equipment;
}
// Close any currently open assignment (records who/Kho was holding it until now)
EquipmentAssignment::where('equipment_id', $equipment->id)
->whereNull('returned_at')
->update([
'returned_at' => $now,
'updated_at' => $now,
]);
// Always open a new assignment row — for a user OR for the warehouse.
// user_id = null means "currently at warehouse".
EquipmentAssignment::create([
'equipment_id' => $equipment->id,
'user_id' => $newUserId,
'assigned_at' => $now,
'note' => $validated['note'] ?? ($newUserId === null ? 'Returned to warehouse' : null),
'created_by' => $authId,
]);
$equipment->update([
'current_user_id' => $newUserId,
'assigned_at' => $now,
'updated_by' => $authId,
]);
return $equipment->fresh();
});
return AbstractController::ResultSuccess($equipment, 'Equipment assignment updated');
} catch (\Exception $e) {
Log::error('Error assigning equipment: ' . $e->getMessage());
return AbstractController::ResultError($e->getMessage());
}
}
/**
* Statistics: list users grouped with the equipments they are currently holding.
*/
public function userStatistics(Request $request)
{
try {
$search = trim((string) $request->get('search', ''));
$usersQuery = DB::table('equipments')
->join('users', 'equipments.current_user_id', '=', 'users.id')
->whereNotNull('equipments.current_user_id');
if ($search !== '') {
$usersQuery->where(function ($q) use ($search) {
$q->where('users.name', 'like', "%{$search}%")
->orWhere('users.email', 'like', "%{$search}%")
->orWhere('equipments.code', 'like', "%{$search}%")
->orWhere('equipments.name', 'like', "%{$search}%");
});
}
$userTotals = (clone $usersQuery)
->select(
'users.id as user_id',
'users.name as user_name',
'users.email as user_email',
DB::raw('COUNT(equipments.id) as equipment_count')
)
->groupBy('users.id', 'users.name', 'users.email')
->orderByDesc('equipment_count')
->orderBy('users.name')
->get();
$userIds = $userTotals->pluck('user_id')->all();
$devices = Equipment::leftJoin('users as holder', 'equipments.current_user_id', '=', 'holder.id')
->whereIn('equipments.current_user_id', $userIds)
->select(
'equipments.id',
'equipments.code',
'equipments.name',
'equipments.note',
'equipments.image_path',
'equipments.current_user_id',
'equipments.assigned_at'
)
->orderBy('equipments.assigned_at', 'desc')
->get()
->groupBy('current_user_id');
$result = $userTotals->map(function ($u) use ($devices) {
return [
'user_id' => $u->user_id,
'user_name' => $u->user_name,
'user_email' => $u->user_email,
'equipment_count' => (int) $u->equipment_count,
'equipments' => ($devices->get($u->user_id) ?? collect())->values(),
];
});
// Also include warehouse summary
$warehouseCount = Equipment::whereNull('current_user_id')->count();
return AbstractController::ResultSuccess([
'users' => $result,
'warehouse_count' => $warehouseCount,
'total_equipment' => Equipment::count(),
]);
} catch (\Exception $e) {
Log::error('Error fetching equipment user statistics: ' . $e->getMessage());
return AbstractController::ResultError($e->getMessage());
}
}
/**
* Delete equipment (and its history via cascade).
*/
public function delete($id)
{
try {
$equipment = Equipment::findOrFail($id);
$equipment->delete();
return AbstractController::ResultSuccess(null, 'Equipment deleted successfully');
} catch (\Exception $e) {
Log::error('Error deleting equipment: ' . $e->getMessage());
return AbstractController::ResultError($e->getMessage());
}
}
/**
* Export the (filtered) equipment list as CSV.
*/
public function export(Request $request)
{
try {
$equipments = new Equipment;
$this->filterRequest(
builder: $equipments,
request: $request,
filterKeys: [
'code' => self::F_TEXT,
'name' => self::F_TEXT,
'note' => self::F_TEXT,
]
);
$this->searchRequest(
builder: $equipments,
value: $request->get('search'),
fields: ['equipments.code', 'equipments.name', 'equipments.note']
);
$assignedFilter = $request->get('assigned');
if ($assignedFilter === 'in_use') {
$equipments->whereNotNull('equipments.current_user_id');
} elseif ($assignedFilter === 'warehouse') {
$equipments->whereNull('equipments.current_user_id');
}
$rows = $equipments
->leftJoin('users as holder', 'equipments.current_user_id', '=', 'holder.id')
->orderBy('equipments.updated_at', 'desc')
->select(
'equipments.id',
'equipments.code',
'equipments.name',
'equipments.note',
'equipments.assigned_at',
'equipments.created_at',
'equipments.updated_at',
'holder.name as current_user_name'
)
->get();
$filename = 'equipments_' . date('Y-m-d_His') . '.csv';
$callback = function () use ($rows) {
$out = fopen('php://output', 'w');
// BOM for Excel UTF-8
fwrite($out, "\xEF\xBB\xBF");
fputcsv($out, ['ID', 'Code', 'Name', 'Note', 'Current Holder', 'Assigned At', 'Created At', 'Updated At']);
foreach ($rows as $r) {
fputcsv($out, [
$r->id,
$r->code,
$r->name,
$r->note,
$r->current_user_name ?: 'Kho',
$r->assigned_at,
$r->created_at,
$r->updated_at,
]);
}
fclose($out);
};
return response()->stream($callback, 200, [
'Content-Type' => 'text/csv; charset=UTF-8',
'Content-Disposition' => 'attachment; filename="' . $filename . '"',
]);
} catch (\Exception $e) {
Log::error('Error exporting equipments: ' . $e->getMessage());
return AbstractController::ResultError($e->getMessage());
}
}
}

View File

@ -726,40 +726,6 @@ class TicketController extends Controller
];
}
/**
* Khởi tạo dữ liệu ngày phép cho user nếu chưa
*
* @param UserModel $user
* @param int $year
* @return LeaveDays|null
*/
private function initializeLeaveDaysForYear($user, int $year): ?LeaveDays
{
// Nếu là nhân viên chưa chính thức, ko cộng phép
if (!$user->is_permanent) {
return null;
}
// Nếu là nhân viên nghỉ việc, ko cộng phép
if ($user->is_separated) {
return null;
}
// Nếu chưa có dữ liệu năm hiện tại, tạo mới
// Số ngày phép bằng với tháng hiện tại
$leaveDaysInfo = new LeaveDays([
'ld_user_id' => $user->id,
'ld_day_total' => 1,
'ld_year' => $year,
'ld_additional_day' => 0,
'ld_note' => 'Khởi tạo ngày phép tháng 1 khi tạo ticket cho năm sau',
'ld_special_leave_day' => 0,
]);
$leaveDaysInfo->save();
return $leaveDaysInfo;
}
//Tính tổng số ngày nghỉ có phép đến tháng hiện tại
private function getTotalLeaveDaysInMonthToMonth($user, int $year, int $month): float
{
@ -779,13 +745,7 @@ class TicketController extends Controller
$leaveDaysInfo = LeaveDays::where('ld_user_id', $user->id)
->where('ld_year', $year)
->first();
if (!$leaveDaysInfo) {
$leaveDaysInfo = $this->initializeLeaveDaysForYear($user, $year);
if (!$leaveDaysInfo) {
return 0;
}
}
$totalAllocated = 0;
// Xử lý gửi ticket sau tháng hiện tại
if ($leaveDaysInfo && $user->is_permanent) {

View File

@ -8,12 +8,4 @@ use Illuminate\Database\Eloquent\Model;
class Category extends Model
{
use HasFactory;
protected $fillable = [
'c_type',
'c_name',
'c_code',
'c_value',
'c_active',
];
}

View File

@ -1,52 +0,0 @@
<?php
namespace Modules\Admin\app\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use App\Traits\HasCacheModel;
class ElectricityBill extends Model
{
use HasFactory;
use HasCacheModel;
public function __construct()
{
$this->table = 'electricity_bills';
$this->guarded = [];
}
/**
* Calculate total amount based on reading difference and unit price
*/
public function calculateTotal(): float
{
$consumption = $this->current_reading - $this->previous_reading;
return round($consumption * $this->unit_price, 2);
}
/**
* Get consumption in kWh
*/
public function getConsumption(): float
{
return $this->current_reading - $this->previous_reading;
}
/**
* Get user who created this record
*/
public function creator()
{
return $this->belongsTo(\App\Models\User::class, 'created_by');
}
/**
* Get user who updated this record
*/
public function updater()
{
return $this->belongsTo(\App\Models\User::class, 'updated_by');
}
}

View File

@ -1,37 +0,0 @@
<?php
namespace Modules\Admin\app\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Equipment extends Model
{
use HasFactory;
public function __construct()
{
$this->table = 'equipments';
$this->guarded = [];
}
public function currentUser()
{
return $this->belongsTo(\App\Models\User::class, 'current_user_id');
}
public function assignments()
{
return $this->hasMany(EquipmentAssignment::class, 'equipment_id')->orderBy('assigned_at', 'desc');
}
public function creator()
{
return $this->belongsTo(\App\Models\User::class, 'created_by');
}
public function updater()
{
return $this->belongsTo(\App\Models\User::class, 'updated_by');
}
}

View File

@ -1,32 +0,0 @@
<?php
namespace Modules\Admin\app\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class EquipmentAssignment extends Model
{
use HasFactory;
public function __construct()
{
$this->table = 'equipment_assignments';
$this->guarded = [];
}
public function equipment()
{
return $this->belongsTo(Equipment::class, 'equipment_id');
}
public function user()
{
return $this->belongsTo(\App\Models\User::class, 'user_id');
}
public function creator()
{
return $this->belongsTo(\App\Models\User::class, 'created_by');
}
}

View File

@ -1,98 +0,0 @@
<!DOCTYPE html>
<html lang="vi">
<head>
<meta charset="UTF-8">
<title>Bảng thanh toán tiền điện</title>
<style>
body {
font-family: DejaVu Sans, sans-serif;
font-size: 14px;
}
.text-center {
text-align: center;
}
.mt-10 {
margin-top: 10px;
}
.mt-20 {
margin-top: 20px;
}
table {
width: 100%;
border-collapse: collapse;
margin-top: 15px;
}
table, th, td {
border: 1px solid #000;
}
th, td {
padding: 8px;
text-align: center;
}
.no-border {
border: none;
}
.signature {
width: 100%;
margin-top: 50px;
}
.signature td {
border: none;
text-align: center;
}
</style>
</head>
<body>
<h3 class="text-center">BẢNG THANH TOÁN TIỀN ĐIỆN</h3>
<p class="text-center">({{ $dateNow ?? '' }})</p>
<div class="mt-20">
<p>- Tên doanh nghiệp: Công ty TNHH Kỹ Thuật Công Nghệ APAC</p>
<p>- số thuế: 0110038408</p>
<p>- Địa chỉ: Số 219/26/3 đường Lĩnh Nam, Phường Vĩnh Hưng, thành phố Nội, Việt Nam</p>
<p>- Tên chủ sở hữu cho thuê địa điểm sản xuất kinh doanh: Lâm Văn Mười</p>
<p>- Địa chỉ thuê: 50B31 tại Khu dân 91B giai đoạn 3, phường Tân An, thành phố Cần Thơ</p>
</div>
<table>
<thead>
<tr>
<th>Số điện đầu kỳ</th>
<th>Số điện cuối kỳ</th>
<th>Số điện tiêu thụ</th>
<th>Đơn giá</th>
<th>Thành tiền</th>
</tr>
</thead>
<tbody>
<tr>
<td>{{ number_format($bill->previous_reading) ?? 0 }}</td>
<td>{{ number_format($bill->current_reading) ?? 0 }}</td>
<td>{{ $consumption ?? 0 }}</td>
<td>{{ number_format($bill->unit_price) ?? '0' }}</td>
<td>{{ number_format($bill->total_amount) ?? '0' }}</td>
</tr>
</tbody>
</table>
<p class="mt-20">
- Tổng tiền thanh toán: <strong>{{ number_format($bill->total_amount) ?? '0' }} VND</strong>
({{ $totalText ?? '' }})
</p>
<table class="signature no-border">
<tr>
<td>
Người lập bảng <br>
(, ghi họ tên)
</td>
<td>
Đại diện doanh nghiệp<br>
(, ghi họ tên)
</td>
</tr>
</table>
</body>
</html>

View File

@ -23,8 +23,6 @@ use Modules\Admin\app\Http\Controllers\ProjectReviewController;
use Modules\Admin\app\Http\Controllers\ProfileController;
use Modules\Admin\app\Http\Controllers\TechnicalController;
use Modules\Admin\app\Http\Controllers\TestCaseForSprintController;
use Modules\Admin\app\Http\Controllers\ElectricityBillController;
use Modules\Admin\app\Http\Controllers\EquipmentController;
use Modules\Admin\app\Http\Middleware\AdminMiddleware;
/*
@ -151,8 +149,6 @@ Route::middleware('api')
'prefix' => 'category',
], function () {
Route::get('/get-list-master', [CategoryController::class, 'getListMaster']);
Route::get('/work-days', [CategoryController::class, 'workDays'])->middleware('check.permission:admin.hr');
Route::put('/update-work-days', [CategoryController::class, 'updateWorkDays'])->middleware('check.permission:admin.hr');
});
Route::group([
@ -175,38 +171,6 @@ Route::middleware('api')
Route::post('/handle-ticket', [TicketController::class, 'handleTicket'])->middleware('check.permission:admin');
});
// Electricity Bills
Route::group([
'prefix' => 'electricity-bill',
], function () {
Route::get('/', [ElectricityBillController::class, 'index'])->middleware('check.permission:admin.hr.staff.accountant');
Route::get('/{id}', [ElectricityBillController::class, 'show'])->middleware('check.permission:admin.hr.staff.accountant');
Route::post('/create', [ElectricityBillController::class, 'create'])->middleware('check.permission:admin.hr.staff.accountant');
Route::put('/{id}', [ElectricityBillController::class, 'update'])->middleware('check.permission:admin.hr.staff.accountant');
Route::get('/delete/{id}', [ElectricityBillController::class, 'delete'])->middleware('check.permission:admin.hr.staff.accountant');
Route::get('/export-pdf/{id}', [ElectricityBillController::class, 'exportPdf'])->middleware('check.permission:admin.hr.staff.accountant');
Route::post('/upload-attachment/{id}', [ElectricityBillController::class, 'uploadAttachment'])->middleware('check.permission:admin.hr.staff.accountant');
Route::delete('/delete-attachment/{id}', [ElectricityBillController::class, 'deleteAttachment'])->middleware('check.permission:admin.hr.staff.accountant');
});
// Equipments
Route::group([
'prefix' => 'equipment',
], function () {
Route::get('/', [EquipmentController::class, 'index'])->middleware('check.permission:admin.hr.staff.accountant');
Route::get('/users', [EquipmentController::class, 'userOptions'])->middleware('check.permission:admin.hr.staff.accountant');
Route::get('/user-statistics', [EquipmentController::class, 'userStatistics'])->middleware('check.permission:admin.hr.staff.accountant');
Route::get('/export', [EquipmentController::class, 'export'])->middleware('check.permission:admin.hr.staff.accountant');
Route::get('/by-code', [EquipmentController::class, 'showByCode'])->middleware('check.permission:admin.hr.staff.accountant');
Route::get('/history/{id}', [EquipmentController::class, 'history'])->middleware('check.permission:admin.hr.staff.accountant');
Route::post('/create', [EquipmentController::class, 'create'])->middleware('check.permission:admin.hr.staff.accountant');
Route::put('/{id}', [EquipmentController::class, 'update'])->middleware('check.permission:admin.hr.staff.accountant');
Route::post('/{id}/assign', [EquipmentController::class, 'assign'])->middleware('check.permission:admin.hr.staff.accountant');
Route::post('/{id}/upload-image', [EquipmentController::class, 'uploadImage'])->middleware('check.permission:admin.hr.staff.accountant');
Route::delete('/{id}/image', [EquipmentController::class, 'deleteImage'])->middleware('check.permission:admin.hr.staff.accountant');
Route::get('/delete/{id}', [EquipmentController::class, 'delete'])->middleware('check.permission:admin.hr.staff.accountant');
});
Route::group([
'prefix' => 'profile',
], function () {

View File

@ -24,11 +24,9 @@ class Kernel extends ConsoleKernel
// $schedule->command('daily:api-call')
// ->dailyAt('18:00');
// Chạy command vào ngày 01/01 lúc 00:00 mỗi năm
$schedule->command('initialize:leavedays')->yearlyOn(1, 1, '00:00');
// Chạy command vào ngày 01/04 lúc 00:00 mỗi năm
$schedule->command('leave:deduct')->yearlyOn(4, 1, '00:00');
// Chạy command vào ngày 31/12 lúc 23:59:59 mỗi năm
$schedule->command('initialize:leavedays')->yearlyOn(12, 31, '23:59:59');
$schedule->command('leave:deduct')->yearlyOn(3, 31, '23:59:59');
// Chạy buổi sáng lúc 12:00
$schedule->command('attendance:check S')->dailyAt('12:00');

View File

@ -3,7 +3,6 @@
namespace App\Jobs;
use App\Models\LeaveDays;
use App\Models\Notes;
use App\Models\User;
use Carbon\Carbon;
use Illuminate\Bus\Queueable;
@ -12,7 +11,6 @@ use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Modules\Admin\app\Models\Category;
use Illuminate\Support\Facades\DB;
class AddMonthlyLeaveDays implements ShouldQueue
{
@ -48,48 +46,15 @@ class AddMonthlyLeaveDays implements ShouldQueue
->where('ld_year', $this->year)
->first();
if (!$leaveDay && $this->month > 1) {
if (!$leaveDay) {
// Nếu chưa có dữ liệu năm hiện tại, tạo mới
$previousYearData = LeaveDays::where('ld_user_id', $user->id)
->where('ld_year', $this->year - 1)
->first();
$ld_additional_day = 0;
$ld_note = '';
if ($previousYearData) {
$ld_additional_day = $previousYearData->ld_day_total + $previousYearData->ld_additional_day + $previousYearData->ld_special_leave_day;
$totalLeaveDaysByMonth = Notes::join('categories', function ($join) {
$join->on('notes.n_time_type', '=', 'categories.c_code')
->where('categories.c_type', 'TIME_TYPE');
})
->select(
DB::raw('notes.n_user_id as n_user_id'),
DB::raw('notes.n_year as year'),
DB::raw('SUM(categories.c_value) as leave_days')
)
->where('notes.n_year', $this->year - 1)
->where('notes.n_user_id', $user->id)
->where('notes.n_reason', 'ONLEAVE')
->groupBy(DB::raw('notes.n_year'))
->first();
if ($totalLeaveDaysByMonth) {
$ld_additional_day = $ld_additional_day - $totalLeaveDaysByMonth->leave_days;
if ($ld_additional_day < 0) {
$ld_additional_day = 0;
}
}
if ($ld_additional_day > 0) {
$ld_note = "Cộng " . $ld_additional_day . " ngày phép tồn năm trước. \n";
}
}
// Số ngày phép bằng với tháng hiện tại
$leaveDay = new LeaveDays([
'ld_user_id' => $user->id,
'ld_day_total' => $this->month, // Số ngày phép bằng tháng hiện tại
'ld_year' => $this->year,
'ld_additional_day' => $ld_additional_day,
'ld_note' => $ld_note,
'ld_additional_day' => 0,
'ld_note' => 'Khởi tạo ngày phép đến tháng ' . $this->month,
'ld_special_leave_day' => 0,
]);
$leaveDay->save();

View File

@ -55,12 +55,10 @@ class DeductLeaveDays implements ShouldQueue
if ($usedOnleaveDaysTotal) {
if ($existingData->ld_additional_day > $usedOnleaveDaysTotal) {
$ld_note = "Trừ " . $existingData->ld_additional_day - $usedOnleaveDaysTotal . " ngày phép tồn năm trước. \n";
$existingData->ld_note = $existingData->ld_note . $ld_note;
$existingData->ld_note = $existingData->ld_note . "\n" . $ld_note;
$existingData->ld_additional_day = $usedOnleaveDaysTotal;
}
} else {
$ld_note = "Trừ " . $existingData->ld_additional_day . " ngày phép tồn năm trước. \n";
$existingData->ld_note = $existingData->ld_note . $ld_note;
$existingData->ld_additional_day = 0;
}

View File

@ -42,6 +42,16 @@ class InitializeLeaveDays implements ShouldQueue
continue;
}
// Kiểm tra xem dữ liệu của user này đã tồn tại cho năm hiện tại chưa
$existingData = LeaveDays::where('ld_user_id', $user->id)
->where('ld_year', $this->year)
->first();
if ($existingData) {
// Nếu dữ liệu đã tồn tại, bỏ qua user này
continue;
}
// Kiểm tra dữ liệu của user này trong năm trước
$previousYearData = LeaveDays::where('ld_user_id', $user->id)
->where('ld_year', $this->year - 1)
@ -51,7 +61,7 @@ class InitializeLeaveDays implements ShouldQueue
$ld_note = '';
if ($previousYearData) {
$ld_additional_day = $previousYearData->ld_day_total + $previousYearData->ld_additional_day + $previousYearData->ld_special_leave_day;
$ld_additional_day = $previousYearData->ld_day_total + $previousYearData->ld_additional_day;
$totalLeaveDaysByMonth = Notes::join('categories', function ($join) {
$join->on('notes.n_time_type', '=', 'categories.c_code')
->where('categories.c_type', 'TIME_TYPE');
@ -78,19 +88,6 @@ class InitializeLeaveDays implements ShouldQueue
}
}
// Kiểm tra xem dữ liệu của user này đã tồn tại cho năm hiện tại chưa
$existingData = LeaveDays::where('ld_user_id', $user->id)
->where('ld_year', $this->year)
->first();
if ($existingData) {
// Nếu dữ liệu đã tồn tại, update lại phép tồn
$existingData->ld_note = $ld_note;
$existingData->ld_additional_day = $ld_additional_day;
$existingData->save();
continue;
}
// Tạo dữ liệu cho năm hiện tại
LeaveDays::insert([
'ld_user_id' => $user->id,

View File

@ -2,16 +2,11 @@
"name": "laravel/laravel",
"type": "project",
"description": "The skeleton application for the Laravel framework.",
"keywords": [
"laravel",
"framework"
],
"keywords": ["laravel", "framework"],
"license": "MIT",
"require": {
"php": "^8.2",
"barryvdh/laravel-debugbar": "^3.9",
"barryvdh/laravel-dompdf": "^2.0",
"doctrine/dbal": "^3.10",
"drnxloc/laravel-simple-html-dom": "^1.9",
"guzzlehttp/guzzle": "^7.8",
"laravel/framework": "^10.10",

3077
BACKEND/composer.lock generated

File diff suppressed because it is too large Load Diff

View File

@ -1,39 +0,0 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('electricity_bills', function (Blueprint $table) {
$table->id();
$table->date('billing_date')->comment('Ngày lập hóa đơn');
$table->decimal('previous_reading', 12, 2)->comment('Số điện kỳ trước');
$table->decimal('current_reading', 12, 2)->comment('Số điện kỳ này');
$table->decimal('unit_price', 12, 2)->comment('Đơn giá điện');
$table->decimal('total_amount', 12, 2)->comment('Tổng tiền điện');
$table->string('notes')->nullable()->comment('Ghi chú');
$table->string('file_path')->nullable()->comment('Đường dẫn file PDF');
$table->unsignedBigInteger('created_by')->nullable();
$table->unsignedBigInteger('updated_by')->nullable();
$table->timestamps();
$table->foreign('created_by')->references('id')->on('users')->onDelete('set null');
$table->foreign('updated_by')->references('id')->on('users')->onDelete('set null');
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('electricity_bills');
}
};

View File

@ -1,23 +0,0 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
public function up(): void
{
Schema::table('electricity_bills', function (Blueprint $table) {
$table->string('attachment_path')->nullable()->after('file_path')
->comment('User-uploaded attachment (PDF or image)');
});
}
public function down(): void
{
Schema::table('electricity_bills', function (Blueprint $table) {
$table->dropColumn('attachment_path');
});
}
};

View File

@ -1,50 +0,0 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
public function up(): void
{
Schema::create('equipments', function (Blueprint $table) {
$table->id();
$table->string('code')->unique()->comment('Mã thiết bị (dùng để scan barcode)');
$table->string('name')->comment('Tên thiết bị');
$table->text('note')->nullable()->comment('Ghi chú');
$table->unsignedBigInteger('current_user_id')->nullable()->comment('Người đang sử dụng, null = đang ở kho');
$table->timestamp('assigned_at')->nullable()->comment('Thời điểm giao thiết bị hiện tại');
$table->unsignedBigInteger('created_by')->nullable();
$table->unsignedBigInteger('updated_by')->nullable();
$table->timestamps();
$table->foreign('current_user_id')->references('id')->on('users')->onDelete('set null');
$table->foreign('created_by')->references('id')->on('users')->onDelete('set null');
$table->foreign('updated_by')->references('id')->on('users')->onDelete('set null');
});
Schema::create('equipment_assignments', function (Blueprint $table) {
$table->id();
$table->unsignedBigInteger('equipment_id');
$table->unsignedBigInteger('user_id')->nullable()->comment('null = trả về kho');
$table->timestamp('assigned_at')->comment('Bắt đầu sử dụng');
$table->timestamp('returned_at')->nullable()->comment('Trả thiết bị');
$table->text('note')->nullable();
$table->unsignedBigInteger('created_by')->nullable();
$table->timestamps();
$table->foreign('equipment_id')->references('id')->on('equipments')->onDelete('cascade');
$table->foreign('user_id')->references('id')->on('users')->onDelete('set null');
$table->foreign('created_by')->references('id')->on('users')->onDelete('set null');
$table->index(['equipment_id', 'returned_at']);
});
}
public function down(): void
{
Schema::dropIfExists('equipment_assignments');
Schema::dropIfExists('equipments');
}
};

View File

@ -1,23 +0,0 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
public function up(): void
{
Schema::table('equipments', function (Blueprint $table) {
$table->string('image_path')->nullable()->after('note')
->comment('Ảnh thiết bị (tùy chọn)');
});
}
public function down(): void
{
Schema::table('equipments', function (Blueprint $table) {
$table->dropColumn('image_path');
});
}
};

File diff suppressed because it is too large Load Diff

View File

@ -23,8 +23,6 @@
"@tabler/icons-react": "^3.19.0",
"@uiw/react-codemirror": "^4.23.5",
"@vanilla-extract/css": "^1.16.0",
"@zxing/browser": "^0.2.0",
"@zxing/library": "^0.23.0",
"axios": "^1.6.1",
"clsx": "^2.1.1",
"dayjs": "^1.11.10",

View File

@ -35,8 +35,6 @@ export const updateWorkingDays =
//Category
export const getListMaster = API_URL + 'v1/admin/category/get-list-master'
export const getWorkDay = API_URL + 'v1/admin/category/work-days'
export const updateWorkDay = API_URL + 'v1/admin/category/update-work-days'
//LeaveManagement
export const getLeaveManagement = API_URL + 'v1/admin/leave-management'
@ -125,44 +123,6 @@ export const deleteDocument = API_URL + 'v1/admin/document/delete'
// Download File
export const downloadFile = API_URL + 'v1/admin/download-file'
// Electricity Bills
export const getElectricityBills = API_URL + 'v1/admin/electricity-bill'
export const getElectricityBillById = (id: number) =>
API_URL + `v1/admin/electricity-bill/${id}`
export const createElectricityBill =
API_URL + 'v1/admin/electricity-bill/create'
export const updateElectricityBill = (id: number) =>
API_URL + `v1/admin/electricity-bill/${id}`
export const deleteElectricityBill = (id: number) =>
API_URL + `v1/admin/electricity-bill/delete/${id}`
export const exportElectricityBillPdf = (id: number) =>
API_URL + `v1/admin/electricity-bill/export-pdf/${id}`
export const uploadElectricityBillAttachment = (id: number) =>
API_URL + `v1/admin/electricity-bill/upload-attachment/${id}`
export const deleteElectricityBillAttachment = (id: number) =>
API_URL + `v1/admin/electricity-bill/delete-attachment/${id}`
// Equipments
export const getEquipments = API_URL + 'v1/admin/equipment'
export const getEquipmentUserOptions = API_URL + 'v1/admin/equipment/users'
export const getEquipmentUserStatistics =
API_URL + 'v1/admin/equipment/user-statistics'
export const exportEquipments = API_URL + 'v1/admin/equipment/export'
export const getEquipmentByCode = API_URL + 'v1/admin/equipment/by-code'
export const getEquipmentHistory = (id: number) =>
API_URL + `v1/admin/equipment/history/${id}`
export const createEquipment = API_URL + 'v1/admin/equipment/create'
export const updateEquipment = (id: number) =>
API_URL + `v1/admin/equipment/${id}`
export const assignEquipment = (id: number) =>
API_URL + `v1/admin/equipment/${id}/assign`
export const uploadEquipmentImage = (id: number) =>
API_URL + `v1/admin/equipment/${id}/upload-image`
export const deleteEquipmentImage = (id: number) =>
API_URL + `v1/admin/equipment/${id}/image`
export const deleteEquipment = (id: number) =>
API_URL + `v1/admin/equipment/delete/${id}`
// Files APIs
export const getFiles = API_URL + 'v1/admin/profile/files'
export const uploadFiles = API_URL + 'v1/admin/profile/upload-files'

View File

@ -250,14 +250,7 @@ export const DataTableAll = ({
if (query !== '') {
setTData(
data.filter((obj) =>
Object.values(obj)?.find((c: any) =>
c
.toString()
.normalize('NFC')
.toLowerCase()
.includes(query.normalize('NFC').toLowerCase()),
),
),
Object.values(obj)?.find((c: any) => c.toString().normalize('NFC').toLowerCase().includes(query.normalize('NFC').toLowerCase())))
)
} else {
if (pagination) {
@ -463,7 +456,7 @@ export const DataTablePagination = ({
})
const [selectedRows, setSelectedRows] = useState<any[]>([])
const navigate = useNavigate()
let urlParams = new URLSearchParams(location.search)
const urlParams = new URLSearchParams(location.search)
// Render headers
const headers = columns.map((col) => (
@ -603,7 +596,7 @@ export const DataTablePagination = ({
// Remove specific parameters
params.delete(name)
urlParams.delete(name)
// Update the URL without reloading the page
window.history.replaceState({}, document.title, url.toString())
}
@ -635,9 +628,9 @@ export const DataTablePagination = ({
Array.isArray(dataFilter[key])
? dataFilter[key]
: key === 'to_date'
? Math.floor(dataFilter[key].getTime() / 1000) +
(60 * 60 * 23 + 60 * 59 + 59)
: Math.floor(dataFilter[key].getTime() / 1000),
? Math.floor(dataFilter[key].getTime() / 1000) +
(60 * 60 * 23 + 60 * 59 + 59)
: Math.floor(dataFilter[key].getTime() / 1000),
})
}
})
@ -667,8 +660,9 @@ export const DataTablePagination = ({
date_used_to: date_used,
})
}
// Add all attributes in 'params' to URL params
urlParams = new URLSearchParams(Object.entries(params))
Object.entries(params).forEach((param) => urlParams.set(...param))
Object.entries(dataFilter).forEach(([key, value]) => {
const typeFilter = filterInfo.find((o) => o.key === key).type
const hasType = {
@ -685,16 +679,17 @@ export const DataTablePagination = ({
if (hasType.Date) {
value = value ? Date.parse(String(value)) / 1000 : '' // to unix timestamp
}
console.log(String(value))
String(value).length
? urlParams.set(key, String(value))
: urlParams.delete(key)
})
// Request to get data API
const res = await get(url, Object.fromEntries(urlParams.entries()))
if (res.status) {
setBaseData(res.data?.links ? res?.data : res)
setTData(res.data?.data ? res.data?.data : res.data)
setBaseData(res)
setTData(res.data)
setSkeletion(false)
navigate({
pathname: location.pathname,
@ -770,7 +765,7 @@ export const DataTablePagination = ({
if (order_by_) {
const sortParam = {
name: order_by_.split('=')[0].split('_').slice(2).join('_'),
name: order_by_.split('=')[0].split('_')[2],
status: order_by_.split('=')[1],
}
if (JSON.stringify(sortParam) !== JSON.stringify(statusSort)) {

View File

@ -39,7 +39,6 @@ import {
IconReport,
IconScan,
IconSettings,
IconShredder,
IconSun,
IconTicket,
IconUsersGroup,
@ -147,8 +146,8 @@ const data = [
link: '/organization-settings',
label: 'Organization Settings',
icon: IconSettings,
group: 'other',
permissions: 'admin,hr',
group: 'admin',
permissions: 'admin',
},
{
link: '/profiles',
@ -157,13 +156,6 @@ const data = [
group: 'admin',
permissions: 'admin,accountant',
},
{
link: '/office-support',
label: 'Office Support',
icon: IconShredder,
group: 'other',
permissions: 'admin,hr,accountant',
},
// { link: '/jira', label: 'Jira', icon: IconSubtask },
// { link: '/custom-theme', label: 'Custom Theme', icon: IconBrush },
// { link: '/general-setting', label: 'General Setting', icon: IconSettings },

File diff suppressed because it is too large Load Diff

View File

@ -1,48 +0,0 @@
.title {
background-color: light-dark(var(white), var(--mantine-color-dark-7));
z-index: 100;
display: flex;
align-items: center;
justify-content: space-between;
padding: 0 var(--mantine-spacing-sm) var(--mantine-spacing-lg)
var(--mantine-spacing-sm);
border-bottom: solid rgba(201, 201, 201, 0.377) 1px;
}
.optionIcon {
display: flex;
justify-content: space-evenly;
}
.deleteIcon {
color: red;
cursor: pointer;
padding: 2px;
border-radius: 25%;
}
.editIcon {
color: rgb(9, 132, 132);
cursor: pointer;
padding: 2px;
border-radius: 25%;
}
.editIcon:hover {
background-color: rgba(203, 203, 203, 0.809);
}
.deleteIcon:hover {
background-color: rgba(203, 203, 203, 0.809);
}
.dialog {
background-color: light-dark(white, #2d353c);
text-align: center;
border: solid 1px rgb(255, 145, 0);
}
.dialogText {
color: light-dark(#2d353c, white);
}

View File

@ -1,876 +0,0 @@
import {
createElectricityBill,
deleteElectricityBill,
deleteElectricityBillAttachment,
exportElectricityBillPdf,
getElectricityBills,
updateElectricityBill,
uploadElectricityBillAttachment,
} from '@/api/Admin'
import { DataTablePagination } from '@/components/DataTable/DataTable'
import { Xdelete } from '@/rtk/helpers/CRUD'
import { get, post, put } from '@/rtk/helpers/apiService'
import {
Box,
Button,
Dialog,
FileButton,
Group,
Modal,
NumberInput,
Text,
Tabs,
Flex,
ActionIcon,
} from '@mantine/core'
import { useForm } from '@mantine/form'
import { notifications } from '@mantine/notifications'
import axios from 'axios'
import {
IconDevices,
IconDownload,
IconEdit,
IconEye,
IconFileInvoice,
IconTrash,
IconUpload,
IconX,
} from '@tabler/icons-react'
import moment from 'moment'
import { useEffect, useState } from 'react'
import classes from './OfficeSupport.module.css'
import { _NOTIFICATION_MESS } from '@/rtk/helpers/notificationMess'
import { getHeaderInfo } from '@/rtk/helpers/tokenCreator'
import { DateInput } from '@mantine/dates'
import EquipmentManagement from './EquipmentManagement'
interface ElectricityBill {
id: number
billing_date: string
previous_reading: number
current_reading: number
unit_price: number
total_amount: number
notes: string | null
file_path: string | null
attachment_path: string | null
created_by: number | null
updated_by: number | null
created_at: string | null
updated_at: string | null
creator_name?: string
updater_name?: string
}
interface ElectricityBillsResponse {
data: ElectricityBill[]
current_page: number
last_page: number
per_page: number
total: number
}
const OfficeSupport = () => {
const [activeTab, setActiveTab] = useState<string | null>('calculate')
const [listBills, setListBills] = useState<ElectricityBillsResponse>({
data: [],
current_page: 1,
last_page: 1,
per_page: 15,
total: 0,
})
const [action, setAction] = useState('')
const [item, setItem] = useState<ElectricityBill | null>(null)
const [activeBtn, setActiveBtn] = useState(false)
const [disableBtn, setDisableBtn] = useState(false)
const [confirmModal, setConfirmModal] = useState(false)
const [confirmMessage, setConfirmMessage] = useState('')
const [confirmValues, setConfirmValues] = useState<any>(null)
const [confirmLoading, setConfirmLoading] = useState(false)
const [attachmentToDelete, setAttachmentToDelete] =
useState<ElectricityBill | null>(null)
const filterInfo: any[] = []
const getAllBills = async (page: number = 1) => {
try {
const params = { page }
const res = await get(getElectricityBills, params)
if (res?.data) {
setListBills(res?.data)
}
} catch (error: any) {
notifications.show({
title: 'Error',
message: error.message ?? error,
color: 'red',
})
}
}
useEffect(() => {
getAllBills()
}, [])
const columns = [
{
name: 'billing_date',
size: '15%',
header: 'Date',
render: (row: ElectricityBill) => {
const date = new Date(row.billing_date)
return <Text fz={'sm'}>{moment(date).format('DD MMMM YYYY')}</Text>
},
},
{
name: 'previous_reading',
size: '15%',
header: 'Previous Reading',
render: (row: ElectricityBill) => (
<Text fz={'sm'}>
{Number(row.previous_reading)?.toLocaleString()} kWh
</Text>
),
},
{
name: 'current_reading',
size: '15%',
header: 'Current Reading',
render: (row: ElectricityBill) => (
<Text fz={'sm'}>
{Number(row.current_reading)?.toLocaleString()} kWh
</Text>
),
},
{
name: '#',
size: '10%',
header: 'Consumption',
render: (row: ElectricityBill) => {
const consumption =
Number(row.current_reading) - Number(row.previous_reading)
return (
<Text fz={'sm'} fw={600}>
{consumption.toLocaleString()} kWh
</Text>
)
},
},
{
name: 'unit_price',
size: '10%',
header: 'Unit Price',
render: (row: ElectricityBill) => (
<Text fz={'sm'}>
{Number(row.unit_price)?.toLocaleString(undefined, {
minimumFractionDigits: 0,
})}{' '}
VNĐ
</Text>
),
},
{
name: 'total_amount',
size: '15%',
header: 'Total Amount',
render: (row: ElectricityBill) => (
<Text fz={'sm'} fw={700} c="green">
{Number(row.total_amount)?.toLocaleString(undefined, {
minimumFractionDigits: 0,
})}{' '}
VNĐ
</Text>
),
},
{
name: 'actions',
size: '15%',
header: 'Actions',
render: (row: ElectricityBill) => {
return (
<Group gap="xs">
<ActionIcon
disabled={disableBtn}
onClick={() => handleExportPdf(row.id, row.billing_date)}
variant="outline"
w={20}
h={20}
color={'blue'}
title="Export PDF"
>
<IconDownload className={classes.deleteIcon} color="blue" />
</ActionIcon>
<FileButton
onChange={(file) => handleUploadAttachment(row.id, file)}
accept="application/pdf,image/jpeg,image/png"
>
{(props) => (
<ActionIcon
{...props}
disabled={disableBtn}
variant="outline"
w={20}
h={20}
color={'purple'}
title={
row.attachment_path
? 'Replace attachment'
: 'Upload attachment'
}
>
<IconUpload className={classes.deleteIcon} color="purple" />
</ActionIcon>
)}
</FileButton>
{row.attachment_path && (
<>
<ActionIcon
disabled={disableBtn}
onClick={() =>
window.open(
buildAttachmentUrl(row.attachment_path as string),
'_blank',
)
}
variant="outline"
w={20}
h={20}
color={'teal'}
title="View attachment"
>
<IconEye className={classes.deleteIcon} color="teal" />
</ActionIcon>
<ActionIcon
disabled={disableBtn}
onClick={() => setAttachmentToDelete(row)}
variant="outline"
w={20}
h={20}
color={'orange'}
title="Remove attachment"
>
<IconX className={classes.deleteIcon} color="orange" />
</ActionIcon>
</>
)}
<ActionIcon
disabled={disableBtn}
onClick={() => {
setItem(row)
setAction('edit')
form.setFieldValue(
'billing_date',
row?.billing_date || moment().format('YYYY-MM-DD'),
)
form.setFieldValue(
'current_reading',
Number(row?.current_reading) || 0,
)
form.setFieldValue(
'previous_reading',
Number(row?.previous_reading) || 0,
)
form.setFieldValue('unit_price', row?.unit_price || 4000)
form.setFieldValue('notes', row?.notes || '')
}}
variant="outline"
w={20}
h={20}
color={'green'}
title="Edit"
>
<IconEdit className={classes.deleteIcon} color="green" />
</ActionIcon>
<ActionIcon
disabled={disableBtn}
onClick={() => {
setAction('delete')
setItem(row)
}}
variant="outline"
w={20}
h={20}
color={'red'}
title="Delete"
>
<IconTrash className={classes.deleteIcon} color="red" />
</ActionIcon>
</Group>
)
},
},
]
const handleCreate = async (values: any) => {
try {
setDisableBtn(true)
const params = {
billing_date: values.billing_date,
previous_reading: values.previous_reading,
current_reading: values.current_reading,
unit_price: values.unit_price,
notes: values.notes || null,
}
let res
if (action === 'add') {
res = await post(createElectricityBill, params)
} else if (action === 'edit' && item) {
res = await put(updateElectricityBill(item.id), params)
}
if (res?.status) {
notifications.show({
title: 'Success',
message:
action === 'add'
? _NOTIFICATION_MESS.create_success
: 'Updated successfully',
color: 'green',
})
setAction('')
form.reset()
// Auto export PDF after creating
if (action === 'add' && res.data?.id) {
handleExportPdf(res.data.id, res.data.billing_date)
}
getAllBills()
} else if (!res?.status && res?.errors) {
if (!res?.data?.status && res?.data?.message) {
setConfirmMessage(res.data?.message)
setConfirmValues(values)
setConfirmModal(true)
} else {
notifications.show({
title: 'Error',
message: res.message ?? _NOTIFICATION_MESS.create_error,
color: 'red',
})
}
}
} catch (error: any) {
if (error.response?.message) {
const errorMess = error.response.message
notifications.show({
title: 'Error',
message: errorMess,
color: 'red',
})
}
} finally {
setDisableBtn(false)
}
}
const handleDelete = async (id: number) => {
try {
await Xdelete(deleteElectricityBill(id), {}, () => getAllBills())
} catch (error) {
console.log(error)
}
}
const handleExportPdf = async (id: number, date: string) => {
try {
setDisableBtn(true)
const header = await getHeaderInfo()
const res = await fetch(exportElectricityBillPdf(id), { ...header })
if (!res.ok) throw new Error('Export failed')
const blob = await res.blob()
const url = window.URL.createObjectURL(blob)
const newDate = moment(new Date(date)).format('DD-M-YYYY')
const a = document.createElement('a')
a.href = url
a.download = `Bảng thanh toán tiền điện APAC - ${newDate}.pdf`
a.click()
// notifications.show({
// title: 'Success',
// message: 'PDF exported successfully',
// color: 'green',
// })
setDisableBtn(false)
} catch (error: any) {
setDisableBtn(false)
notifications.show({
title: 'Error',
message: error.message,
color: 'red',
})
}
}
const handleUploadAttachment = async (id: number, file: File | null) => {
if (!file) return
const allowedTypes = [
'application/pdf',
'image/jpeg',
'image/png',
'image/gif',
'image/webp',
]
if (!allowedTypes.includes(file.type)) {
notifications.show({
title: 'Error',
message: 'Only PDF or image files are allowed',
color: 'red',
})
return
}
if (file.size > 10 * 1024 * 1024) {
notifications.show({
title: 'Error',
message: 'File size must be 10MB or less',
color: 'red',
})
return
}
try {
setDisableBtn(true)
const header = await getHeaderInfo()
header.headers['Content-Type'] = 'multipart/form-data'
const formData = new FormData()
formData.append('file', file)
const res = await axios.post(
uploadElectricityBillAttachment(id),
formData,
header,
)
if (res?.data?.status) {
notifications.show({
title: 'Success',
message: 'Attachment uploaded successfully',
color: 'green',
})
getAllBills(listBills.current_page)
} else {
notifications.show({
title: 'Error',
message: res?.data?.message ?? 'Upload failed',
color: 'red',
})
}
} catch (error: any) {
notifications.show({
title: 'Error',
message: error?.response?.data?.message ?? error.message,
color: 'red',
})
} finally {
setDisableBtn(false)
}
}
const handleDeleteAttachment = async (id: number) => {
try {
setDisableBtn(true)
const header = await getHeaderInfo()
const res = await axios.delete(
deleteElectricityBillAttachment(id),
header,
)
if (res?.data?.status) {
notifications.show({
title: 'Success',
message: 'Attachment deleted successfully',
color: 'green',
})
getAllBills(listBills.current_page)
} else {
notifications.show({
title: 'Error',
message: res?.data?.message ?? 'Delete failed',
color: 'red',
})
}
} catch (error: any) {
notifications.show({
title: 'Error',
message: error?.response?.data?.message ?? error.message,
color: 'red',
})
} finally {
setDisableBtn(false)
setAttachmentToDelete(null)
}
}
const buildAttachmentUrl = (path: string) => {
const base = import.meta.env.VITE_BACKEND_URL
return base.includes('local')
? base + 'storage/' + path
: base + 'image/storage/' + path
}
const getLastReading = () => {
if (!listBills?.data?.length) return 0
const sorted = [...listBills.data].sort(
(a, b) =>
new Date(b.billing_date).getTime() - new Date(a.billing_date).getTime(),
)
return sorted[0] ? Number(sorted[0]?.current_reading) : 0
}
const form = useForm({
initialValues: {
id: 0,
billing_date: moment().format('YYYY-MM-DD'),
previous_reading: 0,
current_reading: 0,
unit_price: 4000,
notes: '',
},
validate: {
billing_date: (value) => (!value ? 'Date is required' : null),
previous_reading: (value) =>
value < 0 ? 'Previous reading must be positive' : null,
current_reading: (value) =>
value < 0 ? 'Current reading must be positive' : null,
unit_price: (value) =>
value <= 0 ? 'Unit price must be greater than 0' : null,
},
})
// Calculate preview
const calculatePreview = () => {
const consumption =
form.values.current_reading - form.values.previous_reading
const total = consumption * form.values.unit_price
return { consumption, total }
}
return (
<div>
<div className={classes.title}>
<h3>Office Support</h3>
</div>
<Box p={20}>
<Tabs value={activeTab} onChange={setActiveTab}>
<Tabs.List>
<Tabs.Tab
value="calculate"
leftSection={<IconFileInvoice size={16} />}
>
Electricity Bill
</Tabs.Tab>
<Tabs.Tab
value="equipment"
leftSection={<IconDevices size={16} />}
>
Equipment Management
</Tabs.Tab>
</Tabs.List>
<Tabs.Panel value="calculate" pt="md">
{/* Calculate Tab Content */}
<Box>
<Button
m={5}
onClick={() => {
setAction('add')
form.reset()
form.setFieldValue('previous_reading', getLastReading())
form.setFieldValue('current_reading', getLastReading())
}}
>
+ Add New Bill
</Button>
</Box>
{/* History Tab Content */}
{listBills.data.length > 0 ? (
<DataTablePagination
filterInfo={filterInfo}
data={listBills}
columns={columns}
searchInput
size=""
/>
) : (
<Text c="dimmed" ta="center" py="xl">
No electricity bills found.
</Text>
)}
</Tabs.Panel>
<Tabs.Panel value="equipment" pt="md">
<EquipmentManagement />
</Tabs.Panel>
</Tabs>
</Box>
{/* Add/Edit Modal */}
<Modal
opened={action === 'add' || action === 'edit'}
onClose={() => {
setAction('')
setItem(null)
form.reset()
}}
title={
<Text pl={'sm'} fw={700} fz={'lg'}>
{action === 'add' && 'Add Electricity Bill'}
{action === 'edit' && 'Edit Electricity Bill'}
</Text>
}
size="lg"
>
<form
onSubmit={form.onSubmit(async (values) => {
setDisableBtn(true)
await handleCreate(values)
setDisableBtn(false)
})}
>
<Box pl={'md'} pr={'md'}>
<DateInput
required
mb="md"
label="Billing Date"
placeholder="Pick date"
valueFormat="DD-MM-YYYY"
value={
form.values.billing_date
? new Date(form.values.billing_date)
: null
}
error={form.errors.billing_date}
onChange={(date) =>
form.setFieldValue(
'billing_date',
date ? moment(date).format('YYYY-MM-DD') : '',
)
}
/>
<Flex gap={'md'}>
<Box style={{ flex: 1 }}>
<NumberInput
required
mb={'md'}
label={'Previous Reading (kWh)'}
value={form.values.previous_reading}
error={form.errors.previous_reading}
onChange={(e) =>
form.setFieldValue('previous_reading', Number(e))
}
min={0}
thousandSeparator=","
/>
</Box>
<Box style={{ flex: 1 }}>
<NumberInput
required
mb={'md'}
label={'Current Reading (kWh)'}
value={form.values.current_reading}
error={form.errors.current_reading}
onChange={(e) =>
form.setFieldValue('current_reading', Number(e))
}
min={0}
thousandSeparator=","
/>
</Box>
</Flex>
<NumberInput
required
mb={'md'}
label={'Unit Price (VNĐ/kWh)'}
value={form.values.unit_price}
error={form.errors.unit_price}
onChange={(e) => form.setFieldValue('unit_price', Number(e))}
min={0}
thousandSeparator=","
/>
{/* Preview */}
<Box
p="md"
style={{
backgroundColor: '#f8f9fa',
borderRadius: '8px',
marginBottom: '16px',
}}
>
<Text fw={600} mb="sm">
Preview:
</Text>
<Text>
Consumption:{' '}
<Text span fw={600}>
{calculatePreview().consumption.toLocaleString()} kWh
</Text>
</Text>
<Text>
Total Amount:{' '}
<Text span fw={700} c="green" size="lg">
{calculatePreview().total.toLocaleString()} VNĐ
</Text>
</Text>
</Box>
<Box ta={'center'}>
<Button
mt={'lg'}
bg={'green'}
type="submit"
disabled={disableBtn}
>
{action === 'add' ? 'Create & Export PDF' : 'Update'}
</Button>
</Box>
</Box>
</form>
</Modal>
{/* Delete Confirmation Dialog */}
<Dialog
className={classes.dialog}
opened={action === 'delete'}
withCloseButton
onClose={() => setAction('')}
size="lg"
radius="md"
position={{ top: 30, right: 10 }}
>
<Text className={classes.dialogText} size="sm" mb="xs" fw={500}>
Do you want to delete this record?
<Group justify="center" m={10}>
<Button
disabled={activeBtn}
fw={700}
size="xs"
variant="light"
onClick={async () => {
setActiveBtn(true)
if (item) {
await handleDelete(item.id)
}
setActiveBtn(false)
setAction('')
setItem(null)
}}
>
Yes
</Button>
<Button
fw={700}
size="xs"
variant="light"
onClick={() => {
setAction('')
setItem(null)
}}
>
Cancel
</Button>
</Group>
</Text>
</Dialog>
{/* Remove Attachment Confirmation */}
<Modal
opened={!!attachmentToDelete}
onClose={() => setAttachmentToDelete(null)}
title={
<Text fw={700} fz="lg">
Remove Attachment
</Text>
}
centered
>
<Box p="md">
<Text mb={20}>
Are you sure you want to remove the attached file for this bill?
</Text>
<Group justify="center">
<Button
color="red"
disabled={disableBtn}
onClick={() => {
if (attachmentToDelete) {
handleDeleteAttachment(attachmentToDelete.id)
}
}}
>
Remove
</Button>
<Button
variant="default"
disabled={disableBtn}
onClick={() => setAttachmentToDelete(null)}
>
Cancel
</Button>
</Group>
</Box>
</Modal>
{/* Confirm Modal */}
<Modal
opened={confirmModal}
onClose={() => !confirmLoading && setConfirmModal(false)}
title={
<Text fw={700} fz="lg">
Warning
</Text>
}
centered
closeOnClickOutside={!confirmLoading}
closeOnEscape={!confirmLoading}
>
<Box p="md">
<Text style={{ whiteSpace: 'pre-line' }} mb={20}>
{confirmMessage}
</Text>
<Group justify="center">
<Button
color="green"
loading={confirmLoading}
onClick={async () => {
if (confirmValues) {
try {
setConfirmLoading(true)
await handleCreate(confirmValues)
setConfirmLoading(false)
setConfirmModal(false)
} catch (error) {
setConfirmLoading(false)
console.error(error)
}
}
}}
>
Confirm
</Button>
<Button
color="red"
disabled={confirmLoading}
onClick={() => {
setConfirmModal(false)
}}
>
Cancel
</Button>
</Group>
</Box>
</Modal>
</div>
)
}
export default OfficeSupport

View File

@ -1,47 +1,28 @@
import { useEffect, useState } from 'react'
import {
Alert,
Box,
Button,
Code,
Dialog,
Flex,
Grid,
Group,
Loader,
LoadingOverlay,
Modal,
Paper,
Select,
Tabs,
Text,
TextInput,
Title,
} from '@mantine/core'
import classes from './OrganizationSettings.module.css'
import DataTableAll from '@/components/DataTable/DataTable'
import { get, post, put } from '@/rtk/helpers/apiService'
import { get, post } from '@/rtk/helpers/apiService'
import { notifications } from '@mantine/notifications'
import {
createTechnical,
deleteTechnical,
getWorkDay,
listTechnical,
updateWorkDay,
} from '@/api/Admin'
import { createTechnical, deleteTechnical, listTechnical } from '@/api/Admin'
import { useForm } from '@mantine/form'
import { Xdelete } from '@/rtk/helpers/CRUD'
import moment from 'moment'
import { DatePickerInput } from '@mantine/dates'
import { IconInfoCircle } from '@tabler/icons-react'
import dayjs from 'dayjs'
import customParseFormat from 'dayjs/plugin/customParseFormat'
import { checkPermissionAdmin } from '@/rtk/localStorage'
dayjs.extend(customParseFormat)
function OrganizationSettings() {
const [activeTab, setActiveTab] = useState<string | null>('work-day')
const [activeTab, setActiveTab] = useState<string | null>('technical')
return (
<div>
@ -55,22 +36,22 @@ function OrganizationSettings() {
<Box w="100%" display={'flex'} mt={15} ml={10}>
<Tabs w="100%" value={activeTab} onChange={setActiveTab}>
<Tabs.List>
<Tabs.Tab value="work-day">Work Day Setting</Tabs.Tab>
{checkPermissionAdmin('admin') && (
<Tabs.Tab value="technical">Technical Setting</Tabs.Tab>
)}
<Tabs.Tab value="technical">Technical Setting</Tabs.Tab>
<Tabs.Tab value="second">Setting 2</Tabs.Tab>
<Tabs.Tab value="third">Setting 3</Tabs.Tab>
</Tabs.List>
<Tabs.Panel value="work-day" pt="xs">
<WorkDaySettingTab />
<Tabs.Panel value="technical" pt="xs">
<TechnicalSettingTab />
</Tabs.Panel>
{checkPermissionAdmin('admin') && (
<Tabs.Panel value="technical" pt="xs">
<TechnicalSettingTab />
</Tabs.Panel>
)}
<Tabs.Panel value="second" pt="xs">
Setting 2
</Tabs.Panel>
<Tabs.Panel value="third" pt="xs">
Setting 3
</Tabs.Panel>
</Tabs>
</Box>
</div>
@ -119,8 +100,8 @@ const TechnicalSettingTab = () => {
? row?.level === 1
? { backgroundColor: '#d9d2e9' }
: row?.level === 2
? { backgroundColor: '#ffd966' }
: { backgroundColor: '#cfe2f3' }
? { backgroundColor: '#ffd966' }
: { backgroundColor: '#cfe2f3' }
: { backgroundColor: '' }
}
fw={500}
@ -349,126 +330,4 @@ const TechnicalSettingTab = () => {
)
}
const WorkDaySettingTab = () => {
const [workDay, setWorkDay] = useState<any>(null)
const [isLoading, setIsLoading] = useState(false)
const [isSaving, setIsSaving] = useState(false)
const [selectedDate, setSelectedDate] = useState<Date | null>(null)
useEffect(() => {
getWorkDays()
}, [])
const getWorkDays = async () => {
try {
setIsLoading(true)
const res = await get(getWorkDay, {})
if (res.status && res.data?.length > 0) {
const item = res.data[0]
setWorkDay(item)
const parsed = dayjs(item.c_code, 'DD-MM-YYYY').toDate()
setSelectedDate(parsed)
}
} catch (error: any) {
notifications.show({
title: 'Error',
message: error.message ?? error,
color: 'red',
})
} finally {
setIsLoading(false)
}
}
const handleSave = async () => {
if (!selectedDate) return
try {
setIsSaving(true)
const payload = {
c_code: dayjs(selectedDate).format('DD-MM-YYYY'),
}
const res = await put(`${updateWorkDay}`, payload)
if (res.status) {
notifications.show({
title: 'Success',
message: res.message,
color: 'green',
})
}
} catch (error: any) {
notifications.show({
title: 'Error',
message: error.message ?? error,
color: 'red',
})
} finally {
setIsSaving(false)
}
}
const handleReset = () => {
if (!workDay) return
const parsed = dayjs(workDay.c_code, 'DD-MM-YYYY').toDate()
setSelectedDate(parsed)
}
return (
<Box>
<LoadingOverlay visible={isLoading} />
<Title order={4} mb="xs">
Set up Saturday as a working day.
</Title>
<Paper withBorder p="lg" radius="md">
<Grid>
<Grid.Col span={12}>
<DatePickerInput
label="Saturday Work Start Date"
description="Weeks starting from this date will include Saturday as a working day."
placeholder="Select Date"
value={selectedDate}
onChange={setSelectedDate}
valueFormat="DD/MM/YYYY"
clearable={false}
excludeDate={(date) => date.getDay() === 0}
/>
</Grid.Col>
</Grid>
{selectedDate && (
<Alert
mt="md"
variant="light"
color="blue"
icon={<IconInfoCircle size={16} />}
>
Starting from{' '}
<Text span fw={500}>
{dayjs(selectedDate).format('DD/MM/YYYY')}
</Text>
, Saturdays will be treated as working days in applicable weeks.
</Alert>
)}
<Group justify="flex-end" mt="lg" gap="sm">
<Button variant="default" onClick={handleReset} disabled={isSaving}>
Cancel
</Button>
<Button onClick={handleSave} loading={isSaving}>
Save change
</Button>
</Group>
</Paper>
<Paper withBorder p="sm" radius="md" mt="sm" bg="gray.0">
<Text size="xs" c="dimmed">
Setting type:{' '}
<Code>{workDay?.c_type ?? 'SATURDAY_WORK_SCHEDULE'}</Code>
</Text>
</Paper>
</Box>
)
}
export default OrganizationSettings

View File

@ -8,7 +8,6 @@ import PageLogin from '@/pages/Auth/Login/Login'
import Document from '@/pages/Document/Document'
import LeaveManagement from '@/pages/LeaveManagement/LeaveManagement'
import PageNotFound from '@/pages/NotFound/NotFound'
import OfficeSupport from '@/pages/OfficeSupport/OfficeSupport'
import OrganizationSettings from '@/pages/OrganizationSettings/OrganizationSettings'
import Profile from '@/pages/Profile/Profile'
import SprintReview from '@/pages/SprintReview/SprintReview'
@ -240,7 +239,7 @@ const mainRoutes = [
{
path: '/organization-settings',
element: (
<ProtectedRoute mode="route" permission="admin,hr">
<ProtectedRoute mode="route" permission="admin">
<BasePage
main={
<>
@ -265,20 +264,6 @@ const mainRoutes = [
</ProtectedRoute>
),
},
{
path: '/office-support',
element: (
<ProtectedRoute mode="route" permission="admin,hr,accountant">
<BasePage
main={
<>
<OfficeSupport />
</>
}
></BasePage>
</ProtectedRoute>
),
},
// {
// path: '/packages',
// element: (

View File

@ -36,11 +36,7 @@ export const create = async (
if (res.status === false) {
notifications.show({
title: 'Error',
message: (
<div style={{ whiteSpace: 'pre-line' }}>
{res.message ?? _NOTIFICATION_MESS.create_error}
</div>
),
message: <div style={{ whiteSpace: 'pre-line' }}>{res.message ?? _NOTIFICATION_MESS.create_error}</div>,
color: 'red',
})
}
@ -120,7 +116,7 @@ export const Xdelete = async (url: string, data: any, fnc?: () => void) => {
try {
const res = await get(url, data)
if (res.status || res.success) {
if (res.status) {
notifications.show({
title: 'Success',
message: _NOTIFICATION_MESS.delete_success,
@ -128,7 +124,7 @@ export const Xdelete = async (url: string, data: any, fnc?: () => void) => {
})
fnc && fnc()
}
if (res.status === false && !res.success) {
if (res.status === false) {
notifications.show({
title: 'Error',
message: res.message ?? _NOTIFICATION_MESS.delete_error,

Binary file not shown.

View File

@ -1,6 +1,2 @@
path
__pycache__
images
uploads
venv
log.log
__pycache__

View File

@ -1 +0,0 @@
{}

View File

@ -1,134 +0,0 @@
# TrackingToolWeb — CLAUDE.md
## Tổng quan dự án
Hệ thống điểm danh khuôn mặt (Face Check-in) tích hợp với Management System tại `ms.prology.net`. Camera nhận diện khuôn mặt → FastAPI backend so khớp → ghi log → đồng bộ sang hệ thống quản lý.
---
## Kiến trúc
```
Frontend (React/Vite) → Backend (FastAPI/Python) → MySQL
External MS API (ms.prology.net)
```
**Backend**: `main.py` (FastAPI) + `api.py` (external calls) + `sync.py` (data sync)
**Frontend**: `client/src/` — React 19, TypeScript, TailwindCSS, Zustand
**Database**: MySQL — database `face_checkin`
**Deployment**: Backend phục vụ luôn frontend build (`static/`) qua route `/`
---
## Commands
### Backend
```bash
# Development
uvicorn main:app --reload
# Production
nohup uvicorn main:app --host 172.16.6.38 --port 8080 > log.log 2>&1 &
```
### Frontend
```bash
cd client
npm run dev # dev server (Vite HMR)
npm run build # build to client/dist/
npm run lint # ESLint
```
### Deploy frontend
Sau khi build, copy `client/dist/` vào `static/`. Đảm bảo asset paths trong `index.html` dùng prefix `/camera/static/assets/`.
---
## Cấu hình
### Backend (hardcoded — cần đưa vào .env)
| Biến | Giá trị hiện tại | File |
|------|-----------------|------|
| DB URL | `mysql+pymysql://root:123@localhost/face_checkin` | `database.py` |
| MS API base | `https://ms.prology.net/api/v1` | `api.py` |
| JWT token | hardcoded string | `api.py` |
| Face threshold | `0.42` | `main.py:217` |
| Ratio threshold | `0.85` | `main.py:286` |
| Recent check window | 0.5 phút | `main.py` |
### Frontend (.env trong `client/`)
```
VITE_API_BASE_URL=/camera # production (proxy qua nginx)
VITE_API_BASE_MS=https://ms.prology.net
```
---
## API Endpoints
| Method | Path | Mô tả |
|--------|------|-------|
| GET | `/` | Phục vụ `static/index.html` |
| POST | `/register` | Đăng ký khuôn mặt (name, email, file ảnh) |
| POST | `/register-simple` | Đăng ký/cập nhật user không cần ảnh |
| POST | `/checkin` | Nhận diện & điểm danh (file ảnh, camera_id) |
| GET | `/logs` | 20 log điểm danh gần nhất |
| GET | `/users` | Danh sách users + 5 checkpoint gần nhất |
---
## Database Schema
```sql
students (id, name, email UNIQUE, avatar)
student_encodings (id, student_id FK, encoding BLOB[1024 bytes = 128 float64], created_at)
checkin_logs (id, student_id FK, time, camera_id, status[check in/check out])
```
**Encoding format**: `np.float64` array 128 chiều → `.tobytes()` → BLOB 1024 bytes
**Giải mã**: `np.frombuffer(blob, dtype=np.float64)` — validate `enc.size == 128`
---
## Logic nhận diện khuôn mặt (`/checkin`)
1. Nhận ảnh JPEG → lưu tạm `uploads/checkin.jpg`
2. `face_recognition.face_encodings()` → encoding 128-dim
3. Load **tất cả** encodings từ DB → so khớp `face_recognition.face_distance()`
4. Chọn student có `min_dist` nhỏ nhất
5. Kiểm tra: `best_distance ≤ 0.42` **AND** `ratio = best/second_best ≤ 0.85`
6. Kiểm tra recent check (tránh điểm danh 2 lần trong 30 giây)
7. Ghi `checkin_logs``BackgroundTask`: gửi ảnh + tạo history trên MS API
**Bottleneck chính**: Bước 3 — load toàn bộ encodings, giải mã numpy, so khớp tuần tự trong request.
---
## External API (ms.prology.net)
- `POST /api/v1/admin/tracking/scan-create` — tạo history check-in
- `POST /api/v1/admin/tracking/send-image` — upload ảnh check-in
- `GET /api/v1/admin/timekeeping` — lấy dữ liệu chấm công (dùng trong `sync.py`)
Token JWT được hardcode trong `api.py` — cần chuyển sang env variable.
---
## Frontend State Management
**Zustand stores:**
- `use-app-store.ts``isAutoChecking`, `isCountDown`, `refreshLog`, video/canvas refs
- `use-user-store.ts``currentUser` (user được chọn cho checkpoint)
**Auto check-in**: interval 3000ms, gọi `/checkin` liên tục khi `isAutoChecking = true`
---
## Các lưu ý quan trọng
- `UPLOAD_DIR = ./uploads/` — lưu ảnh tạm check-in, bị ghi đè mỗi lần (`checkin.jpg`)
- `images/{YYYY_MM_DD}/` — lưu ảnh vĩnh viễn theo ngày (tạo trong `sync.py`)
- DB session trong `/checkin` dùng `Depends(get_db)`, các endpoint khác tạo `SessionLocal()` trực tiếp — cần thống nhất
- Tối đa 10 encodings/user (giới hạn trong `sync.py`)
- CORS `allow_origins=["*"]` — chấp nhận vì deploy nội bộ

View File

@ -1,11 +1,7 @@
Run client: cd client && npm run dev or npm run build && npm run preview
Run client: npm run dev or npm run build && npm run preview
==> Build client xong => coppy file asset và index vào folder static của server => thêm prefix static vào link của assets trong file index VD: /camera/static/assets
Run server uvicorn main:app --reload
nohup uvicorn main:app --host 172.16.6.38 --port 8080 > log.log 2>&1 &
ps aux | grep uvicorn
truncate -s 0 log.log

View File

@ -4,8 +4,48 @@ import datetime
import requests
from fastapi import UploadFile
URL_API = "http://172.16.6.38:8000/api/v1"
URL_API = "https://ms.prology.net/api/v1"
# def send_image(id, file: UploadFile, student_name: str, status: str):
# id = str(id)
# # Tạo folder theo ngày
# today = datetime.datetime.now().strftime("%Y_%m_%d")
# folder_path = f"./images/{today}"
# if not os.path.exists(folder_path):
# os.makedirs(folder_path)
# # Tạo file name chuẩn
# file_name = (
# f"{student_name}_"
# f"{status}_at_{datetime.datetime.now().strftime('%Y_%m_%d_%H_%M_%S')}.png"
# )
# file_path = os.path.join(folder_path, file_name)
# # Lưu file UploadFile xuống
# with open(file_path, "wb") as f:
# f.write(file.file.read())
# # Mở lại file để gửi API
# with open(file_path, "rb") as image_file:
# files = {"image": image_file}
# data = {"id": id, "file_name": file_name}
# try:
# response = requests.post(
# URL_API + "/admin/tracking/send-image",
# data=data,
# files=files
# )
# response.raise_for_status()
# res = response.json()
# except Exception as e:
# return {"status": False, "message": str(e)}
# return res
def send_image(id, image_bytes, student_name: str, status: str):
id = str(id)
@ -36,7 +76,9 @@ def send_image(id, image_bytes, student_name: str, status: str):
response.raise_for_status()
except Exception as e:
print("Send image failed:", e)
def create_history(data):
# Gửi yêu cầu POST với dữ liệu đã chỉ định
@ -45,12 +87,4 @@ def create_history(data):
print(res)
return res
def users(params):
# Gửi yêu cầu POST với dữ liệu đã chỉ định
response = requests.get(URL_API+"/admin/timekeeping", params=params, headers={"authorization": "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwczovL21zLnByb2xvZ3kubmV0L2FwaS92MS9hZG1pbi9sb2dpbiIsImlhdCI6MTc1Njg2MDQ1OSwiZXhwIjoxNzg4Mzk2NDU5LCJuYmYiOjE3NTY4NjA0NTksImp0aSI6IkRrb0NLbHBKV1pkNnZCN0QiLCJzdWIiOiIxNSIsInBydiI6ImQyZmYyOTMzOWE4YTNlODJjMzU4MmE1YThlNzM5ZGYxNzg5YmIxMmYifQ.DoHqHeAGGxpvzlNQ9dAZjZf2Yl573XCgNBT8ZiSx5N4"})
res = response.json()
return res
return res

View File

@ -22,4 +22,3 @@ dist-ssr
*.njsproj
*.sln
*.sw?
*.env

View File

@ -20,7 +20,6 @@
"axios": "^1.13.2",
"class-variance-authority": "^0.7.1",
"clsx": "^2.1.1",
"face-api.js": "^0.22.2",
"framer-motion": "^12.23.25",
"lucide-react": "^0.556.0",
"moment": "^2.30.1",
@ -2446,22 +2445,6 @@
"vite": "^5.2.0 || ^6 || ^7"
}
},
"node_modules/@tensorflow/tfjs-core": {
"version": "1.7.0",
"resolved": "https://registry.npmjs.org/@tensorflow/tfjs-core/-/tfjs-core-1.7.0.tgz",
"integrity": "sha512-uwQdiklNjqBnHPeseOdG0sGxrI3+d6lybaKu2+ou3ajVeKdPEwpWbgqA6iHjq1iylnOGkgkbbnQ6r2lwkiIIHw==",
"dependencies": {
"@types/offscreencanvas": "~2019.3.0",
"@types/seedrandom": "2.4.27",
"@types/webgl-ext": "0.0.30",
"@types/webgl2": "0.0.4",
"node-fetch": "~2.1.2",
"seedrandom": "2.4.3"
},
"engines": {
"yarn": ">= 1.3.2"
}
},
"node_modules/@types/babel__core": {
"version": "7.20.5",
"resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz",
@ -2530,11 +2513,6 @@
"undici-types": "~7.16.0"
}
},
"node_modules/@types/offscreencanvas": {
"version": "2019.3.0",
"resolved": "https://registry.npmjs.org/@types/offscreencanvas/-/offscreencanvas-2019.3.0.tgz",
"integrity": "sha512-esIJx9bQg+QYF0ra8GnvfianIY8qWB0GBx54PK5Eps6m+xTj86KLavHv6qDhzKcu5UUOgNfJ2pWaIIV7TRUd9Q=="
},
"node_modules/@types/react": {
"version": "19.2.7",
"resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.7.tgz",
@ -2555,21 +2533,6 @@
"@types/react": "^19.2.0"
}
},
"node_modules/@types/seedrandom": {
"version": "2.4.27",
"resolved": "https://registry.npmjs.org/@types/seedrandom/-/seedrandom-2.4.27.tgz",
"integrity": "sha512-YvMLqFak/7rt//lPBtEHv3M4sRNA+HGxrhFZ+DQs9K2IkYJbNwVIb8avtJfhDiuaUBX/AW0jnjv48FV8h3u9bQ=="
},
"node_modules/@types/webgl-ext": {
"version": "0.0.30",
"resolved": "https://registry.npmjs.org/@types/webgl-ext/-/webgl-ext-0.0.30.tgz",
"integrity": "sha512-LKVgNmBxN0BbljJrVUwkxwRYqzsAEPcZOe6S2T6ZaBDIrFp0qu4FNlpc5sM1tGbXUYFgdVQIoeLk1Y1UoblyEg=="
},
"node_modules/@types/webgl2": {
"version": "0.0.4",
"resolved": "https://registry.npmjs.org/@types/webgl2/-/webgl2-0.0.4.tgz",
"integrity": "sha512-PACt1xdErJbMUOUweSrbVM7gSIYm1vTncW2hF6Os/EeWi6TXYAYMPp+8v6rzHmypE5gHrxaxZNXgMkJVIdZpHw=="
},
"node_modules/@typescript-eslint/eslint-plugin": {
"version": "8.49.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.49.0.tgz",
@ -3550,20 +3513,6 @@
"node": ">=0.10.0"
}
},
"node_modules/face-api.js": {
"version": "0.22.2",
"resolved": "https://registry.npmjs.org/face-api.js/-/face-api.js-0.22.2.tgz",
"integrity": "sha512-9Bbv/yaBRTKCXjiDqzryeKhYxmgSjJ7ukvOvEBy6krA0Ah/vNBlsf7iBNfJljWiPA8Tys1/MnB3lyP2Hfmsuyw==",
"dependencies": {
"@tensorflow/tfjs-core": "1.7.0",
"tslib": "^1.11.1"
}
},
"node_modules/face-api.js/node_modules/tslib": {
"version": "1.14.1",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
"integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="
},
"node_modules/fast-deep-equal": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
@ -4481,14 +4430,6 @@
"react-dom": "^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc"
}
},
"node_modules/node-fetch": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.1.2.tgz",
"integrity": "sha512-IHLHYskTc2arMYsHZH82PVX8CSKT5lzb7AXeyO06QnjGDKtkv+pv3mEki6S7reB/x1QPo+YPxQRNEVgR5V/w3Q==",
"engines": {
"node": "4.x || >=6.0.0"
}
},
"node_modules/node-releases": {
"version": "2.0.27",
"resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz",
@ -4824,11 +4765,6 @@
"integrity": "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==",
"license": "MIT"
},
"node_modules/seedrandom": {
"version": "2.4.3",
"resolved": "https://registry.npmjs.org/seedrandom/-/seedrandom-2.4.3.tgz",
"integrity": "sha512-2CkZ9Wn2dS4mMUWQaXLsOAfGD+irMlLEeSP3cMxpGbgyOOzJGFa+MWCOMTOCMyZinHRPxyOj/S/C57li/1to6Q=="
},
"node_modules/semver": {
"version": "6.3.1",
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",

View File

@ -22,7 +22,6 @@
"axios": "^1.13.2",
"class-variance-authority": "^0.7.1",
"clsx": "^2.1.1",
"face-api.js": "^0.22.2",
"framer-motion": "^12.23.25",
"lucide-react": "^0.556.0",
"moment": "^2.30.1",

View File

@ -1 +0,0 @@
[{"weights":[{"name":"conv0/filters","shape":[3,3,3,16],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.009007044399485869,"min":-1.2069439495311063}},{"name":"conv0/bias","shape":[16],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.005263455241334205,"min":-0.9211046672334858}},{"name":"conv1/depthwise_filter","shape":[3,3,16,1],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.004001977630690033,"min":-0.5042491814669441}},{"name":"conv1/pointwise_filter","shape":[1,1,16,32],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.013836609615999109,"min":-1.411334180831909}},{"name":"conv1/bias","shape":[32],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.0015159862590771096,"min":-0.30926119685173037}},{"name":"conv2/depthwise_filter","shape":[3,3,32,1],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.002666276225856706,"min":-0.317286870876948}},{"name":"conv2/pointwise_filter","shape":[1,1,32,64],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.015265831292844286,"min":-1.6792414422128714}},{"name":"conv2/bias","shape":[64],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.0020280554598453,"min":-0.37113414915168985}},{"name":"conv3/depthwise_filter","shape":[3,3,64,1],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.006100742489683862,"min":-0.8907084034938438}},{"name":"conv3/pointwise_filter","shape":[1,1,64,128],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.016276211832083907,"min":-2.0508026908425725}},{"name":"conv3/bias","shape":[128],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.003394414279975143,"min":-0.7637432129944072}},{"name":"conv4/depthwise_filter","shape":[3,3,128,1],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.006716050119961009,"min":-0.8059260143953211}},{"name":"conv4/pointwise_filter","shape":[1,1,128,256],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.021875603993733724,"min":-2.8875797271728514}},{"name":"conv4/bias","shape":[256],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.0041141652009066415,"min":-0.8187188749804216}},{"name":"conv5/depthwise_filter","shape":[3,3,256,1],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.008423839597141042,"min":-0.9013508368940915}},{"name":"conv5/pointwise_filter","shape":[1,1,256,512],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.030007277283014035,"min":-3.8709387695088107}},{"name":"conv5/bias","shape":[512],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.008402082966823203,"min":-1.4871686851277068}},{"name":"conv8/filters","shape":[1,1,512,25],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.028336129469030042,"min":-4.675461362389957}},{"name":"conv8/bias","shape":[25],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.002268134028303857,"min":-0.41053225912299807}}],"paths":["tiny_face_detector_model-shard1"]}]

View File

@ -1,388 +0,0 @@
/* eslint-disable @typescript-eslint/no-explicit-any */
import { useEffect, useRef, useState, type RefObject } from "react";
export type FaceZoomTransform = {
scale: number;
translateX: number; // percent of element width
translateY: number; // percent of element height
};
export type FaceBox = {
/** All values are ratios (0..1) of the source video frame. */
x: number;
y: number;
width: number;
height: number;
};
export type FaceZoomResult = {
transform: FaceZoomTransform;
box: FaceBox | null;
/** Detector confidence (0..1). */
confidence: number;
/** 0..1 fill progress of the stable-face timer. Updates at 60fps. */
stabilityProgress: number;
};
const IDLE_TRANSFORM: FaceZoomTransform = {
scale: 1,
translateX: 0,
translateY: 0,
};
type Options = {
enabled?: boolean;
intervalMs?: number;
targetFaceRatio?: number;
minScale?: number;
maxScale?: number;
/** Per-frame lerp factor at 60fps (0..1). Higher = snappier. */
followSpeed?: number;
/** EMA weight on each new detection (0..1). Lower = smoother target. */
detectionSmoothing?: number;
detectorInputSize?: number;
detectorScoreThreshold?: number;
// --- Stable-face auto trigger ---
/** Enable the stable-face callback. */
stabilityEnabled?: boolean;
/** Continuous duration (ms) the same face must stay before firing. */
stableMs?: number;
/** Max center movement (frame ratio) to still count as same face. */
stabilityPositionThreshold?: number;
/** Max relative face-size change to still count as same face. */
stabilitySizeThreshold?: number;
/** Fires once when stability duration is met; re-arms on absence/new person. */
onStableFace?: () => void;
};
type FilteredSample = {
fx: number; // face center x ratio
fy: number; // face center y ratio
fh: number; // face height ratio
};
export function useFaceZoom(
videoRef: RefObject<HTMLVideoElement | null>,
{
enabled = true,
intervalMs = 120,
targetFaceRatio = 0.6,
minScale = 1.35,
maxScale = 4,
followSpeed = 0.11,
detectionSmoothing = 0.35,
detectorInputSize = 416,
detectorScoreThreshold = 0.3,
stabilityEnabled = false,
stableMs = 2000,
stabilityPositionThreshold = 0.12,
stabilitySizeThreshold = 0.4,
onStableFace,
}: Options = {}
): FaceZoomResult {
const [transform, setTransform] = useState<FaceZoomTransform>(IDLE_TRANSFORM);
const [box, setBox] = useState<FaceBox | null>(null);
const [confidence, setConfidence] = useState(0);
const [stabilityProgress, setStabilityProgress] = useState(0);
const stabilityProgressRef = useRef(0);
const currentRef = useRef<FaceZoomTransform>(IDLE_TRANSFORM);
const targetRef = useRef<FaceZoomTransform>(IDLE_TRANSFORM);
const filteredRef = useRef<FilteredSample | null>(null);
const filteredBoxRef = useRef<FaceBox | null>(null);
const filteredConfRef = useRef(0);
const missCountRef = useRef(0);
// Stability state — kept in refs so they survive ticks without re-rendering.
const stableSinceRef = useRef<number | null>(null);
const stableFiredRef = useRef(false);
const stablePrevRef = useRef<FilteredSample | null>(null);
// Latest stability config (so updating it doesn't tear down the detection loop).
const stabilityCfgRef = useRef({
enabled: stabilityEnabled,
stableMs,
positionThreshold: stabilityPositionThreshold,
sizeThreshold: stabilitySizeThreshold,
onStableFace,
});
useEffect(() => {
stabilityCfgRef.current = {
enabled: stabilityEnabled,
stableMs,
positionThreshold: stabilityPositionThreshold,
sizeThreshold: stabilitySizeThreshold,
onStableFace,
};
// When disabling, also clear pending state so it re-arms cleanly next time.
if (!stabilityEnabled) {
stableSinceRef.current = null;
stableFiredRef.current = false;
stablePrevRef.current = null;
}
}, [
stabilityEnabled,
stableMs,
stabilityPositionThreshold,
stabilitySizeThreshold,
onStableFace,
]);
useEffect(() => {
if (!enabled) {
currentRef.current = IDLE_TRANSFORM;
targetRef.current = IDLE_TRANSFORM;
filteredRef.current = null;
filteredBoxRef.current = null;
filteredConfRef.current = 0;
setTransform(IDLE_TRANSFORM);
setBox(null);
setConfidence(0);
return;
}
let cancelled = false;
let intervalId: number | null = null;
let rafId: number | null = null;
let lastTs = 0;
let faceapi: any = null;
let detectorOptions: any = null;
let running = false;
const animate = (ts: number) => {
if (cancelled) return;
const dt = lastTs ? (ts - lastTs) / 1000 : 1 / 60;
lastTs = ts;
// Frame-rate-aware lerp: stays consistent at 60/120Hz.
const k = 1 - Math.pow(1 - followSpeed, dt * 60);
const cur = currentRef.current;
const tgt = targetRef.current;
const next: FaceZoomTransform = {
scale: cur.scale + (tgt.scale - cur.scale) * k,
translateX: cur.translateX + (tgt.translateX - cur.translateX) * k,
translateY: cur.translateY + (tgt.translateY - cur.translateY) * k,
};
currentRef.current = next;
const dScale = Math.abs(next.scale - tgt.scale);
const dTx = Math.abs(next.translateX - tgt.translateX);
const dTy = Math.abs(next.translateY - tgt.translateY);
// Skip re-render when essentially settled — avoids React churn.
if (dScale > 0.0005 || dTx > 0.02 || dTy > 0.02) {
setTransform(next);
} else if (
next.scale !== tgt.scale ||
next.translateX !== tgt.translateX ||
next.translateY !== tgt.translateY
) {
currentRef.current = tgt;
setTransform(tgt);
}
// Smooth 60fps fill of the stability progress (independent of the
// ~110ms detector tick → no stair-step in the progress bar).
const cfg = stabilityCfgRef.current;
let nextProgress = 0;
if (cfg.enabled) {
if (stableFiredRef.current) {
nextProgress = 1;
} else if (stableSinceRef.current !== null && cfg.stableMs > 0) {
nextProgress = Math.min(
1,
(ts - stableSinceRef.current) / cfg.stableMs
);
}
}
if (Math.abs(nextProgress - stabilityProgressRef.current) > 0.003) {
stabilityProgressRef.current = nextProgress;
setStabilityProgress(nextProgress);
} else if (
(nextProgress === 0 || nextProgress === 1) &&
stabilityProgressRef.current !== nextProgress
) {
// Snap to exact endpoints so the bar fully clears / fills.
stabilityProgressRef.current = nextProgress;
setStabilityProgress(nextProgress);
}
rafId = requestAnimationFrame(animate);
};
const tick = async () => {
if (running) return;
const video = videoRef.current;
if (!video || video.readyState < 2 || !video.videoWidth) return;
running = true;
try {
const detection = await faceapi.detectSingleFace(video, detectorOptions);
if (cancelled) return;
if (!detection) {
missCountRef.current += 1;
// Stability resets quickly so the timer truly restarts on absence.
if (missCountRef.current >= 2) {
stableSinceRef.current = null;
stableFiredRef.current = false;
stablePrevRef.current = null;
}
// Hold zoom position longer to avoid jarring zoom-out on brief misses.
if (missCountRef.current >= 25) {
targetRef.current = IDLE_TRANSFORM;
filteredRef.current = null;
filteredBoxRef.current = null;
filteredConfRef.current = 0;
setBox(null);
setConfidence(0);
}
return;
}
missCountRef.current = 0;
const { x, y, width, height } = detection.box;
const score = detection.score ?? detection.classScore ?? 0;
const vw = video.videoWidth;
const vh = video.videoHeight;
if (!vw || !vh) return;
const sample: FilteredSample = {
fx: (x + width / 2) / vw,
fy: (y + height / 2) / vh,
fh: height / vh,
};
const sampleBox: FaceBox = {
x: x / vw,
y: y / vh,
width: width / vw,
height: height / vh,
};
const a = detectionSmoothing;
const prev = filteredRef.current;
const filt: FilteredSample = prev
? {
fx: prev.fx + (sample.fx - prev.fx) * a,
fy: prev.fy + (sample.fy - prev.fy) * a,
fh: prev.fh + (sample.fh - prev.fh) * a,
}
: sample;
filteredRef.current = filt;
const prevBox = filteredBoxRef.current;
const filtBox: FaceBox = prevBox
? {
x: prevBox.x + (sampleBox.x - prevBox.x) * a,
y: prevBox.y + (sampleBox.y - prevBox.y) * a,
width: prevBox.width + (sampleBox.width - prevBox.width) * a,
height: prevBox.height + (sampleBox.height - prevBox.height) * a,
}
: sampleBox;
filteredBoxRef.current = filtBox;
setBox(filtBox);
const filtConf =
filteredConfRef.current + (score - filteredConfRef.current) * a;
filteredConfRef.current = filtConf;
setConfidence(filtConf);
// --- Stable-face tracking (uses RAW sample so a new person trips it
// immediately, before EMA can drift toward the new position). ---
const cfg = stabilityCfgRef.current;
if (cfg.enabled) {
const prevS = stablePrevRef.current;
const now = performance.now();
let sameFace = false;
if (prevS) {
const dx = Math.abs(sample.fx - prevS.fx);
const dy = Math.abs(sample.fy - prevS.fy);
const dh =
Math.abs(sample.fh - prevS.fh) / Math.max(prevS.fh, 0.01);
sameFace =
dx < cfg.positionThreshold &&
dy < cfg.positionThreshold &&
dh < cfg.sizeThreshold;
}
if (!sameFace) {
// First detection after absence OR a different person → restart timer.
stableSinceRef.current = now;
stableFiredRef.current = false;
} else if (
!stableFiredRef.current &&
stableSinceRef.current !== null &&
now - stableSinceRef.current >= cfg.stableMs
) {
stableFiredRef.current = true;
try {
cfg.onStableFace?.();
} catch (e) {
console.error("onStableFace handler threw", e);
}
}
stablePrevRef.current = sample;
}
let scale = targetFaceRatio / Math.max(filt.fh, 0.05);
scale = Math.max(minScale, Math.min(scale, maxScale));
const halfViewX = 0.5 / scale;
const halfViewY = 0.5 / scale;
const fx = Math.min(1 - halfViewX, Math.max(halfViewX, filt.fx));
const fy = Math.min(1 - halfViewY, Math.max(halfViewY, filt.fy));
targetRef.current = {
scale,
translateX: (0.5 - fx * scale) * 100,
translateY: (0.5 - fy * scale) * 100,
};
} catch (err) {
console.debug("face detect error", err);
} finally {
running = false;
}
};
const load = async () => {
try {
faceapi = await import("face-api.js");
const modelUrl = `${import.meta.env.BASE_URL}models`.replace(
/\/\/+/g,
"/"
);
if (!faceapi.nets.tinyFaceDetector.isLoaded) {
await faceapi.nets.tinyFaceDetector.loadFromUri(modelUrl);
}
if (cancelled) return;
detectorOptions = new faceapi.TinyFaceDetectorOptions({
inputSize: detectorInputSize,
scoreThreshold: detectorScoreThreshold,
});
intervalId = window.setInterval(tick, intervalMs);
rafId = requestAnimationFrame(animate);
} catch (err) {
console.error("[useFaceZoom] failed to load face-api models", err);
}
};
load();
return () => {
cancelled = true;
if (intervalId !== null) clearInterval(intervalId);
if (rafId !== null) cancelAnimationFrame(rafId);
};
}, [
videoRef,
enabled,
intervalMs,
targetFaceRatio,
minScale,
maxScale,
followSpeed,
detectionSmoothing,
detectorInputSize,
detectorScoreThreshold,
]);
return { transform, box, confidence, stabilityProgress };
}

View File

@ -2,7 +2,6 @@
import { clsx, type ClassValue } from "clsx";
import moment from "moment";
import { twMerge } from "tailwind-merge";
import useAppStore from "@/stores/use-app-store";
export function cn(...inputs: ClassValue[]) {
return twMerge(clsx(inputs));
@ -19,50 +18,12 @@ export function capture(videoRef: any, canvasRef: any) {
const video = videoRef.current;
const context = canvas.getContext("2d");
const vw: number = video.videoWidth;
const vh: number = video.videoHeight;
// Crop to the same region the user sees on screen (zoomed/focused view).
// The video element has transform: translate(tx%, ty%) scale(s) with
// transform-origin (0,0). The visible source region in video coords is:
// srcX = (-tx/100)/s * vw
// srcY = (-ty/100)/s * vh
// srcW = vw / s
// srcH = vh / s
let srcX = 0;
let srcY = 0;
let srcW = vw;
let srcH = vh;
const t = useAppStore.getState().faceZoomTransform;
if (t && t.scale > 1.0001) {
const s = t.scale;
srcW = vw / s;
srcH = vh / s;
srcX = (-t.translateX / 100 / s) * vw;
srcY = (-t.translateY / 100 / s) * vh;
// Clamp inside the source frame (the on-screen clamp already prevents
// empty edges, but rounding can drift a sub-pixel out of range).
srcX = Math.max(0, Math.min(vw - srcW, srcX));
srcY = Math.max(0, Math.min(vh - srcH, srcY));
}
return new Promise((resolve, reject) => {
try {
canvas.width = Math.round(srcW);
canvas.height = Math.round(srcH);
canvas.width = video.videoWidth;
canvas.height = video.videoHeight;
context.drawImage(
video,
srcX,
srcY,
srcW,
srcH,
0,
0,
canvas.width,
canvas.height
);
context.drawImage(video, 0, 0, canvas.width, canvas.height);
canvas.toBlob(
(blob: unknown) => {

View File

@ -1,94 +0,0 @@
import type { FaceBox, FaceZoomTransform } from "@/lib/use-face-zoom";
type Props = {
box: FaceBox | null;
transform: FaceZoomTransform;
/** 0..1 stability fill — drives the progress bar above the brackets. */
progress: number;
};
/**
* Renders 4 AF-style corner brackets around the detected face, plus a thin
* progress bar above them that fills as the same face remains in view.
*
* Coordinates: `box` is in source-video ratios (0..1). The video element on
* screen has a zoom transform applied. We re-apply the same `translate + scale`
* to the bracket position so it stays glued to the face but place it OUTSIDE
* the transformed element so border width does not scale with zoom.
*/
export default function FaceBracket({ box, transform, progress }: Props) {
if (!box) return null;
const s = transform.scale;
const tx = transform.translateX / 100;
const ty = transform.translateY / 100;
// Apply the same transform as the video (origin 0,0): point' = point * s + t
const left = box.x * s + tx;
const top = box.y * s + ty;
const width = box.width * s;
const height = box.height * s;
if (
left + width < -0.05 ||
top + height < -0.05 ||
left > 1.05 ||
top > 1.05 ||
width <= 0 ||
height <= 0
) {
return null;
}
const armPx = Math.max(14, Math.min(40, width * 1000 * 0.18));
const cornerSize = { width: armPx, height: armPx } as const;
const cornerBase =
"absolute border-emerald-400/90 transition-opacity duration-150";
const clamped = Math.max(0, Math.min(1, progress));
const isFull = clamped >= 0.999;
return (
<div
className="absolute pointer-events-none"
style={{
left: `${left * 100}%`,
top: `${top * 100}%`,
width: `${width * 100}%`,
height: `${height * 100}%`,
}}
>
<div
className={`${cornerBase} border-t-[3px] border-l-[3px] rounded-tl-md`}
style={{ ...cornerSize, left: 0, top: 0 }}
/>
<div
className={`${cornerBase} border-t-[3px] border-r-[3px] rounded-tr-md`}
style={{ ...cornerSize, right: 0, top: 0 }}
/>
<div
className={`${cornerBase} border-b-[3px] border-l-[3px] rounded-bl-md`}
style={{ ...cornerSize, left: 0, bottom: 0 }}
/>
<div
className={`${cornerBase} border-b-[3px] border-r-[3px] rounded-br-md`}
style={{ ...cornerSize, right: 0, bottom: 0 }}
/>
{/* Stability progress bar sits above the box. Width is driven by the
60fps `progress` value from the hook, so no CSS transition is needed
(and a transition would actually fight the rAF updates). */}
<div className="absolute left-0 right-0 -top-3 h-1.5 rounded-full bg-white/25 overflow-hidden backdrop-blur-sm">
<div
className={`h-full rounded-full ${
isFull
? "bg-emerald-300 shadow-[0_0_12px_rgba(110,231,183,0.9)]"
: "bg-emerald-400"
}`}
style={{ width: `${clamped * 100}%` }}
/>
</div>
</div>
);
}

View File

@ -19,17 +19,27 @@ export default function TabFeatures() {
const { currentUser, setCurrentUser } = useUserStore();
const { isAutoChecking, setIsAutoChecking, setRefreshLog, autoCheckinTick } =
useAppStore();
const { isAutoChecking, setIsAutoChecking, setRefreshLog } = useAppStore();
const autoCheckIntervalRef = useRef<any>(null);
const [loading, setLoading] = useState(false);
const [checkPoinLoading, setCheckPoinLoading] = useState(false);
const toggleAutoCheck = () => {
// Auto mode is now driven by stable-face detection in <Main> — toggling
// this flag enables/disables the 2s presence timer + auto fire.
setIsAutoChecking(!isAutoChecking);
if (isAutoChecking) {
if (autoCheckIntervalRef.current) {
clearInterval(autoCheckIntervalRef.current);
autoCheckIntervalRef.current = null;
}
setIsAutoChecking(false);
} else {
autoCheckIntervalRef.current = setInterval(() => {
captureAndCheck();
}, 3000);
setIsAutoChecking(true);
}
};
const createCheckpoint = async () => {
@ -74,20 +84,32 @@ export default function TabFeatures() {
const { data } = await checkingApi.checkin({ file });
if (!data || !data?.status) {
if (!data || !data?.data) {
toast.error(
(data as any)?.message || "Error In Checking: " + JSON.stringify(data)
);
return;
}
if (data?.checking) {
setCurrentUser(data?.data || null);
// Set timeout mới
timeoutRef.current = setTimeout(() => {
setCurrentUser(null);
timeoutRef.current = null;
}, 2000);
}
const message =
(data as any)?.message ||
`Checking thành công lúc: ${formatTime(new Date().toLocaleString())}`;
toast.success(message);
speak({ type: data?.status_type });
if (!data?.status) return;
speak({ type: data?.status });
setRefreshLog(true);
} catch (error) {
const data = error as AxiosError;
@ -110,18 +132,6 @@ export default function TabFeatures() {
};
}, []);
// Stable-face auto trigger: Main bumps autoCheckinTick when a face has been
// present for 2s, and we fire the same checkin path used by the manual
// button. Skip the initial 0 tick on mount.
const lastHandledTick = useRef(0);
useEffect(() => {
if (autoCheckinTick === 0) return;
if (autoCheckinTick === lastHandledTick.current) return;
lastHandledTick.current = autoCheckinTick;
if (loading) return;
captureAndCheck();
}, [autoCheckinTick, captureAndCheck, loading]);
useEffect(() => {
const down = (e: KeyboardEvent) => {
if (e.code === "Space") {

View File

@ -1,12 +1,24 @@
/* eslint-disable no-constant-binary-expression */
/* eslint-disable @typescript-eslint/no-explicit-any */
"use client";
import type React from "react";
import { checkingApi } from "@/api/checking-api";
import { Avatar, AvatarFallback, AvatarImage } from "@/components/ui/avatar";
import { Button } from "@/components/ui/button";
import { Card } from "@/components/ui/card";
import {
DropdownMenu,
DropdownMenuContent,
DropdownMenuItem,
DropdownMenuSeparator,
DropdownMenuTrigger,
} from "@/components/ui/dropdown-menu";
import { TabsContent } from "@/components/ui/tabs";
import { cn } from "@/lib/utils";
import useUserStore from "@/stores/use-user-store";
import { Users } from "lucide-react";
import { Edit, MoreVertical, Trash2, UserCheck, Users } from "lucide-react";
import { useEffect, useState } from "react";
export default function TabUsers({ value }: { value: string }) {
@ -35,6 +47,24 @@ export default function TabUsers({ value }: { value: string }) {
}
};
const handleEdit = (user: IUser, e: React.MouseEvent) => {
e.stopPropagation();
console.log("Edit user:", user);
// TODO: Implement edit functionality
};
const handleDelete = (user: IUser, e: React.MouseEvent) => {
e.stopPropagation();
console.log("Delete user:", user);
// TODO: Implement delete functionality
};
const handleViewDetails = (user: IUser, e: React.MouseEvent) => {
e.stopPropagation();
console.log("View details:", user);
// TODO: Implement view details functionality
};
useEffect(() => {
// eslint-disable-next-line react-hooks/set-state-in-effect
loadUsers();
@ -72,7 +102,7 @@ export default function TabUsers({ value }: { value: string }) {
</p>
</div>
{/* <DropdownMenu>
<DropdownMenu>
<DropdownMenuTrigger
asChild
onClick={(e) => e.stopPropagation()}
@ -100,7 +130,7 @@ export default function TabUsers({ value }: { value: string }) {
<span>Xóa</span>
</DropdownMenuItem>
</DropdownMenuContent>
</DropdownMenu> */}
</DropdownMenu>
</div>
</Card>
))}

View File

@ -6,14 +6,11 @@ import { checkingApi } from "@/api/checking-api";
import { msApi } from "@/api/ms-api";
import { Button } from "@/components/ui/button";
import { Card } from "@/components/ui/card";
import { useFaceZoom } from "@/lib/use-face-zoom";
import { capture, cn } from "@/lib/utils";
import useAppStore from "@/stores/use-app-store";
import { AnimatePresence, motion } from "framer-motion";
import { ChevronLeft, ChevronRight } from "lucide-react";
import { useCallback, useEffect, useRef, useState } from "react";
import { useEffect, useRef, useState } from "react";
import CountDown from "./components/count-down";
import FaceBracket from "./components/face-bracket";
import LeftSlidebar from "./components/left-slidebar";
import RightSlidebar from "./components/right-slidebar";
import TabFeatures from "./components/tab-features";
@ -23,47 +20,13 @@ export default function Main() {
const [isLeftSidebarOpen, setIsLeftSidebarOpen] = useState(false);
// const { currentUser, setCurrentUser } = useUserStore();
const {
setCanvasRef,
setVideoRef,
setFaceZoomTransform,
isAutoChecking,
bumpAutoCheckinTick,
} = useAppStore();
const { setCanvasRef, setVideoRef } = useAppStore();
const { isCountDown, setCaptureRegisterImage, setIsCountDown } =
useAppStore();
const [flashKey, setFlashKey] = useState(0);
const videoRef = useRef<HTMLVideoElement>(null);
const canvasRef = useRef<HTMLCanvasElement>(null);
const onStableFace = useCallback(() => {
// Fire the same path as the "Điểm Danh Ngay" button via the store trigger,
// and play a camera-shutter flash to acknowledge the capture.
setFlashKey((k) => k + 1);
bumpAutoCheckinTick();
}, [bumpAutoCheckinTick]);
const {
transform: faceZoom,
box: faceBox,
stabilityProgress: faceStability,
} = useFaceZoom(videoRef, {
enabled: true,
intervalMs: 110,
targetFaceRatio: 0.6,
minScale: 1.35,
maxScale: 4,
followSpeed: 0.11,
detectionSmoothing: 0.3,
detectorInputSize: 416,
detectorScoreThreshold: 0.3,
stabilityEnabled: isAutoChecking,
stableMs: 2000,
onStableFace,
});
const sync = async () => {
try {
const { data } = await msApi.timekeepings();
@ -125,12 +88,6 @@ export default function Main() {
setVideoRef(videoRef);
}, [videoRef, canvasRef]);
// Keep store in sync with the live zoom so capture() can crop to the
// visible focused region instead of the full frame.
useEffect(() => {
setFaceZoomTransform(faceZoom);
}, [faceZoom, setFaceZoomTransform]);
return (
<div className="min-h-screen bg-white">
<div className="flex h-screen">
@ -150,34 +107,10 @@ export default function Main() {
ref={videoRef}
autoPlay
playsInline
className="w-full h-full object-cover will-change-transform"
style={{
transformOrigin: "0 0",
transform: `translate3d(${faceZoom.translateX}%, ${faceZoom.translateY}%, 0) scale(${faceZoom.scale})`,
backfaceVisibility: "hidden",
}}
className="w-full h-full object-cover"
/>
<div className="absolute inset-0 border-4 border-blue-500/30 pointer-events-none" />
<FaceBracket
box={faceBox}
transform={faceZoom}
progress={isAutoChecking ? faceStability : 0}
/>
{/* Camera shutter flash — keyed so each fire replays the animation. */}
<AnimatePresence>
{flashKey > 0 && (
<motion.div
key={flashKey}
initial={{ opacity: 0 }}
animate={{ opacity: [0, 0.85, 0] }}
transition={{ duration: 0.45, times: [0, 0.18, 1] }}
className="absolute inset-0 bg-white pointer-events-none z-40"
/>
)}
</AnimatePresence>
{/* <AnimatePresence>
{currentUser && (
<motion.div

View File

@ -1,6 +1,5 @@
/* eslint-disable @typescript-eslint/no-explicit-any */
// src/stores/useUserStore.ts
import type { FaceZoomTransform } from "@/lib/use-face-zoom";
import { create } from "zustand";
type AppState = {
@ -10,9 +9,6 @@ type AppState = {
captureRegisterImage: any;
videoRef: any;
canvasRef: any;
faceZoomTransform: FaceZoomTransform | null;
/** Incrementing trigger — bumped when the stable-face timer fires. */
autoCheckinTick: number;
// actions
setIsAutoChecking: (data: boolean) => void;
@ -21,8 +17,6 @@ type AppState = {
setVideoRef: (data: any) => void;
setCanvasRef: (data: any) => void;
setCaptureRegisterImage: (data: any) => void;
setFaceZoomTransform: (data: FaceZoomTransform | null) => void;
bumpAutoCheckinTick: () => void;
};
const useAppStore = create<AppState>((set) => ({
@ -32,8 +26,6 @@ const useAppStore = create<AppState>((set) => ({
canvasRef: null,
videoRef: null,
refreshLog: false,
faceZoomTransform: null,
autoCheckinTick: 0,
setIsAutoChecking: (data) => set({ isAutoChecking: data }),
setRefreshLog: (data) => set({ refreshLog: data }),
@ -41,9 +33,6 @@ const useAppStore = create<AppState>((set) => ({
setCaptureRegisterImage: (data) => set({ captureRegisterImage: data }),
setVideoRef: (data) => set({ videoRef: data }),
setCanvasRef: (data) => set({ canvasRef: data }),
setFaceZoomTransform: (data) => set({ faceZoomTransform: data }),
bumpAutoCheckinTick: () =>
set((s) => ({ autoCheckinTick: s.autoCheckinTick + 1 })),
}));
export default useAppStore;

View File

@ -1,7 +1,7 @@
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker, declarative_base
DATABASE_URL = "mysql+pymysql://admin:Work1234%^@localhost/face_checkin?charset=utf8mb4"
DATABASE_URL = "mysql+pymysql://root:123@localhost/face_checkin?charset=utf8mb4"
engine = create_engine(DATABASE_URL)
SessionLocal = sessionmaker(bind=engine, autoflush=False)

Binary file not shown.

After

Width:  |  Height:  |  Size: 246 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 252 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 234 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 235 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 248 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 248 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 250 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 249 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 232 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 232 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 223 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 221 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 221 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 226 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 218 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 217 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 221 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 227 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 223 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 225 KiB

View File

@ -1,10 +0,0 @@
nohup: ignoring input
INFO: Started server process [32945]
INFO: Waiting for application startup.
INFO: Application startup complete.
INFO: Uvicorn running on http://172.16.6.38:8080 (Press CTRL+C to quit)
INFO: 172.16.6.38:57742 - "GET / HTTP/1.1" 200 OK
INFO: 172.16.6.38:57748 - "GET /static/assets/index-CDZdzCu6.css HTTP/1.1" 304 Not Modified
INFO: 172.16.6.38:57764 - "GET /static/assets/index-DW_Nku2j.js HTTP/1.1" 304 Not Modified
INFO: 172.16.6.38:57790 - "GET /logs HTTP/1.1" 200 OK
INFO: 172.16.6.38:57776 - "GET /users HTTP/1.1" 200 OK

View File

@ -5,9 +5,6 @@ import face_recognition
import numpy as np
import os
import datetime
import threading
import logging
import cv2
from fastapi.staticfiles import StaticFiles
from fastapi.responses import FileResponse
from database import SessionLocal, engine
@ -17,71 +14,6 @@ from sqlalchemy import text
from fastapi.middleware.cors import CORSMiddleware
from api import create_history, send_image
logging.basicConfig(level=logging.INFO)
# --- Encoding cache (Phương án 1: RAM cache) ---
_enc_matrix: np.ndarray | None = None # shape (N, 128)
_enc_student_ids: np.ndarray | None = None # shape (N,) int64
_enc_student_names: dict = {}
_cache_lock = threading.Lock()
_cache_dirty = True
def invalidate_encoding_cache():
global _cache_dirty
_cache_dirty = True
def _load_encoding_cache(db):
global _enc_matrix, _enc_student_ids, _enc_student_names, _cache_dirty
with _cache_lock:
if not _cache_dirty and _enc_matrix is not None:
return _enc_matrix, _enc_student_ids, _enc_student_names
rows = db.execute(
text("""
SELECT s.id AS student_id, s.name AS student_name, se.encoding AS encoding_blob
FROM student_encodings se
JOIN students s ON s.id = se.student_id
""")
).fetchall()
encodings, student_ids, names = [], [], {}
for r in rows:
try:
enc = np.frombuffer(r.encoding_blob, dtype=np.float64)
if enc.size == 128:
encodings.append(enc)
student_ids.append(r.student_id)
names[r.student_id] = r.student_name
else:
logging.warning(f"encoding size invalid for student {r.student_id}: {enc.size}")
except Exception as e:
logging.exception(f"Error decoding encoding for student {r.student_id}: {e}")
if encodings:
_enc_matrix = np.vstack(encodings)
_enc_student_ids = np.array(student_ids, dtype=np.int64)
else:
_enc_matrix = np.empty((0, 128), dtype=np.float64)
_enc_student_ids = np.array([], dtype=np.int64)
_enc_student_names = names
_cache_dirty = False
logging.info(f"Encoding cache loaded: {_enc_matrix.shape[0]} encodings, {len(names)} students")
return _enc_matrix, _enc_student_ids, _enc_student_names
# --- Image preprocessing (Phương án 3: resize trước khi detect) ---
def _preprocess_image(image_data: bytes, max_width: int = 640) -> np.ndarray:
nparr = np.frombuffer(image_data, np.uint8)
img = cv2.imdecode(nparr, cv2.IMREAD_COLOR)
h, w = img.shape[:2]
if w > max_width:
scale = max_width / w
img = cv2.resize(img, (int(w * scale), int(h * scale)), interpolation=cv2.INTER_AREA)
return cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
app = FastAPI()
# --- CORS ---
@ -106,7 +38,6 @@ def get_db():
db.close()
app.mount("/static", StaticFiles(directory="static"), name="static")
@app.get("/")
def root():
return FileResponse("static/index.html")
@ -132,8 +63,8 @@ async def register_face(
with open(image_path, "wb") as f:
f.write(image_data)
# Encode face — dùng _preprocess_image để tránh load lại từ disk
image = _preprocess_image(image_data)
# Encode face
image = face_recognition.load_image_file(image_path)
encodings = face_recognition.face_encodings(image)
if not encodings:
@ -157,7 +88,7 @@ async def register_face(
{"student_id": student_id, "encoding": encoding_bytes}
)
db.commit()
invalidate_encoding_cache()
return {"message": "Đã thêm encoding mới."}
else:
@ -186,7 +117,7 @@ async def register_face(
{"student_id": student_id, "encoding": encoding_bytes}
)
db.commit()
invalidate_encoding_cache()
return {"message": "Đăng ký thành công."}
except IntegrityError:
@ -258,159 +189,113 @@ async def register_student(
db.close()
@app.post("/checkin")
async def checkin(background_tasks: BackgroundTasks, file: UploadFile = File(...), camera_id: str = Form("cam1"), db: Session = Depends(get_db)):
image_data = await file.read()
path = os.path.join(UPLOAD_DIR, "checkin.jpg")
with open(path, "wb") as f:
f.write(image_data)
# Phương án 3: resize ảnh trước khi detect — bỏ disk I/O
unknown_img = _preprocess_image(image_data)
unknown_img = face_recognition.load_image_file(path)
unknown_encodings = face_recognition.face_encodings(unknown_img)
if not unknown_encodings:
return {"message": "No face detected.", "status": False}
if not unknown_encodings:
return {"message": "No face detected."}
unknown_encoding = unknown_encodings[0]
# TÙY CHỈNH: threshold nhỏ hơn → ít nhầm lẫn, nhưng dễ false negative.
# Thử: 0.4 (chặt), 0.45 (cân bằng), 0.55 (lỏng)
DIST_THRESHOLD = 0.42
# Get all encodings with student info
encodings = db.execute(
text("""
SELECT s.id, s.name, s.email, s.avatar, se.encoding
FROM student_encodings se
JOIN students s ON s.id = se.student_id
""")
).fetchall()
# Phương án 1: dùng cache RAM thay vì query DB mỗi request
enc_matrix, enc_sids, enc_names = _load_encoding_cache(db)
for encoding in encodings:
known_encoding = np.frombuffer(encoding.encoding)
result = face_recognition.compare_faces([known_encoding], unknown_encoding, tolerance=0.5)
if result[0]:
now = datetime.datetime.now()
if enc_matrix.shape[0] == 0:
return {"message": "No known encodings in DB.", "status": False}
# Check recent checkin
recent_check = db.execute(
text("""
SELECT id FROM checkin_logs
WHERE student_id = :student_id
AND time > :time_threshold
"""),
{
"student_id": encoding.id,
"time_threshold": now - datetime.timedelta(minutes=0.5)
}
).fetchone()
# Phương án 2: vectorized — tính tất cả distances 1 lần qua BLAS
all_dists = face_recognition.face_distance(enc_matrix, unknown_encoding)
if recent_check:
return {
"message": f"{encoding.name} already checked in recently.",
"checking": False,
"data": {
"id": encoding.id,
"name": encoding.name,
"email": encoding.email,
"avatar": encoding.avatar,
"camera_id": camera_id,
"time": now.isoformat()
}
}
# Tìm min distance theo từng student
best_student = None
best_distance = float("inf")
second_best_distance = float("inf")
for sid in np.unique(enc_sids):
mask = enc_sids == sid
min_dist = float(np.min(all_dists[mask]))
logging.info(f"Student {sid} ({enc_names.get(sid)}) min_dist = {min_dist:.4f}")
if min_dist < best_distance:
second_best_distance = best_distance
best_distance = min_dist
best_student = int(sid)
elif min_dist < second_best_distance:
second_best_distance = min_dist
# thêm dô đây
id_log = 0
ms_response = create_history({"name": encoding.name.split('\n')[0], "time_string": f"{datetime.datetime.now()}", "status": "check in"})
id_log = ms_response.get('data').get('id')
status = ms_response.get('data').get('status')
# reset pointer
file.file.seek(0)
background_tasks.add_task(
send_image,
id_log,
image_data, # truyền bytes, không phải UploadFile
encoding.name,
status
)
# Debug log best/second distances
logging.info(f"Best student {best_student} dist={best_distance:.4f}, second_best={second_best_distance:.4f}")
# Ratio check: nếu best much better than second best => more confident
ratio_ok = True
if second_best_distance < float("inf"):
ratio = best_distance / (second_best_distance + 1e-8)
logging.info(f"Distance ratio (best/second) = {ratio:.4f}")
# Nếu ratio quá gần 1 (ví dụ > 0.85) => không đủ phân biệt
if ratio > 0.85:
ratio_ok = False
# Quyết định match nếu best_distance nhỏ hơn threshold và ratio ok
if best_distance <= DIST_THRESHOLD and ratio_ok and best_student is not None:
# kiểm tra recent check (nửa phút trước)
now = datetime.datetime.now()
recent_check = db.execute(
text("""
SELECT id FROM checkin_logs
WHERE student_id = :student_id
AND time > :time_threshold
"""),
{
"student_id": best_student,
"time_threshold": now - datetime.timedelta(minutes=0.5)
# Insert new checkin
db.execute(
text("""
INSERT INTO checkin_logs (student_id, time, camera_id, status)
VALUES (:student_id, :time, :camera_id, :status)
"""),
{
"student_id": encoding.id,
"time": now,
"camera_id": camera_id,
"status": status
}
)
db.commit()
return {
"message": f"Check-in successful for {encoding.name}",
"checking": True,
"status": status,
"data": {
"id": encoding.id,
"name": encoding.name,
"email": encoding.email,
"avatar": encoding.avatar,
"camera_id": camera_id,
"time": now.isoformat()
}
}
).fetchone()
if recent_check:
return {"message": f"{enc_names.get(best_student)} already checked in recently.", "status": True}
last_log = db.execute(
text("""
SELECT status FROM checkin_logs
WHERE student_id = :student_id
ORDER BY time DESC LIMIT 1
"""),
{"student_id": best_student}
).fetchone()
status = "check out" if last_log and last_log.status == "check in" else "check in"
insert_result = db.execute(
text("""
INSERT INTO checkin_logs (student_id, time, camera_id, status)
VALUES (:student_id, :time, :camera_id, :status)
"""),
{
"student_id": best_student,
"time": now,
"camera_id": camera_id,
"status": status
}
)
log_id = insert_result.lastrowid
db.commit()
def _sync_to_ms(name: str, time_string: str, img_data: bytes, local_status: str, checkin_log_id: int):
try:
ms_response = create_history({"name": name.split('\n')[0], "time_string": time_string, "status": local_status})
id_log = ms_response.get('data', {}).get('id', 0)
ms_status = ms_response.get('data', {}).get('status', local_status)
if ms_status != local_status:
fix_db = SessionLocal()
try:
fix_db.execute(
text("UPDATE checkin_logs SET status = :status WHERE id = :id"),
{"status": ms_status, "id": checkin_log_id}
)
fix_db.commit()
logging.info(f"Corrected log #{checkin_log_id} status: {local_status}{ms_status}")
finally:
fix_db.close()
send_image(id_log, img_data, name, ms_status)
except Exception as e:
logging.error(f"MS sync error: {e}")
background_tasks.add_task(
_sync_to_ms,
enc_names.get(best_student),
f"{datetime.datetime.now()}",
image_data,
status,
log_id,
)
student = db.execute(
text("""
SELECT id, name, email
FROM students
WHERE id = :id
"""),
{"id": best_student}
).fetchone()
user_data = {
"id": student.id,
"name": student.name,
"email": student.email,
} if student else None
return {"message": f"{status} successful for {enc_names.get(best_student)} (dist={best_distance:.4f})", "status": True, "status_type": status, "data": user_data}
# Nếu không thỏa threshold/rule thì trả no match (và log lý do)
reasons = []
if best_distance > DIST_THRESHOLD:
reasons.append(f"best_distance({best_distance:.4f}) > threshold({DIST_THRESHOLD})")
if not ratio_ok:
reasons.append(f"ratio not confident ({best_distance:.4f}/{second_best_distance:.4f})")
logging.info("No confident match: " + "; ".join(reasons))
return {"message": "No match found.", "reasons": reasons, "status": False}
return {"message": "No match found."}
@app.get("/logs")

View File

@ -9,7 +9,7 @@ class Student(Base):
id = Column(Integer, primary_key=True, index=True)
name = Column(String(100), nullable=False)
email = Column(String(100), nullable=False, unique=True, index=True)
avatar = Column(String(500), nullable=True, index=True)
avatar = Column(String(500), nullable=True, unique=True, index=True)
__table_args__ = (UniqueConstraint('email', name='uq_student_email'),)

View File

@ -1,5 +1,5 @@
{
"name": "TrackingToolWeb",
"name": "school-checkin",
"lockfileVersion": 3,
"requires": true,
"packages": {}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,4 +1,4 @@
<!doctype html>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
@ -8,12 +8,12 @@
<script
type="module"
crossorigin
src="/camera/static/assets/index-_MGhSlOr.js"
src="/camera/static/assets/index-Cs3L7CRl.js"
></script>
<link
rel="stylesheet"
crossorigin
href="/camera/static/assets/index-B9NPk65I.css"
href="/camera/static/assets/index-CDZdzCu6.css"
/>
</head>
<body>

View File

@ -1 +0,0 @@
[{"weights":[{"name":"conv0/filters","shape":[3,3,3,16],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.009007044399485869,"min":-1.2069439495311063}},{"name":"conv0/bias","shape":[16],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.005263455241334205,"min":-0.9211046672334858}},{"name":"conv1/depthwise_filter","shape":[3,3,16,1],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.004001977630690033,"min":-0.5042491814669441}},{"name":"conv1/pointwise_filter","shape":[1,1,16,32],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.013836609615999109,"min":-1.411334180831909}},{"name":"conv1/bias","shape":[32],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.0015159862590771096,"min":-0.30926119685173037}},{"name":"conv2/depthwise_filter","shape":[3,3,32,1],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.002666276225856706,"min":-0.317286870876948}},{"name":"conv2/pointwise_filter","shape":[1,1,32,64],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.015265831292844286,"min":-1.6792414422128714}},{"name":"conv2/bias","shape":[64],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.0020280554598453,"min":-0.37113414915168985}},{"name":"conv3/depthwise_filter","shape":[3,3,64,1],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.006100742489683862,"min":-0.8907084034938438}},{"name":"conv3/pointwise_filter","shape":[1,1,64,128],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.016276211832083907,"min":-2.0508026908425725}},{"name":"conv3/bias","shape":[128],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.003394414279975143,"min":-0.7637432129944072}},{"name":"conv4/depthwise_filter","shape":[3,3,128,1],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.006716050119961009,"min":-0.8059260143953211}},{"name":"conv4/pointwise_filter","shape":[1,1,128,256],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.021875603993733724,"min":-2.8875797271728514}},{"name":"conv4/bias","shape":[256],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.0041141652009066415,"min":-0.8187188749804216}},{"name":"conv5/depthwise_filter","shape":[3,3,256,1],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.008423839597141042,"min":-0.9013508368940915}},{"name":"conv5/pointwise_filter","shape":[1,1,256,512],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.030007277283014035,"min":-3.8709387695088107}},{"name":"conv5/bias","shape":[512],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.008402082966823203,"min":-1.4871686851277068}},{"name":"conv8/filters","shape":[1,1,512,25],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.028336129469030042,"min":-4.675461362389957}},{"name":"conv8/bias","shape":[25],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.002268134028303857,"min":-0.41053225912299807}}],"paths":["tiny_face_detector_model-shard1"]}]

View File

@ -1,120 +0,0 @@
INSERT INTO `student_encodings` (`id`, `student_id`, `encoding`, `created_at`) VALUES (1, 1, 0x000000A0A564C1BF00000040C9E8C73F000000E09BEAA33F00000080C54D99BF000000800B4FA7BF00000000341CA9BF00000000940CADBF000000004BA8B6BF000000C000C7C03F00000000CC09ABBF000000A02DBFD23F00000060C8B2ACBF0000008077B0C4BF000000E04048C8BF00000000E32592BF000000009208C83F000000A06309C9BF000000006BACC3BF000000C05BAD9ABF000000003563ADBF00000060AC64AD3F0000004028139CBF0000000016859EBF000000406D68A13F00000060DB97BFBF000000C0ABEDD4BF000000809E0890BF00000000C147B9BF000000C03C84A33F000000C06355B8BF00000080EDCCABBF000000408352A63F00000000A78CCABF000000E08B38BEBF0000002060ABB03F000000809B33B53F000000202392A4BF00000040F65FAEBF000000E022D3CA3F00000000C95AADBF00000040A781C1BF00000000B2B4A63F000000A0DC4EBD3F00000080CC49D33F000000809C64C83F000000203BEDA83F0000002076F9A1BF00000080FDE7A1BF00000000CF8AC23F000000E02814C6BF000000009D1D9A3F00000020B6E6BE3F000000407B67C23F000000400D44B73F0000002057B4B23F000000E038BAC4BF00000000EC25A23F000000808365B73F000000003B88C8BF000000E01E9E97BF000000007DDA8C3F000000C0B81DBCBF000000E0BF27A6BF0000000071F6B7BF00000080A8BED03F00000080E957B73F00000080449CB3BF0000000069BABABF00000000588DC43F000000A0FCB0A7BF000000A0F9DBAABF000000006489903F000000208D1EBEBF000000805E04C5BF00000040B35ED0BF000000003780B23F000000809815D43F000000204AC0C33F00000040DD19CABF000000208509B43F00000000699FAA3F0000000042168DBF000000A07A72BC3F00000080E104B63F000000009CE5A6BF000000005D228DBF000000A0E0D89FBF0000000063A7933F00000040EEBAC53F00000000D713813F000000A06953B1BF000000403FE8C13F000000806602A3BF00000040CF17A43F000000E08116A13F000000C04328B7BF00000000ADC99DBF000000C074CAAE3F000000803FFFC3BF00000080CAAB973F000000403CF4A23F000000C0ADBFAEBF0000000020C151BF00000040484FB63F000000606628C4BF00000080D8ABA13F000000405F6AAD3F000000607DB7A33F000000C0D774A6BF0000000051AFA23F00000040B7E4B5BF000000006D2F903F000000207588B03F000000207AFBD1BF00000040BD1CD63F0000004044E8C33F000000C09169A73F000000208DC0C33F00000080EE5EBB3F000000005CFD7BBF000000C07D94B23F000000807BF09BBF0000006045BAC2BF000000602818B9BF00000060D154C03F0000004015DDA2BF0000000085F7C33F00000040C88A9E3F, NULL);
INSERT INTO `student_encodings` (`id`, `student_id`, `encoding`, `created_at`) VALUES (2, 1, 0x000000E0D016C0BF000000C06578BE3F000000007C8261BF00000000A78A96BF000000803F7EB5BF0000000029F98BBF000000E0F889A6BF00000060FEABADBF000000E0FA09C03F00000000999BA8BF000000801601D03F000000C08E77A5BF0000004097D5C6BF00000020E431C2BF00000000481898BF00000060D07FC83F00000000237BC7BF000000A044BEC5BF000000E02FF99CBF00000040840DA5BF000000A0E4A4B03F00000060D9F694BF000000802AB0A5BF0000008051A59E3F00000040431DBEBF000000608D72D3BF000000000320803F00000040869CB1BF000000205131AB3F000000A046FFC2BF000000803E15ABBF000000404344B03F00000080F927CABF000000C09762B8BF00000060A63FB63F000000E00BB5BD3F00000080C128A1BF000000404E74A3BF000000C0A719C73F000000C01B7192BF000000405C1AC5BF00000000C10C9B3F000000403FFDB43F00000040082AD23F0000008043D2C63F00000080DC9FBB3F000000C0DAC9B0BF00000000FF38A5BF00000040E713BF3F000000600400CDBF000000E0E559B13F00000000101AB83F000000E01E15C13F000000805286AF3F00000000C2DFA83F000000803D96C9BF000000003890863F00000040B584B53F0000004017A2C6BF000000806A52843F00000000C963903F000000803331C0BF00000080B35A96BF0000008064F6B7BF000000C0B545D13F0000006069F4B13F000000E09517B5BF00000000679EB2BF000000408A84C83F000000406555A1BF000000A0B3E4ACBF000000807A42903F000000600DA9B1BF000000208D84C5BF00000000C8F6CCBF000000007A87AF3F00000080B369D53F0000002023C6C33F000000C03F89CDBF00000040B089A63F00000000929CA93F00000000723C783F000000C02117B83F000000C00EF9B43F00000040AE21A7BF00000080928C90BF00000020605BB1BF00000000D1F391BF00000060B0CBC63F00000000BC0B863F000000C005C2B0BF00000080771CC33F00000080FE53A2BF000000C0FE6AA83F000000003243AD3F00000040574EAEBF0000004087D3A9BF00000080672D993F000000203E98C5BF0000004080D7B3BF000000208089A83F000000C070F4ADBF00000000F05154BF000000603CEAC03F000000C0CA4DC0BF0000004069ACB33F00000000A101983F000000203EA09B3F00000000576B9CBF0000008007E6A73F000000C0570CB0BF00000000086673BF00000020EC78B03F00000080EC84D0BF000000604F76D43F000000C0D77DC43F000000E0DD65B03F00000040E439C43F000000602487BA3F000000000212943F000000C0ABB1B23F00000080911A9DBF000000600FF9C4BF000000404054BABF000000E08B56BE3F000000004D06A4BF000000800BCFC23F000000003220A83F, NULL);
INSERT INTO `student_encodings` (`id`, `student_id`, `encoding`, `created_at`) VALUES (3, 1, 0x000000C0544BC1BF000000E02A2CC33F000000C03AAEA53F00000000D41C79BF00000040823FA2BF00000080D3C59FBF000000E0CF2DA3BF00000080D22CBABF000000C0F5B8BF3F0000000009D4ADBF000000A0E2C3D23F00000000AB06AFBF0000000031BDC5BF0000006004DBC7BF000000000A08A0BF00000060B107C83F00000000A3EDC5BF000000E0ACF6C4BF00000080BC5FADBF000000801784A8BF0000008079A3A93F000000A0CEB2A8BF000000A0111896BF00000080835B943F000000409110BFBF000000609461D5BF00000000A65779BF0000000007DFB3BF00000000BA3052BF00000020E8F2C0BF00000080D575AEBF000000A0E6F4B73F000000C0BED5C7BF000000C01A90BFBF000000805130AA3F000000006195BB3F00000040DB77A4BF00000080DF3BA1BF000000A0AE49CA3F00000080C78D9CBF000000800261C6BF00000000AF42B23F000000C04E89B93F000000E0F65FD43F000000C0E49FCA3F000000C0E9EFB33F000000C093C5ADBF000000C02A14B0BF000000806919C33F000000E0C065C9BF000000E086498FBF00000000B9E7BE3F00000040B469C23F000000005E38B13F00000000BC07AA3F000000E0AF85C4BF00000000F877A13F0000000085C5B13F000000C06BF4C7BF0000004063DDA0BF00000000694F833F000000A08221C3BF00000040E6A49EBF000000C0E9DDBDBF000000C03757CE3F0000000000E5B53F000000604577B3BF000000C0789EB3BF00000000D2D5C33F000000004155A8BF000000405084ADBF00000000ED0CA53F000000002A61BBBF000000E064D5C8BF0000000084FFD0BF000000008639A83F000000803411D63F00000000D9EDC33F000000405068CCBF00000020A1B8A63F00000020213CA13F000000008499743F00000020D836BE3F00000020A85AB83F000000E022C5ACBF00000000348C82BF0000008074F3A9BF000000806786A0BF000000A07A8CC63F0000000040F9933F000000203667B4BF000000E0F4DDC03F00000020265496BF0000000083D8AC3F00000000579FAA3F00000040176AB3BF00000080C3B9A6BF00000080C2F1AC3F000000A09A68C9BF00000080B38399BF0000000020524EBF000000A0F6D0B2BF000000001AAB813F00000040B024B43F000000A0F3C1C3BF000000A01816B13F000000805926A83F0000002074BAA43F0000000064899ABF000000806B77A23F000000003410ADBF00000000697B903F000000C0AA71B23F00000020ACCFD2BF00000060F5F4D13F00000080C539C93F000000002241AC3F000000E06937C43F000000402DBFC03F000000805425923F00000000013B963F00000000801556BF00000020F29CC4BF000000C03DB2B6BF00000080719AC03F00000080C2D099BF000000809398C43F000000004264903F, NULL);
INSERT INTO `student_encodings` (`id`, `student_id`, `encoding`, `created_at`) VALUES (4, 1, 0x000000E09E48C0BF000000A0A223C33F00000000C0BC8B3F000000404D4C85BF000000805FCCACBF00000000942F64BF000000005554A9BF000000A0CD79B3BF000000403E03BC3F00000060A4A1ADBF000000402BB4D03F000000E0ADBEB2BF0000000022BBC5BF000000C03475C4BF0000008093E39FBF000000407DBEC83F00000060BD61C5BF000000C0FFA2C9BF00000020C4909FBF00000000D25385BF000000E00AA2B43F000000607CB8ADBF000000208997AFBF00000080DB719F3F00000000174EC3BF000000002409D4BF000000008D4B873F00000040E1D4B6BF0000004049BE923F00000060DC07C4BF0000000086B3B1BF00000080352DAC3F000000204834CABF00000080CAB9B8BF000000809186AE3F000000C0C86FBF3F000000C0E2A0ACBF000000805683A2BF000000809DD9CA3F00000000C0CF93BF000000803A80C8BF00000080878DA83F000000A0F349B93F000000E02A7ED33F00000080D9F8C83F000000E00C7BB33F000000C0B181A9BF00000080CAFAACBF000000E0A7B3C13F000000C05C23CCBF000000E0DA70A73F000000C01160BD3F00000040B0DFC63F000000C03B38C03F00000080C618A13F00000000F8FFC6BF000000001B66A33F00000080CCDAB63F000000E02CCAC8BF0000008082E5933F00000000EC27813F00000060B750C1BF000000C09B948D3F000000C00B5FB2BF000000A076B9D13F00000000574BB33F0000006062B9B2BF000000C0EDF8B4BF00000020B67FC63F000000A051B89ABF000000003B3AB1BF000000C0508BA83F000000802916B9BF000000A0FE73C8BF000000802407D1BF000000009F5DB03F000000408343D43F00000080D8E2C33F000000C084D4CBBF0000008035549D3F000000C0A0449C3F000000006CA46ABF00000040D9C9B83F000000E081C2B33F000000A00050A3BF000000803BC4A1BF00000040E148A9BF00000000F0C9633F00000040FFC0CB3F0000000054B57FBF000000003CABB3BF000000A0E27BBE3F0000006018BD9FBF000000C0C3BDA23F000000A090449E3F00000080D3B3A5BF00000080D0E0A5BF00000000C45EAD3F000000006469C4BF000000C0AAE2A8BF000000800059943F000000A0B24DACBF000000005E1A8D3F000000000F85C03F00000060FDF4C3BF000000806354AE3F000000005FD9A33F000000C0DC949B3F000000C0BDB5A3BF000000004B9AA93F00000080E6CDB3BF00000000C0056F3F00000060717BB03F000000400AF7D1BF000000807CD8D53F000000C0DB93C73F000000603E4CB33F000000007A18C03F0000008021D0BD3F00000000DC0180BF00000080EBA1B03F00000000A9A9A2BF00000020E7C5C4BF00000080F0C7B3BF000000C0390CC23F00000000804C5B3F000000403F3DC33F00000040B477A53F, NULL);
INSERT INTO `student_encodings` (`id`, `student_id`, `encoding`, `created_at`) VALUES (5, 1, 0x000000408A65B9BF000000807975BB3F000000A0CC35B33F00000020E1629E3F0000006072E2B3BF00000000440C74BF000000603C26AABF000000007838B2BF00000020468FBC3F000000002EC0B9BF000000E08B83CF3F00000080333EB9BF000000C01CC2C8BF000000C0CC95BABF000000C02DFFA1BF000000408313CF3F0000000089A6C1BF000000C0D3E9B9BF000000C0AC39B7BF000000200BD3B1BF000000E08A51A53F00000040B3B896BF000000C003159CBF000000804EBF993F000000A0760DB2BF00000080AF43D5BF000000001D8195BF00000060E49FA9BF00000000F71EA93F000000E0C33DC0BF00000000B3D9BDBF00000080B97BAD3F000000A06F3BC8BF0000000030D8C0BF00000020BC3BB13F00000000F50AB73F0000000096FBA4BF00000080F046A4BF00000040F691C43F000000C00EFAA5BF000000403D4DC5BF00000000721BB23F00000080D545B73F000000E0EF80D03F00000000203FC63F00000000DA68BB3F000000802017A5BF00000080F4C6B3BF00000000D37EBC3F00000000071BCABF00000040FD839A3F000000605F3DB73F000000C06174B53F000000E01D5DB73F0000008097DBAB3F000000006E27C4BF00000000A0C86B3F000000005496C03F0000002025D8C2BF000000E037D1AB3F000000801517993F000000405487C0BF00000060C20BADBF00000040C207B0BF00000000DE5AD03F00000060B8BAB33F000000C0262CB8BF00000040EDB2C0BF000000E0178BC93F00000000830BA8BF00000040ADEFA8BF00000000B8516DBF000000A0FB67B9BF00000020FF75C5BF00000020E0C1D2BF000000C0AB24B73F00000020739FD83F00000060BE0BBD3F00000040D474CDBF000000209046AF3F000000E05589A33F00000000F1D8803F00000080CDD3C03F000000E00122C23F00000000809B81BF000000C088C8A6BF000000005A2E7ABF00000000E05C73BF0000000095BAC33F000000007A8E8BBF00000000CB8AADBF00000000A79DC63F00000020A120A0BF000000C09421A43F00000020E4909D3F00000000CA537EBF000000C080E2AABF00000040EF37993F000000C06930C8BF0000008088EAA9BF00000000689AB83F00000040DF95AFBF00000000E2A0843F000000E04B1FBE3F000000002170C3BF000000C0EBD5B03F00000000C43C7A3F000000C076DCA73F000000803AF6A83F000000C0782AB33F000000A0E44ABBBF00000000A3DC91BF000000601F6AB83F000000C07E96D2BF00000080792AD33F000000407374CC3F000000401E75AC3F000000C0D39FBB3F0000000094CCC03F000000002859A83F0000000034ABC03F00000000FC067A3F000000E0D0A8C6BF0000008032C9B9BF000000E0828CC03F000000009F4A9EBF00000080D42DAF3F000000A0E2CDA83F, NULL);
INSERT INTO `student_encodings` (`id`, `student_id`, `encoding`, `created_at`) VALUES (6, 1, 0x00000000D9B4BFBF00000080E7E5C33F00000020665EB23F0000000000D8AEBE000000C0C48BA7BF00000000B2CE713F00000000316DA1BF00000000B45ABABF000000405335BC3F00000080B934B3BF000000609812D03F000000006C0FAABF00000080CA94CBBF00000040473DBFBF00000000B089583F000000A0D4E1C93F000000401142C5BF00000080F704C3BF000000C064F3B8BF00000040CFC1A4BF000000006600A63F000000800C41B0BF00000000509088BF00000000161A8DBF000000000338BBBF000000003DD8D3BF0000004080AD97BF000000C04D83B2BF000000403C6DAD3F000000C08D2FB5BF000000E092CDB5BF000000808EEEA33F000000803743CABF000000603F7DC1BF000000C0B695A93F000000000266BB3F000000A02531B3BF0000000048FC7E3F00000080E1C4C83F000000604DE09CBF000000802DF4C6BF00000000407BAE3F00000080EFB7B03F000000E0DA8DD23F00000020EB43C93F000000A036F1B53F0000006097BAA2BF000000007D5FA5BF00000020D45AB43F000000A0B47CD1BF00000080EE43B63F000000C0F498B83F00000080F8D0C33F000000C02240BA3F00000040E202B43F000000E08207C6BF00000000F08271BF000000E05AE4BC3F000000C0884DC5BF0000000033F5B03F000000C0CC3CAA3F00000040EE03C2BF000000E0DC56AABF0000000038CFB5BF00000080D1DACF3F0000000046F3B83F000000C064A1BBBF000000005C88B4BF0000008041FBC53F00000000D0D5413F000000C0AC22A0BF000000209348A33F000000C0AA25BBBF0000008017AAC6BF000000A0C554D3BF000000C0A805B63F00000040D3D6D93F00000060F468C33F000000C05BDDCABF00000000E6B4853F00000000ADD87EBF00000000F469673F0000004051ACB93F000000C0C8D3B13F000000404825A2BF00000000C6F091BF0000000040958CBF000000000EE4A23F00000040E8DBC03F000000004404A1BF000000201EFAB6BF000000400A43C53F00000000D876A3BF000000A018FAAD3F0000000022AF6C3F000000003BB091BF0000000072C78BBF000000005D6073BF000000006FA5CBBF000000C07C26B1BF000000E0BC6EAE3F000000604AACAEBF00000000D652963F000000008127BA3F00000040AD02C2BF00000000FF52AE3F0000004085F1A93F000000E02CD7A83F0000000077F3883F000000801566AB3F000000E09CF1BCBF000000000078F53E00000080F64EBC3F000000600ECCD2BF00000040E44CD33F00000060A78CCE3F00000020F01A973F000000C0D66AB53F00000060F2F6C13F00000000801494BF000000A03947B93F0000000000D392BF000000804318C6BF000000200856B5BF000000206BA4C13F00000000C8E4643F000000400EA7BB3F00000000164CB03F, NULL);
INSERT INTO `student_encodings` (`id`, `student_id`, `encoding`, `created_at`) VALUES (7, 1, 0x000000C01C9BBFBF000000E09F87C13F00000080897E873F000000003B25A5BF00000020768CABBF000000C0DCDFA1BF000000809DC19BBF000000E0E6A2B6BF000000C07A24BE3F000000E06250A3BF000000200521D23F00000060A1A6AEBF000000A07399C6BF000000806B6EC8BF00000040A913A2BF000000002463C83F00000000F089C7BF00000000D016C2BF000000603346A4BF00000080A5579DBF00000080939BB03F0000000066A2A5BF000000E0643F9ABF00000000FE20A23F000000E0850BB7BF00000080CCC9D3BF00000000140280BF000000C0EE2EB6BF000000E009E7963F000000C02A86BEBF000000C0EBCAA8BF000000E0DDE6AE3F00000000B9DCC6BF000000C0DCAEBDBF000000805862B33F000000C05187B93F000000A049ECA8BF00000000AAF5A3BF00000060D10FCB3F000000605155A7BF000000C02798C4BF000000800F46AD3F00000000AED0B83F0000004074DFD23F000000601E3BCA3F000000E09745B13F000000207947A4BF0000008006D1AFBF000000000803C13F00000040A50FC8BF00000080E3C3983F00000060C5CFBB3F000000403BB1C23F000000C04932B03F000000A0FB2FAD3F00000020ADC4C6BF000000006609903F000000E0AA4BB63F000000804ACBC5BF00000040B4EF95BF0000008047D0963F0000002014B4C0BF00000060261AA4BF00000000899DB9BF000000A01ED2CE3F00000000DE74B13F000000007360B8BF000000404D53B8BF000000407BDDC63F000000009D48A3BF00000040D976ACBF00000080B7FE903F000000807409BDBF00000000B9B0C6BF00000060ABF5CEBF000000C0FF2CB13F00000080F8AED43F00000020A447C43F000000800314CDBF0000004026C5A93F00000040D7C29E3F00000080FB2E953F000000200CB0BC3F000000A0E1CCB73F000000405BC0A1BF00000000A5468BBF000000008DF6AABF00000000F4238BBF00000000B8C0C13F00000000293F8BBF000000A0291CB1BF00000080B85DC13F000000E0D8249CBF000000403FC8AB3F00000020C65DA53F00000020A5E6B3BF00000080F530A0BF000000406D23B23F000000407B86C7BF000000006C948BBF000000C09718A43F000000C0FD6DB0BF000000007B4CA03F000000802BD0B93F00000080E33DC1BF00000080B912AC3F000000C017B0A43F00000080159DA43F000000C05474A0BF00000000F4EF9E3F00000080B616B0BF000000005FE9903F00000080C8B4B13F00000000C94ED1BF000000C01EAAD43F0000006041FEC53F00000040D542AE3F00000040DBBFC23F00000060C98AC03F00000000A8818F3F000000606D7DB13F00000000A7D997BF0000000016BBC4BF000000C0B9C4B3BF000000C024C1BD3F00000000ECBC86BF000000C08A1BC43F000000C0D3E99B3F, NULL);
INSERT INTO `student_encodings` (`id`, `student_id`, `encoding`, `created_at`) VALUES (8, 1, 0x0000004004C4C0BF00000000F96DC63F000000A0B03B903F0000000087577EBF000000C03BD2ACBF000000C0E306B0BF000000C09763A7BF000000C0ECDDB5BF00000000E078C03F000000006FDE98BF000000C02C8DD13F000000407C57AFBF00000000ECA9C5BF000000A05823C7BF000000C0E42BA3BF0000008085FFC93F000000005D2EC8BF000000401631C1BF00000040AC4EAEBF000000407D94A1BF0000008097F9AB3F00000000A323A6BF000000C0339398BF000000801CC69F3F00000020EE54B2BF00000000DE00D5BF00000040367891BF00000040CC37B9BF00000060C041AB3F00000040092DBFBF000000406411ACBF000000C0B4CDA53F000000003EC3C7BF000000C0EE4BC1BF000000C028B4B13F000000C00876B33F000000A09965A9BF000000800F22A1BF00000080D788CB3F00000040712EB4BF000000C0FE5EC3BF000000C0F757B03F00000060680AB93F00000020A4AAD23F00000040F8D4C83F000000203898B33F000000C0451296BF000000002195ABBF000000C06625BC3F00000040B495C6BF00000080A9309C3F000000805FD3BC3F0000008041B8C13F00000040341EB73F0000000018F9AC3F000000C0ED8EC6BF000000000C898A3F0000004039DDB33F000000A051C9C6BF00000000438D78BF000000800E5AA13F0000006092AABEBF000000007604ADBF000000400BD2B4BF000000401252D13F000000C0C8E9B23F000000A04D03B9BF000000A0ACFDB9BF000000009FF4C43F0000006091DAACBF000000C00A78A0BF00000080BE418B3F00000080B55CBABF00000040D427C6BF000000E0BC01D0BF00000000E8D0B23F000000806D38D53F000000E02386C23F00000080E89BCCBF00000020D6E5AE3F00000060AC469A3F00000000A07C64BF000000806BA0BA3F000000E02E3CB63F000000004E53A3BF00000080942291BF00000000C888A7BF00000000FEB9823F000000600B0EC33F00000080D84891BF000000E07AC6B0BF000000200DF3C03F00000080B3E298BF000000009D0EAA3F000000400330923F000000A08F5CB1BF00000000AA2C91BF000000806452A93F0000008025D9C3BF000000006A44893F00000040FFB0AE3F00000000A725ABBF00000000D895783F000000007571B33F0000004022E6BDBF00000080A456AA3F00000040FDF2AA3F00000080C4FDAA3F000000407A78A5BF00000000CD88A53F000000A0C2C5B4BF00000000C00B833F00000000CE57B63F000000C01A37D1BF000000E0BAA5D73F00000080C3F7C53F000000809106A73F00000080FADAC13F000000409B87BB3F0000000044A3863F000000807C5EB43F000000805B9B99BF0000002028DCC2BF000000603E9BB6BF000000A03E14BF3F0000008090359BBF000000C03007C43F000000C0C1ABA23F, NULL);
INSERT INTO `student_encodings` (`id`, `student_id`, `encoding`, `created_at`) VALUES (9, 1, 0x0000004082C8C0BF00000080AC9FC83F00000000FF4EAC3F00000000188A493F00000000A94EA9BF0000000052F8A3BF00000040E040A4BF000000A09334B8BF000000E05135BD3F000000A0FFD598BF0000002085CAD13F000000C0C5C0AEBF000000803A1ACABF00000080C66BC6BF000000003074403F000000A0EC15C93F000000C02578C4BF00000060FCDCC6BF00000020A057A6BF00000000B67BA1BF000000C08F4AB33F000000E0E47CA1BF00000000FA0EA8BF0000000008839E3F000000C03DE0BFBF000000C084E4D3BF00000000579685BF00000000AAE8B5BF000000C0DF7EA13F000000E00D40C3BF000000200454B1BF0000000038176A3F00000080EAD7C8BF0000004093E2BCBF000000E0EE1EB13F000000E0E439C03F00000080DF06B2BF00000040D09CA5BF000000002877C93F000000C08356A8BF000000A01797C8BF00000000AE45B13F000000A0DBC4B73F000000A026CBD33F0000004028F0C93F000000E06E16B83F000000E05431A9BF00000000AB5BAABF000000A026DCBC3F00000020FBCAC8BF000000C0E7B9B33F00000080BDA8BD3F000000C0B042C63F00000080BDBDB73F00000040BC1DAB3F0000006090DFC7BF00000000284782BF000000E0831DBA3F000000400237CCBF0000000032C4713F00000080082FA33F000000C0212AC3BF000000407DB2A3BF000000E0A57CB7BF000000404F15D03F00000080FEAEB73F000000C0C1F1BABF000000002B67B2BF000000C061FAC23F00000060A4B9B1BF000000E06712AABF000000405166A13F000000A01A66B7BF000000002CB3C7BF000000006DD7D0BF000000005192B43F00000040E260D53F000000207364C13F0000006067A3CEBF00000060ECBA9F3F000000C081EDAF3F0000000014958B3F00000080FD3FBD3F000000E02C4FBB3F000000007B5198BF00000000CEC083BF00000040BBBAAABF000000009838813F000000C07B16C43F000000005A8699BF000000000115ABBF000000E09508C33F00000040B483A2BF000000004F4FA73F000000808DC2963F000000808508ABBF0000008090F698BF000000C03E4DA53F000000800A7BC2BF0000000000CEA1BF000000C02318A23F000000803D48A9BF0000000084F0883F00000040105CB33F000000407E79C1BF000000401F53AC3F00000000FF2BB33F000000E08CA7A63F00000000E8999CBF00000000771E993F000000005AC4B1BF0000000093B292BF000000203249B63F00000060994ED3BF00000080D414D63F000000409CDDC73F000000C0A9CB813F000000C0E8FBC03F0000004016E0B93F00000000FFEA8B3F000000E02288B53F000000C036C6A7BF00000000620CC4BF00000040300BB2BF000000407BF6C03F000000801E5395BF000000005513C63F000000A02E18A13F, NULL);
INSERT INTO `student_encodings` (`id`, `student_id`, `encoding`, `created_at`) VALUES (10, 1, 0x00000040E49ABEBF0000000051E8C13F000000C0CF61963F000000E06F03A2BF00000080E02AADBF000000C07A0FA0BF00000080968F97BF000000A0D40EB5BF000000408211BF3F000000604713B1BF000000807D9BD33F00000000FF7AB0BF000000E0552CCBBF000000A03417C3BF00000000F52398BF000000803323C93F00000060F544C7BF000000403574C1BF00000000F05AB0BF000000A0AA10B0BF0000004097D1AF3F0000004027A6ADBF000000C0688EA8BF000000400DA7A23F0000004013CFBBBF000000C04AD4D4BF00000000379C8DBF00000040057FB2BF000000C0E320AF3F00000060FF9FC0BF000000A01101B0BF000000409C75AA3F00000040D816C9BF00000000E424BEBF000000C0BC38B23F00000020D5C8B43F000000004757A7BF000000004331A5BF000000606487CA3F0000004085E293BF000000A06B49C3BF000000801A27A53F00000040723FB33F000000007180D33F000000A0E67BC83F000000E01DD1B43F000000E0C568A1BF000000004B71A2BF000000A08A8DBE3F00000040F385CDBF00000000A1F89B3F000000A0ED70BE3F00000060E3AAC23F00000040D14DB73F000000A001B5A93F000000A026FEC5BF0000000028A5803F000000808148B43F00000080465EC9BF00000000CD307A3F0000008073A9953F000000E095E0C1BF00000000BA2FA6BF000000809594B6BF00000000BCBCD03F00000020D13FB63F000000000887BBBF00000040BA05B5BF000000E0D399C63F000000003E71A8BF00000020D723A1BF000000002409753F0000000016B8BBBF000000E0FEB7C7BF000000E099B0CDBF000000800EF6B43F0000008054F5D53F000000800D3CC73F00000080AA7FCBBF00000040F215AD3F000000801275833F00000000304267BF000000A03796BD3F000000205E34B43F000000C07C4994BF0000000048F25EBF00000080B08A98BF000000000603A13F000000E0547FC33F0000008009C99CBF0000000010DEB1BF000000A0C655C63F000000400387A9BF000000404CB4AC3F000000C058A5A03F000000006C5CADBF000000C0D7A6A7BF00000040A7B3A13F000000C05AEAC3BF00000000FEFF9DBF0000002050A0AF3F000000804F6FAABF00000000AD96A63F00000080D74EB43F00000000E7B1C1BF000000C0A8B7B23F000000406DABA03F000000408B38A83F000000805EC797BF0000000092DFA13F000000608471B4BF000000002856753F000000C07454B33F000000A0D864D2BF00000080D229D63F000000C04222C93F00000040B921A43F000000E0B8CDC03F0000002040CEBD3F00000000B98C97BF00000020AFCDB93F000000003984A3BF00000060B636C1BF000000C05034B9BF000000406FBCBD3F0000008078CD95BF000000E0FF3AC33F0000000048B4803F, NULL);
INSERT INTO `student_encodings` (`id`, `student_id`, `encoding`, `created_at`) VALUES (11, 2, 0x00000040F72BBFBF00000080C104C53F000000E08808A63F000000C023F69ABF00000040E280ABBF000000E09E9BA7BF000000C095E1ABBF00000040E90EC2BF00000020AA58C23F0000000020ED95BF000000809E96D13F00000080307883BF0000000054D1D1BF000000209A01C6BF000000003FB17CBF000000A0F9B3C33F00000040AAF0C2BF0000006069A2C5BF00000000B738B3BF000000C0A227A53F000000E04B11A33F00000080534C733F00000000835BA83F00000000ED25923F00000000D0EAADBF0000002061C2D8BF000000802351A4BF000000805E78B9BF000000003385A8BF00000000962E9EBF0000004099E3A4BF000000A0903EB03F0000000076F4CABF000000A05886B8BF00000000AC34913F00000060B256C13F000000008A9C87BF000000A0D710A43F000000A00B2EC93F000000C095A591BF000000005177CABF000000006F96A9BF0000000096E2803F000000C03CC8D03F00000020C521C43F000000A04EAEAA3F00000040B8D8A63F000000C04382BBBF00000080F8BAA03F00000040D8F9C5BF000000001F49B73F000000C07FF0C43F0000008070EDBB3F000000402577A03F0000008036C6923F000000803A71C5BF00000000281588BF000000C0ACA6B33F000000E0E955C3BF000000804AAB95BF000000401DC6B63F00000040CA2BBCBF000000C0BF26BABF00000060EE53BEBF000000C087C6D23F000000C09084AE3F000000A012FBB9BF000000601280C4BF000000804F18C03F000000A0324AB7BF000000E0EB42B9BF000000601628AC3F00000060DD54C4BF00000080E47BC5BF000000409596D5BF000000C09A93B53F000000807FE8D93F000000E07E19B73F00000080710ECEBF000000E0A3F7AD3F000000403CABB5BF000000803169A2BF00000020AA43B33F000000E03F99B83F00000000DC8285BF000000007AFDB73F00000080938BC1BF00000000104A6BBF000000C03259C33F00000060C900B2BF00000040B9DEA0BF000000607C98C63F00000000C80197BF00000040FA85B73F00000040A446A83F00000040BB8FA1BF00000000805D2FBF000000A09F42AC3F000000C03322C6BF00000000F24698BF000000A0490DAE3F00000080906EA2BF000000001824683F00000000D717B03F000000C09C03B9BF000000802AB8A53F000000C049C6A33F000000C049FEA13F0000008063F8A63F0000000078706A3F000000800547BBBF000000C0CA5AC7BF00000000FC1FC43F00000040E705CEBF0000008064DDCC3F0000006053E0C23F000000C0031AA33F00000040E277C13F0000004059CDBD3F00000080447BC33F000000001A6087BF000000004715933F000000C0229BC9BF00000040520D90BF000000208705C23F00000080CAC19C3F00000040E096B93F00000080D8F5A73F, NULL);
INSERT INTO `student_encodings` (`id`, `student_id`, `encoding`, `created_at`) VALUES (12, 2, 0x00000000E22FC3BF00000040A4E9C53F000000C0F96AA23F00000080E8C1663F00000040D2A4A0BF000000807CF7B1BF000000000600ACBF000000C0FA95C0BF00000080380CC33F000000C0B793A5BF0000006032ABD13F000000A0D9BCA3BF00000080D7BFD0BF000000A0B5A4C7BF00000000C2D269BF00000040D554C53F00000080F3C0C3BF000000E0070DBFBF000000202A82B4BF00000000387C933F00000080895EA43F00000080D30A6A3F000000C022B8B23F00000080740B9A3F000000C03DC5ABBF00000000F353DCBF000000E0D904B3BF00000000F312B7BF00000080ACB99BBF000000000E7B95BF000000C002B5B0BF00000020477AAF3F000000407381C9BF000000408E7BBABF0000000064EC943F000000C0F51AC13F00000000263076BF00000000B61C903F0000004028BECA3F000000608BF2A2BF000000A00E60CBBF00000080242AACBF000000802A49A13F000000805F1ED13F000000401E47C73F0000000062D19E3F000000409B6BA43F0000000026FCBABF000000A0BD72B23F00000060F46FC5BF00000040FA7CAA3F00000000038DC43F000000C05D1ABA3F000000C0D621A03F000000007EE68D3F00000000675EC0BF00000000008E163F000000800770BA3F0000004093EAC2BF00000060DE75AABF000000807AEDB63F000000C08681C1BF00000080BD42BABF00000040B2E5B4BF00000000BB14D33F00000000AC64B53F00000000A1E8B9BF000000403889C7BF000000C08101C23F000000003D83BEBF000000C0C0EBA3BF00000080FE7AB23F000000003E79C3BF00000080DE2BC8BF000000C09CAAD5BF000000805E44B73F000000407A71DA3F00000040B347BB3F0000002002F1C9BF000000E0FE55B23F00000040F36CBEBF00000000383A9ABF000000A070E0BA3F0000002040F8BC3F000000C0998398BF000000209DE0B23F000000A0BDBDC3BF000000008038453F000000C0177AC73F00000000FD32B1BF0000004033B2A1BF00000020FD72C73F00000000DCA87ABF00000040C9D9BD3F000000402B0DA83F000000409B0DA7BF000000C02673A1BF0000000001BCA13F000000A08C85C6BF00000000641C7CBF000000201B6AB03F000000C0D9EBA6BF000000000058E8BE000000404E3BB13F0000008091CBBDBF000000405A01AA3F000000C03905A23F00000080C67DA23F000000E02DBFB03F0000000022248DBF000000E0D490B8BF00000080404EC5BF000000E0C9D2C13F00000040E061CEBF000000E0E878CA3F000000407179C13F000000208035A73F000000C0583BC53F00000020C829C03F000000A02B27C33F00000000CD6C90BF00000000D82C68BF000000006854C9BF0000004081D0663F000000208682C23F00000080CE74943F00000080B3CBB83F00000000FE00813F, NULL);
INSERT INTO `student_encodings` (`id`, `student_id`, `encoding`, `created_at`) VALUES (13, 2, 0x00000040F802C0BF000000406FBEC73F000000A074E8A33F000000C076ADA3BF000000C048F4AABF00000080A1F1ABBF000000602354AABF00000000318DBFBF000000A0A5DDC43F000000808941B4BF000000E07C3DD03F000000C07683A4BF000000C03435D2BF00000000B280BEBF000000A0ECC9A5BF0000006063C8C53F0000008016BCC7BF000000A0D5FAC1BF000000E00E35AEBF00000040D139A13F000000E0DBF4AD3F00000000301B86BF00000040E801AA3F000000000B818E3F000000802EC699BF000000002C02D9BF000000C0FE40B5BF000000400490B0BF00000000AAD0A8BF000000008EEF98BF000000E05E8EA3BF000000008A53AA3F000000C0504BCABF0000006044D6B5BF00000000503058BF000000E0094EB73F0000000042B19FBF0000008031C9913F000000A0FEA4CB3F00000020007491BF00000040B872C8BF00000080F7E9AEBF000000000A41913F000000A076FFD03F00000000C3DDC23F00000040665BAE3F000000003405A53F000000207830C0BF00000000C88D963F000000C0B381C5BF00000040358DB33F000000A02B5EC43F00000000A82CB73F000000C045F6AA3F0000000028C65FBF000000A0052CC6BF0000000094F88B3F000000C0DD5FB83F00000080207DBCBF00000080A06E86BF000000C050ACBA3F000000E0FB0BC4BF00000000A618B3BF000000C050CAB0BF000000E0D69ED63F000000C0B13EB13F000000A04B02BDBF000000C09049C7BF000000C068D4C23F000000C021DDB3BF000000C00C60B0BF00000080389BB23F000000A0CA8AC1BF00000080E8BCC3BF000000609FF7D3BF00000000C5C8B13F000000004AACDA3F000000C063E6B33F000000803787C8BF000000600534A83F000000C020F2C1BF000000603920A6BF000000C03376B93F00000000A103C33F0000004089A3A0BF000000807D91AE3F00000040BCE6C3BF00000000BEA5843F000000C03531C63F000000E0E43BB3BF000000C0ACABB1BF000000C049F7C73F000000005EFE7ABF000000601D23BA3F0000002083089A3F000000C065F2A4BF00000040EF53A1BF000000E0996CA63F000000002C59C3BF00000080E70499BF00000020FEEFB03F00000040898AA3BF00000000E000A7BF000000A05F8AB93F00000060DF28B9BF00000080DB43A53F00000000A305923F0000008023C0A03F000000005B719D3F000000005A409CBF000000A09BFCB8BF00000000D261C3BF00000080F84BC13F000000805F14D0BF00000040E11DCA3F00000000010CC13F000000E0124FA93F000000C07F36C33F000000E01D7CBF3F00000080DA7BC23F000000007C98723F00000000CCE396BF000000608AB8CCBF000000E066C18B3F0000004092BDC23F000000C09FF8A43F000000001278BF3F000000C0A837A13F, NULL);
INSERT INTO `student_encodings` (`id`, `student_id`, `encoding`, `created_at`) VALUES (14, 2, 0x000000E0CDDFBABF000000206BABC63F000000202D5FA23F000000C04E2797BF000000402CAEA8BF000000C0E790B2BF000000C05ADEABBF000000E08D83C2BF00000020BFBFC43F000000C07DBEB3BF000000E0BE6CD03F000000E0FBB29DBF00000040B43ED1BF000000406734C3BF00000060D957A3BF000000809CF8C63F000000400563C8BF000000A05CC1C3BF000000E0A252ACBF00000000B6B7893F00000080DB27AA3F000000606A268F3F000000605E8AB43F00000000542F7D3F0000000043F981BF00000060AE23DABF000000C01670AEBF00000080E687B5BF000000C0BE1692BF00000000DD9DA8BF00000000B21AA5BF000000800BA8A73F000000C02659CBBF000000401A63B2BF000000001360893F00000080354BBA3F00000000EBE48CBF0000008008DC913F000000405E37CC3F000000006A938F3F00000080A7CEC4BF000000008EC9B0BF00000000914DA1BF00000060350ED23F000000C0E56CC73F000000C05074B23F000000E0D74AA03F000000E0AFACC3BF000000A030A5B13F000000E042C9C5BF000000408DD5AB3F00000040037BC13F000000C0E6A1BA3F00000000D4D6773F00000000294A89BF000000607ACEC4BF0000000030DB743F000000A08CD5AF3F000000C08A4CC2BF00000000B9F290BF00000040FD6EB73F00000020057FC5BF000000A0ABC3BABF000000C0FA95B3BF00000040A5CDD53F000000002FDD9E3F00000000AF00BCBF000000201C15C2BF000000408277C13F00000040F8D1B6BF000000201839ADBF00000080E703A43F000000C046E5BFBF000000E008B8C3BF0000008094D5D3BF000000803D92A63F000000E0210CDA3F00000000BD97AC3F000000C0DFD4CBBF00000040D9C8A63F00000040AC87BBBF00000000A46D96BF000000E02747B93F000000600887C13F00000020C607ADBF000000801F21AF3F000000003680C6BF0000000092998C3F000000A07CB3C53F000000801BC3BCBF000000C058EFAABF000000000B6DC83F000000C0B328A9BF000000C08564C13F000000800EF3983F00000080BCFAA9BF00000080BFFAA5BF000000E03107B13F00000040637CC2BF000000803EEDA5BF000000807616B73F00000080E5CBA3BF00000000C75D94BF000000005E5FB33F00000040B508BCBF00000080DD9DA23F00000000001921BF000000A0CBB9973F000000C03235AA3F0000004080B7B2BF000000C057DCBCBF000000E05016C4BF00000000D462C33F000000E0A1E7CCBF000000C0DE39CB3F000000C045B1C43F000000C0BC3AA33F0000008036D5C53F00000000669FBC3F00000040F804C13F00000000CC5E8FBF000000001E8387BF0000004067FECCBF000000C0042E8F3F000000400FA2C23F000000006C47A83F000000C08D73BD3F00000000F1B6853F, NULL);
INSERT INTO `student_encodings` (`id`, `student_id`, `encoding`, `created_at`) VALUES (15, 2, 0x00000080C0D0B9BF000000609CAFC33F00000080D7B0AD3F000000008CF54CBF00000000ADFBA9BF000000204230AFBF000000403D85ADBF00000020373FC2BF000000000AFEBA3F000000605D049DBF00000040F33AD23F00000000A3499DBF000000C0BFC0D0BF000000C021B0C3BF000000000A8491BF000000201517C33F00000020AD5FC1BF000000C05870C4BF00000080CD1FBABF00000080C920AD3F000000C03533AD3F00000020AEC7913F000000C0E2F7AD3F00000000445C693F000000807E72ABBF000000808FA9D8BF00000000F319A9BF000000406A18B8BF000000C0E6A28ABF00000000A8DE7B3F00000060D144B3BF000000C07681A13F000000A0FB52CCBF000000200C27B8BF00000000F625843F000000603861B73F00000000FBB790BF00000080FA52923F00000060CD17C83F00000020141FA6BF000000604116D0BF00000000F0B272BF000000009A749D3F0000006003C0CC3F000000C05BA3C83F0000004098E5AA3F000000A0D304A53F0000004082E3BCBF000000C00988A43F0000008069DAC8BF000000C08043BC3F000000C07C1EC33F000000C0F8DABA3F000000801C5E9D3F0000008050AD933F000000409E15C5BF0000000006849CBF000000C02D8BB33F0000004032C9C0BF00000000369A5D3F000000003A64B93F00000080BC77BBBF0000006032A6B4BF000000808CCCBFBF000000406FE9D03F00000000C08EA93F00000000C010BBBF000000A0D5DCC3BF00000060230CC23F000000803E87BCBF000000E042D3B1BF000000C067B0B33F00000080567DC3BF00000080EEF9C5BF00000040ED71D6BF0000004024E4B33F000000C0C3A0DA3F00000060F862B43F00000060C760CBBF000000E0DF74B23F000000202200B4BF00000080A57B90BF00000000ED5CB53F000000A07EF8B83F00000000F52B833F000000A07556B23F000000C011AFC3BF0000000080A13E3F00000080353AC83F00000020D1DEB5BF00000000EDCEA2BF0000008016E9CA3F000000C04A479FBF000000A0876EB83F00000080017FAA3F0000000063AF843F00000000105F5A3F00000060053B973F000000A0F088C5BF0000000078FB913F000000C02469AA3F000000406F00A5BF0000000086DD9CBF000000C086ABAF3F000000C0A822B3BF000000807D09A43F000000803173933F00000060A996B03F000000403954AA3F0000000039B69CBF00000060600FB7BF0000000086D0C3BF0000000086E2C13F000000E078E0CABF00000000739DCD3F0000004078F7BE3F000000C07DFBAD3F00000080BFEFBE3F000000A07F69BF3F000000403745BF3F0000000058927CBF0000000068086FBF000000E013DECEBF00000080C0CD9BBF000000008AA9C13F0000000020F6323F000000C0632CB93F00000040BC83B13F, NULL);
INSERT INTO `student_encodings` (`id`, `student_id`, `encoding`, `created_at`) VALUES (16, 2, 0x000000E04AA7C3BF000000E0C84CC13F000000E0EF9AAE3F00000080538B963F00000080F34CBABF0000004082C69BBF00000040F7B3AABF000000C00682C6BF000000001F90C13F000000C053FCB5BF000000807A60D33F00000080DA8F913F000000002C7ECABF000000607572C1BF00000020D04BA3BF00000020C3A8C43F00000000A2D6C2BF000000E0EC8BC9BF0000008021498FBF0000004019DBA63F00000080D77BA43F0000006063C485BF000000C0FA1CAE3F00000080BCCBA53F00000080DA90BFBF00000020A534D6BF000000605D5FAEBF000000A04700B7BF00000020AD65723F00000080F6C7A5BF0000000027D7B2BF0000006022E2B53F000000C0E4F4C7BF000000C03408A5BF000000801294983F000000A0D79CB63F00000000047F98BF000000001777A33F000000400FB7CA3F000000C0482282BF00000040E09AD2BF00000000580495BF00000080C45095BF0000004013AED03F00000000EBCEC63F000000806FC487BF00000080830C8A3F00000080E5B4B2BF00000000BA459E3F0000008006AFC7BF00000000C3E2AE3F000000800E9BC43F00000000D1CEC03F00000000500B783F000000E0EFABA1BF000000A0071BC4BF00000000A699B1BF000000C0AE22B93F00000080C0FFC3BF00000080FD24803F00000000242EAC3F00000020A1EBC3BF00000060B0A4ACBF000000C058A5B7BF000000E00B97CB3F00000040E59ABD3F000000E053BCB9BF000000803E5ACABF00000000DBD4C33F000000C00B8FC0BF000000C0DC21B2BF000000400DCCBB3F00000040B38BBFBF00000080A6B9CCBF000000C07C1DD0BF00000000D7AB9F3F000000400177D63F000000002248B43F000000402DB4C9BF00000080C17CB23F000000C09F40B3BF000000805703A1BF00000000F422983F0000004068F6BA3F0000000009FA8C3F00000060ADB1B43F000000E0FC77BABF000000005456ABBF00000040A671C83F000000E026EBB0BF0000008006459DBF00000080A225CF3F0000008002DBA6BF0000000069BEAD3F000000C07C21B43F0000000070C96E3F00000000F8358C3F000000800750AE3F000000808E64C1BF000000809A7F91BF00000080D89EA2BF00000080ED6EB6BF00000000206645BF0000000071D89D3F000000800014C2BF00000060B692BA3F00000000C6747E3F00000000D1FAB43F00000000AF389D3F000000000C4F7DBF000000008E99B9BF000000C0D57CBFBF000000C0FAF2C33F000000001AFFD1BF000000E0BEF8D03F0000008080ABC43F00000040043CB13F000000C0245CC43F00000000D881C03F000000A042E0B13F00000000C1C5943F0000000071309ABF000000009ADFC5BF000000A0155D96BF000000004A1AC13F000000C00952B9BF000000C07913B03F00000080430BA43F, NULL);
INSERT INTO `student_encodings` (`id`, `student_id`, `encoding`, `created_at`) VALUES (17, 2, 0x000000005CDBC0BF000000E0B824C13F00000080972BB03F00000040153993BF000000A0146AC0BF000000806A5D90BF000000C05BE0B3BF000000004899C5BF000000C0D5E7C23F00000060D8C9BDBF000000A09DB4D13F000000C06EAFA33F00000060F237CEBF00000020405ABCBF00000020C4B1B3BF0000000066C7C83F00000000137AC5BF000000A0D8D4C7BF000000A0BA97983F0000008093EBA03F000000806D4EB93F000000003AE15ABF0000000066D3A73F00000000FD12823F000000C09DE2C0BF000000E0D9A5D6BF0000000034F5B1BF000000601640A7BF0000008018C6AEBF000000007E219FBF00000080D57BB1BF000000406661AC3F000000C0409BC8BF000000801265A6BF000000000C13AF3F000000C0BBECBA3F00000000FA20AABF00000080EC4491BF000000C07834CA3F000000C0B4DF98BF000000C0EDA5D3BF000000009454983F000000C0F775A53F000000005889CE3F00000000706DC23F000000404E6F90BF00000000BD97963F000000800289C1BF000000809CFAB03F000000605AC0C8BF000000006855AE3F000000C0D7E8C63F000000800B28B73F0000000085B38B3F00000040800EA5BF000000E057F2C0BF0000000030C69EBF000000A01641C13F00000020341DC6BF00000000137075BF000000A01DD6BF3F0000004058C3C5BF000000E03C8BB2BF000000A05E84BBBF00000060EA08C83F000000C0931CC13F00000040CCB9BFBF0000000012EACFBF000000A0B82AC13F0000002044F4BEBF000000E083E3B2BF000000C09187BD3F00000040C41BC1BF00000060903CD0BF000000805EABCDBF000000005CB8A13F000000202B83D83F000000A0FD8CBA3F000000C00C6FC4BF000000802D8DAB3F000000C0BE89B2BF0000000090E662BF000000000B29B33F000000008502C13F00000040DC72AF3F00000080664FAB3F00000080A6A4B8BF0000000038FC6ABF000000C0A1C8CB3F000000602242B4BF00000060241DA6BF000000C0E6F3CE3F00000000D9527CBF0000000033ECB23F0000008095F1A63F000000809874A93F00000080A8C09EBF000000409058B63F000000C09CE2C3BF00000000D83C613F00000080D1CD99BF00000000715FB0BF000000007859813F000000A0FD0BB03F000000C052F1BEBF000000C0DC48B93F00000080099891BF00000040D6D7AE3F000000405670A33F0000000043FDA2BF00000020B44BB8BF000000405B26BDBF000000000921BC3F000000A0DBC8D1BF000000202B73D13F000000406F70C43F000000C0A84CB33F00000080229DC33F0000008064D2C13F000000E07646B23F00000080FD23A33F0000006009BFB3BF0000006031C1CBBF0000000047669DBF0000000066C7BD3F000000C06C72B1BF000000404691B83F00000000846778BF, NULL);
INSERT INTO `student_encodings` (`id`, `student_id`, `encoding`, `created_at`) VALUES (18, 2, 0x000000807576C2BF00000020A1F5C73F000000C07739B03F000000C03B778BBF00000000D4D6B0BF000000209711A8BF000000809D58AFBF000000C056F1C1BF000000C0BC21C43F000000208230B5BF00000020C5B6CF3F000000C0A7709ABF000000801CABCEBF00000000634CC0BF0000008068C599BF00000060E074C73F0000002049E7C4BF000000A0A5A9C4BF000000001D03B3BF000000007C637C3F000000E0C450AC3F000000604E9A8D3F000000801F5AA73F000000001ECD953F00000000182F7BBF000000201C5FD9BF00000000E5B8B2BF00000000EB9AB4BF00000060513A9ABF00000080BF2BB0BF000000808710B2BF000000A0092CA83F00000020D9ABC9BF0000002005ACB5BF00000000B0A74BBF000000C0E603BC3F0000000002B992BF0000000010825E3F00000040154BC93F000000008EEC7CBF000000004B5BCABF0000000046B793BF00000000F41766BF000000E06B56D13F000000806501C43F000000E0FFBCAD3F000000C0FC03923F00000000CD98BFBF000000C0D713A63F000000E057CFC3BF000000A0BEB0A23F00000040C437C63F000000C0AC27B63F0000004022F2A73F00000080AD3995BF00000080280DC4BF00000000001B773F000000403A14AA3F000000001193BDBF00000020FE359FBF00000000E34ABA3F000000201615C6BF00000080C58DB9BF000000403B22B8BF0000006097F7D43F000000207E6AB33F000000C0C6E8BABF00000020A366C6BF000000C09F0CBC3F000000E0F15CB3BF000000E0E669B3BF00000000B76EAE3F000000E00ED5C3BF00000000A088C3BF000000A0E7D6D1BF00000000AE20B63F000000409F44DB3F000000602E7BAF3F00000020DF79CBBF000000C0A7E2AA3F000000C07755C1BF00000000C9BF91BF00000060F4B4B43F000000A0B954C23F000000209358A1BF000000C0BD7FB13F000000E0C572C1BF00000000E8D2683F0000006004A7C53F00000080EA53B5BF00000000ACF3A4BF000000000467C73F000000C0807992BF000000005C03BD3F0000008009819C3F0000000030499BBF00000000201193BF000000601C38A93F000000A0F8E2C1BF0000004038ABA1BF000000001FF3B33F000000003B31ACBF00000000C02BA0BF000000A02F31B23F00000060EE2BC0BF00000000BC99AB3F00000080C8E7943F000000C06733A53F00000060C30BAD3F00000000281A8CBF0000002072DAB9BF000000401F48C3BF000000C0FB91C23F000000A01229CFBF0000000030DDCC3F00000080EBC7C63F000000C0AFF4A13F0000004056F9C33F00000080EB39C03F000000800C1EC53F000000002EBE94BF00000000586966BF00000040FB77CABF000000A03B5176BF000000800C46C53F00000000BA65A93F000000808E54B53F00000040329E953F, NULL);
INSERT INTO `student_encodings` (`id`, `student_id`, `encoding`, `created_at`) VALUES (19, 2, 0x000000C07082C2BF00000020C56EC73F000000A07585B33F000000A0653B843F000000405132A0BF000000A0ECA9A3BF0000004030F29FBF00000040DE6DC0BF000000C04E67C23F000000A070DA9EBF000000C0AE90D03F00000040DCDA93BF000000004880D2BF000000608C26C4BF0000004038B296BF000000401BC7C23F000000C0CC36C2BF00000020A86FC3BF00000020B854B8BF0000000018268F3F000000801381A43F0000004051549B3F00000080A6E2B03F00000000EEE2883F000000C0730CA9BF000000C0206AD8BF000000C0B9A4A1BF000000404F25BBBF00000000981B95BF000000006C1F74BF000000406F2FA9BF000000E05F42A23F0000008032D9C9BF000000E07144B7BF00000080AC2A92BF0000008093F8B43F00000000000718BF00000000C571AA3F0000004018A6CB3F000000605CD1A4BF000000C0F283CABF0000000035FAA9BF00000000B5B69B3F000000402F8DD03F00000000C10CC63F000000A04A4BAB3F00000080A3E69C3F000000C09DF1B9BF00000000DA49A03F000000A07C11C8BF000000E0E3F9B13F000000A0E559C43F00000020ADB9BB3F00000080FDEC9C3F000000000F5E9D3F000000C0CCBAC6BF00000000180BA2BF00000000DB8DAC3F00000000D301C0BF00000000D5BC7DBF000000000DD5B03F000000E0A3B5BBBF00000000F9E8B5BF000000C03846B9BF000000404328D43F00000020B224A93F000000A0AD5AB8BF00000040F827C2BF00000080419BC33F0000006090E6BEBF00000080D178ABBF000000E0E5F9B13F000000A01F14C1BF0000004015B6C2BF000000C021ECD4BF00000000A44BB53F0000004023B7D93F000000C0D134B23F000000007FD5CBBF00000020A67FB33F00000000A6A8BABF00000080CC309DBF00000000FA3FB43F000000E0B7EDB93F000000809045A9BF000000E00C49B83F00000040CC80C0BF00000000914C93BF000000600DC3C43F000000E0C0C1B0BF000000807C439EBF00000020FE81C93F000000003A9F733F000000E0C40EB53F000000A0686AB33F000000408A6CA8BF0000000000F8403F00000040DBBF903F000000E0763DC7BF00000000468E863F000000004048A63F00000000B8F4B0BF0000000050AD6E3F000000E0C2C1A53F000000A0CB42BABF000000005D67993F000000400BBEA13F000000803C39A03F000000605346A83F000000005828853F000000A0C5F4BBBF000000A0E96FC6BF00000000100BC63F000000A019CECCBF00000000A613CB3F00000040407BBF3F00000080887E973F00000000050FC33F0000000078F6BD3F000000A06CA1C53F00000000BEF496BF00000000234EA53F00000060CF9CC5BF000000C0057384BF00000000780FC43F000000009D2C91BF000000400D81BA3F00000040EC9EAD3F, NULL);
INSERT INTO `student_encodings` (`id`, `student_id`, `encoding`, `created_at`) VALUES (20, 2, 0x00000000BB60C2BF000000A057DEC73F00000040FE36B03F000000002CF17FBF00000080E907A6BF000000C0B575B4BF000000402AFCAABF000000205181C2BF000000001547C33F00000060385EB4BF000000806442D13F00000020819198BF000000004A09D1BF000000809C38C3BF000000006FF4813F000000C089A8C43F000000208A5FC3BF0000000022D5BDBF000000E03E9EB4BF00000000C5ED913F000000A07F92A73F00000080FA1D8A3F00000000BB37B23F00000080EEF7993F000000008C2B7A3F000000A0C7CFD9BF00000000590DBABF00000080961FB2BF000000C0D7449EBF00000080B074A6BF000000C04296B0BF000000C03C77A23F000000A08002C8BF000000002F94B8BF0000000020D5583F0000000012FFB73F00000000EE8886BF00000000B33B8A3F000000C05E3DC93F0000000073A286BF00000080738DC8BF000000008974ACBF00000000B41C783F0000002057DCD13F0000002006A3C33F000000E078A9AF3F0000004091BD913F000000804FBEB8BF000000808755A63F000000605C63C5BF00000040B2B0B03F00000080AA76C33F000000605122B63F000000006042A43F00000000BE2771BF000000202970C5BF00000000D08B643F0000008014C3B13F000000002326C2BF000000A0BB2E92BF000000A046F1B83F000000002A09C5BF000000602352C0BF00000000E57EB0BF0000008006D2D53F00000000D379BA3F00000060555FC0BF000000C0542BC6BF000000801AA8BD3F0000008032CCB7BF000000C0A952A8BF00000060ED5CB13F000000C07A19C6BF000000208DD1C4BF00000080C60CD3BF000000408F00B93F000000C0366CDA3F0000000055F2B03F000000E081DBCBBF000000C0C99B993F000000A07A42C1BF0000008093B890BF0000008059DCB53F000000C0D937C33F0000000068CC9BBF00000020EF8CB33F00000060EFA5C2BF00000000A28F8A3F000000C06A24C23F000000607C23B5BF000000A0D4CBADBF000000803365CC3F00000000845F81BF000000202867BD3F000000E0CF929B3F00000080D4CD9CBF0000000001E98ABF000000005835813F000000E0D857C5BF00000000E867A0BF000000E0BB9FB93F000000403C6EA9BF000000000B3FA4BF00000000BD29B33F000000006E9DBFBF000000806516AE3F00000040FDABA33F000000004B3DA23F000000C079CEAC3F00000080FC7EA3BF0000006059BCBABF000000008A53C4BF000000E05088C13F000000E0E1D1CEBF000000A046E5CB3F000000A054CFC43F000000408C96A93F000000409A1BC43F000000403930B93F000000C08D9DC23F000000000000B63E0000000001A092BF000000809E87C7BF000000001524543F0000006068A4C33F000000C057F4A43F00000000ED6EB53F000000004E9D7E3F, NULL);
INSERT INTO `student_encodings` (`id`, `student_id`, `encoding`, `created_at`) VALUES (21, 3, 0x000000E0731CC5BF000000A02224C33F000000C023E79B3F00000080F70DB7BF000000007985B6BF000000A012C8B7BF00000080CAC892BF00000020919FC3BF00000040802FC23F00000000D6C2B6BF0000006057A1D33F00000060130F96BF000000A00BB3CABF00000060EA80C8BF00000000985E793F000000C01F32CB3F000000004FCAD0BF000000C0BD37C0BF00000040569CA5BF00000000FC03ADBF00000000686BB93F00000020115F98BF00000080D44FAB3F0000000047DBA33F000000C0EED8AFBF000000808D2FDABF000000800152B8BF0000006082C3B0BF000000003E10573F00000080A9A4ABBF000000E06D0AA3BF000000E0B045B73F000000203C07C9BF000000201685C0BF00000080BE0D9A3F00000020A89DC13F000000C00EB5A4BF000000806A2DA4BF000000E04107C13F000000E0F8BEA6BF00000020AB0CBDBF00000000409E71BF000000402F36B53F000000A03EF4D13F00000000CA70C63F0000004054CF8D3F000000E0DAB2AD3F000000801776B9BF00000000E45DB73F000000C0E96EC4BF00000000678E8E3F000000207C76BC3F000000A06F90B43F000000C0113FBA3F00000020BEF0AE3F0000004069C8C1BF000000808E23B43F000000C02BA2A93F000000C095F6C1BF000000A0C768A1BF0000000060A8B83F000000C0E0BDBBBF000000A04C9AA9BF000000806F6BB1BF00000000BDE1CF3F000000206B98B13F000000C00FCCB5BF00000040D10CC5BF000000803FBEB33F000000201889A9BF000000A0D519B3BF0000008022809B3F00000000954FCABF000000400E72C5BF000000C03923D3BF00000080EE71AC3F000000800E8AD73F000000809B22BA3F000000209679C5BF000000002C339A3F000000C01E7DA5BF00000080126D94BF000000C0D5E1C03F000000E0EE31B83F00000080D43297BF00000040485EA83F00000080D393C4BF00000080AF33BD3F00000080851AC13F00000060D669B4BF000000C02866B0BF000000E0DE61CA3F0000000040A3683F00000040F6C6BB3F000000C09ED4AA3F000000008D18A03F00000080A718AABF000000C00A76BB3F000000C054F7C4BF00000080F46C953F00000040F45CB93F000000209FDAB0BF00000000DB349BBF00000080D88FAC3F000000A0D69DB3BF000000A07961B13F000000005DE98B3F000000E03091B23F000000C0136CB1BF00000000FA8CACBF000000006D86C0BF00000080BDF9A8BF00000000DC7FB23F000000C001B9CABF000000608E07D03F000000A0A342CE3F00000060203A913F000000A076B4C23F0000002063AFB33F00000040DC14A83F0000000013ED91BF000000806B12A9BF000000402A26C2BF000000805AED863F000000E05E94BB3F000000C0A3B1A03F000000C03E70B43F000000008CAC6F3F, NULL);
INSERT INTO `student_encodings` (`id`, `student_id`, `encoding`, `created_at`) VALUES (22, 3, 0x00000080DD79C1BF000000608A1DC23F00000020572BB23F000000009517BABF000000C0B5A0B2BF0000004014A1A3BF000000C0A3FB92BF000000A0E527C2BF00000080D860C13F00000040ED19BEBF0000000087C5D13F000000A0FA80ACBF00000080552CD0BF000000008786C6BF0000000016B5733F000000C082D1CA3F0000004007A2CCBF000000000E4CC2BF000000E06176A1BF000000C043F0AABF00000020C918B63F000000C067D97B3F00000040CAA4B03F000000006CBF77BF00000080F8F7B9BF000000801C1DD9BF0000004054E8BCBF000000006C62ABBF00000060D58FAEBF00000040F6E1B3BF00000080B7C3B0BF0000008070F5B63F000000009D55CCBF000000000335BCBF000000406E10A43F00000040A02BC23F000000803593A2BF00000080158F94BF000000602A22BF3F000000C0892D87BF000000009A11BCBF00000000BC3A8BBF00000000861BB43F0000006094F6D03F000000008D1FC93F00000040150DA63F000000A09496973F00000000C4FBBBBF00000060B58BB63F00000040B8A4C2BF000000803DE6A93F00000080E677B53F000000806B81A83F000000002C35B93F000000009C6BB13F000000001AD9C2BF0000000045D8AA3F000000006DE3B73F000000806340BABF00000000BE2C653F00000080F5FEB53F00000040A403C4BF000000007DF7A2BF000000A05696A8BF00000040C93FD03F000000C0BFC0A63F000000C0820FB4BF00000020C95EC8BF000000A03002BB3F000000C02C46A5BF000000E000C4AEBF000000C0227DB43F0000006069C4C8BF000000401336C0BF0000008070D7D3BF00000000DD93953F00000060A43BD63F000000A0E4F3B13F00000060D188C7BF000000605D7292BF000000C047C0A2BF00000000645867BF000000809B1FC23F000000C0EC94BD3F000000805E3F85BF000000E05933B03F000000C02688C5BF000000009C18B73F00000000832DC73F00000080E8D6AEBF00000000D03CB7BF0000008035E3CD3F00000020B3C59FBF000000E0FC0EBC3F00000020A1CEB03F0000000067EA883F00000080074BAFBF000000C0F2D8A83F000000A0035AC7BF000000C0EF05A8BF000000C05D84B33F000000400B77B2BF000000407AD2B1BF00000040DA79BE3F000000207307B6BF0000000045C3AB3F00000000D26D99BF000000403F8DB23F000000E00133B8BF000000C0A37EB8BF00000000A521BABF00000000D66494BF00000020BD33B73F00000000562DCEBF000000E06D24C83F0000002047CCCB3F000000C092C9773F00000020961BBC3F000000C0983AB23F000000805A23A33F0000008079B49FBF000000808085AEBF00000060938EC7BF00000060DC26903F000000E0D54BBD3F000000803C7AA63F00000040AE9ABF3F00000000C0D66D3F, NULL);
INSERT INTO `student_encodings` (`id`, `student_id`, `encoding`, `created_at`) VALUES (23, 3, 0x00000040DE8DC2BF000000E06BB6C43F000000A0B265A33F00000000D6B6BCBF0000008040BDB8BF00000060EE67A9BF000000402F219FBF00000080410AC1BF00000000D460C23F0000002005D8AFBF000000408E92D23F000000E077B2A3BF00000020A1FCCCBF00000080B9A7C8BF000000803B3C95BF000000205080CB3F000000402423CFBF000000A04241C5BF000000C03EA496BF00000000256BA6BF00000060B3AABA3F00000000217E89BF000000E03B6EAC3F000000007856883F000000C0A798BCBF000000204F78D9BF000000207A7EB7BF000000405882B2BF000000C0EC8095BF00000080EB39B7BF000000405114A5BF000000C0F3BDB63F000000803490CDBF000000006310C1BF000000C081B4A93F00000060457FC23F000000C0FCD9A0BF000000C01990A2BF000000C0BDA3C13F00000080D2CA9CBF000000803726BFBF000000000E4481BF000000804053B73F00000080F502D13F000000E0F57EC53F00000020B811A03F000000C0578CA93F000000002841BBBF0000004085F5AF3F00000020F342C3BF000000C0CC63A63F000000C05152BD3F000000A0AD35A63F000000E04135BC3F0000000016B2A03F000000407FEAC3BF00000000BD0BAD3F000000804856B53F000000E010B4C0BF000000A0000791BF00000060A582B63F000000802530BEBF000000E0A564B0BF000000402269B0BF000000C07359D03F0000002007DCAE3F000000C0FD06B8BF000000A08EDAC7BF000000E045C9B93F00000000CF71A0BF00000000B440B3BF00000080170DA63F000000C00DD7C8BF0000004092EAC1BF000000409695D3BF0000000050BDA63F000000E065C7D63F000000609524B23F000000C01323C9BF0000000072C6783F000000C0E2379FBF000000004E1A75BF00000020D8A0BB3F000000608554BD3F000000C0EA5792BF000000005F6DB43F000000601F5AC3BF000000C0F306BA3F000000007073C33F000000C04898AEBF000000E016E0B2BF000000004581CA3F00000000CC8589BF00000080F70CC03F000000C06AB5B13F00000080F847A83F000000C038A5ABBF000000C02AABB23F00000040C7F3C6BF00000000E62D7CBF000000C0B39EB53F000000A0FF31A6BF00000000A2ADAEBF000000609B67BD3F00000040A441ADBF000000C0EF30AF3F00000000689C623F000000C0EB55AB3F000000409A38BBBF00000000BFAEB2BF0000000038ABB6BF000000004903ABBF000000E095E5B43F000000801516CBBF00000080A637CE3F000000C0EBFECD3F000000A0B368923F000000806E58C03F00000000E2D5B93F000000804AF1A03F00000000100150BF0000008003B6A9BF00000000187FC6BF00000080EFA0833F00000040726CBB3F00000080BA11923F00000080ECD1B83F000000007CC46F3F, NULL);
INSERT INTO `student_encodings` (`id`, `student_id`, `encoding`, `created_at`) VALUES (24, 3, 0x000000E0E424B7BF0000004032EDC03F000000A0FED8B43F000000A060F0B4BF000000C0E4DDB3BF000000805A0D90BF00000000F1A184BF00000080863BC4BF000000802BC2C63F00000080544EBCBF000000802E77D33F000000E0287589BF000000604FCCCDBF00000000E6AEC6BF000000008CC9603F0000004056B2CA3F000000804095C9BF000000805B5BC3BF0000004024C792BF00000000EB149BBF000000400BFDBB3F000000009107803F0000006057D2B23F000000803DD091BF00000020F2CDBCBF00000080E47FD8BF000000800790C2BF00000040EEF2AEBF000000C0187D8A3F000000009651B3BF000000C0F7FDB5BF00000080F37EA23F000000008847CFBF000000A03538BEBF000000809B91A53F000000A0C73CC13F000000C0AA4FA8BF00000000990AA1BF000000C0F6A9C03F00000000BCC169BF00000060A2ECC0BF00000000E227AA3F0000000008FCA93F00000020EB21D03F00000000F7F9C43F00000080F8C1AB3F000000001EDAA63F000000A06136C1BF000000802E31AA3F00000040CDE5C1BF000000C07C28BE3F0000000000EEB93F000000802206B03F0000000010D5B63F000000C034D2A23F00000080B1A6C3BF000000004445823F00000040CB8DBC3F0000002072ABBCBF000000A08916A43F000000C0F8F2BA3F00000040CF6FB7BF00000000BF4BB1BF000000405506A2BF00000000C103CE3F00000080F7F7B13F00000020769FB9BF00000080F08FCABF000000C0DD8FB43F000000A0CF1FB1BF000000803569B1BF00000060912EA23F00000060F584CABF000000203799C0BF000000C08FA4D3BF0000000043C8AC3F000000C0B703D83F000000200223A43F000000004ECACDBF000000008C93773F000000C05FC1A6BF00000000124E903F000000003FBFBF3F000000C00420C13F000000000011873F000000401A81B43F0000002075D2C4BF000000C0896DB33F00000060FDE9C53F0000008027B4B8BF000000801EEBA8BF000000608546D13F00000000940D9ABF000000A005A0BC3F000000A01FB8A93F00000040CB33A13F000000003C8CAEBF000000A05CCEA13F000000A0C7A6C6BF0000000034DDB2BF000000C02D6AB63F00000080230E9DBF000000807EF5B2BF00000080FA8CC03F000000200A44BEBF000000805414B73F00000000B9F684BF000000001357A93F00000080EAE89EBF000000C093A5B4BF000000809235BBBF000000C06774B4BF000000A0FC8BBA3F000000A0302BCCBF00000000140DCC3F00000040B074CD3F00000080528E803F00000060E724BA3F000000C02F1EBA3F000000C03B02B03F00000000C780843F0000000010299BBF000000C01D79C9BF00000000DD0C983F00000040A583B83F00000000F789893F00000040296EB43F00000000C482643F, NULL);
INSERT INTO `student_encodings` (`id`, `student_id`, `encoding`, `created_at`) VALUES (25, 3, 0x0000004001E8C3BF000000E0F3E2C03F00000080C2C3903F000000C0342EB2BF000000807BE7B0BF000000E0BFC6B3BF000000A0974BA3BF0000004034D4C4BF000000202ADEC43F00000040A035B7BF00000040009BD23F000000C05A6391BF000000200396CCBF000000C0FA60C8BF00000000625481BF000000407387CD3F00000020D956D0BF00000040C997C3BF000000804462A7BF00000080AB25A3BF000000C056B8B53F0000002062199CBF0000008068BDAE3F000000805014A83F000000E00051B2BF000000409675DABF000000C0711CBBBF00000060FFF9BBBF000000803A54A1BF00000080F825ADBF000000807A019EBF000000E0ED08B03F000000406751CBBF000000C0D4B5BFBF0000000044F3913F00000000F7A9BC3F000000C0D26DA0BF000000000F66A3BF000000803B21C33F000000603A9CA1BF00000060FC38BFBF00000000A0D889BF00000080AA4EAE3F00000040A614D13F000000203660C13F0000000026B3893F000000405C40AC3F000000C01829BBBF000000E09164B03F00000060AC18C4BF0000008055B2773F000000C01076B93F000000E0809AB33F00000080DB8AB53F0000008059B59D3F000000C06900C2BF0000008089F2B53F00000040BAAAB23F00000060D720C6BF00000000D0D690BF00000000BD28B63F000000A09695C0BF000000C083DBB4BF000000A09D01A6BF00000080B39CD13F0000000022FAB73F000000204346B3BF000000400242C5BF00000080674CBB3F000000204699A8BF000000608AF4A6BF000000000295993F000000C086F4C8BF000000C0AC4EC7BF000000E0BFF7D2BF00000000398C9A3F00000080DDA4D73F00000000ACFBB03F000000405A7BC8BF00000000362E993F00000020A41FB0BF00000000B8D5683F00000080A342C03F00000020C33CB53F00000000B5B580BF000000C068BEA63F000000C0CD69C4BF000000809224B83F000000409072C23F000000C071EBB3BF00000020645EA7BF000000807A0DC93F0000000044D251BF000000C081E4B63F000000C0A002B13F00000000B6817F3F00000000CAA89EBF00000000A51EB43F00000000A729C5BF00000080EBE49B3F000000406BA0AF3F000000C09F18A4BF00000000AC91A4BF000000408A6AA03F00000020A055B1BF00000000B3D5A43F000000C09AEEA13F00000000C1529B3F00000000C2BAAFBF000000009850A9BF000000600629C1BF000000407B01B6BF000000C0701DBA3F000000003C2FCBBF000000607516D03F000000007A4FCD3F000000C00537973F00000000F492C33F000000C0E482A93F000000C0A1FDAF3F000000803CC3AABF000000400F17A9BF0000004051A7C7BF0000002029FE993F000000E07D57C03F00000000062E953F000000C02FF9B33F000000005E3282BF, NULL);
INSERT INTO `student_encodings` (`id`, `student_id`, `encoding`, `created_at`) VALUES (26, 3, 0x000000A043F2C4BF000000C04B35BE3F000000408FC3933F000000A08099B2BF000000E0183DB9BF000000405084B6BF00000000EAF877BF000000E0F17CC4BF00000000FEC9C03F000000C0476EB1BF00000040826AD33F000000A00B1CAFBF000000A0E928CCBF000000C0CC81C9BF0000000054CE80BF000000603CE9CC3F000000A08B16D0BF0000004050AFBFBF00000000D1B574BF0000000073E2A3BF000000C02856B53F000000C0688185BF00000080E44DB13F000000C09428AC3F000000E0DC44B1BF000000E00E82DBBF00000000B081B9BF000000A08403C3BF000000002AD892BF00000040FA71B1BF00000040B21AA6BF000000401088BA3F000000408280C7BF000000E00052BBBF0000008071C3963F000000807E25B33F000000C0B1949EBF000000C03669A3BF000000007F21C43F00000080F0C292BF000000402C7FC0BF00000080F588A4BF000000400260B03F00000000F921D13F00000000717BBE3F000000002CD0663F000000007DF9B43F000000805895B7BF00000000E8B8A63F000000A09B54BEBF0000000034FDA03F000000C0C636B53F000000E0DDB4B83F0000004072EAA13F0000000004509E3F000000C0F255C1BF00000000F6CC913F000000E0F1CDA33F000000204537C6BF00000000DB5C89BF000000C05F88BD3F000000405A73B4BF000000803B88BABF000000C09A91B3BF00000080E72AD23F00000000D62BBA3F00000000AC26B9BF000000609F22C3BF00000080FED9BE3F000000C0C96CA9BF00000080A72DB1BF00000080B5FE883F00000060F74ACABF000000A0F0D3C4BF000000E0CE7CD1BF000000004B399E3F000000C086C4D63F000000C0B767AC3F000000C00C3AC6BF00000000F4FA59BF00000020DBB2B4BF0000000081158FBF000000C07A4FBA3F000000E0D840BA3F00000000494593BF00000060DA5FB03F000000408F34BEBF000000403ACFB73F000000802F1CBC3F00000080927EB5BF000000E081C6AEBF00000020C3C4C73F00000080345596BF00000080A08FB53F000000C0E9EFA23F00000080404092BF00000080115A9FBF000000008C9BB33F000000005E27C1BF0000000083BE8D3F00000000B3FCAA3F00000060EE63ABBF000000801BE1A0BF000000A0B7D2B03F00000060A2E2B6BF00000040E795A63F0000000086C79C3F00000040F9DA983F000000C08188AEBF000000807120A6BF000000209E29C1BF00000000ACC4B1BF0000008042B3B53F00000080CD55CABF000000E04BC3CC3F000000C00BF5C83F000000000C23A63F00000060AF19C23F00000040BB4AAA3F00000000BAA8A33F00000000B21D99BF0000004021DFAEBF000000E0651CC9BF000000E01D3E9D3F000000A096D3C33F00000000AEDF7C3F000000403958B33F000000006F8585BF, NULL);
INSERT INTO `student_encodings` (`id`, `student_id`, `encoding`, `created_at`) VALUES (27, 3, 0x000000E0C4D9C0BF000000804CEDBA3F00000040A6B9A53F00000020CD52BABF00000040459FB1BF000000409F5DB8BF00000000C9CAAEBF000000C03332C2BF000000C06696C03F000000E00CD7B9BF00000080264AD23F0000008043249FBF0000000088F4C9BF000000003C48C9BF0000008084909E3F000000002A73CA3F000000E01DEBD0BF0000004030DAC2BF000000C0706A8ABF00000000C38DADBF00000040FCFAB23F00000080D7A293BF00000080757EB03F00000000B710A03F00000080E361B8BF000000404878DABF00000080E128BFBF0000004011C4B5BF0000008011C186BF000000805DC1A3BF0000000025DD9FBF000000E0B956B33F000000406642CBBF000000A05677B8BF000000008C90923F000000A03C45BD3F00000000B0538DBF000000007CA98CBF000000805B0EC23F00000060C54E9BBF000000C0B854C1BF00000000288481BF000000406218A53F000000C01F0AD03F000000804C33C63F000000000020A93F00000040AD39A13F000000406BB2B3BF00000000D0B2B33F00000020D51FC5BF000000C087B9AB3F000000A0C3A2BA3F000000E0BB99B43F00000000CBDFB23F0000008035D1A43F000000C010CDC0BF00000000A38CA93F000000C05DC1BB3F000000C0225EC6BF000000A040EA86BF000000007332AE3F000000C0CC7CC1BF000000C0F380A5BF00000000BFFBB3BF0000008021ACD03F000000C05D0EB73F00000040F1FABABF000000A00D07C3BF000000A033AAB63F00000080155DA9BF00000020F478B2BF000000009BD0983F0000008005B9C7BF00000080A0B4C5BF000000C04403D6BF00000000E0DBA53F000000006A9AD33F0000006023B9B73F00000040C5CDC8BF0000008002F2813F00000000460587BF00000000344166BF000000002FA6BF3F0000002091D1BA3F000000C0752F9CBF000000C0713AAA3F000000A004B5C1BF000000C082FDB63F00000000E986BD3F000000009444B2BF00000000AC32AFBF00000020E816CC3F000000804396A9BF000000409057C33F00000080DCE49C3F000000C07600A43F00000000661EA6BF000000203E04B43F00000040E5ACC3BF0000008002A59B3F000000C00E87B73F000000C0C15A88BF000000000657A0BF0000000061EFB33F000000C0EB19B1BF000000C07520B23F00000000AC7368BF000000406BADA53F000000000047B6BF00000080AA50AFBF000000C0097BB8BF00000000B31AADBF000000A01638B53F000000404B7CCCBF0000008003D4CE3F00000000F16CCF3F000000804610743F000000E01A7DC43F000000E024D2B13F00000000F17B903F00000040EB4FA6BF00000060532AB4BF0000004068AFC9BF000000E0483F9B3F000000002B50C13F000000006FDB803F00000000566DBA3F00000000514C933F, NULL);
INSERT INTO `student_encodings` (`id`, `student_id`, `encoding`, `created_at`) VALUES (28, 3, 0x00000000D520C5BF0000002080DFBE3F000000009ACB4FBF000000807D97B4BF000000005447ACBF00000080FC7BA5BF00000000A622663F000000407CF2BEBF000000602D3DC53F00000040F806AABF000000A03D25D13F000000807DEA91BF000000001AC7C8BF00000080D395CCBF000000005F06943F00000040D623CB3F000000803D42CFBF00000040F741C5BF00000000752CA3BF000000A04317B5BF000000802DBFB53F000000802BED693F000000C06D97A43F000000006609A23F000000E092A8C5BF000000809AEDD9BF000000005374B3BF000000600043C0BF00000000B5FF8FBF000000009218B2BF000000005BDFAABF000000C02C01B83F000000605D05CBBF00000080E9E9C0BF000000E0DD7FB03F00000060B95DC53F00000000540E783F0000008001E789BF000000C04E4BBE3F000000006AF393BF000000005A6EC2BF000000001FF59DBF000000808F77BD3F000000403046D23F000000805179C63F00000080AC228C3F0000008095378E3F0000000070759BBF000000C05B32B03F00000080972ECBBF00000040369CB03F000000604D59AC3F00000040298EB63F0000006082FCB43F00000040B63BB13F0000002084A6C4BF00000000B6539B3F000000400743BA3F000000E076B2C8BF000000001D9E82BF000000007A0EA03F000000A005B0C2BF00000060D36CB5BF000000C0C6FA95BF00000060B3FACE3F000000808375C03F0000006083B7B9BF000000601AD6C2BF000000407A35B73F000000C04D7FAEBF000000807BF9A8BF00000040A795943F000000C0DE70C4BF000000802DDBC4BF000000A0E600D7BF00000000E427AE3F000000C04CB8D83F00000080E042B93F00000080DC9DC9BF000000801164943F00000080A2B190BF000000006D42933F000000408A4CC03F000000208F25B73F000000C06E84A1BF000000C03391B23F000000A0C17DC2BF000000403782BA3F000000608DC1BC3F00000000F20E9FBF000000607082B5BF000000A02819C83F000000A068AEABBF000000809070BC3F000000209EC6AD3F00000000D838AE3F00000080A329AEBF000000C07838A73F00000020F6A6C4BF0000008081A498BF000000004D2FBC3F00000060E36599BF000000005D9E91BF000000C0F0CABC3F000000C05B45BABF00000000FDECA53F0000000007C1913F00000000AF2B923F00000040FA5BB0BF00000080A0A4A6BF000000A07CD1B2BF0000008093EBA5BF000000E0546EB23F000000A0982CCEBF000000600E2ECC3F000000C0CDDDCE3F00000000C731A1BF000000A0A7EEC63F000000008B88B23F00000080710793BF00000000C0CD6B3F000000401291ABBF000000201BBDC6BF0000002005BD893F000000009E6DBC3F00000000A0795DBF000000C07B8EB83F000000006E197F3F, NULL);
INSERT INTO `student_encodings` (`id`, `student_id`, `encoding`, `created_at`) VALUES (29, 3, 0x000000403B92C6BF000000E09E0FC53F00000000B71D733F00000040E255B0BF00000000F268BBBF000000005255B0BF000000404331903F00000000B0E5C0BF000000801702C83F000000606622B4BF000000800E24D23F000000A00FD6A7BF000000800589CEBF00000020CD8DC4BF0000000012CC943F000000C024B6CA3F000000003CC4CEBF0000004072F4C0BF000000801BD3A0BF000000A06430B0BF00000040DBC9BC3F00000000614266BF000000009096B03F000000C059A9A63F000000C06F4BB3BF000000A093C9DBBF00000080FBB8BABF000000801FF8B8BF000000C02A9584BF000000C010EEBABF000000A042DFA5BF00000020109FB83F000000C000BBC7BF000000803E12C2BF0000000044CD7F3F000000C0C5B9BD3F0000000056369FBF0000004002B9B0BF00000000C850C23F00000080000597BF000000001F7FC0BF00000080F1ADA0BF000000402F2DB03F00000020D5B2D23F0000006056E2C13F000000E06F14913F00000080C1F19E3F000000C00F55B4BF00000040CBA3B13F000000E06408C4BF000000A08046883F000000C07243BC3F000000E07D28A93F00000000A867B23F00000000AF59A93F00000060A858C1BF00000080D2F0B23F00000040778AA53F000000E02ACBC6BF000000C0F85CB0BF000000A00A82BE3F000000408B15B9BF00000060EE2DABBF00000080AB40A9BF000000806886D13F00000040BF85BA3F0000006042BAB0BF000000809C2BC2BF000000A0D7F7B23F00000080C87BADBF000000401713AFBF00000000A8C1763F00000080F54ACABF0000008005E1C5BF000000A0BF2DD2BF000000807206AC3F000000E082F5D73F00000000464BB43F000000400251C4BF000000E0DFC9933F000000A0337CAEBF000000007A797A3F000000405EBEC33F00000020EDEFB53F000000409509A4BF00000080BDC0A73F000000C02221C6BF00000040D2ABB83F00000060C247C03F000000A0795DB0BF00000020209FB4BF00000040D95DC93F0000000084C56C3F000000606221B73F000000401EF1B53F000000807EC5973F0000000016D1ABBF00000000D59BB23F00000040D12FC5BF0000008042F1953F00000080189DB53F000000A0CA35B2BF00000080AC8BAFBF000000605C49B33F000000C02132B8BF000000004526A63F0000000096E89C3F00000040C4A3A13F00000080567FB4BF00000040DA4FB1BF000000E0B049C2BF000000809671ACBF000000C04549B33F00000020DE4ECCBF000000804A43CB3F00000040E73FCB3F000000A0B29F8EBF000000009EA5C53F0000004018EEAF3F000000007ACAAA3F000000405B1AA2BF000000C037B3A6BF000000600558C5BF00000040DA9C8C3F000000E0F3A6C23F000000007ECCA73F00000000E993B13F00000000BE2782BF, NULL);
INSERT INTO `student_encodings` (`id`, `student_id`, `encoding`, `created_at`) VALUES (30, 3, 0x00000080D031C5BF000000007610C33F00000040EDC4AA3F00000000B854C0BF000000E066BDB6BF00000080A839A6BF00000080B6D281BF000000E0A4D1BEBF0000002037CAC53F000000803507BBBF000000A0C5BDD13F00000040948E98BF00000000F3D7C8BF000000A07A0CC6BF000000C0634BA53F000000208823C93F000000E0D164D0BF000000200A3BC2BF00000080D223A0BF000000C01625A9BF000000E0FB9EB93F00000020B7FF9D3F000000000779B03F00000000B8CA743F000000804AACB8BF000000604BCBDABF000000E0FE47B8BF000000005E35B5BF00000080149E84BF000000007388A1BF000000004C019EBF00000080F9D9A13F00000040D5F8CBBF000000A0D2D1BCBF00000080CB869C3F00000080A647BF3F000000C0677AA4BF000000E0198BB3BF000000605030C33F00000000478B7D3F00000080F1E6C6BF00000000105797BF000000206F65B43F000000604D64CC3F000000404CFAC23F000000804C11853F000000C01467993F0000004026B1BBBF000000E0E5ACC03F000000C034FFC3BF00000000AB546F3F000000C09219BE3F000000406273AC3F00000080F91BB23F00000000BE3D953F000000E0326EC3BF00000000BCA3AD3F000000E0DD29B53F000000003F15C5BF000000001FDCA1BF0000002001A2B33F00000080407ABABF000000C0908AA2BF00000040A708AEBF00000040628BCE3F000000C06892B83F00000040640FBABF000000603D49C8BF0000006098D3B23F000000600558A1BF000000C0E0E0B0BF0000000027B8AE3F0000002003A0C8BF000000C09E15C5BF00000040C869D2BF000000007282953F00000020AD9CD53F0000006062DEA23F000000C0C099C2BF000000408FB796BF00000000A7ABB8BF00000000B3EB8ABF00000000A7EBB53F00000040BEB8BE3F00000040AB49A5BF00000060DD26B43F000000E063F7C1BF000000C0C1CFB03F000000A00D53C83F000000E000D8B1BF000000C093C1AEBF00000040118ACF3F000000E0CE5D99BF00000080E090C33F000000E0137C9D3F000000407C6FA63F000000604122B7BF00000020E8A0B23F000000E08473C4BF0000000001DB85BF000000C0E89DB43F0000006071D7B3BF000000808C42A6BF000000008E20BB3F000000205362C3BF000000405D36B33F00000000862F7C3F00000000E9B5A83F000000C0381EB1BF000000400E61B6BF000000A0B2ADBABF000000808F82A2BF000000C068D9B73F0000008079ECC6BF000000809CB7CC3F00000020CBC0CE3F000000601984A23F00000080DF37C43F000000C09AE2C13F00000000E8E66FBF00000000177DA2BF000000406EE8AFBF0000006010A6C9BF00000040E63E9A3F00000000EFEFBB3F0000000067E4953F000000008A81B43F00000000F80457BF, NULL);
INSERT INTO `student_encodings` (`id`, `student_id`, `encoding`, `created_at`) VALUES (31, 4, 0x00000040B926B7BF000000405FD1A33F000000004A2A45BF0000004099B5B0BF0000000013DE88BF00000060E8A6B6BF000000404DB8A2BF000000A081CBBCBF000000C0BFB9C23F00000040F8B9BABF00000040A80ED13F00000000E25CB6BF000000E08B32C8BF000000E0C673CABF00000000F72C813F000000400055C83F0000004033ECC3BF00000000C8ACB5BF000000209248AABF000000C03FC9A9BF00000080BB0EA43F00000020F8CDA7BF000000404D45AC3F000000007C09BB3F00000000B1D7BABF000000600EC0D6BF000000809A84BBBF00000080C660BABF000000009C5B8E3F000000003C51A3BF000000C0D4C0ADBF000000802625C03F00000000E144C2BF00000000BA48B3BF000000006335993F00000020D64BBF3F000000C02F7AA23F00000040251495BF00000000EC1AC93F000000C03F049CBF00000000C469C5BF000000002EAFA1BF000000006899883F00000060F01BD13F000000805F2FCB3F000000A083D9A53F00000000FB258A3F000000407AF5B5BF00000000EB5FBF3F00000020A9FAC0BF0000002046099B3F000000E03B1ABD3F00000020E0EDB43F000000C0FCA3A73F0000000097B882BF00000020A2FAB3BF000000007842B53F000000C09005BB3F000000C09B4BC7BF000000A04F30A8BF00000040F925A73F0000002074DBC3BF0000008029EEA8BF000000E0724BA4BF0000002073A2D23F00000080BAAFB33F000000C095E2BEBF00000060F487C4BF00000020908DC33F000000C0C5CDC1BF00000040190CA8BF00000020403BA03F000000000B9CC7BF000000609AD6C1BF0000000034BDD5BF0000000022F5AB3F000000003B7BD53F000000A018CCBD3F00000000DB0BCBBF000000800354B33F000000006E3CB1BF000000008AF181BF000000404938C43F00000040706CC23F00000060D15C96BF0000000019A390BF000000C03DEAB9BF0000000050A18CBF000000809724C63F000000200652B0BF000000004056A3BF00000040B042C93F000000C09AB193BF000000A00F2EB93F00000040E32F9F3F00000000BC4D9DBF0000008021F6A9BF00000080D7DAB33F000000200229BBBF000000800C3DA03F000000C0D72DBB3F00000080740B9EBF0000008066E4A03F00000000B267B73F000000C039C8C3BF00000040BFB3BD3F00000000CCBC6E3F00000040B9D2A73F000000C0D63EB23F0000000080E66ABF000000C0F168BDBF00000000DA43BEBF00000080AFA6C03F00000000D2E5CCBF000000A04F70C83F000000602B80C63F000000E05F3EBA3F00000000A53CC03F000000006349BC3F000000C09593BF3F00000000F8EA80BF00000000F8107FBF000000602345C8BF00000040A976A03F00000040DD8AC23F0000008048F5A1BF00000080F870B93F000000001ED4793F, NULL);
INSERT INTO `student_encodings` (`id`, `student_id`, `encoding`, `created_at`) VALUES (32, 4, 0x000000003CEBADBF000000C0CFC6B63F0000004027CB613F00000000162FA3BF00000000741F75BF00000000D18B85BF00000060C83BAFBF000000809A7DBBBF000000002C29BE3F00000080E145BCBF0000000075F9CB3F00000020F224A8BF0000004048CECABF00000020B3F5C1BF000000000A0395BF000000C03402C53F000000A02E28CABF000000800D6CB4BF000000200A2EA1BF000000805C59A9BF000000C041E7AB3F000000007CD8A93F000000A0E02FA33F000000C00232A53F000000E08762BCBF000000806FB2D7BF000000A0938EB4BF000000C0D9ECB4BF0000002002EE7B3F0000000070328CBF000000E0A9C9B1BF000000C04D22C03F00000080AD1AC7BF00000080FE85A3BF0000000073B7AB3F0000002097CBC13F00000000608354BF00000000FEDE8FBF000000802F2CC83F000000800C679C3F000000A079ACBDBF00000000326A873F000000004C0B9E3F000000A08BA8D23F00000000CC12CC3F00000040AECDA03F00000080C2D5853F000000C02228B5BF000000400748BE3F000000C06352C2BF000000004E31943F000000C05D07C43F00000020CA72B93F000000E01A8BB93F00000000AD238FBF00000060F1E2B5BF000000003E46AC3F0000008088FBB23F00000000C206BDBF000000C09C4B91BF00000000EDCFA83F0000006092A3C4BF000000A0933C9BBF0000008085E79DBF000000005605D23F000000002C3BA03F000000A0BAD5BDBF000000408E75C7BF00000040159EBC3F00000000D9E5C1BF000000600500BCBF000000002A1A843F000000C0F2E0C5BF000000E0F6ABBCBF000000203244D4BF000000000217AA3F000000A04B0FD43F000000201623BE3F000000400ABCCABF000000402318BA3F000000C0F7CCACBF00000080C305A0BF000000E01600C43F000000408C96C83F00000000874E74BF00000000433F813F00000000BA66B3BF00000000DA0A943F000000807CEFCB3F0000004087E0AEBF00000020CF4AB2BF000000E038D7CB3F000000809DFEA0BF00000060B712BD3F00000040D06EA43F000000C04A37A7BF0000008096B0ABBF000000209D3DA83F000000002DEBB9BF0000000086B481BF000000008803B83F00000000EEF2A3BF000000008469813F00000040D2C3C23F00000000B80BC4BF000000003F9DC13F000000804197A2BF00000000BF11B13F00000000295DBC3F00000000D37393BF000000A04CADBDBF00000040B198B6BF000000404EE3C03F000000C0611ACFBF0000000097B6CA3F000000C08030C53F0000006064AAAA3F0000006048C6BD3F00000020DFF2BE3F000000400FE9BE3F0000000070904BBF00000000C2ED9A3F000000E067EDCDBF000000E07AEE9CBF00000080A7F4BF3F00000000062A783F00000000961FB43F00000080ABDB86BF, NULL);
INSERT INTO `student_encodings` (`id`, `student_id`, `encoding`, `created_at`) VALUES (33, 4, 0x00000040DDA0ABBF000000009F7AB43F000000C0501D713F00000080E82A7BBF0000000020A2573F0000000045249ABF000000A00473A8BF000000A0B026BBBF000000E0E5E0C23F0000008028EFB7BF000000A0A15FCE3F000000C02961ADBF0000008084B2CCBF00000080D3BDC0BF00000080A1EC9BBF00000040A7E9C43F00000000F2FCC6BF00000080C764B4BF000000E074E394BF00000040655CACBF000000402D2AB23F00000020E912873F000000802F0AAA3F000000000230A83F00000040A0A3C0BF000000808C55D6BF000000A05121B3BF000000C0EE2EB2BF00000000E349743F00000000E4329BBF000000805E99B2BF00000080A344C03F000000A00B4CC4BF000000C0BB25AFBF00000080786DAF3F000000C01C16C33F000000005BB59FBF00000080FE7199BF00000000D1ADCD3F00000080AA3188BF00000000A266BFBF00000000ECD17FBF000000C0E689A23F00000060E748D33F0000006062B8C73F000000C09D4AA53F0000008005B9603F000000004F55B7BF000000C023B2B63F000000A0079FC1BF000000407D8B8D3F000000000C75C53F00000020D17FBA3F000000C016BEBA3F00000080CAA7A2BF00000040EC89BABF000000007DF4AF3F000000C0597BBA3F000000E0C6EEBCBF000000808B11A0BF0000004050BEA53F000000E00A24C7BF00000080B3178ABF00000000D3ED9BBF000000C0F83CD43F000000400C3DA23F00000080DB2EC0BF000000409752C3BF00000000C9E5B83F000000E035B1BFBF000000A07F47BABF000000001CE67D3F00000040E824C7BF000000407E91C0BF000000C026A6D5BF00000000E2CBA13F0000008012DDD43F000000E087EFB63F000000C09124CABF000000005BD8B73F00000020104BA8BF00000000647493BF000000208B7DC33F00000040B143C93F000000A00BF3A2BF000000008AF5823F000000E071BBB5BF000000000896853F000000A09605CB3F000000A026CDB0BF000000C03407B5BF0000008068DFC63F0000008040398DBF00000000F5EFBE3F000000803FFAA23F00000000EA58ABBF000000804953AABF00000020CFFDA53F00000080923ABEBF00000000B22B7BBF0000002010BEB63F0000000028E09FBF000000000B70973F000000E02DEBC33F000000E0426DC6BF000000E0489ABD3F00000000749B74BF00000020BDCEA63F00000060FFCDBD3F00000000748878BF0000004063F1BEBF000000E0D9D3BBBF000000C02E48C13F000000601875D0BF000000208392C93F00000040A902C73F000000407B58B63F000000805B2DC03F000000C0D028C03F00000040D353BC3F0000000058CE64BF000000004837A83F00000040909CCDBF00000000610B853F00000000B36AC03F0000000044C96C3F0000004020D6BB3F00000000327773BF, NULL);
INSERT INTO `student_encodings` (`id`, `student_id`, `encoding`, `created_at`) VALUES (34, 4, 0x000000408404A0BF000000E088A9B23F000000803B00A93F00000080F2A59EBF000000008F339CBF00000000BAD488BF000000A08BDFA9BF00000040D406C0BF000000C0A6CFC23F000000007F34C0BF0000002075C5CD3F000000204250A0BF000000C00C00C9BF00000080FB6CBFBF000000008A378ABF000000A0EDEDC63F000000806891C7BF000000605020B8BF000000608BDE95BF000000001572A3BF0000004060BFA73F000000804074A63F00000060FCA6A83F000000006617973F0000002047EBBCBF000000C0B628D8BF000000800D8DB6BF00000040947DB8BF000000A077E8703F00000000D55795BF000000400433B2BF00000060A3EEBC3F000000A08E18BCBF00000000ED0186BF000000803B7CB23F0000004034CABD3F00000000E2808DBF0000008074C998BF00000040E1C6CD3F0000008073F68A3F000000409175C6BF00000000D64E90BF00000040B00DA13F00000000C8B2D13F000000207628C63F000000207B4F9D3F000000403C3EA13F00000000EBF6B5BF000000408E1FC23F000000003B00C1BF0000002059B5A53F000000001411C33F000000804542BB3F000000C06B63B33F00000080D049963F000000C06573B8BF000000005A47A53F00000080224ABD3F000000E0BF69BCBF000000004288703F00000080F4E3B03F000000C04B17C3BF00000080442D8EBF000000006D278CBF000000600B55D23F000000209CCCA23F000000C05D60C2BF000000C0E137C3BF00000000CDA2B43F000000C0AD0CC0BF00000040F34EBCBF00000000C2FD793F00000000E31FC8BF000000E01A8DC0BF000000607BD0D3BF000000007E9A913F000000C0044BD73F000000609542B53F000000C0ADEBCBBF000000A08E06B03F000000E0076FA3BF000000204F47A0BF000000004FF4C53F00000000B571CC3F000000A0F9ED9CBF000000800174983F00000000B38DB3BF00000000B60891BF000000E03C46CB3F00000080F485B1BF0000002019C7A8BF000000C00B7DCC3F0000006092A4A3BF000000E0E90BC13F000000007032433F000000C0650BA3BF00000040A8ACABBF000000201803A83F000000A0FAB2B3BF00000000D05892BF000000E01E56B53F000000C0958F9EBF00000000AB6E903F000000802B6FC23F000000804976C9BF00000080EA96C03F00000000FE5E9BBF000000005E73B43F000000C0F293BF3F000000001C9E7F3F000000C0D4B4B9BF000000609154BDBF000000E0E04CC13F000000C045B9CEBF000000008D8BC43F000000802234C73F000000C0F3ABA73F00000000FB5FBC3F00000000D3B5BC3F000000604855B93F0000000096F97E3F0000000090888E3F00000080A0FCCDBF000000A0DDA5773F0000002001DFBD3F00000000164284BF00000080E43FB03F000000009D118BBF, NULL);
INSERT INTO `student_encodings` (`id`, `student_id`, `encoding`, `created_at`) VALUES (35, 4, 0x00000040F0BCAABF000000207C4CB03F00000000F929AF3F0000002042E69DBF000000009BEF92BF0000000034FC84BF00000060C693B5BF000000804B71BFBF000000001F14C13F00000040697DC1BF0000000037B8CC3F00000040C77193BF000000006F05C8BF00000020E7C7BFBF0000000077C7A0BF000000E04F47C73F000000C0B033C7BF000000A0C4A4BDBF0000002095E09CBF0000000042C699BF00000000DFB7A53F00000080E25AAC3F000000C0AEFCA13F0000000006AE943F000000E0A4FEBDBF000000006B37D8BF000000C0E301BBBF000000A0DB03B3BF0000008040598CBF00000000F0D57FBF00000000FDF4B9BF000000801131BB3F0000000079F9B8BF00000000924675BF000000A05B81B63F00000080488EC03F00000000AEFB90BF0000000094288FBF000000801B96C93F000000E0BF71913F0000004054DFC6BF00000000667F813F000000C0EE49AC3F000000C0AE71D23F000000C0EC24C93F00000000BFEBA93F000000604EDAA13F000000C084A9BBBF000000A0A6EDC03F000000E0BAF2C0BF000000A0EC8FA53F000000C03665C53F000000E0C871BA3F000000C03B2EB73F000000806DAA9C3F00000040591EBCBF00000000EEDDA33F000000800CF8BC3F000000C0ECAFBBBF000000C0CDDD813F00000000BAB3AB3F000000801FB8C3BF000000601BE584BF00000000605895BF000000C01530D23F000000402FDCAD3F00000000C9E0C3BF000000E08EA3C6BF00000020ED00BB3F0000000030C6C0BF000000C074E3BDBF00000000A02561BF000000803E8CC9BF000000001F5DC1BF0000000080CCD4BF0000000030A2903F000000A085C9D63F00000000A76CB53F00000040767ACABF0000002008FFB53F000000C095A399BF00000000DACE92BF000000609659C33F000000E02B6FCC3F000000803C27ABBF000000005404983F000000C0BF08B3BF000000002D0F95BF0000002049DCCB3F000000807BD6A9BF000000404F1AA9BF000000C03B88C83F00000040BF92A0BF0000000097AEBD3F00000040BD5EA13F000000008EE184BF00000040DBA9AEBF000000008AD8A33F000000C0A0F5BBBF00000000AFB288BF00000080D339AE3F0000002097F9A4BF00000000DED6953F000000400C34C23F000000A0DF8DC5BF00000000EBD1C03F00000080811D9BBF000000400D9EB13F0000006026FFB83F00000000809D8A3F000000C068E3BBBF00000020BF06BBBF000000A08C13C03F00000000CE85CFBF00000020D1C9C63F000000C03D12C73F000000A02744B53F00000060559BBF3F00000000D0ABC03F00000040DAA8BC3F000000003E5680BF000000000E719A3F000000E06358CBBF000000A0792D78BF000000C09915BB3F000000007AFD7FBF0000000057C5B43F00000000E8216E3F, NULL);
INSERT INTO `student_encodings` (`id`, `student_id`, `encoding`, `created_at`) VALUES (36, 4, 0x000000A0BC53B2BF000000406433B53F000000008104B93F0000000048C26EBF00000080DEEC9BBF000000003F528ABF000000407B6DA9BF00000040413DA7BF000000E0939BC13F000000804271C0BF000000807867CE3F000000204E9EA9BF00000020FBB7CCBF00000020AC7EB4BF0000000001BA8E3F000000E09D0AC53F00000040521CC8BF000000E00E79BABF000000A07013A6BF00000000857497BF000000802458BA3F000000E04DFEA13F0000008047FC923F00000080B82196BF00000000C19DB8BF000000A0F4B0D9BF000000A041E7BBBF00000020731BB6BF000000C03B22A73F00000000D6CAA8BF000000A0A8E4B6BF00000000B88A993F000000604B40C0BF000000808EEB92BF0000000098C1903F00000060D49DAC3F00000080DAA8A4BF00000060B987B4BF000000207E72CC3F000000C0BFC5A63F000000C04EC7C9BF00000000D0EB5CBF0000000070794EBF00000000A867D03F000000800DA7C03F00000040A998A33F000000402BE4A03F000000C0569AB6BF000000608860B53F00000060EB1DC4BF0000004006AFB43F00000040B615C73F000000808057B93F000000E042CDBA3F00000000DC6F963F00000080E854BDBF000000007C8D8E3F000000C01D19B23F0000004042D3C0BF00000040E689923F000000A059E0B33F000000C0ABDAC1BF000000C0E06FA7BF00000080B39FB0BF0000000046CBCE3F000000A00F12B13F00000000EC0EC0BF000000806F2BC5BF00000080E270B53F000000A081DBBABF000000002DC7B4BF000000C09A88953F00000040F58AC6BF0000000027A8C2BF000000A0CBD0D2BF00000080763EB03F000000A0F244D73F000000401B30B03F000000801AEAC7BF00000000F438B13F000000E04D97AFBF00000060D9B2A5BF000000406E56C23F00000060E013CC3F000000002E179CBF000000C0F0B0AF3F000000C089F0A8BF00000000CFC9933F0000000084D6C53F000000E0DF93B8BF000000008744ACBF000000800648C83F00000000823996BF000000A00F3BBA3F000000602812A13F00000000F05D98BF000000009F7393BF00000000E0343EBF000000E05DD4B1BF0000000078E1603F000000605425B43F000000804321B6BF000000008F8EA5BF0000008071C9B23F0000004087B9C5BF00000000DB7FB93F00000080A72D9F3F00000040F459943F000000000BB4B63F0000000098107DBF00000040FBF1C0BF000000E03AD5BBBF0000004090A4BF3F00000000F8D4D0BF000000A04A08C73F000000C08990CA3F000000C0DBCAAE3F0000008038EDC13F00000020C0E5BD3F000000404E5EBE3F00000000ACDE74BF00000000C8E07A3F000000E0C51DCBBF00000080BCF776BF000000205B68BB3F000000C0E359B23F00000000645E9F3F00000000103953BF, NULL);
INSERT INTO `student_encodings` (`id`, `student_id`, `encoding`, `created_at`) VALUES (37, 4, 0x000000008C60B1BF0000000047B4B23F0000008011B4AB3F000000E06425A6BF00000000C0E2533F00000040E7F4A6BF000000E0C5F9A5BF000000E0B7ABB8BF000000C046F0B83F00000060AC6ABDBF00000060BE49CF3F000000A0FED5A7BF00000000DBC0C9BF000000806096C4BF00000000EDB8893F00000040173DC93F000000C03386C8BF000000C09619B3BF00000020D0D5A5BF00000000E39DA4BF00000040BCED943F000000C0FD5892BF000000804628A93F000000C093E5A53F00000080227EA2BF00000000BA41D9BF000000204CF9BEBF00000020A35FB2BF00000080804C503F00000000665B95BF000000004419A8BF000000400500B63F00000040286CBABF0000008021EFA4BF000000C0F924A43F000000607C3FBB3F00000000CB969BBF000000006253B3BF000000E0EA00CC3F00000080E1B699BF000000C0823CC1BF00000000608470BF00000040AB70A93F00000000E5BDD13F00000080DB3ACC3F000000603CC3B03F000000E029B7983F000000008F94ABBF000000609B0BC03F0000006026D4BEBF000000204E89943F000000C0F8B2C03F000000802D08BC3F000000C0619DB33F00000000FAC69E3F00000020D010B5BF00000080B727B33F000000E0E302B23F000000E07AACBDBF000000A09F77A4BF0000000062F4993F00000040FFAEC5BF0000008026B77B3F00000000FD52A8BF000000A04008D33F00000080E0CFAA3F000000809115C0BF00000080FF7DC2BF000000005895C03F000000408BC1C0BF00000000EF8EB5BF000000C0735694BF000000E02D4CCABF000000002A26BFBF000000A0277BD3BF0000008099CCA93F000000A0C0C6D33F000000C04182BE3F00000080B1F7C9BF000000208A86AD3F000000E00EA793BF00000000D6C498BF000000C099B3C43F00000040C657CC3F0000000020D598BF000000007678A3BF00000080041DB6BF0000008011C8A7BF00000040449FC83F00000040EE33B1BF0000008060AAB5BF000000802B35C63F000000A063FEA3BF000000804E2AB73F00000060C5129F3F00000080DC8DB0BF00000000A4ECA4BF000000C055FDB03F000000806BE6BABF000000007D818C3F00000040F992B63F000000803AF9B0BF00000000C0426C3F00000080DA44BE3F000000001D58C2BF000000E05D9CB63F000000806FE099BF000000E0B85EB23F00000020269BB73F0000000073A8923F000000C09310C2BF0000000039D6BABF00000080007DC03F000000A0949ACBBF000000E0A8DAC93F00000000CB33CA3F0000002030B1A33F00000060DC95BC3F000000C0481FC03F00000040F528C43F000000002B9F80BF0000000069BF953F00000060FF96C8BF00000000A89F91BF000000A0E0FABD3F000000806A749C3F00000000D941BB3F0000000000F14F3F, NULL);
INSERT INTO `student_encodings` (`id`, `student_id`, `encoding`, `created_at`) VALUES (38, 4, 0x00000000CC0FB5BF000000A07A49B53F000000E082AEA23F000000A06B10ADBF00000000088A5B3F0000000093DC85BF000000E061EEA9BF000000C05B6CBABF00000040DED7C03F000000A0F310C1BF000000C00FC8CF3F000000005486B3BF000000A0EB7BCCBF000000A0C006C5BF000000C00842A3BF000000807478C63F00000080A581CABF000000A0F60DB4BF000000C049CD9ABF0000004061F9A0BF00000080D977B33F000000C0B9D8A03F000000C0F3E9A33F000000C0A1E2A83F0000000002E8BABF00000000FD60D8BF000000E0EE7BB3BF000000804F9BB5BF000000C02C3E99BF000000007B8092BF000000009EEAAABF000000407B7BB83F000000404E39C7BF00000080810199BF00000000D850973F00000040F77AC03F000000009CC192BF00000000106C6DBF000000801542C63F00000060D85488BF000000208275C1BF0000000040BB433F000000603D12A33F00000040F3CFD03F00000000908AC83F000000409D5CA73F000000C0FF516CBF000000809697B3BF000000E050B7B63F000000E0E87BC3BF00000000B00CA73F000000807F90C33F000000805281B73F00000040A141B43F000000009E0671BF00000040ACF6B3BF000000003814A83F00000080138EB73F000000203BA0B8BF00000000B04D6F3F00000040798AB33F00000060A577C3BF000000C0F0FD9FBF00000000B49489BF00000040EFE9D03F000000405FA6A13F000000203828C0BF000000207D62C7BF000000A0712DBE3F000000409C21C2BF000000004A5DB6BF000000401847A63F000000006124C5BF00000000178BC0BF000000004E4DD3BF000000802428A63F000000C04738D63F000000808FE6BD3F000000809146C9BF00000000468CAC3F000000201845B3BF0000000004C78EBF000000A075EBC43F0000008017C4C53F000000003463543F00000000BF1C81BF0000000090A0BABF000000007D31923F000000C061A3C93F00000040FFE7A4BF00000060A082B3BF00000000A8CDCD3F000000009F0F89BF000000804133B83F00000000BB9B903F000000A0F0FEB1BF0000008053FB9FBF00000060F088A83F00000080CDBDBABF000000001CDE71BF00000040E1D6B13F00000000E4AF9FBF0000000083EE97BF00000020F6CAC03F000000603CDBC2BF000000400985C13F000000002A4F92BF000000802B99B13F000000E0AE9FBB3F000000008CEB873F000000E00BB7C0BF000000C0786BB7BF000000E05773C03F00000040984CCDBF00000060D035C73F000000800BBEC43F000000C06765BB3F00000060B183BB3F000000003CB6BF3F00000040E994BD3F000000003EB9843F00000000644073BF00000000956ACFBF00000080E08E8CBF000000C03D3DBD3F00000000C35C8FBF000000C01985BA3F00000000C5097ABF, NULL);
INSERT INTO `student_encodings` (`id`, `student_id`, `encoding`, `created_at`) VALUES (39, 4, 0x000000A0E63CB5BF000000C049CAAD3F000000800FFAA93F000000400C41A8BF00000000767F963F00000080B98BA9BF000000A09A1DACBF0000000087AFBABF000000007D3DBF3F00000080D4E0B9BF000000A08A56D13F000000602527B0BF000000609706CBBF000000002038C8BF00000000EA4E7DBF000000C0BAF7C93F0000008061D7CABF00000040190BB5BF000000C0800B95BF00000040E651A4BF00000040DEFDA53F00000000BF2A88BF00000060EE9EA93F000000403468A43F0000000096AFB0BF000000C000A8D8BF000000A0E81AC0BF000000802EEBB4BF0000000053F056BF000000805142A6BF000000207578B0BF00000040E054BB3F000000804CFDC0BF000000A04179AFBF0000000074C8A63F000000002380BF3F0000000048AD6EBF00000080BAD7A3BF00000000119DC93F00000000E05269BF000000C0416EC0BF000000004858653F000000C0C54EAA3F000000A0A97FD13F00000000314CCC3F000000E01105B53F000000808C0E7F3F00000000FCBAB6BF000000C0F258B83F000000C03BADBBBF00000060CEEF973F000000E07195C23F000000C03493B73F00000020C243B63F00000000715A963F000000209DF3B4BF000000806094B03F00000040A801B13F000000C03961C0BF00000080396CA4BF000000C07861A53F00000080D3FFC3BF00000080BD9A7D3F000000408B0CA1BF000000201A25D33F000000E02382A73F00000060EEA4BDBF000000400F75C6BF000000207723C13F00000060BB78C1BF000000C0AAF6B8BF000000000F168B3F00000020AAE5C8BF000000E08688BEBF000000A0FB7AD4BF00000080A65CAB3F000000205B6ED43F0000002098ADB83F000000206D8DCABF000000409071B53F000000C00D9A96BF00000060497FABBF000000A00EBAC53F000000E09DA1CC3F000000002FC980BF000000001C386ABF000000408CFAB3BF00000000386AAABF000000605B79C73F000000C072B8A8BF0000002033EEB0BF000000800B51C73F00000000F2B3A2BF00000000B4A3BA3F00000060E13DAD3F00000060FADCB0BF000000809F3EA1BF000000A0DDE5B03F000000C04C40BEBF00000000246386BF000000C0FFCEAB3F00000080C8DFA3BF000000008085663F0000008046BBBD3F000000E0FCC0BCBF0000006077AFB43F00000080030A94BF000000A02DD3A83F00000060C22AB03F00000000800D8B3F00000040D999BCBF00000040D0C2BEBF000000C02CADBD3F00000040050CD0BF0000008028F0C83F00000040D1E3C83F00000080538EAF3F00000060DF94BA3F000000006018BD3F000000407AD9C53F00000000C0E286BF00000080E23DA23F000000A0CDD7C7BF000000208B94813F000000A06847BD3F000000000EFF833F00000040E826BC3F00000000E1E483BF, NULL);
INSERT INTO `student_encodings` (`id`, `student_id`, `encoding`, `created_at`) VALUES (40, 4, 0x000000E0D830B4BF000000808C81AF3F000000C02629983F00000040BD157BBF0000000039EF82BF00000000951D87BF00000040AE86A6BF00000060476BB4BF000000A0141EC13F00000040F79BBBBF000000403B3AD03F000000808F8FA2BF000000401F7DCABF00000000ABFBBEBF00000080574696BF000000E0F21FC73F000000C02A05CBBF000000807387B5BF000000001E188EBF00000000F06393BF000000001EE2B13F00000000E6ED75BF000000001F23A43F000000C04DDAA53F000000A08CFBBBBF000000A047A2D8BF0000006094FCB5BF00000040FB31B2BF000000203391843F000000001E6B9ABF000000C0FF7EADBF00000020AF84C13F000000E003D7C3BF0000004069B2A4BF00000040E176AE3F000000C0B8FEC13F00000000721C96BF000000009AC1A1BF000000C01CE4CC3F0000000038E259BF000000205944C3BF000000006509A33F0000008080EA953F0000004021F8D23F00000040CED7C63F0000006006C0A63F0000008066F4553F000000003F8CB4BF000000E0B714C13F0000004043FDC1BF00000080C823773F00000040814FC43F000000003BF4BC3F000000C040B1B83F0000000076608FBF000000A0222EBBBF0000000038E2B43F000000C004C2AE3F000000603E94C2BF00000080F9C3A5BF00000000B2429B3F000000C027B9C5BF00000060E7D3A23F000000C01833A5BF000000E03E80D23F000000807FCAA23F000000000550BEBF000000C0C811C6BF000000801AEEBF3F00000080A016BDBF000000A07C8DB3BF000000004525913F000000403DC4C8BF00000080E58CC1BF000000209393D5BF00000080A037AC3F000000E0A7CED43F000000A0F270BA3F000000C06FB4C7BF00000020E49EB83F000000A0700AA1BF000000C05E5FA2BF00000000CB29BE3F000000801EBACB3F000000C08EE9A4BF000000001A91933F0000000047D3B4BF0000000040807FBF00000080ADEAC93F000000C0ADACA6BF000000C04DCEB7BF00000000DDD2C83F00000080633E8FBF000000200F7EBD3F000000A0DC52AE3F000000407F2DABBF00000040E1BEAEBF00000080385B9F3F000000A089D5C0BF00000000F002663F000000C0E005A33F000000A05981A8BF00000000BE298B3F000000A0D46AC33F000000002330C3BF00000080CE30BC3F000000807CD6A5BF000000001468AB3F000000407946B13F00000000560A9E3F00000000BA00C2BF0000006006C5B8BF00000000663AB93F000000007D13D1BF00000040AC83CA3F00000000A455C63F000000202DF8B93F000000207A38BE3F0000000080FBC03F00000080F985BA3F00000000A28097BF00000000745BAA3F0000008072B4CBBF00000060CC9F84BF00000040772CC13F000000004C38843F0000004015E7B93F00000000B05948BF, NULL);
INSERT INTO `student_encodings` (`id`, `student_id`, `encoding`, `created_at`) VALUES (41, 5, 0x000000A0C206BFBF000000C018C4A33F00000080714573BF000000200B3EA1BF00000000F8D3B1BF000000C0FEC69EBF000000E04516A1BF000000000F9AC5BF000000C08377B63F000000C05BE9B6BF00000000A320D13F00000020A34BBCBF00000040C301CBBF0000004029CEBCBF00000020819ABBBF000000006EDDC93F000000C03649C9BF00000000E5CFB9BF000000C0F5EFA3BF000000801533923F000000003BA6B43F000000E036299BBF00000040FEC39DBF00000080C28E963F000000202AAEB1BF000000A0385FD2BF000000C04FDDB7BF000000200236A9BF00000040241A80BF000000007B22A3BF00000000278185BF000000007050B33F0000004060DDC6BF000000209FC2A1BF000000401AB0A03F000000400F10C13F000000C0DF95A1BF000000004660A9BF000000007D85C33F000000607552AEBF000000C0CEF4C3BF000000003F7093BF000000800877B83F00000060A7F0CC3F000000C09295C63F000000C0C7C1B83F00000080359C94BF00000040C1E5C1BF000000204BCCB83F000000E09503C7BF0000006034048A3F000000605A9ABC3F00000040D5C0AB3F000000A0D696B93F00000080D1B390BF000000006978C1BF00000000FCFBAB3F000000C0CC66BD3F000000403568B8BF0000008001CD90BF000000001BC7B93F000000E09216C0BF00000080E3618FBF00000080397BB9BF000000A0D7A0D03F000000E01D94A93F00000060BFC2BBBF000000A068DEBEBF000000005A27C83F000000C02C1BBDBF000000C00461BBBF00000000CCBC95BF00000040A1E4BDBF000000804B3BC6BF000000C080FBD2BF0000000019B5983F000000C0816BD73F00000060B661C13F0000008016ACC6BF000000A00DC3AD3F0000008049F788BF0000008033389C3F00000060FE6DC53F000000E0D1F4BB3F00000080205B963F0000008081B099BF000000806DF0C0BF00000000854FA9BF00000040F481CC3F000000A01C71B4BF000000C02A8B853F0000000067A1C63F00000040A6B09FBF000000C00AF4A03F000000C0960DA33F0000000098A78EBF000000007E0EA6BF00000020BF9AB53F000000E047EAC0BF0000000038E675BF0000002034EAAE3F000000A002EDA4BF00000000AE99A13F00000040EBB6BB3F000000409C3CB4BF000000C0335EBF3F00000000ECD06C3F00000080ED82B13F000000006222A83F000000804075A4BF000000C09D5CB6BF000000007C52A3BF00000060F009C03F00000000BAA4C9BF00000000DF0BCF3F000000E0D26EBE3F00000080992DB03F000000A0856BC23F000000A0460DC23F0000008040BEC73F000000802B679EBF000000005CE379BF00000000F978CDBF000000004E85A9BF00000040E2A8B73F000000004074683F000000405BB9B83F00000080FF15A33F, NULL);
INSERT INTO `student_encodings` (`id`, `student_id`, `encoding`, `created_at`) VALUES (42, 5, 0x000000409D9BC1BF00000000076B9B3F00000060A52B82BF00000020021CAABF000000A0F5A6B5BF0000000007948ABF0000006053D1A0BF00000080830AC6BF00000040A04EB53F000000C0D04AB8BF000000807F3AD03F000000A0D37FBFBF00000040287DCDBF000000404522B5BF00000040A451C0BF000000C02CF0C93F00000040C3C4CABF000000002E9CBDBF000000001512A8BF000000803AFC9ABF000000E06371B23F00000000E2DC67BF00000000705482BF000000C08871A73F00000000C0A9AFBF000000A0AA93D4BF000000C03521B3BF000000403CD2A0BF000000C03E497F3F00000000E3AEB0BF000000009C7086BF00000040663BAB3F00000040BEAEC8BF0000008037EB91BF00000080748B9D3F0000006053CFBE3F000000004902893F000000E0C929B9BF000000E0C8DABF3F000000C02392B0BF000000C086FEC1BF000000002DD795BF00000000F12CB43F000000206D5ACB3F00000000952FC43F00000040EDBDBB3F00000060C4F690BF00000020AE9FC4BF000000604E69B23F000000A0F3F8C7BF000000404172893F00000040F29EB53F000000404DDB933F000000C053AAAA3F000000C0B043A8BF000000C00490C0BF00000000B2CCA53F00000000DCC1BC3F000000C099B5B7BF00000000683B86BF000000600554B53F0000008094EBC0BF00000020D2FB8DBF00000040AD41BABF00000080720CD13F000000402D3AB03F000000006B4FBDBF00000020BAF9BEBF00000080F615C53F00000020B72AC0BF000000C0293FBCBF000000E0A1E1A6BF00000060FBB9B5BF000000808ED5C2BF000000C0B03FD3BF00000000B6449C3F000000C004C5D93F000000401374B93F000000C00904C7BF000000800BA2A83F000000408B8D8DBF00000080AFC7A63F000000003068C43F000000A0F9BBBF3F00000060F3269CBF000000808D8FABBF000000E0391FC2BF000000003BA196BF00000020FFF4CE3F000000005266A9BF00000080344E9BBF00000080AECAC53F00000060B5AFA8BF0000008089D8983F000000C0C7F2AC3F000000400200AB3F00000080052EB1BF000000E03009B83F0000000026B8B1BF000000005D08813F000000404A48BD3F000000A0CE53A5BF000000002F009B3F000000602F69C13F00000040667ABABF000000400F55BE3F000000407616A8BF00000080709C9E3F000000808FCCB93F00000080EE6EA6BF00000040480EB0BF00000000A984A8BF000000404A3EBE3F000000E0EA8FCCBF000000E0A7ECCB3F000000A07815C43F00000000F42BB23F000000C047D4C63F00000020C72ABA3F00000060CA7CC73F00000080265F90BF000000008F99973F000000C09A45CDBF000000C0BA86B1BF00000000AB18B83F00000000EF6C87BF0000004059A7B93F00000020DBB9A23F, NULL);
INSERT INTO `student_encodings` (`id`, `student_id`, `encoding`, `created_at`) VALUES (43, 5, 0x000000C0B93AB9BF000000809223A43F00000080BA9D9D3F00000040FE54B0BF00000020D9E1B2BF00000000AF5E89BF000000E09D67A4BF00000080DDC5C5BF0000004097D5BC3F000000C0A825BBBF00000080CD55D03F00000080D8EBB9BF00000020E79ACABF000000C03A89B7BF00000040AF9CB9BF000000402BD8C93F00000000F911C8BF000000403EC1BFBF000000E00F24A8BF000000003C8F8EBF000000407C3EAC3F000000C09ADE81BF00000000B776773F00000000C0F941BF000000409A35A1BF000000600CDED5BF0000004069CDB9BF000000403E94B5BF00000080006D72BF00000000FFE099BF00000000D62D85BF000000E089FFA43F000000A0238BC7BF000000A0548BA4BF000000003665943F000000C0E68CBB3F000000006A818DBF00000080EA8CB6BF00000040F42DC33F000000A01CA8B2BF00000020C673C5BF000000802858A0BF00000060BCB4B93F00000020EADFC73F000000206CB8C43F0000008030FFB33F0000004099E9893F00000020EBC3C2BF000000C02293B03F000000C05402C0BF00000040BB8A933F000000E003C4B83F00000020F53BA43F00000020871EB33F00000000986B90BF00000020720CBEBF00000000C009A43F00000040DF2CBC3F000000C063F1B3BF000000403D0E90BF000000605E11BE3F00000040D80DBBBF000000E058F9A1BF00000060D550B9BF00000080245ED13F000000C09C24B13F000000605881BBBF000000406EF7C1BF000000400A5AC33F000000C0A932C0BF00000080CADABCBF00000080C2B5A7BF00000000CC64C3BF000000400812C1BF00000000706FD3BF0000000032E08E3F000000C0B410D83F00000060D8F8B43F000000E051D0C4BF000000A0FA96A53F000000400B3D8CBF00000000B4ABA53F000000804B76C43F00000040B0F7C13F00000000CF2774BF00000000949071BF000000E08079BBBF00000080C72CA5BF000000003F5FCC3F00000040D4F3B2BF00000040409E91BF000000608FF4C13F00000060226FB3BF000000C07D42A23F00000060BE11A13F00000080E0B9923F000000007BCFA4BF000000C03608B43F00000080C842BEBF00000000B94B8A3F000000802201B03F000000C0D829A3BF0000000072DA833F00000040F065BD3F000000009968B7BF000000807F97AF3F00000080A5E09DBF000000E086A2A63F000000201948B13F0000000073019ABF000000C0BFB7B2BF0000004053DBB4BF000000A06488C23F000000E0C7D5C4BF0000000015EACA3F000000A09B06C43F000000C0AD1BA63F000000209D65C23F000000A083D1C13F000000800702C93F00000080DF26A2BF00000000C263943F000000204A91CFBF000000C0078CA2BF000000405C18B43F00000080FE2B9B3F000000009E41B83F0000004024DA9D3F, NULL);
INSERT INTO `student_encodings` (`id`, `student_id`, `encoding`, `created_at`) VALUES (44, 5, 0x000000A0D986C0BF000000C0B745B03F000000E0429889BF00000040F80C89BF000000006314B7BF000000005EA890BF000000C02C2AB2BF00000080FA93C6BF000000404948B43F000000E05957B8BF000000A0E6EBCE3F00000080BDBEB8BF000000C04CB5CEBF0000004007E7B4BF00000080CFC5B7BF00000060A315CA3F00000000F535CDBF00000040DF42B9BF000000E04F319EBF000000405E3DA9BF0000006028D1A93F000000E07DAB8CBF000000A00B15A03F00000000A410913F000000A08758B3BF000000006A72D7BF00000000DE3CB3BF000000C056EAB4BF00000040707B983F00000080BFB2A5BF00000000D05B97BF000000806630A43F00000060648EC4BF000000801D9298BF0000008088A7913F0000006006CEBA3F000000006E088FBF00000000B634B4BF0000004007A3C33F000000A08279AFBF00000020DCF1C0BF00000080AA98A7BF000000E03769B33F000000A06208CD3F00000040C002C93F000000004645B93F00000000AE5E4D3F000000A0E221C1BF000000C085DEB53F00000060B21BC6BF000000802AF5673F000000A02BE0B23F00000080DC2E993F00000080E560A93F0000000088257FBF000000607948B9BF00000000B475A63F00000080A30DB63F00000000A123C0BF000000008BC08BBF000000603830B53F000000E04B23C1BF000000E054AF97BF000000E0EA7AB4BF000000408215D33F00000000E9ACB03F000000E09A3CB8BF00000080AB2BBABF000000C0406DC53F000000204806C1BF0000000069B8B8BF00000060E875A2BF000000005399B8BF00000000A0A4C3BF00000000FBA9D3BF00000000001D6D3F00000080DB0FD93F000000A0D712B83F000000C008EBC2BF000000200ABEA53F000000405A688D3F00000000227488BF00000040B74CC73F00000080A540BF3F0000000085D291BF0000004002FAB2BF000000601113C1BF00000000ECDC7FBF000000E00E81CE3F00000060D203B5BF000000C0F495A1BF00000060FBCFC33F000000C0263AAFBF00000080F15EA33F000000400B16AE3F0000004039C7AF3F000000A03079B8BF000000A0C81DB53F000000408938B7BF0000000081BE8EBF000000C03763C03F000000404AD5A8BF00000000F617A03F000000004D22BB3F000000607692B4BF0000008055C2B53F000000007EAFA3BF0000008015B7A03F00000080A657B83F00000080E7C8AFBF00000020BBE3B8BF00000080E7EDADBF000000E0BA0FC33F00000080E783C9BF000000800AA8CC3F000000A04DE3C33F000000406168A23F00000080E16EC43F000000E00909B73F000000407A5AC23F000000806A0DA3BF00000000417F913F00000080A2A6CDBF000000C0990BAFBF0000008047D0B43F00000000557F85BF000000C025CCB93F000000000EBD973F, NULL);
INSERT INTO `student_encodings` (`id`, `student_id`, `encoding`, `created_at`) VALUES (45, 5, 0x000000805C2FBDBF000000003FB6A83F000000001FB57BBF000000A01AF6A4BF00000000A4E0B7BF00000080F8B39ABF000000C02F6898BF000000A0A611C8BF000000802D79B83F000000C039CEB4BF0000000082F5CE3F00000000CF90B8BF000000C07CEFCEBF0000008063BEB9BF00000040FF97C0BF000000005500C83F00000020E280C7BF00000060365AC0BF000000E0FFAAA2BF00000000F8689CBF0000000033B6B23F00000080C005943F00000000137870BF000000C0F028A73F00000000305DAABF00000060081CD4BF000000C039C1B1BF00000040CD2FA9BF000000C0A9D788BF0000000035C8ACBF000000003B089DBF000000006D07B33F000000C0C7B0C8BF000000C031EAA6BF00000000AAE3A03F00000080B328C23F00000000DE0A78BF000000806A37AFBF000000400181C13F000000E05D5AA4BF000000206D4EC2BF000000009BDA9BBF0000006056BEB43F00000060E409CF3F00000000292CC53F000000C0EFE2B73F000000E075EF91BF00000020930FC3BF000000C05AABA83F000000C0C936C5BF000000403B6A993F00000060A4E1BB3F000000C0C399A93F00000040C642AF3F00000080E77FA7BF000000809E7CC2BF00000000DE24A43F000000E0762BAC3F000000208D15B9BF00000040CE4494BF000000207EF7B83F000000A0D4B8C2BF000000608E8BA0BF0000008075EDB5BF000000208F49D03F000000802CB1A63F0000006013DCB5BF000000201E41BFBF00000080088EC43F00000020D7CBC3BF00000040F2E7C0BF000000A0C8DDA4BF000000A0D464BBBF00000020BBE4C1BF000000C09698D3BF00000000620B8A3F000000C07F72D93F000000C0B3A3BF3F000000808E18C8BF000000407E13AF3F000000200BF497BF00000000A522A33F00000020F875C53F0000002058F7BD3F00000000FB6975BF000000008055643F000000A07B7FC3BF00000000901A50BF0000006092E3CA3F000000E027E5B2BF000000007282A5BF000000C06055C63F000000C006B89DBF0000000080E8A83F000000205791B33F0000000052EC9A3F000000C05966A4BF000000608146B83F000000606F3DBCBF0000000018407BBF0000008075C1BB3F00000020BB3FA2BF00000000FEEDA53F000000403BD0BE3F00000060CD40B9BF000000A0FCD9BA3F000000003E6492BF00000060C3A8A03F000000805CBAB33F000000805839A5BF000000805973B6BF000000202528B2BF000000C083EBC13F000000C0D8ACC9BF000000400CBDCC3F00000060BAC0C33F000000A0BF9AA83F00000080847EC53F000000806AD2BC3F000000C0CE33C63F00000080E6C993BF000000008A6B82BF00000060E4A6CBBF000000802AEBAEBF000000E0B2F9B53F00000000D805783F000000C03F65BE3F000000E0A84DA93F, NULL);
INSERT INTO `student_encodings` (`id`, `student_id`, `encoding`, `created_at`) VALUES (46, 5, 0x00000040B994BBBF000000C047B7A03F000000805BDC8EBF00000020BA21B7BF000000205755B8BF0000000006F582BF000000804BECA5BF00000080EAD4C3BF000000C04A0DBD3F00000020E662BCBF000000E0A44ACE3F000000A0BF2BBCBF000000C0354ACBBF000000007094B7BF000000E06407BEBF000000C00E2BC93F000000009C94C9BF000000C07F18BDBF000000400DCCADBF000000006A9A843F00000000A11EB03F0000008035B287BF00000000BD0EA0BF00000040AF4AA53F000000C09D4EA2BF00000040987FD3BF000000C06DB7B5BF0000000043C4B0BF0000004095DD8CBF000000803A2EACBF00000000302F69BF0000000083D3A73F00000000C2ADC7BF000000C03AFAA6BF000000002EF1763F000000406DCAB93F000000C09C5EA9BF000000205348B0BF00000040D74FC43F00000000BB14B0BF000000E0102CC8BF00000000F8A16E3F000000C09AC5B83F0000004079D1CB3F000000405CA2C43F0000008026EDB63F000000E09A8184BF00000040447CC4BF000000207CEDB63F00000000A896C4BF000000403DEB833F0000008071F9BC3F000000405A68B53F00000060F982A93F0000000064EC72BF0000004017CBBFBF00000000D5BBA03F00000080F7C4BF3F000000C0261FBABF00000040312591BF0000006056DFBD3F00000020119BB5BF000000000D8093BF00000040DE10C0BF00000020F95CD23F000000802958B03F00000060EA33C0BF000000807B55BCBF000000C0294BC73F0000006049FFBCBF000000604955B9BF000000809F0A8ABF000000C030BCBDBF00000040F63AC5BF000000407E4AD2BF00000000F46E8B3F000000A0950ED83F00000020A04DBE3F0000000015E4C3BF00000080117FA73F000000A07D54A3BF000000A07670A63F000000A01615C43F000000600BF8BD3F0000006001FB98BF00000000E25392BF00000060246CB5BF00000000D18097BF000000E0B283C93F000000605265B0BF0000000044AA4DBF00000060C9DEC23F000000C09B2093BF00000000F2AA9A3F000000E02822943F0000008034AF93BF000000803C42A5BF000000200B32B43F000000E0AE09C0BF00000040CF60A13F00000040FE93A53F000000404D5B9EBF00000000A8DAA73F0000004090FBBC3F000000802F1EB3BF000000A0A629B73F0000000070CE523F0000008052CCA33F000000406089AD3F00000000E01B61BF00000000ADA0B5BF00000000085AB1BF000000E02356C03F000000408A69CBBF000000A0A0D5CA3F000000E0C301BD3F00000000B5CCAB3F000000405BF5C03F0000004038F5C13F000000805A23C73F000000404C7DA2BF00000000AC4571BF0000004053FCCFBF000000C0CAE99CBF000000604C4DBF3F0000000040EB4DBF000000406403C13F00000040FCFF9C3F, NULL);
INSERT INTO `student_encodings` (`id`, `student_id`, `encoding`, `created_at`) VALUES (47, 5, 0x000000C0D7E4BFBF0000000002A6AC3F000000A0691A8C3F00000000FB3B723F000000002CAFB9BF000000408B99A9BF000000C0356EB2BF00000060733BC7BF000000609CBFB33F000000C08E9BB8BF00000040CC8BCF3F000000E0B962B4BF00000040E858CABF00000000A993BABF000000009B77B7BF0000004096E2CA3F000000E0DDFDC5BF000000407BA7C1BF000000A00277ABBF000000002D30A0BF00000000E4558A3F000000E04C1A98BF000000007AB3783F00000080C5589A3F00000040F49BB3BF000000C019A3D6BF00000060835BB6BF000000C045F9B0BF0000002016397FBF000000809F22B0BF000000802B279FBF000000002AF4AC3F000000002E5BC3BF000000E03A43A5BF00000040C35AAA3F00000040763DBF3F000000002DD785BF00000000BCE7A1BF00000000B617C53F0000006005ADAEBF00000060A811C5BF000000009A149FBF00000080E5B9B13F000000A04242D03F00000000C4CAC73F000000E0DE1ABE3F000000E058AC833F000000E0A491C0BF0000000029B9B23F000000A029B0C9BF000000008A1EA33F000000605413BA3F000000808BD8963F000000C084A9AF3F00000080C4DA96BF000000C004AFBCBF00000000707FA83F000000C0E5E4B13F000000C090D6BABF000000C0FF5E9ABF000000A0F314BC3F000000C01DA8C3BF000000C0E74BA1BF00000060F938B1BF000000C0F757D33F000000206EE7AF3F00000040AC69BABF0000000080FFB3BF000000205470C33F000000C0310AC3BF000000E0BB85B5BF000000E04FBCB1BF00000080A22CBABF00000080B29CC4BF0000008083D0D4BF0000008041C8A03F000000400F7DDB3F000000002492BF3F000000006B5BC5BF00000000CDCBB13F000000E02DCB7BBF000000C0A2829D3F000000C0E377C43F00000060851EBC3F000000C044CDA0BF000000C041ADA0BF00000080FC96BDBF0000000080A462BF000000C0073ACD3F0000004015DDB2BF000000009C4B59BF000000404EC1C23F000000C0906FA8BF00000080B9F1AC3F000000C0045DB23F00000080D409A13F00000080CC23A6BF000000601185AF3F000000E002F8B4BF000000C065689A3F000000E0EC8DBA3F00000060244CA3BF000000C0EB46B03F000000806A94B73F00000040E279BBBF000000207A29BD3F0000008001D69ABF00000040FDA3A33F000000A06E05B63F0000000030BE85BF00000060EFD5B5BF000000C0E683B8BF000000001A40C23F00000060D181C9BF00000080EC38CE3F0000008079CEC53F000000A0A07EA23F00000000A48FC63F00000080598CBC3F00000000373DC53F000000408EC2A1BF00000000D7DF923F000000806747C8BF000000A0974BABBF000000E0EDE6B53F00000000C4CA86BF000000C0761ABC3F000000E0E9EEA73F, NULL);
INSERT INTO `student_encodings` (`id`, `student_id`, `encoding`, `created_at`) VALUES (48, 5, 0x0000004042D7BDBF0000004003C0A03F000000A0C9C08C3F00000000523DB0BF000000C0AF35B5BF00000000A02C46BF000000406FB6A2BF000000C05E46C4BF00000080D0B0B43F00000080C49AB9BF000000202A7ECD3F00000040B509BCBF00000020DF68CCBF00000080F708BCBF000000606834BABF000000C098DCC93F0000006059FFC5BF000000A0453CBFBF0000004089E9AABF0000000052CB8F3F00000000273BA93F000000205FA885BF000000000DB394BF000000006EE3893F0000008055CAA3BF00000000D451D4BF00000000130BB6BF000000A0CC45B1BF000000C07CAB9FBF000000807C88A0BF000000001058613F00000060615BA73F00000080E543C5BF00000040CC03A4BF000000004A3B903F0000006046F4BD3F000000C03CC7A2BF000000400B95AFBF000000205AC9C43F000000C03EFEAFBF000000A0CA04C8BF0000000038C582BF000000005A46BD3F000000203B32CA3F000000800A55C43F000000603622B73F000000001283923F000000608775C4BF000000C07F64B93F000000E0DD12C4BF00000060AEBB973F000000C0ACF7BC3F0000004031CCA13F00000080E43FB43F00000000800F65BF000000A01B3FBDBF00000000468EAE3F000000E040EFBC3F00000040F149B3BF00000000FCFB733F000000C0C141C03F000000409925B5BF00000080419184BF000000008CECB6BF000000E0657ED03F000000407F62A73F00000060421EBABF000000A0B44AC1BF000000A08142C63F00000000B1B6BFBF000000007516C1BF000000008A5099BF00000060A4C9C0BF000000404C44C2BF000000402EC5D3BF000000000030913F000000803FA0D93F000000A091B6BB3F000000806F17C3BF000000C06F0DAB3F000000E0A3F293BF000000C0E257963F000000801622C63F00000040C1AFC13F00000000C4227BBF00000080E8FB9ABF00000040BE39B9BF000000808B95A4BF000000C0EAC8CD3F0000004091AAA8BF00000000263D68BF000000807F95C23F00000040DEF394BF000000807407A43F000000C00D5BA43F0000000008598F3F000000C0CB40A4BF00000000DA3AB63F00000040564CBEBF00000000B29A8E3F000000C0917AB13F000000C09D87A9BF00000080BE29A83F000000C09B8EBE3F000000A0A7E7B7BF000000E0FE89BD3F0000000025B891BF00000080D7E6B13F000000608A22B23F000000006C25703F0000004046A5B2BF00000080E1B0A4BF000000A027D3C03F00000040D8D2C5BF000000C06F72CB3F000000E04458C03F0000002071A0AC3F00000000CD0EBD3F000000A0E1D7C43F00000000E52AC93F00000080547FA0BF0000000056B78C3F000000403D0DD0BF000000A0D08DA9BF00000040AD29B53F000000004C01923F000000C08745BD3F000000403918AC3F, NULL);
INSERT INTO `student_encodings` (`id`, `student_id`, `encoding`, `created_at`) VALUES (49, 5, 0x000000203D37BEBF00000080432CA03F0000000074A2503F00000020137CAEBF000000A08E23B2BF0000000008E88CBF00000040D942A3BF000000C02A9AC6BF000000C00429BA3F00000040F29FB9BF00000080A8E5CF3F000000E03FBEBEBF00000060F416CCBF000000609610B9BF000000405932BCBF000000207B0FC93F000000C0B960C9BF000000806C4CB5BF000000003A86A5BF00000080D6D893BF000000607472B03F000000201C5E8BBF000000400A9892BF00000080488B973F000000C09646AFBF00000040D1F6D4BF000000C04446BABF000000204946ADBF0000000039376CBF000000002A6CACBF0000008008C79EBF000000A0B1CDB03F000000E042B7C6BF00000080588BA6BF000000807F83903F00000040CD85BF3F0000008000B696BF000000009A8CB0BF000000E03F2EC03F000000A08F06B0BF000000A07E70C2BF00000000CC1C96BF00000000E0B0B63F000000003659CB3F000000A00D62C73F000000A0DA21B23F00000040FAEC79BF0000006074AFC2BF000000E052CDB23F0000006070FFC5BF00000080D7DB913F000000A06307B63F00000000E2CD9D3F000000E037FBB63F0000000088BF91BF000000C0432DBCBF000000001B17A43F0000008061D2BD3F000000003786B7BF000000C04F2383BF000000C025B2BC3F000000600CBDC1BF000000008FE0A4BF000000608EA2B0BF000000A056E0D03F00000060AE8CB43F000000C074DDBBBF000000409842C1BF00000040F53DC73F000000C01858BDBF000000004706B9BF000000C0962EA7BF000000A0F7A8BBBF000000807661C3BF0000000058C2D2BF00000000A907A63F000000A09519D93F000000E05214BA3F0000008041D6C7BF00000080667CAC3F00000040963DA2BF00000000EDC79C3F000000002DB3C83F000000E042DDBE3F00000040A3FC923F000000808B09A4BF000000E0F92FBDBF00000000C4917DBF000000C0A014CB3F00000020B569B2BF00000040BE8E81BF00000020B377C43F00000000214AA5BF000000C075A3A33F000000005E86AD3F000000C0090BA53F00000000892BAEBF000000A05366B73F000000A02551BEBF000000002D85883F000000A0DF6EBB3F000000C0F7F5A2BF000000006E06993F000000A0B7C6BE3F000000C06C52B5BF000000805306C23F00000000909450BF000000C0D45FA33F00000060BA91B53F00000000DC2AB0BF00000020BD96AFBF00000000A7C1A1BF00000000192DC13F000000602B84CBBF000000E06A95CD3F00000000978FC03F00000040CB2DA93F000000808DF2C43F000000407155BB3F000000800E08C63F00000000E0A57FBF00000000288676BF00000080E756CEBF000000A0572BA5BF000000405F46B63F00000000422A7B3F0000000066FFB33F0000000016069B3F, NULL);
INSERT INTO `student_encodings` (`id`, `student_id`, `encoding`, `created_at`) VALUES (50, 5, 0x000000E0C945C2BF00000080A85BA03F00000000E9A374BF000000A0B2ADADBF000000E09DFCB1BF000000C0CAC09ABF0000000074A0503F000000602AF2C6BF00000040028CBC3F000000E01F6DB9BF000000A01DC5CF3F00000040A01CBABF000000E01290C8BF000000E013D2B7BF000000A0CCD3BBBF000000405B16C73F000000A0C43DC8BF000000C09528BEBF0000006079A7B2BF000000008E92873F0000000000CFB33F000000E0CFC55DBF00000040357E98BF00000080E821923F000000C073FBABBF00000020EBACD2BF000000C07A99B7BF00000000B9EDB0BF000000C0B9027EBF00000000584371BF00000000865770BF000000400CD4AC3F000000004712C9BF000000C0CEB4AFBF00000000598B9B3F000000802551BE3F000000C058BEA7BF00000040EDC4A0BF000000602ED9C33F000000801501B1BF00000060D84CC7BF000000000885783F000000C00F53BF3F000000E0CBA2CE3F000000C070DBC53F000000002CD8B93F000000C0BC8598BF000000A02467C4BF000000E08D14B43F00000040B48FC4BF00000020C98F983F000000C0B4E9B93F000000C020F4AD3F000000C0CD8BB83F0000000088B06BBF00000000006BC0BF00000000CE4FA93F000000009BDCB93F000000602800B2BF00000000DB49703F0000004040F7BF3F00000040EB7EBDBF00000020D33A9CBF0000000032D4BCBF00000080FA04D13F000000E024DBA43F000000C0EC76BCBF000000403E0CBDBF000000000172C63F00000080EA3BC0BF0000006051DFBEBF0000004038B794BF00000000DE10BFBF0000000069FEC3BF000000403C46D3BF000000004D44983F00000040BF46D93F000000804B5FBC3F0000004012B4C5BF000000601C35AB3F00000040D98A8BBF000000A050E3A73F00000060FA5CC73F00000000BF52C13F00000000806D1E3F00000000462A83BF000000E05249B9BF000000809664A7BF00000080E41BCD3F0000008053D3B0BF00000000105E533F000000A0191BC63F00000040E2D191BF00000000F204903F0000002079D2A63F00000000383074BF00000080202199BF000000803FC5B23F0000000085AAC2BF000000409CAE943F000000400F92AE3F0000008025B8A9BF00000000A3169F3F000000C0CB6EBC3F00000060BC33B9BF00000040EE40BC3F00000000E8E4743F000000A0A60AB03F000000A08630B13F000000005A9896BF00000060B879B1BF00000000DAF5ACBF000000401CD1BE3F000000808792C8BF000000803590CD3F000000E0393FC13F00000040AEE7AA3F000000801800C23F000000A0914EC13F000000E0F6A5C73F000000805F7BA0BF000000802852A33F000000E09BEDCFBF00000040971BA6BF00000040453CBA3F00000000BCA37E3F000000402F97BA3F00000060F16FA83F, NULL);
INSERT INTO `student_encodings` (`id`, `student_id`, `encoding`, `created_at`) VALUES (51, 6, 0x000000402596B8BF000000E08CA9B53F000000C01B6AB33F000000803A89BABF000000C0D281BDBF00000040062697BF0000008057E3B4BF000000C03EB2BEBF00000080918BBF3F000000A0CE5FBFBF0000006009F4CE3F000000E03A8BC0BF000000C03EC0CDBF0000008025A9B1BF00000060E007C2BF00000080A92ECE3F000000207203C5BF00000040B244C3BF000000C05D5986BF0000000049CFA03F000000207F93AF3F000000C03AADA7BF00000000562B943F000000802CB09B3F00000020A481B8BF000000E04CC1D6BF000000A094DCB3BF00000000877191BF000000607728AFBF0000000094B093BF000000004700B5BF000000C0237CC13F000000806180C9BF000000005C6A93BF00000080F47A9A3F00000060FB90B93F0000000093F89FBF000000A00D4DBABF000000005D1FC63F00000080A9F7723F000000C02C33D0BF0000000000D9A53F0000008088E5A63F0000006060CFCE3F00000040C8EFC33F00000000D28A8A3F00000020213FA43F000000C0A1CEBCBF000000A07E34B73F000000200714C9BF000000409034533F000000400C1AC73F000000805B6AB53F00000000463C8B3F000000C00E18A3BF000000204A0EBEBF0000000040D46A3F000000E0613DC43F000000C0D4C5BEBF00000000A4EEA2BF000000C04C86B03F00000080AA2FBFBF000000A00DE3AABF00000040A559C5BF00000020DC6ECA3F00000040E783C43F0000004067F9BFBF00000060A73CC7BF000000C0C509C33F00000040DAA3AFBF000000A05086A5BF00000060E125A13F000000801690C7BF00000000238EC7BF000000207332D0BF00000000E89D8F3F000000606492D33F000000C07DB2BA3F00000040F9CDC4BF00000000EA89A83F000000E0D61EB2BF000000C01EB1B23F000000803A34B23F00000080512DC03F00000000402F54BF000000000763923F000000E049BEB5BF00000000FFCFA3BF00000080D8A1CA3F000000E05ABBC0BF00000040BD20A8BF00000020BEDAC43F000000C0EA359EBF0000000000324E3F000000C0F5CB93BF0000000072B980BF00000080E716B1BF00000000F484AE3F000000000DCFC1BF0000000092837ABF00000000C3898D3F000000207414ABBF00000040D073A0BF000000805AD2B73F000000A0E7E4C4BF00000000D9C5A33F00000000EDC995BF000000A0E159933F00000040E10EA33F00000000028797BF000000400CD1AEBF00000080C16AB6BF000000C0E542B63F0000000077B5CDBF000000C08871C93F00000040DECDC63F000000E0A424A93F00000040447DC23F00000040384AC53F00000040505BBA3F000000000046803F00000000FF7A97BF000000C01D6DC1BF00000060D0A8B3BF000000C0E96AC23F000000002D55AB3F00000000DF76B33F0000000007DC8FBF, NULL);
INSERT INTO `student_encodings` (`id`, `student_id`, `encoding`, `created_at`) VALUES (52, 6, 0x000000808DE8BBBF000000E09D70B33F000000408528A43F000000C06E8EA5BF000000C03879B3BF000000C0C77DBABF000000807FC1A3BF000000C06F87C2BF00000000C454B83F00000020180BB5BF00000080D612D13F000000208845C2BF000000C0ED1FC9BF0000000051CEC3BF000000E0AD28B0BF000000403D88C93F000000A0657DC5BF000000406469B6BF000000A0015FAEBF0000000005E3883F00000080EC2EBA3F00000000385C9FBF0000008063E4B23F00000000234086BF000000800B72B0BF000000C087DFD6BF00000060D299BFBF000000E03764AEBF00000040A2B38DBF0000000058BBAEBF00000040CF2EA2BF000000807429903F000000002FC5C8BF000000C04922B5BF00000000A0FF833F00000000D738AE3F000000805F10A5BF000000408D47B0BF000000E03A4BC43F000000C09C9E87BF00000000632FC6BF00000000774D9FBF0000004060BBB23F000000A022BDCB3F000000606639C13F000000004161B53F000000609473A63F000000C07922C2BF000000A03238BC3F000000E0528CC4BF000000002B0DA23F000000408D5EBB3F000000006125B93F000000C02952A73F00000000C6E4823F0000002056979EBF000000007585AC3F0000002005D4C03F0000004012DCC5BF0000008098DE8CBF000000C0C965C03F000000A0CAAAA3BF00000060A6F3BBBF000000A05CFEB1BF00000020C21AD13F00000080F97CBE3F00000020DD03BDBF00000000A812C2BF000000A0973CC33F00000020CBADB8BF000000C0474CB6BF0000000028B571BF000000A03E02BFBF000000005FDBC5BF000000007975D2BF00000000AE62863F00000060E9C6D53F00000020E68BA13F00000040E3BBC7BF00000080EF79843F000000C0C034B0BF000000C05701913F000000E0E2D9B83F00000080097FBC3F0000006018E3A5BF00000080564BB03F000000403792BFBF00000000427A8CBF000000A012CDC73F000000C0D702C3BF00000080A8AC7A3F00000040FE16C93F000000002E6D953F00000040FFA5A23F000000805EA59A3F00000000106B523F000000606228B0BF000000E061D1AA3F000000C0BB45C0BF000000008AF086BF00000080BFCDBC3F000000004F66A4BF000000005F46A0BF000000C0FF69AF3F0000008009DBBFBF00000000D124BE3F000000001064533F000000000B0480BF00000080656D953F000000805AE0B6BF000000A0468EB1BF000000A077E1B8BF000000606097B03F000000E02CC2C7BF000000008B48C53F000000400557C33F000000402186A73F000000C08E84BF3F000000E0EEFEB63F00000000A963BF3F000000003028513F00000000367D823F000000403BDCC4BF000000004204A9BF00000080BEBEBB3F00000000191D9E3F00000080223FA23F0000000087FA83BF, NULL);
INSERT INTO `student_encodings` (`id`, `student_id`, `encoding`, `created_at`) VALUES (53, 6, 0x00000000A621B5BF0000004023C2A73F000000C0DFDDAB3F000000008F2DB8BF00000060B860B2BF000000407613A8BF00000000F683A7BF000000200A48C4BF000000008553BA3F000000C0DEA9BDBF000000005F11CF3F00000080B14CB7BF00000000C83FC8BF000000204400B4BF00000000CCFCB2BF00000040B24AC73F000000803CCBC8BF00000000E607B2BF00000020D303A5BF000000C06CEFA1BF00000020ACB7B93F000000E01A1395BF000000007E46883F0000000000BF573F000000C0135EAFBF000000C0D18AD4BF0000008053D0C0BF00000000452BABBF0000000080E2983F0000000030E59EBF0000008015A1A8BF0000000023769E3F000000C0C2DCC9BF00000080D75FABBF00000000992183BF000000E08C36AB3F00000060AAB3AABF000000E024B4B8BF000000A0810DC23F00000000C730673F000000E0BAF8C5BF00000000895A98BF00000080E324A23F000000E0AC6CCA3F0000002052A2BF3F00000040695EAE3F000000C08E679B3F000000C0401DC5BF000000E0363FB43F000000C0F376C7BF00000040881D923F00000000E65AC03F000000C08758B13F00000080C0F2993F00000000E4A986BF000000209F92B1BF00000000D2039A3F000000C0D9F6C13F000000C0B172C4BF000000005C5D693F0000008075C1B43F0000008041DCAFBF000000200893B4BF0000008067F4BEBF000000809982D13F0000008092BCC23F00000080BF42C2BF00000040EDD8BDBF00000080750CC33F0000000075C1B2BF000000E06ED3B0BF00000000702781BF000000002CA9BCBF00000020AC81C8BF00000040A372CEBF000000009E4B8E3F000000607CF2D73F000000E05A55AB3F00000000133DC9BF000000800865943F000000401C1ABFBF00000040B56E92BF000000608328C53F000000E0D27FC13F0000000070F08EBF0000000078ECA53F000000E06402B0BF000000001869843F000000E01C96C93F000000800C04C3BF000000006B10963F0000004044F0CC3F00000080A2B595BF00000040B3D5A63F00000000C21084BF000000809B8A983F000000E04748B6BF000000E03DA4B23F00000020DBCFBEBF0000004007BDA0BF00000060EEE2BC3F000000003ACE9CBF00000000DC8082BF000000C07A44BB3F000000A0D6FCC1BF000000E00792BB3F000000806655993F00000080DC2F8ABF00000020A474B73F000000C04FB7BEBF00000060DDCBB3BF00000040DACBBDBF000000601636BF3F00000060C4A4CABF000000203C50C33F0000000008E8C53F000000201117853F000000009AFBC03F00000060AA20BD3F000000206737BD3F00000000750F803F000000401024ACBF000000804B64CDBF0000004026B0903F000000E09FE5C23F0000000070FB4DBF00000000AAEE813F000000E09C3BA7BF, NULL);
INSERT INTO `student_encodings` (`id`, `student_id`, `encoding`, `created_at`) VALUES (54, 6, 0x00000080E41DBABF000000E0547BB23F00000000E6D7B03F00000040B2F9A5BF000000A01031B4BF000000E0E87EB7BF000000C01260AFBF000000408017C4BF00000040BFEBB03F000000C0B17BB3BF000000E0288ED13F00000000F0CABFBF00000020A5E7C9BF000000403282C6BF000000C0464FB6BF000000000E6ECB3F0000004065EAC3BF00000060332DB7BF000000A007FBAFBF00000000D0F4873F00000040109FB73F00000080A4699FBF000000203556B33F000000007AA772BF00000080CB71A3BF0000004041D5D7BF00000040FCD6BCBF00000060415EB2BF000000604C9C91BF00000000FFCCAABF00000080B4A8A7BF00000000FCBB923F0000004038FAC7BF000000007FE6B5BF000000801C52963F00000060224AB03F000000001CEE90BF000000406D47ABBF000000A03D0DC53F000000207B7798BF000000E031BAC6BF000000002CAF7DBF0000000029C0B43F000000008A99C93F000000400682C23F000000406596B33F00000020EDA3B03F000000C06B2BC3BF00000060FE21BD3F000000408F7AC1BF00000080A3ABA33F00000080E2F0B93F0000008073DAC03F000000000F6C9E3F00000000BDAE883F0000000002A9A5BF00000000A87CA83F000000605C78C43F00000040D843C6BF00000000DE397DBF000000E013FFBD3F000000E05DF8ADBF00000000AD70BCBF00000000BF1CB2BF000000E02516CE3F000000C0F588BC3F000000C08C81BCBF00000000E017C4BF000000C03891C33F000000406C26B6BF00000000A19CB3BF00000000D316803F000000C03946C1BF000000C0946DC3BF000000E06B0BD3BF000000005425733F000000205586D53F00000000A1BDA13F0000004099FCC9BF0000000058DF82BF000000401E37AFBF000000C05B75983F0000004044A5B73F000000E062EFB63F00000040A8F7A2BF000000803D009F3F000000C009F2BDBF00000000D83296BF00000040B7F0C53F00000020C4CABFBF000000402664853F000000E01777C53F00000000D6BE7C3F00000000DDACA13F000000602C52883F000000007771903F00000060E973B1BF000000A0C570B03F0000006073F8BFBF0000000038E67CBF00000020D638B43F000000C0F9E6A2BF00000000796992BF0000000088AFA73F000000E084A3C1BF000000C0923DB73F000000808AF893BF00000000FB367FBF000000801DC3933F00000080509DB7BF000000C0E199B0BF000000C0D544B2BF000000C0470FB63F00000060773CC7BF0000004038B6C73F00000080B4B4C53F000000008B90A73F00000080AB60BC3F00000000B564B93F000000401464BB3F00000000103E7DBF00000000421599BF000000A026B4C6BF00000080E2A2ADBF00000020A4D4BD3F00000000D072513F00000080C4CAAC3F0000008070CC94BF, NULL);
INSERT INTO `student_encodings` (`id`, `student_id`, `encoding`, `created_at`) VALUES (55, 6, 0x00000000931FB7BF000000A00DE2B23F000000E05F9DAD3F00000080CFE29ABF00000000E756ADBF00000000D27486BF00000000BA3D783F0000002047C9C3BF000000002487B93F000000C0F610B7BF00000020D39CD13F000000C07786BABF000000C05BA6C9BF000000401706C1BF000000C08A6EAFBF000000C0A7FEC93F0000000048D9C6BF000000405190C0BF00000020A6A5A8BF000000005F348C3F000000C09374BB3F0000004033669BBF00000040D75A9B3F0000000019D2893F000000405AD6B3BF000000A07565D5BF00000000C080C0BF000000C0C3F3ADBF00000080D52E943F000000003E72ABBF0000000049F5A2BF000000C0AF2FA33F00000000353FC8BF000000801E02A1BF00000080DB7FA03F000000A0EA12AE3F000000804A76A3BF000000006781B1BF000000E033D2C93F00000060C8D092BF00000020BD5AC8BF00000000FE359A3F000000809043BB3F000000806A30CF3F00000060D18EC13F00000000B3C6A93F000000E04DFC7E3F00000020E08DC2BF000000A05125BF3F00000040CF17C6BF00000080F672B13F000000C0D4ACC03F00000000B803BF3F000000209094AE3F000000006B2B843F00000080A646B4BF00000000063A903F000000408E69C33F000000207C88C7BF00000020FBC7A03F000000C0629EBB3F000000A0FF22BBBF000000E09917B9BF00000080A1ECBCBF00000000D3A9CB3F000000C01E1CBF3F00000000DB60C0BF000000C0B4D4C6BF0000008014C8C23F000000E04D01B6BF000000E0501EB0BF000000C03C67953F00000000FAC9C1BF00000080FC95C6BF0000000063CAD0BF000000001CDFAA3F00000020C7D2D93F000000803FD1B13F00000060EAB8C8BF00000060E4F9A83F000000407C8EA2BF00000000188F6EBF0000000062F4BE3F0000008031C8C53F0000008043B981BF00000000C5258D3F00000060AF09B8BF00000000CFE2923F000000A0FBC3C23F000000C052B2BCBF000000E00A50923F000000803F31CB3F000000402E2C93BF0000008053F8A53F00000000F4DF55BF00000000C024633F00000040864BB3BF000000A02CF0B33F000000409D13C1BF000000007A5F92BF000000805B6CA03F00000000E3C77DBF00000000A8EB8F3F000000A0088CB13F00000060B1A0BBBF000000E0B49CBB3F00000000F090793F00000000FF7F903F000000009F04AB3F000000405D00B5BF000000E0D5A0AFBF00000040A5BBB2BF000000400329AF3F000000E02C78D0BF0000008095E4C43F00000040E1A9BC3F000000003AC8903F000000C03EFABE3F00000080F857BB3F0000004001B0C33F00000040B505A13F00000000C2D991BF000000804773CDBF00000000E49E783F000000801A1BC23F000000000028DD3E000000004F5CA53F00000000C6C196BF, NULL);
INSERT INTO `student_encodings` (`id`, `student_id`, `encoding`, `created_at`) VALUES (56, 6, 0x000000C0AB18B5BF000000C0E396A83F00000060DB50A53F0000008044F2B6BF000000801696B3BF0000000009EEABBF0000000068FBA8BF000000400006C3BF00000000010FB83F000000604A40BFBF000000E05592CF3F00000000A410BCBF000000409AD8CBBF000000809544B8BF000000C0AA74ADBF000000C0215ACB3F0000008097C5C6BF000000E006C2B9BF000000002986ACBF0000000010C08BBF00000060A219B43F000000002074A6BF0000000073EE993F000000807596A03F000000C01AA6B7BF00000080618FD3BF00000060A6FFC0BF000000A0ADDAA9BF00000020CB36A4BF00000040FA44B0BF000000804C39B2BF000000401397A63F00000000D30EC8BF00000080D16BA7BF00000000B5DB803F000000008D54A93F00000040A987B1BF00000060896EB6BF0000008020FEC73F000000C0BC4A863F000000C0C5A2C9BF00000000AC5C86BF000000202ED7B63F000000C0BAA6CA3F000000405D41C63F000000608D849F3F00000000DBBE733F000000E0F11BC4BF000000A0B9B5BA3F00000080BB11CCBF00000000E35BA23F000000E04520C03F000000001637AE3F000000E0CC97AB3F000000008F9A8B3F000000A0E05DAEBF00000000724A973F00000000F73FC63F00000020674FC5BF000000400160963F000000E04101B43F0000008061B8B8BF0000004098D6BABF000000E06817C0BF00000060120AD23F000000208EE6C33F00000040C40EC5BF0000008010D6C2BF000000404A90C33F000000C0E5A9B6BF000000A08690B4BF000000A04139A53F000000005B4EBCBF00000000AC09CABF000000E06BFED0BF0000000060BB973F000000004B7ED73F000000E06871B13F00000040EC1EC9BF000000409EF6A43F00000080510AB6BF00000000B420ACBF000000C00E8DC03F00000040517EC53F000000008861693F00000080A5BF9D3F00000060A0A1AABF00000000CC497C3F00000080325DC93F0000008006F9BDBF000000E099339E3F000000C0680ED13F000000809E7591BF000000801A2BB03F000000007E74753F000000C00C29A13F0000000023BAB4BF000000C02108A43F000000807685C1BF00000080B4ECA0BF000000405669B53F000000806178A7BF0000000062A68ABF0000002071CAB73F00000040B099BFBF000000604530BA3F00000000EC797C3F00000000A851853F000000801746B03F00000040244DBBBF000000404C90B1BF000000000392B9BF00000020A1AFB83F00000060B377D0BF0000002092ACC13F0000000072AEC13F000000C083799F3F000000A05C3EB73F000000C00DE4BD3F000000C0A529BC3F00000000EC54963F00000080BCFCA8BF000000A052A3CDBF00000040914BA23F00000080E416C43F00000000D3A288BF0000000093E09F3F000000401B1498BF, NULL);
INSERT INTO `student_encodings` (`id`, `student_id`, `encoding`, `created_at`) VALUES (57, 6, 0x00000000C219B1BF0000008011C39E3F000000E0BAEB9F3F00000020A11FB9BF000000002F14B3BF000000E0359EABBF00000060AD8BA2BF00000020EBB2C4BF00000000A8A9B73F00000000504AC0BF000000A00F9FD03F000000C07822BFBF00000060AE54CABF00000080FA94B5BF00000060D0CCACBF0000008031E2C93F000000E02121C9BF000000A0E296B7BF0000002067B0AABF00000000F89878BF000000409FEBAF3F000000206875A0BF000000C021E7953F000000008F38843F00000040E9DAB7BF000000407E17D3BF000000206B25C2BF000000604205A9BF00000040956995BF0000008017FDB0BF00000020FE5FB0BF000000008424973F000000802F9AC8BF0000000079A8A3BF000000800C4E933F000000006B28973F000000207631AEBF00000000C4FAB7BF000000003EE1C53F00000000821A983F000000C0884EC9BF00000000884A7A3F0000004051CDAF3F000000E0C37ECB3F000000003735C33F00000040273CAB3F000000E06B9883BF000000E03787C4BF0000008019D1BC3F00000040B768CBBF00000020D23D9C3F000000407E38B93F000000400B73A33F00000000CD65973F00000000E19D84BF000000000240ABBF0000000044C4873F000000001751C73F00000060E30AC8BF000000A0754EA43F00000080047CB73F00000020C4B7B7BF000000009B19B9BF000000C000A0BDBF000000205723D13F000000403F87C53F000000A063AAC4BF000000608F3DC3BF000000C014E2C23F00000020167DB6BF00000040676FB3BF000000004CA8933F00000080C933B8BF000000E0ADAACABF000000804879CFBF000000000E36823F000000006621D83F00000000EAD7AF3F00000080E41CC8BF000000806E569B3F000000000614B5BF00000000DF569BBF000000E0E5DEC33F000000E06CD9C33F000000005C8E573F0000000087E1A13F00000000816DAFBF0000000000A6613F000000E01A0ACB3F000000804E42C0BF000000609E00903F000000608454D13F00000000FCE3A6BF000000009164B03F000000001ED64ABF000000003076993F00000000F235B6BF000000C0FEAEA83F00000000F17FBFBF00000040CC11A5BF000000C07453B93F00000060B80FA1BF00000000384B6F3F000000204D46BC3F000000E0847EBEBF000000E082B9BE3F00000000A4346A3F000000009B8C883F000000405899B33F000000008000BABF000000A09AF7A5BF000000C0ED7FB7BF00000040ED84B53F0000008058A9D0BF000000A00470C33F00000060E61DC23F000000607D04A33F0000000045E3B83F0000002045F3B93F00000040EBCFB43F00000000BA3F963F000000803454A1BF000000C0CDFACEBF00000040A8EF923F000000207FCDC13F0000000058C15D3F00000000B974AA3F000000C0B638A0BF, NULL);
INSERT INTO `student_encodings` (`id`, `student_id`, `encoding`, `created_at`) VALUES (58, 6, 0x00000000FC91BBBF00000000EA0DB53F000000A0AA06A63F00000060050DB0BF000000407F75B3BF000000C0224AA1BF000000C07170AFBF000000808BEAC0BF000000403CB3B13F00000040438EB2BF0000008032A7D13F00000060CD7BB6BF00000000604DC8BF00000020BE1BC5BF000000204F33B3BF00000000DCF5CC3F0000004075A7C4BF00000080B748C0BF000000204AA5A1BF00000080A5A09A3F0000004028DAC03F00000040C587A7BF000000C07698993F000000402D6FA13F000000E010FBB7BF000000A0C12BD6BF0000000011C8C1BF00000040E6C9A3BF00000060919597BF000000C0D024B0BF000000400E12A2BF000000809D3A903F000000800E38C9BF000000C0CDB0A6BF000000001D9E8F3F000000C0560EB13F00000000E8316D3F00000080D5AFBFBF000000602F5FC53F00000000143C77BF00000060E526C8BF00000040583FB23F0000000090B5A33F000000A0FD83CB3F000000600BE6C23F00000040C8519F3F000000C04428B43F000000403619C4BF00000060078EC13F000000A07C53C0BF0000000095A9A73F0000004057D7C03F000000A0C805C13F00000000629B993F00000000D49371BF000000806641B1BF0000000022B9A53F00000040364FC03F000000C0CB55C4BF000000A03400A4BF00000080F2F8AA3F0000000097E39FBF000000A006A9B0BF00000060489CC4BF000000407000C63F00000040B5CFBB3F000000C097DEBCBF000000409D54CABF000000802F31C33F000000A074AFB4BF00000060299EB2BF00000000174E923F000000C0F6B9C5BF000000C05442C7BF000000602F1AD3BF000000008481A33F000000A0D1B4D43F00000060208AB33F0000004074CECEBF00000020E7B7AE3F00000040FB5CA4BF00000000EAB3973F000000C0DE59B23F000000207CD7C13F00000000402A143F000000405923AB3F000000C02658B8BF0000000046858DBF000000609740CA3F00000000B4DEBCBF0000000037C087BF000000C0004ACB3F00000080291B823F000000C0797FA43F000000C0C985A33F00000000F1E7863F000000C0EC12A3BF0000004026FBB53F00000080E19AB1BF00000080147FA33F0000000009F4A93F000000602F76A9BF000000800A3D9ABF000000401FE2AE3F00000060B929C2BF000000A02275BF3F0000008067F098BF000000401D2EA53F00000000C0A43EBF0000008031C7ADBF000000200E88BABF00000080B52DACBF000000C049DBB73F00000080CC26CEBF0000000069B8C63F00000080B56DC53F000000E07A31953F00000080155EBB3F00000000245FC03F00000040DE1BC33F00000000A2F887BF00000000C0AD76BF000000600A88C9BF0000004041D6A4BF0000004033D7C03F00000000D44692BF00000080811CA93F0000000078325D3F, NULL);
INSERT INTO `student_encodings` (`id`, `student_id`, `encoding`, `created_at`) VALUES (59, 6, 0x000000E0E8A1B2BF0000004017AAA53F000000009E8BA43F000000401F7FB2BF00000020A9F9B1BF000000C07B20A4BF00000080E22BAABF00000020D9A4C0BF000000801214B43F000000603EFFC2BF00000020CB0CD23F000000005385BFBF000000803D7ECABF00000000FB75B5BF000000001F58B3BF00000080E68FC93F0000000041EAC8BF000000C0CC33B2BF000000E04E02AEBF00000000E25D94BF000000E0D046B63F000000E0855CA4BF0000008018B3863F00000000EF178C3F000000802073B7BF0000008001FBD3BF00000060EE7EBDBF000000C065E4A5BF000000807A60603F000000C08F2AB0BF00000020A1B1A0BF000000C0225CA13F000000C07504C7BF00000080AAC593BF00000000F3EE80BF000000003812533F00000000EACE9FBF00000000A392B1BF00000080789CC63F0000000027D1693F000000C03F2AC6BF000000001C8F91BF000000E06276B03F000000E03C87CB3F000000C020AEC13F00000020084DAA3F0000008078BC903F000000A0E30EC5BF000000008E32BE3F000000C0920ECABF000000600A558E3F00000020F699BE3F000000808870B43F00000080761DA43F00000000408D2CBF000000A00B1AA9BF00000000D4A2A23F000000C0E4A6C53F000000A05B40C5BF000000400349A63F000000C0113DB43F000000A0F7BFB1BF00000000DC38B4BF0000006068B5B9BF000000E0A838D13F00000080317EBD3F000000002FE2C3BF0000002085D9C1BF00000080C1BBC33F000000A0E515B5BF00000080D972B1BF0000008078BA8C3F000000803EFFB9BF00000020C736CABF000000A0B06CD1BF00000000445D963F0000000097C4D63F000000E04DADB13F000000C09A21C8BF0000008030B0A73F00000080272FB3BF000000E083DEA3BF000000208784C23F000000E00A27C33F000000C0DBCD9EBF00000000F09362BF00000020E1C0ABBF0000000070AD853F000000606066C93F000000400D3BBFBF000000801832983F000000E08E71CF3F000000C0187998BF00000000C6689D3F000000408CB052BF0000000083CF9B3F000000409A09BABF000000803311AC3F000000A08ED6B8BF00000000261180BF00000080ECCFB63F000000A031E4ABBF0000000080B621BF00000040895BB63F000000204A65C1BF000000201851BF3F00000080B4CA91BF0000000016F9763F000000C0777AB53F000000C01668B3BF00000020B36DB3BF00000040B123B9BF000000E0BE97B73F000000001475CEBF000000409F50C23F00000000AC4FC23F0000006081A1AA3F000000C0AD8ABC3F00000080EC9FBE3F00000040CEA4BE3F0000008006C1923F0000000040178ABF000000A071D4CABF000000008C7F4B3F000000C0CFE8C03F00000080311C9BBF00000000555D9B3F00000000F3E6A3BF, NULL);
INSERT INTO `student_encodings` (`id`, `student_id`, `encoding`, `created_at`) VALUES (60, 6, 0x000000C0603FA7BF0000008030C5B63F000000409D3DA73F000000008A6BB3BF000000408B46B4BF0000000055D39BBF000000404C9EBDBF000000E0598EC3BF00000080924BC33F00000000DE87BBBF0000000016E1D03F000000C0E03CB2BF000000C0D512CABF00000000D38C8BBF000000409FE7B2BF000000401A34CD3F000000A00F2EC9BF000000C067CCBFBF000000005BCE6EBF00000000107C87BF00000000AA55AB3F00000000690965BF00000060CC76A93F00000000078AB23F00000060FAF9BABF000000608382D5BF00000000C476C1BF0000000008A3B0BF00000000C69368BF000000003EB6AABF000000C070CCB8BF00000000FB9B943F00000040C446C8BF00000000CA4B8ABF000000005039B93F00000000EE79B53F000000801AE2A6BF000000A0150DC3BF000000A05520C73F00000000B52C8EBF000000404B77C9BF000000003A39843F00000000A2EBBB3F000000804AE0CC3F000000401973C63F000000A04B16A83F0000004064E592BF000000A074A3C7BF000000E089C4BB3F000000C02E30C4BF000000E0C691B23F000000C07FE9BF3F000000800067A33F000000207D85B13F000000800381953F000000800F70BCBF000000005020AA3F000000804957CA3F000000008F55C5BF00000000CF81B1BF000000C0747CAA3F00000000CFEFB3BF000000A08051A5BF000000A073B0C0BF000000005111D23F000000003C73C63F0000000036F4BDBF000000405989C4BF000000C038D7BF3F00000040E8D6B6BF000000E00E54B1BF000000000C94843F000000001BA4C2BF000000001A55C6BF000000E096CDCDBF0000000052B08DBF000000C0636ED73F00000000DDF9B43F000000C00799C8BF00000000FCACB73F000000003C2281BF00000000D3BFA0BF00000040CEA1BE3F000000E05B66C33F00000000F20F77BF00000000EC8585BF000000203932AFBF000000008046673F000000E0B6B9CD3F000000C0F779BABF000000A04618AA3F000000002D8EC83F00000040958AB1BF00000000260C983F000000C01E85A03F00000000B4BE913F000000C0F161C0BF000000C0983AAE3F000000A0AA7CC4BF000000406F74B2BF000000008E18713F00000020133BA03F00000000670C9BBF00000060C5FABD3F00000080AF73CBBF00000000E726AE3F000000804BC09E3F000000408116AEBF00000000F9F4B33F000000007E84B0BF0000000047C39BBF00000080362ABDBF00000080697EB93F00000040F8CCD1BF00000060C2B3C83F000000E05C1ABE3F000000605503AA3F00000080C3EFC33F00000040765FAA3F00000040CADEBD3F00000000C8336CBF000000C030D2A8BF00000040AD6ECDBF0000000011D6903F000000E0B6AAC23F0000000002A685BF000000005F1EAD3F000000403E56A5BF, NULL);
INSERT INTO `student_encodings` (`id`, `student_id`, `encoding`, `created_at`) VALUES (61, 7, 0x00000040B0FEC3BF000000C0965DC33F00000020F27A9C3F000000E0D0BFACBF000000201678C5BF00000000A2A3B3BF00000080386CB4BF000000602FC0CBBF000000C041D4B03F000000E033BFB3BF00000000E1B7D33F000000C0A5B3C1BF000000A0EC87CDBF000000A02080BBBF000000E097F8B0BF000000C0A90FC73F000000E0BA8EC1BF00000060DDF0C5BF000000800D1C9FBF00000080A24BA9BF000000C001C6973F0000000043EE8C3F00000080D891A23F000000800747AB3F00000060755AB1BF00000080024DD8BF00000080EC05B2BF00000080DF8AB7BF00000000080DA53F00000000A43073BF000000E0B1189CBF000000409F1DBB3F00000080AD94C5BF00000080ECA9B6BF00000040909AB03F00000080107BBA3F0000000078B9753F000000C0937CA23F00000080B790C73F0000000034F2A1BF000000A03480C7BF00000000801820BF000000E0E5ABB63F00000000B22ED53F00000080D01EC03F000000804BD3B63F00000000D551953F0000008073D2A9BF000000808D66A43F000000406F19CDBF00000040E3A2C03F00000040964AC03F000000A05183BF3F00000000E8B25FBF000000608BB8B23F00000080BA47C3BF0000000000EE463F00000080C9FFBF3F000000A033A1C6BF000000A03805A53F000000E02B30BE3F0000008065EEB1BF00000080D33DA8BF000000A0744AC1BF000000009F2ED53F000000806667BC3F000000E047F4C1BF00000040F02EA0BF000000809770C23F00000020E3F8AFBF000000C09281B9BF000000C0EAD998BF000000803AF5C4BF000000608E52C0BF00000020222FD8BF00000040E7AAB03F000000008312DC3F0000000052B8BE3F000000C07946C9BF00000040C0A79F3F000000801DCB923F0000000037A9953F000000009B64B43F000000003693B23F000000C09CB7B1BF00000000273096BF00000080EB0AB9BF00000000745A713F000000207586BD3F00000040EC0CABBF00000000A418ACBF000000C0E1FFCA3F000000C03607A4BF000000609AA6B13F000000A0EAC89F3F000000C08AD9B03F000000000352AFBF000000E0A0C6ADBF000000800EE5C0BF000000009488793F00000000D1DE943F000000803451AABF00000000444C8FBF000000801053C03F000000408B81C6BF00000000D877B43F0000000012837DBF000000C00AD1973F000000802740A1BF000000803C7DA23F00000000779594BF000000808778B3BF000000804FD7B83F000000C0692ACEBF000000E02EF8CA3F000000807E8EC63F000000202918A43F00000040F08DC53F000000C0BB36B73F00000000B05A58BF00000000CE159E3F00000000750491BF000000404EBEC2BF00000080A208C0BF000000603056B93F000000005816AFBF00000000AE1AAF3F000000E006EDBB3F, NULL);
INSERT INTO `student_encodings` (`id`, `student_id`, `encoding`, `created_at`) VALUES (62, 7, 0x00000000C78BC3BF0000006020CDB23F000000407459B63F000000A0676B90BF00000080A34BC4BF000000608F05B2BF000000C073DDB0BF000000002BF8C2BF00000080C222B03F0000002040A1B0BF00000080EBB1D03F000000E0A6D4B6BF00000040C11BD0BF00000020945BB0BF000000C033B19ABF0000004069F0C63F00000060E262C1BF00000020C1F4BEBF000000006F98B8BF000000A0E597B8BF000000C0E882933F00000040BD45863F000000000D03A93F00000040CF9FAB3F00000080186DBBBF000000C0262DDABF00000040C265B3BF000000A005EEB7BF00000080391587BF000000808D7FA5BF00000040A90A95BF000000E001EEB53F000000802006BABF00000020D25EB3BF0000008043029F3F000000202231B03F0000000000013A3F0000000068CDB1BF00000080AB52CC3F000000005069523F000000607CD6C8BF0000000020DA533F000000602333B23F000000E0C051D23F00000040DE22CB3F000000007EE8B63F000000A0E880A33F00000000F20F9DBF000000E0B8FEB33F00000000F1C7D0BF000000403145BA3F00000000B486BA3F00000040939ABB3F00000000407B86BF000000C0C786B93F000000A04A70C0BF000000000A67923F000000C0FED1C23F0000002007A0CABF00000000C7AB8B3F000000C02782AF3F000000C0F3E4C2BF00000020492F873F00000080B5B4B6BF00000080B118D33F00000000D937C33F0000002045EFB8BF00000000B4E77C3F000000804A88C53F00000000BCBEBBBF000000C0AB15B9BF00000020A0D1B2BF000000C06D11C4BF000000A0A97AC3BF000000C09F93D8BF00000080C94CAE3F000000809294DC3F000000E02599C43F0000004048E9C8BF000000805FE9A43F000000408861873F0000008064FA903F0000002014F3BD3F000000A01DCCBC3F00000020E06DBABF000000A05265B1BF00000060E111B1BF0000000010F189BF000000801F42C23F00000000183E593F000000C003D6AEBF000000C06C9ACF3F00000000273378BF0000000030D2A23F000000A06759B83F0000000020B3603F000000002F93AEBF00000020EF22A7BF000000E0456BB7BF000000806A0F943F00000080B373A23F000000C0EBF8B2BF00000020D010B13F000000604B63B73F000000A0277AC9BF000000801149A83F000000403859A5BF00000000A6CD7B3F000000002BB28D3F00000000700D8B3F0000008095CCAABF000000C02B6BB1BF000000C09B9FC03F00000020CD52CFBF000000808D3DC23F000000005FD5C93F0000004007908F3F000000A09E43C93F000000C02B0DB73F0000004080A4A53F00000000D43D8C3F00000000C6AC813F000000A0F856C2BF00000040DBD8A9BF000000803BF3BE3F0000000048B29EBF00000080435FBA3F00000000619DC03F, NULL);
INSERT INTO `student_encodings` (`id`, `student_id`, `encoding`, `created_at`) VALUES (63, 7, 0x00000000A248C1BF00000040434CC23F000000C00DBFAC3F000000C034A072BF000000207B49BABF000000400FFBA6BF0000006025AFC0BF000000C0FF31C3BF000000C09619AF3F000000408776ACBF000000009DD8CE3F00000000DF01B4BF0000000097FECCBF000000A005C7B4BF00000040047EA7BF00000080C369C63F00000000B39CCABF000000E09FE9BFBF000000609C45B1BF000000401714B8BF00000000046A883F000000804DFFA13F00000080FC71AD3F0000000096D7873F000000005539AABF000000206756D9BF000000C0BD91ABBF000000407597B5BF00000080284AB33F000000807770ABBF000000009A6D8FBF0000000023F9933F0000002039C2C3BF000000401C33AEBF00000040795BA93F000000600E6EB83F000000806676A13F00000000742A9ABF000000C0C9D0CA3F00000080AF6E88BF000000A06963C1BF0000000096378B3F00000080FD09A13F00000000431AD33F00000000FB7FC73F000000800E45BC3F000000807B2582BF00000000736FA8BF00000040239DB53F000000E0DAF7CCBF000000606AB8B53F000000203D16C03F0000004041B8BA3F00000000F61579BF000000C06E94AC3F000000003AD6C2BF0000000024979E3F00000040495FBB3F000000607FB8C7BF0000008091E2883F000000C073C4AC3F0000000007DAC0BF0000000049C27FBF000000209707A7BF000000400C63D33F000000C0FC5DB83F0000008000C7B7BF000000606D07A9BF000000E04DA3C03F000000802B00B2BF00000040D064ABBF00000020CBA6A8BF000000C0163BBEBF00000040A07CBDBF000000A092AAD6BF00000080AC76A93F000000A08954DD3F000000C0BCE7B83F00000080207ACBBF00000040EEC6AE3F000000409C4E8E3F00000000837987BF00000040396CBF3F000000A0343BBA3F000000C0E88CBEBF000000403AD6A1BF000000E066EBBABF000000005414923F0000006050CDC03F00000000B4E29BBF00000020E753B3BF00000020134AC73F000000C0F1CDA3BF000000C02CF3B63F000000A08B6CB53F00000000FB3F953F000000C02A3CB1BF000000006527A3BF000000C02947BABF00000080609F99BF00000080E345B53F000000E015E8AABF0000000015A59A3F000000801292B93F000000E07812C4BF00000040401FAD3F00000000E0D384BF000000001A2D74BF0000000049009C3F000000002AD39C3F00000060A6D9A8BF00000040959FB3BF000000200472C33F00000020131FCFBF000000A08DAECA3F000000A0EF04CB3F00000000F8BA5A3F0000006057F9C83F0000006019EEB63F000000008001AD3F00000000C8A9803F00000000822FA13F000000203225C1BF00000060EDE9B7BF000000802CE3B03F00000000A08482BF00000000AE60BA3F000000C0140BB73F, NULL);
INSERT INTO `student_encodings` (`id`, `student_id`, `encoding`, `created_at`) VALUES (64, 7, 0x000000800D02C3BF000000C0FFC5C23F000000A0024EB23F000000405F1CA3BF00000080C122C5BF000000C0C3CAA4BF000000C013ABBEBF00000040079CC2BF00000000E5F3B43F000000605F2EB9BF00000060C95FD03F00000080B2EEB4BF0000000015B2CFBF00000040F5F4A8BF00000040FE8FB4BF00000080F3ECC63F0000008005A9C3BF00000060BBC2C0BF00000020216FB5BF00000000A23FB8BF00000080FD80893F000000007F9AA83F000000600FDCA13F000000800425A53F000000A09F26B0BF000000A06491D8BF000000200B98B1BF000000C01AB0B1BF00000000B8FCA03F0000004047A7B6BF000000C0E02EA2BF000000404813B23F00000000750BBFBF0000004019B5B0BF0000000044C2973F00000080F2EAAA3F000000006CA97F3F0000000077F29DBF0000006089FBC83F00000000B98387BF000000A0F1BAC3BF00000000FA55813F000000403EACA93F000000400440D43F000000C07315C83F000000009F54C03F00000000FA208A3F00000000FD61A5BF000000C0F48EB03F000000C0BD03D0BF00000040B23EB63F00000080C6A3C13F000000A0766DB53F00000000963D90BF00000080A860B23F000000E0E099C3BF00000000D0D87C3F000000C01303C03F0000000050F3C3BF000000400747A73F000000E0FB5DB33F0000004051E3C3BF000000C0B9A288BF000000202A79B4BF00000060D007D43F000000A0EF27BF3F000000A09450B9BF00000040E71799BF0000006037B2C23F000000406D0DB8BF000000E0E20AB7BF0000000038EDB2BF0000008099F7C1BF00000040006BC0BF00000080F896D5BF00000000FEB5A73F000000801610DD3F00000080C86FC43F0000000069FCC7BF00000040C1BDB33F00000080F09D8A3F000000C0EFB3943F000000E0BF4ABE3F0000006081ABB93F000000E07095C0BF00000080B3CAB1BF00000000F4B3B6BF00000000EA17863F00000000F079C23F00000000D3FB8BBF000000A07EB1B1BF0000004068A4CA3F000000C01F459BBF000000C02EA3AE3F00000020065AB33F00000000C03A28BF00000020EE44B3BF00000080BFC1A8BF00000040C471B5BF000000000A44803F00000020DDE4AB3F000000A0FF3DB2BF0000000060A39A3F000000803B4FB93F000000C027CFC3BF00000040AA0BB13F00000080AA94A0BF000000A0BE719B3F000000006ED28A3F0000008050BBA63F000000604E2AADBF000000000BABB1BF000000C02265C23F000000A07B80CCBF00000040D85CC93F000000C0B105C93F000000A02BE58E3F000000C03236CA3F00000080451EC03F00000060FFC4B13F00000000360E9D3F000000009FE1983F000000803113BFBF000000A07C88BBBF000000E02B52BC3F00000080AE54A2BF00000080CC8AC03F000000A0F0B4BB3F, NULL);
INSERT INTO `student_encodings` (`id`, `student_id`, `encoding`, `created_at`) VALUES (65, 7, 0x0000004051C1BDBF000000800483B03F000000808E96AE3F000000408937B1BF00000000F931C4BF00000000160D97BF00000040B861B5BF000000A06390C2BF00000040F300B93F00000020D526ADBF000000E035DDD03F0000004034498CBF000000A073EAC8BF000000A0BF84B5BF0000000088DA83BF0000002002C6C43F000000006428C9BF000000C08297CBBF000000408D22993F000000009DAAA2BF000000803BF37E3F000000C072539C3F000000A0E454973F000000002614B23F00000040AA15C5BF00000060634ED4BF000000A03FF6B7BF000000404198B5BF000000C05077ACBF00000000EF82A2BF0000000097B661BF000000409E7CB53F00000000F2ECC5BF00000080BE5296BF000000A07FDFBB3F000000404018B63F0000000017DC8DBF000000007AD777BF000000403DC6CC3F0000000010AD903F000000802C67CDBF00000080804BA33F00000080FE07B43F000000400C9ED43F000000C0D536C53F000000C05D6BA43F000000001BF79CBF00000000D4BAABBF00000060EE4EB73F000000C03D39C9BF00000080CF02C13F00000060434CC93F00000040225BC33F00000000CADB713F00000000CDCF903F000000A06249B2BF0000000090647DBF000000A02873C43F000000A05801CABF000000C0FFFC9C3F000000E07DB0B63F000000C08DEEBEBF000000800C08793F00000080A05FC3BF00000020D746CC3F000000E0561ABD3F00000040907BBDBF00000080EA88C0BF00000000A694C13F000000802A47B1BF000000C0D3D6C7BF000000809DDA8D3F00000080907FC6BF000000000947C9BF000000205564D3BF00000080A283A23F00000060881BD83F000000603665BC3F00000080D727CCBF00000080FCA6AA3F00000040BDA3893F000000604857A2BF000000009427873F000000C09F3DB73F00000080E189A8BF000000001DB2823F000000A07A07ACBF000000007B04983F000000001089CB3F000000809D45A0BF000000001F299EBF00000080BE1ECC3F0000004066E298BF0000000058FB953F000000205156B33F0000000095B6A03F00000000780E633F00000020D3939D3F00000000C049C7BF000000006C4D92BF00000000A79E9CBF00000080E501ABBF0000000011C09E3F000000E0503CBB3F000000C06727CDBF000000C08163C13F000000807A1A953F00000020D630A2BF00000040D730A9BF000000006A8DA23F00000080F0DBB5BF00000080B207AEBF000000C09A21C23F000000C0BDAED1BF000000C05D51CF3F000000C0103CC53F00000040C220B83F000000C04B77C33F00000080EA85AF3F00000000A99B963F000000006A678CBF000000C0064AADBF0000002012D0C2BF00000040EC15B7BF000000C06E45C03F0000000073D7A2BF00000080F7D1C03F00000040CC60B93F, NULL);
INSERT INTO `student_encodings` (`id`, `student_id`, `encoding`, `created_at`) VALUES (66, 7, 0x00000080E339C4BF00000080E05ABB3F00000080684BB23F000000C0B83DA3BF00000020D1B7C1BF000000C079BBAEBF000000C04C63BCBF000000A02022C4BF000000C00017AB3F000000C01BE6B3BF000000403651D03F000000603592B4BF000000604332CEBF000000C0B587B8BF000000C02B45B1BF000000C06CC9C63F00000000F36ACABF00000060F06DC0BF00000080CAED9BBF00000020D161B8BF000000C0DE04A13F0000000061C8A23F000000206403A43F00000000B16EA23F000000A0B2A5BBBF00000080C3B0D7BF00000080C512B1BF000000C0CF26B2BF000000C06CD7A13F000000005BD4A1BF00000040EE3393BF000000808C05AD3F000000606B17C1BF00000040A2E2A9BF00000080DA6EA43F00000060F400BA3F00000000979785BF00000000CC63A9BF000000C09C4BC83F00000080F08C98BF000000004F58C4BF00000000B08A5C3F000000803F47B53F000000C0E99FD43F000000A07055C93F00000040E029B93F00000000B31D8F3F00000080A008AEBF000000009139BD3F000000C036C0CBBF000000205BAAB33F000000400B94BC3F00000040507EB93F000000008326A0BF00000040E1EAB03F00000020C355C1BF000000007BB5A03F00000020D57CC73F00000020C521C7BF00000060D600A83F000000E01FF8B23F00000020F607C6BF000000C088BE8A3F00000040EBA2B1BF000000A07244D23F000000E0F071B33F000000A08CCAB7BF000000204BE6ACBF000000202677C23F00000000F43BB8BF000000C0FEF7B9BF0000000038409ABF000000C013CFC0BF000000E0DFB0C2BF00000060BCFDD8BF00000000B49F9B3F000000803473DB3F000000A09D68C13F000000C09809C4BF000000C051FAB53F00000020C056A43F000000C004DB9B3F000000600A3EC53F000000004762BC3F000000000348BEBF00000040A01CADBF00000040D72FC2BF00000000E24A84BF0000008067B8C63F00000080ECC790BF00000060DE7CB2BF000000A0C9FAC83F00000000275992BF00000040E470AA3F00000040A365B33F00000000FA1385BF00000060214FB8BF0000004069B590BF0000006069EBBCBF0000000046319BBF00000080D720AF3F000000006AA0B2BF000000001D64A53F00000000A6E6B93F000000808E8EC5BF0000008097B6A63F00000000D6A18EBF000000C06CA5993F000000009A808E3F00000000AE388CBF00000040FE2BB5BF000000803C73ABBF00000060DF1AC13F000000404CD1CFBF000000808500C63F00000040092BC93F000000A01703B13F000000C01BCFC93F000000E05DAFC23F00000000D8CF963F0000000080DF7ABF00000000E07A50BF000000000D4EC2BF000000C0DFB7AEBF000000C01BE7BC3F000000C0EE08A2BF000000C0FB97C53F000000209614B83F, NULL);
INSERT INTO `student_encodings` (`id`, `student_id`, `encoding`, `created_at`) VALUES (67, 7, 0x000000C0B361B2BF00000040FCA0BE3F000000C06C24A93F00000040B0928ABF000000E04814B7BF000000C029F7A6BF00000060361DB5BF00000080D9C9C2BF000000E05501B33F000000E03754B2BF00000080941FD03F00000040A0F5BCBF00000000B21FCCBF0000000024C9903F000000A098DEB0BF000000E03CDFC63F000000002912CABF000000C0D726BCBF00000000B2B8B6BF000000C089D1ACBF000000C0A5F4B23F00000080BD67953F00000080C01B9B3F000000C0A2F8A23F00000040C1D4B4BF000000802164D5BF00000060D6E4B3BF000000E039DEA3BF00000080592CB03F0000000068A7793F000000005A4AADBF0000000068B39B3F00000000B492C5BF00000020A26DAEBF000000C06D8EB03F000000002207B43F00000000DDC889BF000000608BFEB6BF00000080F23FCA3F000000805F418EBF00000080AF3AC4BF0000008004E7A63F000000A0D654BB3F000000E0752AD03F00000080A5ABC53F000000806F51C03F0000000002EA513F00000040A486B7BF00000060F9E3B83F000000E01D65CCBF00000000E416B73F000000007FE8C03F000000A01439B73F000000A036C7B13F0000008077B99B3F00000080CFCEC5BF000000003719AB3F000000609C47C03F000000C075A0C1BF00000000CC30943F000000200E22B93F000000401AF1BABF000000A06CE1A53F000000805D8DB4BF000000000A5DD33F00000080D534B33F000000407FB5BCBF00000040D0C1A6BF000000C02C26C23F000000E02F5EB2BF000000406991B6BF0000002049D3B1BF000000802A3FC2BF0000002062ABC0BF000000804B7DD6BF000000C0AF08B13F000000004BA5DD3F000000E06138B73F000000C0CCF2C5BF000000201C2EB23F000000C037A09F3F0000000018457BBF000000806DF3BF3F00000020C577C03F000000E008E8B9BF000000C06E0AA8BF00000000C1F2BBBF00000000A0787A3F00000060793ECC3F000000407AE3A8BF00000040BAF4A6BF000000C0584FCA3F000000404CBE9ABF000000C05084AE3F000000E06A3BB23F000000004FD9A63F0000006002CEB8BF00000040CB1192BF00000020792BC1BF000000006D8B993F0000008002C0A23F00000060049DACBF000000004FC290BF00000040CC35C13F0000004071A0C4BF00000040BDF4A93F000000001C5B97BF00000000BCF091BF00000000BBC4903F000000001F91953F00000020C031B8BF000000E06726B7BF000000806B30BD3F000000007240CBBF00000040ED64C63F00000080D3B1C63F00000080107DB33F000000A0148DC43F00000080682CBE3F00000000BC76B73F00000000B1D2A23F00000000B09BAC3F0000004022D6C8BF000000C07E87B6BF00000080750CBC3F00000000900252BF000000C0CDD3B43F00000000A3D2B93F, NULL);
INSERT INTO `student_encodings` (`id`, `student_id`, `encoding`, `created_at`) VALUES (68, 7, 0x00000040A236BEBF0000000097A9A13F00000080D246B93F00000020A28D9CBF000000806347BCBF000000C0C78EADBF000000A0C15AB5BF00000080D074C2BF000000801A1AA73F000000C03874C1BF00000020ADB0CD3F00000080F1BAB5BF000000C0659ACABF000000A01FBDA1BF000000803B3A8BBF000000205C76C53F000000E07532C0BF000000C06809B8BF000000804F4BB5BF000000C01CA8B2BF000000409938A93F0000000016FA9C3F000000A07F7BA63F00000080281E903F000000C0DFADB2BF00000000D299D8BF000000C03D94B9BF0000000040C2ACBF00000020244D973F00000000D4B579BF00000000D0CFA0BF000000C0C924AE3F0000004010D0BCBF00000080B9149EBF000000800C96983F000000802CCBA63F00000080CA09A03F00000080381FB1BF0000004012F1C53F0000006001139DBF00000080ABCAC7BF00000000963B86BF000000007DA3B53F000000C0BC7BD03F00000040F77BC53F00000000BE63B73F000000802DE4A33F00000040FAB4B3BF000000C0F46DB73F000000A0C679CCBF00000000FD39AF3F000000204031AE3F00000020CDEEB53F000000005C3E79BF00000060EB35B53F00000080C229BDBF00000000FDBFA23F00000020482FC13F00000060607DC1BF000000C091B5A83F000000E0DEC1AD3F000000003E20BDBF000000C0B6647EBF00000060EEB7B7BF000000803FE0D43F0000000023C0B73F00000080D5B2C0BF000000607813A1BF00000060F8A4BD3F0000004053F9B3BF00000080BC26B3BF00000020F8C6A8BF000000C0DF8AC5BF000000C0F742C0BF000000804D54D6BF00000080915FA43F000000C0B808DC3F00000080CA23B63F000000402E82C8BF000000C0F28FAE3F00000080AF9D7DBF00000000F18E9C3F00000040D4C6C33F000000007195C23F000000008C93B4BF00000040B63BAEBF000000E0043EB0BF00000000EC5F803F000000601160C83F00000080F2FCAFBF0000002089339FBF000000405B39CB3F00000080B0729DBF000000009A88A93F00000060ECB19A3F000000806FE49F3F000000E0D84EB6BF000000C0125D92BF000000E0BFE6B5BF000000004F55803F00000080829EB63F000000201F96A9BF00000040C2D8A73F00000060EB40C03F00000040D886C9BF00000080CCDDAC3F000000C0EEF5A5BF0000000065BD8D3F000000206DF6BB3F000000004636923F00000080F93CB1BF0000004060F2BABF000000C067E2B73F000000A05082CCBF000000E0D750BC3F000000C060DAC93F00000000DA019D3F000000C02FAEC43F000000804F73B53F00000080A140B63F00000000AEFE893F00000080BB01AE3F000000006438C6BF000000C0D54699BF0000008042CAC03F00000080284590BF00000080D5A0A83F000000405EB3B03F, NULL);
INSERT INTO `student_encodings` (`id`, `student_id`, `encoding`, `created_at`) VALUES (69, 7, 0x000000C0EFBEC0BF000000A04DD1AD3F00000080BD1A9A3F000000A0B74A8ABF00000080FE53C1BF00000060B36BB2BF000000404636B2BF000000005FAFC7BF0000008062FDAE3F00000000E799BBBF000000001078D03F000000800A67BDBF00000080B0F7CCBF000000801053BCBF000000202ADDA8BF000000609DFCC93F0000004035DFC2BF000000A07BC5C2BF00000040FA9EA9BF000000C03485AFBF000000408F539C3F0000006031A582BF0000004036D09F3F00000040DF6DAB3F00000000692BA8BF0000004020B7D8BF000000C038F3ACBF00000080E992BDBF000000606828903F000000008A6495BF00000060396EABBF000000C0879DB13F000000802576C6BF000000E0C8D1BBBF000000C06803A63F000000C0CB42B43F0000000052C99D3F000000802156963F000000C01A3ACB3F00000000F3167EBF00000040FE76C9BF000000002C638FBF000000605C69B43F000000002B9DD33F0000008068C6C13F000000805501BA3F000000C0284D713F000000808B5CAFBF000000C0F7CFB53F000000C020A9CCBF00000060A74AB73F000000802375BC3F00000060872DC23F00000000480D98BF000000C0692CB03F000000603A75B5BF000000007200973F000000E0E9D3BF3F000000C05342C7BF000000006A66A63F0000004077CBBC3F00000020F427B5BF000000E0A1A29CBF000000A03742B9BF000000C021A5D63F0000008017DBB13F00000040768ABFBF00000000CA898CBF000000C0C1A4BE3F0000002040E8B1BF000000E0B38AB8BF00000060BDDCADBF000000C07427C1BF000000809786C2BF0000004037D6D6BF000000807929A93F000000C052E0DC3F000000C04CB8B83F00000040CCF0CABF000000806F06B33F0000000080849EBF0000008041CE97BF000000C0F7E0C33F000000200BEBBB3F000000C0AFC592BF00000000B5FF89BF00000060326CADBF000000008A6281BF000000A0085CC13F00000060B50FB1BF00000040760C74BF0000004079D5CA3F000000805F83ACBF000000407C3FA93F000000E031FAA03F000000407FDEA13F00000000B7A4B3BF0000000030DD65BF000000000C78BABF0000008042CF91BF00000080B8D2B13F00000060F880A3BF00000080C06CAE3F0000004039ECB33F000000E0177EC9BF0000008095F5A23F000000006D319EBF000000002A979A3F00000080F0A3B23F00000000D686973F000000002C63B0BF000000E0BB8BBFBF00000080DEE3B83F000000400C4CCFBF000000A01D84C73F000000C0C17DC63F00000060D6AC93BF000000009284C23F000000200186B63F00000080AF0EA93F00000080541C9A3F00000000A4C6813F00000040081DC7BF000000604EAAB3BF00000060AB5EC23F00000000DA3BA0BF000000405D1EB43F00000060800DB13F, NULL);
INSERT INTO `student_encodings` (`id`, `student_id`, `encoding`, `created_at`) VALUES (70, 7, 0x00000040EE0DB9BF000000C07B4FAF3F00000040531ABE3F000000603EDDA3BF000000406ED3C2BF0000000080879CBF000000003AEBBBBF0000006031BEC1BF0000000062328D3F000000407CE3C0BF000000408707CC3F000000E07DC8B2BF00000000DFE1C9BF00000080886DADBF00000000827B90BF0000006019E8C63F00000080E5C2C3BF00000060810AB9BF000000C01C16B7BF000000809E5DAFBF0000000056B39D3F00000060CB4EA53F000000C085BFA83F00000000C2DB78BF0000000040D0B3BF00000080E0C2D8BF00000000A06FB8BF000000A06458B3BF000000601C967E3F00000000D4EF95BF00000040289BA7BF000000005949A63F000000C05217BBBF0000008034F099BF00000040EDA0A03F00000080784DA33F000000C08D8CA03F000000A0B2A5B0BF000000008519C43F0000004055EF9ABF00000040BE3DC8BF00000000EC908F3F000000C034F2B53F00000040FC1DD03F0000000041C4C73F00000000E129B73F000000A01838A83F00000040201AB1BF000000E07F07BD3F00000000B8D9CABF000000C0FB49B33F000000E00C37B33F000000C034FDB83F000000806E1D94BF0000004050E8B73F000000C0A261BDBF000000003569AA3F000000A0AB77C33F00000080D4B1C1BF00000000A6D8A73F00000020C3BEB23F000000A02528BABF00000000B6CB893F00000000002CB0BF000000205379D33F00000040F6CDB43F000000A09EEFBDBF000000800849A7BF000000203245BF3F000000802335AFBF0000004029B4B1BF000000C05630B0BF000000E03C80C8BF000000C074FDBFBF000000C07B4FD6BF000000808071A33F00000080EC44DD3F00000060EB5BBB3F00000040FA17CABF000000605A7AA43F00000020402586BF000000C0690F9C3F000000805C37C33F000000E07CA3C23F00000060112EB8BF000000007A88B1BF00000020054CB3BF00000000BB44933F00000000FF82C63F00000060A96DB0BF00000060A4A393BF00000000CFADCB3F000000802AC987BF000000C02F75A03F00000000F3669F3F000000001A2D7A3F00000060CC49B7BF000000007F8088BF000000408005B5BF00000000CE2F843F00000040E55DB13F00000060917AB2BF000000C0A4BDA43F0000008092DEC23F0000004036F9C8BF000000000C9EA73F000000C073F1AABF00000080500E8A3F0000008006BFB33F000000003567913F000000E0506CAEBF000000002445BBBF000000C054C0BA3F000000C0C937CABF000000207308B93F00000040CFC0CB3F000000C007B8963F00000040AD85C33F000000000758B83F000000C0A652B73F0000000080DB873F00000000FF78A73F000000004220C6BF00000040CDCAA1BF00000040051AC03F00000080470F95BF00000080F4F7AB3F000000809BCCB23F, NULL);
INSERT INTO `student_encodings` (`id`, `student_id`, `encoding`, `created_at`) VALUES (71, 8, 0x00000000E29CC0BF000000800F19AD3F000000806A05B33F00000040601BA4BF000000401EB0BABF000000A0475BAFBF0000006040D0A0BF00000000B1CBB3BF000000C040CEB53F000000C054DDB3BF00000080B9B7D43F000000C0DD08BBBF000000A03209CCBF00000080DC9AB0BF00000000BAE293BF000000402D22C93F000000602AB5CCBF00000040C6E3B5BF00000000AA5D7EBF00000000D0956E3F000000403156BF3F0000004034AEA0BF0000000042CE80BF00000080AFBCA63F00000080D6DAAEBF000000208561D8BF000000C07839B1BF00000080E5C0B5BF000000E00B6EA53F000000C060E0B3BF000000E02B7FB5BF00000000903D53BF000000C038DBCABF000000E0902DB1BF0000008050CD9ABF000000803DD88B3F000000408D14A1BF000000C0755FB4BF0000000004DEC73F000000C02BBCA63F000000E041F3CBBF000000001F86993F00000000335882BF000000A03CABD03F00000040E727C03F000000203CB1AE3F000000C05E4F9A3F000000C0EEC9B8BF000000C04020AC3F0000006029D1C4BF000000001F53AC3F00000000F3DAC13F00000080936CBB3F00000000182E863F000000C09C63A3BF00000040FDE7B8BF0000000028CB87BF000000E07AAEBC3F000000C07F0FC8BF000000C0C2B3943F0000000008EBB73F000000603C3AADBF00000000866C61BF00000060D0D6BFBF000000C0B8FED03F00000060D468B03F000000C07CFDBDBF000000804609BCBF00000040C480B33F000000C0A822AABF000000206BC8B3BF00000040832B993F000000405D9DC6BF00000040AA4BCABF00000020B4D6D2BF000000C0BB66B53F000000C00C1CD93F00000060A412A73F000000C0C73CC7BF000000005F97983F00000040E99FB0BF000000A07A82B0BF00000060EC65C23F0000000039C4C53F00000040904C9A3F00000000A599A53F000000C06D3BB0BF00000080101CA43F0000002052E7C33F000000C08694B9BF00000020A76597BF00000080D60DCB3F00000020B3A1A3BF00000000833F9C3F000000E0017765BF00000000C3018B3F0000000089FAA6BF000000C0D0D4A93F000000009081B1BF00000040C290A2BF000000809158A33F000000403D90A5BF00000000F0F992BF000000A02D20B63F000000602E96C6BF0000008029A5AB3F00000000F0B28A3F000000005057343F00000080DCBA9E3F000000801533A3BF00000040F1C6B3BF00000000AD06BDBF000000606654B23F000000E0181CCFBF000000C089B3C63F000000002FB8CB3F00000060E6DFB43F00000020C13FBC3F00000080CBE7AD3F000000C08B0DA03F000000001C166A3F00000000906F543F00000040F481CBBF00000000D8809B3F000000E05697C23F000000806C819B3F000000806960B63F000000006F2088BF, NULL);
INSERT INTO `student_encodings` (`id`, `student_id`, `encoding`, `created_at`) VALUES (72, 8, 0x000000A07B6AC1BF000000E060DFB33F000000C0E1EBB13F000000403A71B6BF00000040B6EAB8BF000000806B2CB1BF00000080DFF0A3BF000000A0FFDEC0BF00000080003AB53F000000403D18BFBF00000020E865D03F00000040E083B4BF00000040700BCFBF000000600536BBBF000000000FA9A1BF0000000011AFC43F000000406B45C1BF0000008065F9B7BF00000080EDE2B2BF00000000000960BF00000040A9EEBC3F000000404B6183BF000000009542AB3F000000C0799BA53F000000E006D5B4BF000000C04409D8BF000000605553BBBF000000808EE7B2BF000000C08194B2BF00000000B4AD9ABF000000202005ACBF000000C00863A63F00000040AFC5CBBF000000E0455DBABF000000006ECA72BF000000805FF6B63F00000040BA6FA1BF0000000075809CBF000000C07B72C53F00000000C60886BF000000C098F0C8BF00000080BDA5A23F00000080FF73A33F00000040A6BACF3F000000009FE5C13F000000602E78B83F000000C06E7DAA3F00000080E2C6BDBF000000408921BE3F000000A07165C7BF00000000E758BC3F00000040D90BB73F000000E088CABD3F00000000332489BF000000E035D5B33F000000C075C1C0BF00000000FB42A63F0000000008E0BD3F00000080AD01C1BF00000040041B85BF000000808953B43F00000040821BB2BF000000E09453AABF00000040F507C0BF000000E03B48D13F000000008C48B73F0000008019FABABF000000805191BCBF000000401BCAC13F00000040017AA5BF000000808DFEA6BF000000C0CF16AD3F000000209DC8C6BF0000006018EDC2BF00000080CD6BD2BF0000008021BAAD3F00000000BF96DA3F000000A0A778B33F0000002029DAC8BF00000040371D963F000000C0C676B6BF000000009037763F000000407981BE3F000000E02690BC3F000000000B3B8FBF0000000044DCA53F000000C024BEB9BF00000080CA63AB3F000000A03B54C33F00000020FAE9B6BF00000040D52EA5BF00000060A098CC3F000000000FFD753F00000000933FAF3F00000060B15E9B3F00000000B3BC9CBF000000807B7DB9BF0000004013E1A93F000000E07BE1BEBF00000000F0AC443F000000800872B93F000000C0B8509DBF00000080E77A9EBF00000040AB56B83F000000804F65C5BF000000E0512EB33F000000402ED8A5BF000000009C839B3F00000000E892933F000000C0BF0BB0BF00000080D27FB9BF0000004035DFB0BF00000060BCBFB13F00000060DA56CFBF000000404B2AC23F000000E02239C23F000000205B927ABF00000080C3C6BE3F0000004096E2B83F00000080B6E3AD3F000000006DA7863F00000000A84F68BF000000606F26D1BF000000005A0C93BF000000C092CBC93F00000000EF22813F000000C0DD8DBB3F000000009B4F873F, NULL);
INSERT INTO `student_encodings` (`id`, `student_id`, `encoding`, `created_at`) VALUES (73, 8, 0x000000C0463DC1BF000000006DFFB53F0000008049BDBB3F00000060ABAEA5BF000000804A35BDBF00000040FD6CB0BF000000E0EFDDA8BF00000000AAC9BBBF000000609219B63F00000000E014BCBF000000204E56D23F000000C00385B1BF000000409EB4CDBF00000060096FBABF000000203636A0BF00000060BF4BC73F00000080E659C4BF000000A0F73BC1BF000000402612B7BF00000000280E703F00000040CE72BA3F00000000D1545F3F000000C01520B03F00000000D420863F000000004AFBA1BF000000403DE6D9BF00000020D41AB7BF0000004053A9B1BF00000000082F833F0000008077FCA9BF000000402759B0BF00000080DF9D933F000000E0BB21CFBF000000C022D2BCBF00000000B3A286BF000000C033AFAF3F00000000244589BF00000020EF97B0BF00000080E8BAC63F000000005C298EBF00000000FF54CABF000000003C89983F000000006A5B9B3F000000A07217CE3F00000040211CB63F00000080CBE6BC3F0000008038B8B33F00000080D361B6BF000000201774B93F00000020FF17C3BF000000E03E63B83F0000008028AAB83F00000000E33AC53F00000000416892BF0000004043F2AB3F00000080A79FC3BF00000000E217943F00000000A7FBBD3F00000080CD6CC0BF00000000BC36793F000000A01160B63F000000E0E220B0BF00000020F5D68ABF000000E06D21C1BF000000603CB8D23F000000807C0AB13F000000405467B1BF0000006075CEC0BF000000C0EF19C33F0000000066DC87BF000000C0EF5CAEBF0000008083929C3F000000206D39C7BF000000400AD1BFBF000000E0C383D2BF000000C0AE26B03F00000080A4FBD83F000000E0C941A23F000000004C37C7BF00000060FF389F3F000000A09A34AEBF00000000E82555BF000000C027F3A93F000000409796BF3F000000201813AABF00000020EB8BB73F00000000AA24C0BF000000807708A23F000000C0EC7AC53F000000C0800CB8BF000000A07508A1BF00000020E7D8C63F000000006A6679BF0000004053ADA63F00000020913A983F0000006002B1AFBF000000004FAEB6BF000000409BACAA3F000000E083CDBEBF00000000C26B843F000000A09E09AC3F000000C020BD88BF00000000DC96A5BF000000E0E932B33F0000000048C1BFBF000000009CF7923F0000000010F2AEBF0000000098CC52BF000000409D91A0BF000000800945A0BF0000008022A7B9BF0000008044A8B9BF00000080C9A6A93F00000040B767CBBF000000006D8AC53F0000008060A9C53F00000040AACDA03F000000E0CBE4C03F000000C09386B93F000000408BFAB23F000000007AF8963F00000080C7D8A03F000000405293CEBF000000C0BA37ABBF000000E065D7CA3F00000000AC557C3F00000080E3CABA3F000000C00482A33F, NULL);
INSERT INTO `student_encodings` (`id`, `student_id`, `encoding`, `created_at`) VALUES (74, 8, 0x000000A0B5CDC1BF000000209EACC13F000000401563B23F000000007F7DA6BF0000000064E0BBBF000000E08D1BB1BF000000C07448B2BF000000C0582DC5BF000000A0EFCBB73F000000207C44BFBF000000C0BD5BD23F000000600AF9B0BF00000040D5E5CBBF000000C0ADB6C6BF00000080DC0CA7BF0000008098BBCB3F00000080B328C6BF000000209A63C6BF000000800285B3BF00000000B439823F000000400AF0B23F00000080CC8F70BF000000606524B73F000000007C1E773F000000A01627B0BF000000405E4EDABF00000020DCFEB0BF00000000330EB5BF00000060EB548E3F000000807C87A7BF000000C0AA8DB3BF000000E02A4EA23F00000080BBFBCBBF000000400479B9BF0000000008E1933F00000040111DBB3F00000000F8E457BF00000000BEFC9CBF000000C0D1CFC83F000000800C3E93BF000000E08A84C9BF00000000AD4A913F00000080B7D0A13F0000008006BCD13F000000001EA6C23F000000406B37B13F000000004246B33F000000409B47C1BF000000605145BC3F00000040CB19C1BF000000C08E7EB63F00000000AFC7B63F000000006479BE3F0000008042BA91BF00000020A528B43F000000408D6CBEBF000000007E48A03F000000E0CF16B23F0000004097CAB9BF000000A0509FA1BF00000080C894C13F0000000070CAB2BF000000202F61B0BF000000207480C1BF000000E03116D03F00000060A2CA903F00000040E4DBAABF00000080DCF3C2BF00000040C815C33F00000080717D93BF000000204303B5BF00000000980A943F00000040A778C5BF0000002085B6B8BF000000A08F03D6BF000000001812743F000000209556D63F000000C0C411B43F000000A095E6C7BF000000404DD0A23F00000000FCECA2BF00000000540C8A3F000000404263B53F000000000715B33F000000203501A4BF000000A0FB40B23F000000600D50C5BF000000008FF0AF3F00000020AA46C53F000000809E38BABF000000601EFD98BF000000E0311DC33F0000000054B665BF0000008054C2AA3F000000E07199973F00000000BC139CBF0000000079E6B9BF000000E0E5B9B13F00000000129BC6BF0000000006CA74BF00000020845CB83F000000A0B983903F00000000B1458EBF00000020B66FB63F000000A01F0DC1BF00000080D943A23F00000000B287A1BF00000080FE538C3F0000000064DE99BF000000006AC4ABBF000000E042AEBFBF000000805611AEBF000000807E67B13F00000040B9AEC5BF00000040710BC73F000000A04718C63F000000604539B03F000000C01945B93F000000C0B774C23F0000000035719B3F0000000016C595BF00000000F0A8653F000000807FF0CEBF000000C0DC76B1BF000000A01650C43F00000000DEA2883F0000004008EFBE3F000000C06D16AA3F, NULL);
INSERT INTO `student_encodings` (`id`, `student_id`, `encoding`, `created_at`) VALUES (75, 8, 0x000000007E32BEBF000000003C46953F00000040C1D8A83F000000009D03B5BF000000407432B6BF000000C06E98BABF000000A05D32A0BF000000C05325BFBF000000C0A9DEB23F00000040A623BEBF000000806556D03F000000C0F2E2B6BF00000060D368CBBF000000C02450B7BF0000000051738EBF0000002080DAC63F0000004064E7C4BF00000000CFD2B7BF000000A09E49BDBF00000000F9B391BF00000040F1B2B53F00000060AB61A1BF00000000BAD39B3F000000404F2EA63F000000001719ADBF000000A0D753D7BF000000E0E343B7BF00000080528AB3BF00000060A3898EBF00000000EAC5A1BF000000605488B2BF000000002C43B23F00000060425DC9BF00000080BAC9C0BF00000000F4E37DBF000000004BADA53F00000000E03D41BF000000C0B34DA4BF00000080CBC0C53F00000080D7C5783F000000804D13CBBF0000000096AA883F0000000054ACB03F000000A041E5CF3F000000805CADC13F00000020D05FB63F000000C0BCE7B13F00000080EDBABABF00000040C7D8B93F000000A05CD5C9BF000000A0E064B23F000000C0CCC5AF3F000000E0AC18C03F00000000B41B61BF000000802BF4AC3F0000008096D6BFBF000000008745A43F000000A03D93B43F00000000ABE2C2BF000000E06683933F00000080C918BC3F0000008079F6ADBF000000008446AFBF00000060492CBBBF0000004080F9D23F000000C06485B73F00000080AD28BBBF000000405BA8B6BF00000020DDACC23F000000E0A1559EBF0000008083D8ABBF00000080462E893F000000005C89C4BF000000602BDCC2BF000000A03B4DD2BF000000808551AB3F00000080100DDB3F000000407E1AB03F00000040CCEEC8BF000000A05C07A63F000000805BFCB8BF0000000040FC92BF00000020CA50C23F00000040349ABD3F00000040009894BF00000040C573AE3F000000C03FBDB2BF000000807C19B03F00000000F07DC33F000000A0F68DB7BF000000409E5291BF000000005910C93F000000007E528B3F000000C07050A33F00000000BECBA13F0000000033448D3F00000020E74BB8BF0000008083B0AB3F000000A04FB7C1BF00000000D0E3723F00000060467EC03F000000C0DFD889BF00000000B2C68D3F00000040D2E2B43F000000400A48C0BF00000060B1A4B13F000000009F8C98BF0000008076658A3F000000801087A53F0000000059D69CBF000000C06BCCB3BF000000C04626BCBF00000040BC8BA53F00000020A02DCABF000000C0F170BE3F000000E0E184C43F00000000BB72893F000000401725BB3F0000008094F8B43F00000040A379B13F000000808D059B3F00000000B58F973F00000080DC03CEBF000000E0A9CC86BF00000040F496C83F0000000008809D3F0000004002B6B53F00000000CC7F943F, NULL);
INSERT INTO `student_encodings` (`id`, `student_id`, `encoding`, `created_at`) VALUES (76, 8, 0x000000E0D9D3BCBF000000E089CDAE3F00000080D1BCAE3F000000608A3DB2BF0000008014D0B0BF0000008031A1AFBF000000C082DE93BF00000080D31EBBBF000000E0146EB73F000000406B25BFBF00000080E483D13F000000C0B7AAB4BF0000002001B2CBBF000000E0A9CDB7BF000000809D9A9ABF00000080B08AC53F00000020EA7AC4BF000000C039DABBBF000000C07561B6BF00000000E01E45BF00000000A564C03F00000000747E3C3F000000C0A3C4963F00000080003E9B3F000000E02DD9B0BF0000000089A6D6BF00000080AD3AB3BF00000040A256B3BF00000000D17680BF00000080BF41A8BF00000000CE8DAEBF000000603122A83F000000406396CBBF00000080D1E5BBBF00000000888C533F00000060E2F0B13F00000000A878A2BF00000000BAF8A5BF000000405290C63F0000000008254CBF000000E0C7ABC9BF000000004ABB963F000000805FCDAA3F000000C0F950D03F000000C05A55C13F00000020F670BC3F000000601BADA03F00000040628BBEBF00000000BE18BB3F00000000403EC6BF0000004048F4BC3F000000A01CABB63F000000800AE0C13F000000803109933F000000405B46B03F000000203F3EC1BF000000002FABA33F00000060934AB63F000000801E81C1BF00000000F285623F000000006C28B93F000000207AC7ACBF00000040E97680BF000000A0E057BCBF000000A06AF9D23F00000060F937AE3F00000020C4A1B9BF000000C01FA4BABF00000040DD98C13F000000E041339EBF000000E07A4BB3BF00000040D62AA03F000000E0BF43C6BF00000060579FC0BF000000C06E7CD2BF00000000B5F4B03F000000C08A5FDA3F00000000571AAC3F000000E03FEEC6BF00000020573CA53F00000020935FB1BF00000000D87996BF000000803884C13F00000040504DC13F00000040DB9F95BF000000C089CEA03F000000E03146B6BF000000804C88A23F000000002411C53F00000080C3A2B5BF00000080A037ADBF000000806EEAC63F000000C02B7390BF00000000D9AF9E3F000000A0AC619B3F00000040AE0CA1BF00000080E897BABF000000C075D7AF3F000000C0AD45C0BF0000000089B09CBF00000060965AB43F000000C007AD66BF000000003C2196BF0000004062B3C03F000000A0108DBFBF000000000AFFAB3F00000000C636A3BF0000004025B0973F000000400B33A43F00000000324797BF000000209E6EBBBF000000C06583BDBF0000006059E3A03F000000C000AACABF00000000B707C33F000000409671C03F00000060DD48A03F000000205FC0B83F000000C04234BB3F00000040AA89B53F00000000D543A03F00000000C265A63F000000000257D1BF000000803EB986BF000000A08940CA3F000000C05244A53F000000C055B6BD3F00000000BFE68E3F, NULL);
INSERT INTO `student_encodings` (`id`, `student_id`, `encoding`, `created_at`) VALUES (77, 8, 0x00000060750CB8BF00000080D539A93F00000020A407AC3F000000007422B0BF0000006089A6B9BF00000000CA73ADBF00000040BBF79DBF00000000217FB8BF000000E0F434B63F000000000C2AC0BF0000008028A3D13F0000000042FAB0BF000000C047C4C9BF000000E0AED0B8BF000000005BD481BF00000040671EC43F0000000062FEC1BF00000080E457BBBF0000000061E9B0BF000000001CD5893F000000E0F2BFB73F000000E0278597BF000000603099A13F000000001C96603F000000C0C708AEBF000000C0C7FDD8BF000000C03F1BB6BF0000006047B9AABF000000E0C325863F00000000FCEF9CBF000000203369B4BF000000606BE1AE3F000000C009FBCABF000000A0D46BBABF0000000068DE5B3F000000C049ADAB3F00000080CEF89BBF000000405DC6A3BF00000000E133C63F000000C0A318903F00000080633BC8BF000000003C0D77BF0000008094059D3F00000040E990D03F000000603A16BD3F000000603607B23F00000080C38DB43F000000A08124C0BF000000408BC0B73F0000004086B3C3BF0000008013E3B23F000000E060ADB53F000000E0012CC13F000000000B41903F0000008002949E3F000000A0DF69B9BF0000000066B9A83F00000000DBDBB43F0000004092FAC0BF0000000014DF7D3F00000080ECB7B73F00000000A45C9FBF000000A0B88BA1BF0000004070EBBCBF000000407776D53F0000000083A6A73F000000C0F5DEB9BF000000406884BFBF000000200E47C13F000000C0999799BF00000040E7E0B3BF0000008052FF963F00000000E66AC6BF00000000F5ADC1BF000000605B65D3BF00000000B559AF3F00000000E413DA3F000000809E44AE3F000000C0F064C9BF00000060F8A6A23F000000C0A418BCBF00000000DFC69EBF0000004028A3BF3F000000403AA5BF3F000000003242A5BF00000040F8C1B33F000000E0BB23B9BF00000080B196A23F0000004042F9C93F00000060A0D5B9BF000000C0BACBABBF000000A07F3EC63F000000405F86953F000000807A89AC3F000000C03BF5A33F00000000D8FA8BBF000000005EA4B5BF000000208293A33F00000060444BC3BF000000001A5BA0BF000000A05D6EB53F00000040B793A4BF000000008CED94BF000000C0CA60C13F000000204C04C4BF000000403169B53F00000000EFFF98BF0000000064467B3F000000800286A63F000000009C1293BF0000002041D4BBBF000000C02A8DC1BF000000804002A43F000000E0CEACCBBF000000802595BE3F000000C0C9F5C33F000000004C02B53F000000C0F9C2BB3F000000A00C56BA3F00000020BE69B13F00000000D420693F00000000AF6AA23F000000202645CCBF000000809CFC84BF000000C0B446C63F00000000FC67A43F000000C0E94CB63F0000000063F2933F, NULL);
INSERT INTO `student_encodings` (`id`, `student_id`, `encoding`, `created_at`) VALUES (78, 8, 0x0000004094D2C2BF000000201478C13F00000060CA2AB43F000000E0895896BF00000060E41FB5BF00000000C7829FBF000000003868873F00000000BBB9B9BF000000807274C13F000000C039FBB7BF000000C0757AD23F00000020F5C1B5BF00000020BE34D0BF00000040B037B7BF00000000FED692BF000000E0AB3FC43F000000603502C1BF00000080A171C1BF000000C06C09B1BF00000000FF22A33F000000C0C23BBF3F000000A0486C853F000000000EDE713F000000000DA5893F000000C03D19B4BF000000009AF5D7BF000000203986B9BF000000C0C89EB1BF0000000011FB6C3F000000007A2CB2BF00000000D387B0BF000000007CA3603F000000C0777FCBBF0000000027F0C1BF0000000023B09E3F000000E0D702B53F00000080FFC299BF000000A0156AB0BF000000C058D3C73F000000E0B33F90BF000000A08063C9BF0000000019D59E3F000000C0442DA53F00000040F5B8D13F000000803804B23F000000401696B53F000000402F33A63F000000807247C1BF000000401E45B73F00000080EC24C2BF000000C02814B93F000000A0B921BA3F00000000865FC53F00000000B2B6A33F000000404C83A73F00000080F181C2BF00000000AA6C9B3F000000C0C03BBA3F000000406B22C6BF000000C0C17480BF000000809330BB3F000000C0F11CA8BF00000000B0A5303F0000008069B5BABF000000607942D23F000000807893B03F00000040189CB5BF000000A074CBC1BF0000004097C8C03F0000004099C8A8BF000000A00178ACBF000000605E6CA73F000000C0A2D6C3BF0000006092F7C1BF0000008049A2D1BF00000080ADBAB53F000000001E52DC3F00000040B0ECB03F000000407AC2C9BF000000E0D3C69F3F000000804260B4BF000000806E779ABF000000602732B63F00000060BC26C13F000000407AF0A1BF000000207A59B33F000000E0BA78B9BF00000000C73BA13F000000E0336FC93F00000040D504B1BF000000805F77ABBF000000A0CE77C43F000000002447903F000000000818A13F00000040E499AB3F000000A07D08B0BF00000080399DB5BF00000040DB44963F000000C0B006BEBF00000080337A95BF00000080604E953F000000E008D89BBF000000000A00A3BF000000A0497FBE3F000000200BD9C3BF000000E0C96DB23F000000004E8F78BF00000040CB4B95BF00000000F5D18ABF00000000BED08BBF00000060E186B6BF00000000B1DDB5BF000000C01378AE3F000000E0B192D0BF000000E00038C63F0000004076B7BD3F00000000D28A973F000000C004A4C03F00000040CC7BB33F000000009647B53F00000000BB3A9D3F000000003B7BA63F00000000C058CBBF00000040D1DFAABF00000060522DC83F0000000083A6933F00000080FE8BC23F00000000009B1D3F, NULL);
INSERT INTO `student_encodings` (`id`, `student_id`, `encoding`, `created_at`) VALUES (79, 8, 0x0000000022E0C0BF0000000094FCA33F00000040EFDEB53F0000004098C7B0BF000000E0331DB8BF000000002230B1BF00000000CB6D88BF000000000AF2BDBF00000040422DAE3F00000040ED17C0BF000000A01800D23F000000C07638B7BF000000A0A266CCBF000000600A74B8BF000000001B758FBF000000C04117C53F000000806194C1BF0000004081C4B4BF0000004088CCB6BF0000000011F492BF000000009CF5B53F000000004262833F00000020372AA63F00000000F868A43F000000C091FAADBF00000060051AD6BF000000A099F3B2BF000000604205B1BF0000008057D589BF00000080B56CA1BF000000C03FEDB0BF000000003385AD3F0000000082C0C9BF00000040F711BABF000000000D1F803F000000601709B03F00000000F48BA1BF000000C0BFCBA2BF00000080F746C63F00000000FC3079BF0000004070ABC6BF00000000200C7FBF00000000A0CCA43F0000000096BFD03F000000C07346B93F000000801AAAB83F0000004063C7A83F000000004961BDBF00000000E04FBC3F000000805E37C9BF000000005FF7B53F00000040ED0BB33F0000008081CABD3F000000007EFB7EBF00000000A71AA43F000000C0E01DC4BF00000000FC6CA23F000000004AB1B83F000000A04B2DBFBF00000040C1B0953F0000006003A8B33F00000000732DAEBF00000000DEDBA8BF000000C0582BBFBF00000080EAA7D43F00000060671EB53F000000A0D958BDBF00000060B07FBFBF00000080E4FAC03F000000409B4098BF00000040EC45B1BF00000020CC0FA43F000000E0EC81C7BF00000040050DC0BF000000809093D2BF00000000EFB4AB3F0000004076C3D93F00000000BC63A63F000000C04E83C9BF00000000B4A7933F00000060DE0FBABF00000000539F833F000000C04492BE3F00000040D055C23F00000080E5019FBF000000C07252AB3F000000006291B6BF0000000064E49F3F0000000020EBC23F000000008622BBBF000000005524ABBF00000060ECC4C93F0000008029C68A3F000000C05F33AE3F00000080D8B2973F000000C0CFB6A7BF000000C017F2BABF000000A0D069A63F000000E0E66CC0BF00000000F7D192BF000000C05B70B93F000000804D9078BF00000000D04B6B3F000000A06EE6C03F000000607FC8C3BF0000000004B3B73F000000C05695A5BF0000004079E7993F000000402FB4AD3F00000000D99EA3BF00000060F4B0B8BF0000008019B1BBBF000000C04A86A73F000000605B5FCCBF0000000049DFC03F00000040BE23C33F000000E0028CAA3F000000407425BD3F000000200CAABA3F00000060BB6FB13F00000000D562993F00000000663AB03F00000060FB1AD0BF000000803F78693F000000A00AF7C93F000000009C4963BF000000803E81B33F000000004427873F, NULL);
INSERT INTO `student_encodings` (`id`, `student_id`, `encoding`, `created_at`) VALUES (80, 8, 0x000000604DF2BABF00000040447FAA3F000000005869AD3F000000002BA7B5BF000000009367BBBF000000A02460B0BF000000C0A8B8A0BF000000C0136BB9BF000000A09BACB03F00000000AEB3C1BF000000203151D03F000000808B43B3BF000000403CFDCEBF000000201F6AB4BF00000040F1EB95BF000000609CB9C63F0000004026FEC0BF00000000542CBCBF00000000D06FBCBF0000008028FE93BF00000000EDD2B73F0000008098D197BF000000002CBF9B3F0000000072799D3F000000007A1AB0BF000000001549D7BF000000E04BB7B6BF000000606C74ADBF0000004030B999BF000000003339A8BF00000000CF7CB2BF000000E096C9AC3F00000060701CC8BF000000802B05BABF00000000B0197DBF000000C030219F3F00000080F89398BF000000400846A7BF00000060237DC93F00000000F3FC763F000000C02478CABF0000000030DA9C3F000000C05E52AC3F00000020B37DD03F0000008039B7BD3F000000A04B38B33F000000209F8CB33F00000040589EBCBF000000605614BE3F000000A090A0C7BF000000203137B33F00000000424FBB3F000000C0879DBF3F00000000729E863F000000409A51AA3F000000A083BDBBBF00000000A6C1AF3F000000A0EDD8BA3F000000E0B82EC2BF000000A068529B3F000000C0C9CEBB3F00000000169DB2BF000000E0C125A5BF0000008090BBBBBF00000000C472D33F00000060DD4FB23F0000004071B6BABF000000E058BFBBBF0000004088B3C23F000000C0D4519EBF000000A00523B0BF00000000A42F7A3F000000002F3BC7BF000000009F27C2BF000000E0CE0BD2BF000000801D75AF3F000000006B22D93F00000040D85CB53F000000C004ABC7BF00000040EB79B03F0000000085A8B8BF00000000CCAD82BF000000209B98C13F0000004061F0BF3F000000600221A8BF000000407EE2AA3F00000020460BB4BF00000080B343AF3F000000C05A0DC63F000000C0663AB7BF00000060156A9BBF000000A0BC30CB3F000000C050A9A03F00000080E5B8A73F000000803D98A83F0000000078927ABF000000601343BABF00000000F1A19C3F000000003D2EC0BF000000009311943F000000406FA0B93F000000C010E9AABF000000003AB4823F000000400F87B83F000000206AA1C1BF000000407657B13F000000008A78A8BF00000040DAF5A13F00000000CDFC9C3F00000000EC6B85BF00000000468FB8BF00000040E2D6BEBF000000C0300AA33F000000003691CABF000000609859C03F00000000A9EBC33F000000C0EA919C3F000000004582B73F00000080E15FBF3F000000E02A6AB33F000000805C10953F000000004E51983F00000040049FCDBF000000403A6B91BF0000004070F8C93F00000080CBA0A03F0000008092F3B83F0000000089639E3F, NULL);
INSERT INTO `student_encodings` (`id`, `student_id`, `encoding`, `created_at`) VALUES (81, 9, 0x00000040C4A7BDBF000000004DE4BA3F000000400FCF963F00000040B8DFA3BF000000000786BBBF000000007B1CB3BF00000000E96AA4BF000000602BA5C0BF0000004080A6C13F00000020896ABABF000000603395D33F00000040E1B6B2BF00000000654FC8BF000000202483B9BF00000000E335ABBF00000080923AC83F000000C089FAC5BF000000C00ADDBABF00000000A05EAFBF0000000072B385BF000000A07F46B23F000000E07CE5B6BF000000A01A60AE3F000000809DD6B63F000000000E7378BF00000080CABDD5BF000000206928B1BF0000004028B3C0BF000000802372B63F000000005846B2BF000000000888A6BF000000004240813F00000040B1C4C8BF00000000D14FB7BF00000000CBD482BF00000080B8C5833F00000000FB6D8ABF0000008048D3A7BF000000E080F3CC3F00000080C8B0B9BF00000000840CD0BF00000000304A50BF000000808270993F000000405706D03F00000080884DCC3F000000C0E538A43F00000000403874BF00000000D37CBFBF000000607B0DC13F00000000469EC2BF00000080B357B13F000000E05E07BB3F000000C09479B53F00000000C8CD5A3F000000000ED77DBF000000C01A03C2BF000000000F0CA83F000000809D4DC43F000000001FE2C1BF000000C01F5881BF000000804201BB3F000000E0B903B3BF00000080435B77BF000000800CD1AEBF0000000045C5D43F0000004065FCAF3F000000203ECCBDBF000000807ADFC3BF0000008006A6C33F000000809D8EBCBF000000C0F2CD913F00000040BECFB43F00000000E2A3C7BF000000201A59C3BF000000C0A9B3D1BF000000000992923F000000002590D83F000000A0CEF1AF3F000000800FB3C6BF000000C0A4F99E3F00000000BE60BFBF000000002480883F000000E0E7FBC13F00000000679AC03F000000001CC353BF000000C08FBFACBF000000806149C0BF00000000A62EACBF000000605C98C83F000000402EAFB2BF00000040CA6094BF000000003738CE3F0000000048EE96BF000000007440713F00000000888D5F3F00000000384A56BF000000A0B9C9B8BF000000C0F1039C3F00000020C5CCC1BF0000008088A298BF00000000E2FA86BF000000A0287F97BF00000080A8A5A2BF00000040A079BC3F000000C07964C8BF000000801EB9A43F00000000C5FB8DBF000000E0BD3CBB3F000000C07B3EA53F000000007451A5BF0000006088EDAFBF0000006074C7BFBF000000407709BD3F000000C01886C9BF000000207CE8CA3F000000E0938DC23F000000403DAEC13F00000000C0D4B73F00000040AB3CBA3F000000C07515A83F00000000192A8B3F00000080E234A2BF000000607524CFBF000000806FC9B13F000000406E25C13F000000A0AB63B2BF00000080B29AB23F000000005283753F, NULL);
INSERT INTO `student_encodings` (`id`, `student_id`, `encoding`, `created_at`) VALUES (82, 9, 0x000000007B63BABF000000603AA0B73F000000600282963F0000008068BB9FBF000000403DA4C1BF00000020B86BBBBF00000000AC72B6BF0000004091C4C6BF00000080602DC03F00000000A192B1BF0000006023F8D43F00000000EF20A5BF000000806CC9C2BF00000080EBBFC0BF000000E0FD75A0BF0000000014B5C83F00000080FB6CC9BF000000E0A9B2C1BF000000C0894EB4BF00000080D7A49CBF00000020163DA13F000000E00254AFBF000000E0E610AD3F000000C000FDAC3F000000805A2B9CBF000000804F76D7BF00000040097DB6BF000000C0219FC1BF000000C0BC19BF3F0000000058D491BF0000008010CC97BF0000000070FF893F00000080102AC8BF000000C0E85EBEBF000000C039B9AE3F00000000E04645BF000000009A3B723F000000C067BAB3BF000000409303D03F000000E0BF18BFBF000000608FE8CCBF00000000F130903F00000020F9B8B03F000000007849CB3F000000A06D33C93F000000601DE0A93F000000A0EA77A83F000000006891C2BF00000000848DC23F00000060DF4FC0BF00000020C87BB03F000000C00FA8B83F00000000C5FFBE3F00000000A9DB833F00000000442571BF000000E0985AC8BF0000000054428C3F000000802A41C63F000000802B00C7BF00000000D8CD45BF00000000FB0EB53F00000080BA38A5BF000000C01335A5BF0000004061BAB4BF000000C0336FD53F000000C0AA53BD3F00000000342BC0BF00000000DFAEC3BF0000002003CFC63F000000003C5FB2BF000000808273903F000000C0493EAF3F000000C06F2DC9BF00000080AED3C4BF00000000FC74D1BF00000000609D613F00000060C6EAD93F00000000639DA93F000000C07953CBBF000000001E718CBF00000020A798B8BF000000006F2F9E3F000000C05995B93F000000A05DAAB43F000000602325A2BF00000080DD6BAFBF00000080D66FBDBF000000009222A0BF000000A09457CA3F000000E05AAAB1BF00000040E0DE8DBF00000020A7C9CD3F00000080AEC785BF00000080098FAC3F000000801B297BBF000000001E5E9D3F000000805F1AB5BF00000000FEE49F3F00000080004DC2BF0000000012C570BF0000000099EC9A3F00000040A614A43F000000001EEB9D3F00000040BF9ABC3F000000E0FA7EC0BF00000000143C9F3F00000000004A3E3F000000A0D195B93F00000000EC7D8D3F00000000FEF399BF000000004035A3BF000000C0D3AFC0BF000000E0F491BF3F00000000747DC6BF000000C08729D03F000000C05028C13F000000E0C58DBC3F000000000F01C13F000000405987B63F00000000F39AA13F00000000903650BF00000020F621B0BF00000080AA93CDBF000000C0BA7DAA3F0000006060ACBC3F000000E03889B1BF00000080AE95B53F000000607B80A03F, NULL);
INSERT INTO `student_encodings` (`id`, `student_id`, `encoding`, `created_at`) VALUES (83, 9, 0x00000080C333B3BF00000040537DA83F00000000AA68883F000000C03C93B0BF000000C02D18B3BF0000000069ABB5BF000000801943AEBF000000A00F4AC3BF00000040309EBF3F00000040EAF8B7BF00000040DD8AD23F0000008033ADACBF00000060C9F3C4BF000000607913BEBF000000802858A1BF00000000C151C53F000000C0B247C4BF000000E04CDCBEBF00000000F3E5B7BF0000000040B6A13F000000E03FEBB63F000000C0FA20A8BF000000607D87B23F00000000DCCAA63F00000000340C7CBF000000C0E22AD5BF000000C0B007BBBF00000020B356B2BF000000A08227B53F0000000040B550BF000000E04119A4BF000000005EEF7CBF000000205EDBC6BF00000080E731B3BF000000E0279DB03F00000080F8279F3F000000804B5F95BF00000020089CB4BF000000005FD7CF3F000000006BB5B5BF000000403BD6D0BF00000000EB51A13F00000080CA92A43F000000C0A497CA3F000000608868C83F000000E0DB6BAC3F00000040E8C28D3F00000060B580C5BF000000407914C13F000000407805C0BF00000000FEDDAE3F0000004015A7C13F000000405F30B73F00000000A9A1813F00000000D6487ABF000000A02798BFBF00000000252CA83F00000060606FC73F00000000711FC1BF000000E05A4C9ABF0000008056EDBA3F00000060CCA4B2BF000000A057109FBF000000C01A40BBBF00000080BCABD23F000000606904B43F000000E027D7C1BF0000000095DEC9BF00000040192AC43F00000060136CB3BF000000605FE49EBF000000607F10B43F000000A08FF2CABF00000080A7E4C3BF00000020DC34D0BF00000000884580BF000000C06A52DA3F000000C0135EAF3F00000000A90EC9BF000000C06CA8A43F00000000D8E2BEBF000000C040C3A73F000000A07619C13F00000080F1E0BE3F000000004B1164BF00000080683796BF000000404427BEBF000000807DE4AABF00000020B165CB3F0000006025D5B7BF000000205E51A1BF0000002087A8CA3F00000000EE30673F000000807D9FB23F000000C0343875BF000000001AF498BF000000C08CA9A9BF000000E0B9D8A73F000000C04BD7C4BF0000000045548CBF000000008D8E8C3F000000C00861A03F0000000078809A3F000000C029FEBF3F000000400DF7C0BF000000A09AFCB03F00000000EA008A3F000000C05A5CB83F000000A0B294B23F00000000E2EB8CBF000000004E10AABF00000080DEA1C0BF00000080FE7BB33F00000080A6E3CABF000000007E3ECC3F00000020E39EC03F000000C0B8CCC43F000000C02075B53F000000C09DC6BE3F000000009A0FB53F00000000CC92863F00000000FA9083BF0000002070F9D0BF000000A079D6A83F00000060AF44BD3F00000000147266BF000000C0B19FB93F00000000AB218C3F, NULL);
INSERT INTO `student_encodings` (`id`, `student_id`, `encoding`, `created_at`) VALUES (84, 9, 0x000000806319B6BF000000400FD0BB3F000000001C079B3F00000080017092BF000000C0F636BABF00000000D70AB6BF00000060DB8EB2BF000000006117C9BF00000040F378BD3F000000E02C98B8BF00000000124BD53F000000401230A2BF000000A06C26C5BF0000000095FBC3BF00000040771BB1BF000000009BBAC63F000000E0A339C4BF000000E04902BEBF00000040CF2AB3BF000000000C6672BF0000004032BAAF3F000000204220A7BF000000C02A0AB23F00000000868B923F00000000756787BF000000E0DE0AD5BF00000000FA9CB6BF00000000B83AC0BF00000080F9B0BA3F00000000ACF2793F0000000042CB81BF000000E0113AAA3F000000A0B2DEC5BF000000C0CEBCB9BF00000080876FAB3F000000E0BE299EBF00000000937298BF000000000C706C3F000000C07532D13F000000006F41BCBF00000000FF06CBBF000000000CC9993F00000080B2D5B23F00000040061BCE3F0000006087D7C83F000000E06F50B23F000000A0D703A83F000000A002DDC2BF00000000F090BD3F00000060D51EC3BF0000004068D0B33F0000006021AFC03F000000E0ACDABD3F000000008095383F0000004009C2A83F00000040205EC4BF00000000FC00993F00000080B3A8C23F000000207EB7C5BF000000002DDD953F000000208C97C03F00000040C09CA9BF00000080C17BB0BF000000808FA2B7BF000000609D97D33F000000C071C6AF3F000000A00442BDBF000000605FA5C4BF0000000089E9CA3F000000A0C946B9BF00000040193D86BF000000A0408AB23F000000E018C8C6BF00000040128DC4BF000000402124D1BF00000000F01168BF000000807660D93F000000E0E483BD3F000000609258C6BF00000060EDADAB3F00000060F64BB7BF0000000068986E3F000000E069BCB93F00000080FA71AD3F00000020FC0997BF000000C0B2EFAEBF000000C09D58B7BF000000002D1AB2BF000000803DC2C53F00000040E66CAEBF00000000230C6BBF000000408FD6CE3F00000000CBCA773F000000008649863F00000040D9F679BF000000404DE9A5BF00000020C754B1BF000000401A53803F000000C0402CC6BF00000000548587BF000000007ABDA8BF0000008021237DBF0000000005849B3F0000008099F5B83F000000400AFCC2BF000000A032D0B23F000000807A3E9DBF00000020AAA1B83F0000000010B96F3F0000000084B893BF0000000086A8ACBF000000000092B6BF000000000A8FBC3F000000A0E6C9C8BF000000801182CD3F000000603C2FBA3F000000C03A91C23F0000004049F2BB3F00000020C13CBF3F00000020E5DBB03F000000003E42803F00000000B784A4BF0000000065FBCFBF00000020007B83BF000000C0CACEBA3F000000008342B9BF00000080678DB53F000000609F9FA63F, NULL);
INSERT INTO `student_encodings` (`id`, `student_id`, `encoding`, `created_at`) VALUES (85, 9, 0x000000C0A166B5BF000000408290BC3F0000006022E8A23F000000604059A7BF00000000AB05BBBF000000401765B1BF00000020B227B4BF000000205508C4BF0000004017A8C23F000000C04945B9BF0000000048DCD23F000000803032ADBF00000040BD4CC8BF0000006065DDC3BF000000A04F4DB1BF000000000F98C83F0000004074D7C6BF000000808AC8BEBF000000C01189AFBF000000C03AE1A23F000000C0DE5BB73F000000608064B2BF000000A0E974AB3F00000000F6D4A53F00000000148B69BF000000803338D7BF000000C011A6B5BF000000409120BFBF000000807D11BA3F000000009CBD9FBF0000000086C0A2BF0000000054E66E3F00000000E1EEC4BF000000C0F045B8BF00000000B5D88C3F00000000F2C26FBF000000008A729ABF000000809EE5A5BF000000E0E2D3CE3F000000C0920AB9BF000000407C35CFBF0000000000811F3F00000080E870A83F00000080C5AFCA3F000000200679C83F000000E0711EB33F000000008448A93F00000080E3D7C3BF00000080E64FC03F000000A05F5FC5BF000000005E1AAE3F000000805A82C03F00000000F03BBA3F000000009C7E7D3F00000080F8849D3F000000E067B5C3BF0000000089A8A23F000000405224C43F000000407B84C4BF00000080AB3B833F00000060C312BD3F00000040C5F4AFBF0000000039B4AFBF00000020A499B0BF00000060ED77D43F000000A0D1FFB13F000000000A7FBEBF00000000C8F7C6BF00000020FD1BC73F000000407404B9BF0000002044DD91BF000000C0CE86B03F000000608A8DC4BF00000080D149C1BF000000A0D376D1BF000000003CF97BBF000000004498DA3F000000008843B43F000000C0845CC7BF000000601279A73F00000060386AC2BF00000000A56E803F000000A0084FBA3F000000007DFAB33F000000A024DB9DBF00000040AEB2ABBF00000060DB4DC0BF0000004021D7B3BF000000600C30C63F000000C08264B6BF0000004011569E3F000000805D5DCC3F00000080DED08C3F000000C08A45A53F000000E0B44197BF00000000955BA0BF000000603BC2B8BF000000C0AFFEA53F00000040D45CC1BF000000007494A3BF0000000085DD973F00000000F271643F000000006FB4983F000000C07F03BA3F000000404B76C6BF000000A0850EB03F00000000607478BF0000000008AAB53F00000060D42FB33F00000000EF0498BF0000008040C8B2BF00000020B495BFBF000000C084BABE3F00000060492AC9BF00000020A7F9CA3F00000000575FC03F00000060274FC33F000000808669B83F000000C0840BC23F000000A0967EB43F0000000090AD7F3F000000001161A5BF000000C0FA7CCFBF00000040109D9E3F000000C09B90BD3F000000E02189B1BF0000008039DFAD3F00000080A3BC923F, NULL);
INSERT INTO `student_encodings` (`id`, `student_id`, `encoding`, `created_at`) VALUES (86, 9, 0x000000001BA9B3BF00000000DB7CA33F00000080CCFFAF3F000000A08603AABF00000040BDF4BABF00000060AED9BFBF00000040983587BF000000C00899C2BF000000A08DA9C23F00000080DD39B8BF00000040C32CD43F000000004041AEBF000000A00CFEC5BF000000E0125BC0BF00000000909C9DBF000000808216C63F0000008044D2C1BF00000000E2F8B8BF00000080D625B7BF0000000070C97D3F00000080660CB23F000000C034B2AEBF00000000D787A53F00000000EC9BA83F000000808ADBA5BF0000008004CBD5BF000000004C6CBABF00000060E8F7C1BF000000E0B70CB53F00000000D2399CBF00000000535870BF00000020BB41A93F00000040501EC7BF000000006B62BEBF0000000000CA3BBF000000401F1997BF000000C07A6EA0BF00000080C57AA4BF00000040C9C3CC3F000000C098FEB5BF00000020CA79D0BF00000000B5A39CBF000000005699823F000000E041D4C73F00000040E21CCA3F000000000E82AB3F0000002017A7B03F000000A05C4CC3BF000000C00960BC3F00000000ECABC7BF00000080A020953F000000E07997B23F00000040B805B83F00000000C0825DBF00000000401856BF000000A0CF2EC2BF00000000CC1D913F000000800520C23F000000A0C2EEC7BF00000080855E763F00000040E923AA3F00000000608DB8BF000000800D8DB2BF000000C028B3ABBF00000080F9E8D33F00000040DAF3B03F000000205391C0BF000000601253BEBF00000040D080C83F00000000755EBFBF000000008DBB6CBF000000404813B63F000000407CCCC4BF000000E09BD3C3BF000000000185D3BF00000000FF4894BF000000C0312BDC3F000000401AF6933F0000006031C5C8BF00000060282FA43F000000C09DE1C3BF00000080C2469E3F000000A00C5BBB3F000000E0D2C2B83F00000040D9F881BF000000C00A36A0BF000000204F54B8BF000000008EFBA6BF000000803448C83F000000A0278EC0BF000000C0A5C8853F000000C09714CD3F00000000798091BF000000A08DBAB13F000000E09B7887BF00000000142960BF00000080BA73ABBF000000A0A97B953F00000040FA7CB8BF0000000037C28BBF000000401D46AE3F000000809464933F00000000D0F0963F00000000E7F4B63F00000080C68FC5BF000000A0FF69B53F00000000D443613F00000080F9DEB23F000000604825B33F000000404730B0BF00000020C9F8A5BF000000E07498C0BF00000000ADF9C03F000000C0960EC9BF000000006E21C93F00000040E6E3C23F000000409AC7AB3F00000060EC1CBD3F0000002092EAB53F000000808D1AA73F000000005B7195BF00000080B198A6BF000000801688CFBF000000C07914B13F000000C0F27AC23F000000C0C0F4AFBF00000040F627B03F000000004C6189BF, NULL);
INSERT INTO `student_encodings` (`id`, `student_id`, `encoding`, `created_at`) VALUES (87, 9, 0x000000604D62B7BF00000040CF5BBE3F000000008D0AB03F0000006001DF93BF0000000051E3BDBF000000407BD7B6BF000000C01A9DA8BF000000E01E1DC5BF000000E05DE0C13F000000E00002B6BF00000000408BD43F000000C0DA06A0BF000000E0B7D8C8BF000000A0353DC2BF000000004DC2A9BF000000C02864C73F0000002005B6C5BF000000200056BBBF000000C064D7B4BF00000000D874683F000000E0D5C7B13F00000040583C9CBF000000805792AD3F000000009BC8963F00000000823EA23F00000080BF22D6BF0000000087B9B1BF0000004016CCB8BF0000008002FEB43F00000000AC3C98BF0000004027E2A6BF00000000E091693F000000602BD4C6BF000000C0A2A5C0BF00000080C347A63F00000000DED97D3F000000807A98A1BF00000080D7B8A3BF00000000AB6FCF3F000000C0B958B9BF000000E0AB39CBBF000000007E7789BF00000000AA49AE3F000000203256CC3F000000C0A078C83F000000C0092BB43F000000A0FEE4AA3F000000A0243EC5BF00000080A2C8C03F0000002031A7C3BF000000C0C676B03F00000040B9B8C03F000000C05588BD3F00000000A02F85BF0000008096089A3F000000C011D0C5BF00000000A0305C3F000000807A8EC13F00000040D161BFBF000000C0DEDF8A3F000000A0828EC13F000000405E19B7BF00000040FB07B2BF0000002080FDB3BF00000000B3AAD43F000000403484B03F000000A0DB74BCBF00000040653FC6BF00000000665CC63F00000040AE4FB8BF000000003344AFBF000000C0C7109D3F000000602B55C6BF000000A03B95C1BF000000E07C49D2BF000000006C0A77BF00000000506ADA3F00000040EF21AC3F000000C0A8C6C9BF000000600174A73F00000020D09CBCBF000000808423983F000000201675BF3F000000000E34C13F0000008047698ABF0000000046488FBF000000606BBAC0BF00000080450DA9BF000000004038C73F000000006695B9BF00000080A06375BF000000C0725FCB3F000000000CB1533F000000001F2DAE3F0000000067B465BF000000005CF7A5BF000000A003E3B0BF000000400BF3A53F00000000236AC5BF00000000790A93BF00000080E0519D3F000000408A43953F00000000DE389B3F00000040B9F4B83F00000040FE58C2BF00000040C8CFA43F000000007FF194BF00000060913BB83F000000C08753A63F00000040138FB3BF000000C0DD56ADBF000000209362BBBF00000080676EBC3F000000C0C2EDC5BF00000040389CCE3F000000205EB1BD3F000000E0F85EBA3F000000C0717BBE3F000000200174C03F00000060730EB53F000000C03243A43F000000007F3A9EBF000000A0AE45CFBF000000A04028913F000000E0BE65BA3F000000403FC7A7BF000000403A8BB73F000000C0A74E9A3F, NULL);
INSERT INTO `student_encodings` (`id`, `student_id`, `encoding`, `created_at`) VALUES (88, 9, 0x000000C0CF2DB9BF00000040149DC23F00000000D0FEA43F00000060E417ADBF000000808DF1B5BF00000020F100B9BF00000020C78DB0BF00000060DFCAC8BF000000409078BB3F00000000F893B6BF00000000609BD63F000000605DAAB2BF000000401FF0C5BF000000A0A152C6BF000000209159ADBF00000000FB4CC73F000000A02F8FC6BF000000002495B7BF00000040BB77B3BF00000000F02378BF000000806201B23F000000406D33B4BF00000040A81DAF3F000000C005B7A23F00000000A08E803F00000000DF2AD5BF0000002076B6BABF000000E0D700BABF000000208412B73F0000000024498DBF000000003AAD693F000000403BA1A23F00000020870AC6BF00000040430DBEBF00000080C0BD9D3F00000080DF3E84BF00000000B57F84BF00000040618FA8BF000000A07E48CE3F000000C05094C2BF000000A0C236CABF0000000054E1843F0000008010C4B23F000000803DEBCC3F000000C0A13ECA3F00000040FA06AA3F00000040B182AA3F00000060B0D4C0BF000000803550C03F0000006097CCC2BF00000020A152AD3F000000806734BD3F00000000FD4DBE3F00000000813989BF00000040E96CA83F000000406F99C4BF0000000030AD883F000000203A23C93F000000009DCFC1BF00000080D2AF99BF00000060C430B93F000000A0773DAABF00000040B76FAABF00000000E93BB8BF00000080FCE9D23F000000C03728BA3F00000000649BBFBF000000A0E797C4BF00000080C429CC3F000000809A31ADBF00000000BE8F5B3F000000800E69AF3F000000402574C8BF00000000BA84C3BF000000E08038D1BF0000000080D2963F000000409468DA3F000000C0D2ADB73F000000004E9FC7BF000000808F8B9B3F000000601C01C0BF00000080CF63A43F000000600619BB3F000000409984AF3F00000000B57999BF00000000F4BBB4BF000000E095BCBCBF000000C0F9B3B0BF00000000698AC43F000000203556B3BF000000C0F25095BF0000008040ABCA3F00000000B47D7FBF0000000066F07D3F00000000331396BF000000C07410A5BF0000008064AFB2BF000000606119A93F000000200374C5BF00000000E2D1703F00000000E33A88BF000000E09EE486BF0000000000C0563F000000A0C917C03F000000C02D2EC4BF0000000053A6A43F00000000905D6F3F000000407486B83F00000000C87C943F00000000EBD595BF0000006068A0A2BF00000080CC37B6BF0000004081ECB93F0000000043ADCABF000000800BA4CB3F000000205C2EBF3F000000002FE8B83F000000604451C03F00000060E833C03F000000E09131B63F0000000025B1A33F000000804F6CAFBF000000C0491BCDBF00000000D1366CBF0000008002BABD3F000000E0E3ECA8BF0000004048C5B03F00000000C3CF933F, NULL);
INSERT INTO `student_encodings` (`id`, `student_id`, `encoding`, `created_at`) VALUES (89, 9, 0x000000401883A5BF000000202D2ABB3F000000C0EC58963F000000409532B2BF00000000E570B8BF000000809304B4BF0000002036D9B0BF000000200EBFC7BF00000000BEC9C03F00000060E53EB9BF00000080DF04D73F00000080996EAFBF0000008069B6C8BF000000A00EF0C3BF000000A01335A9BF000000809B1CC93F000000C0EED2C7BF000000C04137B7BF000000C020A2B3BF0000000050706BBF0000000019E1AB3F00000020EC6DB1BF000000201BD7AB3F000000C04A8DA93F00000000B8805F3F000000E0695DD5BF000000200C07BEBF000000A0F9E7BBBF000000207797BF3F00000080845CA5BF000000E0D242A2BF00000080532AA23F000000209171C4BF00000040EDD9BFBF000000C0C590A43F00000000E6DA9EBF000000000A5385BF000000603CA3AEBF000000800103CD3F0000004017C6BBBF000000606438C9BF00000000D0B8903F000000401ADEA83F000000406957CB3F000000C08750C93F000000C0A80CAC3F000000002E21AA3F000000803666C1BF000000E05D60BE3F000000E085ABC6BF000000E0D015A73F0000000072C0B63F000000001960BD3F00000000082F61BF0000008016B8903F0000008082A4C5BF00000000A860813F000000807F92C73F000000408F41C5BF00000020D58494BF000000002903B83F000000C0F36BA7BF000000C0765DADBF00000060317FB2BF0000004084CCD33F000000000171B63F000000C08A3FC2BF000000801175C3BF000000E0564EC63F000000E0B2F2B1BF000000607305933F00000000F5ADAD3F00000040BA15C8BF000000001847C2BF0000008087C2D0BF00000000A574933F00000020E2CEDB3F000000A022A5B33F00000080AD5EC7BF0000008006849D3F000000E04BBCC0BF00000000C18B9C3F000000E01438B93F00000040EF97A43F00000000118D9ABF0000008053FEB1BF000000A0C526BBBF00000080DAC1A4BF000000C07FEFC33F000000A0E5AFB8BF00000080C067743F0000004003C8CC3F00000080213395BF00000080BB6CB03F00000000F3C08EBF0000000012CF81BF00000060D4E5B2BF000000404BD0A03F000000E07EA5C1BF0000000016B07B3F0000000090D069BF000000C07A2C883F000000003937963F000000204B55BD3F00000080D6E4C2BF000000C0C259B13F0000000000C14E3F00000000C808B43F000000805F85A73F000000003DBF9ABF000000600A6FA6BF0000006070B3BBBF00000000A840BE3F00000000F489CCBF0000000068F1C83F000000C05BC0C13F0000008070D6BC3F00000000154CBB3F000000802C97B93F000000C00004AC3F00000000E01F8C3F0000008056E9ADBF000000607748CEBF000000408798963F00000040BF28C03F000000C0FC8CB4BF0000000093F8AE3F00000000C27586BF, NULL);
INSERT INTO `student_encodings` (`id`, `student_id`, `encoding`, `created_at`) VALUES (90, 9, 0x00000040A593AFBF000000601E54C13F00000080FB5E7C3F000000603969B1BF00000020A7E8C0BF00000020BF37B2BF0000008079C7A5BF000000E02B7EC4BF000000403682C23F000000E08FEDBABF000000E00B78D43F000000402F07A8BF000000A013EDC5BF000000605BF9C0BF00000000F125A6BF000000806C32C53F00000000F3DFC2BF00000040AA51BBBF00000000BFE1B5BF00000000A0E64FBF000000404721B03F00000020824CA6BF000000C0E300A63F00000040915BA93F00000000FA1277BF000000E00472D5BF000000E0C177B2BF0000002030CFB9BF000000801C6FB43F00000080F396B3BF00000080CB499FBF00000000D822833F000000E04614C9BF000000001549C1BF000000008F3D9C3F000000008070453F00000000FA4990BF0000000014A095BF000000C01216C83F000000E0C0EEB2BF00000000C65EC9BF0000000068EC6D3F000000005041973F00000000DE86CD3F000000208E5DC83F00000020A88DB53F000000C043D1A83F00000000DE11C7BF000000A0F53CC13F000000E03B27C3BF00000020736DB23F000000002988B43F0000008004ADBB3F00000000403E7CBF00000000C00D68BF000000C0B928C3BF0000000002059A3F000000C00F7EC23F00000040C0EFC0BF00000000BDBE8A3F0000004009E7BC3F000000C062F0AFBF0000004050DDB2BF000000806EE4B0BF000000C0C135D53F000000E0A24DAB3F000000009D1ABEBF000000C0E884C1BF00000000A001C43F000000E0C9D2B3BF0000004028E5ABBF000000804A4C8E3F000000C077F4C3BF000000201198C1BF00000080CBDBD1BF000000006F97923F000000209B26DB3F00000040A575AF3F000000009DADCBBF000000E031A1A33F00000040F838C0BF000000408579A43F0000006042D8BC3F000000A0BD0ABA3F000000407B81A0BF000000407C33A7BF000000C0DE9DBABF0000000067FC91BF000000801B4AC93F0000004039F2BABF00000040D0AF8CBF000000807F5ECB3F0000000092E79BBF000000C00C68B33F000000405FFE73BF0000000010B590BF00000000F711B6BF000000609566AF3F000000E03E63BEBF000000005DEA90BF00000060018CAC3F0000000038275DBF00000000686C65BF00000000EEF9BD3F000000006669C8BF000000E00AEBB83F00000000A80B89BF00000040C90EB63F00000060EE31B23F00000080899FAABF00000020DD0DA7BF00000080C888BBBF0000004055CFBD3F000000A0F789C8BF000000A0A9EBCF3F000000E009CAC23F000000205CBABB3F000000E08B56C03F000000C0BEFDBE3F00000040D444AB3F000000C07687AB3F00000000198398BF00000020F86CCFBF00000080969C913F00000080540FC13F000000E0B0C9B1BF000000C02EB5B33F0000000057057E3F, NULL);
INSERT INTO `student_encodings` (`id`, `student_id`, `encoding`, `created_at`) VALUES (91, 10, 0x000000A0F54FB6BF0000000008F3AD3F000000A0ECA783BF00000080925791BF000000402279B9BF00000000329382BF000000002492B7BF000000203CE0B1BF00000040EAB2C33F000000E010D1C4BF000000006D37CB3F000000A0153FB6BF00000020E68CCBBF00000080C8BCB4BF00000000C2107BBF0000000098C0C23F00000060A474CABF000000409C9DB0BF00000040E94A853F00000000DD7C9E3F000000608289C13F00000000CCB96DBF000000A0E3FEA0BF000000808698B23F000000401803ADBF000000006426DABF00000000A342C6BF00000040EA17B2BF000000A0F819A13F00000040FCE5B7BF00000060E7AEBABF0000008000A296BF000000A09065C3BF0000006055E9B9BF000000801B1CA03F00000060931FBC3F000000007647A4BF00000000E71AB9BF000000C08A22C13F000000E070D89DBF00000040C803C4BF00000000496AAB3F00000040562EA93F00000000B791CB3F000000E0B314C63F000000206DABC03F00000080601B91BF000000409ED2BFBF000000E0F615C23F00000020CFA2C5BF00000060FABB833F00000020119FC43F000000A07371B33F000000600812BA3F000000001EF7753F00000040870AC0BF00000080A7A3B53F000000607B49B23F00000000F9E1C9BF00000000CBC9703F00000020E2B5B33F000000E0A14BBFBF00000020C109A53F0000000068468B3F000000C071F9CD3F000000C02FD9B03F000000E03292B7BF00000000BBEBC9BF000000C0AFC2BA3F000000C0BF17CBBF000000203C34AABF00000000525A843F000000407394C1BF000000C0D419CABF00000080D9C5D2BF00000080D6F6A63F000000808C4DD83F000000A09292C33F0000000026D5C1BF000000401036B53F00000080392AADBF000000C0F626A4BF000000000F94C33F000000C0769AC23F00000040CB9C943F000000C09C36A9BF00000060D72BC1BF0000000069BD973F000000204F33CB3F000000E08012B2BF00000040E1647C3F000000802727CA3F00000000689F643F000000403EC2B93F00000040D45FB13F00000000F6A4A33F000000C0A9DFBDBF000000C0EEEB9B3F00000020CE56B6BF00000000680E943F000000A0E54CAE3F000000C03CB8AFBF00000000E07E79BF000000C01990BA3F00000000F117C3BF000000E0FD27C03F000000008595A3BF00000040779492BF000000003E82723F00000080CA04A9BF0000008019D4C5BF000000000CDEA2BF00000000A0BDBF3F000000C0B648D1BF000000E09F03CC3F000000C005FDC53F00000080DD7BB43F000000E02C11C63F00000080C1E2B83F00000080AAE7BB3F00000000B42C8CBF000000805783ACBF000000E0DBAFCBBF0000008019ACACBF000000E0A3A7AA3F0000008094989B3F0000000026B5B33F00000080AE9E9EBF, NULL);
INSERT INTO `student_encodings` (`id`, `student_id`, `encoding`, `created_at`) VALUES (92, 10, 0x000000C0A7C4BCBF000000C03AB2B53F000000A08D6A74BF0000008001E2A6BF000000001195B6BF000000009416613F000000803E6BB7BF00000080DA64B3BF000000807042C23F000000001D49C3BF000000A0BE15CC3F000000A0DE4EA4BF00000040B503CABF00000000E9A1B9BF00000000A68581BF00000020A3E6C13F000000600B76CABF000000409E4CB6BF000000601D5D9A3F000000805C65993F000000E04514C33F000000008AF885BF00000000C22861BF000000004CC1AE3F00000020B1F2B8BF0000004060EDD7BF000000E0D7A0C5BF00000040DDCFB5BF000000603C629D3F00000000B527BCBF00000040072AB1BF000000C06504A3BF000000804557C5BF00000020160CB3BF00000000E0ED4CBF00000060EC76B23F00000000490F8FBF0000002072D8B0BF00000040D6A0C13F00000000784F84BF00000040618DC3BF000000008045A03F000000807935993F000000A0F23DCC3F000000807EC6C03F000000A01625C13F00000000F89D0FBF000000006E53BFBF00000020877DBE3F0000004029CBC3BF00000000847D59BF000000000E4EC23F000000C0BD24AF3F000000606D44AD3F000000002EB689BF000000A0737ABDBF00000040A4FDB73F000000205E8CA73F000000A070A8C8BF000000E059A2923F00000020C836AC3F00000000BAC0BDBF000000A0DB57933F00000000DE59883F000000C04E4BCD3F00000020BE42AB3F000000C0DCB4B2BF000000A03624C9BF000000C0AD40BD3F0000004025ECC4BF00000080A5F9ADBF000000203407A13F000000400E60C0BF00000060130CC8BF000000602AD9D1BF00000000D087503F000000A08E26D83F0000004036C6C03F00000020BCBEC0BF00000080EF24B73F000000E0D378B9BF000000201771A2BF000000802311C13F00000020813CBE3F000000008AE96FBF000000009F3896BF000000804070C2BF000000003A2DA53F000000402F56CB3F000000A0A623B5BF00000080D7BA853F000000C0000BCA3F000000C08A05903F000000C0202CC03F000000402A74A73F0000008015089E3F000000C0D856BDBF00000020E843AA3F0000006091A0AEBF0000000028D4833F00000040D3A1B03F000000804D0DA4BF000000005071793F000000E0C819BD3F000000C0C533C4BF000000A0BF89BE3F0000000066488BBF00000080989889BF000000009223793F00000000A67481BF0000004062EFC4BF000000A004FFB0BF000000406D3CBA3F000000E03F87D0BF000000009E41C93F000000C0F70ECA3F000000C052BFAC3F000000205417C23F000000C0A9EABC3F000000400A7FB73F000000002BB89BBF000000407D6DA7BF000000C05870CDBF000000A0B368A2BF000000400944B13F00000000E80C5FBF000000407884B23F00000080B0DA96BF, NULL);
INSERT INTO `student_encodings` (`id`, `student_id`, `encoding`, `created_at`) VALUES (93, 10, 0x00000080A9A0BEBF00000040371BB13F000000203A28AD3F00000080250FB5BF000000403EA3B5BF00000080D9179EBF000000204AFFB8BF000000800207B2BF000000C0A06EC23F000000004958C5BF000000E0DA04D23F00000080C3F9A9BF000000207AAFCABF000000A0F338B4BF00000000A0EA8CBF000000A0D861C13F0000008077E4CBBF000000C00114A7BF00000000BC624A3F0000008001749D3F00000020A7DDC03F000000E090FE7ABF00000000F34F743F0000004020C5A33F00000040C606B5BF000000C02999D9BF000000E0C87ACABF000000C09D72B2BF0000008022D5953F000000C01D83BABF00000080C3C2A6BF000000003F0896BF000000605848C2BF0000000068FAA7BF000000007687A0BF0000006085BCAB3F00000000681C5E3F000000004689B2BF00000020CBF7BE3F000000E030178F3F000000607023C3BF0000000063619D3F0000000080836E3F000000804FEDCA3F00000000598CC53F0000008047E6BF3F000000E02E808A3F00000040AAD7BEBF0000008029C7BC3F00000080F501C7BF0000008076129B3F000000603386C23F00000060BFE1AE3F0000000023EBB03F0000000040025E3F000000C03E16B5BF000000007644B73F000000E01A79B23F000000803DACC6BF000000E028DA993F00000000C5F3B23F0000004083FDBFBF0000002038D6943F000000002A9F953F00000020F2C2C93F000000600A07B93F000000E0BA80B6BF000000E06559C8BF00000040D019BB3F00000060F5E3C6BF000000800641B6BF0000000096317B3F000000C0F6E0C3BF000000A0D25AC5BF00000020761BD4BF0000000080AB2CBF000000C0E8D7D73F000000A0A45FC13F00000040EA66C4BF00000020121FAD3F0000000028FABFBF000000A04F3FA3BF00000040068BC03F00000040E5ABC03F00000000129383BF000000C0D53DA9BF00000020A275C4BF000000008C36953F00000000AB0BCB3F00000000CC91B5BF00000040831A943F000000E097B1CF3F00000000DDA88B3F00000000B199BF3F0000004044D6A13F0000000032CAA03F000000007731BDBF0000000002C28C3F00000080F7CFA7BF0000000090D75ABF00000080D182A83F00000020F9A89EBF0000008029ADA0BF000000C0ACF0BC3F0000004029DBC6BF000000409475C43F000000002EBD93BF00000000D6EC79BF00000000DBEE953F0000000074969FBF000000A0545CBCBF000000804883B1BF000000402026BD3F000000C0BD7ECBBF000000001682C43F00000000999DCB3F00000040C983B13F0000000062C5C23F00000080520BBC3F00000040D3F1BA3F00000080D2ADA9BF00000000B490A7BF000000E0AB4CCABF00000080A9D29ABF000000002865973F000000006C3D8F3F00000000B61DA53F00000000C3E78EBF, NULL);
INSERT INTO `student_encodings` (`id`, `student_id`, `encoding`, `created_at`) VALUES (94, 10, 0x0000000051EEB7BF000000809782B13F000000402C07A13F00000080299EA4BF00000020A8AEB8BF000000000A7C80BF000000A0C97FBFBF0000000038A0B4BF000000C076C1BD3F00000060F16AC3BF00000040235ACF3F000000209B80A6BF000000C0FFB1C7BF000000C0CAFEBBBF000000804CEA99BF00000000E73FC33F000000C05452CABF0000004005E8A6BF000000E052E68F3F0000008010EEA13F000000009ED9C13F0000004029918ABF000000001AE989BF000000C047C6AB3F000000409AF6B2BF00000000C270D9BF000000A05F53C7BF000000409D9CAFBF0000000027CDA13F00000000CDC4BABF000000C0552EB8BF0000008019A2AABF000000A05E19C4BF00000060C6B3B6BF00000000F89C7A3F0000006013A5B33F000000002213A8BF000000208A0BB5BF00000020950BBD3F00000040608E95BF00000000510FC4BF0000004032C5B23F0000008089199D3F0000000052D7CB3F000000A0D1B9C43F000000C0D70AC03F00000020AB57933F00000040CCE3C0BF000000C0DDD1C13F000000209EDBC6BF000000E0B7AE9B3F000000C0F743C13F000000E01EA0B23F000000C03D84B43F00000000C0093C3F000000001827BABF000000004C7EAF3F00000000E789B53F00000080E880C6BF000000E03DFFA43F000000607BE3A73F000000E08427BCBF0000004091C7953F00000000D8AF55BF0000006028E9C73F000000804F94B33F000000C0C103B8BF000000001C96CBBF00000080C14FBB3F000000E06D63C6BF000000606A4CACBF000000A0F1BA9F3F00000080E504C1BF00000000BA6CCABF000000604BDDD3BF00000000ABB2A03F000000C0F93DD93F000000A0BF1BC33F00000080141DC4BF00000000DFF1A63F000000604A83B6BF000000C07EBBA5BF000000407082C03F00000040E806C23F00000080FDBE9F3F0000008025D3A4BF0000004058A7C0BF0000008022CDA73F0000006071B6CA3F000000609953B9BF00000080C7C5823F000000402911CD3F00000000322D9A3F000000A0767BC03F00000080354B9A3F000000C06EE4AF3F0000000075BFBFBF000000C0D69AA93F00000040C467B3BF00000000031E833F000000402B3CB13F000000C0193F98BF000000003410793F000000206C1EBE3F000000E0EBA5C2BF000000C0B2A2C43F00000000792B8FBF00000000B8D277BF00000000980A9B3F00000000228499BF000000604D67C3BF00000000C960AFBF0000008023F7BB3F000000A09F69CFBF000000E080DEC93F000000C040EACB3F0000006099A5B83F000000A09A79C23F000000802AB9BB3F00000060B7D0B33F000000005C8270BF000000405717B1BF000000C0FF2ECBBF00000080B0ACA2BF000000C064C0A23F000000003EB5713F0000000094E3A53F00000080DCD19CBF, NULL);
INSERT INTO `student_encodings` (`id`, `student_id`, `encoding`, `created_at`) VALUES (95, 10, 0x000000A05F80B4BF000000C0C0E5A53F000000C0818C7EBF000000804FE6A4BF000000801136B7BF000000009DAA8F3F00000020C94FB1BF000000407C5CABBF000000004977BA3F000000C0C37AC4BF000000A0E138CC3F000000C09D54B0BF00000080CAE7CABF00000040CE22ABBF000000201585A3BF000000C00A62C33F00000080763AC4BF000000200626ABBF000000803E1092BF000000806E02AA3F000000400FC9C23F000000800DA14C3F00000000C8078BBF000000403EE9A53F000000A044CCB2BF000000403043D8BF0000004090B9C6BF000000601181ADBF000000606B2C9E3F000000C070F7BABF000000A01428B0BF000000C0BB72A1BF000000A097E5C0BF00000000242573BF00000000D09C543F000000806131AB3F00000000BFB09BBF000000E02C92B2BF000000C039A7C63F000000E07708A73F00000040AB7CC8BF000000005402A73F00000000583F963F00000000402FCE3F000000C06F15C13F0000000020ACBD3F000000C0E865933F000000007F09BEBF00000080FC7ABD3F000000E09889C5BF000000A06BD8983F000000E068F7C13F000000A0F4F8B53F000000E002DDB23F00000000029E92BF0000008045EABABF000000406781B33F00000000736FB53F000000404F55C3BF00000020B4EE9B3F000000A079A1AD3F0000004084FFB6BF000000E01F709C3F0000000080D25CBF000000603B46CB3F00000000A44CA13F00000020781ABCBF000000209982C4BF000000805CB8B53F000000A0CACDC6BF000000A0D647A0BF000000207C62973F000000808232C3BF00000000C3A3CABF000000E03D8AD0BF00000000D24BA53F000000808442D93F000000A0F120C43F00000040E004C1BF000000402B65AD3F0000002068DEB3BF00000040D40FA6BF000000209D58C33F000000C0E03EC33F0000000004A988BF0000008095C393BF000000E01352BCBF000000007AC3A73F0000004064E1CC3F0000008066D6BCBF000000401E7EA23F000000808F85CD3F00000080449B833F00000040CFB9BE3F00000020765979BF0000000090777A3F000000E0DDFDB8BF000000E05754A53F000000C0E5878FBF00000080D08E913F000000C0E8C4A83F000000601365B0BF00000000F1D1983F000000203A67BB3F000000404F08C8BF000000E0E5DFC13F00000000CEED9ABF00000000D72383BF0000004007FDA63F00000000B8066B3F000000A0C8A8C2BF000000406AEFB2BF000000800457BB3F000000805FEECCBF00000060FF0EC43F000000C0A29ECB3F0000006072ADB13F000000E00C34BE3F000000805F40C13F00000000DDB3BC3F0000000018FC7EBF00000000A27A9BBF000000A0F7B0CDBF00000000B0A91DBF000000409742B33F000000001BC4873F00000000B522A93F00000080ACE5A6BF, NULL);
INSERT INTO `student_encodings` (`id`, `student_id`, `encoding`, `created_at`) VALUES (96, 10, 0x000000404C2AB8BF000000004D78AF3F00000060C337B73F000000407E09A6BF000000E00549B3BF000000008EA0723F00000000FEC3BDBF000000C077B0ADBF000000E0353AB93F000000C0936AC4BF000000209E90CC3F000000A0C9DAA5BF00000000DA27CBBF000000C0C2F4A0BF00000000392B93BF00000080D9C2C43F000000C05C70C8BF000000C0A3B99BBF000000A0196E953F0000000072A4973F00000080E7ABBB3F00000040E1BF7C3F000000C06B3C943F00000000F4D2843F000000C06E30BCBF000000209D34D6BF000000807CF2C2BF00000040840CB2BF0000004018AA813F000000005670B5BF00000080CB1EB1BF0000000088E961BF00000000806CBEBF00000040B9C1913F0000000082E690BF000000609246B73F00000080A26399BF000000003BCCA0BF000000E03050C43F000000607BE6A63F000000402F89C9BF00000000F6C5953F00000000B02851BF000000C003CFCC3F000000C020FCC23F000000C0BFA7BD3F000000E0B9FC763F0000004014B1B9BF00000080C1A7BB3F000000C037EACBBF000000C07163AD3F000000000B1CC03F00000080118EAE3F00000000362DA53F000000806317933F000000409DEABEBF00000080699DB63F000000C0AED8AA3F00000080E367C6BF000000608ABDA53F00000000F079B73F000000C08662BCBF00000040B1A0A03F00000080C9E3A13F000000402FCBC83F000000C06FA5B33F0000004052B6BABF000000407644C2BF000000405E17B53F000000803455C1BF00000060F02FA3BF000000E0A2A1AD3F000000C09BF0C0BF000000605DECC8BF0000000094E0D3BF000000008F80973F000000604A30DB3F000000203EE7C03F00000040F157BEBF00000080DD55A53F00000080B6B3B1BF000000A0A47EAFBF000000806B57C53F000000C0ACF1C13F00000000B2FAA1BF000000002CFB9EBF000000E0E56DBCBF00000000FFB3AE3F000000E0AE87C63F000000607CA8BABF000000C011A6863F000000E07C0ACC3F0000000050B7513F000000A04D72BF3F000000C0C7D392BF000000C0A062A93F000000403E83B8BF000000801CA5A73F00000040243BA7BF00000000967782BF00000080E2EAB43F000000E005CBAEBF00000000B0A0973F000000A06020BF3F000000C0D948CABF00000000C2F1BF3F0000000053AC8EBF000000C013D499BF00000080142BB03F00000000C5FF933F00000040A3B0C4BF00000080804CB0BF000000C019B2BF3F00000000E3CCCFBF00000060D7FEC03F00000040386DCD3F000000A03B86A13F000000806747BB3F000000201965C23F000000C0E801B83F000000001DED81BF000000007B1CA5BF000000A0F5B3CABF000000C09BEB84BF000000C0652AAC3F000000802E74903F00000080DE4DA93F00000000E82067BF, NULL);
INSERT INTO `student_encodings` (`id`, `student_id`, `encoding`, `created_at`) VALUES (97, 10, 0x00000060243BBFBF000000E0CE22B53F000000A05BB2883F00000000FC66B2BF000000C0910AB4BF0000000008A89DBF00000020F6E3B4BF00000080C652BEBF00000040F3E5BF3F00000080F19CC6BF000000205899D03F0000000033CEB2BF000000C00D09CBBF000000209091BFBF000000800176A5BF0000008033E4C33F000000008FD2CABF0000000076F6B9BF0000002011BC7E3F00000000E5D48D3F0000000092B5C43F000000C022DD6ABF00000000806E0E3F00000000618AA83F00000000D83AB9BF00000020640CD9BF00000000E06BC3BF000000202D92B6BF00000000170A793F0000008017BBA5BF00000040D90DA8BF000000804A8A9DBF00000080EDEEC5BF0000004090DFADBF0000000070174ABF00000020C367B73F0000000004B271BF000000E02AACB2BF000000A057AEC33F000000C07F329FBF00000080728BC8BF000000802B16AE3F000000202A55A83F00000060AEEAC93F00000080A467C33F000000400021B93F00000040EBB9953F000000002474C6BF0000006055C4C23F000000A08F2AC3BF000000209AD7823F00000080A163C03F00000040D4E1B03F00000040F5F9AE3F0000000002E988BF000000200D1CBBBF00000080F476B63F00000040BC92AE3F000000E02D5DC8BF00000000DCFD57BF000000204C6CB33F00000060E4ABC0BF000000C0E031913F00000080DC0E99BF00000020B0DBCC3F000000400C6BAA3F000000208E2DB9BF000000000DAEC8BF000000A0FD9BC13F000000C036DFC7BF000000001E52B5BF000000E0B904A63F000000405F82C2BF00000080E688C7BF000000C0AAEAD5BF00000000B9369F3F0000000005A4D93F00000020A163C23F00000040EF9FBFBF000000C09F1FB63F000000E0D842AFBF00000000E59983BF000000803A82C43F000000806FA4C53F00000000C85551BF000000008E7786BF000000A021EABFBF00000080BD0DA53F000000204C36CE3F000000C0D76EB5BF00000040153DA0BF00000060396CCC3F000000806D368B3F000000000D35C43F000000E04011A83F000000806739A13F000000E06B1BB8BF0000004062E1A53F00000020A029B4BF000000804256AD3F00000000C8F3A73F00000060D0CF98BF00000000703A763F000000800FE4BB3F000000C0BF71C0BF000000A01E4BBA3F000000C070C7A5BF00000000894881BF000000001A9876BF0000000072C39BBF00000060EA10C0BF000000801EDBADBF00000080487AB63F0000004043D0CDBF000000202FE3C93F0000004005BBC83F000000404E92BB3F000000C0CEE3C33F000000201548C33F000000206655B23F0000000048EB90BF000000002225A8BF000000E0821FD0BF00000040BBCB9BBF000000E06160B63F00000000C0FA463F00000080E392BD3F000000809E2688BF, NULL);
INSERT INTO `student_encodings` (`id`, `student_id`, `encoding`, `created_at`) VALUES (98, 10, 0x0000000068B4B9BF000000008CC0B13F000000A0499E9A3F000000C0A913ADBF000000E04BCDB5BF000000000D4283BF000000204B15B6BF0000004075C9AFBF000000200999C13F000000C08F93C6BF000000007F9CCF3F000000605E8FAEBF00000000FE96C9BF000000A0BA5BB9BF000000C07A37A1BF000000602685C23F0000000005F2C7BF000000E04767AABF0000008004E2693F00000080CA9BA23F000000008A99C13F0000008061628DBF00000000FF4198BF00000080DB22A93F000000400916AEBF000000C024E4D8BF00000060EECAC4BF00000020E632AABF000000005A9D9D3F000000407617BEBF000000607E9AB0BF00000000EA3FA0BF000000C0EF47C2BF00000060A465AEBF0000000020BB71BF000000806DA3B53F000000C091E6A6BF000000008417B1BF000000806283BE3F000000005F1C91BF00000080E8C8C3BF00000080C256A03F000000808715943F00000020AA25CD3F000000C01CC9C33F000000C0984ABD3F000000404549593F00000000CF59C0BF000000A058B5C03F000000C00EABC9BF000000E0C81F8E3F000000404323C03F00000060B76DB23F0000006058E7B33F000000C077CB973F000000E06CA8B9BF00000080A194B43F000000C0F862B03F000000A0E92FC5BF00000060C8C09E3F0000002046D9AD3F00000080AD9EC0BF0000000084FD4FBF000000007C79733F000000E0702BC83F00000080CC8BAE3F00000080FF11B7BF000000405726C9BF00000020BF8FBF3F000000A0E9A3C6BF000000C04A36A8BF000000802C7EA23F00000000D0C2BDBF000000E07CD3C8BF000000C0D2ACD2BF0000000037D0A13F0000000059CAD83F00000000A077C53F0000008021EEC0BF0000004039E9AB3F000000C088B9B4BF00000080A68291BF000000C04F74C13F000000800A0FBF3F0000000088A25D3F000000404825AABF000000A0D2CCC1BF0000000084D3AB3F000000C0173DC73F000000003CCAB8BF0000008048FE773F000000E0BCDCC93F00000080E30F8B3F00000000AA21BE3F0000000049F6923F000000C0DC6EA13F0000006078F3BBBF00000080AE65AD3F000000C0A4E9B0BF000000803431923F00000040583FB73F000000805D6AA7BF0000000016B1863F00000000E2B2BD3F0000004097B8C3BF000000001399C23F0000000021BA99BF00000000EAB984BF000000007095A83F000000003EBA84BF000000408DEAC2BF000000804DB1AABF000000C0D7C0B83F0000004017D4CFBF000000408F98C83F000000C016B5CA3F000000A007CCB43F00000080642EC23F00000040FFD0BB3F000000205406B73F000000004030333F000000404C90B0BF00000040B63ECABF00000040ED22A5BF0000008082679B3F00000000F372973F00000080ACB2A13F000000A0BE2DA2BF, NULL);
INSERT INTO `student_encodings` (`id`, `student_id`, `encoding`, `created_at`) VALUES (99, 10, 0x0000006069A9BCBF000000A0F07BAB3F000000409EE386BF000000C037F6B3BF00000060C881B3BF0000000052288ABF000000A04E22B1BF000000C07644B8BF00000000E965C53F00000020CCC2C5BF000000C05AC6CC3F000000804278B4BF000000608CCDCBBF000000E0CA28BDBF000000A063D7ABBF000000E01AAEC33F00000000F157C9BF000000204BEFB7BF000000E06D81933F00000000ED558DBF000000003920C33F00000000CA9A7EBF000000007BFDA0BF0000004022E5AF3F00000000A36EB3BF000000800503D7BF000000C0BCFEC2BF000000C02B4BB4BF000000005B8D8E3F000000805483B3BF000000C05F55AFBF000000007A0690BF000000002B5DC7BF000000006E93B7BF00000000BDAF863F00000000BB9FBC3F00000000A85C7EBF0000000043B0B1BF000000A03757C13F0000002006A1A0BF000000603EF7C2BF000000001C3DA93F00000060D6E0B23F00000000D458CA3F000000E0D660C43F000000E0B1BBBB3F000000A0DD8C96BF00000060BAB3C6BF00000040E643C13F000000C0DB22C3BF00000020C5D16BBF000000408403C23F00000060B0DCB03F00000080D22CB53F00000000998C92BF0000006075AABCBF000000802470B53F000000C0C5B6AE3F000000A02FDBC8BF0000000000C86DBF000000E0E279B43F000000A0F0CCBABF000000009C8D553F000000007FA791BF000000C0AF30CD3F0000006041C1A73F00000000E48DB7BF00000040BB6FCBBF0000002080E5C23F00000040D428CBBF00000040882EB6BF0000004011F7963F00000040166EBEBF00000080E3D9C6BF000000007AEBD3BF00000000CF2E9C3F0000004066CCD73F000000E034C5C53F000000803787C1BF000000206BC3BA3F00000040E66FB7BF000000003D7296BF000000606016C43F00000000225AC03F0000000024808B3F0000000038C285BF000000801681BDBF00000000CC8E8B3F000000E08AC2CC3F000000C05008ADBF00000060A2AE89BF000000A0E60DCA3F00000040A26D9D3F000000805FEFC03F00000020B475AC3F0000000085FA913F000000A040E3BBBF00000000B251A43F000000E0D169C1BF000000001618833F0000008023BE963F000000A0421597BF00000000B2E48C3F000000006371BD3F0000004024D9C2BF0000000021C3C03F00000080E65992BF00000000BC319EBF00000080020090BF00000000C07392BF000000C0C6ACC2BF00000080F7DDA6BF000000C04AE3BC3F000000208365CFBF000000E03EF4C93F00000080B112C73F0000000007C4C03F00000040BEA2C43F00000060CDA3C33F00000000364DB73F00000000D89677BF00000040E5FCACBF000000A095FACDBF0000000098EAA1BF000000006F7EAF3F0000000060CD75BF00000000BA49BC3F00000000505973BF, NULL);
INSERT INTO `student_encodings` (`id`, `student_id`, `encoding`, `created_at`) VALUES (100, 10, 0x000000A01502B3BF000000C010D3A63F000000601FA27A3F0000002034A6A7BF0000002085BFB2BF000000008EAF7EBF00000020E8C1BABF00000020CAC6B4BF000000E0E5F6C23F000000606436C5BF00000040BC48CF3F000000A0C372AFBF00000040A03DCCBF00000020C614B5BF000000608EFCACBF000000E0632BC33F000000C0E4C1C7BF000000200BB7A5BF00000080EEA0913F00000080C8AB983F00000080182FC23F000000801E538FBF00000080FFB586BF0000008026F1A33F00000060DD30B2BF000000002E68D7BF000000605FB1C7BF00000020A6CBB3BF0000004060A8963F000000C074D4B9BF00000060E9ACB3BF00000080D85995BF00000000DF92C3BF000000C00960B2BF0000000024CA6FBF000000A03BEEB23F000000005733A8BF000000007B58B8BF00000060179DBF3F000000A08BBF863F0000000053EAC1BF0000008080E5A53F00000000301D6EBF00000040CE2ACA3F000000808665C53F00000080CE83C03F0000002063F0713F000000A0172FC3BF00000060FA19C03F000000A0856DC8BF00000020A1B7833F00000080FDC2C03F0000008059D8B53F000000402DEFB43F00000000B0EC52BF0000004057AFBFBF00000080A447B63F00000000ACC8AD3F00000000BF11C6BF000000C0FBED863F000000408385B03F00000060E519B9BF0000002096C69C3F00000000E4B8673F00000000BB0ACC3F000000804263B33F00000080B916BCBF00000080802BC5BF000000406BDCC03F000000E0FB9CC5BF00000040CFD7ABBF000000804AE4843F00000080423AC1BF00000080827ACBBF00000040F4C4D2BF00000080C23BA73F000000C06D2CD93F00000060C62CC53F000000809415C4BF00000040F16EA93F000000E0AEFBB5BF0000000058986DBF000000603792C33F000000409E27BF3F000000001237603F0000008044E9AEBF000000A001AEC0BF0000000080403DBF000000E0FB65CA3F00000060484ABBBF000000A079AD99BF000000403777C83F0000008072C682BF000000408277C13F000000C06A9EA43F0000000086FBA13F00000020AAA3BDBF00000080DDD9A83F00000080FD64B4BF0000000031B1953F000000C0B714AB3F000000801310A5BF00000000746289BF00000060C065BD3F000000403CCCBDBF00000000127FC23F000000000C7E96BF000000802E8BA1BF000000001F7C883F0000000030939EBF000000C022B4C6BF000000801986A2BF00000040ECAABD3F00000080F125CFBF000000009838CC3F000000201248C83F00000000B5D5B63F000000006EF3C43F000000408936C23F000000E0107BBC3F00000000707595BF000000802287A8BF000000A055CCCBBF000000E0C4F2AFBF000000407BD7AC3F00000000A7899B3F00000000108BB03F000000C0CB9BA5BF, NULL);
INSERT INTO `student_encodings` (`id`, `student_id`, `encoding`, `created_at`) VALUES (101, 11, 0x000000C08229BEBF000000A0BCB3B43F00000060E2D6833F000000E067D7B5BF0000000083B7B5BF00000000E455ADBF000000804B1AA4BF00000040BCD2C2BF000000401419C33F000000A048F9BBBF00000080569DCD3F000000E0F257B3BF000000808503C6BF000000C06A56C4BF000000602BE3AFBF000000403396C53F000000004E5EC4BF000000E01871BDBF0000000003EF613F0000000058E76EBF000000A018A3BD3F000000000AB3A7BF00000000E95391BF000000806464A23F00000000644FB3BF00000080F465D5BF000000A02F54C2BF000000A05A63B6BF00000040AA60A23F0000000088C9A5BF00000020A161A9BF000000607C88B63F00000040D51CC9BF00000040A4CFBBBF00000000C082263F000000C06823BA3F0000008081159EBF000000201C8EB1BF00000040610BC13F000000E0DECAA9BF000000E02202C1BF00000000909898BF000000C06E09B63F000000E0CAA0CE3F00000080B90FC83F000000C0BE6AA43F00000080B14CB33F00000000830DBFBF0000006002B1B33F000000C04C4FBDBF00000020074A8D3F00000000887EBC3F0000008014FABB3F0000000075C0B93F000000803C79983F0000000000DBC1BF000000005720B03F00000040B624B83F00000080C281C3BF00000000BFE4A23F000000C007BAB33F0000008029FDB1BF00000000228CAFBF000000200883B3BF000000200A02D23F000000C0E112B03F000000A04828BBBF000000401C79C3BF000000204520C73F000000C016B2C1BF00000000F562B1BF000000008CE58FBF00000080A3C9C5BF000000406C51C8BF000000E08E29D1BF0000000048B6A53F00000060005FD43F000000009511C53F000000400B2DC7BF000000C08AADBD3F000000C0ABD0A2BF0000000024C090BF0000008049D4BF3F000000609308C43F0000000064D6603F000000C0ADF4AF3F00000040B8CCAFBF00000000D86D8C3F000000207E4EC83F000000C09B65B2BF000000A0AB27803F000000208954CB3F00000040DD8192BF000000001B85A43F000000E05673973F000000000F8DA4BF000000005CE2A1BF000000609C4FB43F00000020BB59BEBF000000007644913F000000407CBFAE3F000000604825B6BF00000000B0C6643F00000040144AB63F0000006012FABFBF00000060E7FBBA3F00000000802A303F000000C09027B03F0000000060229FBF000000408ABFB3BF0000008086E5BABF00000080D2D2A2BF00000000D428C13F000000C00DA3CABF000000804ECACC3F0000008045B1C53F000000C0A601AE3F000000E0EC0DC43F000000C057A3C13F000000405F1FC03F00000040ADA0AC3F0000004009F3A5BF00000080DFF1C7BF00000000DD267B3F00000060770EBC3F000000402EBFA7BF000000C019D4B33F000000C096669B3F, NULL);
INSERT INTO `student_encodings` (`id`, `student_id`, `encoding`, `created_at`) VALUES (102, 11, 0x00000060A838C0BF00000000B0AAB13F00000080188683BF0000006014BCB8BF000000E073CEB2BF00000080FE2AA2BF00000060DBCFB2BF000000A09882BEBF000000C07B3DC93F000000C0DF97C1BF00000000B2FACB3F000000C021D1B3BF00000080F7D0C4BF0000000022B8BDBF00000000783FB4BF000000A0E171C63F00000000398BC4BF000000C01311B9BF000000406F4A823F000000807AAF95BF000000A0330EC03F0000008045B0A5BF000000601D27A5BF00000000691CA63F00000060C378B7BF000000C052E4D4BF00000060F4FFC1BF000000E0535FB6BF000000204D95943F00000080C70FB3BF00000020C790A0BF000000407255A73F000000E0913AC9BF00000040C2AAB6BF0000000083B587BF00000020D39BBA3F0000008028EE97BF000000C0082CA7BF000000400B61C23F000000A0347099BF00000000A8EBC2BF000000003749A4BF000000404C64A33F000000C074B6CD3F00000040FEE9C43F000000E04CB49C3F000000805D45A13F000000E06405C1BF000000609E2AB43F000000407D9DBEBF000000E056E6823F0000008077A3BE3F000000007EEBB73F00000000F647B73F000000C0CDBEA33F000000800369B8BF0000000000E7A63F000000E0E2CABF3F000000C0ECF4C1BF00000080CF80943F00000000449FAE3F0000006010FAB3BF0000000004B3B0BF000000C01FEDB3BF00000060A382D13F000000E088A9B23F000000805DDEBBBF000000601E12C6BF00000040B431C83F000000A02428B9BF0000004069F0B1BF000000001E47773F000000207FEBC1BF000000C08D75C9BF000000607185D1BF000000803D02A73F00000020D9B5D53F000000802539C03F000000C027D5C6BF00000060F660BD3F00000060B5CFA9BF000000C0214DA9BF000000603626C13F00000000A17DC23F000000802A0CA23F000000806587A33F00000080C1C793BF00000080D2F5A53F00000080C0EBC73F000000A06DDFB4BF0000000026AB803F000000C09482C53F00000000C808ABBF00000000AD9DB03F000000A0EFA88DBF00000000C72892BF00000040E3CBA6BF00000040E48BBB3F0000002080E5B8BF00000080E891953F00000020C8BFB63F000000401DCDA0BF000000009C887D3F00000040C403B73F000000809A89C0BF00000020D3B4BC3F00000080F7959E3F0000008091CC973F00000000EA6A85BF00000000586BA9BF0000006068B6BFBF0000000029B199BF000000C067DFC33F00000000E79FCEBF000000C02475D03F000000409B93C43F00000080AC29A73F000000A035DAC13F000000E0D4DEBE3F00000020A560B73F00000060119BB13F0000004097E4A7BF00000000EC78CCBF0000006051B5883F00000080E520B93F000000C0C5BBA5BF0000000050E4AA3F000000006151713F, NULL);
INSERT INTO `student_encodings` (`id`, `student_id`, `encoding`, `created_at`) VALUES (103, 11, 0x000000A04CE7C0BF000000007593B93F000000C04A197E3F00000060769ABBBF00000040C4EBB5BF00000000620D70BF000000406657ADBF000000C08D3BC0BF000000A0220CC83F000000E08DABB4BF00000080567ACB3F000000800845B2BF00000040AF1FCABF000000608C59C2BF0000008050CAAABF000000004736C93F000000A0E373C7BF0000008046E2C1BF0000008059E5903F00000000D08E87BF0000008026B5C03F00000060957CA2BF0000000032AA90BF0000004017FFB03F00000060AC65B8BF000000206C02D4BF000000A019EAC0BF000000001C11B6BF000000806452A03F00000000F481B6BF000000A011FDB4BF000000C0B37EA03F000000C09E75CBBF00000000D285BBBF00000000745C9EBF00000000F305B83F0000000056DF74BF000000409EEEB6BF000000008BDBBE3F000000E08E3B8ABF00000040A67DC2BF00000000800270BF000000C0C586AA3F000000E0071ECB3F00000080502AC63F000000E0A9C6AA3F00000040E69AAE3F0000000013BBC1BF000000001919B33F000000602FBDB9BF000000405622863F000000007420BE3F0000006093A9B63F00000000F38DB53F00000000B58D8BBF00000060904EC4BF000000008402993F000000605789B93F000000405808C1BF000000E04027A03F000000803F7AAF3F000000C0EF4EB3BF00000000E9E5A5BF00000020A512B7BF000000C065DDD13F000000606084B23F000000E0A40CB8BF00000040D096C7BF00000060DAFEC43F000000E0D361B3BF000000C0CB11B9BF0000000050323C3F000000000CE3C5BF00000060A6E3C3BF000000408EAAD2BF000000004E35A93F00000020310BD43F00000000BD29BA3F000000E0D995C9BF000000E0FFC7B93F000000804980ADBF00000000203E76BF000000209259B63F000000C0CFB6C43F0000000075DA74BF00000060CA23B33F000000C0F47AB6BF00000000C46C963F000000C0DCA6C73F000000605D56B2BF00000020FF26853F000000802235C93F000000C0A17F91BF000000A0A0EEB53F00000080965A953F000000803939953F000000E0F8E6B0BF00000040EC86B63F0000008097FCBABF000000808E2091BF0000008051A4B63F00000060C1E399BF00000000ECD7873F000000401C32BC3F000000E03D41BBBF0000000012BDB83F00000000C32C883F000000A06AD3A33F000000809E01ABBF000000007E2DADBF000000C05189B6BF000000809E1EA1BF0000002053D3C03F00000080BF6BCABF000000A056DCCB3F000000603C07C63F00000080EFA3AB3F000000C09AB9C03F000000802C30C13F00000000E02EC03F000000007EB5943F00000000DB9895BF000000003423C9BF000000A0E17D963F00000080FBD4C03F000000005121A0BF000000C06823B93F0000002018CFA73F, NULL);
INSERT INTO `student_encodings` (`id`, `student_id`, `encoding`, `created_at`) VALUES (104, 11, 0x0000008071C9C1BF0000004051A6B13F000000408ECD9B3F00000040F7E1B7BF000000C07FFEB3BF000000A049FAB1BF000000C016BBA9BF00000020BA6FC2BF000000002711C63F00000020914ABEBF00000000F071CC3F000000403F8DB6BF000000C091CCC2BF00000040F050C1BF000000608D97B0BF00000040A083C83F000000804AA9C7BF0000006059AEBEBF00000000B8E695BF00000000B02669BF000000007634BC3F0000000057C0ABBF0000000026DF81BF00000000CC2AA13F000000A0F68FB1BF000000C09FFBD4BF000000A00131C0BF00000080789CB7BF000000A0FA649F3F000000009A25ACBF000000E06A05AABF000000C0F50DAD3F000000C0D100CBBF00000000D76ABEBF00000000208C473F0000004070F8B73F00000000904975BF000000E031B9B2BF000000E0DFD9BD3F00000060D84EABBF00000080F165C8BF00000000E040443F000000C02792B03F000000804909CB3F000000C099F5C63F0000004058E7A83F000000E0B2A5A23F00000040766AC1BF000000807706BC3F000000A0FD06BEBF00000080720A543F000000E0169BB83F000000003BEBB53F000000A0624CB53F000000003302983F000000E01E02C2BF000000807703B03F000000006DA5C03F0000002085B7C2BF000000404F4C973F00000060B7E1AD3F00000080C868B5BF00000080D3A38EBF000000207F25B0BF000000800D17D03F000000400C0EB53F000000002FA9B6BF00000060D1C3C2BF000000C0211EC53F000000E0972BB7BF000000E0FFEEA4BF00000000E22D65BF0000000033BFC4BF000000400903C9BF000000009335D1BF000000009CC9913F000000C06C08D53F000000A024F6BD3F000000805531C6BF000000C098D6B83F000000001CDAA7BF0000000050DF413F000000C057BFBE3F000000004285C53F000000000427773F000000E04025B13F00000040271FA8BF0000000044E4753F000000203480C83F00000060BFC7B3BF000000C051F9843F0000004089A9CA3F000000002758A8BF000000401DCEA43F00000000CCCD5B3F000000002F8C9BBF00000080EE81AABF000000A0C343B63F000000A0BE76BDBF0000000098427DBF0000008043BCAF3F00000040B9B9A8BF000000007053643F00000020109EB43F000000A03A57C2BF000000400190B13F000000002D36803F000000400F34AF3F0000008057D0A1BF000000000A2AAFBF000000C0542BA7BF00000080E331A0BF00000040667CBC3F00000000A8B4C9BF000000A0711DD03F000000403154C93F000000E0ACE7A83F000000208FA6C43F00000040DAA2BD3F000000E029A2B43F000000000B09AC3F000000002514A3BF000000208417C6BF000000408885973F00000040682CBF3F00000000582693BF000000C0942FB43F00000040448A943F, NULL);
INSERT INTO `student_encodings` (`id`, `student_id`, `encoding`, `created_at`) VALUES (105, 11, 0x000000402E91BCBF000000C0437ABF3F000000E00B5E903F000000003B3CB4BF000000C0F5C3B6BF000000E0E0CDB1BF000000E0381CA4BF000000C0E6E3C0BF00000040EBCDC43F000000E08273B4BF000000006EF7C83F000000C0B9B7B9BF000000602777C1BF00000060ACD9C2BF00000040B78AAABF00000080CC54C83F0000002000E9C7BF000000400D0EBFBF000000A08FEA90BF00000080547495BF00000040DE15BB3F000000C0361BAFBF00000000676E7C3F0000004002EAAE3F000000A071D7BCBF00000060BC1AD4BF000000A0FD0FBBBF00000000C0DDBDBF00000020A240993F000000807008A8BF0000008044D79CBF0000008027D39E3F000000C0E47ACABF000000C031F3B8BF00000000DB4D8EBF0000004087ECB33F00000000C8B653BF000000C08215B4BF000000C0F534C13F000000A08511A9BF000000C0004DC6BF00000000118893BF000000803F6DB23F00000080AC18CD3F00000060744BC53F00000060E09FA43F00000040D9AEAB3F00000040344ABFBF000000E0D929BE3F00000020F943BDBF00000000F77E72BF00000060BB94B93F000000409F44953F000000401B80B53F00000000E4B1A33F000000A02809BCBF00000080D07FB23F00000060F169BD3F000000604AF9C2BF000000E07B27953F000000803665AF3F00000020716AA7BF000000009B10A7BF000000804129B5BF000000C00789D23F00000020AB58B63F000000801891B6BF000000607F93C5BF000000601478C13F000000E037C8BEBF000000A01FDDB4BF00000000A848853F00000020B8DDC0BF00000080AA56C3BF000000007AE3D3BF00000000B8798A3F00000020DC4AD43F00000020637DBE3F000000A081C7C8BF000000409A59B33F000000801280AFBF00000000764E723F00000080AC5BC43F000000C0F002C33F00000000BF0B823F000000C0D803B13F000000E087D0B6BF00000000A0B289BF000000E06F12CB3F00000080E7D4B6BF000000405974673F00000040BA8DCA3F0000004044C199BF000000C0471AA13F000000404D9791BF0000000084F88CBF00000020864FB7BF000000602AE1B83F000000804DACBCBF0000000020875FBF000000804C95BE3F000000E06F3094BF00000000583183BF00000000799BB73F000000606775C3BF000000C0A046AF3F00000000D00B8F3F000000403970A83F000000C01546A1BF00000080C414A8BF000000802958BCBF00000000E776A7BF000000A07967C03F000000601989C9BF00000040EF1CCF3F000000004D3CC63F00000000B2B39C3F000000407A32BE3F000000807A81C13F00000060908AB43F00000000C952963F00000000B2669DBF0000004091C7C3BF000000A0D79E883F00000080A52EBE3F000000003EE89FBF00000040CBECB03F00000080B26B8C3F, NULL);
INSERT INTO `student_encodings` (`id`, `student_id`, `encoding`, `created_at`) VALUES (106, 11, 0x0000000010AAB5BF00000000A3BAB03F00000040D97CA73F000000007132A5BF00000040B281AABF00000040D24B95BF00000080A5BD81BF000000E0A4FBB8BF000000403221C93F00000040AF88B9BF00000040F0D7CD3F000000804D73B3BF000000404D69C7BF00000040962FB9BF000000C078FFA4BF000000A02F2CC53F00000020D619C8BF000000C0F28EBBBF0000006082268B3F00000000F4DC743F000000803EAAC43F000000E0030E98BF000000C0D609963F00000040717FA13F00000040DC48BBBF00000060A6A4D7BF000000405064BDBF000000001794B6BF000000C043CBB33F00000000AC3EADBF000000E0C3B3ADBF00000000872AA83F0000006077A6D0BF000000C0CB2FB5BF00000000D694A7BF000000001AFCB13F000000003C188FBF00000040A1CDAFBF00000080F27AC33F000000406FCE85BF00000080C7EFC9BF00000000D60291BF00000080D7109B3F000000A0E860CB3F00000080AE75BE3F00000020C851B13F000000807A95973F000000C0B37FB8BF000000C0D271A33F00000040E9B9BCBF000000006086953F000000205E63C23F000000C01682B83F000000C00AC7B03F00000000ED3988BF000000E09194B8BF00000000E27E943F000000403337BE3F00000000ED40C6BF00000080EDD5A13F0000000072DBB23F000000808271ABBF00000020478D903F00000080E8B3B2BF00000060FF15D03F000000404048A83F000000E0F145B4BF000000E0189AC1BF0000002026F8C03F000000007D30BCBF000000C0E567AABF000000009518873F00000020171EC1BF00000080790BC8BF000000808CEBD0BF00000000C1519C3F000000004D21D43F0000004097E5B33F00000080C1B6C2BF000000009CF0B73F000000A0435DB2BF000000600F7AACBF000000E09F6BBC3F000000C07F09C23F000000809266833F000000408BA2B73F000000A08F5CB3BF000000003E3AA53F000000806C13C93F000000E07659B4BF00000000DDCFA33F00000040191FCD3F0000004074B7ADBF00000080631A9E3F000000C08C9B9BBF000000004B0A88BF000000003BA9B3BF000000C09B4DBC3F0000000027E6B9BF00000000341A7EBF000000204388AA3F000000C0A29F9EBF0000000090E071BF000000003658B93F00000020B7E5C5BF000000E0DEE6B23F00000000A00E7A3F0000000076A47F3F000000004C8C963F000000003AD9A4BF000000E0B3FFBDBF00000080A8A7B6BF000000008290BD3F000000C0D3CDCBBF000000602416CB3F00000020C828C73F00000000F081A13F000000408FF8BE3F00000080AECFB83F00000080E25BB93F0000008029C99F3F000000001F86A4BF000000C0332ECFBF00000040D93D993F000000C0E449C23F000000C0B5D8A8BF000000005D1DAF3F00000000BAD57A3F, NULL);
INSERT INTO `student_encodings` (`id`, `student_id`, `encoding`, `created_at`) VALUES (107, 11, 0x000000406847BFBF0000008012DDB23F00000020553987BF00000040D70BBDBF00000000FAAEADBF00000040F71AA4BF000000C096C7A7BF000000009B4DC0BF000000E069B4C73F000000C0D2CBC1BF000000C0BDA7C93F0000000086D6B6BF000000007086C7BF000000A0FDA9B2BF00000060B83EAFBF000000804BD2C63F00000080CD9BC7BF000000001F9DBEBF000000406319AFBF000000008EE594BF00000040D6A1C03F00000000200DA7BF00000080406F9DBF000000C04597B03F000000006B8EB6BF00000000F9EFD4BF000000E0DCB8C1BF00000020615AB8BF000000209E9B993F000000006CC0A7BF00000000B8E5AABF0000000072F7963F00000060EA4BC8BF00000040EE2FB9BF00000000CF6291BF000000A0A038B43F000000808F779BBF000000A09E26B7BF000000403A63C43F000000E0C6729ABF00000080E954C8BF0000000080056C3F0000000037B1B13F000000C036ABCD3F000000409096C73F000000A0F7C9B03F00000080EF88A03F000000403007BCBF000000E0F8C0C23F000000E09E7EC6BF000000C0AB2B983F000000C094DCBD3F00000080C4B9B73F00000020A893B93F000000C00382A43F000000201241B8BF00000000CF88A83F000000E0A12AC43F000000E0D608C4BF0000008012C4A63F000000E0DCD1B03F000000C055CAB5BF0000008009599FBF000000403E4DB6BF00000000D78AD13F000000C054AABE3F000000002A25BEBF000000A02126C0BF000000E09826C83F000000C04717BCBF00000020D415B2BF0000000028186DBF000000C09534C4BF00000040E688C8BF000000A069EECFBF000000803248A23F000000C0A7BDD73F0000008088B5C13F000000801434C4BF0000004046A8B53F000000C02023AABF00000000195A8BBF000000202EEAC23F00000060EC35C43F000000005085873F0000000026689B3F000000C09D47A4BF00000000AD87953F00000000BA3BCE3F00000020EF11B3BF000000E0ECEF51BF00000060AEAACC3F00000040DE089DBF000000402D4BAA3F00000080CE8D5ABF000000007E31803F000000801A82B2BF000000A0AE19AA3F000000E08F78BEBF00000000DEDA7C3F000000600F0EB53F000000C0E8588CBF00000000B0787BBF000000C032B2B53F00000080C5CCBCBF000000A09F09B93F00000000608A703F000000402FBDAC3F0000000098F074BF000000800B8DA4BF00000000E229B4BF00000080D0E1A9BF00000040D458BE3F000000C0B861C8BF00000020AEFCCA3F0000000051A5C43F000000A09BFF9A3F0000000092EEBE3F00000040F27FBA3F000000A033E5B53F00000000B4E6AF3F00000080140FA2BF00000080C59FCDBF000000604F728BBF00000060590BC33F00000000BC68793F000000C05EA1B23F00000000A1B1763F, NULL);
INSERT INTO `student_encodings` (`id`, `student_id`, `encoding`, `created_at`) VALUES (108, 11, 0x000000E06219C0BF00000080958DB03F00000020D04784BF00000080028EB9BF00000000713FB7BF00000000B177A0BF0000004079A7A7BF00000000177ABEBF00000040E63EC73F00000060AC04C3BF000000A081D9CC3F000000C0AEC5B6BF000000207B6FC9BF000000601F09ABBF0000006064A7A6BF000000C09E6DC63F000000C016BDC1BF000000E07344C1BF0000000030BAA2BF00000000C42E79BF000000E0690FC23F00000000783DA5BF000000C0E4AEA6BF00000020E203B03F000000E0EC47BCBF000000802C4ED5BF00000080106AC4BF00000060960EB3BF000000C0AE55973F00000000CEA9AFBF00000020DD0AAEBF00000000AA478C3F000000C0D952CBBF000000C01858B9BF000000009CE68CBF00000080D940B73F00000000C3C79DBF000000601427B4BF0000000011B4C33F000000000C2597BF000000C09AC7C8BF000000008638843F00000000AF9EAA3F000000401678CE3F000000E0ED54C03F000000003B5EB03F00000000E437A53F000000400C72C0BF000000007A5FB83F000000A04F30C2BF000000007B9CAA3F000000C0A97AC03F00000020FEDBB43F000000008BE9B93F0000008041DB9E3F00000080E121B6BF00000000E405A93F000000E0A818C53F000000A028B1C5BF000000C00191A73F000000C031BDB33F000000600D20A6BF00000000E42E8DBF000000E0FF94BABF000000803346D13F0000008091B8B73F000000A0A63ABCBF0000008080B5C1BF00000060C10DC43F0000000018EFBABF000000400FF3B1BF0000000092A66B3F000000609AE7C4BF000000001967CBBF000000A0889DD0BF000000001337AD3F00000020A4DBD73F000000004024C13F000000E089B7C4BF00000020A7B3BA3F000000809CDEA3BF000000E0AAA7ABBF000000C077B3C23F000000A0B251C13F000000806C95A33F000000401971A83F00000020A03CA8BF000000009C53B03F00000000065ACF3F00000040BE07B5BF000000609B5E9C3F000000C0C015CD3F00000080A0BC9FBF000000C000A7A63F000000004D6064BF00000080BA89A33F00000080CF13B4BF000000C07321AE3F0000004096BBB9BF0000000098CE7D3F000000C0CDB3B33F000000E045AD88BF000000002C9F86BF000000408B73B63F00000060CC0FC0BF000000A00666BC3F000000006A3F873F000000E05B60A33F000000804D529CBF000000006FA79FBF000000A09284BABF00000040ED5BB1BF00000080BFBDBD3F000000C0BAB6CABF000000C0A219CB3F000000C09FF8C33F00000080F0F7933F000000408B84BC3F000000E020FCB93F00000000D831B43F000000008CEAAD3F000000408FE3A5BF000000602A32CFBF000000C0A0856EBF000000E03B03C33F0000000098FE6BBF000000C06115B43F0000008048FA913F, NULL);
INSERT INTO `student_encodings` (`id`, `student_id`, `encoding`, `created_at`) VALUES (109, 11, 0x00000000276ABABF000000E03B2FB53F0000004068689BBF00000080228BB6BF00000060A94AB2BF00000060BFC8A7BF000000E0F3D8A6BF000000209E54C0BF000000C0B02FC83F00000080A304C1BF000000C066E5CB3F00000080ED23B2BF00000020DD7CC6BF00000000B665B4BF00000000C25AB0BF000000C0EC18C63F0000008064A7C9BF0000004024B5BBBF000000E06A9F8FBF000000009097773F000000C00671C53F000000E0E09499BF0000008022D490BF000000C04C55AD3F000000C05AD2B4BF000000C083F0D5BF000000200542C0BF000000E05FB3B5BF000000403880A33F00000080886AA3BF000000E0CACBA0BF00000000B9AA943F000000E008B0CCBF00000060D4E8B9BF00000000842E91BF00000080EFD8B03F000000E02879A7BF000000A05ED6B1BF0000006014BDC43F0000008009CE44BF0000008044B6C9BF000000009C7577BF00000040A432AC3F000000E0CCBACC3F000000E08639C23F000000803418B13F00000000F955A13F0000008010D5C2BF00000060ED4AB73F000000E0E640C0BF000000206143A13F00000040C43CC03F000000804929B83F000000005A90B73F0000000048358A3F000000806939BABF00000000F10BA13F000000E01E36BF3F00000080EA55C4BF000000C08CA0993F000000C04191B13F000000A0E2E9A3BF000000C08FCC9DBF000000405C45B6BF000000607884D03F000000E0FC0FB33F00000060D8A2BBBF00000060F238C2BF00000040CC74C43F000000E0D6F6BCBF000000C0A9B1B9BF00000080AC76813F000000207E8AC0BF0000000076DACABF000000800066D0BF0000000057F7933F000000805E79D73F000000E0B04CBC3F000000A0A890C4BF00000000FF54B73F000000607790A9BF000000409337B1BF000000E0DC74C33F00000000EA5DC63F00000020F6CFA23F00000080416DAF3F00000040F1499FBF00000080CE8EA13F000000004F57CB3F000000E0045FB6BF00000040461B76BF000000808995CD3F00000080F36F9CBF000000802E3CB03F000000C061FF79BF00000000F600863F00000080E2B4B0BF000000E02C3FB93F00000020B1A2BEBF000000009EE191BF000000403F3FB43F0000000034C66BBF00000000E8A691BF000000E0077CB53F000000E0C878C0BF000000E0B44DBC3F00000040C027A23F00000060710CA33F00000000A89E863F000000009CD3A2BF000000C0DBE4BDBF00000000B635B2BF000000809763BC3F000000E0A1F0C9BF000000E0C996CD3F00000020B18EC43F000000003A8BA43F00000060FF94C03F000000207A3DBF3F000000E0C014B43F000000207BFDB13F000000C00798ABBF0000000072A1D0BF000000006F6D583F00000060D143C23F0000000036F075BF00000080782CB23F00000000529767BF, NULL);
INSERT INTO `student_encodings` (`id`, `student_id`, `encoding`, `created_at`) VALUES (110, 11, 0x000000803305C2BF00000020B175BB3F000000A0E33C983F00000040BAD7B4BF00000000914CB4BF000000800329ABBF000000009AA689BF000000607E13B5BF00000000311FC53F000000A0E03AB5BF00000080006CCF3F000000E02F80B7BF000000C0F085C7BF000000203529B0BF00000020442FA9BF000000006F8FC93F00000000AF3ACBBF000000404047BCBF000000807E50A3BF0000008050EFA03F00000000C79BC33F000000C057358CBF00000000A1E486BF00000080F6EDB33F00000080EAC8B3BF00000040A9D2D4BF00000080C458BDBF00000080083DB1BF0000004069069F3F000000408031B0BF00000040A83C9CBF00000000CA7F743F0000004062B3CEBF000000408499B4BF00000080568BA2BF000000C01E79AC3F00000040254996BF000000A0FE92BABF000000202874C13F000000C00AEC85BF000000C0F415CCBF0000000088367B3F000000A01AE0AB3F000000E0B3A0CF3F00000060E84CC03F000000605D689B3F0000000066C39E3F000000406125BCBF00000020E8A5B13F000000C0A28AC7BF00000000F8B7923F000000E0BACAB83F00000000286EB23F000000009FFEB33F00000000C8C6523F000000809B4FBFBF00000000D8BA713F000000002175C13F0000004088ECC0BF00000080D6E7713F000000C060CFA03F0000008036419BBF00000000D61A7C3F000000203524C2BF000000C05B7BD13F000000008958B53F000000006BDABCBF000000C04F1AC3BF0000004069FEB73F000000C0A0EFB5BF0000008011B3ADBF000000A02083B23F0000000057E5C1BF000000C0609CC6BF000000005863D2BF00000000C664A73F00000000DDF7D83F000000E08A1BB03F00000080CB1BC4BF000000802869B03F0000006050B5B9BF000000C0D22AA4BF00000060DEEDB43F00000040A372C23F000000C057AD9D3F000000005B99B63F000000E039C9B6BF0000000095CAA43F000000606847CE3F0000004003BFBDBF00000000F404613F000000C0ACB9CB3F000000407BCA90BF000000006C3B973F000000C0229E99BF000000000088FBBE00000000FC62AABF00000020E5D0A93F000000602E3FB8BF00000000E5318DBF00000000EC379D3F000000E0389293BF00000080B482ACBF000000800A10B53F00000000BE67C3BF0000008021BBB13F000000009FD0AA3F000000008108723F00000000C1B58FBF0000000024648FBF000000E04D25B9BF000000800672B5BF000000C0D247B93F00000000A8EACCBF00000000255DC93F000000C079E9C43F00000080473DA13F000000C0B8B9BF3F000000004D1AB13F00000000DB3FB83F00000000A05C81BF000000001AC787BF00000000AA1AC5BF00000020154F993F00000080671DC53F00000000E79E8A3F000000003A18B23F00000080152B84BF, NULL);
INSERT INTO `student_encodings` (`id`, `student_id`, `encoding`, `created_at`) VALUES (111, 12, 0x000000801E60BCBF000000A0A513B83F000000C0E28DA83F00000040363FA6BF00000000008793BF00000040A402B9BF0000008083418FBF00000080E387C4BF000000A077B4B73F000000006712ABBF000000407100D13F00000000D610AFBF000000404BC0C8BF000000003E69C9BF000000401774A6BF000000C0872BCD3F00000020BC00CABF00000080D101BFBF00000000BFC5A7BF0000000082ED853F0000006039A7BE3F000000E082A2713F000000E07100A73F00000080EC1AA53F00000000A298BBBF000000E071DED5BF000000C0260AB8BF00000040AF6FA9BF00000000056B763F000000007CCA8C3F00000080CF85A7BF000000004132933F000000002642CCBF000000808ECDB3BF0000008051A69A3F0000006098ABA43F000000000907873F0000004030EAB2BF000000407052C83F000000C0EDD57F3F000000C04A3CCDBF00000040BCEFB43F000000A0F47AA83F0000000073B7D03F00000040376DC93F00000060E90F9C3F000000406FB1B03F0000008057AABABF0000004062D8BF3F000000607DAAC6BF000000003E8D753F00000040148DC03F00000080EC32B43F00000000A120993F0000008020E493BF00000000E399BABF0000000024AC843F000000600423B93F000000C0B389C0BF0000000008BE783F000000009358B53F000000806D11B9BF000000404A6995BF00000080B88AB9BF000000A05AA2C53F000000E04C1F973F000000A0CEFEC0BF000000606B4CC4BF000000807590B43F000000809E8EBCBF0000000041BBAABF000000A0BEC8A03F00000040FDAAC7BF00000080DFC3C5BF00000020AA55D8BF0000000089F39C3F000000806F81D63F000000A00103B53F00000040EB2BC8BF000000009B87AF3F0000004069A3B0BF00000020761DB73F00000000DCF8C23F000000E0949AC13F00000060A0D7A53F00000000FCABA33F000000A0596DBFBF00000000483D6B3F000000A06A0DCB3F00000020FB67B9BF000000E0E555ADBF000000204688CF3F000000406EB894BF0000002010D3B23F00000000E5C794BF000000C0BD59A23F00000080443996BF000000E0DF00B03F00000020DA0DAABF000000A0E8ECB23F00000060E1AEB33F000000406C1A94BF00000000967CA43F00000080C812B83F00000080C2F6C2BF00000080BE9AB63F00000000FBBD80BF0000004099E4BA3F000000C0DD1EA23F00000000B0A47ABF000000E027D0B8BF00000000C494AFBF000000A09B51AB3F000000E0EF7CCABF00000040B001CF3F000000C0917FCC3F0000000098FA31BF0000008022B3B53F000000C0894FBB3F000000C0B671B13F000000001D1BA6BF00000000FC69953F000000A01D58C5BF000000003097A6BF000000A00F00BA3F00000000F8F86C3F000000409D30C03F00000000AE4A813F, NULL);
INSERT INTO `student_encodings` (`id`, `student_id`, `encoding`, `created_at`) VALUES (112, 12, 0x00000000BBF7BDBF00000000C4ACB23F000000E06AD9AB3F000000E0D7C7A1BF000000403637A3BF000000807AEFB3BF000000C089AD98BF00000040CEE5C4BF000000604581B33F00000000C097B0BF000000C0C6E0D13F000000C02532ABBF0000006069A1C6BF00000040599ACABF000000405B86ADBF000000001140CA3F000000C0BE8AC8BF00000060C6EBC0BF000000A08645A5BF0000008001CA973F00000000D12EC03F00000080E161933F00000000F34A793F000000001C339F3F000000C0D945BDBF000000602AD0D4BF00000080B3AFB7BF00000080B1B7A6BF000000801251883F0000000085C995BF00000020E689A7BF000000002F669F3F00000080387FCEBF000000400D3CB4BF000000C0EDF9A23F000000807924AF3F00000080CA0D913F000000400374AFBF00000040081EC63F000000E0F0D6923F0000000077D0CBBF00000080C8CDB73F000000805B9DA63F000000A011A2D03F00000040CDBCC73F000000C0F195A13F00000040AB0CA53F000000404776B9BF000000401433C23F000000808C8EC9BF00000080BBA56BBF00000060FBADC03F000000C06485B93F000000C0F28DA33F000000409349A1BF0000004053D2BBBF000000008C65843F000000C01B59B93F000000C07F42C2BF000000409E838F3F000000C046ACB23F00000020639CC0BF00000080396E91BF000000800F62B5BF00000020F9B4C43F00000060EB6FA53F000000E0B275BEBF000000809A0FC7BF000000A0DAE3B13F000000804EB9BEBF000000C0FB37B2BF000000802861A23F000000403EEEC4BF000000604F72C3BF0000006036EED7BF00000080B462A43F000000004929D73F00000020BE7FB43F00000080FF33CABF00000020E398B03F00000040E156B1BF000000A0FBCFB83F000000208624C33F000000C0B92DBE3F000000A0A9ADA83F00000000EE0AA13F000000803BE1BEBF000000008C3682BF000000405ABDCC3F000000409A45B7BF0000006029D7A8BF00000000B850CD3F000000809DDE97BF000000C073E6B53F00000000219F563F00000000C436903F000000000E4393BF000000404C9FAA3F000000007C0FA4BF000000A0E5AFB13F000000403475A73F00000040221481BF000000407179A93F00000080BAC0B83F000000C068F4C0BF0000000075A2B93F00000000DFB694BF000000A0D71BB73F000000005738A03F00000000651495BF000000601E7FB7BF00000080C880AABF0000004035BEA23F000000C0D8E6CDBF00000020343ED13F000000C084CCC93F00000000A5FF64BF000000A09C44B93F00000040EB6CBD3F00000040AD21B13F00000080A6C2A6BF00000000FD199D3F000000A0C7F1C2BF00000080B5E7B0BF00000080991ABC3F0000000090855A3F000000C0D383BE3F00000000208D94BF, NULL);
INSERT INTO `student_encodings` (`id`, `student_id`, `encoding`, `created_at`) VALUES (113, 12, 0x000000604704B8BF00000080C6C3B43F0000006003E6B83F00000000F02057BF000000C09B48B1BF0000008094289ABF00000000847A7FBF00000000AFB2C1BF000000209666B23F000000A0972CB3BF000000C0BDAFCF3F000000E0311FA0BF00000020053EC8BF00000080D343C2BF000000403829A0BF000000E00492C73F00000040CB49C9BF00000060CDEFC3BF000000E006A8A1BF00000000B6038A3F000000A06652C13F000000808EE3883F0000000006B18EBF0000000066FE993F00000060F259BABF000000A0EE86D4BF00000040DD09BABF000000C04EF5A9BF000000E03DC09F3F0000000001399ABF000000C0B132AABF00000000CD7A9D3F000000C076B2CBBF000000C0DD2CABBF00000000E13196BF000000005439543F00000000D63C94BF00000040102AB4BF000000A0F834C63F00000080450C8EBF000000E03418CFBF0000008006DCB83F00000000EBD9A63F00000080D75ACE3F00000000D8C8C53F0000000092DE603F000000E0A7E39F3F0000000017C7A3BF0000008086A4B63F000000E03741C9BF0000006047D76ABF0000008046A8C73F00000040F1DEB43F000000C09357B13F00000000B781A0BF000000606B08BEBF00000000B0448FBF000000005314B73F00000000DFF8BFBF000000402B3EB13F00000040BCF5B33F000000406A9EC0BF000000C03EDC833F00000000445AB9BF000000004C24C13F00000000C3A8A03F000000005125BABF000000001014C9BF00000040B8A7AD3F00000060313CC0BF000000A007BAB3BF00000000187CA43F000000005E8DC7BF000000403A97C7BF00000000B449D3BF000000001CB4B03F000000002345D63F00000040044EB73F000000C0424DC8BF000000201877B63F000000C0883DABBF0000002088F0A63F000000E051D8C03F00000080C5B0C13F000000803D10B03F0000008077A8AA3F000000407DE6BDBF000000001E79843F00000000074DC83F000000A0E2BEB2BF00000000A64C9EBF00000040C4E6D13F00000040A28D96BF000000005B8BA83F00000060DAC5983F000000805459A43F00000000A87D6BBF000000C0B147AD3F00000020005FB0BF000000201E5CB23F000000C0BD31A23F00000080E9F2ABBF00000000E036903F000000403F41B13F000000C03FC0B6BF000000809E97BD3F0000008020AE97BF000000A02AF6C03F00000000C60F7F3F00000000B6ED90BF000000C07AD2BFBF000000807135A7BF000000407634B53F00000040624FCBBF00000000EA54CE3F00000080ECB5C83F000000804CC681BF000000001296B53F000000208273BF3F0000004039F1B63F000000C01D44A2BF00000000007C4FBF000000408A4FC7BF000000A0CA9BA4BF000000802F33C03F00000080F8F09BBF000000408D86B33F00000000EBE78C3F, NULL);
INSERT INTO `student_encodings` (`id`, `student_id`, `encoding`, `created_at`) VALUES (114, 12, 0x000000807CF2B9BF000000405064A63F00000080E162B33F00000040F2F799BF000000003A75A7BF000000405565A7BF0000000030CC79BF00000000418EC1BF00000000D861B73F00000040D46EBFBF000000809AC0CE3F00000080B0A8B4BF00000040FCB4CABF000000A0FB34C1BF00000000302FA1BF000000A06802CA3F000000E0C4DDC5BF000000807152C0BF000000E09A4DB2BF000000800D8699BF00000000EBD5BB3F000000A082AA703F000000C08ADA9CBF00000040A745A13F00000060F227B4BF00000040D195D4BF00000000ADC5B6BF000000803624B3BF000000E0E29278BF000000002B34A4BF000000E0E87DB1BF000000001AD18B3F00000040FEA7C7BF000000203ADBB0BF00000000793190BF00000000BCEBAE3F000000406393AABF000000001C4AAEBF000000A0E8B9C63F000000C0812D9C3F00000040CE00CABF000000003FD3AB3F00000000CEFD823F000000E0A02CD03F000000203D9DC53F00000080CAEFA83F000000404A66A23F00000040D500B5BF000000A0B650BD3F000000E07F6FCBBF00000000B0A8723F000000007771C43F000000A05469B13F000000C00F16B73F0000008006DA95BF000000C0A25CBCBF000000006051593F00000040C431BD3F000000A0965CC0BF000000A0A045AE3F000000C056B9B43F000000A02D58C1BF00000080BD55A3BF000000806ABEB4BF000000802F69CB3F000000408F0AAE3F000000E0A2E9C1BF000000C0DCDAC3BF00000020EDEDB33F000000800B34C1BF000000E024A8B9BF0000008071A2813F000000808EF0C6BF00000000D2AFC5BF00000040D117D5BF0000000048CCB23F00000080750DD83F000000A0EFA7B43F000000C0A583C6BF000000A0B211A93F000000209D71B0BF000000808182A93F000000C0D4BEC43F000000C05BD5C63F000000A01187A83F000000009767A63F000000E06B81B0BF0000000090FA61BF000000C0AC7DC43F000000A02731B7BF000000809126A0BF00000040F9D3CF3F000000A02F96A2BF00000020FA80B43F0000004093676ABF00000080A1BC903F00000080757991BF0000006062B2A73F000000E08C2AA3BF000000802F43A13F000000E0B98AB53F000000E00DB4A5BF00000080BD32A73F00000000334DB23F000000008AE0BDBF000000006084BF3F0000000005EEA3BF000000E030ECBD3F00000040FF5AAD3F000000007AA596BF00000040D65ABBBF00000080A901B1BF0000000004A4B83F000000C0D21BCDBF000000C00DA5CA3F000000C02091CD3F00000000EE025C3F0000006005E5B53F000000A00CF1BE3F000000C047E4B73F0000000061E991BF000000004DB29F3F00000060E46ECCBF00000060D0F884BF00000040B282BD3F000000C0281CA13F000000005762AC3F00000000E01B4E3F, NULL);
INSERT INTO `student_encodings` (`id`, `student_id`, `encoding`, `created_at`) VALUES (115, 12, 0x00000000AEC4C0BF00000080B9DEA23F00000020DBE2A33F000000009434663F00000080D33C92BF000000209BD4B6BF0000000078F18FBF000000E0D41EC3BF00000040D4F0BA3F000000C0004EA5BF000000000483CD3F0000008010C4ACBF000000A0FB85C3BF000000208CEACABF000000804B5B9BBF0000006096E9C63F000000E007ABC7BF000000A042E7BBBF00000000AEEBACBF000000001C4780BF000000C0853FC03F000000C02FDAA13F000000E0DB50A33F0000000020D3493F000000204312C1BF000000C04DE7D6BF000000A07AB4BEBF000000004531B2BF00000080946676BF000000008CBD963F000000A09E1CABBF00000000716FAB3F00000040F58ECDBF000000C015EEC1BF00000080B271A43F00000080A795B43F0000000098D17D3F000000C0BFB4AABF00000040D170C53F000000E06D908ABF00000040D81FC9BF0000000079C1B73F00000000982BB23F00000000E8ABCE3F000000809CDAC53F000000404A68AD3F000000E0725FA23F00000000CA6CB8BF000000C00680BE3F00000040CD84C4BF00000000B69F6ABF000000405308C23F000000C08096B23F000000E08294B33F000000807C8698BF000000E03660AFBF0000000092D8933F000000408734B43F000000C091B7C2BF00000000C6F864BF000000002F20AC3F000000A080AFB7BF000000E01B7D9FBF000000A0B7B4B2BF000000007C89C13F000000801C68AE3F000000C05884B6BF000000402731C8BF000000807D58AC3F00000040810CC3BF000000E002EDB8BF00000060403EA03F000000802153C6BF000000C0C9C8C5BF00000020AF50D9BF00000000DEF79A3F000000C0E356D63F000000A0EF97B23F000000805BF9C8BF00000060C900AC3F000000204E44A8BF000000E057B1AC3F000000E085A3C33F00000040E726C03F00000020CFA6A43F000000605AF3B33F000000003CF8B9BF00000000CCF5753F00000040CDC4CC3F000000603FD1B3BF000000A080CEB2BF000000802C6ECD3F00000000C92B8E3F000000E0DDDBB83F00000000605B9B3F000000C06225AA3F00000000A0E25B3F000000000666A33F000000407518B8BF000000C094DFA83F00000040FE29BF3F0000006080E5933F00000000EDF9A43F000000A0943AB93F000000004A9EBDBF000000A0237CBE3F00000000EB8889BF000000C0CD91B43F0000000082D59A3F000000005C899EBF00000000A7CDB7BF000000000A2AA9BF0000002075FEAF3F000000C03CE8C7BF00000060D3D1CC3F000000807EE8CA3F000000806DFE98BF00000000FFA2BB3F00000080BB64B93F000000206EC6B03F000000C01C2BB1BF00000000AC4DA53F0000004056B3C6BF00000080B705B1BF00000040D4EABA3F0000000013F9A63F000000C0799FBB3F00000000A232723F, NULL);
INSERT INTO `student_encodings` (`id`, `student_id`, `encoding`, `created_at`) VALUES (116, 12, 0x000000801653C0BF00000000A04AA03F00000000CAC3B43F00000020A0D59DBF000000003F3DA7BF000000A07D50ACBF00000080567387BF00000000EAF6C0BF000000E0B5A8BB3F000000602908C0BF000000600691CD3F000000A09D0AB6BF000000A0F8D3C6BF00000040451AC0BF000000C08BFEA9BF000000C094A4C93F000000404F8CC7BF00000000236BC1BF000000401EDCB1BF00000000088A81BF000000C0F87AC03F000000609F6677BF00000020CCC3A4BF00000080D9F7923F00000040693BB3BF00000060B104D5BF000000C0BD6EB9BF000000C005E7AABF00000000FE0A84BF00000000A50BA0BF00000060921FAABF00000080D3089F3F000000A0E739C9BF00000020DAD5B2BF00000000A2F093BF000000E05B67B03F00000000BDAA9DBF000000806FBFADBF0000008042DFC53F000000C0B2697A3F000000A0FB9DCBBF00000000BB87AB3F00000080D2829B3F00000000E7DECE3F00000080F84FC73F000000C027D8A23F000000809AF69D3F000000004316B3BF0000008095A8BE3F00000040F8E3C8BF00000060371493BF0000002072E0C53F000000C0F4E3B43F00000000AFB4BA3F000000008ADD99BF00000040F1A3B6BF0000000020798A3F000000000EDFBC3F00000020F06CBABF000000E02C18A73F000000003A5DB93F000000002F0AC1BF000000603BF4A1BF00000060615DB4BF00000040619CC83F00000040BD58A63F00000040E602C1BF000000803AF3C6BF000000805756B63F000000403E7FBDBF00000080649BBABF000000802C63833F000000C02886C8BF00000080613DC6BF000000806070D4BF000000808CAEAF3F000000C0EF0AD83F000000A0B61CB33F000000C0DAC2C7BF00000040DB9BB03F00000080C522B2BF000000C08302B03F000000007309C43F000000E06AF6C53F00000080DF1AAF3F00000040FB64AC3F00000000122FB2BF00000000AA5F82BF000000E073C9C53F000000809953B2BF000000809B90A5BF000000C04B54CD3F000000C0BADE97BF000000E0C44DB13F00000040AA2E603F000000000DE5963F00000000D40C743F000000603E74AD3F000000803E9FADBF00000040A3E9A43F0000008032DAB43F000000C0DF9798BF00000000FC0C9E3F000000A0EA09B23F000000C0A8B3B8BF000000805B63C23F000000003E5EA0BF000000E06C6AC23F000000803B9DA33F00000000134790BF000000C07455B9BF000000008807A7BF000000C0542BB53F0000008082C7CBBF000000605BF8C93F0000008091BDCB3F00000080CDC572BF00000060FB0EB73F00000040DE37BF3F000000209076BB3F00000000FE3E91BF00000080B6D6A53F00000020B2A1CBBF000000C0864C9CBF000000403361BA3F00000080017EA63F000000001C1CB03F00000000982B853F, NULL);
INSERT INTO `student_encodings` (`id`, `student_id`, `encoding`, `created_at`) VALUES (117, 12, 0x000000A0869EC0BF000000A0CC44AB3F00000040E717B03F00000040DCA28BBF00000020D71CB0BF00000060A703A8BF00000000133C823F000000C06C6FBFBF000000206B1DB83F00000060E0AEB6BF000000E0D3B5CE3F000000804B40B4BF000000406922C8BF00000080788DC0BF000000E04F3BA5BF000000C08C82C93F000000000B53C9BF000000C0EF7CBFBF000000E00896ADBF000000007BEF94BF000000A0A738BF3F00000080B7DC84BF000000801DB69BBF000000C070DEA23F000000605880B6BF000000A017CAD5BF0000008007C3B5BF00000040F705B0BF000000A0B8BD903F00000000AA659BBF000000801F99A2BF00000080CC26A53F000000C00B38CBBF000000A00DE3B3BF00000000E28C85BF00000040F967A83F000000008A428FBF000000C0ECE5ACBF000000E01DB9C53F0000000084A435BF00000000E862C9BF0000000039A3AD3F000000802BCC9B3F00000060706ED03F000000A0B021C63F0000000063B59C3F00000000CFB79D3F0000000033AAAFBF000000402509BD3F000000404C27CABF00000000B2318CBF00000080944BC33F000000C05C0CB23F00000000CB49B53F0000008044BBA4BF000000006D34B8BF0000000020C4633F000000C06A3DBB3F000000006626C1BF000000A04852A73F000000807967B43F000000A01B78C1BF000000C082CEA5BF000000803282B9BF00000000D2C8C73F00000040369EA93F000000A0772FC0BF00000000C442C6BF00000040A5C0B33F000000A00D8EBFBF000000008E89B3BF00000000BCE0853F000000C03168C6BF000000C0491BC5BF000000402332D5BF00000080F9B9B13F000000206E68D73F000000002DA3B33F000000C0F157C7BF000000C02AE1AB3F000000402AB4AFBF000000C0CAD4AD3F000000602FCCC23F00000080D67EC43F000000A0BE47AD3F000000406255A23F00000000680BB3BF0000000038BD8A3F00000040D311C53F000000A05EC8B2BF0000008096F3A6BF00000080F817CF3F00000080EB209FBF000000809220B03F000000003487523F000000C01BB2A03F0000000026BE87BF000000800E3DA93F00000000C41EAABF000000C08BEFAA3F000000A06C88B23F00000000D364A0BF000000006BE49F3F0000002036D5B13F000000809683BCBF000000409599C03F000000C0B7A6A1BF00000000A484C03F00000000CC5FA33F000000802DF6A0BF000000C09B75BABF00000080A552A4BF00000000644BB63F0000004084A1CCBF00000040046ECC3F000000C0A494CB3F0000004056E986BF000000809902B93F000000C08234BA3F00000080A5EFB33F00000000D22A97BF0000000034F09E3F000000808D73CABF00000080D4D097BF000000E0195BBD3F000000006A9B703F00000000CC3AAD3F00000000782E6EBF, NULL);
INSERT INTO `student_encodings` (`id`, `student_id`, `encoding`, `created_at`) VALUES (118, 12, 0x000000C0C566BBBF000000002C21AE3F000000C0E5F7BB3F00000080DA8DA3BF00000000DD6AADBF000000407B59A0BF00000040E2829CBF00000000C81AC1BF00000020182FB43F000000A0A74BB8BF00000080588FCF3F00000020448DAABF000000006736C9BF000000C002BBBFBF000000E0DB2EB1BF000000006ACDC83F000000804A87C5BF00000060AEBABEBF000000206837A4BF00000000A55186BF000000201746C03F000000A0D2989A3F00000080E6769CBF000000805EED953F000000C0D602BABF00000020A89FD4BF000000A0A639B8BF00000080269AA5BF000000009CF9923F00000000298099BF00000080EDC2ABBF00000000AA0E843F00000040A2CCC9BF000000809507A3BF00000000F8CD94BF00000080D3C98A3F00000080C9BEA8BF000000A0DC3DB1BF00000080F0E5C33F000000801C49963F000000407A63CEBF00000040D5A4B33F00000000EABA8A3F000000406DA4CE3F00000040EE12C63F000000000CB1973F000000E0C352A83F00000000BA65B3BF000000E068C4B53F000000E0F70CCBBF0000000018DE8DBF00000060AAFFC63F00000020F662AF3F000000A044C1B03F000000C082619BBF00000060B4A5B7BF0000000010C884BF00000000756AB63F000000605EE6BCBF00000080624AB03F000000C01261B73F0000008056D8BFBF0000000066CE92BF000000408A5CB7BF000000E008D9C23F00000060FEACA33F000000C03F2BC1BF0000004026D7C6BF000000E02F15B53F000000009BCAC0BF000000E04F92B4BF000000C0E7D3A43F00000060B325C6BF00000000BF79C7BF00000080D382D4BF00000040D6AEB13F0000000053C9D73F000000801617B93F000000E01D96C5BF000000207C4AAE3F00000060ED14B0BF000000C0581BB33F0000006078ABC33F00000080ABF2C23F000000E0F25BA73F000000C05096A33F000000407015B2BF00000000FCA7923F000000603DDAC63F000000E0D8A7B5BF00000020E6BDA4BF000000C0DA48D03F000000C0E5E594BF000000005DE6B23F000000A03C9980BF00000040DD8FAC3F00000000363880BF000000E0142CAD3F000000C0B86F9EBF000000C09F62B33F000000C0DF69B23F00000000FA7A9EBF000000001833AB3F0000006086B2B73F00000060152AB9BF000000004FEAC23F0000008099BF9DBF00000000B862BD3F0000000015B6A73F0000000080C22E3F00000020961EBCBF00000080488AA8BF000000C01236B43F000000806531CBBF000000E05B46CD3F000000A03C60CC3F000000C05A75873F00000080EED4B03F000000600579C03F000000A0058BB13F00000000C4359ABF00000000EECE813F000000007AD7C7BF00000060B769A5BF0000000011FBB83F000000009EBE97BF00000040F2D8B03F00000000D6057ABF, NULL);
INSERT INTO `student_encodings` (`id`, `student_id`, `encoding`, `created_at`) VALUES (119, 12, 0x000000A0AB54BABF000000809BAAB13F000000000508B73F000000806BAE99BF000000005741B2BF000000E03C63A4BF00000080E0038EBF0000000085DEBEBF00000020F192BA3F0000002085C3BABF00000080F672D03F000000008538B3BF000000401C49CDBF00000020B66FC0BF00000080D9E0ACBF000000E0A9E6CA3F0000004010BCC5BF000000A000ECC1BF000000C01C8EAEBF000000006A7B89BF000000C07F31C03F000000E0AF7871BF000000806FF392BF00000000502A9F3F000000007C8BB7BF00000080321CD5BF0000000036E5B3BF00000000BDEBB2BF00000040341795BF00000000537BAFBF00000040838CAABF0000000083808C3F000000807D0AC9BF000000C06ADDACBF00000000B70686BF000000402CD8AA3F00000080BD48A7BF000000805B98ADBF000000C059D7C83F000000E01D47853F0000008041CACBBF00000080BC29A83F000000009709953F000000207E35D03F000000000AE3C63F00000080D416A83F000000C0CD46953F000000402096B5BF000000803265BE3F00000020332BCDBF0000008029C06B3F0000008055A4C63F00000060AD5AAF3F000000E0884CB43F0000000085209EBF000000A064A0BABF000000000067283F000000A03C2FBE3F0000008075D1C2BF000000407715AD3F00000080CE99B43F000000A06978C3BF00000040DC8AB0BF000000A0F9D8B7BF000000A07CB2CA3F00000040F976AD3F0000008066A1C2BF000000A0BAB5C5BF00000080A21EB53F00000060E94AC1BF000000806594B7BF0000000079089F3F000000C0235AC7BF00000040DD6DC7BF000000A04F2AD4BF00000080DB90AB3F000000601D4FD73F000000601FE1B23F00000020D1C3C8BF000000200CE2AA3F000000401032ADBF000000808644A93F000000602C6DC23F000000809822C63F00000060B894B13F000000805070A43F000000E0532CB6BF00000000B679853F000000A0B009C63F000000201443BCBF0000006021B097BF000000C01F59D13F000000A02026A1BF00000000A808B53F0000004078F28ABF00000080BAC4973F00000000FCD491BF00000060E6B8A83F000000801862B0BF000000809FA19E3F000000E0AD7BB53F000000E04D228DBF000000007F609A3F000000803EE6AA3F0000008009F9BBBF000000406321BC3F00000080F1C5A0BF000000608A2BBE3F000000406F5DA33F00000000BD49B0BF000000A0690DBDBF000000807238AFBF00000040579FBC3F000000C08693CCBF000000006DCCCD3F000000808B7ECB3F00000080DA037F3F000000E0216CB33F00000000329AC03F000000E029FBB03F0000000000515B3F00000000B0E252BF0000004062C3CCBF00000060229083BF00000040A72ABE3F00000000C4856F3F000000802F19B03F00000000F08B8BBF, NULL);
INSERT INTO `student_encodings` (`id`, `student_id`, `encoding`, `created_at`) VALUES (120, 12, 0x000000C064B8BCBF000000C0D23DB73F00000080B670B73F000000E08DA78ABF000000C0E509B1BF0000004077A0A9BF00000000B88B683F000000A02E4ABBBF00000040F95CB43F00000080E0FDAFBF000000C0651BD23F000000402886AFBF0000008005FAC9BF000000601064C0BF00000080296EA4BF0000008015DFC83F000000A0E491C3BF000000001C18C0BF000000200418B4BF00000080B837913F00000000988EC03F000000C06559713F00000080C8349FBF000000C0EA9CA33F00000040F61BB8BF000000C0800CD5BF000000A0FBBFB6BF00000040EAD3ADBF00000060BDDD863F00000080F590ADBF00000040D9F4A8BF00000040E131A63F000000004D33CABF000000C015B7B3BF00000000A30C88BF000000408918A13F000000006F29A8BF000000C09627AFBF000000C009C8C53F000000C04C6996BF000000603178CDBF00000000819AA73F000000802339A13F000000808A2DD03F000000C05C86C53F00000000DB20953F00000080F8D09D3F000000000951ACBF00000040B03AAE3F0000004090FCCDBF000000003EFC4FBF000000E0C578C43F00000060A58AB33F00000040EEB2B63F000000808D6B95BF000000A001A1BCBF00000000001460BF000000C0ED62BC3F00000000DA11C1BF00000060C184963F00000040193BB33F000000C0F1B7C0BF000000202D9599BF000000804020BCBF000000C0BF9ECA3F000000006A8AAD3F000000C09F09C2BF000000405627C3BF000000404837B43F000000A00699BDBF000000405D2AB0BF000000802ECCA23F00000080C9DCC5BF00000000DF80C6BF0000000068FED4BF000000803518B63F000000202E76D73F000000600FA0B63F000000A05C19C9BF00000060BB85A73F00000060A3F8B2BF00000040CA85AA3F00000080B3E6BE3F000000200AC4BE3F000000807CB3A13F000000804A1E9F3F00000000B23EBABF00000000AD37973F000000E0CB06C63F000000A0B35DB5BF00000000C9A884BF00000080A8BDCF3F00000080C42597BF000000402183AF3F000000804B5829BF0000008097AC9E3F0000000023AF83BF000000A09B8FA33F000000A00FFDAFBF000000C00208B53F000000401184A83F00000000F5349BBF0000000086D58B3F000000403AB8BA3F000000404DDCB5BF00000080293CBB3F000000002F0990BF000000604020BB3F0000008081C99C3F000000002F5A9CBF000000E07793BCBF00000080F667B4BF00000000293EB53F000000001D7ECABF000000C04FAECB3F000000A003D0C73F00000000E9CE66BF000000802A83B13F000000E0FE62BF3F00000080712EB43F00000080B71F9DBF00000000A0A64DBF00000000280DCCBF000000005A4068BF000000C07954C33F00000080FC579FBF000000803908A93F00000000189885BF, NULL);

View File

@ -1,12 +0,0 @@
INSERT INTO `students` (`id`, `name`, `email`, `avatar`) VALUES (1, 'PHAN QUOC BAO', 'ryder.ph@apactech.io', 'avatars/Us2SJQTDjqeORdlVMTUJG4E5exMi5VUhfQgGZfs3.jpg');
INSERT INTO `students` (`id`, `name`, `email`, `avatar`) VALUES (2, 'PHAM VAN HUYNH', 'jon.ph@apactech.io', '');
INSERT INTO `students` (`id`, `name`, `email`, `avatar`) VALUES (3, 'VO MINH TRUONG', 'vincent.vo@apactech.io', 'avatars/UXk5UKfCmIrHMgF0sik7t0Gf0bOQ62lmwk2SVabb.jpg');
INSERT INTO `students` (`id`, `name`, `email`, `avatar`) VALUES (4, 'NGUYEN VO TINH', 'alex.ng@apactech.io', '');
INSERT INTO `students` (`id`, `name`, `email`, `avatar`) VALUES (5, 'DANG TRUNG KIEN', 'kevin.dang@apactech.io', 'avatars/4kpcWpQhRYiWcB5B3N957ONN9w6jppcCZKzoIFxK.jpg');
INSERT INTO `students` (`id`, `name`, `email`, `avatar`) VALUES (6, 'HUYNH THI HONG GAM', 'rose.h@apactech.io', 'avatars/ZDMxwwo5qkBqO5R1XjGPf0Vp2Q5YwsYhosOhmhDH.jpg');
INSERT INTO `students` (`id`, `name`, `email`, `avatar`) VALUES (7, 'NGUYEN TRUNG THAT', 'andrew.ng@apactech.io', 'avatars/MOo8dR7QsaUPbuVF92ALJf3P4mJKEmp9OD9jGi2M.jpg');
INSERT INTO `students` (`id`, `name`, `email`, `avatar`) VALUES (8, 'LE TAN LUAN', 'joseph.le@apactech.io', 'avatars/A1yEjVOqzeodoc2vL1E52PkZXwMomudWKxQTOZ35.png');
INSERT INTO `students` (`id`, `name`, `email`, `avatar`) VALUES (9, 'VO VAN MINH', 'michael.vo@apactech.io', '');
INSERT INTO `students` (`id`, `name`, `email`, `avatar`) VALUES (10, 'TON GIA KHANH', 'kai.t@apactech.io', '');
INSERT INTO `students` (`id`, `name`, `email`, `avatar`) VALUES (11, 'PHAM NHUT KHANG', 'zelda.pham@apactech.io', 'avatars/vfGHX5JSFsafcEWKj7aHMZyGopJLvTRgS5YfspQB.jpg');
INSERT INTO `students` (`id`, `name`, `email`, `avatar`) VALUES (12, 'NGUYEN HOANG VI', 'hoangvi.ng@apactech.io', 'avatars/xRt5FG92nL4mSpwNoHgM7iSfcCUNzs14oNoFGivw.jpg');

View File

@ -1,266 +0,0 @@
from api import users
from database import SessionLocal
import os
import requests
import tempfile
import face_recognition
from sqlalchemy.exc import IntegrityError
from sqlalchemy import text
from database import SessionLocal
import json
URL_BASE_RESOURCE = "http://172.16.6.38:8000/image/storage/"
def register_face_handler(name: str, email: str, avatar: str | None, image_url: str):
print(f"[DEBUG] Bắt đầu register_face_handler với email: {email}, image_url: {image_url}")
db = SessionLocal()
try:
# 1. Tải ảnh từ URL
try:
res = requests.get(image_url)
res.raise_for_status()
except Exception as e:
print(f"[ERROR] Không tải được ảnh từ URL {image_url}: {e}")
return {"status": False, "message": "Không tải được ảnh từ URL."}
# 2. Lưu ảnh vào file tạm
with tempfile.NamedTemporaryFile(delete=False, suffix=".jpg") as tmp:
tmp.write(res.content)
tmp_path = tmp.name
print(f"[DEBUG] Ảnh đã lưu tạm ở: {tmp_path}")
# 3. Encode khuôn mặt
image = face_recognition.load_image_file(tmp_path)
encodings = face_recognition.face_encodings(image)
if not encodings:
print("[ERROR] Không phát hiện khuôn mặt trong ảnh.")
return {"status": False, "message": "Không phát hiện khuôn mặt."}
encoding_bytes = encodings[0].tobytes()
print("[DEBUG] Đã encode khuôn mặt.")
# 4. Check email tồn tại
print(f"[DEBUG] Kiểm tra email tồn tại: {email}")
existing = db.execute(
text("SELECT id FROM students WHERE email = :email"),
{"email": email}
).fetchone()
if existing:
student_id = existing[0]
print(f"[DEBUG] Email đã tồn tại, student_id = {student_id}. Thêm encoding mới…")
db.execute(
text("""
INSERT INTO student_encodings (student_id, encoding)
VALUES (:student_id, :encoding)
"""),
{"student_id": student_id, "encoding": encoding_bytes}
)
db.commit()
return {"status": True, "message": "Đã thêm encoding mới."}
# 5. Email chưa tồn tại → tạo student mới
print(f"[DEBUG] Email chưa tồn tại, tạo student mới: {name}, {email}")
db.execute(
text("""
INSERT INTO students (name, email, avatar)
VALUES (:name, :email, :avatar)
"""),
{
"name": name,
"email": email,
"avatar": avatar,
}
)
db.commit()
student_id = db.execute(text("SELECT LAST_INSERT_ID()")).fetchone()[0]
print(f"[DEBUG] Student mới ID = {student_id}")
# 6. Lưu encoding
db.execute(
text("""
INSERT INTO student_encodings (student_id, encoding)
VALUES (:student_id, :encoding)
"""),
{"student_id": student_id, "encoding": encoding_bytes}
)
db.commit()
return {"status": True, "message": "Đăng ký thành công."}
except IntegrityError as e:
db.rollback()
print(f"[ERROR] IntegrityError (email có thể đã tồn tại): {e}")
return {"status": False, "message": "Email đã tồn tại."}
except Exception as e:
print(f"[ERROR] Lỗi không xác định: {e}")
return {"status": False, "message": "Lỗi server."}
finally:
db.close()
def extract_images(history_list):
images = []
for day_item in history_list:
values = day_item.get("values", [])
for v in values:
img = v.get("image")
if img:
images.append(img)
return images
def sync_data_user():
response = users({"month": 11, "year": 2025})
if not response.get("status"):
return
raw_data = response.get("data")
if isinstance(raw_data, str):
try:
data = json.loads(raw_data)
except:
print(raw_data)
return
else:
data = raw_data
db = SessionLocal()
for item in data:
histories = item.get("history", [])
user = item.get("user")
if len(histories) <= 0:
continue
# 👉 Lấy số lượng encoding hiện có trong DB
try:
count = db.execute(
text("""
SELECT COUNT(*)
FROM student_encodings se
JOIN students s ON s.id = se.student_id
WHERE s.email = :email
"""),
{"email": user.get("email")}
).fetchone()[0]
except Exception as e:
print("[ERROR] Khi lấy count:", e)
continue
# 👉 Nếu đủ 5 bản ghi → SKIP người này
limit = 10
if count >= limit:
print(f"==> Bỏ qua {user.get('email')} vì đã đủ {limit} encoding ({count}/{limit})")
continue
# 👉 Nếu chưa đủ thì mới xử lý ảnh
histories_list = extract_images(histories)
for image in histories_list:
# Kiểm tra lại lần nữa trước khi thêm (tránh dư khi có nhiềsu ảnh)
if count >= limit:
print(f"==> Đã đạt {limit} encoding, dừng cho {user.get('email')}")
break
avatar = URL_BASE_RESOURCE + user.get("avatar", "")
image_url = URL_BASE_RESOURCE + image
print(user.get("name"), image_url)
result = register_face_handler(
name=user.get("name"),
email=user.get("email"),
avatar=avatar,
image_url=image_url
)
print("Result:", result)
# Tăng biến đếm sau mỗi lần thêm
if result.get("status"):
count += 1
db.close()
return response
def test_valid_data():
response = users({"month": 10, "year": 2025})
if not response.get("status"):
print("API trả status=False")
return
raw_data = response.get("data")
if isinstance(raw_data, str):
try:
data = json.loads(raw_data)
except Exception as e:
print("[ERROR] Không parse được data:", e)
return
else:
data = raw_data
for item in data:
histories = item.get("history", [])
user = item.get("user")
if len(histories) <= 0 or not user:
continue
histories_list = extract_images(histories)
for image in histories_list:
# Tải ảnh từ server trước khi gửi
image_url = URL_BASE_RESOURCE + image
try:
res = requests.get(image_url)
res.raise_for_status()
except Exception as e:
print(f"[ERROR] Không tải được ảnh {image_url}: {e}")
continue
# Lưu tạm để upload
with tempfile.NamedTemporaryFile(delete=False, suffix=".jpg") as tmp:
tmp.write(res.content)
tmp_path = tmp.name
# Gửi lên API
with open(tmp_path, "rb") as f:
r = requests.post(
"http://localhost:8000/checkin",
files={"file": f},
data={"camera_id": "cam1"}
)
print(r.status_code, r.json(), user.get("name"))
# Xóa file tạm
os.remove(tmp_path)
return response
sync_data_user()
# test_valid_data()

11
TrackingToolWeb/ultils.py Normal file
View File

@ -0,0 +1,11 @@
from api import send_image
def background_send_image(id_log, file_path, student_name, status):
with open(file_path, "rb") as f:
send_image(
id=id_log,
file=f,
student_name=student_name,
status=status
)

Binary file not shown.

Before

Width:  |  Height:  |  Size: 128 KiB

After

Width:  |  Height:  |  Size: 222 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 218 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 222 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 112 KiB

After

Width:  |  Height:  |  Size: 223 KiB

Binary file not shown.

View File

@ -1,7 +0,0 @@
path
__pycache__
images
uploads
log.log
venv
.env

View File

@ -1,134 +0,0 @@
# TrackingToolWeb — CLAUDE.md
## Tổng quan dự án
Hệ thống điểm danh khuôn mặt (Face Check-in) tích hợp với Management System tại `ms.prology.net`. Camera nhận diện khuôn mặt → FastAPI backend so khớp → ghi log → đồng bộ sang hệ thống quản lý.
---
## Kiến trúc
```
Frontend (React/Vite) → Backend (FastAPI/Python) → MySQL
External MS API (ms.prology.net)
```
**Backend**: `main.py` (FastAPI) + `api.py` (external calls) + `sync.py` (data sync)
**Frontend**: `client/src/` — React 19, TypeScript, TailwindCSS, Zustand
**Database**: MySQL — database `face_checkin`
**Deployment**: Backend phục vụ luôn frontend build (`static/`) qua route `/`
---
## Commands
### Backend
```bash
# Development
uvicorn main:app --reload
# Production
nohup uvicorn main:app --host 172.16.6.38 --port 8080 > log.log 2>&1 &
```
### Frontend
```bash
cd client
npm run dev # dev server (Vite HMR)
npm run build # build to client/dist/
npm run lint # ESLint
```
### Deploy frontend
Sau khi build, copy `client/dist/` vào `static/`. Đảm bảo asset paths trong `index.html` dùng prefix `/camera/static/assets/`.
---
## Cấu hình
### Backend (hardcoded — cần đưa vào .env)
| Biến | Giá trị hiện tại | File |
|------|-----------------|------|
| DB URL | `mysql+pymysql://root:123@localhost/face_checkin` | `database.py` |
| MS API base | `https://ms.prology.net/api/v1` | `api.py` |
| JWT token | hardcoded string | `api.py` |
| Face threshold | `0.42` | `main.py:217` |
| Ratio threshold | `0.85` | `main.py:286` |
| Recent check window | 0.5 phút | `main.py` |
### Frontend (.env trong `client/`)
```
VITE_API_BASE_URL=/camera # production (proxy qua nginx)
VITE_API_BASE_MS=https://ms.prology.net
```
---
## API Endpoints
| Method | Path | Mô tả |
|--------|------|-------|
| GET | `/` | Phục vụ `static/index.html` |
| POST | `/register` | Đăng ký khuôn mặt (name, email, file ảnh) |
| POST | `/register-simple` | Đăng ký/cập nhật user không cần ảnh |
| POST | `/checkin` | Nhận diện & điểm danh (file ảnh, camera_id) |
| GET | `/logs` | 20 log điểm danh gần nhất |
| GET | `/users` | Danh sách users + 5 checkpoint gần nhất |
---
## Database Schema
```sql
students (id, name, email UNIQUE, avatar)
student_encodings (id, student_id FK, encoding BLOB[1024 bytes = 128 float64], created_at)
checkin_logs (id, student_id FK, time, camera_id, status[check in/check out])
```
**Encoding format**: `np.float64` array 128 chiều → `.tobytes()` → BLOB 1024 bytes
**Giải mã**: `np.frombuffer(blob, dtype=np.float64)` — validate `enc.size == 128`
---
## Logic nhận diện khuôn mặt (`/checkin`)
1. Nhận ảnh JPEG → lưu tạm `uploads/checkin.jpg`
2. `face_recognition.face_encodings()` → encoding 128-dim
3. Load **tất cả** encodings từ DB → so khớp `face_recognition.face_distance()`
4. Chọn student có `min_dist` nhỏ nhất
5. Kiểm tra: `best_distance ≤ 0.42` **AND** `ratio = best/second_best ≤ 0.85`
6. Kiểm tra recent check (tránh điểm danh 2 lần trong 30 giây)
7. Ghi `checkin_logs``BackgroundTask`: gửi ảnh + tạo history trên MS API
**Bottleneck chính**: Bước 3 — load toàn bộ encodings, giải mã numpy, so khớp tuần tự trong request.
---
## External API (ms.prology.net)
- `POST /api/v1/admin/tracking/scan-create` — tạo history check-in
- `POST /api/v1/admin/tracking/send-image` — upload ảnh check-in
- `GET /api/v1/admin/timekeeping` — lấy dữ liệu chấm công (dùng trong `sync.py`)
Token JWT được hardcode trong `api.py` — cần chuyển sang env variable.
---
## Frontend State Management
**Zustand stores:**
- `use-app-store.ts``isAutoChecking`, `isCountDown`, `refreshLog`, video/canvas refs
- `use-user-store.ts``currentUser` (user được chọn cho checkpoint)
**Auto check-in**: interval 3000ms, gọi `/checkin` liên tục khi `isAutoChecking = true`
---
## Các lưu ý quan trọng
- `UPLOAD_DIR = ./uploads/` — lưu ảnh tạm check-in, bị ghi đè mỗi lần (`checkin.jpg`)
- `images/{YYYY_MM_DD}/` — lưu ảnh vĩnh viễn theo ngày (tạo trong `sync.py`)
- DB session trong `/checkin` dùng `Depends(get_db)`, các endpoint khác tạo `SessionLocal()` trực tiếp — cần thống nhất
- Tối đa 10 encodings/user (giới hạn trong `sync.py`)
- CORS `allow_origins=["*"]` — chấp nhận vì deploy nội bộ

View File

@ -1,104 +0,0 @@
# Hướng dẫn sử dụng hệ thống Face Check-in
## Yêu cầu
- Camera được kết nối và cấp quyền truy cập trên trình duyệt
- Email của nhân viên phải tồn tại trong hệ thống ERP Server
- Backend đang chạy và kết nối được database
---
## 1. Tạo User mới
User trong hệ thống local dùng để nhận diện khuôn mặt. **Email phải khớp với email trên ERP Server.**
### Các bước:
1. Đứng trước camera, đảm bảo khuôn mặt hiển thị rõ trong khung hình
2. Tab **Features** → nhấn nút **Tạo User Checking** (màu xanh lá)
3. Hệ thống chụp ảnh khuôn mặt từ camera
4. Form hiện ra → nhập:
- **Tên**: tên hiển thị của nhân viên
- **Email** _(bắt buộc)_: phải trùng với email trên ERP Server
- **Avatar URL** _(tuỳ chọn)_: đường dẫn ảnh đại diện
5. Nhấn **Tạo mới** → hệ thống lưu khuôn mặt và thông tin user
> Nếu email đã tồn tại, hệ thống sẽ cập nhật thông tin thay vì tạo mới.
---
## 2. Tạo Checkpoint (thêm ảnh nhận diện cho user)
Checkpoint là ảnh khuôn mặt bổ sung, giúp hệ thống nhận diện chính xác hơn ở nhiều góc độ/ánh sáng khác nhau.
### Các bước:
1. Tab **User** → chọn user cần thêm checkpoint (card sẽ highlight màu xanh)
2. Đứng trước camera ở góc độ/ánh sáng khác với lần đăng ký ban đầu
3. Tab **Features** → nhấn **Tạo Check Point**
4. Hệ thống chụp ảnh và lưu thêm encoding vào database
> Mỗi user có tối đa **10 checkpoint**. Nên tạo ít nhất 35 checkpoint ở các góc độ khác nhau để tăng độ chính xác.
---
## 3. Điểm danh (Check-in / Check-out)
Hệ thống tự động xác định check-in hoặc check-out dựa trên lần điểm danh trước đó.
### Điểm danh thủ công
1. Đứng trước camera
2. Tab **Features** → nhấn **Điểm Danh Ngay** (hoặc nhấn **Space**)
3. Hệ thống nhận diện khuôn mặt và ghi log
### Điểm danh tự động
1. Tab **Features** → nhấn **Tự Động Điểm Danh**
2. Camera quét liên tục mỗi **3 giây**
3. Nhấn **Dừng Tự Động** để tắt
### Kết quả trả về
| Trường hợp | Thông báo |
| ------------------------------ | ----------------------------------------------------------------- |
| Thành công | "check in successful for ..." hoặc "check out successful for ..." |
| Không nhận ra khuôn mặt | "No face detected" _(bỏ qua, không hiện toast)_ |
| Không khớp với ai | "No match found" |
| Vừa điểm danh (< 30 giây) | "... already checked in recently" |
| Email không có trên ERP Server | "[ERP Server] User not found" |
---
## 4. Xem danh sách User
- Chuyển sang tab **User** để xem toàn bộ danh sách nhân viên đã đăng ký
- Nhấn vào một user để **chọn** (dùng cho tạo checkpoint)
- Nhấn lại user đang chọn để **bỏ chọn**
---
## 5. Xóa User
> ⚠️ Xóa user sẽ xóa toàn bộ lịch sử điểm danh và dữ liệu khuôn mặt của user đó.
1. Tab **User** → tìm user cần xóa
2. Nhấn icon **thùng rác** (đỏ) ở góc phải card
3. Xác nhận trong hộp thoại hiện ra
4. User và toàn bộ dữ liệu liên quan bị xóa khỏi hệ thống local
---
## 6. Xem lịch sử điểm danh
- Chuyển sang tab **Log** để xem 20 lần điểm danh gần nhất
- Danh sách tự động cập nhật sau mỗi lần điểm danh thành công
---
## Lưu ý
- **Email là định danh duy nhất** — email trong hệ thống local phải khớp hoàn toàn với email trên ERP Server
- **Ánh sáng ảnh hưởng đến nhận diện** — nên đăng ký khuôn mặt trong điều kiện ánh sáng tương tự môi trường sử dụng
- **Khoảng cách** — đứng cách camera khoảng 5080cm để đạt kết quả tốt nhất
- Log điểm danh chỉ được ghi khi ERP Server xác nhận thành công

View File

@ -1,13 +0,0 @@
Run client: npm run dev or npm run build && npm run preview
==> Build client xong => coppy file asset và index vào folder static của server => thêm prefix static vào link của assets trong file index VD: /camera/static/assets
Run server uvicorn main:app --reload
nohup uvicorn main:app --host 172.16.6.38 --port 8081 > log.log 2>&1 &
pm2 start
ps aux | grep uvicorn
truncate -s 0 log.log

View File

@ -1,47 +0,0 @@
import os
import base64
import datetime
import requests
from dotenv import load_dotenv
load_dotenv()
HOST = os.getenv("MS_HOST", "http://10.20.2.26:3002")
AUTH_TOKEN = os.getenv("MS_AUTH_TOKEN", "")
def sync_checkin(email: str, timestamp_ms: int, image_data: bytes, student_name: str, status: str):
today = datetime.datetime.now().strftime("%Y_%m_%d")
folder_path = f"./images/{today}"
os.makedirs(folder_path, exist_ok=True)
safe_student = "".join(c for c in student_name if c.isalnum() or c in ("-", "_"))
safe_status = "".join(c for c in status if c.isalnum() or c in ("-", "_"))
ts_str = datetime.datetime.now().strftime("%Y_%m_%d_%H_%M_%S")
file_path = os.path.join(folder_path, f"{safe_student}_{safe_status}_at_{ts_str}.png")
with open(file_path, "wb") as f:
f.write(image_data)
image_b64 = "data:image/jpeg;base64," + base64.b64encode(image_data).decode("utf-8")
payload = {
"email": email,
"time": timestamp_ms,
"image": image_b64,
}
headers = {"Authorization": f"Bearer {AUTH_TOKEN}"}
print("[sync_checkin] payload:", {k: v for k, v in payload.items() if k != "image"})
try:
response = requests.post(HOST + "/api/log-time/check-in-out", json=payload, headers=headers)
response.raise_for_status()
res = response.json()
print("[sync_checkin] response:", res)
return res
except Exception as e:
print("[sync_checkin] failed:", e)
return {}

View File

@ -1,45 +0,0 @@
import cv2
import requests
# source path/to/venv/bin/activate
API_URL = "http://localhost:8000/checkin" # Đổi lại nếu backend chạy ở địa chỉ khác
CAMERA_ID = "cam_pc_01"
def capture_and_checkin():
cap = cv2.VideoCapture(0) # Dùng camera mặc định (webcam)
if not cap.isOpened():
print("Không mở được camera.")
return
print("Đang mở camera. Nhấn phím 'c' để check-in, 'q' để thoát.")
while True:
ret, frame = cap.read()
if not ret:
print("Không đọc được frame.")
break
cv2.imshow("Camera", frame)
key = cv2.waitKey(1)
if key == ord("q"):
break
elif key == ord("c"):
# Ghi tạm ảnh ra file
filename = "frame.jpg"
cv2.imwrite(filename, frame)
# Gửi ảnh lên server
with open(filename, "rb") as f:
response = requests.post(
API_URL,
files={"file": ("frame.jpg", f, "image/jpeg")},
data={"camera_id": CAMERA_ID}
)
print("📡 Server:", response.json())
cap.release()
cv2.destroyAllWindows()
if __name__ == "__main__":
capture_and_checkin()

Some files were not shown because too many files have changed in this diff Show More