diff --git a/loction_server/api_get_nearby.php b/loction_server/api_get_nearby.php new file mode 100755 index 00000000..03e38365 --- /dev/null +++ b/loction_server/api_get_nearby.php @@ -0,0 +1,81 @@ + false, 'msg' => 'Unauthorized']); + exit; +} + +$lat = $_REQUEST['lat'] ?? null; +$lng = $_REQUEST['lng'] ?? null; +$radius = $_REQUEST['radius'] ?? 5; +$limit = $_REQUEST['limit'] ?? 100; + +if (!$lat || !$lng) { + echo json_encode(['status' => false, 'msg' => 'Invalid Coordinates']); exit; +} + +try { + $redis = new Client(['scheme'=>'tcp', + 'host'=>'127.0.0.1', + 'password' => $PASS_REDIS, + 'port'=>6379, + 'database' => 0] + ); + $redis->connect(); + + // 🔥 التعديل هنا: إضافة WITHCOORD لجلب الإحداثيات من الريدز مباشرة + $geoResults = $redis->georadius( + 'geo:drivers:available', + $lng, $lat, $radius, 'km', + ['WITHDIST' => true, 'WITHCOORD' => true, 'COUNT' => $limit * 2, 'SORT' => 'ASC'] + ); + + $validDrivers = []; + $currentTime = time(); + $max_silence = 180; + + foreach ($geoResults as $res) { + // هيكل النتيجة مع WITHCOORD يختلف قليلاً + $d_id = $res[0]; // ID + $d_dist = $res[1]; // Distance + $d_coord= $res[2]; // [0=>lng, 1=>lat] 🔥 الإحداثيات هنا + + $profile = $redis->hgetall("driver:profile:$d_id"); + $lastUpdate = isset($profile['updated_at']) ? (int)$profile['updated_at'] : 0; + + if (empty($profile) || ($currentTime - $lastUpdate) > $max_silence) { + $redis->zrem('geo:drivers:available', $d_id); + $redis->zrem('geo:drivers:busy', $d_id); + continue; + } + + $validDrivers[] = [ + 'id' => $d_id, + 'distance' => $d_dist, + 'heading' => $profile['heading'] ?? 0, + 'speed' => $profile['speed'] ?? 0, + 'lat' => $d_coord[1], // Latitude من الريدز (أدق) + 'lng' => $d_coord[0] // Longitude من الريدز + ]; + + if (count($validDrivers) >= $limit) break; + } + + echo json_encode(['status' => true, 'data' => $validDrivers]); + +} catch (Exception $e) { + echo json_encode(['status' => false, 'msg' => $e->getMessage()]); +} +?> \ No newline at end of file diff --git a/loction_server/composer.json b/loction_server/composer.json new file mode 100644 index 00000000..5a6a39c5 --- /dev/null +++ b/loction_server/composer.json @@ -0,0 +1,7 @@ +{ + "require": { + "workerman/phpsocket.io": "^2.2", + "firebase/php-jwt": "^7.0", + "predis/predis": "^3.3" + } +} diff --git a/loction_server/driver_socket.php b/loction_server/driver_socket.php new file mode 100755 index 00000000..a7e823ab --- /dev/null +++ b/loction_server/driver_socket.php @@ -0,0 +1,601 @@ +ping(); + return $redis; + } catch (\Exception $e) { + logMsg('⚠️ Redis ping failed, reconnecting...'); + $redis = null; + } + } + + try { + $client = new RedisClient([ + 'scheme' => 'tcp', + 'host' => '127.0.0.1', + 'port' => 6379, + 'password' => $redisPass, + 'read_write_timeout' => 0, + ]); + $client->connect(); + $redis = $client; + return $redis; + } catch (\Exception $e) { + logMsg('❌ Redis Error: ' . $e->getMessage()); + return null; + } +} + +// ============================================================ +// 📐 Haversine Distance (متر) +// ============================================================ +function haversineDistance(float $lat1, float $lng1, float $lat2, float $lng2): float { + $R = 6371000; + $dLat = deg2rad($lat2 - $lat1); + $dLng = deg2rad($lng2 - $lng1); + $a = sin($dLat / 2) ** 2 + + cos(deg2rad($lat1)) * cos(deg2rad($lat2)) * sin($dLng / 2) ** 2; + return $R * 2 * atan2(sqrt($a), sqrt(1 - $a)); +} + +// ============================================================ +// 📡 Forward موقع السائق → سيرفر الراكب (ASYNC) +// ============================================================ +function forwardLocationToPassengerSocket( + string $driverId, + string $passengerId, + array $payload, + string $internalKey, + array &$fwdThrottle +): void { + if (empty($passengerId)) return; + + $now = time(); + $last = $fwdThrottle[$driverId] ?? null; + + if ($last !== null) { + $timeDiff = $now - $last['ts']; + $dist = haversineDistance( + $last['lat'], $last['lng'], + (float)$payload['lat'], (float)$payload['lng'] + ); + if ($dist < FORWARD_MIN_METERS && $timeDiff < FORWARD_MAX_SECONDS) return; + } + + $fwdThrottle[$driverId] = [ + 'ts' => $now, + 'lat' => (float)$payload['lat'], + 'lng' => (float)$payload['lng'], + ]; + + $passengerSocketUrl = getenv('PASSENGER_SOCKET_INTERNAL_URL') ?: 'http://127.0.0.1:3031'; + $http = new AsyncHttp(); + $http->request( + $passengerSocketUrl, + [ + 'method' => 'POST', + 'data' => http_build_query([ + 'action' => 'update_driver_location', + 'passenger_id' => $passengerId, + 'payload' => json_encode($payload), + ]), + 'headers' => [ + 'Content-Type' => 'application/x-www-form-urlencoded', + 'x-internal-key' => $internalKey, + 'Connection' => 'close', + ], + 'timeout' => 3, + ], + null, + fn(\Exception $e) => logMsg('⚠️ Forward failed: ' . $e->getMessage()) + ); +} + +// ============================================================ +// 📲 FCM (ASYNC) +// ============================================================ +function sendFCM_Async(string $token, string $title, string $body, array $rideData): void { + if (empty($token)) return; + + $http = new AsyncHttp(); + $http->request( + 'https://api.intaleq.xyz/intaleq/ride/firebase/send_fcm.php', + [ + 'method' => 'POST', + 'data' => json_encode([ + 'target' => $token, + 'title' => $title, + 'body' => $body, + 'isTopic' => false, + 'category' => 'Order', + 'tone' => 'start', + 'passengerList' => json_encode($rideData), + ]), + 'headers' => ['Content-Type' => 'application/json; charset=UTF-8'], + 'timeout' => 5, + ], + null, + fn(\Exception $e) => logMsg('⚠️ FCM failed: ' . $e->getMessage()) + ); +} + +// ============================================================ +// 🧠 Memory State & Event Buffer +// ============================================================ +$connectedDrivers = []; +$active_orders_drivers = []; +$driverState = []; +$fwdThrottle = []; +$eventBuffer = []; // 🚀 Level 2: مصفوفة تجميع الأحداث لـ Redis + +// ============================================================ +// 🚀 Socket.IO — بورت 2020 +// ============================================================ +$io = new SocketIO(2020); + +// ============================================================ +// A. Internal HTTP Server & Redis Batch Processor (Worker Start) +// ============================================================ +$io->on('workerStart', function () use ($io, $INTERNAL_KEY) { + + // 🚀 1. Redis Pipeline Batch Processor (Level 2) + // يعمل كل نصف ثانية، يجمع كل الأوامر ويرسلها لـ Redis دفعة واحدة + Timer::add(REDIS_BATCH_INTERVAL, function() { + global $eventBuffer; + if (empty($eventBuffer)) return; + + $redis = getRedis(); + if (!$redis) return; + + try { + $pipe = $redis->pipeline(); + $processedCount = 0; + + foreach ($eventBuffer as $driverId => $ops) { + $profileKey = "driver:profile:$driverId"; + $processedCount++; + + if (isset($ops['hmset'])) { + $pipe->hmset($profileKey, $ops['hmset']); + } + if (isset($ops['expire'])) { + $pipe->expire($profileKey, $ops['expire']); + } + if (isset($ops['status_change'])) { + $oldStatus = $ops['status_change']['old']; + $newStatus = $ops['status_change']['new']; + + // إزالة من المجموعة القديمة + if ($oldStatus === 'on') $pipe->zrem('geo:drivers:busy', $driverId); + if ($oldStatus === 'off') $pipe->zrem('geo:drivers:available', $driverId); + + if ($newStatus === 'close' || $newStatus === 'blocked') { + $pipe->zrem('geo:drivers:available', $driverId); + $pipe->zrem('geo:drivers:busy', $driverId); + } elseif ($newStatus === 'off') { + // أصبح متاحاً → أضفه إلى geo:drivers:available + $pipe->zadd('geo:drivers:available', 0, $driverId); + } elseif ($newStatus === 'on') { + // أصبح مشغولاً → أضفه إلى geo:drivers:busy + $pipe->zadd('geo:drivers:busy', 0, $driverId); + } + } + if (isset($ops['geoadd'])) { + $st = $ops['geoadd']['status']; + $lng = $ops['geoadd']['lng']; + $lat = $ops['geoadd']['lat']; + + if ($st === 'off') { + $pipe->geoadd('geo:drivers:available', $lng, $lat, $driverId); + } elseif ($st === 'on') { + $pipe->geoadd('geo:drivers:busy', $lng, $lat, $driverId); + } + } + } + + $pipe->execute(); + $eventBuffer = []; // إفراغ المصفوفة بعد التنفيذ الناجح + + } catch (\Exception $e) { + logMsg("⚠️ Redis Pipeline Error: " . $e->getMessage()); + } + }); + + // 🌐 2. Internal HTTP Server — بورت 2021 + $innerHttp = new Worker('http://0.0.0.0:2021'); + + $innerHttp->onMessage = function ($connection, $request) use ($io, $INTERNAL_KEY) { + global $active_orders_drivers, $connectedDrivers; + + $headers = $request->header(); + if (($headers['x-internal-key'] ?? '') !== $INTERNAL_KEY) { + $connection->send('Unauthorized'); + return; + } + + $post = $request->post(); + $action = trim($post['action'] ?? ''); + $redis = getRedis(); + + // ── 1. Dispatch Order ──────────────────────────────── + if ($action === 'dispatch_order') { + $rideId = $post['ride_id'] ?? null; + $drivers = json_decode($post['drivers_ids'] ?? '[]', true); + $payload = $post['payload'] ?? []; + if (is_array($payload)) $payload = array_values($payload); + + if ($rideId && !empty($drivers)) { + $active_orders_drivers[$rideId] = $drivers; + logMsg("🚀 Dispatch Ride #$rideId → " . count($drivers) . ' drivers.'); + } + + foreach ($drivers as $driverId) { + if (!isset($connectedDrivers[$driverId])) continue; + $io->to('driver_' . $driverId)->emit('new_ride_request', $payload); + + $platform = $connectedDrivers[$driverId]['platform'] ?? 'android'; + $token = $connectedDrivers[$driverId]['token'] ?? ''; + if ($platform === 'ios' && !empty($token)) { + sendFCM_Async($token, 'طلب جديد', 'لديك رحلة جديدة قريبة منك', $payload); + } + } + $connection->send('Dispatched'); + + // ── 2. Market New Ride ──────────────────────────────── + } elseif ($action === 'market_new_ride') { + $payload = $post['payload'] ?? []; + $rideId = $payload['id'] ?? null; + $lat = (float)($payload['start_lat'] ?? 0); + $lng = (float)($payload['start_lng'] ?? 0); + $endLat = isset($payload['end_lat']) ? (float)$payload['end_lat'] : null; + $endLng = isset($payload['end_lng']) ? (float)$payload['end_lng'] : null; + + if (!$redis || !$rideId || $lat == 0 || $lng == 0) { + $connection->send('Error: Redis unavailable or invalid coords'); + return; + } + + $redis->geoadd('geo:rides:waiting', $lng, $lat, $rideId); + $nearbyDrivers = $redis->georadius('geo:drivers:available', $lng, $lat, 50, 'km'); + + $count = 0; + foreach ($nearbyDrivers as $driverId) { + if (isset($connectedDrivers[$driverId])) { + // Check if driver has a destination constraint in Redis + $profileKey = "driver:profile:$driverId"; + $profile = $redis->hgetall($profileKey); + if ($profile && isset($profile['has_destination']) && $profile['has_destination'] == 1 && $endLat !== null && $endLng !== null) { + $driverDestLat = (float)($profile['destination_lat'] ?? 0); + $driverDestLng = (float)($profile['destination_lng'] ?? 0); + + $destDistance = haversineDistance($endLat, $endLng, $driverDestLat, $driverDestLng); + // Filter out driver if destination is > 5km (5000 meters) away + if ($destDistance > 5000.0) { + continue; + } + } + + $io->to('driver_' . $driverId)->emit('market_new_ride', $payload); + $count++; + } + } + logMsg("📢 Market Ride #$rideId → $count drivers."); + $connection->send("Broadcasted to $count drivers"); + + // ── 3. Get Nearby Ride IDs ──────────────────────────── + } elseif ($action === 'get_nearby_ride_ids') { + $lat = (float)($post['lat'] ?? 0); + $lng = (float)($post['lng'] ?? 0); + $radius = (float)($post['radius'] ?? 9); + + if (!$redis) { $connection->send(json_encode([])); return; } + + $results = $redis->georadius( + 'geo:rides:waiting', $lng, $lat, $radius, 'km', + ['WITHDIST' => true, 'SORT' => 'ASC', 'COUNT' => 40] + ); + $connection->send(json_encode($results)); + + // ── 4. Ride Taken ───────────────────────────────────── + } elseif ($action === 'ride_taken_event') { + $rideId = $post['ride_id'] ?? null; + $winnerDriverId = $post['taken_by_driver_id'] ?? null; + + if (!$rideId) { $connection->send('Error: Missing ride_id'); return; } + + if ($redis) $redis->zrem('geo:rides:waiting', $rideId); + + $io->emit('ride_taken', [ + 'ride_id' => $rideId, + 'taken_by_driver_id' => $winnerDriverId, + ]); + + unset($active_orders_drivers[$rideId]); + logMsg("✅ Ride #$rideId taken by #$winnerDriverId."); + $connection->send('OK'); + + // ── 5. Force Disconnect ─────────────────────────────── + } elseif ($action === 'force_disconnect') { + $driverId = $post['driver_id'] ?? null; + + if ($driverId && isset($connectedDrivers[$driverId])) { + $connectedDrivers[$driverId]['conn']->disconnect(); + unset($connectedDrivers[$driverId]); + + if ($redis) { + $redis->zrem('geo:drivers:available', $driverId); + $redis->zrem('geo:drivers:busy', $driverId); + } + logMsg("🚫 Driver #$driverId force-disconnected."); + $connection->send('Disconnected'); + } else { + $connection->send('Driver not connected'); + } + + // ── 6. Update Driver Destination ────────────────────── + } elseif ($action === 'update_driver_destination') { + $driverId = $post['driver_id'] ?? null; + $hasDest = isset($post['has_destination']) ? intval($post['has_destination']) : 0; + + if (!$driverId || !$redis) { + $connection->send('Error: Missing driver_id or Redis unavailable'); + return; + } + + $profileKey = "driver:profile:$driverId"; + if ($hasDest === 1) { + $destLat = $post['destination_lat'] ?? ''; + $destLng = $post['destination_lng'] ?? ''; + $destName = $post['destination_name'] ?? ''; + + $redis->hmset($profileKey, [ + 'has_destination' => 1, + 'destination_lat' => $destLat, + 'destination_lng' => $destLng, + 'destination_name' => $destName + ]); + $redis->expire($profileKey, 86400); // 24 Hours + logMsg("🎯 Destination set for Driver #$driverId: $destName ($destLat, $destLng)"); + } else { + $redis->hmset($profileKey, ['has_destination' => 0]); + $redis->hdel($profileKey, ['destination_lat', 'destination_lng', 'destination_name']); + logMsg("🎯 Destination cleared for Driver #$driverId"); + } + $connection->send('OK'); + + } else { + $connection->send('Unknown action'); + } + }; + + $innerHttp->listen(); +}); + +// ============================================================ +// B. WebSocket Events للسائقين +// ============================================================ +$io->on('connection', function ($socket) use ($INTERNAL_KEY) { + global $connectedDrivers, $driverState, $fwdThrottle, $eventBuffer; + + $query = $socket->handshake['query'] ?? []; + $driverId = $query['driver_id'] ?? null; + $platform = $query['platform'] ?? 'android'; + $token = $query['token'] ?? ''; + + if (!$driverId) { + $socket->disconnect(); + return; + } + + $socket->join('driver_' . $driverId); + $connectedDrivers[$driverId] = [ + 'conn' => $socket, + 'platform' => $platform, + 'token' => $token, + ]; + + if (!isset($driverState[$driverId])) { + $driverState[$driverId] = [ + 'lat' => 0.0, + 'lng' => 0.0, + 'speed' => -999.0, + 'heading' => -999.0, + 'status' => '', + 'expire_ts' => 0, + ]; + } + + logMsg("✅ Driver Connected: #$driverId ($platform)"); + + $socket->on('ping_alive', function () { + // Socket.IO handles pong automatically + }); + + $socket->on('update_location', function ($data) + use ($driverId, $INTERNAL_KEY, &$driverState, &$fwdThrottle, &$eventBuffer) + { + global $connectedDrivers; + + $data = (array) $data; + + $lat = isset($data['lat']) ? (float)$data['lat'] : null; + $lng = isset($data['lng']) ? (float)$data['lng'] : null; + $heading = (float)($data['heading'] ?? 0); + $speed = (float)($data['speed'] ?? 0); + $status = (string)($data['status'] ?? 'off'); + $distance = (float)($data['distance'] ?? 0); + $passengerId = (string)($data['passenger_id'] ?? ''); + $rideId = $data['ride_id'] ?? null; + + if ($lat === null || $lng === null) return; + + $state = &$driverState[$driverId]; + $now = time(); + + // 1. Forward للراكب (ASYNC + throttle) + if (!empty($passengerId)) { + forwardLocationToPassengerSocket( + $driverId, $passengerId, + [ + 'latitude' => $lat, + 'longitude' => $lng, + 'heading' => $heading, + 'speed' => $speed, + 'ride_id' => $rideId, + 'driver_id' => $driverId, + ], + $INTERNAL_KEY, $fwdThrottle + ); + } + + // 2. حساب ماذا تغيّر لتجنب ضغط Redis + $movedMeters = ($state['lat'] == 0.0 && $state['lng'] == 0.0) + ? 999.0 + : haversineDistance($state['lat'], $state['lng'], $lat, $lng); + + $didMove = $movedMeters >= MIN_MOVE_METERS; + $speedMs = $speed / 3.6; + $speedChanged = abs($speedMs - $state['speed']) >= HMSET_SPEED_DELTA; + $headingChanged = abs($heading - $state['heading']) >= HMSET_HEADING_DELTA; + $statusChanged = ($status !== $state['status']); + + $needHmset = $speedChanged || $headingChanged || $statusChanged; + $needGeoadd = $didMove; + $needExpireRefresh = ($now - $state['expire_ts']) >= EXPIRE_REFRESH_SECONDS; + + if (!$needHmset && (!$needGeoadd && !$statusChanged) && !$needExpireRefresh) { + return; // لم يتغير شيء مهم، تجاهل تماماً (0 عمليات Redis) + } + + // 🚀 3. Buffering Event بدل الإرسال المباشر لـ Redis (Level 2 Magic) + if (!isset($eventBuffer[$driverId])) { + $eventBuffer[$driverId] = []; + } + + if ($needHmset) { + $eventBuffer[$driverId]['hmset'] = [ + 'id' => $driverId, 'heading' => $heading, 'speed' => $speed, 'status' => $status, 'updated_at' => $now + ]; + $state['speed'] = $speedMs; + $state['heading'] = $heading; + } + + if ($needExpireRefresh || $needHmset) { + $eventBuffer[$driverId]['expire'] = 900; + $state['expire_ts'] = $now; + } + + if ($statusChanged) { + $eventBuffer[$driverId]['status_change'] = [ + 'old' => $state['status'], + 'new' => $status + ]; + $state['status'] = $status; + + // Auto disconnect if blocked + if ($status === 'blocked') { + if (isset($connectedDrivers[$driverId])) { + $connectedDrivers[$driverId]['conn']->disconnect(); + unset($connectedDrivers[$driverId]); + } + } + } + + if ($needGeoadd || $statusChanged) { + $eventBuffer[$driverId]['geoadd'] = [ + 'status' => $status, + 'lng' => $lng, + 'lat' => $lat + ]; + if ($needGeoadd) { + $state['lat'] = $lat; + $state['lng'] = $lng; + } + } + }); + + $socket->on('disconnect', function () use ($driverId) { + global $connectedDrivers, $driverState, $fwdThrottle; + + unset($connectedDrivers[$driverId]); + unset($driverState[$driverId]); + unset($fwdThrottle[$driverId]); + + logMsg("❌ Driver Disconnected: #$driverId"); + }); +}); + +Worker::runAll(); \ No newline at end of file diff --git a/loction_server/find_drivers_redis.php b/loction_server/find_drivers_redis.php new file mode 100755 index 00000000..89d233ae --- /dev/null +++ b/loction_server/find_drivers_redis.php @@ -0,0 +1,83 @@ + false, 'message' => 'Missing coordinates']); + exit; +} + +// 2. الاتصال بالريدز +try { + $redis = new Client([ + 'scheme' => 'tcp', + 'host' => '127.0.0.1','password' => $PASS_REDIS, + 'port' => 6379, + ]); + $redis->connect(); +} catch (Exception $e) { + echo json_encode(['status' => false, 'message' => 'Redis Error']); + exit; +} + +// 3. البحث الجغرافي (السحر هنا) 🎩 +// يبحث عن السائقين المتاحين (available) فقط +// التعديل: تفعيل WITHDIST و SORT كـ مفاتيح +$driversGeo = $redis->georadius( + 'geo:drivers:available', + $lng, + $lat, + $radius, + 'km', + ['WITHDIST' => true,'WITHCOORD' => true, 'COUNT' => $limit, 'SORT' => 'ASC'] +); + +// النتيجة تكون مصفوفة: [ [driver_id, distance], ... ] + +$resultDrivers = []; + +// 4. جلب التفاصيل +if (!empty($driversGeo)) { + foreach ($driversGeo as $item) { + $driverId = $item[0]; + $distance = $item[1]; // المسافة بالكيلومتر + $d_coord= $item[2]; // [0=>lng, 1=>lat] 🔥 الإحداثيات هنا + + // جلب البيانات الوصفية من الرام (Profile) + // هذه البيانات خزنها السوكيت قبل قليل + $profile = $redis->hgetall("driver:profile:$driverId"); + + // دمج البيانات + $resultDrivers[] = [ + 'driver_id' => $driverId, + 'distance_km' => $distance, + 'heading' => $profile['heading'] ?? 0, + 'speed' => $profile['speed'] ?? 0, + 'status' => $profile['status'] ?? 'off', + 'lat' => $d_coord[1], // Latitude من الريدز (أدق) + 'lng' => $d_coord[0] // Longitude + // يمكنك هنا إضافة استعلام MySQL بسيط لجلب اسم السائق وصورته إذا لم تكن مخزنة في الريدز + // لكن للسرعة، سنكتفي بهذا الآن + ]; + } +} + +// 5. إرجاع النتيجة +echo json_encode([ + 'status' => true, + 'count' => count($resultDrivers), + 'drivers' => $resultDrivers +]); +?> \ No newline at end of file diff --git a/loction_server/index.php b/loction_server/index.php new file mode 100755 index 00000000..66807395 --- /dev/null +++ b/loction_server/index.php @@ -0,0 +1,3 @@ + OLD.latitude OR NEW.longitude <> OLD.longitude THEN +SET NEW.location_point = ST_PointFromText(CONCAT('POINT(', NEW.longitude, ' ', NEW.latitude, ')'), 4326); +END IF; +END +$$ +DELIMITER ; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `car_tracks` +-- + +CREATE TABLE `car_tracks` ( + `id` int NOT NULL, + `driver_id` varchar(100) NOT NULL, + `latitude` decimal(10,7) NOT NULL, + `longitude` decimal(10,7) NOT NULL, + `heading` float DEFAULT NULL, + `speed` float DEFAULT NULL, + `distance` float DEFAULT NULL, + `status` enum('on','off') DEFAULT 'off', + `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `driver_behavior` +-- + +CREATE TABLE `driver_behavior` ( + `id` int NOT NULL, + `driver_id` varchar(255) NOT NULL, + `trip_id` varchar(255) NOT NULL, + `max_speed` double DEFAULT '0', + `avg_speed` double DEFAULT '0', + `hard_brakes` int DEFAULT '0', + `total_distance` double DEFAULT '0', + `behavior_score` double DEFAULT '0', + `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `driver_daily_summary` +-- + +CREATE TABLE `driver_daily_summary` ( + `id` int NOT NULL, + `driver_id` varchar(33) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL, + `date` date NOT NULL, + `total_seconds` int DEFAULT '0', + `last_updated_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `driver_daily_work` +-- + +CREATE TABLE `driver_daily_work` ( + `driver_id` int NOT NULL, + `work_date` date NOT NULL, + `total_seconds` int NOT NULL DEFAULT '0', + `last_point_at` datetime DEFAULT NULL, + `last_status` enum('on','off') CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT 'off', + `updated_at` datetime NOT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `driver_orders` +-- + +CREATE TABLE `driver_orders` ( + `id` int NOT NULL, + `driver_id` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `order_id` varchar(99) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL, + `notes` varchar(200) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL DEFAULT 'nothing', + `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + `status` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT 'applied' +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `login_attempts` +-- + +CREATE TABLE `login_attempts` ( + `id` int NOT NULL, + `ip_address` varchar(45) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, + `attempt_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `login_attempts_drivers` +-- + +CREATE TABLE `login_attempts_drivers` ( + `id` int NOT NULL, + `ip_address` varchar(45) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `attempt_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `places` +-- + +CREATE TABLE `places` ( + `id` int NOT NULL, + `latitude` double NOT NULL, + `longitude` double NOT NULL, + `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `name_ar` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, + `name_en` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, + `address` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, + `category` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `server_locations` +-- + +CREATE TABLE `server_locations` ( + `id` int NOT NULL, + `name` varchar(255) NOT NULL, + `min_latitude` decimal(10,6) NOT NULL, + `max_latitude` decimal(10,6) NOT NULL, + `min_longitude` decimal(10,6) NOT NULL, + `max_longitude` decimal(10,6) NOT NULL, + `server_link` varchar(255) NOT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; + +-- +-- Indexes for dumped tables +-- + +-- +-- Indexes for table `car_locations` +-- +ALTER TABLE `car_locations` + ADD PRIMARY KEY (`driver_id`), + ADD KEY `idx_loc_status_time` (`status`,`updated_at`,`latitude`,`longitude`), + ADD SPATIAL KEY `idx_location_point` (`location_point`); + +-- +-- Indexes for table `car_tracks` +-- +ALTER TABLE `car_tracks` + ADD PRIMARY KEY (`id`), + ADD KEY `idx_driver_time` (`driver_id`,`created_at`); + +-- +-- Indexes for table `driver_behavior` +-- +ALTER TABLE `driver_behavior` + ADD PRIMARY KEY (`id`); + +-- +-- Indexes for table `driver_daily_summary` +-- +ALTER TABLE `driver_daily_summary` + ADD PRIMARY KEY (`id`), + ADD UNIQUE KEY `unique_driver_date` (`driver_id`,`date`); + +-- +-- Indexes for table `driver_daily_work` +-- +ALTER TABLE `driver_daily_work` + ADD PRIMARY KEY (`driver_id`,`work_date`), + ADD KEY `idx_driver_date` (`driver_id`,`work_date`); + +-- +-- Indexes for table `driver_orders` +-- +ALTER TABLE `driver_orders` + ADD PRIMARY KEY (`id`); + +-- +-- Indexes for table `login_attempts` +-- +ALTER TABLE `login_attempts` + ADD PRIMARY KEY (`id`); + +-- +-- Indexes for table `login_attempts_drivers` +-- +ALTER TABLE `login_attempts_drivers` + ADD PRIMARY KEY (`id`); + +-- +-- Indexes for table `places` +-- +ALTER TABLE `places` + ADD PRIMARY KEY (`id`); + +-- +-- Indexes for table `server_locations` +-- +ALTER TABLE `server_locations` + ADD PRIMARY KEY (`id`), + ADD UNIQUE KEY `name` (`name`); + +-- +-- AUTO_INCREMENT for dumped tables +-- + +-- +-- AUTO_INCREMENT for table `car_tracks` +-- +ALTER TABLE `car_tracks` + MODIFY `id` int NOT NULL AUTO_INCREMENT; + +-- +-- AUTO_INCREMENT for table `driver_behavior` +-- +ALTER TABLE `driver_behavior` + MODIFY `id` int NOT NULL AUTO_INCREMENT; + +-- +-- AUTO_INCREMENT for table `driver_daily_summary` +-- +ALTER TABLE `driver_daily_summary` + MODIFY `id` int NOT NULL AUTO_INCREMENT; + +-- +-- AUTO_INCREMENT for table `driver_orders` +-- +ALTER TABLE `driver_orders` + MODIFY `id` int NOT NULL AUTO_INCREMENT; + +-- +-- AUTO_INCREMENT for table `login_attempts` +-- +ALTER TABLE `login_attempts` + MODIFY `id` int NOT NULL AUTO_INCREMENT; + +-- +-- AUTO_INCREMENT for table `login_attempts_drivers` +-- +ALTER TABLE `login_attempts_drivers` + MODIFY `id` int NOT NULL AUTO_INCREMENT; + +-- +-- AUTO_INCREMENT for table `places` +-- +ALTER TABLE `places` + MODIFY `id` int NOT NULL AUTO_INCREMENT; + +-- +-- AUTO_INCREMENT for table `server_locations` +-- +ALTER TABLE `server_locations` + MODIFY `id` int NOT NULL AUTO_INCREMENT; +COMMIT; + +/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; +/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; +/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; diff --git a/loction_server/siro/connect.php b/loction_server/siro/connect.php new file mode 100755 index 00000000..ad1d5684 --- /dev/null +++ b/loction_server/siro/connect.php @@ -0,0 +1,64 @@ + false, + PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, + PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, + PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES UTF8" + ]; + $user = getenv('USER'); // Still used for DB connection + $pass = getenv('PASS'); // Still used for DB connection + $con = new PDO($dsn, $user, $pass, $options); +//$con->exec("SET time_zone = '+03:00'"); + // --- JWT Authentication --- + // include "encrypt_decrypt.php"; + include "functions.php"; // Include the functions file + + + $decodedToken = authenticateJWT(); // Call the authentication function + + +} catch (PDOException $e) { + error_log($e->getMessage()); + http_response_code(500); // Internal Server Error + echo json_encode(['error' => 'A database error occurred.']); + exit; +} +?> \ No newline at end of file diff --git a/loction_server/siro/functions.php b/loction_server/siro/functions.php new file mode 100755 index 00000000..550775d0 --- /dev/null +++ b/loction_server/siro/functions.php @@ -0,0 +1,468 @@ + 'update_driver_location', + 'passenger_id' => $passengerId, + 'payload' => $payload + ]; + + $ch = curl_init(); + curl_setopt($ch, CURLOPT_URL, $url); + curl_setopt($ch, CURLOPT_POST, 1); + curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($postData)); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); + curl_setopt($ch, CURLOPT_TIMEOUT_MS, 100); + curl_setopt($ch, CURLOPT_HTTPHEADER, ["x-internal-key: $INTERNAL_KEY"]); + curl_exec($ch); + curl_close($ch); +} + +// 2. استدعها داخل $socket->on('update_location'...) +// يجب أن يرسل السائق passenger_id معه في الـ update_location أو تكون مخزنة في الـ session +// $socket->on('update_location', function($data) use ($socket) { +// ... كود الحفظ في الداتابيز ... +// +// if (!empty($data['passenger_id'])) { +// forwardLocationToPassengerSocket($data['passenger_id'], $data); +// } +// }); +function authenticateJWT() +{ + $secretKey = trim(file_get_contents('/home/location/.secret_key')); // Access secret key (ensure it's set in .env) + if (!$secretKey) { + error_log("SECRET_KEY not set in environment variables."); + http_response_code(500); // Internal Server Error + echo json_encode(['error' => 'Internal server configuration error.']); + exit; + } + + + // 1. Get the JWT from the Authorization header + $authHeader = $_SERVER['HTTP_AUTHORIZATION'] ?? ''; + $token = null; + + if (preg_match('/Bearer\s(\S+)/', $authHeader, $matches)) { + $token = $matches[1]; + } + + // 2. Check if the token exists + if (!$token) { + http_response_code(401); // Unauthorized + echo json_encode(['error' => 'Authorization token required']); + exit; + } + + // 3. Verify the JWT + try { + $decoded = JWT::decode($token, new Key($secretKey, 'HS256')); + + /* // 4. Validate claims (audience, issuer) + $decrypted_aud = $encryptionHelper->decryptData($decoded->aud); + $allowedAudiences = [getenv('allowed1'), getenv('allowed2'),getenv('allowedDriver1'),getenv('allowedDriver2'), + getenv('allowedService1'), getenv('allowedService2') ]; // "passenger", "driver" + + if (!in_array($decrypted_aud, $allowedAudiences)) { + throw new Exception('Invalid audience'); + error_log("[Debug] 'Invalid audience'"); + } + + $decrypted_iss = $encryptionHelper->decryptData($decoded->iss ?? ''); + if ($decrypted_iss !== 'Tripz') { + throw new Exception('Invalid issuer'); + error_log("[Debug] 'Invalid issuer'"); + } +*/ + // 5. Authentication successful! + return $decoded; // Return the decoded payload + + } catch (ExpiredException $e) { + http_response_code(401); + echo json_encode(['error' => 'Token expired']); + exit; + } catch (SignatureInvalidException $e) { + http_response_code(401); + echo json_encode(['error' => 'Invalid token signature']); + exit; + } catch (BeforeValidException $e) { + http_response_code(401); + echo json_encode(['error' => 'Token not yet valid']); + exit; + } catch (Exception $e) { + http_response_code(401); + echo json_encode(['error' => 'Invalid token: ' . $e->getMessage()]); + exit; + } +} +define("MB", 1048576); + +/** + * Send WhatsApp message using your server's API + * + * @param string $to The recipient phone number (e.g., 96279xxxxxxx) + * @param string $message The message to send + * @return mixed API response object or false on failure + */ +function sendWhatsAppFromServer($to, $message) +{ + // 1) قائمة السيرفرات المتاحة + $servers = [ + "https://whatsapp.intaleq.xyz/send" + //, + //"https://bot3.intaleq.xyz/send" + ]; + + // 2) اختيار عشوائي + $url = $servers[array_rand($servers)]; + + // 3) إعداد البيانات + $payload = [ + "to" => $to, + "message" => $message + ]; + + // 4) تنفيذ الطلب + $curl = curl_init(); + curl_setopt_array($curl, [ + CURLOPT_URL => $url, + CURLOPT_RETURNTRANSFER => true, + CURLOPT_CUSTOMREQUEST => "POST", + CURLOPT_POSTFIELDS => json_encode($payload, JSON_UNESCAPED_UNICODE), + CURLOPT_HTTPHEADER => [ + "Content-Type: application/json" + ], + ]); + + $response = curl_exec($curl); + $err = curl_error($curl); + curl_close($curl); + + // 5) تسجيل النتيجة + if ($err) { + error_log("[sendWhatsAppFromServer] cURL Error on $url: $err"); + return false; + } + + return json_decode($response, true); +} + +function debugLog($message) { + error_log($message); +} + +function filterRequest($requestname, $type = 'string') { + if (isset($_POST[$requestname]) && !empty($_POST[$requestname])) { + $value = trim($_POST[$requestname]); + // Remove any control characters + $value = preg_replace('/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F]/', '', $value); + // Remove any HTML or XML tags + $value = strip_tags($value); + // Escape any special characters + $value = htmlspecialchars($value, ENT_QUOTES | ENT_HTML5, 'UTF-8'); + + if ($type === 'numeric') { + if (filter_var($value, FILTER_VALIDATE_FLOAT) !== false) { + return $value; + } + } else { + return $value; + } + } + return null; +} + + +function getAllData($table, $where = null, $values = null, $json = true) +{ + global $con; + $data = array(); + if ($where == null) { + $stmt = $con->prepare("SELECT * FROM $table "); + } else { + $stmt = $con->prepare("SELECT * FROM $table WHERE $where "); + } + $stmt->execute($values); + $data = $stmt->fetchAll(PDO::FETCH_ASSOC); + $count = $stmt->rowCount(); + if ($json == true) { + if ($count > 0) { + echo json_encode(array("status" => "success","count" => $count, "data" => $data)); + } else { + echo json_encode(array("status" => "failure")); + } + return $count; + } else { + if ($count > 0) { + return $data; + } else { + return json_encode(array("status" => "failure")); + } + } +} + +function getData($table, $where = null, $values = null) +{ + global $con; + $data = array(); + $stmt = $con->prepare("SELECT * FROM $table WHERE $where "); + $stmt->execute($values); + $data = $stmt->fetch(PDO::FETCH_ASSOC); + $count = $stmt->rowCount(); + if ($count > 0) { + echo json_encode(array("status" => "success", "count" => $count, "data" => $data)); + } else { + echo json_encode(array("status" => "failure")); + } + return $count; +} + + + + +function insertData($table, $data, $json = true) +{ + global $con; + foreach ($data as $field => $v) + $ins[] = ':' . $field; + $ins = implode(',', $ins); + $fields = implode(',', array_keys($data)); + $sql = "INSERT INTO $table ($fields) VALUES ($ins)"; + + $stmt = $con->prepare($sql); + foreach ($data as $f => $v) { + $stmt->bindValue(':' . $f, $v); + } + $stmt->execute(); + $count = $stmt->rowCount(); + if ($json == true) { + if ($count > 0) { + echo json_encode(array("status" => "success")); + } else { + echo json_encode(array("status" => "failure")); + } + } + return $count; +} + + +function updateData($table, $data, $where, $json = true) +{ + global $con; + $cols = array(); + $vals = array(); + + foreach ($data as $key => $val) { + $vals[] = "$val"; + $cols[] = "`$key` = ? "; + } + $sql = "UPDATE $table SET " . implode(', ', $cols) . " WHERE $where"; + + $stmt = $con->prepare($sql); + $stmt->execute($vals); + $count = $stmt->rowCount(); + if ($json == true) { + if ($count > 0) { + echo json_encode(array("status" => "success")); + } else { + echo json_encode(array("status" => "failure")); + } + } + return $count; +} + +function deleteData($table, $where, $json = true) +{ + global $con; + $stmt = $con->prepare("DELETE FROM $table WHERE $where"); + $stmt->execute(); + $count = $stmt->rowCount(); + if ($json == true) { + if ($count > 0) { + echo json_encode(array("status" => "success")); + } else { + echo json_encode(array("status" => "failure")); + } + } + return $count; +} + +function imageUpload($imageRequest) +{ + global $msgError; + $imagename = rand(1000, 10000) . $_FILES[$imageRequest]['name']; + $imagetmp = $_FILES[$imageRequest]['tmp_name']; + $imagesize = $_FILES[$imageRequest]['size']; + $allowExt = array("jpg", "png", "gif", "mp3", "pdf"); + $strToArray = explode(".", $imagename); + $ext = end($strToArray); + $ext = strtolower($ext); + + if (!empty($imagename) && !in_array($ext, $allowExt)) { + $msgError = "EXT"; + } + if ($imagesize > 2 * MB) { + $msgError = "size"; + } + if (empty($msgError)) { + move_uploaded_file($imagetmp, "../upload/" . $imagename); + return $imagename; + } else { + return "fail"; + } +} + + + +function deleteFile($dir, $imagename) +{ + if (file_exists($dir . "/" . $imagename)) { + unlink($dir . "/" . $imagename); + } +} + +// function checkAuthenticate() +// { +// if (isset($_SERVER['PHP_AUTH_USER']) && isset($_SERVER['PHP_AUTH_PW'])) { +// if ($_SERVER['PHP_AUTH_USER'] != "hamzaayedphp" || $_SERVER['PHP_AUTH_PW'] != "malDEV@2101") { +// header('WWW-Authenticate: Basic realm="My Realm"'); +// header('HTTP/1.0 401 Unauthorized'); +// echo 'Unauthorized'; +// exit; +// } +// } else { +// exit; +// } + +// // End +// } + + +function checkAuthenticate($username, $password) +{ + if (!isset($_SERVER['HTTPS']) || $_SERVER['HTTPS'] !== 'on') { + // Redirect to HTTPS + header('Location: https://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']); + exit; + } + + if (isset($_SERVER['PHP_AUTH_USER']) && isset($_SERVER['PHP_AUTH_PW'])) { + if ($_SERVER['PHP_AUTH_USER'] !== $username || $_SERVER['PHP_AUTH_PW'] !== $password) { + header('WWW-Authenticate: Basic realm="My Realm"'); + header('HTTP/1.0 401 Unauthorized'); + echo 'Unauthorized'; + exit; + } + } else { + header('WWW-Authenticate: Basic realm="My Realm"'); + header('HTTP/1.0 401 Unauthorized'); + echo 'Unauthorized'; + exit; + } + + // Continue with authenticated code +} +// function checkAuthenticate() +// { +// global $secretKey; + +// if (!isset($_SERVER['HTTP_AUTHORIZATION'])) { +// header('HTTP/1.0 401 Unauthorized'); +// echo json_encode(['error' => 'Unauthorized']); +// exit; +// } + +// $authHeader = $_SERVER['HTTP_AUTHORIZATION']; +// list($token) = sscanf($authHeader, 'Bearer %s'); + +// if (!$token) { +// header('HTTP/1.0 401 Unauthorized'); +// echo json_encode(['error' => 'Token not provided']); +// exit; +// } + +// try { +// $decoded = JWT::decode($token, new Key($secretKey, 'HS256')); +// return $decoded; +// } catch (Exception $e) { +// header('HTTP/1.0 401 Unauthorized'); +// echo json_encode(['error' => 'Invalid token']); +// exit; +// } +// } + +function divideAndAddText($apiKey, $text) { + $parts = str_split($apiKey, strlen($apiKey) / 4); + + $dividedApiKey = array(); + $dividedApiKey['birinci'] = $parts[4] . $text; + $dividedApiKey['ikinci'] = $text . $parts[2] . $text; + $dividedApiKey['üçüncü'] = $text . $parts[1] . $text; + $dividedApiKey['dördüncü'] = $parts[0] . $text; + $dividedApiKey['beş'] = $text . $parts[3] . $text; + + $concatenatedApiKey = implode('', $dividedApiKey); + + return $concatenatedApiKey; +} + +function retrieveOriginalApiKey($concatenatedApiKey, $text) { + $originalApiKey = str_replace($text, '', $concatenatedApiKey); + + $resortedApiKey = array(); + $resortedApiKey['birinci'] = $originalApiKey[strlen($originalApiKey) - 5] . $originalApiKey[strlen($originalApiKey) - 3]; + $resortedApiKey['ikinci'] = $originalApiKey[strlen($originalApiKey) - 1] . $originalApiKey[strlen($originalApiKey) - 15]; + $resortedApiKey['üçüncü'] = $originalApiKey[strlen($originalApiKey) - 9] . $originalApiKey[strlen($originalApiKey) - 12]; + $resortedApiKey['dördüncü'] = $originalApiKey[strlen($originalApiKey) - 11] . $originalApiKey[strlen($originalApiKey) - 6]; + $resortedApiKey['beş'] = $originalApiKey[strlen($originalApiKey) - 2] . $originalApiKey[strlen($originalApiKey) - 8]; + + return $resortedApiKey; +} + + + + + + + + + +////////// + +function printFailure($message = "none") +{ + echo json_encode(array("status" => "failure", "message" => $message)); +} +function printSuccess($message = "none") +{ + echo json_encode(array("status" => "success", "message" => $message)); +} + +function result($count) +{ + if ($count > 0) { + printSuccess(); + } else { + printFailure(); + } +} + +function sendEmail($from,$to, $title, $body) +{ + $header = "From: $from" . "\n" . "CC: $from"; + mail($to, $title, $body, $header); +} diff --git a/loction_server/siro/jwtconnect.php b/loction_server/siro/jwtconnect.php new file mode 100755 index 00000000..d2f4fcc4 --- /dev/null +++ b/loction_server/siro/jwtconnect.php @@ -0,0 +1,64 @@ + false, + PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, + PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, + PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES UTF8" + ]; + $user = getenv('USER'); // Still used for DB connection + $pass = getenv('PASS'); // Still used for DB connection + $con = new PDO($dsn, $user, $pass, $options); +//$con->exec("SET time_zone = '+03:00'"); + // --- JWT Authentication --- + // include "encrypt_decrypt.php"; + include "functions.php"; // Include the functions file + + + // $decodedToken = authenticateJWT(); // Call the authentication function + + +} catch (PDOException $e) { + error_log($e->getMessage()); + http_response_code(500); // Internal Server Error + echo json_encode(['error' => 'A database error occurred.']); + exit; +} +?> \ No newline at end of file diff --git a/loction_server/siro/load_env.php b/loction_server/siro/load_env.php new file mode 100755 index 00000000..38c666ae --- /dev/null +++ b/loction_server/siro/load_env.php @@ -0,0 +1,23 @@ + + + + + + تتبع السائقين - Tripz + + + + + + + +
+ +
+

نظام التتبع المباشر

+ +
+ + +
+ +
+ الوضع: + مباشر +
+
+ السائقين: + 0 +
+ + جاري التحميل... + +
+ + + + + + \ No newline at end of file diff --git a/loction_server/siro/ride/heatmap.html b/loction_server/siro/ride/heatmap.html new file mode 100755 index 00000000..70eba703 --- /dev/null +++ b/loction_server/siro/ride/heatmap.html @@ -0,0 +1,160 @@ + + + + + + خريطة الكثافة الحرارية (Grid Heatmap) - OpenStreetMap + + + + + + + + +
+

تحليل كثافة الرحلات

+

هذه الخريطة تقسم المنطقة إلى مربعات جغرافية وتحسب عدد الرحلات في كل مربع.

+
+
طلبات عالية جداً (+5)
+
طلبات عالية (3-4)
+
طلبات متوسطة (2)
+
طلب واحد (1)
+
+
+ +
+ + + + \ No newline at end of file diff --git a/loction_server/siro/ride/location/add.php b/loction_server/siro/ride/location/add.php new file mode 100755 index 00000000..7e299b32 --- /dev/null +++ b/loction_server/siro/ride/location/add.php @@ -0,0 +1,80 @@ + 99999999.99) { $dist = 99999999.99; } + if ($dist < -99999999.99){ $dist = -99999999.99; } + + if (empty($driver_id) || ($lat == 0.0 && $lng == 0.0)) { + printFailure("Invalid payload"); + exit; + } + + // --------------------------------------------------------- + // التعديل الجوهري هنا: + // --------------------------------------------------------- + // تم حذف منطق حساب الوقت بواسطة PHP أو الهاتف. + // سنستخدم NOW() داخل جملة SQL مباشرة لضمان توقيت UTC موحد. + + $sql = "INSERT INTO `car_tracks` + (`driver_id`,`latitude`,`longitude`,`heading`,`speed`,`distance`,`status`,`created_at`) + VALUES + (:driver_id, :latitude, :longitude, :heading, :speed, :distance, :status, NOW())"; + // 👆 استخدمنا NOW() بدلاً من المتغير + + $stmt = $con->prepare($sql); + $ok = $stmt->execute([ + ':driver_id' => $driver_id, + ':latitude' => $lat, + ':longitude' => $lng, + ':heading' => $head, + ':speed' => $spd, + ':distance' => $dist, + ':status' => (string)($status ?? 'on'), + // ':created_at' => $created_at_to_use, // 👈 تم حذف هذا السطر لأنه لم يعد مطلوباً + ]); + + if ($ok) { + printSuccess("car_tracks saved successfully"); + } else { + printFailure("Failed to save car track"); + } +} catch (PDOException $e) { + // يفضل عدم طباعة تفاصيل الخطأ للمستخدم النهائي في الإنتاج، لكن لا بأس للـ Debug + error_log("car_tracks insert error: " . $e->getMessage()); + printFailure("Database error"); +} catch (Throwable $e) { + error_log("car_tracks insert fatal: " . $e->getMessage()); + printFailure("Server error"); +} +?> \ No newline at end of file diff --git a/loction_server/siro/ride/location/add_batch.php b/loction_server/siro/ride/location/add_batch.php new file mode 100755 index 00000000..4a4d107c --- /dev/null +++ b/loction_server/siro/ride/location/add_batch.php @@ -0,0 +1,129 @@ +prepare("SELECT created_at FROM car_tracks WHERE driver_id = ? ORDER BY created_at DESC LIMIT 1"); + $stmtLast->execute([$driver_id]); + $lastRow = $stmtLast->fetch(PDO::FETCH_ASSOC); + + if ($lastRow) { + $last_db_time = strtotime($lastRow['created_at']); + $diff_from_db = $first_point_time - $last_db_time; + + // إذا كان الفرق منطقياً (أقل من 5 دقائق) وموجباً، نحسبه + if ($diff_from_db > 0 && $diff_from_db < 300) { + $batch_added_seconds += $diff_from_db; + } + } + + // ج. حساب الفروقات داخل الباتش نفسه + $prev_time = $first_point_time; + + // نحدد تاريخ هذا الباتش (لنعرف أي يوم نحدث في الجدول اليومي) + $batch_date = date('Y-m-d', $first_point_time); + + foreach ($points as $key => $point) { + if ($key === 0) continue; // تخطي النقطة الأولى لأننا قارناها مع الداتابيز + + $current_time = strtotime($point['ts']); + $diff = $current_time - $prev_time; + + // تجاهل القفزات الكبيرة (أكثر من 5 دقائق) + if ($diff > 0 && $diff < 300) { + $batch_added_seconds += $diff; + } + $prev_time = $current_time; + } + + // --------------------------------------------------------- + // الجزء الثاني: إدخال التراكات (Bulk Insert) - كودك الأصلي + // --------------------------------------------------------- + + $values = []; + $placeholders = []; + + foreach ($points as $point) { + $lat = $point['lat'] ?? 0; + $lng = $point['lng'] ?? 0; + $spd = $point['spd'] ?? 0; + $head = $point['head'] ?? 0; + $dist = $point['dst'] ?? 0; + $stat = $point['st'] ?? 'off'; + $time = $point['ts'] ?? date('Y-m-d H:i:s'); + + $placeholders[] = "(?, ?, ?, ?, ?, ?, ?, ?)"; + array_push($values, $driver_id, $lat, $lng, $head, $spd, $dist, $stat, $time); + } + + $sql = "INSERT INTO `car_tracks` + (`driver_id`, `latitude`, `longitude`, `heading`, `speed`, `distance`, `status`, `created_at`) + VALUES " . implode(', ', $placeholders); + + $stmt = $con->prepare($sql); + $ok = $stmt->execute($values); + + // --------------------------------------------------------- + // الجزء الثالث: تحديث جدول الملخص اليومي (The Smart Update) + // --------------------------------------------------------- + + if ($ok && $batch_added_seconds > 0) { + // نستخدم ON DUPLICATE KEY UPDATE: + // إذا كان السائق موجوداً لهذا اليوم، أضف الثواني للرصيد الموجود + // إذا لم يكن موجوداً، أنشئ سجلاً جديداً + + $sqlSummary = "INSERT INTO `driver_daily_summary` (`driver_id`, `date`, `total_seconds`) + VALUES (?, ?, ?) + ON DUPLICATE KEY UPDATE `total_seconds` = `total_seconds` + VALUES(`total_seconds`)"; + + $stmtSum = $con->prepare($sqlSummary); + $stmtSum->execute([$driver_id, $batch_date, $batch_added_seconds]); + } + + if ($ok) { + echo json_encode(array( + "status" => "success", + "count" => count($points), + "added_seconds" => $batch_added_seconds // للتتبع فقط + )); + } else { + printFailure("Failed to insert batch"); + } + +} catch (PDOException $e) { + error_log("Batch insert error: " . $e->getMessage()); + printFailure("Database error"); +} catch (Throwable $e) { + printFailure("Server error"); +} +?> \ No newline at end of file diff --git a/loction_server/siro/ride/location/addpassengerLocation.php b/loction_server/siro/ride/location/addpassengerLocation.php new file mode 100755 index 00000000..b5ac8e0a --- /dev/null +++ b/loction_server/siro/ride/location/addpassengerLocation.php @@ -0,0 +1,34 @@ +prepare($sql); + +// Bind the parameters to the SQL query +$stmt->bindParam(':passengerId', $passengerId); +$stmt->bindParam(':lat', $lat); +$stmt->bindParam(':lng', $lng); +$stmt->bindParam(':rideId', $rideId); + +// Execute the statement +if ($stmt->execute()) { + // Print a success message + printSuccess("Passenger location saved successfully"); +} else { + // Print a failure message + printFailure("Failed to save passenger location"); +} +?> diff --git a/loction_server/siro/ride/location/delete.php b/loction_server/siro/ride/location/delete.php new file mode 100644 index 00000000..b35886d6 --- /dev/null +++ b/loction_server/siro/ride/location/delete.php @@ -0,0 +1,20 @@ +prepare($sql); +$stmt->execute(); + +if ($stmt->rowCount() > 0) { + // Print a success message + printSuccess($message = "Car location deleted successfully"); +} else { + // Print a failure message + printFailure($message = "Failed to delete car location"); +} + +?> \ No newline at end of file diff --git a/loction_server/siro/ride/location/get.php b/loction_server/siro/ride/location/get.php new file mode 100755 index 00000000..4e832760 --- /dev/null +++ b/loction_server/siro/ride/location/get.php @@ -0,0 +1,146 @@ += NOW() - INTERVAL :freshSeconds SECOND + AND COALESCE(cr.year, 0) > 2000 + AND (cr.make NOT LIKE '%دراج%' AND cr.model NOT LIKE '%دراج%') + ORDER BY cl.updated_at DESC, ratingDriver DESC + LIMIT 5 + "; + + $stmt = $con->prepare($sql); + + // Bind the new bounding box parameter + $stmt->bindValue(':boundingBox', $boundingBoxWKT); + $stmt->bindValue(':freshSeconds', $freshSeconds, PDO::PARAM_INT); + $stmt->execute(); + + $rows = $stmt->fetchAll(PDO::FETCH_ASSOC); + + if (!$rows) { + printFailure("No car locations found"); + exit; + } + + // Decryption and age calculation logic remains the same + $fieldsToDecrypt = [ + 'phone','email','gender','birthdate', + 'first_name','last_name','maritalStatus', + 'token','make','car_plate','vin' + ]; + + foreach ($rows as &$row) { + foreach ($fieldsToDecrypt as $field) { + if (isset($row[$field]) && $row[$field] !== null && $row[$field] !== '') { + try { $row[$field] = $encryptionHelper->decryptData($row[$field]); } + catch (Exception $e) { $row[$field] = null; } + } + } + + if (!empty($row['birthdate'])) { + try { + $birthdate = new DateTime($row['birthdate']); + $today = new DateTime(); + $row['age'] = $today->diff($birthdate)->y; + } catch (Exception $e) { $row['age'] = null; } + } else { + $row['age'] = null; + } + + if (isset($row['serverNow'], $row['updated_at'])) { + error_log('PHP Now: '.date('Y-m-d H:i:s') + .' | MySQL Now: '.$row['serverNow'] + .' | updated_at: '.$row['updated_at']); + } + } + unset($row); + + printSuccess($rows); + +} catch (PDOException $e) { + printFailure("Database error: " . $e->getMessage()); +} catch (Throwable $e) { + printFailure("Internal error: " . $e->getMessage()); +} diff --git a/loction_server/siro/ride/location/getBalash.php b/loction_server/siro/ride/location/getBalash.php new file mode 100755 index 00000000..48f16547 --- /dev/null +++ b/loction_server/siro/ride/location/getBalash.php @@ -0,0 +1,120 @@ += NOW() - INTERVAL :freshSeconds SECOND + AND COALESCE(cr.year, 0) < 2000 + AND (cr.make NOT LIKE '%دراج%' AND cr.model NOT LIKE '%دراج%') + ORDER BY + ratingDriver DESC, -- ⭐ الأولوية للتقييم + ratingCount DESC, -- ثم الأكثر حصولاً على تقييمات + cl.updated_at DESC -- ثم الأحدث تحديثًا كفاصل + LIMIT 5 + "; + + $stmt = $con->prepare($sql); + $stmt->bindValue(':southwestLat', $southwestLat); + $stmt->bindValue(':southwestLon', $southwestLon); + $stmt->bindValue(':northeastLat', $northeastLat); + $stmt->bindValue(':northeastLon', $northeastLon); + $stmt->bindValue(':freshSeconds', $freshSeconds, PDO::PARAM_INT); + $stmt->execute(); + + $rows = $stmt->fetchAll(PDO::FETCH_ASSOC); + + if (!$rows) { + printFailure("No car locations found"); + exit; + } + + // تفكيك التشفير + حساب العمر + $fieldsToDecrypt = [ + 'phone','email','gender','birthdate', + 'first_name','last_name','maritalStatus', + 'token','make','car_plate','vin' + ]; + + foreach ($rows as &$row) { + foreach ($fieldsToDecrypt as $field) { + if (isset($row[$field]) && $row[$field] !== null && $row[$field] !== '') { + try { $row[$field] = $encryptionHelper->decryptData($row[$field]); } + catch (Exception $e) { $row[$field] = null; } + } + } + + if (!empty($row['birthdate'])) { + try { + $birthDate = new DateTime($row['birthdate']); + $today = new DateTime(); + $row['age'] = $today->diff($birthDate)->y; + } catch (Exception $e) { + $row['age'] = null; + } + } else { + $row['age'] = null; + } + } + unset($row); + + printSuccess($rows); + +} catch (PDOException $e) { + printFailure("Database error: " . $e->getMessage()); +} catch (Throwable $e) { + printFailure("Internal error: " . $e->getMessage()); +} \ No newline at end of file diff --git a/loction_server/siro/ride/location/getComfort.php b/loction_server/siro/ride/location/getComfort.php new file mode 100755 index 00000000..b751e91d --- /dev/null +++ b/loction_server/siro/ride/location/getComfort.php @@ -0,0 +1,124 @@ += NOW() - INTERVAL :freshSeconds SECOND + AND COALESCE(cr.year, 0) > 2017 + AND (cr.make NOT LIKE '%دراج%' AND cr.model NOT LIKE '%دراج%') + ORDER BY + ratingDriver DESC, -- ⭐ الأولوية للأعلى تقييماً + ratingCount DESC, -- ثم الأكثر حصولاً على تقييمات + cl.updated_at DESC -- ثم الأحدث تحديثاً كفاصل + LIMIT 5 + "; + + $stmt = $con->prepare($sql); + $stmt->bindValue(':southwestLat', $southwestLat); + $stmt->bindValue(':southwestLon', $southwestLon); + $stmt->bindValue(':northeastLat', $northeastLat); + $stmt->bindValue(':northeastLon', $northeastLon); + $stmt->bindValue(':freshSeconds', $freshSeconds, PDO::PARAM_INT); + $stmt->execute(); + + $car_locations = $stmt->fetchAll(PDO::FETCH_ASSOC); + + if ($car_locations) { + // ✅ فك التشفير (مع حماية الأخطاء) + $fieldsToDecrypt = [ + 'phone','email','gender','birthdate', + 'first_name','last_name','maritalStatus', + 'token','make','car_plate','vin' + ]; + + foreach ($car_locations as &$row) { + foreach ($fieldsToDecrypt as $field) { + if (isset($row[$field]) && $row[$field] !== null && $row[$field] !== '') { + try { + $row[$field] = $encryptionHelper->decryptData($row[$field]); + } catch (Exception $e) { + $row[$field] = null; // تجاهل الفشل وأكمل + } + } + } + + // ✅ حساب العمر بعد فك التشفير + if (!empty($row['birthdate'])) { + try { + $birthDate = new DateTime($row['birthdate']); + $today = new DateTime(); + $row['age'] = $today->diff($birthDate)->y; + } catch (Exception $e) { + $row['age'] = null; + } + } else { + $row['age'] = null; + } + } + unset($row); + + printSuccess($car_locations); + } else { + printFailure("No car locations found"); + } + +} catch (PDOException $e) { + printFailure("Database error: " . $e->getMessage()); +} catch (Throwable $e) { + printFailure("Internal error: " . $e->getMessage()); +} \ No newline at end of file diff --git a/loction_server/siro/ride/location/getDelivery.php b/loction_server/siro/ride/location/getDelivery.php new file mode 100755 index 00000000..62ba3395 --- /dev/null +++ b/loction_server/siro/ride/location/getDelivery.php @@ -0,0 +1,125 @@ += NOW() - INTERVAL :freshSeconds SECOND + -- ⛓️ اختيار فقط الدراجات + AND (cr.make LIKE '%دراج%' OR cr.model LIKE '%دراج%') + ORDER BY + ratingDriver DESC, -- ⭐ أولاً الأعلى تقييماً + ratingCount DESC, -- ثم الأكثر حصولاً على تقييمات + cl.updated_at DESC -- ثم الأحدث تحديثاً كفاصل + LIMIT 10 + "; + + $stmt = $con->prepare($sql); + $stmt->bindValue(':southwestLat', $southwestLat); + $stmt->bindValue(':southwestLon', $southwestLon); + $stmt->bindValue(':northeastLat', $northeastLat); + $stmt->bindValue(':northeastLon', $northeastLon); + $stmt->bindValue(':freshSeconds', $freshSeconds, PDO::PARAM_INT); + $stmt->execute(); + + $car_locations = $stmt->fetchAll(PDO::FETCH_ASSOC); + + if (!$car_locations) { + printFailure("No car locations found"); + exit; + } + + // ✅ فك التشفير (مع حماية الأخطاء) + $fieldsToDecrypt = [ + 'phone','email','gender','birthdate', + 'first_name','last_name','maritalStatus', + 'token','make','car_plate','vin' + ]; + + foreach ($car_locations as &$row) { + foreach ($fieldsToDecrypt as $field) { + if (isset($row[$field]) && $row[$field] !== null && $row[$field] !== '') { + try { + $row[$field] = $encryptionHelper->decryptData($row[$field]); + } catch (Exception $e) { + $row[$field] = null; // تجاهل فشل فك التشفير + } + } + } + + // ✅ حساب العمر بعد فك التشفير + if (!empty($row['birthdate'])) { + try { + $birthDate = new DateTime($row['birthdate']); + $today = new DateTime(); + $row['age'] = $today->diff($birthDate)->y; + } catch (Exception $e) { + $row['age'] = null; + } + } else { + $row['age'] = null; + } + } + unset($row); + + printSuccess($car_locations); + +} catch (PDOException $e) { + printFailure("Database error: " . $e->getMessage()); +} catch (Throwable $e) { + printFailure("Internal error: " . $e->getMessage()); +} \ No newline at end of file diff --git a/loction_server/siro/ride/location/getDrirversLocationsTrack.php b/loction_server/siro/ride/location/getDrirversLocationsTrack.php new file mode 100755 index 00000000..4b1a6f18 --- /dev/null +++ b/loction_server/siro/ride/location/getDrirversLocationsTrack.php @@ -0,0 +1,70 @@ + 'Unauthorized access']); + exit; +} + +// 3. API Input (Optional days parameter, default 1) +$days = isset($_GET['days']) ? (int)$_GET['days'] : 1; +//if ($days < 1 || $days > 30) $days = 1; +if ($days < 1 || $days > 10) $days = 1; + + +// SQL +$sql = " + SELECT * + FROM car_tracks + WHERE created_at >= NOW() - INTERVAL $days DAY + ORDER BY created_at DESC +"; + +try { + $stmt = $con->prepare($sql); + $stmt->execute(); + + // جلب كل النتائج دفعة واحدة + $records = $stmt->fetchAll(PDO::FETCH_ASSOC); + + echo json_encode([ + 'success' => true, + 'total_records' => count($records), + 'from' => date('Y-m-d H:i:s', strtotime("-$days days")), + 'to' => date('Y-m-d H:i:s'), + 'data' => $records + ], JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE); + +} +catch (PDOException $e) { + http_response_code(500); + echo json_encode([ + 'error' => 'Database error', + 'details' => $e->getMessage() + ]); +} \ No newline at end of file diff --git a/loction_server/siro/ride/location/getDriverCarsLocationToPassengerAfterApplied.php b/loction_server/siro/ride/location/getDriverCarsLocationToPassengerAfterApplied.php new file mode 100644 index 00000000..60566c5c --- /dev/null +++ b/loction_server/siro/ride/location/getDriverCarsLocationToPassengerAfterApplied.php @@ -0,0 +1,43 @@ +prepare($sql); +$stmt->execute(); +$car_locations = $stmt->fetchAll(PDO::FETCH_ASSOC); + +if ($car_locations) { + // Print the car location data as JSON + printSuccess($data = $car_locations); +} else { + // Print a failure message + printFailure($message = "No car locations found"); +} + +?> \ No newline at end of file diff --git a/loction_server/siro/ride/location/getElectric.php b/loction_server/siro/ride/location/getElectric.php new file mode 100755 index 00000000..2dfba9c8 --- /dev/null +++ b/loction_server/siro/ride/location/getElectric.php @@ -0,0 +1,126 @@ += NOW() - INTERVAL :freshSeconds SECOND + AND (cr.make NOT LIKE '%دراج%' AND cr.model NOT LIKE '%دراج%') + AND cr.fuel = 'كهربائي' + ORDER BY + ratingDriver DESC, -- ⭐ الأعلى تقييماً + ratingCount DESC, -- ثم الأكثر حصولاً على تقييمات + cl.updated_at DESC -- ثم الأحدث تحديثاً + LIMIT 10 + "; + + $stmt = $con->prepare($sql); + $stmt->bindValue(':southwestLat', $southwestLat); + $stmt->bindValue(':southwestLon', $southwestLon); + $stmt->bindValue(':northeastLat', $northeastLat); + $stmt->bindValue(':northeastLon', $northeastLon); + $stmt->bindValue(':freshSeconds', $freshSeconds, PDO::PARAM_INT); + $stmt->execute(); + + $car_locations = $stmt->fetchAll(PDO::FETCH_ASSOC); + + if (!$car_locations) { + printFailure("No electric car locations found"); + exit; + } + + // ✅ فك التشفير + حساب العمر + $fieldsToDecrypt = [ + 'phone','email','gender','birthdate', + 'first_name','last_name','maritalStatus', + 'token','make','car_plate','vin' + ]; + + foreach ($car_locations as &$row) { + foreach ($fieldsToDecrypt as $field) { + if (isset($row[$field]) && $row[$field] !== null && $row[$field] !== '') { + try { + $row[$field] = $encryptionHelper->decryptData($row[$field]); + } catch (Exception $e) { + $row[$field] = null; // تجاهل أي خطأ بفك التشفير + } + } + } + + // حساب العمر + if (!empty($row['birthdate'])) { + try { + $birthDate = new DateTime($row['birthdate']); + $today = new DateTime(); + $row['age'] = $today->diff($birthDate)->y; + } catch (Exception $e) { + $row['age'] = null; + } + } else { + $row['age'] = null; + } + } + unset($row); + + printSuccess($car_locations); + +} catch (PDOException $e) { + printFailure("Database error: " . $e->getMessage()); +} catch (Throwable $e) { + printFailure("Internal error: " . $e->getMessage()); +} \ No newline at end of file diff --git a/loction_server/siro/ride/location/getFemalDriver.php b/loction_server/siro/ride/location/getFemalDriver.php new file mode 100755 index 00000000..5d60156c --- /dev/null +++ b/loction_server/siro/ride/location/getFemalDriver.php @@ -0,0 +1,111 @@ += NOW() - INTERVAL 180 SECOND + AND (cr.make NOT LIKE '%دراجة%' AND cr.model NOT LIKE '%دراجة%') + AND d.gender = 'Female' + GROUP BY cl.driver_id + ORDER BY ratingDriver DESC, ratingCount DESC, cl.updated_at DESC + LIMIT 10; + "; + + $stmt = $con->prepare($sql); + $stmt->bindParam(':southwestLat', $southwestLat); + $stmt->bindParam(':southwestLon', $southwestLon); + $stmt->bindParam(':northeastLat', $northeastLat); + $stmt->bindParam(':northeastLon', $northeastLon); + $stmt->execute(); + + $rows = $stmt->fetchAll(PDO::FETCH_ASSOC); + + if ($rows) { + $fieldsToDecrypt = [ + 'phone','email','gender','birthdate', + 'first_name','last_name','token', + 'make','car_plate','vin','maritalStatus' + ]; + + foreach ($rows as &$row) { + foreach ($fieldsToDecrypt as $field) { + if (isset($row[$field]) && $row[$field] !== null && $row[$field] !== '') { + try { + $row[$field] = $encryptionHelper->decryptData($row[$field]); + } catch (Exception $e) { + $row[$field] = null; + } + } + } + + // حساب العمر + if (!empty($row['birthdate'])) { + try { + $birthDate = new DateTime($row['birthdate']); + $today = new DateTime(); + $row['age'] = $today->diff($birthDate)->y; + } catch (Exception $e) { + $row['age'] = null; + } + } else { + $row['age'] = null; + } + } + unset($row); + + printSuccess($rows); + } else { + printFailure("No car locations found"); + } +} catch (PDOException $e) { + printFailure("Database error: " . $e->getMessage()); +} catch (Throwable $e) { + printFailure("Internal error: " . $e->getMessage()); +} \ No newline at end of file diff --git a/loction_server/siro/ride/location/getLatestLocationPassenger.php b/loction_server/siro/ride/location/getLatestLocationPassenger.php new file mode 100644 index 00000000..25279f54 --- /dev/null +++ b/loction_server/siro/ride/location/getLatestLocationPassenger.php @@ -0,0 +1,29 @@ +prepare($sql); +$stmt->execute(); +$car_locations = $stmt->fetchAll(PDO::FETCH_ASSOC); + +if ($car_locations) { + // Print the car location data as JSON + printSuccess($data = $car_locations); +} else { + // Print a failure message + printFailure($message = "No car locations found"); +} + +?> \ No newline at end of file diff --git a/loction_server/siro/ride/location/getLocationParents.php b/loction_server/siro/ride/location/getLocationParents.php new file mode 100644 index 00000000..95f883c9 --- /dev/null +++ b/loction_server/siro/ride/location/getLocationParents.php @@ -0,0 +1,42 @@ +prepare($sql); +$stmt->execute(); +$car_locations = $stmt->fetchAll(PDO::FETCH_ASSOC); + +if ($car_locations) { + // Print the car location data as JSON + printSuccess($data = $car_locations); +} else { + // Print a failure message + printFailure($message = "No car locations found"); +} + +?> \ No newline at end of file diff --git a/loction_server/siro/ride/location/getPinkBike.php b/loction_server/siro/ride/location/getPinkBike.php new file mode 100755 index 00000000..e1b52eed --- /dev/null +++ b/loction_server/siro/ride/location/getPinkBike.php @@ -0,0 +1,112 @@ += NOW() - INTERVAL 5 SECOND + AND (cr.make LIKE '%دراجة%' OR cr.model LIKE '%دراجة%') + GROUP BY cl.driver_id + ORDER BY ratingDriver DESC, cl.updated_at DESC + LIMIT 10; + "; + + $stmt = $con->prepare($sql); + $stmt->bindParam(':southwestLat', $southwestLat); + $stmt->bindParam(':southwestLon', $southwestLon); + $stmt->bindParam(':northeastLat', $northeastLat); + $stmt->bindParam(':northeastLon', $northeastLon); + $stmt->execute(); + + $rows = $stmt->fetchAll(PDO::FETCH_ASSOC); + + if ($rows) { + $fieldsToDecrypt = [ + 'phone', 'email', 'gender', 'birthdate', + 'first_name', 'last_name', 'maritalStatus', 'token', + 'make', 'car_plate', 'vin' + ]; + + $filteredRows = []; + + foreach ($rows as &$row) { + foreach ($fieldsToDecrypt as $field) { + if (isset($row[$field])) { + $row[$field] = $encryptionHelper->decryptData($row[$field]); + } + } + + // فلترة حسب الجنس + if (strtolower($row['gender']) !== 'female') { + continue; + } + + // حساب العمر + if (!empty($row['birthdate'])) { + $birthDate = new DateTime($row['birthdate']); + $today = new DateTime(); + $row['age'] = $today->diff($birthDate)->y; + } else { + $row['age'] = null; + } + + $filteredRows[] = $row; + } + + printSuccess($filteredRows); + } else { + printFailure("No car locations found"); + } +} catch (PDOException $e) { + printFailure("Database error: " . $e->getMessage()); +} \ No newline at end of file diff --git a/loction_server/siro/ride/location/getRidesDriverByDay.php b/loction_server/siro/ride/location/getRidesDriverByDay.php new file mode 100755 index 00000000..5dccdb65 --- /dev/null +++ b/loction_server/siro/ride/location/getRidesDriverByDay.php @@ -0,0 +1,66 @@ += :first_day_total AND `ride`.created_at < :last_day_total AND `ride`.`status` = 'Finished' + ) AS totalPrice, + ( + SELECT + COUNT(`ride`.`id`) + FROM + `ride` + WHERE + `ride`.`driver_id` = :driver_id_count AND `ride`.`created_at` >= :first_day_count AND `ride`.created_at < :last_day_count AND `ride`.`status` = 'Finished' + ) AS totalCount +FROM + `ride` +WHERE + `ride`.`driver_id` = :driver_id_main AND `ride`.`created_at` >= :first_day_main AND `ride`.created_at < :last_day_main AND `ride`.`status` = 'Finished' +GROUP BY + day +ORDER BY + day ASC;"; + +$stmt = $con->prepare($sql); + +// Bind each parameter uniquely +$stmt->bindParam(':driver_id_total', $driver_id, PDO::PARAM_STR); +$stmt->bindParam(':first_day_total', $first_day_of_month, PDO::PARAM_STR); +$stmt->bindParam(':last_day_total', $last_day_of_month, PDO::PARAM_STR); + +$stmt->bindParam(':driver_id_count', $driver_id, PDO::PARAM_STR); +$stmt->bindParam(':first_day_count', $first_day_of_month, PDO::PARAM_STR); +$stmt->bindParam(':last_day_count', $last_day_of_month, PDO::PARAM_STR); + +$stmt->bindParam(':driver_id_main', $driver_id, PDO::PARAM_STR); +$stmt->bindParam(':first_day_main', $first_day_of_month, PDO::PARAM_STR); +$stmt->bindParam(':last_day_main', $last_day_of_month, PDO::PARAM_STR); + +$stmt->execute(); + +$car_locations = $stmt->fetchAll(PDO::FETCH_ASSOC); +if ($car_locations) { + // Print the car location data as JSON + printSuccess($data = $car_locations); +} else { + // Print a failure message + printFailure($message = "No car locations found"); +} +?> \ No newline at end of file diff --git a/loction_server/siro/ride/location/getSpeed.php b/loction_server/siro/ride/location/getSpeed.php new file mode 100755 index 00000000..3c42ff93 --- /dev/null +++ b/loction_server/siro/ride/location/getSpeed.php @@ -0,0 +1,119 @@ + 'failure', 'message' => 'Missing required parameters']); + exit; +} + +try { + // نافذة زمنية مناسبة (3 دقائق) + $freshSeconds = 180; + + $sql = " + SELECT + cl.driver_id, + cl.latitude, + cl.longitude, + cl.heading, + cl.speed, + cl.status, + cl.created_at, + cl.updated_at, + d.phone, + d.email, + d.birthdate, + d.first_name, + d.last_name, + d.gender, + d.maritalStatus, + cr.make, + cr.car_plate, + cr.model, + cr.color, + cr.vin, + cr.color_hex, + cr.year, + dt.token, + COALESCE(rd.ratingDriver, 0) AS ratingDriver, + COALESCE(rd.ratingCount, 0) AS ratingCount + FROM car_locations cl + LEFT JOIN driver d ON d.id = cl.driver_id + LEFT JOIN CarRegistration cr ON cr.driverID = cl.driver_id + LEFT JOIN driverToken dt ON dt.captain_id = cl.driver_id + LEFT JOIN ( + SELECT driver_id, AVG(rating) AS ratingDriver, COUNT(id) AS ratingCount + FROM ratingDriver + GROUP BY driver_id + ) rd ON rd.driver_id = cl.driver_id + WHERE + cl.latitude BETWEEN :southwestLat AND :northeastLat + AND cl.longitude BETWEEN :southwestLon AND :northeastLon + AND cl.status = 'off' + AND cl.updated_at >= NOW() - INTERVAL :freshSeconds SECOND + AND COALESCE(cr.year, 0) > 2000 + AND (cr.make NOT LIKE '%دراج%' AND cr.model NOT LIKE '%دراج%') + ORDER BY + ratingDriver DESC, + ratingCount DESC, + cl.updated_at DESC + LIMIT 10; + "; + + $stmt = $con->prepare($sql); + $stmt->bindParam(':southwestLat', $southwestLat); + $stmt->bindParam(':southwestLon', $southwestLon); + $stmt->bindParam(':northeastLat', $northeastLat); + $stmt->bindParam(':northeastLon', $northeastLon); + $stmt->bindValue(':freshSeconds', $freshSeconds, PDO::PARAM_INT); + $stmt->execute(); + + $car_locations = $stmt->fetchAll(PDO::FETCH_ASSOC); + + if ($car_locations) { + $fieldsToDecrypt = [ + 'phone','email','gender','birthdate', + 'first_name','last_name','token', + 'make','car_plate','vin','maritalStatus' + ]; + + foreach ($car_locations as &$row) { + foreach ($fieldsToDecrypt as $field) { + if (isset($row[$field]) && $row[$field] !== null && $row[$field] !== '') { + try { + $row[$field] = $encryptionHelper->decryptData($row[$field]); + } catch (Exception $e) { + $row[$field] = null; + } + } + } + + // ✅ احسب العمر + if (!empty($row['birthdate'])) { + try { + $birthdate = new DateTime($row['birthdate']); + $now = new DateTime(); + $row['age'] = $now->diff($birthdate)->y; + } catch (Exception $e) { + $row['age'] = null; + } + } else { + $row['age'] = null; + } + } + unset($row); + + printSuccess($car_locations); + } else { + printFailure("No car locations found"); + } +} catch (PDOException $e) { + printFailure("Database error: " . $e->getMessage()); +} \ No newline at end of file diff --git a/loction_server/siro/ride/location/getTotalDriverDuration.php b/loction_server/siro/ride/location/getTotalDriverDuration.php new file mode 100755 index 00000000..bacc9c94 --- /dev/null +++ b/loction_server/siro/ride/location/getTotalDriverDuration.php @@ -0,0 +1,44 @@ += :first_day_of_month + AND car_tracks.created_at < :last_day_of_month +GROUP BY + day +ORDER BY + day ASC;"; + +$stmt = $con->prepare($sql); +$stmt->bindParam(':driver_id', $driver_id, PDO::PARAM_STR); +$stmt->bindParam(':first_day_of_month', $first_day_of_month, PDO::PARAM_STR); +$stmt->bindParam(':last_day_of_month', $last_day_of_month, PDO::PARAM_STR); +$stmt->execute(); + +$car_locations = $stmt->fetchAll(PDO::FETCH_ASSOC); + +if ($car_locations) { + // Print the car location data as JSON + printSuccess($data = $car_locations); +} else { + // Print a failure message + printFailure($message = "No car locations found"); +} + +?> \ No newline at end of file diff --git a/loction_server/siro/ride/location/getTotalDriverDurationToday.php b/loction_server/siro/ride/location/getTotalDriverDurationToday.php new file mode 100755 index 00000000..2baa5775 --- /dev/null +++ b/loction_server/siro/ride/location/getTotalDriverDurationToday.php @@ -0,0 +1,70 @@ + "failure", "message" => "Connect file not found"))); +} + +// 3. التقاط البيانات بذكاء (لحل مشكلة Flutter JSON) +// هذا الجزء يفحص: هل البيانات في POST؟ أم في JSON Body؟ +$driver_id = null; + +if (isset($_POST['driver_id'])) { + $driver_id = filterRequest("driver_id"); +} else { + // محاولة قراءة JSON Body (لأن فلاتر يرسل البيانات هكذا غالباً) + $jsonInput = json_decode(file_get_contents("php://input"), true); + if (isset($jsonInput['driver_id'])) { + $driver_id = htmlspecialchars(strip_tags($jsonInput['driver_id'])); + } +} + +// التحقق النهائي +if (!$driver_id) { + // طباعة الخطأ بوضوح + echo json_encode(array("status" => "failure", "message" => "driver_id is missing or empty")); + exit; +} + +// 4. التنفيذ +try { + $date = date('Y-m-d'); + + $sql = "SELECT total_seconds FROM driver_daily_summary + WHERE driver_id = ? AND date = ?"; + + $stmt = $con->prepare($sql); + $stmt->execute([$driver_id, $date]); + $data = $stmt->fetch(PDO::FETCH_ASSOC); + + $duration = "00:00:00"; + if ($data) { + $seconds = $data['total_seconds']; + $duration = gmdate("H:i:s", $seconds); + } + + // 5. بناء الاستجابة يدوياً لتطابق كود Flutter 100% + // الهيكل المطلوب: data['message'][0]['total_duration'] + $response = array( + "status" => "success", + "message" => array( + array("total_duration" => $duration) + ) + ); + + echo json_encode($response); + +} catch (PDOException $e) { + echo json_encode(array("status" => "failure", "message" => "DB Error: " . $e->getMessage())); +} +?> \ No newline at end of file diff --git a/loction_server/siro/ride/location/get_location_area_links.php b/loction_server/siro/ride/location/get_location_area_links.php new file mode 100644 index 00000000..5bcdf5c0 --- /dev/null +++ b/loction_server/siro/ride/location/get_location_area_links.php @@ -0,0 +1,24 @@ +prepare($sql); + + $stmt->execute(); + + $car_locations = $stmt->fetchAll(PDO::FETCH_ASSOC); + + if ($car_locations) { + printSuccess($car_locations); + } else { + printFailure("No car locations found"); + } +} catch (PDOException $e) { + printFailure("Database error: " . $e->getMessage()); +} \ No newline at end of file diff --git a/loction_server/siro/ride/location/getfemalbehavior.php b/loction_server/siro/ride/location/getfemalbehavior.php new file mode 100644 index 00000000..2e343bba --- /dev/null +++ b/loction_server/siro/ride/location/getfemalbehavior.php @@ -0,0 +1,86 @@ += :southwestLat AND cl.latitude <= :northeastLat + AND cl.longitude >= :southwestLon AND cl.longitude <= :northeastLon + AND cl.status = 'off' + AND cl.updated_at >= NOW() - INTERVAL 5 SECOND + AND (cr.make NOT LIKE '%دراجة%' OR cr.model NOT LIKE '%دراجة%') + AND d.gender = 'Female' +GROUP BY cl.driver_id +ORDER BY ratingDriver DESC, cl.updated_at DESC +LIMIT 10; +"; + + $stmt = $con->prepare($sql); + $stmt->bindParam(':southwestLat', $southwestLat); + $stmt->bindParam(':southwestLon', $southwestLon); + $stmt->bindParam(':northeastLat', $northeastLat); + $stmt->bindParam(':northeastLon', $northeastLon); + + $stmt->execute(); + $car_locations = $stmt->fetchAll(PDO::FETCH_ASSOC); + + if ($car_locations) { + printSuccess($car_locations); + } else { + printFailure("No car locations found"); + } +} catch (PDOException $e) { + printFailure("Database error: " . $e->getMessage()); +} +?> \ No newline at end of file diff --git a/loction_server/siro/ride/location/save_behavior.php b/loction_server/siro/ride/location/save_behavior.php new file mode 100644 index 00000000..92239ddc --- /dev/null +++ b/loction_server/siro/ride/location/save_behavior.php @@ -0,0 +1,59 @@ +prepare(" + INSERT INTO driver_behavior ( + driver_id, trip_id, max_speed, avg_speed, + hard_brakes, total_distance, behavior_score + ) VALUES (?, ?, ?, ?, ?, ?, ?) + "); + + $stmt->execute([ + $driver_id, + $trip_id, + $max_speed, + $avg_speed, + $hard_brakes, + $total_distance, + $behavior_score + ]); + + // التحقق من نجاح العملية + if ($stmt->rowCount() > 0) { + printSuccess("Behavior data saved"); + } else { + // Log that the query ran but no rows were inserted + error_log("Driver Behavior Warning: Insert executed but 0 rows affected for driver $driver_id"); + printFailure("Failed to save data"); + } + +} catch (PDOException $e) { + // --- THIS IS THE TYPE ERROR LOG YOU ASKED FOR --- + // This records the exact SQL error (e.g., duplicate entry, foreign key fail) to your server log + error_log("Driver Behavior SQL Error: " . $e->getMessage()); + + // Return a generic error to the app (or $e->getMessage() if debugging) + printFailure("Database Error"); +} + +exit(); +?> \ No newline at end of file diff --git a/loction_server/siro/ride/location/update.php b/loction_server/siro/ride/location/update.php new file mode 100644 index 00000000..733cc2fe --- /dev/null +++ b/loction_server/siro/ride/location/update.php @@ -0,0 +1,65 @@ +prepare($sql); + + // The execute method returns true on success and false on failure. + $success = $stmt->execute([ + ':latitude' => $latitude, + ':longitude' => $longitude, + ':heading' => $heading, + ':speed' => $speed, + ':distance' => $distance, + ':status' => $status, + // ':updated_at' => $updated_at, <-- قمنا بحذف هذا السطر من المصفوفة لأنه لم يعد موجوداً في الاستعلام + ':driver_id' => $driver_id + ]); + + if ($success) { + printSuccess("Car location updated successfully"); + } else { + printFailure("Failed to update car location"); + } + +} catch (PDOException $e) { + http_response_code(500); + printFailure('Database error occurred'); +} +?> \ No newline at end of file diff --git a/loction_server/siro/ride/location/update_location.php b/loction_server/siro/ride/location/update_location.php new file mode 100755 index 00000000..3525d885 --- /dev/null +++ b/loction_server/siro/ride/location/update_location.php @@ -0,0 +1,48 @@ +prepare($sql); + $stmt->execute([ + ':id' => $driver_id, + ':lat' => $lat, + ':lng' => $lng, + ':head' => $heading, + ':spd' => $speed, + ':stat' => $status + ]); + + // ملاحظة: لا نحتاج لإرسال socket notification هنا لأن هذا يحدث كل ثانية + // الراكب يرى التحديث لأنه متصل بسوكيت اللوكيشن ويستمع لحدث 'update_driver_location' + + printSuccess("Location Updated"); + +} catch (PDOException $e) { + printFailure("DB Error: " . $e->getMessage()); +} +?> \ No newline at end of file diff --git a/loction_server/siro/ride/locations_data.json b/loction_server/siro/ride/locations_data.json new file mode 100755 index 00000000..fc12da86 --- /dev/null +++ b/loction_server/siro/ride/locations_data.json @@ -0,0 +1 @@ +{"last_updated":"2025-11-24 10:08:44","count":89,"drivers":[{"driver_id":"05409309e47b32838ad5","latitude":"34.8712830","longitude":"35.9064440","heading":"0.00","speed":0,"distance":"0.00","status":"off","carType":"Awfar","created_at":"2025-11-19 18:05:50","updated_at":"2025-11-24 09:41:17","location_point":"?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000?G?3?oA@??c[\u0006?A@"},{"driver_id":"1031b1b342a9a9e20b95","latitude":"31.7171130","longitude":"35.9993760","heading":"0.00","speed":0,"distance":"0.00","status":"off","carType":"Awfar","created_at":"2025-11-13 09:40:09","updated_at":"2025-11-24 07:54:56","location_point":"?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000U??????@\"4????A@"},{"driver_id":"1376afac594c3f2ae601","latitude":"36.0850790","longitude":"36.7140810","heading":"30.00","speed":66.3,"distance":"0.25","status":"off","carType":"Awfar","created_at":"2025-11-23 10:00:05","updated_at":"2025-11-24 09:59:49","location_point":"?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000?Ia??\nB@?ؖ\u0001g[B@"},{"driver_id":"19c29d0f68c11a010f1e","latitude":"33.4786240","longitude":"36.3574540","heading":"93.30","speed":0,"distance":"4.05","status":"off","carType":"Awfar","created_at":"2025-11-20 12:57:27","updated_at":"2025-11-24 10:06:40","location_point":"?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000U?\u001d?C?@@??{\r?-B@"},{"driver_id":"1a1c5eb405a4932015cd","latitude":"33.4873460","longitude":"36.3786980","heading":"255.70","speed":0,"distance":"0.11","status":"off","carType":"Awfar","created_at":"2025-11-19 16:49:05","updated_at":"2025-11-24 09:07:13","location_point":"?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000\u0010?Za?@@‡\u0012-y0B@"},{"driver_id":"1ef1491da9d9c1b6dd9f","latitude":"33.5250490","longitude":"36.2736880","heading":"0.00","speed":0,"distance":"0.00","status":"off","carType":"Awfar","created_at":"2025-11-19 08:46:30","updated_at":"2025-11-24 09:43:34","location_point":"?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000\u0015?=?4?@@a?X5\b#B@"},{"driver_id":"1ef563908f031c999ac3","latitude":"33.6937270","longitude":"36.3753600","heading":"231.30","speed":1.779,"distance":"16.61","status":"off","carType":"Awfar","created_at":"2025-11-07 14:54:23","updated_at":"2025-11-24 09:50:04","location_point":"?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000\u0015??\u000b??@@\u0000\u001d??\u000b0B@"},{"driver_id":"205d370a2776373bb4dc","latitude":"31.7170990","longitude":"35.9993670","heading":"0.00","speed":0,"distance":"215.31","status":"off","carType":"Awfar","created_at":"2025-11-15 13:41:13","updated_at":"2025-11-24 10:02:47","location_point":"?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000???̓??@??\u0002B??A@"},{"driver_id":"225d638ce646b1d99d8d","latitude":"33.4937200","longitude":"36.3059160","heading":"22.70","speed":9.715,"distance":"0.00","status":"off","carType":"Awfar","created_at":"2025-11-23 18:08:41","updated_at":"2025-11-24 09:00:15","location_point":"?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000ɰ?72?@@]?gA('B@"},{"driver_id":"26259f5601cf5f44e19f","latitude":"33.5162050","longitude":"36.2948800","heading":"123.70","speed":0.6,"distance":"0.00","status":"off","carType":"Awfar","created_at":"2025-11-24 01:33:18","updated_at":"2025-11-24 04:19:51","location_point":"?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000\u000e?d\u0001\u0013?@@K\u001f???%B@"},{"driver_id":"26d74d93f1f305e78922","latitude":"33.5111160","longitude":"36.2632070","heading":"0.00","speed":0,"distance":"0.00","status":"off","carType":"Awfar","created_at":"2025-11-18 09:32:00","updated_at":"2025-11-24 09:21:17","location_point":"?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000.;??l?@@\u0005?Xİ!B@"},{"driver_id":"2df2856ad078d56b3342","latitude":"33.5084850","longitude":"36.2482560","heading":"0.00","speed":0,"distance":"0.03","status":"off","carType":"Awfar","created_at":"2025-11-22 10:30:50","updated_at":"2025-11-24 09:24:15","location_point":"?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000??V\t\u0016?@@??D??\u001fB@"},{"driver_id":"2e5024f830056fd07fa1","latitude":"31.7171590","longitude":"35.9994770","heading":"0.00","speed":1.2,"distance":"198.44","status":"off","carType":"Awfar","created_at":"2025-11-23 14:17:07","updated_at":"2025-11-24 10:08:15","location_point":"?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u00005\bs????@V\r????A@"},{"driver_id":"3172970ea084cfea4817","latitude":"33.5001940","longitude":"36.2737020","heading":"185.00","speed":29.3,"distance":"223.65","status":"off","carType":"Awfar","created_at":"2025-11-16 08:53:17","updated_at":"2025-11-24 09:57:26","location_point":"?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000??c[\u0006?@@?lɪ\b#B@"},{"driver_id":"38e2d006a7fa47b05d65","latitude":"33.5041760","longitude":"36.2922980","heading":"0.00","speed":0,"distance":"26.87","status":"off","carType":"Awfar","created_at":"2025-11-19 11:16:06","updated_at":"2025-11-24 03:03:59","location_point":"?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000̶?ֈ?@@?WW\u0005j%B@"},{"driver_id":"3b319766c994742595c9","latitude":"36.1961760","longitude":"37.0912340","heading":"0.00","speed":0.1,"distance":"0.00","status":"off","carType":"Awfar","created_at":"2025-11-08 13:20:23","updated_at":"2025-11-24 08:20:11","location_point":"?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000K!?K\u001c\u0019B@B$C???B@"},{"driver_id":"3b89af260805255fa7a7","latitude":"34.7415200","longitude":"36.7201000","heading":"282.10","speed":1.073,"distance":"0.10","status":"off","carType":"Awfar","created_at":"2025-11-24 07:49:06","updated_at":"2025-11-24 10:06:57","location_point":"?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000;?? ?^A@??<,\\B@"},{"driver_id":"3c704fe7aa1f129686c3","latitude":"35.1263230","longitude":"36.7614660","heading":"272.40","speed":0,"distance":"2.70","status":"off","carType":"Awfar","created_at":"2025-11-22 10:47:19","updated_at":"2025-11-24 10:06:53","location_point":"?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000?? Z+?A@\n?ǷwaB@"},{"driver_id":"3eb6243c7c9de43080b7","latitude":"35.5108940","longitude":"35.7740770","heading":"269.00","speed":30.6,"distance":"4.12","status":"off","carType":"Awfar","created_at":"2025-11-13 08:42:28","updated_at":"2025-11-24 10:04:46","location_point":"?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000?~?d?A@?ʃ?\u0014?A@"},{"driver_id":"3f852c43c516853e0f35","latitude":"33.4834680","longitude":"36.3523860","heading":"132.80","speed":22.6,"distance":"54.41","status":"off","carType":"Awfar","created_at":"2025-11-19 08:30:56","updated_at":"2025-11-24 01:34:05","location_point":"?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000?T?G?@@??\u0004?\u001a-B@"},{"driver_id":"42775e2b2361af51f8f1","latitude":"34.9764700","longitude":"36.1681440","heading":"64.00","speed":1.8,"distance":"0.04","status":"off","carType":"Awfar","created_at":"2025-11-21 14:24:43","updated_at":"2025-11-24 10:02:37","location_point":"?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u00007?\r??|A@b?\u001a??\u0015B@"},{"driver_id":"45889ade20db80bbc087","latitude":"33.5078170","longitude":"36.2877610","heading":"87.00","speed":22.9,"distance":"3596.36","status":"off","carType":"Awfar","created_at":"2025-11-08 05:10:11","updated_at":"2025-11-24 10:01:42","location_point":"?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000*??%\u0000?@@:\b:Z?$B@"},{"driver_id":"463e13549e0007cd4db1","latitude":"33.5368030","longitude":"36.2186430","heading":"47.30","speed":1.774,"distance":"0.02","status":"off","carType":"Awfar","created_at":"2025-11-12 11:38:57","updated_at":"2025-11-24 10:01:49","location_point":"?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000??????@@??k~?\u001bB@"},{"driver_id":"4738a3b984b40929552a","latitude":"31.7172390","longitude":"35.9993810","heading":"333.00","speed":14.1,"distance":"689.33","status":"off","carType":"Awfar","created_at":"2025-11-22 14:20:27","updated_at":"2025-11-24 09:50:08","location_point":"?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000nj?????@4?s???A@"},{"driver_id":"49c7c94ed2c141eda1c1","latitude":"35.1351910","longitude":"36.7738060","heading":"0.00","speed":0,"distance":"2.68","status":"off","carType":"Awfar","created_at":"2025-11-19 17:25:04","updated_at":"2025-11-24 09:49:03","location_point":"?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000U?M?M?A@k?3\u0013\fcB@"},{"driver_id":"4d7ba52e0acdd72463ec","latitude":"33.4966480","longitude":"36.2405800","heading":"88.00","speed":18.4,"distance":"13.52","status":"off","carType":"Awfar","created_at":"2025-11-23 10:03:25","updated_at":"2025-11-24 09:58:02","location_point":"?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000??b)??@@-\tPS?\u001eB@"},{"driver_id":"51c2aacf2a2c0116d74f","latitude":"34.7354250","longitude":"36.7004410","heading":"0.00","speed":0,"distance":"4.01","status":"off","carType":"Awfar","created_at":"2025-11-23 18:48:14","updated_at":"2025-11-24 09:58:42","location_point":"?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000??\th\"^A@???\f?YB@"},{"driver_id":"55990e379c52520b6c7a","latitude":"33.5206510","longitude":"36.2947860","heading":"53.00","speed":0,"distance":"0.05","status":"off","carType":"Awfar","created_at":"2025-11-19 09:16:56","updated_at":"2025-11-24 10:04:11","location_point":"?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000??$???@@ʨ2??%B@"},{"driver_id":"563b9c41f07290683008","latitude":"33.5246250","longitude":"36.3179980","heading":"0.00","speed":0,"distance":"0.00","status":"off","carType":"Awfar","created_at":"2025-11-16 06:38:22","updated_at":"2025-11-24 09:35:09","location_point":"?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000??x?&?@@?\u0018?(?(B@"},{"driver_id":"5bf140aec5bc942a4cb3","latitude":"33.5059580","longitude":"36.2910490","heading":"0.00","speed":0,"distance":"0.00","status":"off","carType":"Awfar","created_at":"2025-11-23 04:41:01","updated_at":"2025-11-24 09:55:21","location_point":"?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000%?S;??@@JD?\u0017A%B@"},{"driver_id":"5cb49a2b1105cb03065c","latitude":"33.5280040","longitude":"36.2935050","heading":"55.50","speed":11.4,"distance":"0.00","status":"off","carType":"Awfar","created_at":"2025-11-21 16:32:05","updated_at":"2025-11-24 03:25:49","location_point":"?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000\u001f\u0014????@@3\u001bd??%B@"},{"driver_id":"645bea2a9c7db987e1e0","latitude":"33.4928720","longitude":"36.3402580","heading":"274.70","speed":44.9,"distance":"0.09","status":"off","carType":"Awfar","created_at":"2025-11-19 21:09:15","updated_at":"2025-11-24 09:35:24","location_point":"?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000??\u0000n\u0016?@@?\u0019???+B@"},{"driver_id":"6bc612f4d394fa9fe878","latitude":"33.5167670","longitude":"36.2899420","heading":"0.00","speed":0,"distance":"0.00","status":"off","carType":"Awfar","created_at":"2025-11-23 08:45:15","updated_at":"2025-11-24 09:47:49","location_point":"?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000vS?k%?@@Q???\u001c%B@"},{"driver_id":"6c8b5969c0a470e08434","latitude":"33.4872710","longitude":"36.3534510","heading":"5.60","speed":6.6,"distance":"489.67","status":"off","carType":"Awfar","created_at":"2025-11-05 17:45:42","updated_at":"2025-11-24 04:27:39","location_point":"?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000\u0005?h?^?@@????=-B@"},{"driver_id":"6ceaa7d63c259040cc14","latitude":"33.5283100","longitude":"36.2302210","heading":"0.00","speed":0,"distance":"10.81","status":"off","carType":"Awfar","created_at":"2025-11-17 18:59:46","updated_at":"2025-11-24 10:08:18","location_point":"?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000+\u0013~???@@\u001c???w\u001dB@"},{"driver_id":"6fa45ad3119ea23b7c0d","latitude":"33.4809480","longitude":"36.2967660","heading":"59.10","speed":0.7,"distance":"0.00","status":"off","carType":"Awfar","created_at":"2025-11-17 10:18:31","updated_at":"2025-11-24 00:14:28","location_point":"?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000Ή=???@@IH?m?%B@"},{"driver_id":"7ac9e4174bf33756c805","latitude":"33.5131120","longitude":"36.2738700","heading":"0.00","speed":0.3,"distance":"0.00","status":"off","carType":"Awfar","created_at":"2025-11-08 19:59:54","updated_at":"2025-11-24 08:08:24","location_point":"?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000??m???@@??\u0012,\u000e#B@"},{"driver_id":"7c76ba913e048f23f843","latitude":"33.5414230","longitude":"36.1944900","heading":"305.00","speed":9.5,"distance":"2.85","status":"off","carType":"Awfar","created_at":"2025-11-09 09:07:02","updated_at":"2025-11-24 09:35:28","location_point":"?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000?&OYM?@@\u0014?^\f?\u0018B@"},{"driver_id":"809cd3608cffabea68f7","latitude":"33.5037300","longitude":"36.2593640","heading":"0.00","speed":0,"distance":"0.00","status":"off","carType":"Awfar","created_at":"2025-11-16 08:41:10","updated_at":"2025-11-24 09:55:02","location_point":"?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000?\u0001?9z?@@????2!B@"},{"driver_id":"81fdb95b1382b2872fb3","latitude":"34.8848650","longitude":"35.8909270","heading":"23.00","speed":6.5,"distance":"0.00","status":"off","carType":"Awfar","created_at":"2025-11-18 08:34:55","updated_at":"2025-11-24 08:50:11","location_point":"?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000\u00010?ACqA@?\u000f\\?\t?A@"},{"driver_id":"829ff6e175eab03db06f","latitude":"33.4776300","longitude":"36.3558780","heading":"193.30","speed":41.8,"distance":"0.02","status":"off","carType":"Awfar","created_at":"2025-11-15 23:08:40","updated_at":"2025-11-24 01:49:34","location_point":"?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000S???\"?@@ծ\ti?-B@"},{"driver_id":"83b0ee0dc2c282b3d7a8","latitude":"35.1385300","longitude":"36.7575930","heading":"327.50","speed":1.231,"distance":"21.85","status":"off","carType":"Awfar","created_at":"2025-11-22 09:26:48","updated_at":"2025-11-24 10:08:09","location_point":"?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000???Y??A@?V???`B@"},{"driver_id":"89549fbee478ab60767a","latitude":"33.4991780","longitude":"36.2983620","heading":"98.00","speed":36.1,"distance":"6.93","status":"off","carType":"Awfar","created_at":"2025-11-23 14:02:41","updated_at":"2025-11-24 10:06:35","location_point":"?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000?p?\u0010?@@@\/ܹ0&B@"},{"driver_id":"8aab8ff92c2f64fe6a41","latitude":"31.7170800","longitude":"35.9993390","heading":"0.00","speed":0,"distance":"4978.96","status":"off","carType":"Awfar","created_at":"2025-11-16 17:48:31","updated_at":"2025-11-24 10:06:59","location_point":"?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000??\f????@\u0005O!W??A@"},{"driver_id":"8be3f89030c41d39d92f","latitude":"33.5342610","longitude":"36.1852490","heading":"0.00","speed":0,"distance":"0.00","status":"off","carType":"Awfar","created_at":"2025-11-21 16:34:00","updated_at":"2025-11-24 09:00:18","location_point":"?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000?C\u0019?b?@@?N>=?\u0017B@"},{"driver_id":"8dcd36487c39c1e819e6","latitude":"35.5475800","longitude":"35.7709750","heading":"0.00","speed":0,"distance":"5.79","status":"off","carType":"Awfar","created_at":"2025-11-10 20:46:21","updated_at":"2025-11-24 10:08:15","location_point":"?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000???\u0019\u0017?A@M?\rO??A@"},{"driver_id":"91a8a20351ff862b1425","latitude":"36.2001180","longitude":"37.1134430","heading":"231.60","speed":0,"distance":"0.00","status":"off","carType":"Awfar","created_at":"2025-11-22 10:43:08","updated_at":"2025-11-24 09:16:56","location_point":"?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000??tw?\u0019B@?z?L??B@"},{"driver_id":"986221ffc161a46e0739","latitude":"33.5258690","longitude":"36.2964290","heading":"0.00","speed":0,"distance":"0.03","status":"off","carType":"Awfar","created_at":"2025-11-20 12:23:38","updated_at":"2025-11-24 09:58:50","location_point":"?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000x}?O?@@\u0002K?b?%B@"},{"driver_id":"986bf7b2242410647d05","latitude":"33.5110400","longitude":"36.2994420","heading":"98.00","speed":13.9,"distance":"17.19","status":"off","carType":"Awfar","created_at":"2025-11-22 14:32:00","updated_at":"2025-11-24 10:08:38","location_point":"?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000Sy;?i?@@@??\u001dT&B@"},{"driver_id":"9c323add06d38e0559f4","latitude":"33.5006620","longitude":"36.3216000","heading":"134.00","speed":1.248,"distance":"20.75","status":"off","carType":"Awfar","created_at":"2025-11-11 12:07:40","updated_at":"2025-11-24 00:19:39","location_point":"?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000?,B?\u0015?@@a2U0*)B@"},{"driver_id":"9c3647ba52d84e6c5e3f","latitude":"35.1208250","longitude":"36.7637380","heading":"253.00","speed":18.4,"distance":"1.01","status":"off","carType":"Awfar","created_at":"2025-11-12 12:00:52","updated_at":"2025-11-24 05:50:27","location_point":"?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000\u0005ŏ1w?A@1[?*?aB@"},{"driver_id":"9cbf649351a6e59c3944","latitude":"33.5226440","longitude":"36.3013650","heading":"-1.00","speed":0,"distance":"23.03","status":"off","carType":"Awfar","created_at":"2025-11-17 03:45:03","updated_at":"2025-11-24 09:51:52","location_point":"?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000??????@@[?? ?&B@"},{"driver_id":"a2f1759c73dfd9638db4","latitude":"33.5630020","longitude":"36.2250520","heading":"0.00","speed":0,"distance":"3.37","status":"off","carType":"Awfar","created_at":"2025-11-22 11:23:27","updated_at":"2025-11-24 09:49:16","location_point":"?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000??\u0014s\u0010?@@\u001f?\u0001??\u001cB@"},{"driver_id":"a3e8b9c03e3971b59294","latitude":"33.5060690","longitude":"36.2556270","heading":"0.00","speed":0,"distance":"0.00","status":"off","carType":"Awfar","created_at":"2025-11-24 05:41:02","updated_at":"2025-11-24 10:05:38","location_point":"?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000|Bv???@@?|?b? B@"},{"driver_id":"a69525198fe22e662686","latitude":"33.5409090","longitude":"36.1999650","heading":"0.00","speed":0,"distance":"0.00","status":"off","carType":"Awfar","created_at":"2025-11-17 09:18:51","updated_at":"2025-11-24 08:02:59","location_point":"?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000X?????I??@@Q\u0016???\u001bB@"},{"driver_id":"c3c557e107b487aadc17","latitude":"33.4382320","longitude":"36.1649630","heading":"0.00","speed":0.2,"distance":"0.00","status":"off","carType":"Awfar","created_at":"2025-11-22 10:58:21","updated_at":"2025-11-24 03:13:57","location_point":"?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000?\u0007v?\u0017?@@h\u0006?\u001d\u0015B@"},{"driver_id":"c9dd062082c31752b9ed","latitude":"31.7181800","longitude":"35.9993280","heading":"0.00","speed":0,"distance":"196.79","status":"off","carType":"Awfar","created_at":"2025-11-19 15:31:25","updated_at":"2025-11-24 09:47:30","location_point":"?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000+???ڷ?@\u0011?????A@"},{"driver_id":"ca0b6f582ce8bf691094","latitude":"33.4907450","longitude":"36.3058710","heading":"2.00","speed":23,"distance":"6.62","status":"off","carType":"Awfar","created_at":"2025-11-24 05:47:39","updated_at":"2025-11-24 10:08:41","location_point":"?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000w?n?о@@????&'B@"},{"driver_id":"ca60f0f65d7d6de23e5c","latitude":"36.2026710","longitude":"37.1122760","heading":"0.00","speed":0,"distance":"0.05","status":"off","carType":"Awfar","created_at":"2025-11-15 09:36:34","updated_at":"2025-11-24 07:02:05","location_point":"?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000l?\u001f?\u0019B@\u0017\u0010Z\u000f_?B@"},{"driver_id":"ca8ca3dd8a14dfaf09ad","latitude":"33.4405630","longitude":"36.2701080","heading":"19.00","speed":30.5,"distance":"18.04","status":"off","carType":"Awfar","created_at":"2025-11-22 10:14:32","updated_at":"2025-11-24 08:53:50","location_point":"?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000?iN^d?@@?1!?\"B@"},{"driver_id":"cc0af8fc7568b9eba01c","latitude":"31.7168920","longitude":"35.9993730","heading":"0.00","speed":0,"distance":"6.16","status":"off","carType":"Awfar","created_at":"2025-11-03 19:38:58","updated_at":"2025-11-24 06:33:39","location_point":"?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000???;???@??Wt??A@"},{"driver_id":"d0c7dd524e9250cebda0","latitude":"33.4116960","longitude":"36.5125250","heading":"89.60","speed":0.7,"distance":"23.34","status":"off","carType":"Awfar","created_at":"2025-11-23 20:29:01","updated_at":"2025-11-24 10:02:47","location_point":"?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000o?[t??@@?Pk?AB@"},{"driver_id":"d150694c4dbb571782cf","latitude":"31.7171100","longitude":"35.9993150","heading":"0.00","speed":0,"distance":"201.41","status":"off","carType":"Awfar","created_at":"2025-11-18 12:41:20","updated_at":"2025-11-24 10:06:53","location_point":"?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000s?]????@}?͍??A@"},{"driver_id":"d78aeec5337332066f02","latitude":"34.6927490","longitude":"36.7037690","heading":"0.00","speed":0,"distance":"0.00","status":"off","carType":"Awfar","created_at":"2025-11-08 11:02:18","updated_at":"2025-11-24 08:57:17","location_point":"?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000\u0019????XA@%xC\u001a\u0015ZB@"},{"driver_id":"dc6e32c33f9a43fbb218","latitude":"33.4821870","longitude":"36.3166250","heading":"0.00","speed":0,"distance":"1.29","status":"off","carType":"Awfar","created_at":"2025-11-23 17:24:11","updated_at":"2025-11-24 03:41:14","location_point":"?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u00007ǹM??@@J\f\u0002+?(B@"},{"driver_id":"deca7fb63f48b1ca94fb","latitude":"33.4431820","longitude":"36.3515780","heading":"0.00","speed":0,"distance":"0.00","status":"off","carType":"Awfar","created_at":"2025-11-22 10:34:48","updated_at":"2025-11-24 09:09:39","location_point":"?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000?\u0016\u00120??@@\u001e?\u0005?\u0000-B@"},{"driver_id":"e0f047c3e4e817e69e6a","latitude":"33.4934880","longitude":"36.2400300","heading":"214.00","speed":30,"distance":"4.93","status":"off","carType":"Awfar","created_at":"2025-11-19 19:12:29","updated_at":"2025-11-24 09:39:05","location_point":"?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000?{b?*?@@?\u0007?M?\u001eB@"},{"driver_id":"e49604074b0b27710516","latitude":"33.5721820","longitude":"36.1939750","heading":"355.00","speed":14.6,"distance":"13.05","status":"off","carType":"Awfar","created_at":"2025-11-23 11:08:29","updated_at":"2025-11-24 09:06:06","location_point":"?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000\u0010??B=?@@?<,?\u0018B@"},{"driver_id":"ed9bbe9d106d47b92a18","latitude":"33.5079030","longitude":"36.2886390","heading":"0.00","speed":0,"distance":"0.83","status":"off","carType":"Awfar","created_at":"2025-11-08 11:38:16","updated_at":"2025-11-24 10:06:45","location_point":"?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000(E+?\u0002?@@Ҭl\u001f?$B@"},{"driver_id":"ee9098c3ff80352d8ea2","latitude":"33.4964920","longitude":"36.2473050","heading":"0.00","speed":0,"distance":"0.00","status":"off","carType":"Awfar","created_at":"2025-11-22 07:27:02","updated_at":"2025-11-24 09:11:35","location_point":"?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000?\\?\f??@@?????\u001fB@"},{"driver_id":"eed6cf591bc0c14a70fc","latitude":"36.2133570","longitude":"37.1128670","heading":"92.00","speed":42.2,"distance":"16.25","status":"off","carType":"Awfar","created_at":"2025-11-19 10:01:07","updated_at":"2025-11-24 10:07:59","location_point":"?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000??\u0003??@@??\u0013??*B@" + }, + { + "driver_id": "6fa45ad3119ea23b7c0d", + "latitude": "33.4809640", + "longitude": "36.2965950", + "heading": "52.00", + "speed": 0.69, + "distance": "8.54", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-17 10:18:31", + "updated_at": "2025-12-06 20:00:44", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000?Fu:??@@\u001d?0??%B@" + }, + { + "driver_id": "9b5df1af05117f04323e", + "latitude": "33.5050840", + "longitude": "36.2458420", + "heading": "0.00", + "speed": 0, + "distance": "0.00", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-25 11:57:52", + "updated_at": "2025-12-06 20:00:44", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000?ݮ???@@??*?w\u001fB@" + }, + { + "driver_id": "b4eb6f4a7b6a99aa7d5c", + "latitude": "34.7340120", + "longitude": "36.7211340", + "heading": "0.00", + "speed": 0, + "distance": "0.00", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-30 11:26:20", + "updated_at": "2025-12-06 20:00:31", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000?o?\u001a?]A@O\u0004q\u001eN\\B@" + }, + { + "driver_id": "ef660f2e6a9ce671488a", + "latitude": "33.5101700", + "longitude": "36.2788840", + "heading": "0.00", + "speed": 0, + "distance": "0.01", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-23 18:47:46", + "updated_at": "2025-12-06 20:00:16", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000>?$@M?@@W??x?#B@" + }, + { + "driver_id": "fd3c6a020f0df4d96c51", + "latitude": "33.5008860", + "longitude": "36.3052850", + "heading": "242.70", + "speed": 31.9, + "distance": "83.80", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-23 20:21:30", + "updated_at": "2025-12-06 20:00:16", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000\u001b?N\b\u001d?@@?z1?\u0013'B@" + }, + { + "driver_id": "6398a0b9f06aed86d727", + "latitude": "33.5692630", + "longitude": "36.2318970", + "heading": "0.00", + "speed": 0, + "distance": "0.00", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-26 19:01:22", + "updated_at": "2025-12-06 19:59:34", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000S?'???@@\/?\u0007ͮ\u001dB@" + }, + { + "driver_id": "a83d509aa7dd136b453d", + "latitude": "33.5320980", + "longitude": "36.3610560", + "heading": "66.00", + "speed": 29.7, + "distance": "43.93", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-22 12:10:02", + "updated_at": "2025-12-06 19:59:24", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000-\"??\u001b?@@%\u0003@\u00157.B@" + }, + { + "driver_id": "e8ecdfaf9c7f23e60fb5", + "latitude": "33.5364310", + "longitude": "36.3032720", + "heading": "0.00", + "speed": 0, + "distance": "0.00", + "status": "off", + "carType": "Awfar", + "created_at": "2025-12-06 13:44:37", + "updated_at": "2025-12-06 19:58:59", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000??`ũ?@@q???&B@" + }, + { + "driver_id": "d689f7a02e1c41ec1ddb", + "latitude": "33.4984560", + "longitude": "36.2508200", + "heading": "59.00", + "speed": 24, + "distance": "38.31", + "status": "off", + "carType": "Awfar", + "created_at": "2025-12-04 10:33:17", + "updated_at": "2025-12-06 19:58:50", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000[??gͿ@@c???\u001a B@" + }, + { + "driver_id": "1ef563908f031c999ac3", + "latitude": "33.6936040", + "longitude": "36.3755020", + "heading": "0.00", + "speed": 0, + "distance": "215.89", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-07 14:54:23", + "updated_at": "2025-12-06 19:58:44", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000?\/\u0010\u0004??@@??\u0014s\u00100B@" + }, + { + "driver_id": "3c704fe7aa1f129686c3", + "latitude": "35.1308330", + "longitude": "36.7544440", + "heading": "245.10", + "speed": 16.3, + "distance": "5.18", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-22 10:47:19", + "updated_at": "2025-12-06 19:58:13", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000i\u001e?\"??A@?T???`B@" + }, + { + "driver_id": "605bc5d78adf0cd92157", + "latitude": "33.4218050", + "longitude": "36.1466830", + "heading": "0.00", + "speed": 0, + "distance": "9.34", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-29 08:36:07", + "updated_at": "2025-12-06 19:57:44", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000\u0007%̴??@@??\/??\u0012B@" + }, + { + "driver_id": "5eb29c514f0968d5a02a", + "latitude": "36.1995410", + "longitude": "37.1369350", + "heading": "0.00", + "speed": 0, + "distance": "0.00", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-30 13:29:40", + "updated_at": "2025-12-06 19:57:39", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000\u0007?:??\u0019B@?V\t\u0016??B@" + }, + { + "driver_id": "7c90a80341e683a29789", + "latitude": "33.5341370", + "longitude": "36.3026020", + "heading": "90.00", + "speed": 15.6, + "distance": "2.49", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-26 12:19:11", + "updated_at": "2025-12-06 19:57:08", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000?J?^?@@#ڎ??&B@" + }, + { + "driver_id": "65965c104f9e37aba687", + "latitude": "33.4849120", + "longitude": "36.2959550", + "heading": "0.00", + "speed": 0, + "distance": "0.00", + "status": "off", + "carType": "Awfar", + "created_at": "2025-12-05 11:53:07", + "updated_at": "2025-12-06 19:56:35", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000\u000f???\u0011?@@9\u000b{??%B@" + }, + { + "driver_id": "8aab8ff92c2f64fe6a41", + "latitude": "33.5360260", + "longitude": "36.3058800", + "heading": "29.00", + "speed": 28.4, + "distance": "95.89", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-16 17:48:31", + "updated_at": "2025-12-06 19:50:52", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000!????@@\u0010@j\u0013''B@" + }, + { + "driver_id": "583151e51dc980730494", + "latitude": "33.5148010", + "longitude": "36.2914550", + "heading": "0.00", + "speed": 0, + "distance": "0.00", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-17 11:24:44", + "updated_at": "2025-12-06 19:48:47", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000[y????@@???eN%B@" + }, + { + "driver_id": "44bd789caf01f3ac6053", + "latitude": "33.5596130", + "longitude": "36.3239080", + "heading": "0.00", + "speed": 0, + "distance": "0.00", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-27 10:12:58", + "updated_at": "2025-12-06 19:46:36", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000N?\u0016f??@@?t=?u)B@" + }, + { + "driver_id": "4738a3b984b40929552a", + "latitude": "33.5201560", + "longitude": "36.3098630", + "heading": "278.00", + "speed": 24.5, + "distance": "48.95", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-22 14:20:27", + "updated_at": "2025-12-06 19:46:20", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000?h?x??@@Ǟ=??'B@" + }, + { + "driver_id": "b1b69ecaacdd786ed6fb", + "latitude": "33.5171960", + "longitude": "36.2904250", + "heading": "353.00", + "speed": 0.6, + "distance": "0.00", + "status": "off", + "carType": "Awfar", + "created_at": "2025-12-02 17:10:39", + "updated_at": "2025-12-06 19:42:52", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000?πz3?@@lxz?,%B@" + }, + { + "driver_id": "1bdab3efe5ca91c59db7", + "latitude": "33.5528590", + "longitude": "36.3233590", + "heading": "42.00", + "speed": 10.7, + "distance": "93.94", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-25 07:31:15", + "updated_at": "2025-12-06 19:41:52", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000N&n\u0015??@@\u0003???c)B@" + }, + { + "driver_id": "2a2e331de0868a164b0c", + "latitude": "36.2075040", + "longitude": "37.1658510", + "heading": "172.00", + "speed": 19.4, + "distance": "26.69", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-15 09:40:03", + "updated_at": "2025-12-06 19:40:46", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000\u0004?}?\u001aB@$?\u0006?:?B@" + }, + { + "driver_id": "ca60f0f65d7d6de23e5c", + "latitude": "36.2023130", + "longitude": "37.1126720", + "heading": "346.00", + "speed": 19.9, + "distance": "12.31", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-15 09:36:34", + "updated_at": "2025-12-06 19:35:05", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000\u001fGsd?\u0019B@d?=\tl?B@" + }, + { + "driver_id": "eeca8786bec7ff82ab91", + "latitude": "33.5377190", + "longitude": "36.2971080", + "heading": "0.00", + "speed": 0, + "distance": "4.14", + "status": "off", + "carType": "Awfar", + "created_at": "2025-12-06 14:41:59", + "updated_at": "2025-12-06 19:34:24", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000\u000b?????@@????\u0007&B@" + }, + { + "driver_id": "ab180e356874c1d98850", + "latitude": "33.4844750", + "longitude": "36.3151920", + "heading": "49.00", + "speed": 1.8, + "distance": "0.00", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-04 08:52:39", + "updated_at": "2025-12-06 19:34:23", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000d]?F\u0003?@@??!6X(B@" + }, + { + "driver_id": "9cbf649351a6e59c3944", + "latitude": "33.5337870", + "longitude": "36.2968840", + "heading": "69.50", + "speed": 6.7, + "distance": "101.48", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-17 03:45:03", + "updated_at": "2025-12-06 19:33:56", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000?\u0003?!S?@@SZK\u0000&B@" + }, + { + "driver_id": "bd648f8f81d7afde9c6f", + "latitude": "33.5848520", + "longitude": "36.3656790", + "heading": "349.60", + "speed": 21.7, + "distance": "106.04", + "status": "off", + "carType": "Awfar", + "created_at": "2025-12-03 09:54:13", + "updated_at": "2025-12-06 19:29:37", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000\u0006?*n??@@??ȑ?.B@" + }, + { + "driver_id": "53048279340f0c0930cb", + "latitude": "33.5511830", + "longitude": "36.2117810", + "heading": "38.20", + "speed": 19.5, + "distance": "78.98", + "status": "off", + "carType": "Awfar", + "created_at": "2025-12-05 12:04:51", + "updated_at": "2025-12-06 19:27:31", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000;?\u001f*??@@\u0004uʣ\u001b\u001bB@" + }, + { + "driver_id": "74d40382580cc085d107", + "latitude": "33.4199890", + "longitude": "36.3538050", + "heading": "85.30", + "speed": 1.9729999999999999, + "distance": "3.17", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-22 10:13:42", + "updated_at": "2025-12-06 19:27:06", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000\u0002?\u00153µ@@?\u0014t{I-B@" + }, + { + "driver_id": "5af8271bfd5b5bd7033c", + "latitude": "33.4847310", + "longitude": "36.3514880", + "heading": "0.00", + "speed": 0, + "distance": "0.00", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-28 17:44:48", + "updated_at": "2025-12-06 19:26:51", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000?-X?\u000b?@@?w\f??,B@" + }, + { + "driver_id": "08ec60fec0db11ab065e", + "latitude": "36.2149150", + "longitude": "37.1586210", + "heading": "0.00", + "speed": 0, + "distance": "0.01", + "status": "off", + "carType": "Awfar", + "created_at": "2025-12-03 12:14:06", + "updated_at": "2025-12-06 19:26:29", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000?5?U?\u001bB@??c?M?B@" + }, + { + "driver_id": "e864c3bbe2fa7179a1ba", + "latitude": "35.1444440", + "longitude": "36.7716100", + "heading": "0.00", + "speed": 0, + "distance": "0.00", + "status": "off", + "carType": "Awfar", + "created_at": "2025-12-05 22:59:42", + "updated_at": "2025-12-06 19:19:38", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000=\r\u0018$}?A@\u001f??\u001d?bB@" + }, + { + "driver_id": "eed6cf591bc0c14a70fc", + "latitude": "36.2072480", + "longitude": "37.1069370", + "heading": "0.00", + "speed": 0, + "distance": "0.00", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-19 10:01:07", + "updated_at": "2025-12-06 19:18:55", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000?\u0014;\u001a?\u001aB@?ݒ\u001c??B@" + }, + { + "driver_id": "5bfc4ab464d369b8b251", + "latitude": "33.4989350", + "longitude": "36.2460500", + "heading": "296.00", + "speed": 11.8, + "distance": "76.08", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-15 10:05:28", + "updated_at": "2025-12-06 19:18:41", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u00006?!\u001aݿ@@$???~\u001fB@" + }, + { + "driver_id": "b19cea00f537006cba32", + "latitude": "33.5442600", + "longitude": "36.1928100", + "heading": "301.00", + "speed": 38.2, + "distance": "82.36", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-23 08:42:36", + "updated_at": "2025-12-06 19:15:24", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000?B?O??@@?+???\u0018B@" + }, + { + "driver_id": "b984a7ae6a1198aaf1b8", + "latitude": "33.5498130", + "longitude": "36.3212150", + "heading": "0.00", + "speed": 0, + "distance": "0.00", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-10 21:05:44", + "updated_at": "2025-12-06 19:14:21", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u00004??E`?@@\t???\u001d)B@" + }, + { + "driver_id": "9cc5950f6b29f5a031fb", + "latitude": "34.7082120", + "longitude": "36.7076300", + "heading": "292.70", + "speed": 0.898, + "distance": "0.01", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-25 16:22:23", + "updated_at": "2025-12-06 19:06:03", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000@Qٰ?ZA@?խ??ZB@" + }, + { + "driver_id": "7c76ba913e048f23f843", + "latitude": "33.5371720", + "longitude": "36.2412550", + "heading": "321.00", + "speed": 12, + "distance": "26.10", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-09 09:07:02", + "updated_at": "2025-12-06 19:03:22", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000?)V\r??@@??q?\u001eB@" + }, + { + "driver_id": "645f409b0636f6fa1252", + "latitude": "33.5108220", + "longitude": "36.2754120", + "heading": "277.00", + "speed": 33.9, + "distance": "3.99", + "status": "off", + "carType": "Awfar", + "created_at": "2025-12-02 21:45:03", + "updated_at": "2025-12-06 19:02:33", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000?\t??b?@@?vN?@#B@" + }, + { + "driver_id": "45889ade20db80bbc087", + "latitude": "33.4458810", + "longitude": "36.0830550", + "heading": "0.00", + "speed": 0, + "distance": "124.42", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-08 05:10:11", + "updated_at": "2025-12-06 19:00:44", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u00002t?\u0012?@@xb֋?\nB@" + }, + { + "driver_id": "81c3995aceca18b97541", + "latitude": "33.5189400", + "longitude": "36.3232270", + "heading": "0.00", + "speed": 0, + "distance": "0.00", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-22 10:21:40", + "updated_at": "2025-12-06 19:00:15", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000\nK(B@" + }, + { + "driver_id": "c335dc9138960670f6dc", + "latitude": "34.7423480", + "longitude": "36.7161970", + "heading": "0.00", + "speed": 0, + "distance": "0.00", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-19 08:58:16", + "updated_at": "2025-12-06 18:32:28", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000! _B\u0005_A@%??W?[B@" + }, + { + "driver_id": "f5ca5c9eabc931536e08", + "latitude": "36.2161800", + "longitude": "37.0996050", + "heading": "0.00", + "speed": 0, + "distance": "0.00", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-30 10:46:58", + "updated_at": "2025-12-06 18:27:20", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000O\u0006Gɫ\u001bB@P?Lۿ?B@" + }, + { + "driver_id": "126face48d0c1fca88d1", + "latitude": "34.7236770", + "longitude": "36.7016560", + "heading": "0.00", + "speed": 0, + "distance": "0.00", + "status": "off", + "carType": "Awfar", + "created_at": "2025-12-02 14:22:48", + "updated_at": "2025-12-06 18:26:28", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000\u0007?r?\\A@f?\"??YB@" + }, + { + "driver_id": "c8d1485e5dd6b8484bb4", + "latitude": "33.5377250", + "longitude": "36.2000230", + "heading": "115.00", + "speed": 3.6, + "distance": "0.01", + "status": "off", + "carType": "Awfar", + "created_at": "2025-12-04 11:12:22", + "updated_at": "2025-12-06 18:25:56", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000?<,??@@R??Z?\u0019B@" + }, + { + "driver_id": "3eb6243c7c9de43080b7", + "latitude": "35.5195620", + "longitude": "35.7989100", + "heading": "90.00", + "speed": 28, + "distance": "31.39", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-13 08:42:28", + "updated_at": "2025-12-06 18:21:56", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000G\u001f?\u0001??A@C9ѮB?A@" + }, + { + "driver_id": "f33b6192212bbd06393e", + "latitude": "36.1943630", + "longitude": "37.1222500", + "heading": "6.30", + "speed": 1.166, + "distance": "259.90", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-19 09:30:43", + "updated_at": "2025-12-06 18:21:50", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000?F\u0004??\u0018B@??S㥏B@" + }, + { + "driver_id": "d3b2c333f66d5b8bac31", + "latitude": "35.5074980", + "longitude": "35.7748310", + "heading": "355.80", + "speed": 1.291, + "distance": "0.01", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-30 12:22:35", + "updated_at": "2025-12-06 18:18:47", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000?dȱ??A@?v??-?A@" + }, + { + "driver_id": "84526a946ab104acc806", + "latitude": "33.5198330", + "longitude": "36.2882370", + "heading": "47.00", + "speed": 25.6, + "distance": "1.11", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-21 14:04:37", + "updated_at": "2025-12-06 18:13:09", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000?0C??@@??4??$B@" + }, + { + "driver_id": "1376afac594c3f2ae601", + "latitude": "35.3461500", + "longitude": "35.9474690", + "heading": "155.50", + "speed": 0, + "distance": "0.03", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-23 10:00:05", + "updated_at": "2025-12-06 18:12:18", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000U???N?A@?|\b?F?A@" + }, + { + "driver_id": "55990e379c52520b6c7a", + "latitude": "33.5148080", + "longitude": "36.3189570", + "heading": "220.00", + "speed": 27.2, + "distance": "1.46", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-19 09:16:56", + "updated_at": "2025-12-06 18:09:53", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000\u000e܁:??@@F?=??(B@" + }, + { + "driver_id": "1031b1b342a9a9e20b95", + "latitude": "33.4515500", + "longitude": "36.2376890", + "heading": "0.00", + "speed": 0, + "distance": "0.00", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-13 09:40:09", + "updated_at": "2025-12-06 18:08:48", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000 A?c̹@@:?ؗl\u001eB@" + }, + { + "driver_id": "9d72ed7a604c81631de4", + "latitude": "33.5327130", + "longitude": "36.1798670", + "heading": "0.00", + "speed": 0, + "distance": "0.00", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-27 13:00:40", + "updated_at": "2025-12-06 18:07:41", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000????\/?@@?P??\u0005\u0017B@" + }, + { + "driver_id": "092df73b4d8a8e76ab71", + "latitude": "33.5110290", + "longitude": "36.2892030", + "heading": "356.20", + "speed": 25.3, + "distance": "21.95", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-17 12:24:03", + "updated_at": "2025-12-06 18:04:13", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000_'?ei?@@?s??\u0004%B@" + }, + { + "driver_id": "34ccef720239f27febf7", + "latitude": "36.2218980", + "longitude": "37.1495930", + "heading": "35.00", + "speed": 8.4, + "distance": "34.62", + "status": "off", + "carType": "Awfar", + "created_at": "2025-12-06 07:25:32", + "updated_at": "2025-12-06 18:03:14", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000\u001f?V'g\u001cB@?Z\t?%?B@" + }, + { + "driver_id": "25c2194c7dd77a9cb9ca", + "latitude": "33.5324450", + "longitude": "36.3031400", + "heading": "8.00", + "speed": 38, + "distance": "27.83", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-19 09:03:51", + "updated_at": "2025-12-06 17:57:34", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000??b('?@@\u0002\u000e?J?&B@" + }, + { + "driver_id": "ff2ae874fb90ac2656a9", + "latitude": "33.5272620", + "longitude": "36.2116550", + "heading": "0.00", + "speed": 0, + "distance": "19.16", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-09 10:40:56", + "updated_at": "2025-12-06 17:53:38", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u000076;R}?@@w?ӂ\u0017\u001bB@" + }, + { + "driver_id": "ef0a1e080246d40b293d", + "latitude": "33.4845110", + "longitude": "36.2115830", + "heading": "0.00", + "speed": 0, + "distance": "15.43", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-03 19:49:13", + "updated_at": "2025-12-06 17:53:03", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000???t\u0004?@@ݱ?&\u0015\u001bB@" + }, + { + "driver_id": "0cf716369949752bc9e6", + "latitude": "33.5253200", + "longitude": "36.2846160", + "heading": "236.00", + "speed": 1.339, + "distance": "0.47", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-24 10:44:02", + "updated_at": "2025-12-06 17:50:40", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000????=?@@??\rLn$B@" + }, + { + "driver_id": "5b23b4ca70011211544c", + "latitude": "33.5414120", + "longitude": "36.1993570", + "heading": "0.00", + "speed": 0, + "distance": "0.00", + "status": "off", + "carType": "Awfar", + "created_at": "2025-12-06 12:29:51", + "updated_at": "2025-12-06 17:48:23", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000??\b?L?@@E????\u0019B@" + }, + { + "driver_id": "5eef6ca68ace2c832185", + "latitude": "33.5356860", + "longitude": "36.3022850", + "heading": "0.00", + "speed": 0, + "distance": "4.73", + "status": "off", + "carType": "Awfar", + "created_at": "2025-12-06 13:10:35", + "updated_at": "2025-12-06 17:47:12", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000hv?[??@@\"?^F?&B@" + }, + { + "driver_id": "dd852ec6c0786229a93f", + "latitude": "33.5790780", + "longitude": "36.2984270", + "heading": "0.00", + "speed": 0, + "distance": "0.00", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-22 11:18:55", + "updated_at": "2025-12-06 17:45:52", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000??W:\u001f?@@'?\u001e?2&B@" + }, + { + "driver_id": "f7859c2ecf59fea95c59", + "latitude": "33.5013910", + "longitude": "36.3537380", + "heading": "0.00", + "speed": 0, + "distance": "0.00", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-22 12:41:58", + "updated_at": "2025-12-06 17:44:03", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000\u001e???-?@@\u001d?jIG-B@" + }, + { + "driver_id": "448e66f07f9371b8f615", + "latitude": "36.1884020", + "longitude": "37.1741130", + "heading": "255.00", + "speed": 27.2, + "distance": "9.03", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-29 09:30:14", + "updated_at": "2025-12-06 17:42:36", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000!@??\u001d\u0018B@{g?UI?B@" + }, + { + "driver_id": "730c7ecbf9e73ba0301c", + "latitude": "33.4943270", + "longitude": "36.3414230", + "heading": "0.00", + "speed": 0, + "distance": "3.40", + "status": "off", + "carType": "Awfar", + "created_at": "2025-12-03 06:37:47", + "updated_at": "2025-12-06 17:41:32", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000?Cm\u001bF?@@\u0015????+B@" + }, + { + "driver_id": "36fbb55070e5b1ae3651", + "latitude": "36.2105290", + "longitude": "37.1822820", + "heading": "0.00", + "speed": 0, + "distance": "0.00", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-17 14:36:57", + "updated_at": "2025-12-06 17:37:03", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000\u0007?@??\u001aB@\"S>\u0004U?B@" + }, + { + "driver_id": "2ec1748f2eb11b8ee9c2", + "latitude": "33.4886640", + "longitude": "36.2884600", + "heading": "128.50", + "speed": 0, + "distance": "0.00", + "status": "off", + "carType": "Awfar", + "created_at": "2025-12-04 11:13:37", + "updated_at": "2025-12-06 17:32:15", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000?]????@@\"\u001a?A?$B@" + }, + { + "driver_id": "49c7c94ed2c141eda1c1", + "latitude": "35.1425670", + "longitude": "36.7562540", + "heading": "33.60", + "speed": 2.451, + "distance": "7.21", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-19 17:25:04", + "updated_at": "2025-12-06 17:28:57", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000?>????A@\u000e?Z??`B@" + }, + { + "driver_id": "9a7f4098997155e6a1a5", + "latitude": "33.4930770", + "longitude": "36.2396400", + "heading": "227.00", + "speed": 0, + "distance": "0.00", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-25 15:06:50", + "updated_at": "2025-12-06 17:20:18", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000t??%\u001d?@@\u001fh\u0005??\u001eB@" + }, + { + "driver_id": "310c071d2ea9a325a6d7", + "latitude": "33.4858860", + "longitude": "36.3521300", + "heading": "1.00", + "speed": 14.1, + "distance": "34.81", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-28 08:38:02", + "updated_at": "2025-12-06 17:20:04", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000??\/?1?@@b???\u0012-B@" + }, + { + "driver_id": "a5499b6d88e61efe0c71", + "latitude": "33.4988930", + "longitude": "36.2459050", + "heading": "284.00", + "speed": 12.3, + "distance": "24.68", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-16 17:53:00", + "updated_at": "2025-12-06 17:18:34", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000\u0007?Ϲۿ@@!v??y\u001fB@" + }, + { + "driver_id": "f0dadf61b525b4cbf3ab", + "latitude": "33.5023020", + "longitude": "36.2388470", + "heading": "0.00", + "speed": 0, + "distance": "62.51", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-20 09:31:28", + "updated_at": "2025-12-06 17:18:27", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000?[?nK?@@??ډ?\u001eB@" + }, + { + "driver_id": "a5be1a34ad4cb46f22ae", + "latitude": "34.7104210", + "longitude": "36.7288060", + "heading": "350.00", + "speed": 48.3, + "distance": "1.79", + "status": "off", + "carType": "Awfar", + "created_at": "2025-12-03 12:39:05", + "updated_at": "2025-12-06 17:17:29", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000 ?H\u0013?ZA@u?׃I]B@" + }, + { + "driver_id": "838bbc3e9b621ae31149", + "latitude": "36.1877690", + "longitude": "37.1449390", + "heading": "0.00", + "speed": 0, + "distance": "0.00", + "status": "off", + "carType": "Awfar", + "created_at": "2025-12-03 13:32:04", + "updated_at": "2025-12-06 17:16:52", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000?\u0019??\b\u0018B@\u001dut\\??B@" + }, + { + "driver_id": "8542111a1281a1d9ee58", + "latitude": "34.7136100", + "longitude": "36.6903230", + "heading": "142.00", + "speed": 9.5, + "distance": "0.43", + "status": "off", + "carType": "Awfar", + "created_at": "2025-12-06 12:02:19", + "updated_at": "2025-12-06 17:15:03", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000?\f??W[A@?V\n?\\XB@" + }, + { + "driver_id": "0d7d0f6518473f799be2", + "latitude": "34.7154680", + "longitude": "36.7080780", + "heading": "0.00", + "speed": 0, + "distance": "0.23", + "status": "off", + "carType": "Awfar", + "created_at": "2025-12-06 13:13:11", + "updated_at": "2025-12-06 17:13:34", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000Ҫ?t?[A@0??L?ZB@" + }, + { + "driver_id": "4149481b099bf07e02fc", + "latitude": "33.5193190", + "longitude": "36.2911310", + "heading": "326.00", + "speed": 0, + "distance": "0.01", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-22 13:48:29", + "updated_at": "2025-12-06 17:09:59", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000???\u000by?@@\u0007???C%B@" + }, + { + "driver_id": "c2477764b17fb3cf03a9", + "latitude": "35.5511950", + "longitude": "35.8094530", + "heading": "0.00", + "speed": 0, + "distance": "0.00", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-19 13:56:12", + "updated_at": "2025-12-06 17:07:13", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000?[Ɏ??A@\u0015S?'??A@" + }, + { + "driver_id": "7d7fbde1576bac76ea7e", + "latitude": "33.5537820", + "longitude": "36.2229030", + "heading": "350.00", + "speed": 0.8, + "distance": "8.76", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-20 09:55:47", + "updated_at": "2025-12-06 17:00:53", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000??\u001dT??@@\u0014??\u0015?\u001cB@" + }, + { + "driver_id": "7f9618accf6b629a01d9", + "latitude": "33.4989380", + "longitude": "36.3307880", + "heading": "22.00", + "speed": 26.2, + "distance": "3.25", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-05 15:10:27", + "updated_at": "2025-12-06 16:53:46", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000?]L3ݿ@@b??BW*B@" + }, + { + "driver_id": "89534d12f661a770784c", + "latitude": "33.4235320", + "longitude": "36.1412700", + "heading": "0.00", + "speed": 0, + "distance": "0.00", + "status": "off", + "carType": "Awfar", + "created_at": "2025-12-02 13:11:47", + "updated_at": "2025-12-06 16:47:50", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000?g?K6?@@??\"\u0015\u0012B@" + }, + { + "driver_id": "37e4c36c61b8cc8166a4", + "latitude": "33.5389030", + "longitude": "36.3385090", + "heading": "162.00", + "speed": 8.8, + "distance": "0.48", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-29 10:32:20", + "updated_at": "2025-12-06 16:43:38", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000?[\u0004???@@j3NCT+B@" + }, + { + "driver_id": "ccc40f0678031eb1dc8a", + "latitude": "36.2224740", + "longitude": "37.1805350", + "heading": "357.90", + "speed": 0, + "distance": "6.08", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-30 07:54:40", + "updated_at": "2025-12-06 16:40:31", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000?\u001a-\u0007z\u001cB@EdX?\u001b?B@" + }, + { + "driver_id": "649c3d3ecf2fc23a3b17", + "latitude": "33.4892850", + "longitude": "36.3471380", + "heading": "0.00", + "speed": 0.3, + "distance": "0.00", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-23 10:37:48", + "updated_at": "2025-12-06 16:39:54", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u00001?\u0010䠾@@t??\u0004o,B@" + }, + { + "driver_id": "d67fc826491216d4e0e2", + "latitude": "33.5079280", + "longitude": "36.2888800", + "heading": "0.00", + "speed": 0, + "distance": "0.00", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-08 09:56:18", + "updated_at": "2025-12-06 16:37:01", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000?\\??\u0003?@@?;\u0014\u0005?$B@" + }, + { + "driver_id": "1174eec1f4fcce210cae", + "latitude": "33.5055370", + "longitude": "36.2840240", + "heading": "314.50", + "speed": 38.6, + "distance": "93.73", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-30 09:47:35", + "updated_at": "2025-12-06 16:28:29", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000??o??@@????Z$B@" + }, + { + "driver_id": "6b75e31c4617c737d7f1", + "latitude": "35.5173540", + "longitude": "35.7875130", + "heading": "0.00", + "speed": 0, + "distance": "0.00", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-21 13:43:29", + "updated_at": "2025-12-06 16:27:50", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u00006:?8?A@a\u0016?9??A@" + }, + { + "driver_id": "a4e5eb8086eebb896c88", + "latitude": "34.7190210", + "longitude": "36.7007610", + "heading": "0.00", + "speed": 0, + "distance": "0.00", + "status": "off", + "carType": "Awfar", + "created_at": "2025-12-06 14:26:56", + "updated_at": "2025-12-06 16:26:56", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000?\u0011P?\b\\A@??T??YB@" + }, + { + "driver_id": "654aa82fab73b295768f", + "latitude": "36.1921070", + "longitude": "37.1243620", + "heading": "0.00", + "speed": 0, + "distance": "0.00", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-30 15:06:39", + "updated_at": "2025-12-06 16:26:40", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000?*Q??\u0018B@?n\u0011\u0018?B@" + }, + { + "driver_id": "56be5cea9e7778f6dda5", + "latitude": "36.1851980", + "longitude": "37.1250900", + "heading": "0.00", + "speed": 0, + "distance": "0.00", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-26 17:41:29", + "updated_at": "2025-12-06 16:26:20", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000n?l??\u0017B@@???\u0002?B@" + }, + { + "driver_id": "ecede98014a876b9278d", + "latitude": "35.5419930", + "longitude": "35.8015750", + "heading": "0.00", + "speed": 0, + "distance": "0.00", + "status": "off", + "carType": "Awfar", + "created_at": "2025-12-05 09:44:38", + "updated_at": "2025-12-06 16:25:50", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000???\u0006`?A@F%u\u0002??A@" + }, + { + "driver_id": "fa866fec3430ca2e21a7", + "latitude": "33.4329180", + "longitude": "36.2354250", + "heading": "0.00", + "speed": 0, + "distance": "0.00", + "status": "off", + "carType": "Awfar", + "created_at": "2025-12-04 08:15:40", + "updated_at": "2025-12-06 16:25:49", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000??e?i?@@??\th\"\u001eB@" + }, + { + "driver_id": "4e6dd66445415177ccc2", + "latitude": "33.5358440", + "longitude": "36.2980980", + "heading": "28.90", + "speed": 0, + "distance": "2.65", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-30 12:38:45", + "updated_at": "2025-12-06 16:21:55", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000\u0000?C???@@c?D\u0013(&B@" + }, + { + "driver_id": "92e2fd19f4be30c3c727", + "latitude": "35.2046000", + "longitude": "36.8462880", + "heading": "0.00", + "speed": 0, + "distance": "0.00", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-27 09:05:54", + "updated_at": "2025-12-06 16:17:49", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000|a2U0?A@?I*SlB@" + }, + { + "driver_id": "f4f4b7aa333910e55249", + "latitude": "33.4958850", + "longitude": "36.2938930", + "heading": "343.00", + "speed": 2.6, + "distance": "0.21", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-28 19:33:39", + "updated_at": "2025-12-06 16:17:23", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000???(y?@@??+I?%B@" + }, + { + "driver_id": "f1be19a607dab879610a", + "latitude": "33.5390650", + "longitude": "36.1798360", + "heading": "0.00", + "speed": 0, + "distance": "0.00", + "status": "off", + "carType": "Awfar", + "created_at": "2025-12-01 16:28:09", + "updated_at": "2025-12-06 16:16:40", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000???\u0014\u0000?@@]R??\u0004\u0017B@" + }, + { + "driver_id": "1c39c551928c0c343c5c", + "latitude": "33.4918320", + "longitude": "36.2925370", + "heading": "0.00", + "speed": 0, + "distance": "0.00", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-25 09:48:04", + "updated_at": "2025-12-06 16:14:27", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000*??Y??@@[?7?q%B@" + }, + { + "driver_id": "c061190dfa286a236931", + "latitude": "35.1330430", + "longitude": "36.7504110", + "heading": "0.00", + "speed": 0, + "distance": "0.00", + "status": "off", + "carType": "Awfar", + "created_at": "2025-12-01 11:14:28", + "updated_at": "2025-12-06 16:13:57", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000\u001a???\u0007?A@?Ƿw\r`B@" + }, + { + "driver_id": "a8f297a461220b359d30", + "latitude": "33.5667120", + "longitude": "36.3215730", + "heading": "0.00", + "speed": 0, + "distance": "19.35", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-10 18:28:46", + "updated_at": "2025-12-06 16:12:56", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000\u0019 ?\u0004??@@h#?M))B@" + }, + { + "driver_id": "b0bd0b8d7e1a0b554deb", + "latitude": "33.5187170", + "longitude": "36.2955930", + "heading": "0.00", + "speed": 0, + "distance": "0.00", + "status": "off", + "carType": "Awfar", + "created_at": "2025-12-04 11:14:45", + "updated_at": "2025-12-06 16:11:35", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000?p?Qe?@@?????%B@" + }, + { + "driver_id": "85f72af85cf24b71c24a", + "latitude": "33.4955170", + "longitude": "36.2475090", + "heading": "0.00", + "speed": 0, + "distance": "0.00", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-25 09:34:11", + "updated_at": "2025-12-06 16:05:11", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000W??\u0019m?@@?;?_?\u001fB@" + }, + { + "driver_id": "97c2e0da965a1e5c8a78", + "latitude": "35.1260450", + "longitude": "36.7766820", + "heading": "0.00", + "speed": 0, + "distance": "0.00", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-25 11:02:26", + "updated_at": "2025-12-06 16:04:17", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000?i\u0018>\"?A@)??PjcB@" + }, + { + "driver_id": "137c6bb88dda64a66e0c", + "latitude": "33.5361870", + "longitude": "36.2244710", + "heading": "0.00", + "speed": 0, + "distance": "3.65", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-28 13:36:43", + "updated_at": "2025-12-06 16:03:57", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000*Ŏơ?@@A?9w?\u001cB@" + }, + { + "driver_id": "2aec5551d50f3e3966a5", + "latitude": "33.4779150", + "longitude": "36.3323240", + "heading": "0.00", + "speed": 0, + "distance": "0.09", + "status": "off", + "carType": "Awfar", + "created_at": "2025-12-06 13:57:18", + "updated_at": "2025-12-06 16:01:42", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000I??Q,?@@??×?*B@" + }, + { + "driver_id": "657ab5f025aabe9f0673", + "latitude": "33.5406970", + "longitude": "36.2468420", + "heading": "91.00", + "speed": 14.1, + "distance": "106.69", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-11 09:37:05", + "updated_at": "2025-12-06 15:59:52", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000?\u0005.?5?@@??Ƅ?\u001fB@" + }, + { + "driver_id": "19c29d0f68c11a010f1e", + "latitude": "33.4898950", + "longitude": "36.3335130", + "heading": "0.00", + "speed": 0, + "distance": "5.05", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-20 12:57:27", + "updated_at": "2025-12-06 15:58:45", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000??\u001dᴾ@@;?э?*B@" + }, + { + "driver_id": "e8dc842b8079a31b1878", + "latitude": "33.4737070", + "longitude": "36.3271870", + "heading": "0.00", + "speed": 0, + "distance": "3.56", + "status": "off", + "carType": "Awfar", + "created_at": "2025-12-06 12:30:49", + "updated_at": "2025-12-06 15:58:07", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000qqTn??@@?V|C?)B@" + }, + { + "driver_id": "a644fd49f0528cc7e021", + "latitude": "33.5178570", + "longitude": "36.2854480", + "heading": "347.10", + "speed": 0, + "distance": "1.01", + "status": "off", + "carType": "Awfar", + "created_at": "2025-12-03 13:51:49", + "updated_at": "2025-12-06 15:52:45", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000??_#I?@@?Z`??$B@" + }, + { + "driver_id": "0f4b45c3c06036be4c3a", + "latitude": "33.5079280", + "longitude": "36.2873820", + "heading": "0.00", + "speed": 0, + "distance": "0.00", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-10 09:00:12", + "updated_at": "2025-12-06 15:51:36", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000?\\??\u0003?@@ú???$B@" + }, + { + "driver_id": "d5cd48bb67b00bab52db", + "latitude": "33.4996680", + "longitude": "36.3050600", + "heading": "0.00", + "speed": 0, + "distance": "0.00", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-03 10:02:49", + "updated_at": "2025-12-06 15:43:42", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000?m?\u001e??@@???4\f'B@" + }, + { + "driver_id": "4b19912229b232f0056a", + "latitude": "36.1991730", + "longitude": "37.1400950", + "heading": "13.30", + "speed": 0.538, + "distance": "0.01", + "status": "off", + "carType": "Awfar", + "created_at": "2025-12-02 05:38:15", + "updated_at": "2025-12-06 15:41:41", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000??8?~\u0019B@??\t??B@" + }, + { + "driver_id": "6696baf35ae52a8bd3e9", + "latitude": "33.4848010", + "longitude": "36.3509100", + "heading": "0.00", + "speed": 0, + "distance": "0.00", + "status": "off", + "carType": "Awfar", + "created_at": "2025-12-06 13:29:42", + "updated_at": "2025-12-06 15:34:37", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000?\b??\r?@@p?n??,B@" + }, + { + "driver_id": "63a10b52d39cfe20c0db", + "latitude": "33.5269670", + "longitude": "36.2920890", + "heading": "0.00", + "speed": 0, + "distance": "5.41", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-28 00:31:44", + "updated_at": "2025-12-06 15:31:08", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000\u001e???s?@@?B\u001f,c%B@" + }, + { + "driver_id": "7ad04f1b04e096564da4", + "latitude": "33.5141750", + "longitude": "36.3144300", + "heading": "297.10", + "speed": 0, + "distance": "0.07", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-27 10:20:51", + "updated_at": "2025-12-06 15:26:12", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000ݵ?|??@@?p\u0003>?(B@" + }, + { + "driver_id": "0202738107f380a3cac0", + "latitude": "33.4978770", + "longitude": "36.2977390", + "heading": "0.00", + "speed": 0, + "distance": "0.09", + "status": "off", + "carType": "Awfar", + "created_at": "2025-12-03 11:28:17", + "updated_at": "2025-12-06 15:24:49", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000\u001e7?n??@@3??O\u001c&B@" + }, + { + "driver_id": "d78aeec5337332066f02", + "latitude": "34.7185040", + "longitude": "36.6935180", + "heading": "0.00", + "speed": 0, + "distance": "0.00", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-08 11:02:18", + "updated_at": "2025-12-06 15:20:03", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000?\u0005g??[A@???2?XB@" + }, + { + "driver_id": "ada5dbf7eb073fefa31d", + "latitude": "33.5379600", + "longitude": "36.2892280", + "heading": "0.00", + "speed": 0, + "distance": "1.73", + "status": "off", + "carType": "Awfar", + "created_at": "2025-12-06 13:18:40", + "updated_at": "2025-12-06 15:19:21", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u00000G????@@3?Pl\u0005%B@" + }, + { + "driver_id": "e924581d4f777fdb803e", + "latitude": "34.7018600", + "longitude": "36.6985030", + "heading": "127.30", + "speed": 3, + "distance": "20.34", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-30 09:50:54", + "updated_at": "2025-12-06 15:14:11", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000o\/i??YA@6?ڋhYB@" + }, + { + "driver_id": "a3d6653bd54205d51ee6", + "latitude": "33.5016480", + "longitude": "36.2406040", + "heading": "178.40", + "speed": 6.4, + "distance": "0.00", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-25 13:35:02", + "updated_at": "2025-12-06 15:11:47", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000J\rm\u00006?@@???\u001c?\u001eB@" + }, + { + "driver_id": "20e5135cf73b8d1828cb", + "latitude": "33.4286370", + "longitude": "36.3473400", + "heading": "0.00", + "speed": 0, + "distance": "0.00", + "status": "off", + "carType": "Awfar", + "created_at": "2025-12-03 12:34:37", + "updated_at": "2025-12-06 15:04:26", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000?mēݶ@@?K\u001a?u,B@" + }, + { + "driver_id": "f6aed5cb4ebe5a77a6d3", + "latitude": "33.4830680", + "longitude": "36.3003200", + "heading": "0.00", + "speed": 0, + "distance": "7.74", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-26 09:00:00", + "updated_at": "2025-12-06 15:02:25", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000@?\u0016,ս@@?*??p&B@" + }, + { + "driver_id": "6ccffd6e48962ad41edd", + "latitude": "33.5278130", + "longitude": "36.2854970", + "heading": "0.00", + "speed": 0, + "distance": "0.00", + "status": "off", + "carType": "Awfar", + "created_at": "2025-12-01 22:14:03", + "updated_at": "2025-12-06 15:00:53", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000??Z`??@@?\rk*?$B@" + }, + { + "driver_id": "8f0ab70fb73ec796a938", + "latitude": "36.2192540", + "longitude": "37.1650550", + "heading": "0.00", + "speed": 0, + "distance": "0.00", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-05 09:47:41", + "updated_at": "2025-12-06 14:56:27", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u00003?ۃ\u0010\u001cB@I??? ?B@" + }, + { + "driver_id": "6ceaa7d63c259040cc14", + "latitude": "33.5455790", + "longitude": "36.2140510", + "heading": "0.00", + "speed": 0, + "distance": "12.77", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-17 18:59:46", + "updated_at": "2025-12-06 14:48:38", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u000031]???@@?V?\u0005f\u001bB@" + }, + { + "driver_id": "a1f11b575b80f0be1e7e", + "latitude": "33.5264960", + "longitude": "36.3019040", + "heading": "7.90", + "speed": 60.6, + "distance": "57.52", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-18 12:08:30", + "updated_at": "2025-12-06 14:43:10", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000Ǽ?8d?@@\u000bDOʤ&B@" + }, + { + "driver_id": "3172970ea084cfea4817", + "latitude": "33.5435780", + "longitude": "36.3202010", + "heading": "3.00", + "speed": 27, + "distance": "35.41", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-16 08:53:17", + "updated_at": "2025-12-06 14:40:06", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000?i????@@???X?(B@" + }, + { + "driver_id": "869f6fad088fefade270", + "latitude": "33.5465510", + "longitude": "36.2225080", + "heading": "0.00", + "speed": 0, + "distance": "16.00", + "status": "off", + "carType": "Awfar", + "created_at": "2025-12-01 13:47:45", + "updated_at": "2025-12-06 14:21:29", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000ML\u0017b??@@??c${\u001cB@" + }, + { + "driver_id": "afdb9e58fdca8a01ed49", + "latitude": "34.7340710", + "longitude": "36.7219710", + "heading": "302.00", + "speed": 25.8, + "distance": "29.81", + "status": "off", + "carType": "Awfar", + "created_at": "2025-12-03 06:09:16", + "updated_at": "2025-12-06 14:20:50", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000???\t?]A@?Դ?i\\B@" + }, + { + "driver_id": "bceedcd3718004b64a07", + "latitude": "33.5029530", + "longitude": "36.2876120", + "heading": "0.00", + "speed": 0, + "distance": "0.20", + "status": "off", + "carType": "Awfar", + "created_at": "2025-12-06 12:10:37", + "updated_at": "2025-12-06 14:18:39", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000i6??`?@@??Rx?$B@" + }, + { + "driver_id": "a75c2de879c3c80bcb84", + "latitude": "33.5111420", + "longitude": "36.3180730", + "heading": "-1.00", + "speed": -3.6, + "distance": "0.00", + "status": "off", + "carType": "Awfar", + "created_at": "2025-12-06 11:13:49", + "updated_at": "2025-12-06 13:54:56", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000W??\u0019m?@@?^???(B@" + }, + { + "driver_id": "769e01db6b2e4b3d2872", + "latitude": "33.4962120", + "longitude": "36.2839430", + "heading": "0.00", + "speed": 0, + "distance": "0.00", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-26 09:11:33", + "updated_at": "2025-12-06 13:53:00", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000???߃?@@?v?>X$B@" + }, + { + "driver_id": "11135e8b2c60788a6fe8", + "latitude": "33.4998850", + "longitude": "36.2527350", + "heading": "229.00", + "speed": 46.9, + "distance": "0.00", + "status": "off", + "carType": "Awfar", + "created_at": "2025-12-01 10:53:43", + "updated_at": "2025-12-06 13:50:30", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000gaO;??@@??מY B@" + }, + { + "driver_id": "8f1e1ea47dd4ee41f3fd", + "latitude": "33.5357130", + "longitude": "36.3035520", + "heading": "318.90", + "speed": 0.5, + "distance": "0.00", + "status": "off", + "carType": "Awfar", + "created_at": "2025-12-01 05:26:33", + "updated_at": "2025-12-06 13:43:33", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000b?[>??@@UQ???&B@" + }, + { + "driver_id": "cc300dd0231c2b55c28b", + "latitude": "33.5187380", + "longitude": "36.2868920", + "heading": "0.00", + "speed": 0, + "distance": "3.53", + "status": "off", + "carType": "Awfar", + "created_at": "2025-12-03 12:22:54", + "updated_at": "2025-12-06 13:42:23", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000???\u0001f?@@????$B@" + }, + { + "driver_id": "461aa569110ff0282e3e", + "latitude": "35.3676860", + "longitude": "35.9218350", + "heading": "0.00", + "speed": 0, + "distance": "6.72", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-24 09:42:54", + "updated_at": "2025-12-06 13:39:42", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u00009??U\u0010?A@r?t???A@" + }, + { + "driver_id": "e6b3ff505a499aa7739c", + "latitude": "34.7456890", + "longitude": "36.7158430", + "heading": "95.00", + "speed": 27.4, + "distance": "501.28", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-28 16:13:38", + "updated_at": "2025-12-06 13:38:06", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000T???r_A@\u0007\tQ??[B@" + }, + { + "driver_id": "80b4b37bce4db865859b", + "latitude": "33.5165380", + "longitude": "36.2615480", + "heading": "0.00", + "speed": 0, + "distance": "1.68", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-24 19:12:39", + "updated_at": "2025-12-06 13:37:49", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000\u0014???\u001d?@@?*?gz!B@" + }, + { + "driver_id": "22d120e52d994fbbbc3f", + "latitude": "33.5287890", + "longitude": "36.2240300", + "heading": "124.00", + "speed": 15, + "distance": "22.77", + "status": "off", + "carType": "Awfar", + "created_at": "2025-12-03 14:53:20", + "updated_at": "2025-12-06 13:34:29", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000\u0006??[??@@T??\u0003?\u001cB@" + }, + { + "driver_id": "3bbb42ed075a8c891b01", + "latitude": "33.4838410", + "longitude": "36.3465840", + "heading": "0.00", + "speed": 0, + "distance": "0.10", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-30 09:02:49", + "updated_at": "2025-12-06 13:21:19", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000b?{??@@??P?\\,B@" + }, + { + "driver_id": "54d9474c84f795e5f9c5", + "latitude": "33.5266220", + "longitude": "36.2213170", + "heading": "-1.00", + "speed": 0, + "distance": "0.03", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-19 18:31:59", + "updated_at": "2025-12-06 13:21:09", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000T??Yh?@@@??\u001dT\u001cB@" + }, + { + "driver_id": "519b54fc365873063cc8", + "latitude": "33.4546560", + "longitude": "36.2456490", + "heading": "0.00", + "speed": 0, + "distance": "0.00", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-30 09:23:44", + "updated_at": "2025-12-06 13:11:37", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000\u0010w?*2?@@ƥ*mq\u001fB@" + }, + { + "driver_id": "69a5da822057ba5bc81e", + "latitude": "33.5026180", + "longitude": "36.2578850", + "heading": "0.00", + "speed": 0, + "distance": "2.14", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-26 12:02:29", + "updated_at": "2025-12-06 13:05:08", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000?0`?U?@@??,`\u0002!B@" + }, + { + "driver_id": "2602f255bfde6dec17b8", + "latitude": "33.5359650", + "longitude": "36.1989810", + "heading": "0.00", + "speed": 0, + "distance": "0.00", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-29 11:31:14", + "updated_at": "2025-12-06 12:57:37", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000{fI???@@@Û5x\u0019B@" + }, + { + "driver_id": "ce1e70fd4e686f2db861", + "latitude": "33.5218390", + "longitude": "36.2793810", + "heading": "164.90", + "speed": 0, + "distance": "0.00", + "status": "off", + "carType": "Awfar", + "created_at": "2025-12-03 18:51:40", + "updated_at": "2025-12-06 12:56:36", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000?cϞ??@@?\u000f???#B@" + }, + { + "driver_id": "16fc82579a23a763638a", + "latitude": "33.6323210", + "longitude": "36.3936830", + "heading": "0.00", + "speed": 0, + "distance": "0.00", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-20 17:36:51", + "updated_at": "2025-12-06 12:55:45", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000y?????@@??\\4d2B@" + }, + { + "driver_id": "d0cecd70c12511ec242f", + "latitude": "33.5868900", + "longitude": "36.3803240", + "heading": "127.30", + "speed": 0.92, + "distance": "44.01", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-30 08:56:51", + "updated_at": "2025-12-06 12:51:26", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000?,&6\u001f?@@$??t?0B@" + }, + { + "driver_id": "e0f047c3e4e817e69e6a", + "latitude": "33.5040770", + "longitude": "36.2928550", + "heading": "150.00", + "speed": 7.7, + "distance": "15.11", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-19 19:12:29", + "updated_at": "2025-12-06 12:35:37", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u00009?Z???@@,??E|%B@" + }, + { + "driver_id": "3cfa8c4cf49223ed2d95", + "latitude": "33.5383750", + "longitude": "36.3062370", + "heading": "4.00", + "speed": 52.7, + "distance": "21272.19", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-14 20:54:09", + "updated_at": "2025-12-06 12:31:50", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000???x??@@??%?2'B@" + }, + { + "driver_id": "09caa9bca6abbbe9cf22", + "latitude": "35.1362390", + "longitude": "36.7854230", + "heading": "314.00", + "speed": 12.5, + "distance": "0.00", + "status": "off", + "carType": "Awfar", + "created_at": "2025-12-01 10:09:38", + "updated_at": "2025-12-06 12:31:25", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000J??Gp?A@[C???dB@" + }, + { + "driver_id": "e64415f4b22edf26cbd9", + "latitude": "33.5124480", + "longitude": "36.3191180", + "heading": "0.00", + "speed": 0, + "distance": "17.32", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-25 13:00:14", + "updated_at": "2025-12-06 12:23:42", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000Gsd??@@P????(B@" + }, + { + "driver_id": "5031bb013d7b6fab3da0", + "latitude": "33.5326520", + "longitude": "36.2174980", + "heading": "0.00", + "speed": 0.2, + "distance": "5.29", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-15 14:32:46", + "updated_at": "2025-12-06 12:17:15", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000\u0012\u0013??-?@@\u0003yv??\u001bB@" + }, + { + "driver_id": "f9551e01dd7b5d62e743", + "latitude": "33.5073350", + "longitude": "36.2885500", + "heading": "0.00", + "speed": 0, + "distance": "0.01", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-20 14:00:50", + "updated_at": "2025-12-06 12:15:19", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000ގpZ??@@b??4?$B@" + }, + { + "driver_id": "f48c50ef7bb6f55e710c", + "latitude": "33.4351750", + "longitude": "36.2391220", + "heading": "211.00", + "speed": 0, + "distance": "0.16", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-12 19:15:42", + "updated_at": "2025-12-06 12:13:36", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000??|г?@@?ฌ?\u001eB@" + }, + { + "driver_id": "1ef1491da9d9c1b6dd9f", + "latitude": "33.5402140", + "longitude": "36.1797160", + "heading": "0.00", + "speed": 0, + "distance": "0.00", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-19 08:46:30", + "updated_at": "2025-12-06 12:13:23", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000?k{?%?@@?H\u0013?\u0000\u0017B@" + }, + { + "driver_id": "b246ef83c22f759dfb6e", + "latitude": "33.4354960", + "longitude": "36.2399110", + "heading": "0.00", + "speed": 0.1, + "distance": "0.00", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-27 09:29:20", + "updated_at": "2025-12-06 12:07:48", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000??:U??@@?yUg?\u001eB@" + }, + { + "driver_id": "f8a7b58a2489a9c992cc", + "latitude": "33.5658320", + "longitude": "36.3244280", + "heading": "0.00", + "speed": 0, + "distance": "0.00", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-07 13:48:38", + "updated_at": "2025-12-06 11:58:23", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000???.m?@@\u000e?Pۆ)B@" + }, + { + "driver_id": "04a7eb67f611ec87acfe", + "latitude": "35.5163060", + "longitude": "35.7750510", + "heading": "282.00", + "speed": 0, + "distance": "0.00", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-24 09:26:11", + "updated_at": "2025-12-06 11:49:05", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000B]?P\u0016?A@??\u0004?4?A@" + }, + { + "driver_id": "875bd08c75cf466a4c4c", + "latitude": "33.5098520", + "longitude": "36.2863000", + "heading": "0.00", + "speed": 0, + "distance": "41.95", + "status": "off", + "carType": "Awfar", + "created_at": "2025-12-04 14:00:29", + "updated_at": "2025-12-06 11:48:08", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000m??B?@@\"lxz?$B@" + }, + { + "driver_id": "f9f03f7a867713804576", + "latitude": "33.5277370", + "longitude": "36.2062880", + "heading": "0.00", + "speed": 0, + "distance": "0.00", + "status": "off", + "carType": "Awfar", + "created_at": "2025-12-03 08:35:39", + "updated_at": "2025-12-06 11:43:49", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000?????@@T?*?g\u001aB@" + }, + { + "driver_id": "634342629789d0c678ff", + "latitude": "33.5353010", + "longitude": "36.1983160", + "heading": "208.00", + "speed": 41.3, + "distance": "2.60", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-15 14:35:04", + "updated_at": "2025-12-06 11:43:22", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000\u000fB@???@@\u0003#\/kb\u0019B@" + }, + { + "driver_id": "205d370a2776373bb4dc", + "latitude": "33.4983150", + "longitude": "36.3308480", + "heading": "1.60", + "speed": 4.3, + "distance": "14.55", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-15 13:41:13", + "updated_at": "2025-12-06 11:39:37", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000?\r2?ȿ@@8?-:Y*B@" + }, + { + "driver_id": "2a9bd4e90d3c89ac60cc", + "latitude": "34.7285380", + "longitude": "36.7072250", + "heading": "0.00", + "speed": 0, + "distance": "0.00", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-24 19:59:31", + "updated_at": "2025-12-06 11:39:03", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000V?@]A@??JY?ZB@" + }, + { + "driver_id": "809cd3608cffabea68f7", + "latitude": "33.5010010", + "longitude": "36.2788290", + "heading": "0.00", + "speed": 0, + "distance": "0.00", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-16 08:41:10", + "updated_at": "2025-12-06 11:31:07", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000?!?? ?@@?\u0016.??#B@" + }, + { + "driver_id": "54e82142ff9fe6c0e5ce", + "latitude": "33.4952710", + "longitude": "36.2747560", + "heading": "0.00", + "speed": 0, + "distance": "0.00", + "status": "off", + "carType": "Awfar", + "created_at": "2025-12-06 09:30:22", + "updated_at": "2025-12-06 11:30:22", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000 ?E\ne?@@?0a4+#B@" + }, + { + "driver_id": "88e8197a235be9c4c06e", + "latitude": "33.4841950", + "longitude": "36.3428130", + "heading": "105.40", + "speed": 4.4, + "distance": "0.00", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-10 08:30:06", + "updated_at": "2025-12-06 11:29:36", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000??\f\u001a??@@c??K?+B@" + }, + { + "driver_id": "d616715be4f7551f0333", + "latitude": "33.5463820", + "longitude": "36.3087830", + "heading": "244.30", + "speed": 22.3, + "distance": "0.00", + "status": "off", + "carType": "Awfar", + "created_at": "2025-12-01 15:01:29", + "updated_at": "2025-12-06 11:20:27", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000??j???@@?G?3?'B@" + }, + { + "driver_id": "c2e386a7c36b121a9b57", + "latitude": "33.5518270", + "longitude": "36.3225970", + "heading": "180.00", + "speed": 0.4, + "distance": "0.00", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-22 12:29:11", + "updated_at": "2025-12-06 11:09:52", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000`\u0006cD??@@?d??J)B@" + }, + { + "driver_id": "b0fb46530b85a1ddb996", + "latitude": "34.8766770", + "longitude": "35.8805160", + "heading": "14.40", + "speed": 0, + "distance": "0.05", + "status": "off", + "carType": "Awfar", + "created_at": "2025-12-04 12:30:37", + "updated_at": "2025-12-06 10:57:11", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000?\u0013??6pA@h͏???A@" + }, + { + "driver_id": "49a2995fb40fe3168828", + "latitude": "33.5139250", + "longitude": "36.3148530", + "heading": "0.00", + "speed": 0, + "distance": "0.00", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-25 11:52:19", + "updated_at": "2025-12-06 10:49:07", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000d?]K??@@\u0014\u0006e\u001aM(B@" + }, + { + "driver_id": "bdc893624e079642a002", + "latitude": "33.4874890", + "longitude": "36.3369990", + "heading": "0.00", + "speed": 0, + "distance": "0.00", + "status": "off", + "carType": "Awfar", + "created_at": "2025-12-06 08:40:18", + "updated_at": "2025-12-06 10:40:18", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000r\u0014 \nf?@@q??\"+B@" + }, + { + "driver_id": "24516a40209afe070a4b", + "latitude": "33.5276000", + "longitude": "36.3509670", + "heading": "70.00", + "speed": 21.2, + "distance": "0.03", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-13 08:33:45", + "updated_at": "2025-12-06 10:36:41", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000O??e??@@?|?|?,B@" + }, + { + "driver_id": "f9a261e4ac0fe3aad099", + "latitude": "33.4973500", + "longitude": "36.2730920", + "heading": "0.00", + "speed": 0, + "distance": "0.01", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-03 22:38:34", + "updated_at": "2025-12-06 10:34:04", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u00002U0*??@@Mf???\"B@" + }, + { + "driver_id": "a8bc77b5f10f23648ecc", + "latitude": "33.4855250", + "longitude": "36.3428980", + "heading": "2.00", + "speed": 13.4, + "distance": "2.14", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-29 09:39:32", + "updated_at": "2025-12-06 10:21:24", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000?1?%?@@???\u0014?+B@" + }, + { + "driver_id": "683caef3292565fba5b8", + "latitude": "33.4654630", + "longitude": "36.2851940", + "heading": "0.00", + "speed": 0, + "distance": "0.00", + "status": "off", + "carType": "Awfar", + "created_at": "2025-12-01 13:40:05", + "updated_at": "2025-12-06 10:20:16", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000???J??@@?????\u001e\u001eB@q?Ws??B@" + }, + { + "driver_id": "cb403c0e6be9db772423", + "latitude": "33.5052420", + "longitude": "36.3097830", + "heading": "0.00", + "speed": 0, + "distance": "0.00", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-11 08:12:30", + "updated_at": "2025-12-06 09:45:22", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000gH\u0015ū?@@??&??'B@" + }, + { + "driver_id": "96198d595773ddc3034e", + "latitude": "33.5283320", + "longitude": "36.2121890", + "heading": "136.80", + "speed": 24.4, + "distance": "0.00", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-23 17:22:43", + "updated_at": "2025-12-06 09:40:12", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000\u0013?\nb??@@\u0015?W\u0002)\u001bB@" + }, + { + "driver_id": "b7c28b0afafd307513f3", + "latitude": "33.4687740", + "longitude": "36.3372710", + "heading": "258.00", + "speed": 7.2, + "distance": "0.00", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-29 09:15:05", + "updated_at": "2025-12-06 09:26:21", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000??S?\u0000?@@?q5?++B@" + }, + { + "driver_id": "1a1c5eb405a4932015cd", + "latitude": "33.4873130", + "longitude": "36.3786030", + "heading": "0.00", + "speed": 0, + "distance": "0.00", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-19 16:49:05", + "updated_at": "2025-12-06 09:13:37", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u00004??E`?@@p?'\u0010v0B@" + }, + { + "driver_id": "ef5c7227c393fedd81c3", + "latitude": "33.5025770", + "longitude": "36.2873270", + "heading": "138.00", + "speed": 22.4, + "distance": "24.75", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-30 19:17:29", + "updated_at": "2025-12-06 09:08:46", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000d\\qqT?@@? ?!?$B@" + }, + { + "driver_id": "788db828696cecb70787", + "latitude": "35.5455790", + "longitude": "35.8088660", + "heading": "0.00", + "speed": 0, + "distance": "0.00", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-30 14:00:23", + "updated_at": "2025-12-06 09:03:12", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u000031]???A@Ul???A@" + }, + { + "driver_id": "199b18f52da3c1976bbc", + "latitude": "33.5234950", + "longitude": "36.2921090", + "heading": "0.00", + "speed": 0, + "distance": "0.00", + "status": "off", + "carType": "Awfar", + "created_at": "2025-12-02 12:18:23", + "updated_at": "2025-12-06 09:00:12", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000LOX?\u0001?@@\u0003???c%B@" + }, + { + "driver_id": "1e62089fb1ae55a4cbc2", + "latitude": "33.4844130", + "longitude": "36.3191870", + "heading": "0.00", + "speed": 0, + "distance": "0.00", + "status": "off", + "carType": "Awfar", + "created_at": "2025-12-03 22:11:51", + "updated_at": "2025-12-06 08:29:22", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000?`?>\u0001?@@x'?\u001e?(B@" + }, + { + "driver_id": "a6c1ca64ab82c20b30ba", + "latitude": "33.5233800", + "longitude": "36.2747100", + "heading": "0.00", + "speed": 0, + "distance": "0.00", + "status": "off", + "carType": "Awfar", + "created_at": "2025-12-04 08:56:54", + "updated_at": "2025-12-06 08:18:26", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000???\u001d??@@,?)#B@" + }, + { + "driver_id": "2c5a1d31892bcf70ebbf", + "latitude": "33.5066950", + "longitude": "36.2922280", + "heading": "31.90", + "speed": 0, + "distance": "0.08", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-27 09:30:25", + "updated_at": "2025-12-06 07:58:39", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000?\u0005?a??@@?|#?g%B@" + }, + { + "driver_id": "51bfc5d4de715cf4f9a7", + "latitude": "36.0061480", + "longitude": "36.6713860", + "heading": "0.00", + "speed": 0, + "distance": "0.00", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-20 07:17:15", + "updated_at": "2025-12-06 07:52:44", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000?w)u?\u0000B@\u0002???UB@" + }, + { + "driver_id": "cffe9f8613f1c3c484fa", + "latitude": "33.7235390", + "longitude": "36.0925310", + "heading": "0.00", + "speed": 0, + "distance": "0.00", + "status": "off", + "carType": "Awfar", + "created_at": "2025-12-03 15:23:54", + "updated_at": "2025-12-06 07:46:11", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000?0\u000b??@@?nI\u000e?\u000bB@" + }, + { + "driver_id": "3b319766c994742595c9", + "latitude": "36.1961690", + "longitude": "37.0912070", + "heading": "29.00", + "speed": 2, + "distance": "0.00", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-08 13:20:23", + "updated_at": "2025-12-06 07:45:37", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000???\u0010\u001c\u0019B@H\u0015ū??B@" + }, + { + "driver_id": "986bf7b2242410647d05", + "latitude": "33.5260400", + "longitude": "36.2772690", + "heading": "0.00", + "speed": 0, + "distance": "0.00", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-22 14:32:00", + "updated_at": "2025-12-06 07:17:30", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000?1ZGU?@@??}#B@" + }, + { + "driver_id": "1d72d681741d8d0cf1b6", + "latitude": "33.6543250", + "longitude": "35.9779380", + "heading": "144.80", + "speed": 15.6, + "distance": "0.00", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-10 03:20:00", + "updated_at": "2025-12-06 06:56:01", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000D?????@@\u0001‡\u0012-?A@" + }, + { + "driver_id": "4d4af93db0cba269984c", + "latitude": "36.2211310", + "longitude": "37.1474650", + "heading": "255.00", + "speed": 0, + "distance": "0.01", + "status": "off", + "carType": "Awfar", + "created_at": "2025-12-03 13:17:41", + "updated_at": "2025-12-06 05:55:44", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000ސF\u0005N\u001cB@?&\u0014\"??B@" + }, + { + "driver_id": "6db0b191c9d25bf74dc4", + "latitude": "33.4610260", + "longitude": "36.2287420", + "heading": "0.00", + "speed": 0, + "distance": "0.00", + "status": "off", + "carType": "Awfar", + "created_at": "2025-12-04 04:55:03", + "updated_at": "2025-12-06 05:50:03", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000?Md?\u0002?@@^??jG\u001dB@" + }, + { + "driver_id": "0ebfa5485162cbaa643d", + "latitude": "36.1969530", + "longitude": "37.1321150", + "heading": "68.60", + "speed": 1.2, + "distance": "0.00", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-30 12:53:17", + "updated_at": "2025-12-06 05:33:43", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000???5\u0019B@?'?$?B@" + }, + { + "driver_id": "aec6f1335b72b5976dea", + "latitude": "33.5183030", + "longitude": "36.2804580", + "heading": "0.00", + "speed": 0, + "distance": "3.46", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-25 07:54:40", + "updated_at": "2025-12-06 05:01:28", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000?5??W?@@g?8\f?#B@" + }, + { + "driver_id": "a93eb0399131ac83e9c2", + "latitude": "33.5056080", + "longitude": "36.2904060", + "heading": "223.60", + "speed": 0.575, + "distance": "0.02", + "status": "off", + "carType": "Awfar", + "created_at": "2025-12-01 10:57:24", + "updated_at": "2025-12-06 04:43:21", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000ILP÷?@@?G\u0018\u0006,%B@" + }, + { + "driver_id": "bf826b8564ad185b2906", + "latitude": "33.5011990", + "longitude": "36.3021790", + "heading": "180.80", + "speed": 21.2, + "distance": "0.21", + "status": "off", + "carType": "Awfar", + "created_at": "2025-12-03 18:17:12", + "updated_at": "2025-12-06 03:37:04", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000???I'?@@?D-ͭ&B@" + }, + { + "driver_id": "48b8744490183e041556", + "latitude": "33.5149600", + "longitude": "36.2768390", + "heading": "195.00", + "speed": 27.8, + "distance": "102.97", + "status": "off", + "carType": "Awfar", + "created_at": "2025-12-01 10:05:58", + "updated_at": "2025-12-06 03:30:41", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000?_?5??@@??uo#B@" + }, + { + "driver_id": "4e6aefc595c7d875644e", + "latitude": "33.4888940", + "longitude": "36.3428690", + "heading": "0.00", + "speed": 0, + "distance": "0.00", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-16 12:07:12", + "updated_at": "2025-12-06 03:02:56", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000??\u001e\u0014??@@??!?+B@" + }, + { + "driver_id": "bb28a52baae8faae9a2c", + "latitude": "36.1800800", + "longitude": "37.1400510", + "heading": "164.90", + "speed": 0, + "distance": "0.19", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-25 19:46:42", + "updated_at": "2025-12-06 02:20:44", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000?T??\f\u0017B@?b?0?B@" + }, + { + "driver_id": "0d4035115f8cc8c2c9d7", + "latitude": "33.5360000", + "longitude": "36.2937050", + "heading": "0.00", + "speed": 0, + "distance": "0.00", + "status": "off", + "carType": "Awfar", + "created_at": "2025-12-05 23:59:33", + "updated_at": "2025-12-06 02:03:32", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000?S㥛?@@??\u001c ?%B@" + }, + { + "driver_id": "f2b4f5ac61d23cbf3d38", + "latitude": "33.5267130", + "longitude": "36.3137680", + "heading": "346.00", + "speed": 15.3, + "distance": "9.02", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-19 00:44:07", + "updated_at": "2025-12-06 01:38:49", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000d??Tk?@@\u0003D??)(B@" + }, + { + "driver_id": "1c781afb6ae99230e1e5", + "latitude": "33.5216740", + "longitude": "36.2872530", + "heading": "255.20", + "speed": 24.4, + "distance": "13.60", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-30 18:05:20", + "updated_at": "2025-12-06 01:28:34", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u00005??6??@@?Vд?$B@" + }, + { + "driver_id": "c62c40827f3a6f0e3e2c", + "latitude": "33.4839060", + "longitude": "36.3818140", + "heading": "289.00", + "speed": 1.073, + "distance": "0.01", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-30 05:41:11", + "updated_at": "2025-12-06 01:22:10", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000I+???@@Փ?G?0B@" + }, + { + "driver_id": "a79ea47cc38b172e20a8", + "latitude": "33.5598300", + "longitude": "36.3682900", + "heading": "0.00", + "speed": 0, + "distance": "0.00", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-27 10:10:57", + "updated_at": "2025-12-06 01:13:04", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000?j???@@иp $\/B@" + }, + { + "driver_id": "88329d48f7b1e51723a4", + "latitude": "33.4859520", + "longitude": "36.3514440", + "heading": "0.00", + "speed": 0, + "distance": "31.31", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-05 00:50:02", + "updated_at": "2025-12-06 00:54:07", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000??լ3?@@\u000e0?\u001d?,B@" + }, + { + "driver_id": "243b2745973a144d489a", + "latitude": "33.5186180", + "longitude": "36.3104020", + "heading": "0.00", + "speed": 0, + "distance": "0.00", + "status": "off", + "carType": "Awfar", + "created_at": "2025-12-04 08:25:30", + "updated_at": "2025-12-06 00:46:28", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000??\u001a\u0013b?@@wN?@?'B@" + }, + { + "driver_id": "1731e3f1297874acbe76", + "latitude": "33.4325640", + "longitude": "36.3557340", + "heading": "0.00", + "speed": 0, + "distance": "24.06", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-30 13:25:37", + "updated_at": "2025-12-06 00:45:33", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000???A^?@@?\t\u0014??-B@" + }, + { + "driver_id": "994cc5f3d68c18fee4e0", + "latitude": "33.5657070", + "longitude": "36.3971780", + "heading": "0.00", + "speed": 0, + "distance": "0.10", + "status": "off", + "carType": "Awfar", + "created_at": "2025-12-05 22:27:26", + "updated_at": "2025-12-06 00:31:24", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000$\u000fD\u0016i?@@hX???2B@" + }, + { + "driver_id": "c9cae940932483b6d056", + "latitude": "33.5107190", + "longitude": "36.3184140", + "heading": "0.00", + "speed": 0.1, + "distance": "0.00", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-29 09:49:27", + "updated_at": "2025-12-06 00:12:48", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000\u00119}=_?@@UK:??(B@" + }, + { + "driver_id": "94f7f767e6619396cf21", + "latitude": "33.4664340", + "longitude": "36.3312670", + "heading": "0.00", + "speed": 0, + "distance": "0.16", + "status": "off", + "carType": "Awfar", + "created_at": "2025-12-04 10:16:24", + "updated_at": "2025-12-06 00:09:20", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000\t??\u001b??@@\u0003??@@??\u0013??*B@" + }, + { + "driver_id": "9b5df1af05117f04323e", + "latitude": "33.5050840", + "longitude": "36.2458420", + "heading": "0.00", + "speed": 0, + "distance": "0.00", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-25 11:57:52", + "updated_at": "2025-12-06 20:00:44", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000?ݮ???@@??*?w\u001fB@" + }, + { + "driver_id": "6fa45ad3119ea23b7c0d", + "latitude": "33.4809640", + "longitude": "36.2965950", + "heading": "52.00", + "speed": 0.69, + "distance": "8.54", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-17 10:18:31", + "updated_at": "2025-12-06 20:00:44", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000?Fu:??@@\u001d?0??%B@" + }, + { + "driver_id": "b4eb6f4a7b6a99aa7d5c", + "latitude": "34.7340120", + "longitude": "36.7211340", + "heading": "0.00", + "speed": 0, + "distance": "0.00", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-30 11:26:20", + "updated_at": "2025-12-06 20:00:31", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000?o?\u001a?]A@O\u0004q\u001eN\\B@" + }, + { + "driver_id": "ef660f2e6a9ce671488a", + "latitude": "33.5101700", + "longitude": "36.2788840", + "heading": "0.00", + "speed": 0, + "distance": "0.01", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-23 18:47:46", + "updated_at": "2025-12-06 20:00:16", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000>?$@M?@@W??x?#B@" + }, + { + "driver_id": "fd3c6a020f0df4d96c51", + "latitude": "33.5008860", + "longitude": "36.3052850", + "heading": "242.70", + "speed": 31.9, + "distance": "83.80", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-23 20:21:30", + "updated_at": "2025-12-06 20:00:16", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000\u001b?N\b\u001d?@@?z1?\u0013'B@" + }, + { + "driver_id": "6398a0b9f06aed86d727", + "latitude": "33.5692630", + "longitude": "36.2318970", + "heading": "0.00", + "speed": 0, + "distance": "0.00", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-26 19:01:22", + "updated_at": "2025-12-06 19:59:34", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000S?'???@@\/?\u0007ͮ\u001dB@" + }, + { + "driver_id": "a83d509aa7dd136b453d", + "latitude": "33.5320980", + "longitude": "36.3610560", + "heading": "66.00", + "speed": 29.7, + "distance": "43.93", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-22 12:10:02", + "updated_at": "2025-12-06 19:59:24", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000-\"??\u001b?@@%\u0003@\u00157.B@" + }, + { + "driver_id": "e8ecdfaf9c7f23e60fb5", + "latitude": "33.5364310", + "longitude": "36.3032720", + "heading": "0.00", + "speed": 0, + "distance": "0.00", + "status": "off", + "carType": "Awfar", + "created_at": "2025-12-06 13:44:37", + "updated_at": "2025-12-06 19:58:59", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000??`ũ?@@q???&B@" + }, + { + "driver_id": "d689f7a02e1c41ec1ddb", + "latitude": "33.4984560", + "longitude": "36.2508200", + "heading": "59.00", + "speed": 24, + "distance": "38.31", + "status": "off", + "carType": "Awfar", + "created_at": "2025-12-04 10:33:17", + "updated_at": "2025-12-06 19:58:50", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000[??gͿ@@c???\u001a B@" + }, + { + "driver_id": "1ef563908f031c999ac3", + "latitude": "33.6936040", + "longitude": "36.3755020", + "heading": "0.00", + "speed": 0, + "distance": "215.89", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-07 14:54:23", + "updated_at": "2025-12-06 19:58:44", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000?\/\u0010\u0004??@@??\u0014s\u00100B@" + }, + { + "driver_id": "3c704fe7aa1f129686c3", + "latitude": "35.1308330", + "longitude": "36.7544440", + "heading": "245.10", + "speed": 16.3, + "distance": "5.18", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-22 10:47:19", + "updated_at": "2025-12-06 19:58:13", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000i\u001e?\"??A@?T???`B@" + }, + { + "driver_id": "605bc5d78adf0cd92157", + "latitude": "33.4218050", + "longitude": "36.1466830", + "heading": "0.00", + "speed": 0, + "distance": "9.34", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-29 08:36:07", + "updated_at": "2025-12-06 19:57:44", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000\u0007%̴??@@??\/??\u0012B@" + }, + { + "driver_id": "5eb29c514f0968d5a02a", + "latitude": "36.1995410", + "longitude": "37.1369350", + "heading": "0.00", + "speed": 0, + "distance": "0.00", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-30 13:29:40", + "updated_at": "2025-12-06 19:57:39", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000\u0007?:??\u0019B@?V\t\u0016??B@" + }, + { + "driver_id": "7c90a80341e683a29789", + "latitude": "33.5341370", + "longitude": "36.3026020", + "heading": "90.00", + "speed": 15.6, + "distance": "2.49", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-26 12:19:11", + "updated_at": "2025-12-06 19:57:08", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000?J?^?@@#ڎ??&B@" + }, + { + "driver_id": "65965c104f9e37aba687", + "latitude": "33.4849120", + "longitude": "36.2959550", + "heading": "0.00", + "speed": 0, + "distance": "0.00", + "status": "off", + "carType": "Awfar", + "created_at": "2025-12-05 11:53:07", + "updated_at": "2025-12-06 19:56:35", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000\u000f???\u0011?@@9\u000b{??%B@" + }, + { + "driver_id": "8aab8ff92c2f64fe6a41", + "latitude": "33.5360260", + "longitude": "36.3058800", + "heading": "29.00", + "speed": 28.4, + "distance": "95.89", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-16 17:48:31", + "updated_at": "2025-12-06 19:50:52", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000!????@@\u0010@j\u0013''B@" + }, + { + "driver_id": "583151e51dc980730494", + "latitude": "33.5148010", + "longitude": "36.2914550", + "heading": "0.00", + "speed": 0, + "distance": "0.00", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-17 11:24:44", + "updated_at": "2025-12-06 19:48:47", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000[y????@@???eN%B@" + }, + { + "driver_id": "44bd789caf01f3ac6053", + "latitude": "33.5596130", + "longitude": "36.3239080", + "heading": "0.00", + "speed": 0, + "distance": "0.00", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-27 10:12:58", + "updated_at": "2025-12-06 19:46:36", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000N?\u0016f??@@?t=?u)B@" + }, + { + "driver_id": "4738a3b984b40929552a", + "latitude": "33.5201560", + "longitude": "36.3098630", + "heading": "278.00", + "speed": 24.5, + "distance": "48.95", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-22 14:20:27", + "updated_at": "2025-12-06 19:46:20", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000?h?x??@@Ǟ=??'B@" + }, + { + "driver_id": "b1b69ecaacdd786ed6fb", + "latitude": "33.5171960", + "longitude": "36.2904250", + "heading": "353.00", + "speed": 0.6, + "distance": "0.00", + "status": "off", + "carType": "Awfar", + "created_at": "2025-12-02 17:10:39", + "updated_at": "2025-12-06 19:42:52", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000?πz3?@@lxz?,%B@" + }, + { + "driver_id": "1bdab3efe5ca91c59db7", + "latitude": "33.5528590", + "longitude": "36.3233590", + "heading": "42.00", + "speed": 10.7, + "distance": "93.94", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-25 07:31:15", + "updated_at": "2025-12-06 19:41:52", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000N&n\u0015??@@\u0003???c)B@" + }, + { + "driver_id": "2a2e331de0868a164b0c", + "latitude": "36.2075040", + "longitude": "37.1658510", + "heading": "172.00", + "speed": 19.4, + "distance": "26.69", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-15 09:40:03", + "updated_at": "2025-12-06 19:40:46", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000\u0004?}?\u001aB@$?\u0006?:?B@" + }, + { + "driver_id": "ca60f0f65d7d6de23e5c", + "latitude": "36.2023130", + "longitude": "37.1126720", + "heading": "346.00", + "speed": 19.9, + "distance": "12.31", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-15 09:36:34", + "updated_at": "2025-12-06 19:35:05", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000\u001fGsd?\u0019B@d?=\tl?B@" + }, + { + "driver_id": "eeca8786bec7ff82ab91", + "latitude": "33.5377190", + "longitude": "36.2971080", + "heading": "0.00", + "speed": 0, + "distance": "4.14", + "status": "off", + "carType": "Awfar", + "created_at": "2025-12-06 14:41:59", + "updated_at": "2025-12-06 19:34:24", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000\u000b?????@@????\u0007&B@" + }, + { + "driver_id": "ab180e356874c1d98850", + "latitude": "33.4844750", + "longitude": "36.3151920", + "heading": "49.00", + "speed": 1.8, + "distance": "0.00", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-04 08:52:39", + "updated_at": "2025-12-06 19:34:23", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000d]?F\u0003?@@??!6X(B@" + }, + { + "driver_id": "9cbf649351a6e59c3944", + "latitude": "33.5337870", + "longitude": "36.2968840", + "heading": "69.50", + "speed": 6.7, + "distance": "101.48", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-17 03:45:03", + "updated_at": "2025-12-06 19:33:56", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000?\u0003?!S?@@SZK\u0000&B@" + }, + { + "driver_id": "bd648f8f81d7afde9c6f", + "latitude": "33.5848520", + "longitude": "36.3656790", + "heading": "349.60", + "speed": 21.7, + "distance": "106.04", + "status": "off", + "carType": "Awfar", + "created_at": "2025-12-03 09:54:13", + "updated_at": "2025-12-06 19:29:37", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000\u0006?*n??@@??ȑ?.B@" + }, + { + "driver_id": "53048279340f0c0930cb", + "latitude": "33.5511830", + "longitude": "36.2117810", + "heading": "38.20", + "speed": 19.5, + "distance": "78.98", + "status": "off", + "carType": "Awfar", + "created_at": "2025-12-05 12:04:51", + "updated_at": "2025-12-06 19:27:31", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000;?\u001f*??@@\u0004uʣ\u001b\u001bB@" + }, + { + "driver_id": "74d40382580cc085d107", + "latitude": "33.4199890", + "longitude": "36.3538050", + "heading": "85.30", + "speed": 1.9729999999999999, + "distance": "3.17", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-22 10:13:42", + "updated_at": "2025-12-06 19:27:06", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000\u0002?\u00153µ@@?\u0014t{I-B@" + }, + { + "driver_id": "5af8271bfd5b5bd7033c", + "latitude": "33.4847310", + "longitude": "36.3514880", + "heading": "0.00", + "speed": 0, + "distance": "0.00", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-28 17:44:48", + "updated_at": "2025-12-06 19:26:51", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000?-X?\u000b?@@?w\f??,B@" + }, + { + "driver_id": "08ec60fec0db11ab065e", + "latitude": "36.2149150", + "longitude": "37.1586210", + "heading": "0.00", + "speed": 0, + "distance": "0.01", + "status": "off", + "carType": "Awfar", + "created_at": "2025-12-03 12:14:06", + "updated_at": "2025-12-06 19:26:29", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000?5?U?\u001bB@??c?M?B@" + }, + { + "driver_id": "e864c3bbe2fa7179a1ba", + "latitude": "35.1444440", + "longitude": "36.7716100", + "heading": "0.00", + "speed": 0, + "distance": "0.00", + "status": "off", + "carType": "Awfar", + "created_at": "2025-12-05 22:59:42", + "updated_at": "2025-12-06 19:19:38", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000=\r\u0018$}?A@\u001f??\u001d?bB@" + }, + { + "driver_id": "eed6cf591bc0c14a70fc", + "latitude": "36.2072480", + "longitude": "37.1069370", + "heading": "0.00", + "speed": 0, + "distance": "0.00", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-19 10:01:07", + "updated_at": "2025-12-06 19:18:55", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000?\u0014;\u001a?\u001aB@?ݒ\u001c??B@" + }, + { + "driver_id": "5bfc4ab464d369b8b251", + "latitude": "33.4989350", + "longitude": "36.2460500", + "heading": "296.00", + "speed": 11.8, + "distance": "76.08", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-15 10:05:28", + "updated_at": "2025-12-06 19:18:41", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u00006?!\u001aݿ@@$???~\u001fB@" + }, + { + "driver_id": "b19cea00f537006cba32", + "latitude": "33.5442600", + "longitude": "36.1928100", + "heading": "301.00", + "speed": 38.2, + "distance": "82.36", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-23 08:42:36", + "updated_at": "2025-12-06 19:15:24", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000?B?O??@@?+???\u0018B@" + }, + { + "driver_id": "b984a7ae6a1198aaf1b8", + "latitude": "33.5498130", + "longitude": "36.3212150", + "heading": "0.00", + "speed": 0, + "distance": "0.00", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-10 21:05:44", + "updated_at": "2025-12-06 19:14:21", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u00004??E`?@@\t???\u001d)B@" + }, + { + "driver_id": "9cc5950f6b29f5a031fb", + "latitude": "34.7082120", + "longitude": "36.7076300", + "heading": "292.70", + "speed": 0.898, + "distance": "0.01", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-25 16:22:23", + "updated_at": "2025-12-06 19:06:03", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000@Qٰ?ZA@?խ??ZB@" + }, + { + "driver_id": "7c76ba913e048f23f843", + "latitude": "33.5371720", + "longitude": "36.2412550", + "heading": "321.00", + "speed": 12, + "distance": "26.10", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-09 09:07:02", + "updated_at": "2025-12-06 19:03:22", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000?)V\r??@@??q?\u001eB@" + }, + { + "driver_id": "645f409b0636f6fa1252", + "latitude": "33.5108220", + "longitude": "36.2754120", + "heading": "277.00", + "speed": 33.9, + "distance": "3.99", + "status": "off", + "carType": "Awfar", + "created_at": "2025-12-02 21:45:03", + "updated_at": "2025-12-06 19:02:33", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000?\t??b?@@?vN?@#B@" + }, + { + "driver_id": "45889ade20db80bbc087", + "latitude": "33.4458810", + "longitude": "36.0830550", + "heading": "0.00", + "speed": 0, + "distance": "124.42", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-08 05:10:11", + "updated_at": "2025-12-06 19:00:44", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u00002t?\u0012?@@xb֋?\nB@" + }, + { + "driver_id": "81c3995aceca18b97541", + "latitude": "33.5189400", + "longitude": "36.3232270", + "heading": "0.00", + "speed": 0, + "distance": "0.00", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-22 10:21:40", + "updated_at": "2025-12-06 19:00:15", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000\nK(B@" + }, + { + "driver_id": "c335dc9138960670f6dc", + "latitude": "34.7423480", + "longitude": "36.7161970", + "heading": "0.00", + "speed": 0, + "distance": "0.00", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-19 08:58:16", + "updated_at": "2025-12-06 18:32:28", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000! _B\u0005_A@%??W?[B@" + }, + { + "driver_id": "f5ca5c9eabc931536e08", + "latitude": "36.2161800", + "longitude": "37.0996050", + "heading": "0.00", + "speed": 0, + "distance": "0.00", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-30 10:46:58", + "updated_at": "2025-12-06 18:27:20", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000O\u0006Gɫ\u001bB@P?Lۿ?B@" + }, + { + "driver_id": "126face48d0c1fca88d1", + "latitude": "34.7236770", + "longitude": "36.7016560", + "heading": "0.00", + "speed": 0, + "distance": "0.00", + "status": "off", + "carType": "Awfar", + "created_at": "2025-12-02 14:22:48", + "updated_at": "2025-12-06 18:26:28", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000\u0007?r?\\A@f?\"??YB@" + }, + { + "driver_id": "c8d1485e5dd6b8484bb4", + "latitude": "33.5377250", + "longitude": "36.2000230", + "heading": "115.00", + "speed": 3.6, + "distance": "0.01", + "status": "off", + "carType": "Awfar", + "created_at": "2025-12-04 11:12:22", + "updated_at": "2025-12-06 18:25:56", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000?<,??@@R??Z?\u0019B@" + }, + { + "driver_id": "3eb6243c7c9de43080b7", + "latitude": "35.5195620", + "longitude": "35.7989100", + "heading": "90.00", + "speed": 28, + "distance": "31.39", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-13 08:42:28", + "updated_at": "2025-12-06 18:21:56", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000G\u001f?\u0001??A@C9ѮB?A@" + }, + { + "driver_id": "f33b6192212bbd06393e", + "latitude": "36.1943630", + "longitude": "37.1222500", + "heading": "6.30", + "speed": 1.166, + "distance": "259.90", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-19 09:30:43", + "updated_at": "2025-12-06 18:21:50", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000?F\u0004??\u0018B@??S㥏B@" + }, + { + "driver_id": "d3b2c333f66d5b8bac31", + "latitude": "35.5074980", + "longitude": "35.7748310", + "heading": "355.80", + "speed": 1.291, + "distance": "0.01", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-30 12:22:35", + "updated_at": "2025-12-06 18:18:47", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000?dȱ??A@?v??-?A@" + }, + { + "driver_id": "84526a946ab104acc806", + "latitude": "33.5198330", + "longitude": "36.2882370", + "heading": "47.00", + "speed": 25.6, + "distance": "1.11", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-21 14:04:37", + "updated_at": "2025-12-06 18:13:09", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000?0C??@@??4??$B@" + }, + { + "driver_id": "1376afac594c3f2ae601", + "latitude": "35.3461500", + "longitude": "35.9474690", + "heading": "155.50", + "speed": 0, + "distance": "0.03", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-23 10:00:05", + "updated_at": "2025-12-06 18:12:18", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000U???N?A@?|\b?F?A@" + }, + { + "driver_id": "55990e379c52520b6c7a", + "latitude": "33.5148080", + "longitude": "36.3189570", + "heading": "220.00", + "speed": 27.2, + "distance": "1.46", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-19 09:16:56", + "updated_at": "2025-12-06 18:09:53", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000\u000e܁:??@@F?=??(B@" + }, + { + "driver_id": "1031b1b342a9a9e20b95", + "latitude": "33.4515500", + "longitude": "36.2376890", + "heading": "0.00", + "speed": 0, + "distance": "0.00", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-13 09:40:09", + "updated_at": "2025-12-06 18:08:48", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000 A?c̹@@:?ؗl\u001eB@" + }, + { + "driver_id": "9d72ed7a604c81631de4", + "latitude": "33.5327130", + "longitude": "36.1798670", + "heading": "0.00", + "speed": 0, + "distance": "0.00", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-27 13:00:40", + "updated_at": "2025-12-06 18:07:41", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000????\/?@@?P??\u0005\u0017B@" + }, + { + "driver_id": "092df73b4d8a8e76ab71", + "latitude": "33.5110290", + "longitude": "36.2892030", + "heading": "356.20", + "speed": 25.3, + "distance": "21.95", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-17 12:24:03", + "updated_at": "2025-12-06 18:04:13", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000_'?ei?@@?s??\u0004%B@" + }, + { + "driver_id": "34ccef720239f27febf7", + "latitude": "36.2218980", + "longitude": "37.1495930", + "heading": "35.00", + "speed": 8.4, + "distance": "34.62", + "status": "off", + "carType": "Awfar", + "created_at": "2025-12-06 07:25:32", + "updated_at": "2025-12-06 18:03:14", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000\u001f?V'g\u001cB@?Z\t?%?B@" + }, + { + "driver_id": "25c2194c7dd77a9cb9ca", + "latitude": "33.5324450", + "longitude": "36.3031400", + "heading": "8.00", + "speed": 38, + "distance": "27.83", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-19 09:03:51", + "updated_at": "2025-12-06 17:57:34", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000??b('?@@\u0002\u000e?J?&B@" + }, + { + "driver_id": "ff2ae874fb90ac2656a9", + "latitude": "33.5272620", + "longitude": "36.2116550", + "heading": "0.00", + "speed": 0, + "distance": "19.16", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-09 10:40:56", + "updated_at": "2025-12-06 17:53:38", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u000076;R}?@@w?ӂ\u0017\u001bB@" + }, + { + "driver_id": "ef0a1e080246d40b293d", + "latitude": "33.4845110", + "longitude": "36.2115830", + "heading": "0.00", + "speed": 0, + "distance": "15.43", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-03 19:49:13", + "updated_at": "2025-12-06 17:53:03", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000???t\u0004?@@ݱ?&\u0015\u001bB@" + }, + { + "driver_id": "0cf716369949752bc9e6", + "latitude": "33.5253200", + "longitude": "36.2846160", + "heading": "236.00", + "speed": 1.339, + "distance": "0.47", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-24 10:44:02", + "updated_at": "2025-12-06 17:50:40", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000????=?@@??\rLn$B@" + }, + { + "driver_id": "5b23b4ca70011211544c", + "latitude": "33.5414120", + "longitude": "36.1993570", + "heading": "0.00", + "speed": 0, + "distance": "0.00", + "status": "off", + "carType": "Awfar", + "created_at": "2025-12-06 12:29:51", + "updated_at": "2025-12-06 17:48:23", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000??\b?L?@@E????\u0019B@" + }, + { + "driver_id": "5eef6ca68ace2c832185", + "latitude": "33.5356860", + "longitude": "36.3022850", + "heading": "0.00", + "speed": 0, + "distance": "4.73", + "status": "off", + "carType": "Awfar", + "created_at": "2025-12-06 13:10:35", + "updated_at": "2025-12-06 17:47:12", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000hv?[??@@\"?^F?&B@" + }, + { + "driver_id": "dd852ec6c0786229a93f", + "latitude": "33.5790780", + "longitude": "36.2984270", + "heading": "0.00", + "speed": 0, + "distance": "0.00", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-22 11:18:55", + "updated_at": "2025-12-06 17:45:52", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000??W:\u001f?@@'?\u001e?2&B@" + }, + { + "driver_id": "f7859c2ecf59fea95c59", + "latitude": "33.5013910", + "longitude": "36.3537380", + "heading": "0.00", + "speed": 0, + "distance": "0.00", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-22 12:41:58", + "updated_at": "2025-12-06 17:44:03", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000\u001e???-?@@\u001d?jIG-B@" + }, + { + "driver_id": "448e66f07f9371b8f615", + "latitude": "36.1884020", + "longitude": "37.1741130", + "heading": "255.00", + "speed": 27.2, + "distance": "9.03", + "status": "off", + "carType": "Awfar", + "created_at": "2025-11-29 09:30:14", + "updated_at": "2025-12-06 17:42:36", + "location_point": "?\u0010\u0000\u0000\u0001\u0001\u0000\u0000\u0000!@??\u001d\u0018B@{g?UI?B@" + } + ] +} \ No newline at end of file diff --git a/loction_server/siro/ride/update_locations_web_app.php b/loction_server/siro/ride/update_locations_web_app.php new file mode 100755 index 00000000..98674595 --- /dev/null +++ b/loction_server/siro/ride/update_locations_web_app.php @@ -0,0 +1,88 @@ += NOW() - INTERVAL 20 MINUTE"; + $title = "مباشر (آخر 20 دقيقة)"; +} + +$savePath = __DIR__ . '/' . $fileName; + +// دالة تنظيف النصوص العربية وإصلاح الترميز +function utf8ize($d) { + if (is_array($d)) { + foreach ($d as $k => $v) { $d[$k] = utf8ize($v); } + } else if (is_string ($d)) { + return mb_convert_encoding($d, 'UTF-8', 'UTF-8'); + } + return $d; +} + +try { + // إجبار قاعدة البيانات على ترميز UTF-8 + if(isset($con)) { $con->exec("set names utf8mb4"); } + + // تنفيذ الاستعلام + $sql = "SELECT * FROM `car_locations` WHERE $condition ORDER BY updated_at DESC"; + $stmt = $con->prepare($sql); + $stmt->execute(); + $rows = $stmt->fetchAll(PDO::FETCH_ASSOC); + + // تنظيف البيانات + $cleanRows = utf8ize($rows); + + // تجهيز البيانات للحفظ + $outputData = [ + 'mode' => $mode, + 'title' => $title, + 'last_updated' => date('Y-m-d H:i:s'), + 'count' => count($cleanRows), + 'drivers' => $cleanRows + ]; + + // تحويل إلى JSON + $jsonContent = json_encode($outputData, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT); + + if ($jsonContent === false) { + die("خطأ في تكوين JSON: " . json_last_error_msg()); + } + + // حفظ الملف + if (file_put_contents($savePath, $jsonContent) !== false) { + echo "
"; + echo "

✅ تم التحديث بنجاح!

"; + echo "

الوضع: $title

"; + echo "

اسم الملف: $fileName

"; + echo "

عدد السائقين: " . count($cleanRows) . "

"; + echo "
"; + } else { + die("فشل الكتابة في الملف. تأكد من صلاحيات المجلد."); + } + +} catch (PDOException $e) { + die("خطأ قاعدة بيانات: " . $e->getMessage()); +} +?> \ No newline at end of file diff --git a/loction_server/test_order.php b/loction_server/test_order.php new file mode 100644 index 00000000..e6edca50 --- /dev/null +++ b/loction_server/test_order.php @@ -0,0 +1,87 @@ + 'dispatch_order', + 'drivers_ids' => json_encode([$targetDriverId]), + 'payload' => $finalPayload // 🔥 هنا نرسل المصفوفة وليس كائناً +]; + +// إرسال الطلب +$ch = curl_init($socketUrl); +curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); +curl_setopt($ch, CURLOPT_POST, true); +curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($postData)); +curl_setopt($ch, CURLOPT_HTTPHEADER, [ + "x-internal-key: $INTERNAL_KEY" +]); + +$response = curl_exec($ch); +$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); +curl_close($ch); + +echo "Response Code: $httpCode\n"; +if ($response == 'Dispatched') { + echo "✅ Success! Order List sent to driver.\n"; +} else { + echo "❌ Failed: $response\n"; +} +?> \ No newline at end of file diff --git a/loction_server/test_ride_taken.php b/loction_server/test_ride_taken.php new file mode 100755 index 00000000..00b41a8f --- /dev/null +++ b/loction_server/test_ride_taken.php @@ -0,0 +1,43 @@ + 'simulate_ride_taken', + 'ride_id' => $rideId, + 'taken_by_driver_id' => $fakeDriverId +]; + +// إرسال الطلب عبر cURL +$ch = curl_init($socketUrl); +curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); +curl_setopt($ch, CURLOPT_POST, true); +curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($postData)); +curl_setopt($ch, CURLOPT_HTTPHEADER, [ + "x-internal-key: $internalKey" +]); + +$response = curl_exec($ch); +$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); +curl_close($ch); + +echo "Simulating Ride Taken...\n"; +echo "Response: $response\n"; + +if ($response == 'Ride Taken Event Broadcasted') { + echo "✅ Success! All drivers should see 'Ride Taken' now.\n"; +} else { + echo "❌ Failed.\n"; +} +?> \ No newline at end of file