diff --git a/.env b/.env index 74bca8a..abea2d5 100644 --- a/.env +++ b/.env @@ -115,4 +115,5 @@ V=P W=T X=D Y=S -Z=M \ No newline at end of file +Z=M +mapSaasKey=in_9478b32836d19cff73db3063 \ No newline at end of file diff --git a/android/build.gradle b/android/build.gradle index 4b28098..19c9098 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -34,6 +34,20 @@ subprojects { defaultConfig { targetSdk 36 } + compileOptions { + sourceCompatibility JavaVersion.VERSION_17 + targetCompatibility JavaVersion.VERSION_17 + } + if (project.hasProperty('kotlinOptions')) { + kotlinOptions { + jvmTarget = '17' + } + } + tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).configureEach { + kotlinOptions { + jvmTarget = "17" + } + } } } } diff --git a/lib/constant/api_key.dart b/lib/constant/api_key.dart index 938d0c0..1a63496 100755 --- a/lib/constant/api_key.dart +++ b/lib/constant/api_key.dart @@ -27,6 +27,7 @@ class AK { X.r(X.r(X.r(Env.accountSIDTwillo, cn), cC), cs); static final String serverAPI = X.r(X.r(X.r(Env.serverAPI, cn), cC), cs); static final String mapAPIKEY = Env.mapAPIKEY; + static final String mapSaasKey = Env.mapSaasKey; static final String twilloRecoveryCode = X.r(X.r(X.r(Env.twilloRecoveryCode, cn), cC), cs); static final String authTokenTwillo = diff --git a/lib/constant/colors.dart b/lib/constant/colors.dart index 9a14399..3fd235f 100755 --- a/lib/constant/colors.dart +++ b/lib/constant/colors.dart @@ -1,33 +1,69 @@ import 'package:flutter/material.dart'; +import 'package:get/get.dart'; class AppColor { + // --- Core Brand Colors --- + + /// **Primary Color:** The brand's signature blue. static const Color primaryColor = Color(0xFF1DA1F2); - static const Color writeColor = Color(0xff222359); + /// **Text/Write Color:** Dynamic based on theme. + static Color get writeColor => + Get.isDarkMode ? Colors.white : const Color(0xFF1A1A1A); + + /// **Secondary Color:** Main background color, dynamic based on theme. + static Color get secondaryColor => + Get.isDarkMode ? const Color(0xFF121212) : Colors.white; + + /// **Surface Color:** For cards and elevated elements. + static Color get surfaceColor => + Get.isDarkMode ? const Color(0xFF1E1E1E) : Colors.white; + + /// **Card Color:** Specifically for card backgrounds. + static Color get cardColor => + Get.isDarkMode ? const Color(0xFF1E1E1E) : Colors.white; + + /// **Border Color:** Subtle borders for both modes. + static Color get borderColor => + Get.isDarkMode ? Colors.white10 : Colors.black12; + + /// **Accent Color:** Greyish accent. + static const Color accentColor = Color.fromARGB(255, 148, 140, 141); + + // --- Neutral & Status Colors --- + + /// **Grey Color:** Dynamic based on theme. + static Color get grayColor => + Get.isDarkMode ? Colors.grey[400]! : const Color(0xFF8E8E93); + + /// **Red Color (Error):** Clear red for alerts. + static const Color redColor = Color(0xFFD32F2F); + + /// **Green Color (Success):** Positive green. + static const Color greenColor = Color(0xFF388E3C); + + /// **Blue Color (Info):** Info text or success green variant. + static const Color blueColor = Color(0xFF1DA1F2); + + /// **Yellow Color (Warning):** Warm yellow. + static const Color yellowColor = Color(0xFFFFA000); + + // --- Tier & Social Colors --- + + static const Color gold = Color(0xFFFFD700); static const Color bronze = Color(0xFFCD7F32); - static const Color goldenBronze = Color(0xFFB87333); // Golden bronze color - static const Color gold = Color(0xFFD4AF37); - static const Color secondaryColor = Colors.white; - static const Color accentColor = Colors.grey; - static const Color greyColor = Colors.grey; - static const Color twitterColor = Color(0xFF1DA1F2); // Twitter blue + static const Color goldenBronze = Color(0xFFB87333); + static const Color twitterColor = Color(0xFF1DA1F2); - static const Color redColor = Color(0xFFEA4335); // Google Red - static const Color greenColor = Color(0xFF34A853); // Google Green - static const Color blueColor = Color(0xFF1DA1F2); // Google Blue - static const Color yellowColor = Color(0xFFFBBC05); // Google Yellow - static Color deepPurpleAccent = - const Color.fromARGB(255, 123, 76, 254).withOpacity(0.3); + // --- Utility Colors --- - // For dynamic elements like gradients - static List gradientStartEnd = [ - Color.fromARGB(255, 40, 158, 232), // Start with primary color - Color.fromARGB( - 255, 44, 63, 75), // End with a slightly darker shade of Twitter blue - ]; + static Color get greyColor => grayColor; - static List secondaryGradientStartEnd = [ - const Color(0xFF1DA1F2), // Start with Twitter blue - const Color(0xFF0C7ABF), // End with a slightly darker shade of Twitter blue - ]; + static Color get cyanBlue => const Color(0xFF1DA1F2); + static Color get cyanAccent => const Color(0xFF1DA1F2).withOpacity(0.12); + static Color get deepPurpleAccent => const Color(0xFFCE1126).withOpacity(0.1); + + // --- Theme Helpers --- + static Brightness get brightness => Get.isDarkMode ? Brightness.dark : Brightness.light; } + diff --git a/lib/constant/country_polygons.dart b/lib/constant/country_polygons.dart index be919af..68ef7f5 100644 --- a/lib/constant/country_polygons.dart +++ b/lib/constant/country_polygons.dart @@ -1,6 +1,6 @@ // في ملف: constant/country_polygons.dart -import 'package:google_maps_flutter/google_maps_flutter.dart'; +import 'package:intaleq_maps/intaleq_maps.dart'; class CountryPolygons { // ========================================================== diff --git a/lib/constant/finance_design_system.dart b/lib/constant/finance_design_system.dart new file mode 100644 index 0000000..16e9f59 --- /dev/null +++ b/lib/constant/finance_design_system.dart @@ -0,0 +1,53 @@ +import 'package:flutter/material.dart'; + +class FinanceDesignSystem { + // --- Colors --- + static const Color primaryDark = Color(0xFF0A0E21); + static const Color accentBlue = Color(0xFF3D5AFE); + static const Color successGreen = Color(0xFF00C853); + static const Color dangerRed = Color(0xFFD50000); + static const Color backgroundColor = Color(0xFFF6F8FA); + static const Color cardColor = Color(0xFFFFFFFF); + static const Color textSecondary = Color(0xFF757575); + static const Color textMuted = Color(0xFFBDBDBD); + + // --- Gradients --- + static const LinearGradient balanceGradient = LinearGradient( + colors: [Color(0xFF0A0E21), Color(0xFF1A237E)], + begin: Alignment.topLeft, + end: Alignment.bottomRight, + ); + + static const LinearGradient dangerGradient = LinearGradient( + colors: [Color(0xFFD50000), Color(0xFFFF5252)], + begin: Alignment.topLeft, + end: Alignment.bottomRight, + ); + + // --- Radius --- + static const double mainRadius = 16.0; + static const double cardRadius = 20.0; + static const double buttonRadius = 12.0; + + // --- Spacing --- + static const double horizontalPadding = 16.0; + static const double verticalSectionPadding = 24.0; + + // --- Text Styles --- + static const TextStyle balanceStyle = TextStyle( + fontSize: 32, + fontWeight: FontWeight.bold, + color: Colors.white, + ); + + static const TextStyle headingStyle = TextStyle( + fontSize: 18, + fontWeight: FontWeight.bold, + color: primaryDark, + ); + + static const TextStyle subHeadingStyle = TextStyle( + fontSize: 14, + color: textSecondary, + ); +} diff --git a/lib/constant/links.dart b/lib/constant/links.dart index 9d9575e..6d81f38 100755 --- a/lib/constant/links.dart +++ b/lib/constant/links.dart @@ -10,6 +10,11 @@ class AppLink { static String locationServer = 'https://location.intaleq.xyz/intaleq/ride/location'; + static String locationServerSide = + 'https://location.intaleq.xyz/intaleq/ride/location'; + static String mapSaasRoute = 'https://map-saas.intaleqapp.com/api/maps/route'; + static String mapSaasPlaces = + 'https://map-saas.intaleqapp.com/api/geocoding/places'; static const String routeApiBaseUrl = "https://routesjo.intaleq.xyz/route/v1/driving"; static final String endPoint = 'https://api.intaleq.xyz/intaleq_v1'; diff --git a/lib/constant/style.dart b/lib/constant/style.dart index f2697b5..b337685 100755 --- a/lib/constant/style.dart +++ b/lib/constant/style.dart @@ -5,7 +5,7 @@ import 'package:google_fonts/google_fonts.dart'; import 'colors.dart'; class AppStyle { - static TextStyle headTitle = TextStyle( + static TextStyle get headTitle => TextStyle( fontWeight: FontWeight.bold, fontSize: 36, color: AppColor.accentColor, @@ -13,57 +13,61 @@ class AppStyle { // ?GoogleFonts.markaziText().fontFamily ? GoogleFonts.markaziText().fontFamily : GoogleFonts.inter().fontFamily); - static TextStyle headTitle2 = TextStyle( + static TextStyle get headTitle2 => TextStyle( fontWeight: FontWeight.bold, fontSize: 24, color: AppColor.writeColor, fontFamily: box.read(BoxName.lang) == 'ar' ? GoogleFonts.markaziText().fontFamily : GoogleFonts.inter().fontFamily); - static TextStyle title = TextStyle( + static TextStyle get title => TextStyle( fontWeight: FontWeight.normal, fontSize: 16, color: AppColor.writeColor, fontFamily: box.read(BoxName.lang) == 'ar' ? GoogleFonts.markaziText().fontFamily : GoogleFonts.inter().fontFamily); - static TextStyle subtitle = TextStyle( + static TextStyle get subtitle => TextStyle( fontWeight: FontWeight.bold, fontSize: 12, color: AppColor.writeColor, fontFamily: box.read(BoxName.lang) == 'ar' ? GoogleFonts.markaziText().fontFamily : GoogleFonts.inter().fontFamily); - static TextStyle number = const TextStyle( + static TextStyle get number => TextStyle( fontWeight: FontWeight.bold, fontSize: 14, color: AppColor.writeColor, fontFamily: 'digit'); - static BoxDecoration boxDecoration = const BoxDecoration( + static BoxDecoration get boxDecoration => BoxDecoration( boxShadow: [ BoxShadow( - color: AppColor.accentColor, blurRadius: 5, offset: Offset(2, 4)), + color: AppColor.accentColor.withValues(alpha: 0.3), + blurRadius: 5, + offset: const Offset(2, 4)), BoxShadow( - color: AppColor.accentColor, blurRadius: 5, offset: Offset(-2, -2)) + color: AppColor.accentColor.withValues(alpha: 0.1), + blurRadius: 5, + offset: const Offset(-2, -2)) ], color: AppColor.secondaryColor, - borderRadius: BorderRadius.all( + borderRadius: const BorderRadius.all( Radius.elliptical(15, 30), )); - static BoxDecoration boxDecoration1 = const BoxDecoration( + static BoxDecoration get boxDecoration1 => BoxDecoration( boxShadow: [ BoxShadow( - color: Color.fromARGB(255, 237, 230, 230), - blurRadius: 5, - offset: Offset(2, 4)), + color: Colors.black.withValues(alpha: 0.05), + blurRadius: 10, + offset: const Offset(0, 4)), BoxShadow( - color: Color.fromARGB(255, 242, 237, 237), + color: AppColor.primaryColor.withValues(alpha: 0.02), blurRadius: 5, - offset: Offset(-2, -2)) + offset: const Offset(-2, -2)) ], color: AppColor.secondaryColor, - borderRadius: BorderRadius.all( + borderRadius: const BorderRadius.all( Radius.elliptical(15, 30), ), ); diff --git a/lib/controller/auth/captin/history_captain.dart b/lib/controller/auth/captin/history_captain.dart index 528b136..73e14e2 100755 --- a/lib/controller/auth/captin/history_captain.dart +++ b/lib/controller/auth/captin/history_captain.dart @@ -8,7 +8,6 @@ import '../../../constant/links.dart'; import '../../../main.dart'; import '../../../views/home/Captin/history/history_details_page.dart'; import '../../functions/crud.dart'; -import '../../functions/encrypt_decrypt.dart'; class HistoryCaptainController extends GetxController { bool isloading = false; diff --git a/lib/controller/auth/captin/login_captin_controller.dart b/lib/controller/auth/captin/login_captin_controller.dart index 1b906ea..58730c1 100755 --- a/lib/controller/auth/captin/login_captin_controller.dart +++ b/lib/controller/auth/captin/login_captin_controller.dart @@ -379,16 +379,20 @@ class LoginDriverController extends GetxController { box.read(BoxName.tokenDriver).toString() || serverData['data'][0]['fingerPrint'].toString() != fingerPrint.toString()) { - await Get.defaultDialog( + Get.defaultDialog( barrierDismissible: false, title: 'Device Change Detected'.tr, middleText: 'Please verify your identity'.tr, textConfirm: 'Verify'.tr, confirmTextColor: Colors.white, onConfirm: () { - Get.back(); - // انتقل لصفحة OTP الجديدة - Get.to( + // نغلق الـ Dialog أولاً بشكل صريح + if (Get.isDialogOpen ?? false) { + Get.back(); + } + + // ثم ننتقل لصفحة OTP + Get.offAll( () => OtpVerificationPage( phone: d['phone'].toString(), deviceToken: fingerPrint.toString(), @@ -399,6 +403,9 @@ class LoginDriverController extends GetxController { ); }, ); + isloading = false; + update(); + return true; // نخرج من الدالة هنا لنسمح لـ OTP بالتعامل مع الأمر } // } } diff --git a/lib/controller/functions/background_service.dart b/lib/controller/functions/background_service.dart index 6644038..e112b36 100644 --- a/lib/controller/functions/background_service.dart +++ b/lib/controller/functions/background_service.dart @@ -1,15 +1,17 @@ import 'dart:async'; +import 'dart:convert'; import 'dart:ui'; import 'dart:io'; import 'package:flutter/material.dart'; import 'package:flutter_background_service/flutter_background_service.dart'; -import 'package:flutter_background_service_android/flutter_background_service_android.dart'; import 'package:flutter_local_notifications/flutter_local_notifications.dart'; import 'package:flutter_overlay_window/flutter_overlay_window.dart'; import 'package:socket_io_client/socket_io_client.dart' as IO; import 'package:flutter_overlay_window/flutter_overlay_window.dart' as Overlay; import 'package:get_storage/get_storage.dart'; +import 'package:geolocator/geolocator.dart' as geo; import '../../constant/box_name.dart'; +import '../firebase/local_notification.dart'; const String notificationChannelId = 'driver_service_channel'; const int notificationId = 888; @@ -35,14 +37,18 @@ Future onStart(ServiceInstance service) async { IO.OptionBuilder() .setTransports(['websocket']) .disableAutoConnect() - .setQuery({'driver_id': driverId, 'token': token}) + .setQuery({ + 'driver_id': driverId, + 'token': token, + 'EIO': '3', // توافقية مع Workerman + }) .setReconnectionAttempts(double.infinity) .build()); socket.connect(); socket.onConnect((_) { - print("✅ Background Service: Socket Connected!"); + print("✅ Background Service: Socket Connected! ID: ${socket?.id}"); if (service is AndroidServiceInstance) { flutterLocalNotificationsPlugin.show( id: notificationId, @@ -70,39 +76,94 @@ Future onStart(ServiceInstance service) async { final box = GetStorage(); bool isAppInForeground = box.read(BoxName.isAppInForeground) ?? false; - // 🔥 Check إضافي: هل الـ Overlay مفتوح بالفعل؟ - bool overlayActive = await Overlay.FlutterOverlayWindow.isActive(); + // 🔥 Check إضافي: هل الـ Overlay مفتوح بالفعل؟ (للأندرويد فقط) + bool overlayActive = false; + if (Platform.isAndroid) { + overlayActive = await Overlay.FlutterOverlayWindow.isActive(); + } if (isAppInForeground || overlayActive) { print("🛑 App is FOREGROUND or Overlay already shown. Skipping."); return; } - // عرض الـ Overlay - print("🚀 App is BACKGROUND. Showing Overlay..."); - try { - await Overlay.FlutterOverlayWindow.showOverlay( - enableDrag: true, - overlayTitle: "طلب جديد", - overlayContent: "لديك طلب جديد وصل للتو!", - flag: OverlayFlag.focusPointer, - positionGravity: PositionGravity.auto, - height: WindowSize.matchParent, - width: WindowSize.matchParent, - startPosition: const OverlayPosition(0, -30), - ); - await Overlay.FlutterOverlayWindow.shareData(data); - } catch (e) { - print("Overlay Error: $e"); + // عرض الـ Overlay (للأندرويد فقط) + if (Platform.isAndroid) { + print("🚀 App is BACKGROUND. Showing Overlay..."); + try { + await Overlay.FlutterOverlayWindow.showOverlay( + enableDrag: true, + overlayTitle: "طلب جديد", + overlayContent: "لديك طلب جديد وصل للتو!", + flag: OverlayFlag.focusPointer, + positionGravity: PositionGravity.auto, + height: WindowSize.matchParent, + width: WindowSize.matchParent, + startPosition: const OverlayPosition(0, -30), + ); + await Overlay.FlutterOverlayWindow.shareData(data); + } catch (e) { + print("Overlay Error: $e"); + } + } else if (Platform.isIOS) { + // على iOS، نظهر إشعاراً عادياً لأن الـ Overlay غير موجود + flutterLocalNotificationsPlugin.show( + id: 1002, + title: "طلب رحلة جديد 🚖", + body: "لديك طلب رحلة جديد، افتح التطبيق للموافقة عليه", + notificationDetails: const NotificationDetails( + iOS: DarwinNotificationDetails( + presentAlert: true, + presentBadge: true, + presentSound: true, + ), + ), + payload: jsonEncode(data)); } }); } service.on('stopService').listen((event) { - socket?.disconnect(); + socket?.clearListeners(); + socket?.dispose(); service.stopSelf(); }); + // 🔥 Location management in background isolate (Using Geolocator) + geo.Position? latestPos; + + // Listen to location changes continuously in the background + geo.Geolocator.getPositionStream( + locationSettings: geo.AndroidSettings( + accuracy: geo.LocationAccuracy.high, + distanceFilter: 10, + intervalDuration: const Duration(seconds: 10), + ), + ).listen((pos) { + latestPos = pos; + }); + + // 🔥 MERCY HEARTBEAT: Send location every 2 minutes to keep driver active in 'raids' + Timer.periodic(const Duration(minutes: 2), (timer) async { + if (socket != null && socket.connected && latestPos != null) { + try { + socket.emit('update_location', { + 'driver_id': driverId, + 'lat': latestPos!.latitude, + 'lng': latestPos!.longitude, + 'heading': latestPos!.heading, + 'speed': latestPos!.speed * 3.6, + 'status': box.read(BoxName.statusDriverLocation) ?? 'on', + 'source': 'background_heartbeat' + }); + print( + "💓 Background Mercy Heartbeat Sent: ${latestPos!.latitude}, ${latestPos!.longitude}"); + } catch (e) { + print("❌ Background Heartbeat Error: $e"); + } + } + }); + Timer.periodic(const Duration(seconds: 30), (timer) async { if (service is AndroidServiceInstance) { if (await service.isForegroundService()) { diff --git a/lib/controller/functions/camer_controller.dart b/lib/controller/functions/camer_controller.dart index dc682aa..c8f473d 100755 --- a/lib/controller/functions/camer_controller.dart +++ b/lib/controller/functions/camer_controller.dart @@ -1,3 +1,4 @@ +/* import 'dart:convert'; import 'dart:io'; @@ -234,3 +235,4 @@ class CameraClassController extends GetxController { super.onClose(); } } +*/ diff --git a/lib/controller/functions/crud.dart b/lib/controller/functions/crud.dart index 385a918..edd6eda 100755 --- a/lib/controller/functions/crud.dart +++ b/lib/controller/functions/crud.dart @@ -604,6 +604,59 @@ class CRUD { ); return json.decode(response.body); } + + Future getMapSaas({ + required String link, + }) async { + var url = Uri.parse(link); + try { + var response = await http.get( + url, + headers: { + 'Content-Type': 'application/json', + 'x-api-key': Env.mapSaasKey, + }, + ); + Log.print('link -MapSaas: $link'); + Log.print('response -MapSaas: ${response.body}'); + if (response.statusCode == 200) { + return jsonDecode(response.body); + } + Log.print('MapSaas Error: ${response.statusCode} - ${response.body}'); + return null; + } catch (e) { + Log.print('MapSaas Exception: $e'); + return null; + } + } + + Future postMapSaas({ + required String link, + required Map payload, + }) async { + var url = Uri.parse(link); + try { + var response = await http.post( + url, + body: jsonEncode(payload), + headers: { + 'Content-Type': 'application/json', + 'x-api-key': Env.mapSaasKey, + }, + ); + Log.print('post -MapSaas link: $link'); + Log.print('post -MapSaas payload: $payload'); + Log.print('post -MapSaas response: ${response.body}'); + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } + Log.print('MapSaas Post Error: ${response.statusCode} - ${response.body}'); + return null; + } catch (e) { + Log.print('MapSaas Post Exception: $e'); + return null; + } + } } class NoInternetException implements Exception { diff --git a/lib/controller/functions/location_background_controller.dart b/lib/controller/functions/location_background_controller.dart index 9f1f26b..d861afa 100755 --- a/lib/controller/functions/location_background_controller.dart +++ b/lib/controller/functions/location_background_controller.dart @@ -1,7 +1,11 @@ import 'dart:io'; import 'package:device_info_plus/device_info_plus.dart'; +import 'package:get/get_core/src/get_main.dart'; +import 'package:get/get_navigation/src/extension_navigation.dart'; import 'package:permission_handler/permission_handler.dart'; +import 'package:sefer_driver/views/widgets/error_snakbar.dart'; +import 'package:sefer_driver/views/widgets/mydialoug.dart'; import 'background_service.dart'; @@ -28,18 +32,19 @@ class PermissionsHelper { if (Platform.isAndroid) { final androidInfo = await DeviceInfoPlugin().androidInfo; - // Android 13+ (API 33+) يحتاج إذن POST_NOTIFICATIONS if (androidInfo.version.sdkInt >= 33) { final status = await Permission.notification.request(); if (status.isDenied) { print('⚠️ إذن الإشعارات مرفوض'); + mySnackbarWarning( + "يرجى منح صلاحية الإشعارات لضمان وصول الطلبات إليك"); return false; } if (status.isPermanentlyDenied) { print('⚠️ إذن الإشعارات مرفوض بشكل دائم - افتح الإعدادات'); - await openAppSettings(); + mySnackbarWarning('يرجى فتح الإعدادات وتفعيل صلاحية الإشعارات'); return false; } } @@ -50,25 +55,31 @@ class PermissionsHelper { /// طلب جميع الإذونات المطلوبة static Future requestAllPermissions() async { - // إذن الإشعارات أولاً - bool notificationGranted = await requestNotificationPermission(); - if (!notificationGranted) return false; + // إذن الإشعارات (اختياري) + await requestNotificationPermission(); - // إذن الموقع - final locationStatus = await Permission.location.request(); - if (!locationStatus.isGranted) { - print('⚠️ إذن الموقع مرفوض'); + // 1. طلب إذن الموقع الأساسي فقط إذا كان مرفوضاً + var status = await Permission.location.status; + if (status.isDenied) { + status = await Permission.location.request(); + } + + if (status.isPermanentlyDenied) { + _showSettingsDialog('الموقع'); return false; } - // إذن الموقع في الخلفية - if (Platform.isAndroid) { - final bgLocationStatus = await Permission.locationAlways.request(); - if (!bgLocationStatus.isGranted) { - print('⚠️ إذن الموقع في الخلفية مرفوض'); - } - } + return status.isGranted || status.isLimited; + } - return true; + static void _showSettingsDialog(String permissionName) { + MyDialog().getDialog( + 'صلاحية $permissionName مطلوبة', + 'لقد قمت برفض صلاحية $permissionName سابقاً. يرجى تفعيلها من الإعدادات لتمكين التطبيق من العمل.', + () async { + await openAppSettings(); + Get.back(); + }, + ); } } diff --git a/lib/controller/functions/location_controller.dart b/lib/controller/functions/location_controller.dart index 9519265..1833934 100755 --- a/lib/controller/functions/location_controller.dart +++ b/lib/controller/functions/location_controller.dart @@ -1,15 +1,13 @@ import 'dart:async'; import 'dart:convert'; import 'dart:io'; -import 'dart:math'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:geolocator/geolocator.dart' as geo; -import 'package:google_maps_flutter/google_maps_flutter.dart'; +import 'package:intaleq_maps/intaleq_maps.dart'; import 'package:location/location.dart'; import 'package:battery_plus/battery_plus.dart'; import 'package:permission_handler/permission_handler.dart' as ph; -import 'package:sefer_driver/views/home/Captin/orderCaptin/order_request_page.dart'; import 'package:socket_io_client/socket_io_client.dart' as IO; import 'package:sefer_driver/constant/table_names.dart'; import 'package:trip_overlay_plugin/trip_overlay_plugin.dart'; @@ -17,6 +15,7 @@ import '../../constant/box_name.dart'; import '../../constant/links.dart'; import '../../main.dart'; import '../../print.dart'; +import '../firebase/local_notification.dart'; import '../home/captin/home_captain_controller.dart'; import '../home/captin/map_driver_controller.dart'; import '../home/payment/captain_wallet_controller.dart'; @@ -63,6 +62,7 @@ class LocationController extends GetxController with WidgetsBindingObserver { bool _isPowerSavingMode = false; final List> _trackBuffer = []; + final List> _behaviorBuffer = []; LatLng? _lastPosForDistance; LatLng? _lastRecordedRealLoc; @@ -137,26 +137,22 @@ class LocationController extends GetxController with WidgetsBindingObserver { Log.print("📱 Lifecycle: App is in FOREGROUND"); box.write(BoxName.isAppInForeground, true); - // إيقاف خدمة الخلفية لأننا في الواجهة الآن + // إيقاف خدمة الخلفية BackgroundServiceHelper.stopService(); - - // التأكد من أن السوكيت متصل، وإذا لا، نعيد الاتصال فوراً - if (socket == null || !socket!.connected) { - Log.print("🔄 Socket disconnected in background. Reconnecting now..."); + + if (socket == null || (!socket!.connected && !_isInitializingSocket)) { + Log.print("🔄 Initializing Socket on resume..."); initSocket(); - } else { - // إذا كان متصلاً، ننعش المستمعين فقط للتأكد - _setupSocketListeners(); } } else if (state == AppLifecycleState.paused || state == AppLifecycleState.detached) { Log.print("📱 Lifecycle: App is in BACKGROUND"); box.write(BoxName.isAppInForeground, false); - // تشغيل خدمة الخلفية لضمان بقاء التطبيق حياً - BackgroundServiceHelper.startService(); - - // ملاحظة: لا نقطع السوكيت هنا، نتركه يعمل قدر الإمكان + // تشغيل خدمة الخلفية للأندرويد لضمان بقاء التطبيق حياً + if (!Platform.isIOS) { + BackgroundServiceHelper.startService(); + } } } @@ -179,69 +175,107 @@ class LocationController extends GetxController with WidgetsBindingObserver { // ====== Socket Logic (Improved) ====== // =================================================================== + bool _isInitializingSocket = false; + void initSocket() { + // منع الاستدعاءات المتداخلة التي تسبب قتل الاتصال قبل اكتماله + if (_isInitializingSocket) { + Log.print("⏳ Socket is already initializing. Skipping redundant call."); + return; + } + + if (socket != null && socket!.connected) { + Log.print("✅ Socket is already connected. No need to re-init."); + return; + } + String driverId = box.read(BoxName.driverID).toString(); String token = box.read(BoxName.tokenDriver).toString(); String platform = Platform.isIOS ? 'ios' : 'android'; - // 1. إذا كان السوكيت موجوداً، فقط تأكد من اتصاله + _isInitializingSocket = true; + + // تنظيف السوكيت القديم فقط إذا كان موجوداً وغير متصل if (socket != null) { - if (!socket!.connected) { - Log.print("🟡 Socket exists but disconnected. Reconnecting..."); - socket!.connect(); - } - _setupSocketListeners(); // تحديث المستمعين - return; + Log.print("🧹 Cleaning up old socket instance..."); + socket!.clearListeners(); + socket!.dispose(); + socket = null; } Log.print( - "🟡 [LocationController] Creating NEW Socket for Driver: $driverId"); + "🟡 [LocationController] Initializing NEW Socket for Driver: $driverId"); - // 2. إنشاء الاتصال - socket = IO.io( - 'https://location.intaleq.xyz', - IO.OptionBuilder() - .setTransports(['websocket']) - .enableAutoConnect() // تفعيل إعادة الاتصال التلقائي - .setQuery( - {'driver_id': driverId, 'token': token, 'platform': platform}) - .setReconnectionAttempts(double.infinity) - .setReconnectionDelay(2000) - .build()); + try { + // العودة للـ Websocket حصراً لأنه الوحيد الذي ينجح في فتح القناة + socket = IO.io( + 'https://location.intaleq.xyz', + IO.OptionBuilder() + .setTransports(['websocket']) + .setQuery({'driver_id': driverId, 'token': token, 'EIO': '3'}) + .enableForceNew() + .build()); - socket!.connect(); - _setupSocketListeners(); + _setupSocketListeners(); + socket!.connect(); + } catch (e) { + _isInitializingSocket = false; + Log.print("❌ Socket Initialization Exception: $e"); + } } - // دالة منفصلة لضمان عدم تكرار المستمعين void _setupSocketListeners() { if (socket == null) return; - // تنظيف القديم أولاً socket!.off('connect'); socket!.off('disconnect'); - socket!.off('new_ride_request'); - socket!.off('ride_cancelled'); + socket!.off('connect_error'); + socket!.off('error'); socket!.onConnect((_) { - Log.print('✅ Socket Connected! ID: ${socket?.id}'); - isSocketConnected = true; - _startHeartbeat(); + _isInitializingSocket = false; + + // ننتظر قليلاً للتأكد من تعبئة الـ IDs + Future.delayed(const Duration(milliseconds: 1000), () { + String? sid = socket?.id; + String? eid = socket?.io.engine?.id; + + Log.print( + '✅ Socket Connected! ID: ${sid ?? eid ?? 'N/A'} (SID: $sid, EID: $eid)'); + + if (sid != null || eid != null) { + isSocketConnected = true; + _startHeartbeat(); + } + }); }); - socket!.onDisconnect((_) { - Log.print('❌ Socket Disconnected'); + socket!.onDisconnect((data) { + _isInitializingSocket = false; + Log.print('❌ Socket Disconnected: $data'); isSocketConnected = false; _stopHeartbeat(); }); + socket!.onConnectError((err) { + _isInitializingSocket = false; Log.print('❌ Socket Connect Error: $err'); }); + socket!.onConnectTimeout((data) { + _isInitializingSocket = false; + Log.print('❌ Socket Connect Timeout: $data'); + }); + socket!.onError((err) { + _isInitializingSocket = false; Log.print('❌ Socket General Error: $err'); }); + socket!.on('reconnect_attempt', (attempt) { + Log.print('🔄 Socket Reconnecting... Attempt: $attempt'); + }); + // 🔥 الاستماع للطلبات الجديدة socket!.on('new_ride_request', (data) { Log.print("🔔 Socket: New Ride Request Arrived!"); @@ -296,8 +330,17 @@ class LocationController extends GetxController with WidgetsBindingObserver { if (!isAppInForeground) { Log.print( - "🛑 التطبيق في الخلفية. السوكيت سيتجاهل التوجيه ويترك المهمة للـ Overlay."); - return; // 👈 هذا السطر يمنع السوكيت من إكمال العمل وفتح الصفحة + "📱 [LocationController] Order received in background (iOS/Android). Source: $source"); + + if (Platform.isIOS) { + // على iOS، نقوم بإظهار إشعار محلي لأن الـ Overlay غير مدعوم + NotificationController().showNotification( + "طلب رحلة جديد 🚖", + "لديك طلب رحلة جديد، افتح التطبيق للموافقة عليه", + jsonEncode(rideData), + 'ding.wav'); + } + return; } try { @@ -309,14 +352,23 @@ class LocationController extends GetxController with WidgetsBindingObserver { // 3. تجهيز البيانات (DriverList) List driverList = []; - if (rideData.length > 0) { - var sortedKeys = rideData.keys.map((e) => int.tryParse(e) ?? 0).toList() - ..sort(); + if (rideData.isNotEmpty) { + var sortedKeys = rideData.keys + .where((e) => int.tryParse(e) != null) + .map((e) => int.parse(e)) + .toList()..sort(); + for (var key in sortedKeys) { driverList.add(rideData[key.toString()]); } } + // الحماية ضد البنية غير المكتملة + if (driverList.length <= 16) { + Log.print("❌ Socket Error: Parsed driver list is incomplete."); + return; + } + // 4. إغلاق النافذة (إن وجدت بالخطأ) والتنقل try { if (await TripOverlayPlugin.isOverlayActive()) { @@ -459,21 +511,16 @@ class LocationController extends GetxController with WidgetsBindingObserver { _uploadBatchTimer?.cancel(); _socketHeartbeat?.cancel(); - if (socket != null && socket!.connected) { - String driverId = box.read(BoxName.driverID).toString(); - socket!.emit('update_location', { - 'driver_id': driverId, - 'lat': myLocation.latitude, - 'lng': myLocation.longitude, - 'heading': heading, - 'speed': speed * 3.6, - 'status': 'close', // Changed to off - 'distance': totalDistance - }); - socket!.disconnect(); + if (socket != null) { + socket!.clearListeners(); + socket! + .dispose(); // استخدام dispose بدلاً من disconnect لضمان تحرير الموارد على iOS + } + + if (!Platform.isIOS) { + await BackgroundServiceHelper.stopService(); } - await BackgroundServiceHelper.stopService(); socket = null; isSocketConnected = false; _isReady = false; @@ -526,16 +573,31 @@ class LocationController extends GetxController with WidgetsBindingObserver { Future _flushBufferToServer() async { if (_trackBuffer.isEmpty) return; - List> batch = List.from(_trackBuffer); - _trackBuffer.clear(); + + int itemsToTake = _trackBuffer.length > 100 ? 100 : _trackBuffer.length; + List> batch = _trackBuffer.sublist(0, itemsToTake); + final String driverId = (box.read(BoxName.driverID) ?? '').toString(); try { - await CRUD().post( + var res = await CRUD().post( link: '${AppLink.locationServer}/add_batch.php', payload: {'driver_id': driverId, 'batch_data': jsonEncode(batch)}, ); + if (res != 'failure') { + _trackBuffer.removeRange(0, itemsToTake); + } else { + _enforceBufferLimit(); + } } catch (e) { Log.print('❌ Failed to upload batch: $e'); + _enforceBufferLimit(); + } + } + + void _enforceBufferLimit() { + if (_trackBuffer.length > 500) { + _trackBuffer.removeRange(0, _trackBuffer.length - 500); + Log.print("⚠️ Buffer limit enforced. Removed oldest entries."); } } @@ -547,32 +609,65 @@ class LocationController extends GetxController with WidgetsBindingObserver { if (level >= powerSaveExitLevel) _isPowerSavingMode = false; if (previousMode != _isPowerSavingMode) { _startBatchTimers(); - startLocationUpdates(); + _updateLocationSettings(); } }); } + Future _updateLocationSettings() async { + if (_locSub == null) return; + int interval = _isPowerSavingMode ? 10000 : 5000; + try { + await location.changeSettings( + accuracy: LocationAccuracy.navigation, + interval: interval, + distanceFilter: _isPowerSavingMode ? 20 : 10, + ); + Log.print("🔋 Location settings updated. Power Save: $_isPowerSavingMode"); + } catch (e) { + Log.print("❌ Failed to update location settings: $e"); + } + } + Future _saveBehaviorIfMoved(LatLng pos, DateTime now, {required double currentSpeed}) async { final dist = (_lastSqlLoc == null) ? 999.0 : _calculateDistance(_lastSqlLoc!, pos); if (dist < 15.0) return; + final accel = _calcAcceleration(currentSpeed, now) ?? 0.0; - try { - await sql.insertData({ - 'driver_id': (box.read(BoxName.driverID) ?? '').toString(), - 'latitude': pos.latitude, - 'longitude': pos.longitude, - 'acceleration': accel, - 'created_at': now.toIso8601String(), - 'updated_at': now.toIso8601String(), - }, TableName.behavior); - _lastSqlLoc = pos; - } catch (e) { - Log.print('SQLite Error: $e'); + _lastSqlLoc = pos; + + _behaviorBuffer.add({ + 'driver_id': (box.read(BoxName.driverID) ?? '').toString(), + 'latitude': pos.latitude, + 'longitude': pos.longitude, + 'acceleration': accel, + 'created_at': now.toIso8601String(), + 'updated_at': now.toIso8601String(), + }); + + if (_behaviorBuffer.length >= 10) { + _flushBehaviorBuffer(); } } + void _flushBehaviorBuffer() { + if (_behaviorBuffer.isEmpty) return; + List> batch = List.from(_behaviorBuffer); + _behaviorBuffer.clear(); + + Future.microtask(() async { + try { + for (var data in batch) { + await sql.insertData(data, TableName.behavior); + } + } catch (e) { + Log.print('SQLite Batch Insert Error: $e'); + } + }); + } + // استبدال دالة Haversine اليدوية بـ Geolocator في باقي الكود أيضاً // لأنها تعتمد على C++ في الأندرويد و Obj-C في الآيفون (Native Speed) double _calculateDistance(LatLng a, LatLng b) { diff --git a/lib/controller/functions/package_info.dart b/lib/controller/functions/package_info.dart index db1f99c..d97b913 100755 --- a/lib/controller/functions/package_info.dart +++ b/lib/controller/functions/package_info.dart @@ -217,8 +217,12 @@ class SecurityHelper { isNotTrust = await JailbreakRootDetection.instance.isNotTrust; isJailBroken = await JailbreakRootDetection.instance.isJailBroken; isRealDevice = await JailbreakRootDetection.instance.isRealDevice; - isOnExternalStorage = - await JailbreakRootDetection.instance.isOnExternalStorage; + + // This method is only relevant/implemented for Android + if (Platform.isAndroid) { + isOnExternalStorage = + await JailbreakRootDetection.instance.isOnExternalStorage; + } List issues = await JailbreakRootDetection.instance.checkForIssues; @@ -230,7 +234,6 @@ class SecurityHelper { PackageInfo packageInfo = await PackageInfo.fromPlatform(); bundleId = packageInfo.packageName; if (bundleId.isNotEmpty) { - // Pass the CORRECT bundle ID to isTampered isTampered = await JailbreakRootDetection.instance.isTampered(bundleId); } } catch (e) { diff --git a/lib/controller/home/captin/home_captain_controller.dart b/lib/controller/home/captin/home_captain_controller.dart index 278091a..31f8962 100755 --- a/lib/controller/home/captin/home_captain_controller.dart +++ b/lib/controller/home/captin/home_captain_controller.dart @@ -3,15 +3,9 @@ import 'dart:convert'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:get/get.dart'; -import 'dart:ui' as ui; // للألوان -// import 'package:google_maps_flutter/google_maps_flutter.dart'; -// import 'package:flutter_map/flutter_map.dart'; -import 'package:google_maps_flutter/google_maps_flutter.dart'; +import 'package:intaleq_maps/intaleq_maps.dart'; import 'package:http/http.dart' as http; -// import 'package:latlong2/latlong.dart' -// as latlng; // هذا مهم جداً للتعامل مع إحداثيات OSM import 'package:sefer_driver/constant/box_name.dart'; -import 'package:sefer_driver/controller/home/captin/map_driver_controller.dart'; import 'dart:async'; import '../../../constant/links.dart'; @@ -35,7 +29,8 @@ class HomeCaptainController extends GetxController { Timer? activeTimer; Map data = {}; bool isHomeMapActive = true; - BitmapDescriptor carIcon = BitmapDescriptor.defaultMarker; + InlqBitmap carIcon = InlqBitmap.defaultMarker; + bool isMapReadyForCommands = false; bool isLoading = true; late double kazan = 0; double latePrice = 0; @@ -55,7 +50,8 @@ class HomeCaptainController extends GetxController { String totalMoneyInSEFER = '0'; String totalDurationToday = '0'; Timer? timer; - late LatLng myLocation = const LatLng(33.5138, 36.2765); + Timer? _cameraFollowTimer; + LatLng myLocation = const LatLng(33.5138, 36.2765); String totalPoints = '0'; String countRefuse = '0'; bool mapType = false; @@ -81,10 +77,13 @@ class HomeCaptainController extends GetxController { // دالة لتغيير حالة الهيت ماب (عرض/إخفاء) void toggleHeatmap() async { isHeatmapVisible = !isHeatmapVisible; + print("🔥 [Heatmap] Visibility toggled to: $isHeatmapVisible"); if (isHeatmapVisible) { - await fetchAndDrawHeatmap(); + startHeatmapCycle(); } else { + _heatmapTimer?.cancel(); heatmapPolygons.clear(); + print("🧹 [Heatmap] Polygons cleared."); } update(); // تحديث الواجهة } @@ -96,6 +95,7 @@ class HomeCaptainController extends GetxController { // دالة جلب البيانات ورسم الخريطة Future fetchAndDrawHeatmap() async { + print("🚀 [Heatmap] Fetching live data..."); // استخدم الرابط المباشر لملف JSON لسرعة قصوى final String jsonUrl = "https://api.intaleq.xyz/intaleq/ride/rides/heatmap_live.json"; @@ -107,20 +107,26 @@ class HomeCaptainController extends GetxController { if (response.statusCode == 200) { final List data = json.decode(response.body); + print("✅ [Heatmap] Data received. Points count: ${data.length}"); _generatePolygons(data); + } else { + print("⚠️ [Heatmap] Server error: ${response.statusCode}"); } } catch (e) { - print("Heatmap Error: $e"); + print("❌ [Heatmap] Error: $e"); } } void _generatePolygons(List data) { + print("🎨 [Heatmap] Processing polygons..."); Set tempPolygons = {}; // الأوفست لرسم المربع (نصف حجم الشبكة) // الشبكة دقتها 0.01 درجة، لذا نصفها 0.005 double offset = 0.005; + int highCount = 0, medCount = 0, lowCount = 0; + for (var point in data) { double lat = double.parse(point['lat'].toString()); double lng = double.parse(point['lng'].toString()); @@ -133,24 +139,27 @@ class HomeCaptainController extends GetxController { // 🧠 منطق الألوان: ندمج الذكاء (Intensity) مع العدد (Count) if (intensity == 'high' || count >= 5) { + highCount++; // منطقة مشتعلة (أحمر) // إما فيها طلبات ضائعة (Timeout) أو فيها عدد كبير من الطلبات - color = Colors.red.withOpacity(0.35); - strokeColor = Colors.red.withOpacity(0.8); + color = Colors.red.withValues(alpha: 0.35); + strokeColor = Colors.red.withValues(alpha: 0.8); } else if (intensity == 'medium' || count >= 3) { + medCount++; // منطقة متوسطة (برتقالي) - color = Colors.orange.withOpacity(0.35); - strokeColor = Colors.orange.withOpacity(0.8); + color = Colors.orange.withValues(alpha: 0.35); + strokeColor = Colors.orange.withValues(alpha: 0.8); } else { + lowCount++; // منطقة خفيفة (أصفر) - color = Colors.yellow.withOpacity(0.3); - strokeColor = Colors.yellow.withOpacity(0.6); + color = Colors.yellow.withValues(alpha: 0.3); + strokeColor = Colors.yellow.withValues(alpha: 0.6); } // رسم المربع tempPolygons.add(Polygon( polygonId: PolygonId("$lat-$lng"), - consumeTapEvents: true, // للسماح بالضغط عليه مستقبلاً + // consumeTapEvents: true, // للسماح بالضغط عليه مستقبلاً points: [ LatLng(lat - offset, lng - offset), LatLng(lat + offset, lng - offset), @@ -164,13 +173,27 @@ class HomeCaptainController extends GetxController { } heatmapPolygons = tempPolygons; + print( + "✨ [Heatmap] Rendering Done. (🔥 High: $highCount, 🟠 Med: $medCount, 🟡 Low: $lowCount)"); + print("📍 [Heatmap] Total Polygons on Map: ${heatmapPolygons.length}"); update(); // تحديث الخريطة } - // دالة لتشغيل الخريطة الحرارية كل فترة (مثلاً عند فتح الصفحة) + Timer? _heatmapTimer; + + // دالة لتشغيل الخريطة الحرارية كل فترة (كل 5 دقائق) لضمان نشاط البيانات void startHeatmapCycle() { + _heatmapTimer?.cancel(); fetchAndDrawHeatmap(); - // يمكن تفعيل Timer هنا لو أردت تحديثها تلقائياً كل 5 دقائق + + _heatmapTimer = Timer.periodic(const Duration(minutes: 5), (timer) { + if (isHeatmapVisible) { + print("🔄 [Heatmap] Periodic refresh started..."); + fetchAndDrawHeatmap(); + } else { + timer.cancel(); + } + }); } void goToWalletFromConnect() { @@ -185,16 +208,8 @@ class HomeCaptainController extends GetxController { } void addCustomCarIcon() { - ImageConfiguration config = ImageConfiguration( - size: const Size(30, 35), devicePixelRatio: Get.pixelRatio); - BitmapDescriptor.asset( - config, - 'assets/images/car.png', - // mipmaps: false, - ).then((value) { - carIcon = value; - update(); - }); + carIcon = InlqBitmap.fromAsset('assets/images/car.png'); + update(); } String stringActiveDuration = ''; @@ -259,7 +274,7 @@ class HomeCaptainController extends GetxController { // 3. إظهار الديالوج المانع Get.defaultDialog( - title: "حسابك مقيد مؤقتاً ⛔", + title: "Your account is temporarily restricted ⛔".tr, titleStyle: const TextStyle(color: Colors.red, fontWeight: FontWeight.bold), barrierDismissible: false, // 🚫 ممنوع الإغلاق بالضغط خارجاً @@ -269,8 +284,9 @@ class HomeCaptainController extends GetxController { const Icon(Icons.timer_off_outlined, size: 50, color: Colors.orange), const SizedBox(height: 15), - const Text( - "لقد تجاوزت حد الإلغاء المسموح به (3 مرات).\nلا يمكنك العمل حتى انتهاء العقوبة.", + Text( + "You have exceeded the allowed cancellation limit (3 times).\nYou cannot work until the penalty expires." + .tr, textAlign: TextAlign.center, ), const SizedBox(height: 20), @@ -296,11 +312,11 @@ class HomeCaptainController extends GetxController { ? () { Get.back(); // إغلاق الديالوج box.remove(BoxName.blockUntilDate); // إزالة الحظر - Get.snackbar("أهلاً بك", "يمكنك الآن استقبال الطلبات", + Get.snackbar("Welcome".tr, "You can now receive orders".tr, backgroundColor: Colors.green); } : null, // زر معطل - child: Text(isFinished ? "Go Online" : "انتظر انتهاء الوقت"), + child: Text(isFinished ? "Go Online".tr : "Wait for timer".tr), ); }), ); @@ -334,7 +350,13 @@ class HomeCaptainController extends GetxController { @override void onClose() { + print("🔥 [HomeCaptain] onClose called. Tearing down map resources..."); _blockTimer?.cancel(); + activeTimer?.cancel(); + _cameraFollowTimer?.cancel(); + _heatmapTimer?.cancel(); + stopTimer(); + mapHomeCaptainController = null; super.onClose(); } @@ -377,7 +399,8 @@ class HomeCaptainController extends GetxController { confirm: MyElevatedButton( title: 'Ok , See you Tomorrow'.tr, onPressed: () { - Get.back(); + // إغلاق الديالوج والعودة قسرياً + navigatorKey.currentState?.pop(); Get.back(); })); } @@ -395,26 +418,40 @@ class HomeCaptainController extends GetxController { update(); } - // late GoogleMapController mapHomeCaptainController; - GoogleMapController? mapHomeCaptainController; - // final locationController = Get.find(); + // late IntaleqMapController mapHomeCaptainController; + IntaleqMapController? mapHomeCaptainController; // --- FIX 2: Smart Map Creation --- - void onMapCreated(GoogleMapController controller) { + void onMapCreated(IntaleqMapController controller) { + print("🔥 [HomeCaptain] onMapCreated started"); mapHomeCaptainController = controller; - // Check actual location before moving camera - var currentLoc = locationController.myLocation; - if (currentLoc.latitude != 0 && currentLoc.longitude != 0) { - controller.animateCamera( - CameraUpdate.newLatLng(currentLoc), - ); - } else { - // Optional: Move to default city view instead of ocean - controller.animateCamera( - CameraUpdate.newLatLngZoom(myLocation, 10), - ); - } + // We delay the first move to ensure the native side is fully ready + Future.delayed(const Duration(milliseconds: 800), () { + if (isClosed || mapHomeCaptainController == null) return; + + try { + var currentLoc = locationController.myLocation; + if (currentLoc.latitude != 0 && + currentLoc.latitude != null && + !currentLoc.latitude.isNaN) { + print( + "🔥 [HomeCaptain] Safely moving camera to: ${currentLoc.latitude}"); + mapHomeCaptainController!.moveCamera( + CameraUpdate.newLatLngZoom(currentLoc, 15), + ); + } else { + print("🔥 [HomeCaptain] Safely moving to default Damascus"); + mapHomeCaptainController!.moveCamera( + CameraUpdate.newLatLngZoom(myLocation, 12), + ); + } + // Mark as ready for regular listener updates + isMapReadyForCommands = true; + } catch (e) { + print("❌ [HomeCaptain] Map move failed: $e"); + } + }); } void savePeriod(Duration period) { @@ -441,7 +478,7 @@ class HomeCaptainController extends GetxController { await getCaptainDurationOnToday(); String? initialDurationStr = totalDurationToday; - if (initialDurationStr != null) { + if (initialDurationStr != '0') { // تحويل النص (01:20:30) إلى كائن Duration List parts = initialDurationStr.split(':'); _currentDuration = Duration( @@ -490,16 +527,27 @@ class HomeCaptainController extends GetxController { getlocation() async { isLoading = true; update(); - // This ensures we try to get a fix, but map doesn't crash if it fails - await locationController.getLocation(); + try { + // ننتظر جلب الموقع مع مهلة 10 ثوانٍ لتجنب التعليق + var locData = await locationController.getLocation().timeout( + const Duration(seconds: 10), + onTimeout: () => null, + ); - var loc = locationController.myLocation; - if (loc.latitude != 0) { - myLocation = loc; + if (locData != null && locData.latitude != null) { + myLocation = LatLng(locData.latitude!, locData.longitude!); + print( + "📍 [HomeCaptain] Location updated: ${myLocation.latitude}, ${myLocation.longitude}"); + } else { + print( + "⚠️ [HomeCaptain] Could not get current location, using default."); + } + } catch (e) { + print("❌ Error in getlocation: $e"); + } finally { + isLoading = false; + update(); } - - isLoading = false; - update(); } Map walletDriverPointsDate = {}; @@ -535,27 +583,18 @@ class HomeCaptainController extends GetxController { // 4. دالة نستدعيها عند العودة للصفحة الرئيسية void resumeHomeMapUpdates() { isHomeMapActive = true; - // إنعاش الخريطة عند العودة - if (mapHomeCaptainController != null) { - onMapCreated(mapHomeCaptainController!); - } + // تم حذف استدعاء onMapCreated المتكرر لمنع قفز الخريطة عند العودة update(); } @override void onInit() async { - // ✅ طلب الإذونات أولاً - bool permissionsGranted = await PermissionsHelper.requestAllPermissions(); + // ✅ تم إرجاعه كتعليق لمنع الديالوج عند التشغيل (كما كان في الكود الأصلي) + // bool permissionsGranted = await PermissionsHelper.requestAllPermissions(); + // if (permissionsGranted) { + // await BackgroundServiceHelper.startService(); + // } - if (permissionsGranted) { - // ✅ بدء الخدمة بعد الحصول على الإذونات - await BackgroundServiceHelper.startService(); - print('✅ Background service started successfully'); - } else { - print('❌ لم يتم منح الإذونات - الخدمة لن تعمل'); - // اعرض رسالة للمستخدم - } - // await locationBackController.requestLocationPermission(); Get.put(FirebaseMessagesController()); addToken(); await getlocation(); @@ -575,29 +614,25 @@ class HomeCaptainController extends GetxController { checkAndShowBlockDialog(); box.write(BoxName.statusDriverLocation, 'off'); // 2. عدل الليسنر ليصبح مشروطاً - locationController.addListener(() { - // الشرط الذهبي: إذا كانت الصفحة غير نشطة أو الخريطة غير موجودة، لا تفعل شيئاً - if (!isHomeMapActive || mapHomeCaptainController == null || isClosed) - return; + // 2. مؤقت التتبع التلقائي (كل 5 ثوانٍ كما في الكود السابق) + _cameraFollowTimer = Timer.periodic(const Duration(seconds: 5), (timer) { + if (isClosed || + !isHomeMapActive || + mapHomeCaptainController == null || + !isActive) return; - if (isActive) { - // isActive الخاصة بالزر "متصل/غير متصل" - var loc = locationController.myLocation; - if (loc.latitude != 0 && loc.longitude != 0) { - try { - mapHomeCaptainController!.animateCamera( - CameraUpdate.newCameraPosition( - CameraPosition( - target: loc, - zoom: 17.5, - tilt: 50.0, - bearing: locationController.heading, - ), - ), + var loc = locationController.myLocation; + if (loc.latitude != 0 && loc.latitude != null && !loc.latitude.isNaN) { + try { + // 🔥 Safety double-check before animating + if (mapHomeCaptainController != null) { + print("🔥 [HomeCaptain] Safely moving camera to: ${loc.latitude}"); + mapHomeCaptainController?.animateCamera( + CameraUpdate.newLatLngZoom(loc, 17.5), ); - } catch (e) { - // التقاط الخطأ بصمت إذا حدث أثناء الانتقال } + } catch (e) { + print("❌ [HomeCaptain] Camera movement failed: $e"); } } }); @@ -724,11 +759,4 @@ class HomeCaptainController extends GetxController { update(); } - @override - void dispose() { - activeTimer?.cancel(); - stopTimer(); - mapHomeCaptainController?.dispose(); // Dispose controller - super.dispose(); - } } diff --git a/lib/controller/home/captin/map_driver_controller.dart b/lib/controller/home/captin/map_driver_controller.dart index 176082c..e60fc8d 100755 --- a/lib/controller/home/captin/map_driver_controller.dart +++ b/lib/controller/home/captin/map_driver_controller.dart @@ -5,28 +5,21 @@ import 'dart:math'; import 'dart:math' as math; import 'package:flutter/foundation.dart'; import 'package:http/http.dart' as http; -import 'package:intl/intl.dart'; -import 'package:sefer_driver/controller/firebase/local_notification.dart'; -import 'package:sefer_driver/controller/home/captin/behavior_controller.dart'; import 'package:sefer_driver/controller/home/captin/home_captain_controller.dart'; -import 'package:sefer_driver/controller/home/navigation/decode_polyline_isolate.dart'; import 'package:sefer_driver/views/widgets/error_snakbar.dart'; import 'package:sefer_driver/views/widgets/mydialoug.dart'; import 'package:bubble_head/bubble.dart'; import 'package:flutter/material.dart'; import 'package:geolocator/geolocator.dart'; import 'package:get/get.dart'; -import 'package:google_maps_flutter/google_maps_flutter.dart'; -import 'package:google_polyline_algorithm/google_polyline_algorithm.dart'; +import 'package:intaleq_maps/intaleq_maps.dart'; import 'package:url_launcher/url_launcher.dart'; -import '../../../constant/api_key.dart'; import '../../../constant/box_name.dart'; import '../../../constant/colors.dart'; import '../../../constant/country_polygons.dart'; import '../../../constant/links.dart'; import '../../../constant/table_names.dart'; -import '../../../env/env.dart'; import '../../../main.dart'; import '../../../print.dart'; import '../../../views/Rate/rate_passenger.dart'; @@ -36,6 +29,7 @@ import '../../firebase/notification_service.dart'; import '../../functions/crud.dart'; import '../../functions/location_controller.dart'; import '../../functions/tts.dart'; +import 'behavior_controller.dart'; class MapDriverController extends GetxController { bool isLoading = true; @@ -48,10 +42,10 @@ class MapDriverController extends GetxController { List data = []; List dataDestination = []; LatLngBounds? boundsData; - BitmapDescriptor carIcon = BitmapDescriptor.defaultMarker; - BitmapDescriptor passengerIcon = BitmapDescriptor.defaultMarker; - BitmapDescriptor startIcon = BitmapDescriptor.defaultMarker; - BitmapDescriptor endIcon = BitmapDescriptor.defaultMarker; + InlqBitmap carIcon = InlqBitmap.defaultMarker; + InlqBitmap passengerIcon = InlqBitmap.defaultMarker; + InlqBitmap startIcon = InlqBitmap.defaultMarker; + InlqBitmap endIcon = InlqBitmap.defaultMarker; final List polylineCoordinates = []; final List polylineCoordinatesDestination = []; List polyLines = []; @@ -104,7 +98,7 @@ class MapDriverController extends GetxController { int remainingTimeToPassenger = 60; int remainingTimeInPassengerLocatioWait = 60; bool isDriverNearPassengerStart = false; - GoogleMapController? mapController; + IntaleqMapController? mapController; late LatLng myLocation; int remainingTimeTimerRideBegin = 60; String stringRemainingTimeRideBegin = ''; @@ -158,16 +152,32 @@ class MapDriverController extends GetxController { _posSub?.cancel(); _posSub = null; - mapController?.dispose(); + // mapController?.dispose(); super.onClose(); } - void onMapCreated(GoogleMapController controller) { + void onMapCreated(IntaleqMapController controller) { mapController = controller; if (Get.isRegistered()) { myLocation = Get.find().myLocation; controller.animateCamera(CameraUpdate.newLatLngZoom(myLocation, 16)); } + + // 🔥 رسم المسار فور جاهزية الخريطة + if (isRideStarted) { + // إذا كانت الرحلة بدأت، ارسم للمكان النهائي + getRoute( + origin: myLocation, + destination: latLngPassengerDestination, + routeColor: Colors.blue); + } else { + // إذا كان السائق ذاهب للراكب + getRoute( + origin: myLocation, + destination: latLngPassengerLocation, + routeColor: Colors.yellow); + } + // بدء الاستماع للموقع للملاحة وتحديث الماركر startListeningStepNavigation(); } @@ -239,7 +249,7 @@ class MapDriverController extends GetxController { } takeSnapMap() { - mapController!.takeSnapshot(); + // mapController!.takeSnapshot(); } @override @@ -254,7 +264,7 @@ class MapDriverController extends GetxController { _passengerTimer?.cancel(); _waitingTimer?.cancel(); _posSub?.cancel(); - mapController?.dispose(); + // mapController?.dispose(); } Future openGoogleMapFromDriverToPassenger() async { @@ -307,7 +317,9 @@ class MapDriverController extends GetxController { box.remove(BoxName.rideArguments); // 3. عرض رسالة للسائق - if (Get.isDialogOpen == true) Get.back(); // إغلاق أي ديالوج مفتوح + if (Get.isDialogOpen == true) { + navigatorKey.currentState?.pop(); + } Get.defaultDialog( title: "تم إلغاء الرحلة".tr, @@ -325,7 +337,7 @@ class MapDriverController extends GetxController { ), confirm: ElevatedButton( onPressed: () { - Get.back(); // إغلاق الديالوج + navigatorKey.currentState?.pop(); // إغلاق الديالوج Get.offAll(() => HomeCaptain()); // العودة للرئيسية }, child: Text("OK".tr), @@ -367,8 +379,8 @@ class MapDriverController extends GetxController { box.write(BoxName.statusDriverLocation, 'blocked'); // عرض رسالة العقوبة - Get.snackbar("تم تقييد حسابك مؤقتاً ⛔", - "بسبب كثرة الإلغاءات (3 مرات)، تم إيقاف استقبال الطلبات لمدة 4 ساعات.", + Get.snackbar("Your account is temporarily restricted ⛔".tr, + "Due to excessive cancellations (3 times), receiving orders has been suspended for 4 hours.".tr, duration: Duration(seconds: 8), backgroundColor: Colors.red, colorText: Colors.white, @@ -402,15 +414,21 @@ class MapDriverController extends GetxController { Get.put(HomeCaptainController()).getRefusedOrderByCaptain(); } - if (Get.isDialogOpen == true) Get.back(); + if (Get.isDialogOpen == true) { + navigatorKey.currentState?.pop(); + } Get.offAll( () => HomeCaptain()); // العودة للرئيسية ليتم تطبيق الحظر هناك } else { - if (Get.isDialogOpen == true) Get.back(); + if (Get.isDialogOpen == true) { + navigatorKey.currentState?.pop(); + } Get.snackbar("Error", "Failed to cancel ride"); } } catch (e) { - if (Get.isDialogOpen == true) Get.back(); + if (Get.isDialogOpen == true) { + navigatorKey.currentState?.pop(); + } Log.print("Error: $e"); } } @@ -707,7 +725,9 @@ class MapDriverController extends GetxController { await calculateDistanceBetweenDriverAndPassengerLocation(); // إغلاق مؤشر التحميل لأننا حصلنا على النتيجة - if (Get.isDialogOpen == true) Get.back(); + if (Get.isDialogOpen == true) { + navigatorKey.currentState?.pop(); + } if (distanceToPassenger < 100) { // زدت المسافة قليلاً لمرونة أكبر (150م) @@ -752,15 +772,17 @@ class MapDriverController extends GetxController { }); } else { // --- حالة الرفض (بعيد جداً) --- - MyDialog().getDialog( - 'You are far from passenger location'.tr, + MyDialog().getDialog('You are far from passenger location'.tr, 'Please go closer to the passenger location (less than 150m)'.tr, - () => Get.back() // إغلاق الديالوج فقط - ); + () { + // الديالوج يغلق نفسه الآن تلقائياً + }); } } catch (e) { // تنظيف اللودينج في حال حدوث خطأ غير متوقع - if (Get.isDialogOpen == true) Get.back(); + if (Get.isDialogOpen == true) { + navigatorKey.currentState?.pop(); + } Log.print("Error starting ride: $e"); Get.snackbar("Error", "Could not start ride. Please check internet."); } @@ -1448,56 +1470,23 @@ class MapDriverController extends GetxController { } void addCustomCarIcon() { - ImageConfiguration config = ImageConfiguration( - size: const Size(30, 35), devicePixelRatio: Get.pixelRatio); - BitmapDescriptor.asset( - config, - 'assets/images/car.png', - // mipmaps: false, - ).then((value) { - carIcon = value; - update(); - }); + carIcon = InlqBitmap.fromAsset('assets/images/car.png'); + update(); } void addCustomStartIcon() async { -// Create the marker with the resized image - - ImageConfiguration config = ImageConfiguration( - size: const Size(30, 30), devicePixelRatio: Get.pixelRatio); - BitmapDescriptor.asset( - config, - 'assets/images/A.png', - ).then((value) { - startIcon = value; - update(); - }); + startIcon = InlqBitmap.fromAsset('assets/images/A.png'); + update(); } void addCustomEndIcon() { - ImageConfiguration config = ImageConfiguration( - size: const Size(25, 25), devicePixelRatio: Get.pixelRatio); - BitmapDescriptor.asset( - config, - 'assets/images/b.png', - ).then((value) { - endIcon = value; - update(); - }); + endIcon = InlqBitmap.fromAsset('assets/images/b.png'); + update(); } void addCustomPassengerIcon() { - ImageConfiguration config = ImageConfiguration( - size: const Size(30, 30), devicePixelRatio: Get.pixelRatio - // scale: 1.0, - ); - BitmapDescriptor.asset( - config, - 'assets/images/picker.png', - ).then((value) { - passengerIcon = value; - update(); - }); + passengerIcon = InlqBitmap.fromAsset('assets/images/picker.png'); + update(); } var activeRouteSteps = >[]; @@ -1596,82 +1585,94 @@ class MapDriverController extends GetxController { required LatLng destination, required Color routeColor, }) async { - // 1. استخدام الرابط الجديد والإعدادات الصحيحة - String coordinates = - '${origin.longitude},${origin.latitude};${destination.longitude},${destination.latitude}'; - // استخدام الرابط من الكلاس المرجعي لأنه أحدث - var url = - "${AppLink.mapOSM}/route/v1/driving/$coordinates?steps=true&overview=full"; + if (mapController == null) return; try { - var response = await http.get(Uri.parse(url)); + // 1. طلب المسار من الباكيج + final response = + await mapController!.getDirections(origin, destination, steps: true); - if (response.statusCode == 200) { - var decoded = jsonDecode(response.body); + // 2. التعامل مع الـ JSON المباشر (الذي أرسله المستخدم) + // إذا كان الـ response يحتوي على الحقول مباشرة في الجذر + final String? encodedPoints = response['points']; - if (decoded['code'] != 'Ok' || (decoded['routes'] as List).isEmpty) { - mySnackeBarError("لم يتم العثور على مسار"); - return; - } + if (encodedPoints == null) { + mySnackeBarError("No route points found".tr); + return; + } - var route = decoded['routes'][0]; + // 🔥 فك التشفير باستخدام compute لضمان أداء ممتاز + List fullRoute = + await compute(PolylineUtils.decode, encodedPoints); - // أ) تشغيل الـ Isolate لفك التشفير (ممتاز، ابقِ عليه) - final String pointsString = route["geometry"]; - List fullRoute = - await compute(decodePolylineIsolate, pointsString); + if (fullRoute.isEmpty) { + mySnackeBarError("Failed to process route points".tr); + return; + } - // ب) تهيئة المتغيرات - upcomingPathPoints.assignAll(fullRoute); - traveledPathPoints.clear(); - _lastTraveledIndex = 0; + // تحديث المسافة والوقت من الـ JSON الجديد + distance = (response['distance'] ?? 0).toString(); + duration = (response['duration'] ?? 0).toString(); - // ج) رسم المسار الأولي - polyLines.clear(); - polyLines.add(Polyline( - polylineId: const PolylineId("upcoming_route"), - points: fullRoute, - width: 8, - color: routeColor, - startCap: Cap.roundCap, - endCap: Cap.roundCap, - )); + // ب) تهيئة المتغيرات + upcomingPathPoints.assignAll(fullRoute); + traveledPathPoints.clear(); + _lastTraveledIndex = 0; - // د) معالجة الخطوات (Legs & Steps) - List legs = route['legs']; - if (legs.isNotEmpty) { - final stepsList = List>.from(legs[0]['steps']); + // ج) رسم المسار الأولي + polyLines.clear(); + polyLines.add(Polyline( + polylineId: const PolylineId("upcoming_route"), + points: fullRoute, + width: 8, + color: routeColor, + )); - // 🔥 استخدام دالة الترجمة المحسنة من الكلاس المرجعي - for (var step in stepsList) { - step['html_instructions'] = - _createInstructionFromManeuverSmart(step); - // تصحيح مواقع المناورات - if (step['maneuver'] != null && - step['maneuver']['location'] != null) { - var loc = step['maneuver']['location']; + // د) معالجة الخطوات (Legs & Steps) إذا توفرت في الـ JSON + List legs = response['legs'] ?? []; + if (legs.isNotEmpty) { + final stepsList = + List>.from(legs[0]['steps'] ?? []); + + for (var step in stepsList) { + step['html_instructions'] = _createInstructionFromManeuverSmart(step); + + if (step['maneuver'] != null && + step['maneuver']['location'] != null) { + var loc = step['maneuver']['location']; + // التعامل مع تنسيق OSRM [lng, lat] + if (loc is List && loc.length >= 2) { step['end_location'] = {'lat': loc[1], 'lng': loc[0]}; + } else if (loc is Map) { + step['end_location'] = loc; } } + } - routeSteps = stepsList; - currentStepIndex = 0; + routeSteps = stepsList; + currentStepIndex = 0; - // نطق أول تعليمة - if (routeSteps.isNotEmpty) { - currentInstruction = routeSteps[0]['html_instructions']; + // نطق أول تعليمة + if (routeSteps.isNotEmpty) { + currentInstruction = routeSteps[0]['html_instructions']; + if (Get.isRegistered()) { Get.find().speakText(currentInstruction); } } - - // هـ) تحريك الكاميرا لتشمل المسار - if (fullRoute.isNotEmpty) { - final bounds = _boundsFromLatLngList(fullRoute); - safeAnimateCamera(CameraUpdate.newLatLngBounds(bounds, 80)); - } - - update(); + } else { + // في حال عدم وجود steps، نقوم بتصفيرها + routeSteps = []; + currentInstruction = ""; } + + // هـ) تحريك الكاميرا لتشمل المسار + if (fullRoute.isNotEmpty) { + final bounds = _boundsFromLatLngList(fullRoute); + safeAnimateCamera(CameraUpdate.newLatLngBounds(bounds, + left: 80, top: 80, right: 80, bottom: 80)); + } + + update(); } catch (e) { Log.print("Route Error: $e"); } @@ -1679,7 +1680,7 @@ class MapDriverController extends GetxController { // 🔥 دالة الترجمة المحسنة (من NavigationController) String _createInstructionFromManeuverSmart(Map step) { - if (step['maneuver'] == null) return "تابع المسير"; + if (step['maneuver'] == null) return "Continue straight".tr; final maneuver = step['maneuver']; final type = maneuver['type'] ?? 'continue'; @@ -1690,10 +1691,10 @@ class MapDriverController extends GetxController { switch (type) { case 'depart': - instruction = "انطلق"; + instruction = "Go".tr; break; case 'arrive': - return "لقد وصلت إلى وجهتك، $name"; + return "You have arrived at your destination, @name".trParams({'name': name}); case 'turn': case 'fork': case 'roundabout': @@ -1705,14 +1706,14 @@ class MapDriverController extends GetxController { _getTurnInstruction(modifier); // استخدم نفس دالتك المساعدة هنا break; default: - instruction = "تابع المسير"; + instruction = "Continue straight".tr; } if (name.isNotEmpty) { if (type == 'continue') { - instruction += " على $name"; + instruction += " ${"on".tr} $name"; } else { - instruction += " نحو $name"; + instruction += " ${"towards".tr} $name"; } } return instruction; @@ -1728,10 +1729,10 @@ class MapDriverController extends GetxController { switch (type) { case 'depart': - instruction = "انطلق"; + instruction = "Go".tr; break; case 'arrive': - instruction = "لقد وصلت إلى وجهتك"; + instruction = "You have arrived at your destination".tr; if (name.isNotEmpty) instruction += "، $name"; return instruction; case 'turn': @@ -1742,20 +1743,20 @@ class MapDriverController extends GetxController { instruction = _getTurnInstruction(modifier); break; case 'continue': - instruction = "استمر"; + instruction = "Continue".tr; break; default: - instruction = "اتجه"; + instruction = "Head".tr; } if (name.isNotEmpty) { if (instruction == "استمر") { - instruction += " على $name"; + instruction += " ${"on".tr} $name"; } else { - instruction += " إلى $name"; + instruction += " ${"to".tr} $name"; } } else if (type == 'continue' && modifier == 'straight') { - instruction = "استمر بشكل مستقيم"; + instruction = "Continue straight".tr; } return instruction; @@ -1767,23 +1768,23 @@ class MapDriverController extends GetxController { String _getTurnInstruction(String modifier) { switch (modifier) { case 'uturn': - return "قم بالاستدارة والعودة"; + return "Make a U-turn".tr; case 'sharp right': - return "انعطف يمينًا بحدة"; + return "Turn sharp right".tr; case 'right': - return "انعطف يمينًا"; + return "Turn right".tr; case 'slight right': - return "انعطف يمينًا قليلاً"; + return "Turn slight right".tr; case 'straight': - return "استمر بشكل مستقيم"; + return "Continue straight".tr; case 'slight left': - return "انعطف يسارًا قليلاً"; + return "Turn slight left".tr; case 'left': - return "انعطف يسارًا"; + return "Turn left".tr; case 'sharp left': - return "انعطف يسارًا بحدة"; + return "Turn sharp left".tr; default: - return "اتجه"; + return "Head".tr; } } @@ -1850,7 +1851,7 @@ class MapDriverController extends GetxController { void _advanceStep() { if (currentStepIndex >= _stepBounds.length - 1) { // وصل للنهاية - currentInstruction = "لقد وصلت إلى وجهتك"; + currentInstruction = "You have arrived at your destination".tr; return; } @@ -1909,11 +1910,11 @@ class MapDriverController extends GetxController { routeColor: Colors.blue); } else { if (Get.isDialogOpen == true) Get.back(); - mySnackeBarError("يجب أن تكون أقرب من 100 متر للوصول"); + mySnackeBarError("You must be closer than 100 meters to arrive".tr); } } catch (e) { if (Get.isDialogOpen == true) Get.back(); - mySnackeBarError("حدث خطأ في الاتصال"); + mySnackeBarError("A connection error occurred".tr); } } @@ -1941,9 +1942,7 @@ class MapDriverController extends GetxController { // 2. فك تشفير البوليلاين الخاص بالخطوة وتحويله إلى LatLng // -->> هنا تم التصحيح <<-- - List pts = decodePolyline(s['polyline']['points']) - .map((point) => LatLng(point[0].toDouble(), point[1].toDouble())) - .toList(); + List pts = PolylineUtils.decode(s['polyline']['points']); // أضف نقاط البداية والنهاية إذا لم تكن موجودة في البوليلاين لضمان دقة الحدود if (pts.isNotEmpty) { @@ -1962,14 +1961,9 @@ class MapDriverController extends GetxController { // A helper function to decode and convert the polyline string List decodePolylineToLatLng(String polylineString) { // 1. Decode the string into a list of number lists (e.g., [[lat, lng], ...]) - List> decodedPoints = decodePolyline(polylineString); + List decodedPoints = PolylineUtils.decode(polylineString); - // 2. Map each [lat, lng] pair to a LatLng object, ensuring conversion to double - List latLngPoints = decodedPoints - .map((point) => LatLng(point[0].toDouble(), point[1].toDouble())) - .toList(); - - return latLngPoints; + return decodedPoints; } // ================================================================= @@ -1986,11 +1980,11 @@ class MapDriverController extends GetxController { void _suggestOptimization() { Get.snackbar( - "تحسين أداء التطبيق", - "لضمان أفضل تجربة، نقترح تعديل الإعدادات لتناسب جهازك. هل تود المتابعة؟", + "Improve app performance".tr, + "To ensure the best experience, we suggest adjusting the settings to suit your device. Would you like to proceed?".tr, duration: const Duration(seconds: 15), mainButton: TextButton( - child: const Text("نعم، قم بالتحسين"), + child: Text("Yes, optimize".tr), onPressed: () { updateInterval.value = 8; // غير الفترة إلى 8 ثوانٍ // save setting to shared_preferences @@ -2017,7 +2011,8 @@ class MapDriverController extends GetxController { Future _fitToBounds(LatLngBounds b, {double padding = 60}) async { // نستخدم الدالة الآمنة التي أنشأناها - await safeAnimateCamera(CameraUpdate.newLatLngBounds(b, padding)); + await safeAnimateCamera(CameraUpdate.newLatLngBounds(b, + left: padding, top: padding, right: padding, bottom: padding)); } double distanceBetweenDriverAndPassengerWhenConfirm = 0; @@ -2154,7 +2149,8 @@ class MapDriverController extends GetxController { LatLngBounds(northeast: northeast, southwest: southwest); // Fit the camera to the bounds - var cameraUpdate = CameraUpdate.newLatLngBounds(boundsData, 140); + var cameraUpdate = CameraUpdate.newLatLngBounds(boundsData, + left: 140, top: 140, right: 140, bottom: 140); safeAnimateCamera(cameraUpdate); } @@ -2395,22 +2391,19 @@ class MapDriverController extends GetxController { polyLines.removeWhere((p) => p.polylineId.value == 'upcoming_route'); polyLines.removeWhere((p) => p.polylineId.value == 'traveled_route'); - // المسار المتبقي (أزرق) + // المسار المتبقي polyLines.add(Polyline( - polylineId: const PolylineId('upcoming_route'), + polylineId: const PolylineId("upcoming_route"), points: remaining, - color: Colors.blue, width: 8, - zIndex: 2, - startCap: Cap.roundCap, - endCap: Cap.roundCap, + color: isRideStarted ? Colors.blue : Colors.yellow, )); // المسار المقطوع (رمادي) polyLines.add(Polyline( polylineId: const PolylineId('traveled_route'), points: traveled, - color: Colors.grey.withOpacity(0.8), + color: Colors.grey.withValues(alpha: 0.8), width: 7, zIndex: 1, )); diff --git a/lib/controller/home/captin/model.dart b/lib/controller/home/captin/model.dart index ed4ba1b..6c2f09f 100644 --- a/lib/controller/home/captin/model.dart +++ b/lib/controller/home/captin/model.dart @@ -1,5 +1,5 @@ import 'package:flutter/material.dart'; -import 'package:google_maps_flutter/google_maps_flutter.dart'; +import 'package:intaleq_maps/intaleq_maps.dart'; class NavigationStep { final String instruction; diff --git a/lib/controller/home/captin/navigation_service.dart b/lib/controller/home/captin/navigation_service.dart index 83120aa..e5be61c 100644 --- a/lib/controller/home/captin/navigation_service.dart +++ b/lib/controller/home/captin/navigation_service.dart @@ -1,7 +1,6 @@ import 'package:flutter/material.dart'; import 'package:get/get.dart'; -import 'package:google_maps_flutter/google_maps_flutter.dart'; -import 'package:google_polyline_algorithm/google_polyline_algorithm.dart'; +import 'package:intaleq_maps/intaleq_maps.dart'; import 'package:sefer_driver/constant/api_key.dart'; import 'package:sefer_driver/constant/box_name.dart'; import 'package:sefer_driver/constant/links.dart'; @@ -19,10 +18,10 @@ class NavigationService extends GetxService { final RxSet polylines = {}.obs; final RxString currentInstruction = "".obs; - BitmapDescriptor carIcon = BitmapDescriptor.defaultMarker; - BitmapDescriptor passengerIcon = BitmapDescriptor.defaultMarker; - BitmapDescriptor startIcon = BitmapDescriptor.defaultMarker; - BitmapDescriptor endIcon = BitmapDescriptor.defaultMarker; + InlqBitmap carIcon = InlqBitmap.defaultMarker; + InlqBitmap passengerIcon = InlqBitmap.defaultMarker; + InlqBitmap startIcon = InlqBitmap.defaultMarker; + InlqBitmap endIcon = InlqBitmap.defaultMarker; @override void onInit() { @@ -30,19 +29,11 @@ class NavigationService extends GetxService { _loadCustomIcons(); } - void _loadCustomIcons() async { - carIcon = await _createBitmapDescriptor('assets/images/car.png'); - passengerIcon = await _createBitmapDescriptor('assets/images/picker.png'); - startIcon = await _createBitmapDescriptor('assets/images/A.png'); - endIcon = await _createBitmapDescriptor('assets/images/b.png'); - } - - Future _createBitmapDescriptor(String assetName) { - return BitmapDescriptor.fromAssetImage( - ImageConfiguration( - size: const Size(30, 35), devicePixelRatio: Get.pixelRatio), - assetName, - ); + void _loadCustomIcons() { + carIcon = InlqBitmap.fromAsset('assets/images/car.png'); + passengerIcon = InlqBitmap.fromAsset('assets/images/picker.png'); + startIcon = InlqBitmap.fromAsset('assets/images/A.png'); + endIcon = InlqBitmap.fromAsset('assets/images/b.png'); } Future?> getRoute({ @@ -62,9 +53,7 @@ class NavigationService extends GetxService { void drawRoute(Map routeData, {Color color = Colors.blue}) { final pointsString = routeData["overview_polyline"]["points"]; - final points = decodePolyline(pointsString) - .map((p) => LatLng(p[0].toDouble(), p[1].toDouble())) - .toList(); + final points = PolylineUtils.decode(pointsString); final polyline = Polyline( polylineId: PolylineId(routeData["summary"] ?? DateTime.now().toString()), diff --git a/lib/controller/home/captin/order_request_controller.dart b/lib/controller/home/captin/order_request_controller.dart index fc7bc3c..21e1b5c 100755 --- a/lib/controller/home/captin/order_request_controller.dart +++ b/lib/controller/home/captin/order_request_controller.dart @@ -5,14 +5,16 @@ import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter_overlay_window/flutter_overlay_window.dart'; import 'package:get/get.dart'; -import 'package:google_maps_flutter/google_maps_flutter.dart'; +import 'package:intaleq_maps/intaleq_maps.dart'; import 'package:geolocator/geolocator.dart'; import 'package:http/http.dart' as http; import 'package:just_audio/just_audio.dart'; +import 'package:sefer_driver/views/widgets/error_snakbar.dart'; import 'dart:math' as math; import '../../../constant/box_name.dart'; import '../../../constant/links.dart'; +import '../../../env/env.dart'; import '../../../main.dart'; import '../../../print.dart'; import '../../../views/home/Captin/driver_map_page.dart'; @@ -22,8 +24,6 @@ import '../../firebase/local_notification.dart'; import '../../functions/crud.dart'; import '../../functions/location_controller.dart'; import '../../home/captin/home_captain_controller.dart'; -import '../../firebase/notification_service.dart'; -import '../navigation/decode_polyline_isolate.dart'; class OrderRequestController extends GetxController with WidgetsBindingObserver { @@ -40,7 +40,7 @@ class OrderRequestController extends GetxController bool _isRideTakenHandled = false; // --- الأيقونات والماركرز --- - BitmapDescriptor? driverIcon; + InlqBitmap? driverIcon; Map markersMap = {}; Set get markers => markersMap.values.toSet(); @@ -49,7 +49,7 @@ class OrderRequestController extends GetxController List? myList; Map? myMapData; - GoogleMapController? mapController; + IntaleqMapController? mapController; // الإحداثيات (أزلنا late لتجنب الأخطاء القاتلة) double latPassenger = 0.0; @@ -64,7 +64,7 @@ class OrderRequestController extends GetxController String totalTripDuration = "--"; String tripPrice = "--"; - String timeToPassenger = "جاري الحساب..."; + String timeToPassenger = "Calculating...".tr; String distanceToPassenger = "--"; // --- الخريطة --- @@ -193,9 +193,25 @@ class OrderRequestController extends GetxController void _parseExtraData() { passengerRating = _safeGet(33).isEmpty ? "5.0" : _safeGet(33); tripType = _safeGet(31); - totalTripDistance = _safeGet(5); - totalTripDuration = _safeGet(19); - tripPrice = _safeGet(2); + + // Format numbers to avoid many decimal places + String rawDist = _safeGet(5); + if (rawDist.isNotEmpty) { + double? d = double.tryParse(rawDist); + totalTripDistance = d != null ? "${d.toStringAsFixed(1)} km" : rawDist; + } + + String rawDur = _safeGet(19); + if (rawDur.isNotEmpty) { + double? d = double.tryParse(rawDur); + totalTripDuration = d != null ? "${d.toStringAsFixed(0)} min" : rawDur; + } + + String rawPrice = _safeGet(2); + if (rawPrice.isNotEmpty) { + double? p = double.tryParse(rawPrice); + tripPrice = p != null ? p.toStringAsFixed(0) : rawPrice; + } } // ---------------------------------------------------------------------- @@ -203,6 +219,8 @@ class OrderRequestController extends GetxController // ---------------------------------------------------------------------- Future _calculateFullJourney() async { + if (mapController == null) return; // Wait for controller to draw + try { Position driverPos = await Geolocator.getCurrentPosition( desiredAccuracy: LocationAccuracy.high); @@ -210,6 +228,9 @@ class OrderRequestController extends GetxController updateDriverLocation(driverLatLng, driverPos.heading); + // Clear old polylines to avoid "ghost lines" + polylines.clear(); + var pickupFuture = _fetchRouteData( start: driverLatLng, end: LatLng(latPassenger, lngPassenger), @@ -246,7 +267,8 @@ class OrderRequestController extends GetxController destTime: totalTripDuration, destDist: totalTripDistance); - zoomToFitRide(driverLatLng); + // Now zoom to fit all polylines and markers + zoomToFitRide(); update(); } catch (e) { @@ -254,6 +276,22 @@ class OrderRequestController extends GetxController } } + String _formatDistance(dynamic rawDist) { + if (rawDist == null || rawDist.toString().isEmpty) return "--"; + double dist = double.tryParse(rawDist.toString()) ?? 0.0; + if (dist <= 0) return "--"; + if (dist < 1000) return "${dist.toStringAsFixed(0)} m"; + return "${(dist / 1000).toStringAsFixed(1)} km"; + } + + String _formatDuration(dynamic rawDur) { + if (rawDur == null || rawDur.toString().isEmpty) return "--"; + double dur = double.tryParse(rawDur.toString()) ?? 0.0; + if (dur <= 0) return "1 min"; // Minimum 1 min for UI + if (dur < 60) return "${dur.toStringAsFixed(0)} sec"; + return "${(dur / 60).toStringAsFixed(0)} min"; + } + Future?> _fetchRouteData( {required LatLng start, required LatLng end, @@ -261,46 +299,56 @@ class OrderRequestController extends GetxController required String id, bool isDashed = false}) async { try { - // حماية من الإحداثيات الصفرية if (start.latitude == 0 || end.latitude == 0) return null; + if (mapController == null) return null; - String apiUrl = "https://routesy.intaleq.xyz/route/v1/driving"; - String coords = - "${start.longitude},${start.latitude};${end.longitude},${end.latitude}"; - String url = "$apiUrl/$coords?steps=false&overview=full"; + final saasUrl = Uri.parse(AppLink.mapSaasRoute).replace(queryParameters: { + 'fromLat': start.latitude.toString(), + 'fromLng': start.longitude.toString(), + 'toLat': end.latitude.toString(), + 'toLng': end.longitude.toString(), + 'steps': 'false', + 'alternatives': 'false', + }); - var response = await http.get(Uri.parse(url)); - if (response.statusCode == 200) { - var json = jsonDecode(response.body); - if (json['code'] == 'Ok' && json['routes'].isNotEmpty) { - var route = json['routes'][0]; + final response = await http.get(saasUrl, headers: { + 'x-api-key': Env.mapSaasKey, + 'Content-Type': 'application/json', + }); - double distM = double.parse(route['distance'].toString()); - double durS = double.parse(route['duration'].toString()); + if (response.statusCode != 200) { + throw Exception("Routing request failed: ${response.statusCode}"); + } - String distText = "${(distM / 1000).toStringAsFixed(1)} كم"; - String durText = "${(durS / 60).toStringAsFixed(0)} دقيقة"; + final data = jsonDecode(response.body); + print("🛣️ Route API Response [$id]: ${data}"); - String geometry = route['geometry']; - List points = await compute(decodePolylineIsolate, geometry); + // The map-saas API returns the route data directly at the root, + // with 'points' being an encoded polyline string. + final String? encodedPoints = data['points']?.toString(); - Polyline polyline = Polyline( - polylineId: PolylineId(id), - color: color, - width: 5, - points: points, - patterns: - isDashed ? [PatternItem.dash(10), PatternItem.gap(5)] : [], - startCap: Cap.roundCap, - endCap: Cap.roundCap, - ); + if (encodedPoints != null && encodedPoints.isNotEmpty) { + List path = controllerDecodePolyline(encodedPoints); + print("📍 Path for [$id] has ${path.length} points."); - return { - 'distance_text': distText, - 'duration_text': durText, - 'polyline': polyline - }; - } + final num? rawDist = data['distance'] is num ? data['distance'] : null; + final num? rawDur = data['duration'] is num ? data['duration'] : null; + + final distanceText = data['distance_text'] ?? _formatDistance(rawDist); + final durationText = data['duration_text'] ?? _formatDuration(rawDur); + + Polyline polyline = Polyline( + polylineId: PolylineId(id), + color: color, + width: 5, + points: path, + ); + + return { + 'distance_text': distanceText, + 'duration_text': durationText, + 'polyline': polyline + }; } } catch (e) { print("Route Fetch Error: $e"); @@ -308,36 +356,47 @@ class OrderRequestController extends GetxController return null; } - void zoomToFitRide(LatLng driverPos) { + void zoomToFitRide() { if (mapController == null) return; - // حماية من النقاط الصفرية - if (latPassenger == 0 || latDestination == 0) return; + List allPoints = []; - List points = [ - driverPos, - LatLng(latPassenger, lngPassenger), - LatLng(latDestination, lngDestination), - ]; + // Add all polyline points to the bounds calculation + for (var polyline in polylines) { + allPoints.addAll(polyline.points); + } - double minLat = points.first.latitude; - double maxLat = points.first.latitude; - double minLng = points.first.longitude; - double maxLng = points.first.longitude; + // Fallback to basic markers if polylines are empty + if (allPoints.isEmpty) { + allPoints.addAll([ + LatLng(latPassenger, lngPassenger), + LatLng(latDestination, lngDestination), + ]); + } - for (var p in points) { + if (allPoints.isEmpty) return; + + double minLat = allPoints.first.latitude; + double maxLat = allPoints.first.latitude; + double minLng = allPoints.first.longitude; + double maxLng = allPoints.first.longitude; + + for (var p in allPoints) { if (p.latitude < minLat) minLat = p.latitude; if (p.latitude > maxLat) maxLat = p.latitude; if (p.longitude < minLng) minLng = p.longitude; if (p.longitude > maxLng) maxLng = p.longitude; } + // Add some padding to the bounds + double latPad = (maxLat - minLat) * 0.25; + double lngPad = (maxLng - minLng) * 0.2; + mapController!.animateCamera(CameraUpdate.newLatLngBounds( LatLngBounds( - southwest: LatLng(minLat, minLng), - northeast: LatLng(maxLat, maxLng), + southwest: LatLng(minLat - latPad, minLng - lngPad), + northeast: LatLng(maxLat + latPad, maxLng + lngPad), ), - 100.0, )); } @@ -357,15 +416,15 @@ class OrderRequestController extends GetxController // حماية إذا لم يتم جلب الإحداثيات if (latPassenger == 0 || latDestination == 0) return; - final BitmapDescriptor pickupIcon = + final InlqBitmap pickupIcon = await MarkerGenerator.createCustomMarkerBitmap( title: paxTime, subtitle: paxDist, - color: Colors.green.shade700, + color: Colors.amber.shade900, // Matching the amber pickup line iconData: Icons.person_pin_circle, ); - final BitmapDescriptor dropoffIcon = + final InlqBitmap dropoffIcon = await MarkerGenerator.createCustomMarkerBitmap( title: destTime ?? totalTripDuration, subtitle: destDist ?? totalTripDistance, @@ -411,10 +470,9 @@ class OrderRequestController extends GetxController points: [driverLatLng, LatLng(latPassenger, lngPassenger)], color: Colors.grey, width: 2, - patterns: [PatternItem.dash(10), PatternItem.gap(10)], )); - zoomToFitRide(driverLatLng); + zoomToFitRide(); } update(); @@ -435,8 +493,9 @@ class OrderRequestController extends GetxController } } - void onMapCreated(GoogleMapController controller) { + void onMapCreated(IntaleqMapController controller) { mapController = controller; + _calculateFullJourney(); } // --- قبول الطلب وإدارة التايمر --- @@ -488,10 +547,13 @@ class OrderRequestController extends GetxController // 1. حذف الإشعار من شريط التنبيهات فوراً NotificationController().cancelOrderNotification(); if (Get.isSnackbarOpen) Get.closeCurrentSnackbar(); - if (Get.isDialogOpen ?? false) Get.back(); + + // إغلاق أي ديالوج مفتوح قسرياً + if (Get.isDialogOpen ?? false) { + navigatorKey.currentState?.pop(); + } Get.back(); - Get.snackbar("تنبيه", "تم قبول الطلب من قبل سائق آخر", - backgroundColor: Colors.orange, colorText: Colors.white); + mySnackbarInfo("The order has been accepted by another driver.".tr); } }); } @@ -546,9 +608,10 @@ class OrderRequestController extends GetxController if (isFailure) { // ⛔ حالة الفشل: الطلب مأخوذ - MyDialog().getDialog("عذراً، الطلب أخذه سائق آخر.", '', () { - Get.back(); // إغلاق الديالوج - Get.back(); // العودة للصفحة الرئيسية (إغلاق صفحة الطلب) + MyDialog().getDialog( + "Sorry, the order was taken by another driver.".tr, '', () { + // بما أن MyDialog يغلق نفسه الآن، نحتاج Get.back() واحدة فقط لإغلاق صفحة الطلب + Get.back(); }); } else { // ✅ حالة النجاح @@ -611,7 +674,37 @@ class OrderRequestController extends GetxController audioPlayer.dispose(); WidgetsBinding.instance.removeObserver(this); _timer?.cancel(); - mapController?.dispose(); + // mapController?.dispose(); super.onClose(); } + + List controllerDecodePolyline(String encoded) { + List points = []; + int index = 0, len = encoded.length; + int lat = 0, lng = 0; + + while (index < len) { + int b, shift = 0, result = 0; + do { + b = encoded.codeUnitAt(index++) - 63; + result |= (b & 0x1f) << shift; + shift += 5; + } while (b >= 0x20); + int dlat = ((result & 1) != 0 ? ~(result >> 1) : (result >> 1)); + lat += dlat; + + shift = 0; + result = 0; + do { + b = encoded.codeUnitAt(index++) - 63; + result |= (b & 0x1f) << shift; + shift += 5; + } while (b >= 0x20); + int dlng = ((result & 1) != 0 ? ~(result >> 1) : (result >> 1)); + lng += dlng; + + points.add(LatLng(lat / 1E5, lng / 1E5)); + } + return points; + } } diff --git a/lib/controller/home/navigation/decode_polyline_isolate.dart b/lib/controller/home/navigation/decode_polyline_isolate.dart index 98348dc..406c3e3 100644 --- a/lib/controller/home/navigation/decode_polyline_isolate.dart +++ b/lib/controller/home/navigation/decode_polyline_isolate.dart @@ -1,16 +1,6 @@ -import 'package:google_maps_flutter/google_maps_flutter.dart'; - -// تم تعديل الدالة لتقبل وسيط من نوع `dynamic` لحل مشكلة عدم تطابق الأنواع مع دالة `compute`. -// هذه الدالة لا تزال تعمل كدالة من المستوى الأعلى (Top-level function) -// وهو شرط أساسي لاستخدامها مع دالة compute. -List decodePolylineIsolate(dynamic encodedMessage) { - // التأكد من أن الرسالة المستقبلة هي من نوع String - if (encodedMessage is! String) { - // إرجاع قائمة فارغة أو إظهار خطأ إذا كان النوع غير صحيح - return []; - } - final String encoded = encodedMessage; +import 'package:intaleq_maps/intaleq_maps.dart'; +List decodePolylineIsolate(String encoded) { List points = []; int index = 0, len = encoded.length; int lat = 0, lng = 0; diff --git a/lib/controller/home/navigation/navigation_controller.dart b/lib/controller/home/navigation/navigation_controller.dart index 8e4b79e..02e4011 100644 --- a/lib/controller/home/navigation/navigation_controller.dart +++ b/lib/controller/home/navigation/navigation_controller.dart @@ -1,54 +1,87 @@ import 'dart:async'; import 'dart:convert'; import 'dart:math'; +import 'package:sefer_driver/views/widgets/error_snakbar.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; import 'package:geolocator/geolocator.dart'; import 'package:get/get.dart'; -import 'package:google_maps_flutter/google_maps_flutter.dart'; +import 'package:intaleq_maps/intaleq_maps.dart'; import 'package:http/http.dart' as http; -import 'package:sefer_driver/constant/colors.dart'; +import 'package:sefer_driver/constant/box_name.dart'; +import 'package:sefer_driver/constant/links.dart'; import 'package:sefer_driver/controller/functions/crud.dart'; +import 'package:sefer_driver/controller/functions/tts.dart'; +import 'package:sefer_driver/controller/home/navigation/decode_polyline_isolate.dart'; +import 'package:sefer_driver/env/env.dart'; +import 'package:sefer_driver/main.dart'; +import 'package:sefer_driver/print.dart'; +import 'dart:ui'; +import 'package:sefer_driver/services/offline_map_service.dart'; -import '../../../constant/box_name.dart'; -import '../../../constant/country_polygons.dart'; -import '../../../constant/links.dart'; -import '../../../env/env.dart'; -import '../../../main.dart'; -import '../../../print.dart'; -import '../../functions/tts.dart'; -import 'decode_polyline_isolate.dart'; +class RouteData { + final List coordinates; + final List> steps; + final double distanceM; + final double durationS; + final String points; + + RouteData({ + required this.coordinates, + required this.steps, + required this.distanceM, + required this.durationS, + required this.points, + }); +} + +class NavigationController extends GetxController + with GetSingleTickerProviderStateMixin { + static const Duration _recordInterval = Duration(seconds: 4); + static const Duration _uploadInterval = Duration(minutes: 2); + static const double _minMoveToRecord = 10.0; + static const double _minMoveToProcess = 2.0; + static const double _offRouteThresholdM = 25.0; + static const int _offRouteTriggerSeconds = 6; -class NavigationController extends GetxController { - // --- متغيرات الحالة العامة --- bool isLoading = false; - GoogleMapController? mapController; + IntaleqMapController? mapController; + bool isStyleLoaded = false; final TextEditingController placeDestinationController = TextEditingController(); - // --- متغيرات الخريطة والموقع --- LatLng? myLocation; - double heading = 0.0; - final Set markers = {}; - final Set polylines = {}; - BitmapDescriptor carIcon = BitmapDescriptor.defaultMarker; - BitmapDescriptor destinationIcon = BitmapDescriptor.defaultMarker; + double _oldHeading = 0.0; + double _targetHeading = 0.0; + double _smoothedHeading = 0.0; - // --- متغيرات النظام الذكي للتحديث --- - Timer? _locationUpdateTimer; - // تحديث كل ثانية لضمان سلاسة الحركة - Duration _currentUpdateInterval = const Duration(seconds: 1); - LatLng? _lastRecordedLocation; + AnimationController? _animController; + LatLng? _oldLoc; + LatLng? _targetLoc; + + double currentSpeed = 0.0; + double totalDistance = 0.0; + + Set markers = {}; + Set polylines = {}; + Set circles = {}; + Set polygons = {}; + + StreamSubscription? _locationStreamSubscription; + LatLng? _lastProcessedLocation; - // --- متغيرات البحث --- List placesDestination = []; Timer? _debounce; - // --- متغيرات الملاحة (Navigation) --- - LatLng? _finalDestination; - List> routeSteps = []; + // Alternative route handling + bool _hasAlternativeRoutes = false; + DateTime? _lastAutoRerouteTime; + LatLng? _finalDestination; + LatLng? _intermediateStop; + List> routeSteps = []; List _fullRouteCoordinates = []; int _lastTraveledIndexInFullRoute = 0; @@ -56,63 +89,356 @@ class NavigationController extends GetxController { String currentInstruction = ""; String nextInstruction = ""; int currentStepIndex = 0; - - double currentSpeed = 0.0; String distanceToNextStep = ""; + String totalDistanceRemaining = ""; + String estimatedTimeRemaining = ""; + dynamic currentManeuverModifier = 0; + String arrivalTime = "--:--"; - // الرابط الجديد - static final String _routeApiBaseUrl = "${AppLink.mapOSM}/route/v1/driving"; + double _routeTotalDistanceM = 0; + double _routeTotalDurationS = 0; + + bool isNavigating = false; + bool isMuted = false; + String distanceWithUnit = ""; + bool _cameraLockedToUser = true; + bool _mapReady = false; + + bool isSelectingPlaceLocation = false; + + void togglePlaceSelectionMode() { + isSelectingPlaceLocation = !isSelectingPlaceLocation; + update(); + } + + Future submitNewPlace(String name, String category) async { + if (mapController == null || name.isEmpty || category.isEmpty) return; + + final LatLng pickedPos = mapController!.cameraPosition!.target; + + isLoading = true; + update(); + + final String country = + box.read(BoxName.countryCode) == 'SY' ? 'syria' : 'jordan'; + + final Map payload = { + 'name': name, + 'category': category, + 'lat': pickedPos.latitude, + 'lng': pickedPos.longitude, + 'country': country, + }; + + try { + final response = await CRUD().postMapSaas( + link: AppLink.mapSaasPlaces, + payload: payload, + ); + + isLoading = false; + if (response != null) { + HapticFeedback.lightImpact(); + mySnackbarSuccess('Place added successfully! Thanks for your contribution.'.tr); + isSelectingPlaceLocation = false; + } else { + mySnackbarWarning('Failed to add place. Please try again later.'.tr); + } + update(); + } catch (e) { + isLoading = false; + mySnackbarWarning('An error occurred while connecting to the server.'.tr); + update(); + } + } + + DateTime? _offRouteStartTime; + bool _autoRecalcInProgress = false; + + final List> _trackBuffer = []; + Timer? _recordTimer; + Timer? _uploadBatchTimer; + LatLng? _lastBufferedLocation; + DateTime? _lastBufferedTime; + LatLng? _lastDistanceLocation; + + List routes = []; + int selectedRouteIndex = 0; + + List> recentLocations = []; + + double get _targetZoom { + if (currentSpeed < 15) return 19.0; + if (currentSpeed < 40) return 18.0; + if (currentSpeed < 70) return 17.0; + if (currentSpeed < 100) return 16.0; + return 15.0; + } + + double get _targetTilt { + if (currentSpeed < 10) return 0.0; + if (currentSpeed < 40) return 40.0; + return 55.0; + } + + static final List> placeCategories = [ + { + 'id': 'restaurant', + 'en': 'Restaurant', + 'ar': 'مطعم', + 'icon': 'restaurant' + }, + {'id': 'cafe', 'en': 'Cafe', 'ar': 'مقهى', 'icon': 'coffee'}, + { + 'id': 'supermarket', + 'en': 'Supermarket', + 'ar': 'سوبر ماركت', + 'icon': 'shopping_basket' + }, + { + 'id': 'pharmacy', + 'en': 'Pharmacy', + 'ar': 'صيدلية', + 'icon': 'local_pharmacy' + }, + { + 'id': 'gas_station', + 'en': 'Gas Station', + 'ar': 'محطة وقود', + 'icon': 'local_gas_station' + }, + {'id': 'atm', 'en': 'ATM', 'ar': 'صراف آلي', 'icon': 'atm'}, + {'id': 'bank', 'en': 'Bank', 'ar': 'بنك', 'icon': 'account_balance'}, + {'id': 'mosque', 'en': 'Mosque', 'ar': 'مسجد', 'icon': 'mosque'}, + { + 'id': 'hospital', + 'en': 'Hospital', + 'ar': 'مستشفى', + 'icon': 'local_hospital' + }, + {'id': 'school', 'en': 'School', 'ar': 'مدرسة', 'icon': 'school'}, + { + 'id': 'university', + 'en': 'University', + 'ar': 'جامعة', + 'icon': 'account_balance' + }, + {'id': 'park', 'en': 'Park', 'ar': 'منتزه', 'icon': 'park'}, + {'id': 'hotel', 'en': 'Hotel', 'ar': 'فندق', 'icon': 'hotel'}, + { + 'id': 'mall', + 'en': 'Shopping Mall', + 'ar': 'مركز تسوق', + 'icon': 'shopping_mall' + }, + {'id': 'gym', 'en': 'Gym', 'ar': 'نادي رياضي', 'icon': 'fitness_center'}, + { + 'id': 'salon', + 'en': 'Beauty Salon', + 'ar': 'صالون تجميل', + 'icon': 'content_cut' + }, + {'id': 'bakery', 'en': 'Bakery', 'ar': 'مخبز', 'icon': 'bakery_dining'}, + { + 'id': 'laundry', + 'ar': 'مصبغة', + 'en': 'Laundry', + 'icon': 'local_laundry_service' + }, + { + 'id': 'car_repair', + 'en': 'Car Repair', + 'ar': 'تصليح سيارات', + 'icon': 'build' + }, + { + 'id': 'government', + 'en': 'Government Office', + 'ar': 'دائرة حكومية', + 'icon': 'gavel' + }, + ]; + + IconData get currentManeuverIcon { + switch (currentManeuverModifier) { + case 4: // Arrive + return Icons.place_rounded; + case 6: // Roundabout + return Icons.roundabout_right_rounded; + case 2: // Right + return Icons.turn_right_rounded; + case 3: // Slight Right + return Icons.turn_slight_right_rounded; + case -2: // Left + return Icons.turn_left_rounded; + case -1: // Slight Left + return Icons.turn_slight_left_rounded; + case 7: // Keep Right + return Icons.turn_right_rounded; + case -7: // Keep Left + return Icons.turn_left_rounded; + case 0: // Straight + return Icons.straight_rounded; + default: + return Icons.straight_rounded; + } + } + + void toggleMute() { + isMuted = !isMuted; + update(); + } @override void onInit() { super.onInit(); + _animController = AnimationController( + vsync: this, duration: const Duration(milliseconds: 1000)); + _animController!.addListener(() { + if (_oldLoc != null && _targetLoc != null && _mapReady) { + final t = _animController!.value; + final lat = lerpDouble(_oldLoc!.latitude, _targetLoc!.latitude, t)!; + final lng = lerpDouble(_oldLoc!.longitude, _targetLoc!.longitude, t)!; + myLocation = LatLng(lat, lng); + _smoothedHeading = _lerpAngle(_oldHeading, _targetHeading, t); + + if (isStyleLoaded) { + if (_cameraLockedToUser) { + animateCameraToPosition(myLocation!, + bearing: _smoothedHeading, + zoom: isNavigating ? _targetZoom : 17.0, + tilt: isNavigating ? _targetTilt : 0.0); + } + } + } + }); _initialize(); } Future _initialize() async { - await _loadCustomIcons(); + _loadRecentLocations(); await _getCurrentLocationAndStartUpdates(); - if (!Get.isRegistered()) { - Get.put(TextToSpeechController()); + } + + void _loadRecentLocations() { + final dynamic stored = box.read(BoxName.recentLocations); + if (stored != null) { + try { + List parsed; + if (stored is String) { + parsed = jsonDecode(stored); + } else if (stored is List) { + parsed = stored; + } else { + parsed = []; + } + + recentLocations = parsed + .map((e) => Map.from(e)) + .toList() + .reversed // Most recent first + .take(3) + .toList(); + } catch (e) { + Log.print("Error decoding recent locations: $e"); + recentLocations = []; + } + } else { + recentLocations = []; } + update(); } @override void onClose() { - _locationUpdateTimer?.cancel(); - mapController?.dispose(); + _locationStreamSubscription?.cancel(); + _recordTimer?.cancel(); + _uploadBatchTimer?.cancel(); _debounce?.cancel(); + _animController?.dispose(); + mapController = null; placeDestinationController.dispose(); + _flushBufferToServer(); super.onClose(); } - // ======================================================================= - // ✅ دوال الخريطة الأساسية - // ======================================================================= - - void onMapCreated(GoogleMapController controller) { + void onMapCreated(IntaleqMapController controller) async { + Log.print("DEBUG: NavigationController.onMapCreated called"); mapController = controller; - if (myLocation != null) { - animateCameraToPosition(myLocation!); + await onStyleLoaded(); + } + + Future onStyleLoaded() async { + Log.print("DEBUG: NavigationController.onStyleLoaded called"); + isStyleLoaded = true; + await _loadCustomIcons(); + + WidgetsBinding.instance.addPostFrameCallback((_) async { + await Future.delayed(const Duration(milliseconds: 300)); + if (!_mapReady) { + Log.print("DEBUG: NavigationController setting _mapReady = true"); + _mapReady = true; + if (myLocation != null) { + Log.print("DEBUG: Animating camera to initial location: $myLocation"); + animateCameraToPosition(myLocation!); + } + if (_fullRouteCoordinates.isNotEmpty) { + Log.print("DEBUG: Updating initial polylines"); + _updatePolylinesSets([], _fullRouteCoordinates); + } + } + }); + } + + void onMapTapped(Point point, LatLng tappedPoint) { + if (isNavigating || routes.isEmpty) return; + + int? bestIndex; + double minDistance = 100.0; + + for (int i = 0; i < routes.length; i++) { + for (var coord in routes[i].coordinates) { + final dist = Geolocator.distanceBetween( + tappedPoint.latitude, + tappedPoint.longitude, + coord.latitude, + coord.longitude, + ); + if (dist < minDistance) { + minDistance = dist; + bestIndex = i; + } + } + } + + if (bestIndex != null && bestIndex != selectedRouteIndex) { + HapticFeedback.selectionClick(); + selectRoute(bestIndex); } } - Future onMapLongPressed(LatLng tappedPoint) async { + Future onMapLongPressed(Point point, LatLng tappedPoint) async { + HapticFeedback.mediumImpact(); Get.dialog( AlertDialog( - title: const Text('بدء الملاحة؟'), - content: const Text('هل تريد الذهاب إلى هذا الموقع المحدد؟'), - actionsAlignment: MainAxisAlignment.spaceBetween, + shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(20)), + title: Text('Start Navigation?'.tr, + style: const TextStyle(fontWeight: FontWeight.bold)), + content: Text('Do you want to go to this location?'.tr), actions: [ TextButton( - child: const Text('إلغاء', style: TextStyle(color: Colors.grey)), - onPressed: () => Get.back(), - ), - TextButton( - child: const Text('اذهب الآن'), + child: Text('Cancel'.tr, style: const TextStyle(color: Colors.grey)), + onPressed: () => Get.back()), + ElevatedButton( + style: ElevatedButton.styleFrom( + backgroundColor: const Color(0xFF0D47A1), + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(12))), + child: + Text('Go Now'.tr, style: const TextStyle(color: Colors.white)), onPressed: () { Get.back(); - startNavigationTo(tappedPoint, infoWindowTitle: 'الموقع المحدد'); + startNavigationTo(tappedPoint, infoWindowTitle: 'Selected Location'.tr); }, ), ], @@ -120,388 +446,591 @@ class NavigationController extends GetxController { ); } - // ======================================================================= - // ١. النظام الذكي للموقع (Optimized) - // ======================================================================= - Future _getCurrentLocationAndStartUpdates() async { try { - Position position = await Geolocator.getCurrentPosition( + Log.print("DEBUG: Getting initial location..."); + final position = await Geolocator.getCurrentPosition( desiredAccuracy: LocationAccuracy.high); myLocation = LatLng(position.latitude, position.longitude); - getLocationArea(myLocation!.latitude, myLocation!.longitude); + Log.print("DEBUG: Initial location acquired: $myLocation"); + _targetHeading = position.heading; + _oldHeading = position.heading; + _smoothedHeading = position.heading; update(); - animateCameraToPosition(myLocation!); - _startLocationTimer(); + if (isStyleLoaded) animateCameraToPosition(myLocation!); + _startLocationStream(); + _startBatchTimers(); } catch (e) { - Log.print("Error getting initial location: $e"); + Log.print("DEBUG: Error getting initial location: $e"); } } - void _startLocationTimer() { - _locationUpdateTimer?.cancel(); - _locationUpdateTimer = Timer.periodic(_currentUpdateInterval, (timer) { - _updateLocationAndProcess(); + void _startLocationStream() { + _locationStreamSubscription?.cancel(); + _locationStreamSubscription = Geolocator.getPositionStream( + locationSettings: const LocationSettings( + accuracy: LocationAccuracy.high, + distanceFilter: 2, + ), + ).listen( + (Position position) { + _handleLocationUpdate(position); + }, + onError: (error) { + Log.print("DEBUG: Location stream error: $error"); + }, + ); + } + + bool _isProcessing = false; + Future _handleLocationUpdate(Position position) async { + if (_isProcessing) return; + _isProcessing = true; + + try { + final newLoc = LatLng(position.latitude, position.longitude); + currentSpeed = position.speed * 3.6; + + if (_lastProcessedLocation != null) { + final d = Geolocator.distanceBetween( + newLoc.latitude, + newLoc.longitude, + _lastProcessedLocation!.latitude, + _lastProcessedLocation!.longitude, + ); + if (d < _minMoveToProcess) { + _isProcessing = false; + return; + } + } + + Log.print( + "DEBUG: Location update - Speed: ${currentSpeed.toStringAsFixed(1)} km/h, Loc: $newLoc"); + + if (_lastDistanceLocation != null) { + final d = Geolocator.distanceBetween( + _lastDistanceLocation!.latitude, + _lastDistanceLocation!.longitude, + newLoc.latitude, + newLoc.longitude, + ); + if (d > 5.0) totalDistance += d; + } + _lastDistanceLocation = newLoc; + + _oldLoc = myLocation ?? newLoc; + _targetLoc = newLoc; + + _oldHeading = _smoothedHeading; + if (currentSpeed > 1.5 && _oldLoc != null) { + _targetHeading = Geolocator.bearingBetween( + _oldLoc!.latitude, + _oldLoc!.longitude, + _targetLoc!.latitude, + _targetLoc!.longitude, + ); + } else { + _targetHeading = position.heading; + } + + _animController?.forward(from: 0.0); + _lastProcessedLocation = newLoc; + + if (_fullRouteCoordinates.isNotEmpty) { + _updateTraveledPolylineSmart(newLoc); + _checkNavigationStep(newLoc); + _recomputeETA(); + _checkOffRoute(newLoc); + } + update(); + } catch (e) { + Log.print("DEBUG: Error in _handleLocationUpdate: $e"); + } finally { + _isProcessing = false; + } + } + + double _lerpAngle(double from, double to, double t) { + final double diff = ((to - from + 540.0) % 360.0) - 180.0; + return (from + diff * t + 360.0) % 360.0; + } + + void _checkOffRoute(LatLng pos) { + if (_autoRecalcInProgress || isLoading) return; + if (_fullRouteCoordinates.isEmpty) return; + + const int searchWindow = 80; + final int start = _lastTraveledIndexInFullRoute; + final int end = min(start + searchWindow, _fullRouteCoordinates.length); + + double minDist = double.infinity; + for (int i = start; i < end; i++) { + final d = Geolocator.distanceBetween( + pos.latitude, + pos.longitude, + _fullRouteCoordinates[i].latitude, + _fullRouteCoordinates[i].longitude, + ); + if (d < minDist) minDist = d; + } + + if (minDist > _offRouteThresholdM) { + if (_offRouteStartTime == null) { + _offRouteStartTime = DateTime.now(); + } else { + final elapsed = + DateTime.now().difference(_offRouteStartTime!).inSeconds; + if (elapsed >= _offRouteTriggerSeconds) { + _offRouteStartTime = null; + _autoRecalcInProgress = true; + _smartRecalculateRoute(pos); + } + } + } else { + _offRouteStartTime = null; + } + } + + Future _smartRecalculateRoute(LatLng currentPos) async { + try { + if (routes.isNotEmpty && selectedRouteIndex < routes.length - 1) { + final nextIndex = selectedRouteIndex + 1; + final nextRoute = routes[nextIndex]; + + double minDist = double.infinity; + for (var coord in nextRoute.coordinates) { + final d = Geolocator.distanceBetween( + currentPos.latitude, + currentPos.longitude, + coord.latitude, + coord.longitude, + ); + if (d < minDist) minDist = d; + } + + if (minDist < 100) { + selectRoute(nextIndex); + Log.print("DEBUG: Switched to alternative route due to deviation"); + _autoRecalcInProgress = false; + return; + } + } + + if (_finalDestination != null) { + await recalculateRoute(); + } + _autoRecalcInProgress = false; + } catch (e) { + Log.print("DEBUG: Error in smart recalculate: $e"); + _autoRecalcInProgress = false; + } + } + + void _startBatchTimers() { + _recordTimer?.cancel(); + _uploadBatchTimer?.cancel(); + _recordTimer = Timer.periodic(_recordInterval, (_) => _recordToBuffer()); + _uploadBatchTimer = + Timer.periodic(_uploadInterval, (_) => _flushBufferToServer()); + } + + void _recordToBuffer() { + if (myLocation == null || + (myLocation!.latitude == 0 && myLocation!.longitude == 0)) { + return; + } + final now = DateTime.now(); + final distFromLast = _lastBufferedLocation == null + ? 999.0 + : Geolocator.distanceBetween( + _lastBufferedLocation!.latitude, + _lastBufferedLocation!.longitude, + myLocation!.latitude, + myLocation!.longitude); + final bool moved = distFromLast > _minMoveToRecord && currentSpeed > 0.5; + final bool timeForced = _lastBufferedTime == null || + now.difference(_lastBufferedTime!).inSeconds >= 60; + if (!moved && !timeForced) return; + + _lastBufferedLocation = myLocation; + _lastBufferedTime = now; + + _trackBuffer.add({ + 'lat': double.parse(myLocation!.latitude.toStringAsFixed(6)), + 'lng': double.parse(myLocation!.longitude.toStringAsFixed(6)), + 'spd': double.parse(currentSpeed.toStringAsFixed(1)), + 'head': _smoothedHeading.toStringAsFixed(0), + 'dist': double.parse(totalDistance.toStringAsFixed(1)), + 'ts': now.toIso8601String(), }); } - Future _updateLocationAndProcess() async { + Future _flushBufferToServer() async { + if (_trackBuffer.isEmpty) return; + final batch = List>.from(_trackBuffer); + _trackBuffer.clear(); + final String driverId = (box.read(BoxName.driverID) ?? '').toString(); + try { - final position = await Geolocator.getCurrentPosition( - desiredAccuracy: LocationAccuracy.high); - - final newLoc = LatLng(position.latitude, position.longitude); - - // فلتر الاهتزاز (Jitter Filter) - if (_lastRecordedLocation != null) { - double dist = Geolocator.distanceBetween( - newLoc.latitude, - newLoc.longitude, - _lastRecordedLocation!.latitude, - _lastRecordedLocation!.longitude); - if (dist < 2.0) return; // تجاهل الحركة الأقل من 2 متر - } - - myLocation = newLoc; - _lastRecordedLocation = newLoc; - heading = position.heading; - currentSpeed = position.speed * 3.6; - - _updateCarMarker(); - - if (polylines.isNotEmpty && _fullRouteCoordinates.isNotEmpty) { - animateCameraToPosition( - myLocation!, - bearing: heading, - zoom: 18.0, - ); - - _updateTraveledPolylineSmart(myLocation!); - _checkNavigationStep(myLocation!); - } - - update(); + await CRUD().post( + link: '${AppLink.locationServerSide}/add_batch.php', + payload: { + 'driver_id': driverId, + 'batch_data': jsonEncode(batch), + 'session_dist': totalDistance.toStringAsFixed(1), + }, + ); } catch (e) { - // Log.print("Loc update error: $e"); + _trackBuffer.insertAll(0, batch); } } - void _updateCarMarker() { - if (myLocation == null) return; - markers.removeWhere((m) => m.markerId.value == 'myLocation'); - markers.add( - Marker( - markerId: const MarkerId('myLocation'), - position: myLocation!, - icon: carIcon, - rotation: heading, - anchor: const Offset(0.5, 0.5), - flat: true, - zIndex: 2, - ), - ); - } - void animateCameraToPosition(LatLng position, - {double zoom = 17.0, double bearing = 0.0}) { - mapController?.animateCamera( - CameraUpdate.newCameraPosition( - CameraPosition( - target: position, zoom: zoom, bearing: bearing, tilt: 45.0), - ), - ); + {double? zoom, double bearing = 0.0, double tilt = 0.0}) { + if (!_mapReady || mapController == null) return; + mapController!.animateCamera(CameraUpdate.newCameraPosition(CameraPosition( + target: position, + zoom: zoom ?? (isNavigating ? _targetZoom : 16.0), + bearing: bearing, + tilt: tilt))); } - // ======================================================================= - // ٢. خوارزمية رسم المسار الذكية (Sliding Window) - مخففة للجهاز - // ======================================================================= + Future _safeAnimateCameraBounds(LatLngBounds? bounds, + {double left = 60, + double top = 60, + double right = 60, + double bottom = 60}) async { + if (bounds == null || mapController == null) return; + try { + final latSpan = + (bounds.northeast.latitude - bounds.southwest.latitude).abs(); + final lngSpan = + (bounds.northeast.longitude - bounds.southwest.longitude).abs(); + if (latSpan < 0.0001 && lngSpan < 0.0001) { + mapController + ?.animateCamera(CameraUpdate.newLatLngZoom(bounds.northeast, 16)); + return; + } + await Future.delayed(const Duration(milliseconds: 200)); + await mapController?.animateCamera(CameraUpdate.newLatLngBounds(bounds, + left: left, top: top, right: right, bottom: bottom)); + } catch (e) { + try { + await mapController + ?.animateCamera(CameraUpdate.newLatLngZoom(bounds!.northeast, 14)); + } catch (_) {} + } + } + + void onUserPanned() { + _cameraLockedToUser = false; + update(); + } + + void relockCameraToUser() { + _cameraLockedToUser = true; + if (myLocation != null) { + animateCameraToPosition(myLocation!, + bearing: _smoothedHeading, zoom: _targetZoom, tilt: _targetTilt); + } + update(); + } + + bool get isCameraLocked => _cameraLockedToUser; void _updateTraveledPolylineSmart(LatLng currentPos) { if (_fullRouteCoordinates.isEmpty) return; + const int searchWindow = 60; + final int startIndex = _lastTraveledIndexInFullRoute; + final int endIndex = + min(startIndex + searchWindow, _fullRouteCoordinates.length); - // نبحث فقط في الـ 60 نقطة القادمة لتخفيف الحمل على المعالج - int searchWindow = 60; - int startIndex = _lastTraveledIndexInFullRoute; - int endIndex = min(startIndex + searchWindow, _fullRouteCoordinates.length); - - double minDistance = double.infinity; - int closestIndex = startIndex; + double minDist = double.infinity; + int closestIdx = startIndex; bool foundCloser = false; for (int i = startIndex; i < endIndex; i++) { - final point = _fullRouteCoordinates[i]; - final dist = Geolocator.distanceBetween(currentPos.latitude, - currentPos.longitude, point.latitude, point.longitude); - - if (dist < minDistance) { - minDistance = dist; - closestIndex = i; + final d = Geolocator.distanceBetween( + currentPos.latitude, + currentPos.longitude, + _fullRouteCoordinates[i].latitude, + _fullRouteCoordinates[i].longitude, + ); + if (d < minDist) { + minDist = d; + closestIdx = i; foundCloser = true; } } - // شرط التحديث: وجدنا نقطة أقرب، وهي أمامنا (وليست خلفنا)، والمسافة منطقية if (foundCloser && - minDistance < 50 && - closestIndex > _lastTraveledIndexInFullRoute) { - _lastTraveledIndexInFullRoute = closestIndex; - - // استخدام sublist وهو سريع جداً في Dart - final remaining = - _fullRouteCoordinates.sublist(_lastTraveledIndexInFullRoute); - final traveled = - _fullRouteCoordinates.sublist(0, _lastTraveledIndexInFullRoute + 1); - - _updatePolylinesSets(traveled, remaining); + minDist < 50 && + closestIdx > _lastTraveledIndexInFullRoute) { + _lastTraveledIndexInFullRoute = closestIdx; + _updatePolylinesSets(_fullRouteCoordinates.sublist(0, closestIdx + 1), + _fullRouteCoordinates.sublist(closestIdx)); } } - void _updatePolylinesSets(List traveled, List remaining) { - // إزالة الخطوط القديمة وإضافة الجديدة بدلاً من تحديث الكل - polylines.removeWhere((p) => p.polylineId.value == 'remaining_route'); - polylines.removeWhere((p) => p.polylineId.value == 'traveled_route'); + Future _updatePolylinesSets( + List traveled, List remaining) async { + Set newPolylines = {}; - // المسار المتبقي (أزرق واضح) - polylines.add(Polyline( - polylineId: const PolylineId('remaining_route'), - points: remaining, - color: const Color(0xFF0D47A1), - width: 6, - startCap: Cap.roundCap, - endCap: Cap.roundCap, - jointType: JointType.round, - )); - - // المسار المقطوع (رمادي) - polylines.add(Polyline( - polylineId: const PolylineId('traveled_route'), - points: traveled, - color: Colors.grey.shade400, - width: 6, - jointType: JointType.round, - )); - } - - // ======================================================================= - // ٣. التحكم في التوجيهات - // ======================================================================= - - void _checkNavigationStep(LatLng currentPosition) { - if (routeSteps.isEmpty || currentStepIndex >= routeSteps.length) return; - - final step = routeSteps[currentStepIndex]; - // في OSRM، يجب التأكد من وجود maneuver location - final maneuver = step['maneuver']; - final List location = maneuver['location']; // [lng, lat] - final endLatLng = LatLng(location[1], location[0]); - - final distance = Geolocator.distanceBetween( - currentPosition.latitude, - currentPosition.longitude, - endLatLng.latitude, - endLatLng.longitude, - ); - - distanceToNextStep = distance > 1000 - ? "${(distance / 1000).toStringAsFixed(1)} كم" - : "${distance.toStringAsFixed(0)} متر"; - - // نطق التعليمات قبل 50 متر - if (distance < 50 && - !_nextInstructionSpoken && - nextInstruction.isNotEmpty) { - Get.find().speakText(nextInstruction); - _nextInstructionSpoken = true; + for (int i = 0; i < routes.length; i++) { + if (i == selectedRouteIndex) continue; + newPolylines.add(Polyline( + polylineId: PolylineId('alt_$i'), + points: routes[i].coordinates, + color: const Color(0xFFB0BEC5).withOpacity(0.8), + width: 6, + )); } - // الانتقال للخطوة التالية عند الاقتراب (20 متر) - if (distance < 20) { - _advanceStep(); + if (remaining.isNotEmpty) { + newPolylines.add(Polyline( + polylineId: const PolylineId('remaining'), + points: remaining, + color: const Color(0xFF00E5FF), + width: 8, + )); } - } - void _advanceStep() { - currentStepIndex++; - if (currentStepIndex < routeSteps.length) { - currentInstruction = routeSteps[currentStepIndex]['instruction_text']; - - // تجهيز التعليمات القادمة - if ((currentStepIndex + 1) < routeSteps.length) { - nextInstruction = - "ثم ${routeSteps[currentStepIndex + 1]['instruction_text']}"; - } else { - nextInstruction = "ستصل إلى وجهتك"; - } - - _nextInstructionSpoken = false; - update(); - } else { - _finishNavigation(); + if (traveled.isNotEmpty) { + newPolylines.add(Polyline( + polylineId: const PolylineId('traveled'), + points: traveled, + color: const Color(0xFFBDBDBD).withOpacity(0.6), + width: 5, + )); } - } - void _finishNavigation() { - currentInstruction = "لقد وصلت إلى وجهتك"; - nextInstruction = ""; - distanceToNextStep = ""; - Get.find().speakText(currentInstruction); + polylines = newPolylines; update(); } - // ======================================================================= - // ٤. جلب المسار (🔥 تم التحديث للرابط الجديد 🔥) - // ======================================================================= + void selectRoute(int index) { + if (index < 0 || index >= routes.length) return; + selectedRouteIndex = index; + final r = routes[index]; + _fullRouteCoordinates = r.coordinates; + routeSteps = r.steps; + _routeTotalDistanceM = r.distanceM; + _routeTotalDurationS = r.durationS; + + _lastTraveledIndexInFullRoute = 0; + _recomputeETA(); + _updatePolylinesSets([], _fullRouteCoordinates); + update(); + } + + void goToFavorite(String type) { + LatLng? dest; + switch (type) { + case 'home': + dest = getHomeLatLng(); + break; + case 'work': + dest = getWorkLatLng(); + break; + case 'airport': + dest = getAirportLatLng(); + break; + } + + if (dest != null && myLocation != null) { + getRoute(myLocation!, dest); + } else { + mySnackbarWarning(box.read(BoxName.lang) == 'ar' ? 'الموقع غير متاح حالياً.' : 'Location not available.'); + } + } + + LatLng? getHomeLatLng() { + final dynamic stored = box.read(BoxName.addHome); + if (stored != null && stored is String && stored.contains(',')) { + final parts = stored.split(','); + return LatLng(double.parse(parts[0]), double.parse(parts[1])); + } + return null; + } + + LatLng? getWorkLatLng() { + final dynamic stored = box.read(BoxName.addWork); + if (stored != null && stored is String && stored.contains(',')) { + final parts = stored.split(','); + return LatLng(double.parse(parts[0]), double.parse(parts[1])); + } + return null; + } + + LatLng getAirportLatLng() { + final String country = box.read(BoxName.countryCode) ?? 'JO'; + if (country == 'SY') { + return const LatLng(33.4111, 36.5147); + } + return const LatLng(31.7225, 35.9933); + } Future getRoute(LatLng origin, LatLng destination) async { - // 🔥 بناء الرابط حسب التنسيق: /driving/lng,lat;lng,lat - String coords = - "${origin.longitude},${origin.latitude};${destination.longitude},${destination.latitude}"; + isLoading = true; + update(); - // 🔥 تفعيل steps=true لجلب الخطوات - String url = - "$_routeApiBaseUrl/$coords?steps=true&overview=full&geometries=polyline"; + final String langCode = box.read(BoxName.lang) ?? 'ar'; + final Map queryParams = { + 'fromLat': origin.latitude.toString(), + 'fromLng': origin.longitude.toString(), + 'toLat': destination.latitude.toString(), + 'toLng': destination.longitude.toString(), + 'steps': 'true', + 'alternatives': 'true', + 'locale': langCode, + }; + + if (_intermediateStop != null) { + queryParams['stop1Lat'] = _intermediateStop!.latitude.toString(); + queryParams['stop1Lng'] = _intermediateStop!.longitude.toString(); + } + final saasUri = + Uri.parse(AppLink.mapSaasRoute).replace(queryParameters: queryParams); try { - // الرابط الجديد قد لا يحتاج API Key في الهيدر، ولكن نتركه إذا كان السيرفر يطلبه - // إذا كان الرابط عام، يمكن إزالة الهيدر - final response = await http.get(Uri.parse(url)); + final response = + await http.get(saasUri, headers: {'x-api-key': Env.mapSaasKey}); if (response.statusCode != 200) { - Get.snackbar('تنبيه', 'تعذر الاتصال بخدمة التوجيه.'); + isLoading = false; + update(); + mySnackbarWarning(box.read(BoxName.lang) == 'ar' ? 'تعذر الاتصال بخدمة التوجيه.' : 'Failed to connect to routing service.'); return; } - final responseData = jsonDecode(response.body); + final data = jsonDecode(response.body); - // التحقق حسب هيكلية OSRM - if (responseData['code'] != 'Ok' || - (responseData['routes'] as List).isEmpty) { - Get.snackbar('عذراً', 'لم يتم العثور على مسار.'); - return; + routes.clear(); + final primaryPts = data['points']?.toString() ?? ""; + if (primaryPts.isNotEmpty) { + final coords = await compute>( + decodePolylineIsolate, primaryPts); + routes.add(RouteData( + coordinates: coords, + steps: List>.from(data['instructions'] ?? []), + distanceM: (data['distance'] as num).toDouble(), + durationS: (data['duration'] as num).toDouble(), + points: primaryPts, + )); } - var route = responseData['routes'][0]; - - // 1. فك تشفير Polyline - final pointsString = route['geometry']; - _fullRouteCoordinates = await compute( - decodePolylineIsolate as ComputeCallback>, - pointsString); - - // تهيئة الرسم - _lastTraveledIndexInFullRoute = 0; - _updatePolylinesSets([], _fullRouteCoordinates); - - // 2. استخراج الخطوات (داخل Legs في OSRM) - var legs = route['legs'] as List; - if (legs.isNotEmpty) { - var steps = legs[0]['steps'] as List; - routeSteps = List>.from(steps); + if (data['alternatives'] != null && data['alternatives'] is List) { + _hasAlternativeRoutes = (data['alternatives'] as List).isNotEmpty; + for (var alt in data['alternatives']) { + final altPts = alt['points']?.toString() ?? ""; + if (altPts.isEmpty) continue; + final altCoords = await compute>( + decodePolylineIsolate, altPts); + routes.add(RouteData( + coordinates: altCoords, + steps: List>.from(alt['instructions'] ?? []), + distanceM: (alt['distance'] as num).toDouble(), + durationS: (alt['duration'] as num).toDouble(), + points: altPts, + )); + } } else { - routeSteps = []; + _hasAlternativeRoutes = false; } - // 3. معالجة النصوص العربية للخطوات - for (var step in routeSteps) { - step['instruction_text'] = _createInstructionFromManeuver(step); + if (routes.isEmpty) { + isLoading = false; + update(); + mySnackbarWarning(box.read(BoxName.lang) == 'ar' ? 'لم يتم العثور على مسار.' : 'No route found.'); + return; } - // 4. بدء الملاحة + selectedRouteIndex = 0; + final selected = routes[0]; + _fullRouteCoordinates = selected.coordinates; + routeSteps = selected.steps; + _routeTotalDistanceM = selected.distanceM; + _routeTotalDurationS = selected.durationS; + + _lastTraveledIndexInFullRoute = 0; + if (isStyleLoaded) _updatePolylinesSets([], _fullRouteCoordinates); + + if (_fullRouteCoordinates.isNotEmpty) { + OfflineMapService.instance + .downloadRegion(_fullRouteCoordinates.last, radiusKm: 2.0); + } + + _recomputeETA(); + currentStepIndex = 0; _nextInstructionSpoken = false; - if (routeSteps.isNotEmpty) { - currentInstruction = routeSteps[0]['instruction_text']; - if (routeSteps.length > 1) { - nextInstruction = "ثم ${routeSteps[1]['instruction_text']}"; - } else { - nextInstruction = "الوجهة النهائية"; - } - Get.find().speakText(currentInstruction); - } - // 5. ضبط الكاميرا - if (_fullRouteCoordinates.isNotEmpty) { - final bounds = _boundsFromLatLngList(_fullRouteCoordinates); - mapController - ?.animateCamera(CameraUpdate.newLatLngBounds(bounds, 80.0)); - } + isNavigating = false; + _cameraLockedToUser = false; + _offRouteStartTime = null; + isLoading = false; update(); - } catch (e) { - Log.print("GetRoute Error: $e"); - Get.snackbar('خطأ', 'حدث خطأ غير متوقع.'); - } - } - // 🔥 تحويل تعليمات OSRM إلى العربية - String _createInstructionFromManeuver(Map step) { - if (step['maneuver'] == null) return "تابع المسير"; + if (routeSteps.isNotEmpty) { + currentInstruction = routeSteps[0]['text'] ?? ""; + currentManeuverModifier = routeSteps[0]['sign'] ?? 0; + nextInstruction = routeSteps.length > 1 + ? (langCode == 'ar' + ? "ثم ${routeSteps[1]['text']}" + : "Then ${routeSteps[1]['text']}") + : (langCode == 'ar' ? "الوجهة النهائية" : "Destination"); - final maneuver = step['maneuver']; - final type = maneuver['type'] ?? 'continue'; - final modifier = maneuver['modifier'] ?? 'straight'; - final name = step['name'] ?? ''; // اسم الشارع - - String instruction = ""; - - switch (type) { - case 'depart': - instruction = "انطلق"; - break; - case 'arrive': - return "لقد وصلت إلى وجهتك، $name"; - case 'turn': - case 'fork': - case 'roundabout': - case 'merge': - case 'on ramp': - case 'off ramp': - case 'end of road': - instruction = _getTurnInstruction(modifier); - break; - case 'new name': - instruction = "تابع المسير"; - break; - default: - instruction = "تابع المسير"; - } - - if (name.isNotEmpty) { - if (type == 'new name' || type == 'continue') { - instruction += " على $name"; - } else { - instruction += " نحو $name"; + if (!isMuted) { + Get.find().speakText(currentInstruction); + } } - } - return instruction; - } - String _getTurnInstruction(String modifier) { - switch (modifier) { - case 'uturn': - return "قم بالاستدارة والعودة"; - case 'sharp right': - return "انعطف يميناً بحدة"; - case 'right': - return "انعطف يميناً"; - case 'slight right': - return "انعطف يميناً قليلاً"; - case 'straight': - return "استمر للأمام"; - case 'slight left': - return "انعطف يساراً قليلاً"; - case 'left': - return "انعطف يساراً"; - case 'sharp left': - return "انعطف يساراً بحدة"; - default: - return "اتجه"; + if (_fullRouteCoordinates.length >= 2) { + final bounds = + data['bbox'] != null && (data['bbox'] as List).length == 4 + ? LatLngBounds( + southwest: LatLng(data['bbox'][1], data['bbox'][0]), + northeast: LatLng(data['bbox'][3], data['bbox'][2])) + : _boundsFromLatLngList(_fullRouteCoordinates); + await _safeAnimateCameraBounds(bounds, + bottom: 320, top: 150, left: 50, right: 50); + } + update(); + } catch (e) { + isLoading = false; + update(); + Log.print("GetRoute Error: $e"); } } - // ======================================================================= - // ٥. أدوات مساعدة - // ======================================================================= + void _recomputeETA() { + if (_routeTotalDistanceM == 0 || _fullRouteCoordinates.isEmpty) return; + final fraction = + (_fullRouteCoordinates.length - _lastTraveledIndexInFullRoute) / + _fullRouteCoordinates.length; + final remainingM = _routeTotalDistanceM * fraction; + final remainingS = _routeTotalDurationS * fraction; + + final String langCode = box.read(BoxName.lang) ?? 'ar'; + if (remainingM > 1000) { + totalDistanceRemaining = (remainingM / 1000).toStringAsFixed(1); + } else { + totalDistanceRemaining = remainingM.toStringAsFixed(0); + } + distanceWithUnit = _formatDistance(remainingM, langCode); + + final minutes = (remainingS / 60).round(); + estimatedTimeRemaining = minutes.toString(); + + final arrival = DateTime.now().add(Duration(seconds: remainingS.toInt())); + final h = arrival.hour > 12 + ? arrival.hour - 12 + : (arrival.hour == 0 ? 12 : arrival.hour); + final m = arrival.minute.toString().padLeft(2, '0'); + final ampm = arrival.hour >= 12 ? 'PM' : 'AM'; + arrivalTime = "$h:$m $ampm"; + } Future startNavigationTo(LatLng destination, {String infoWindowTitle = ''}) async { @@ -509,16 +1038,27 @@ class NavigationController extends GetxController { update(); try { _finalDestination = destination; - clearRoute(isNewRoute: true); + await clearRoute(isNewRoute: true); + + markers = markers.where((m) => m.markerId.value == 'car').toSet(); markers.add(Marker( markerId: const MarkerId('destination'), position: destination, - icon: destinationIcon, - infoWindow: InfoWindow(title: infoWindowTitle), + icon: InlqBitmap.fromStyleImage('dest_icon'), + infoWindow: infoWindowTitle.isNotEmpty + ? InfoWindow(title: infoWindowTitle) + : InfoWindow.noText, )); - await getRoute(myLocation!, destination); + if (myLocation != null) { + markers.add(Marker( + markerId: const MarkerId('origin'), + position: myLocation!, + icon: InlqBitmap.fromStyleImage('start_icon'), + )); + await getRoute(myLocation!, destination); + } } finally { isLoading = false; update(); @@ -529,33 +1069,158 @@ class NavigationController extends GetxController { if (myLocation == null || _finalDestination == null || isLoading) return; isLoading = true; update(); - Get.snackbar('إعادة التوجيه', 'جاري حساب مسار جديد...', - backgroundColor: AppColor.goldenBronze); + mySnackbarInfo(box.read(BoxName.lang) == 'ar' ? 'جاري حساب مسار جديد...' : 'Calculating new route...'); await getRoute(myLocation!, _finalDestination!); isLoading = false; update(); } - void clearRoute({bool isNewRoute = false}) { - if (!isNewRoute) { - markers.removeWhere((m) => m.markerId.value == 'destination'); - _finalDestination = null; - polylines.clear(); + Future startActiveNavigation() async { + if (routes.isEmpty) { + mySnackbarWarning(box.read(BoxName.lang) == 'ar' + ? 'لا يوجد مسار لبدء الملاحة.' + : 'No route to start navigation.'); + return; } - routeSteps.clear(); - _fullRouteCoordinates.clear(); + if (isNavigating) return; + + isNavigating = true; + _cameraLockedToUser = true; + + _recomputeETA(); + + if (routeSteps.isNotEmpty && currentStepIndex < routeSteps.length) { + currentInstruction = routeSteps[currentStepIndex]['text'] ?? ""; + currentManeuverModifier = routeSteps[currentStepIndex]['sign'] ?? 0; + nextInstruction = (currentStepIndex + 1) < routeSteps.length + ? (box.read(BoxName.lang) == 'ar' + ? "ثم ${routeSteps[currentStepIndex + 1]['text']}" + : "Then ${routeSteps[currentStepIndex + 1]['text']}") + : (box.read(BoxName.lang) == 'ar' ? 'الوجهة' : 'Destination'); + + if (!isMuted) { + try { + Get.find().speakText(currentInstruction); + } catch (_) {} + } + } + + if (myLocation != null) { + animateCameraToPosition(myLocation!, + bearing: _smoothedHeading, zoom: _targetZoom, tilt: _targetTilt); + } + + update(); + } + + Future clearEverything() async { + placeDestinationController.clear(); + placesDestination = []; + await clearRoute(); + } + + Future clearRoute({bool isNewRoute = false}) async { + _offRouteStartTime = null; + _autoRecalcInProgress = false; + if (!isNewRoute) { + markers = {}; + polylines = {}; + circles = {}; + polygons = {}; + _finalDestination = null; + isNavigating = false; + routes = []; + await _flushBufferToServer(); + } + routeSteps = []; + _fullRouteCoordinates = []; _lastTraveledIndexInFullRoute = 0; currentInstruction = ""; nextInstruction = ""; + currentManeuverModifier = "intaleq"; distanceToNextStep = ""; + totalDistanceRemaining = ""; + estimatedTimeRemaining = ""; + arrivalTime = "--:--"; + _routeTotalDistanceM = 0; + _routeTotalDurationS = 0; + update(); } Future _loadCustomIcons() async { - carIcon = await BitmapDescriptor.fromAssetImage( - const ImageConfiguration(size: Size(40, 40)), 'assets/images/car.png'); - destinationIcon = await BitmapDescriptor.fromAssetImage( - const ImageConfiguration(size: Size(30, 30)), 'assets/images/b.png'); + if (mapController == null) return; + try { + final carBytes = await rootBundle.load('assets/images/car.png'); + final startBytes = await rootBundle.load('assets/images/A.png'); + final destBytes = await rootBundle.load('assets/images/b.png'); + await mapController!.addImage('car_icon', carBytes.buffer.asUint8List()); + await mapController! + .addImage('start_icon', startBytes.buffer.asUint8List()); + await mapController!.addImage('dest_icon', destBytes.buffer.asUint8List()); + } catch (e) { + Log.print("Error loading custom icons: $e"); + } + } + + void _checkNavigationStep(LatLng pos) { + if (routeSteps.isEmpty || currentStepIndex >= routeSteps.length) return; + + final interval = routeSteps[currentStepIndex]['interval'] as List; + final endIdx = interval[1] as int; + + if (endIdx >= _fullRouteCoordinates.length) return; + + final endLatLng = _fullRouteCoordinates[endIdx]; + final distance = Geolocator.distanceBetween( + pos.latitude, pos.longitude, endLatLng.latitude, endLatLng.longitude); + + distanceToNextStep = distance > 1000 + ? "${(distance / 1000).toStringAsFixed(1)} km" + : "${distance.toStringAsFixed(0)} m"; + + if (distance < 50 && + !_nextInstructionSpoken && + nextInstruction.isNotEmpty) { + if (!isMuted) { + Get.find().speakText(nextInstruction); + } + _nextInstructionSpoken = true; + } + if (distance < 20) _advanceStep(); + } + + void _advanceStep() { + currentStepIndex++; + final String langCode = box.read(BoxName.lang) ?? 'ar'; + if (currentStepIndex < routeSteps.length) { + currentInstruction = routeSteps[currentStepIndex]['text'] ?? ""; + currentManeuverModifier = routeSteps[currentStepIndex]['sign'] ?? 0; + nextInstruction = (currentStepIndex + 1) < routeSteps.length + ? (langCode == 'ar' + ? "ثم ${routeSteps[currentStepIndex + 1]['text']}" + : "Then ${routeSteps[currentStepIndex + 1]['text']}") + : (langCode == 'ar' ? "ستصل إلى وجهتك" : "Arriving soon"); + _nextInstructionSpoken = false; + update(); + } else { + _finishNavigation(); + } + } + + void _finishNavigation() { + final String langCode = box.read(BoxName.lang) ?? 'ar'; + currentInstruction = + langCode == 'ar' ? "لقد وصلت إلى وجهتك" : "You have arrived"; + currentManeuverModifier = 4; + nextInstruction = ""; + distanceToNextStep = ""; + isNavigating = false; + if (!isMuted) { + Get.find().speakText(currentInstruction); + } + _flushBufferToServer(); + update(); } Future getPlaces() async { @@ -565,69 +1230,42 @@ class NavigationController extends GetxController { update(); return; } - - if (myLocation == null) return; - - final lat = myLocation!.latitude; - final lng = myLocation!.longitude; - const radiusKm = 200.0; - final latDelta = _kmToLatDelta(radiusKm); - final lngDelta = _kmToLngDelta(radiusKm, lat); - - final payload = { - 'query': q, - 'lat_min': (lat - latDelta).toString(), - 'lat_max': (lat + latDelta).toString(), - 'lng_min': (lng - lngDelta).toString(), - 'lng_max': (lng + lngDelta).toString(), - }; + if (mapController == null) return; try { - final response = - await CRUD().post(link: AppLink.getPlacesSyria, payload: payload); - final responseData = (response); - - List list; - if (responseData is Map && responseData['status'] == 'success') { - list = List.from(responseData['message'] as List); - } else if (responseData is List) { - list = List.from(responseData); - } else { - return; + final results = await mapController!.searchPlaces(q); + + if (myLocation != null) { + for (final p in results) { + final plat = double.tryParse(p['latitude']?.toString() ?? '0') ?? 0.0; + final plng = double.tryParse(p['longitude']?.toString() ?? '0') ?? 0.0; + p['distanceKm'] = _haversineKm(myLocation!.latitude, myLocation!.longitude, plat, plng); + } + results.sort((a, b) => + (a['distanceKm'] as double).compareTo(b['distanceKm'] as double)); } - - for (final p in list) { - final plat = double.tryParse(p['latitude']?.toString() ?? '0.0') ?? 0.0; - final plng = - double.tryParse(p['longitude']?.toString() ?? '0.0') ?? 0.0; - final distance = _haversineKm(lat, lng, plat, plng); - p['distanceKm'] = distance; - } - - list.sort((a, b) => - (a['distanceKm'] as double).compareTo(b['distanceKm'] as double)); - placesDestination = list; + + placesDestination = results; update(); } catch (e) { - print('Exception in getPlaces: $e'); + Log.print('getPlaces error: $e'); } } Future selectDestination(dynamic place) async { placeDestinationController.clear(); placesDestination = []; - final double lat = double.parse(place['latitude'].toString()); - final double lng = double.parse(place['longitude'].toString()); + final lat = double.parse(place['latitude'].toString()); + final lng = double.parse(place['longitude'].toString()); await startNavigationTo(LatLng(lat, lng), - infoWindowTitle: place['name'] ?? 'وجهة'); + infoWindowTitle: place['name'] ?? (box.read(BoxName.lang) == 'ar' ? 'وجهة' : 'Destination')); } void onSearchChanged(String query) { if (_debounce?.isActive ?? false) _debounce!.cancel(); - _debounce = Timer(const Duration(milliseconds: 700), () => getPlaces()); + _debounce = Timer(const Duration(milliseconds: 500), () => getPlaces()); } - // --- دوال مساعدة للحسابات --- double _haversineKm(double lat1, double lon1, double lat2, double lon2) { const R = 6371.0; final dLat = (lat2 - lat1) * (pi / 180.0); @@ -640,65 +1278,65 @@ class NavigationController extends GetxController { return R * 2 * atan2(sqrt(a), sqrt(1 - a)); } - double _kmToLatDelta(double km) => km / 111.32; - double _kmToLngDelta(double km, double lat) => - km / (111.32 * cos(lat * pi / 180)); - LatLngBounds _boundsFromLatLngList(List list) { double? x0, x1, y0, y1; - for (LatLng latLng in list) { + for (final ll in list) { if (x0 == null) { - x0 = x1 = latLng.latitude; - y0 = y1 = latLng.longitude; + x0 = x1 = ll.latitude; + y0 = y1 = ll.longitude; } else { - if (latLng.latitude > x1!) x1 = latLng.latitude; - if (latLng.latitude < x0) x0 = latLng.latitude; - if (latLng.longitude > y1!) y1 = latLng.longitude; - if (latLng.longitude < y0!) y0 = latLng.longitude; + if (ll.latitude > x1!) x1 = ll.latitude; + if (ll.latitude < x0) x0 = ll.latitude; + if (ll.longitude > y1!) y1 = ll.longitude; + if (ll.longitude < y0!) y0 = ll.longitude; } } return LatLngBounds( northeast: LatLng(x1!, y1!), southwest: LatLng(x0!, y0!)); } - // --- دوال التحقق من الدولة --- - String getLocationArea(double latitude, double longitude) { - LatLng p = LatLng(latitude, longitude); - if (isPointInPolygon(p, CountryPolygons.jordanBoundary)) { - box.write(BoxName.countryCode, 'Jordan'); - return 'Jordan'; + void setIntermediateStop(LatLng stop) { + _intermediateStop = stop; + if (myLocation != null && _finalDestination != null) { + getRoute(myLocation!, _finalDestination!); } - if (isPointInPolygon(p, CountryPolygons.syriaBoundary)) { - box.write(BoxName.countryCode, 'Syria'); - return 'Syria'; - } - if (isPointInPolygon(p, CountryPolygons.egyptBoundary)) { - box.write(BoxName.countryCode, 'Egypt'); - return 'Egypt'; - } - return 'Unknown'; + update(); } - bool isPointInPolygon(LatLng point, List polygon) { - int intersections = 0; - for (int i = 0; i < polygon.length; i++) { - LatLng vertex1 = polygon[i]; - LatLng vertex2 = polygon[(i + 1) % polygon.length]; - if (_rayIntersectsSegment(point, vertex1, vertex2)) intersections++; + void clearIntermediateStop() { + _intermediateStop = null; + if (myLocation != null && _finalDestination != null) { + getRoute(myLocation!, _finalDestination!); } - return intersections % 2 != 0; + update(); } - bool _rayIntersectsSegment(LatLng point, LatLng vertex1, LatLng vertex2) { - double px = point.longitude; - double py = point.latitude; - double v1x = vertex1.longitude; - double v1y = vertex1.latitude; - double v2x = vertex2.longitude; - double v2y = vertex2.latitude; + String _formatDistance(double meters, String lang) { + if (meters >= 1000) { + return "${(meters / 1000).toStringAsFixed(1)} ${lang == 'ar' ? 'كم' : 'km'}"; + } else { + return "${meters.toStringAsFixed(0)} ${lang == 'ar' ? 'م' : 'm'}"; + } + } - if ((py < v1y && py < v2y) || (py > v1y && py > v2y)) return false; - double intersectX = v1x + (py - v1y) * (v2x - v1x) / (v2y - v1y); - return intersectX > px; + Future submitPlaceSuggestion(String name) async { + if (name.trim().isEmpty || myLocation == null) return; + isLoading = true; + update(); + try { + final payload = { + 'name': name, + 'lat': myLocation!.latitude.toString(), + 'lng': myLocation!.longitude.toString(), + 'driver_id': box.read(BoxName.driverID), + }; + await CRUD().post(link: AppLink.getPlacesSyria, payload: payload); + mySnackbarInfo(box.read(BoxName.lang) == 'ar' + ? "تم استلام اقتراحك! شكراً لمساهمتك." + : "Suggestion received! Thanks for your contribution."); + } finally { + isLoading = false; + update(); + } } } diff --git a/lib/controller/home/navigation/navigation_view.dart b/lib/controller/home/navigation/navigation_view.dart index add2660..63486d9 100644 --- a/lib/controller/home/navigation/navigation_view.dart +++ b/lib/controller/home/navigation/navigation_view.dart @@ -1,147 +1,104 @@ +import 'dart:math'; +import 'dart:ui'; import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; import 'package:get/get.dart'; -import 'package:google_maps_flutter/google_maps_flutter.dart'; -import 'dart:ui'; // For BackdropFilter +import 'package:intaleq_maps/intaleq_maps.dart'; +import 'package:sefer_driver/env/env.dart'; +import 'package:sefer_driver/controller/profile/setting_controller.dart'; +import 'package:sefer_driver/constant/box_name.dart'; +import 'package:sefer_driver/constant/colors.dart'; +import 'package:sefer_driver/main.dart'; +import 'package:sefer_driver/views/widgets/error_snakbar.dart'; import 'navigation_controller.dart'; -// ملاحظة: افترضتُ أن لديك لوناً أساسياً في هذا الملف -// import 'package:sefer_driver/constant/colors.dart'; -// سأستخدم اللون الأزرق كبديل مؤقت -const Color kPrimaryColor = Color(0xFF0D47A1); +// ─── Color Palette ────────────────────────────────────────────────────────── +Color get _kSurface => + Get.isDarkMode ? const Color(0xFF0F172A) : const Color(0xFFF8FAFC); +Color get _kCardColor => + Get.isDarkMode ? const Color(0xFF1E293B) : const Color(0xFFFFFFFF); +Color get _kOnSurface => + Get.isDarkMode ? const Color(0xFFF1F5F9) : const Color(0xFF0F172A); +Color get _kPrimary => const Color(0xFF2563EB); class NavigationView extends StatelessWidget { const NavigationView({super.key}); @override Widget build(BuildContext context) { - // استخدام Get.find() بدلاً من Get.put() لضمان أن الكونترولر مُهيأ مسبقاً - // إذا كانت هذه هي نقطة الدخول، Get.put() صحيح. - final NavigationController controller = Get.put(NavigationController()); + final NavigationController c = Get.put(NavigationController()); + final SettingController s = Get.find(); - return Scaffold( - body: GetBuilder( - builder: (_) => Stack( - children: [ - // --- الخريطة --- - GoogleMap( - onMapCreated: controller.onMapCreated, - onLongPress: controller.onMapLongPressed, - initialCameraPosition: CameraPosition( - target: controller.myLocation ?? - const LatLng(33.5138, 36.2765), // Default to Damascus - zoom: 16.0, - ), - markers: controller.markers, - polylines: controller.polylines, - myLocationEnabled: false, - myLocationButtonEnabled: false, - compassEnabled: false, - zoomControlsEnabled: false, buildingsEnabled: false, - // تعديل الـ padding لإعطاء مساحة للعناصر العلوية والسفلية - // مساحة أكبر في الأعلى للبحث + النتائج، ومساحة أكبر بالأسفل للملاحة - padding: EdgeInsets.only( - bottom: controller.currentInstruction.isNotEmpty ? 170 : 0, - top: 150, - ), - ), - - // --- واجهة البحث (تصميم زجاجي) --- - _buildGlassSearchUI(controller), - - // --- إرشادات الملاحة (تصميم عائم) --- - if (controller.currentInstruction.isNotEmpty) - _buildFloatingNavigationUI(controller), - - // --- أزرار التحكم (تصميم عائم) --- - _buildFloatingMapControls(controller), - - // --- مؤشر التحميل --- - if (controller.isLoading) - Container( - color: Colors.black.withOpacity(0.5), - child: const Center( - child: CircularProgressIndicator( - valueColor: AlwaysStoppedAnimation(Colors.white), - strokeWidth: 3, - ), - ), - ), - ], - ), - ), - ); - } - - /// --- 1. واجهة البحث بالتصميم الزجاجي المطور --- - Widget _buildGlassSearchUI(NavigationController controller) { - return Positioned( - top: 0, - left: 0, - right: 0, - child: SafeArea( - child: Padding( - padding: const EdgeInsets.symmetric(horizontal: 16.0, vertical: 12.0), - child: Column( + return AnnotatedRegion( + value: Get.isDarkMode + ? SystemUiOverlayStyle.light + : SystemUiOverlayStyle.dark, + child: Scaffold( + backgroundColor: _kSurface, + body: GetBuilder( + builder: (_) => Stack( children: [ - // --- شريط البحث --- - ClipRRect( - borderRadius: BorderRadius.circular(28.0), - child: BackdropFilter( - filter: ImageFilter.blur(sigmaX: 10.0, sigmaY: 10.0), - child: Container( - height: 56, - decoration: BoxDecoration( - color: Colors.white.withOpacity(0.85), - borderRadius: BorderRadius.circular(28.0), - border: Border.all(color: Colors.white.withOpacity(0.4)), - boxShadow: [ - BoxShadow( - color: Colors.black.withOpacity(0.05), - blurRadius: 15, - offset: const Offset(0, 5), - ), - ], - ), - child: Row( - children: [ - const Padding( - padding: EdgeInsets.only(left: 18.0, right: 10.0), - child: Icon(Icons.search, - color: kPrimaryColor, size: 24), - ), - Expanded( - child: TextField( - controller: controller.placeDestinationController, - onChanged: controller.onSearchChanged, - textInputAction: TextInputAction.search, - style: const TextStyle( - fontSize: 16, color: Colors.black87), - decoration: InputDecoration( - hintText: 'إلى أين تريد الذهاب؟', - hintStyle: const TextStyle( - color: Colors.black45, fontSize: 16), - border: InputBorder.none, - contentPadding: const EdgeInsets.only(bottom: 2), - ), - ), - ), - // زر المسح أو إلغاء المسار - if (controller - .placeDestinationController.text.isNotEmpty) - _buildClearButton(controller) - else if (controller.polylines.isNotEmpty) - _buildCancelRouteButton(controller), - ], - ), - ), + // ── 1. Map Layer ────────────────────────────────────────────── + GetBuilder( + builder: (s) => IntaleqMap( + apiKey: Env.mapSaasKey, + onMapCreated: c.onMapCreated, + onLongPress: (pos) => c.onMapLongPressed(Point(0, 0), pos), + onTap: (pos) => c.onMapTapped(Point(0, 0), pos), + markers: c.markers, + polylines: c.polylines, + circles: c.circles, + polygons: c.polygons, + mapType: s.isMapDarkMode + ? IntaleqMapType.normal // Normal in IntaleqMap seems to be Dark + : IntaleqMapType.light, + initialCameraPosition: CameraPosition( + target: c.myLocation ?? const LatLng(33.5138, 36.2765), + zoom: 16.0), + myLocationEnabled: false, ), ), - const SizedBox(height: 10), - // --- قائمة النتائج --- - if (controller.placesDestination.isNotEmpty) - _buildSearchResultsList(controller), + // ── 2. Top UI (Explore Mode) ────────────────────────────────── + if (!c.isNavigating) _ExploreTopUI(controller: c), + + // ── 3. Top UI (Active Navigation Banner) ── + if (c.isNavigating && c.currentInstruction.isNotEmpty) + _ActiveTopInstruction(controller: c), + + // ── 4. Explore Action Row ───────────────────────────────────── + if (!c.isNavigating) _ExploreActionRow(controller: c), + + // ── 5. Bottom Panel (Explore Mode) ──────────────────────────── + if (!c.isNavigating) _ExploreBottomPanel(controller: c), + + // ── 6. Bottom HUD (Active Navigation) ───────────────────────── + if (c.isNavigating) _ActiveBottomHUD(controller: c), + + // ── 7. Search Results Dropdown ──────────────────────────────── + if (c.placesDestination.isNotEmpty && !c.isNavigating) + _SearchResults(controller: c), + + // ── 8. Loading Overlay ──────────────────────────────────────── + if (c.isLoading) const _LoadingOverlay(), + + // ── 9. Location Picker Overlay (Place Creation) ────────────── + _LocationPickerOverlay(controller: c), + + // ── 10. Recenter Button ─────────────────────────────────────── + if (!c.isCameraLocked && !c.isNavigating) + Positioned( + right: 16, + bottom: 250, + child: _buildMapFAB( + icon: Icons.my_location_rounded, + onTap: () => c.relockCameraToUser(), + ), + ), + + // ── 11. Navigation Icon (Fixed Center) ──────────────────────── + if (c.isNavigating) const _NavigationCenterIcon(), ], ), ), @@ -149,105 +106,564 @@ class NavigationView extends StatelessWidget { ); } - Widget _buildClearButton(NavigationController controller) { - return IconButton( - icon: const Icon(Icons.clear, color: Colors.grey, size: 22), - onPressed: () { - controller.placeDestinationController.clear(); - controller.placesDestination = []; - controller.update(); - }, + Widget _buildMapFAB({required IconData icon, required VoidCallback onTap}) { + return GestureDetector( + onTap: onTap, + child: Container( + width: 48, + height: 48, + decoration: BoxDecoration( + color: _kCardColor, + shape: BoxShape.circle, + boxShadow: [ + BoxShadow( + color: Colors.black.withOpacity(0.15), + blurRadius: 12, + offset: const Offset(0, 4), + ) + ], + ), + child: Icon(icon, color: _kPrimary, size: 22), + ), ); } +} - Widget _buildCancelRouteButton(NavigationController controller) { - return IconButton( - tooltip: 'إلغاء المسار', - icon: const Icon(Icons.close, color: Colors.redAccent, size: 22), - onPressed: () => controller.clearRoute(), +class _NavigationCenterIcon extends StatelessWidget { + const _NavigationCenterIcon({Key? key}) : super(key: key); + + @override + Widget build(BuildContext context) { + return IgnorePointer( + child: Center( + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + Container( + decoration: BoxDecoration( + color: _kPrimary, + shape: BoxShape.circle, + boxShadow: [ + BoxShadow( + color: Colors.black.withOpacity(0.3), + blurRadius: 12, + offset: const Offset(0, 4), + ) + ], + border: Border.all(color: Colors.white, width: 3), + ), + padding: const EdgeInsets.all(12), + child: const Icon( + Icons.navigation_rounded, + color: Colors.white, + size: 32, + ), + ), + const SizedBox(height: 40), + ], + ), + ), ); } +} - Widget _buildSearchResultsList(NavigationController controller) { - return ClipRRect( - borderRadius: BorderRadius.circular(24.0), - child: BackdropFilter( - filter: ImageFilter.blur(sigmaX: 10.0, sigmaY: 10.0), - child: Container( - constraints: const BoxConstraints(maxHeight: 220), - decoration: BoxDecoration( - color: Colors.white.withOpacity(0.85), - borderRadius: BorderRadius.circular(24.0), - border: Border.all(color: Colors.white.withOpacity(0.4)), - ), - child: ListView.builder( - padding: const EdgeInsets.symmetric(vertical: 8.0), - itemCount: controller.placesDestination.length, - itemBuilder: (context, index) { - final place = controller.placesDestination[index]; - final distance = place['distanceKm'] as double?; - final address = (place['address'] ?? '').toString(); +class _ExploreTopUI extends StatelessWidget { + final NavigationController controller; + const _ExploreTopUI({required this.controller}); - return Material( - color: Colors.transparent, - child: InkWell( - onTap: () => controller.selectDestination(place), - child: Padding( - padding: const EdgeInsets.symmetric( - horizontal: 16.0, vertical: 12.0), - child: Row( - children: [ - // أيقونة الموقع - Container( - padding: const EdgeInsets.all(10), - decoration: BoxDecoration( - color: kPrimaryColor.withOpacity(0.1), - shape: BoxShape.circle, - ), - child: const Icon(Icons.location_on_outlined, - color: kPrimaryColor, size: 20), - ), - const SizedBox(width: 14), - // الاسم والعنوان - Expanded( - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text( - place['name'] ?? 'اسم غير معروف', - style: const TextStyle( - fontWeight: FontWeight.w600, - fontSize: 16, - color: Colors.black87), - maxLines: 1, - overflow: TextOverflow.ellipsis, - ), - if (address.isNotEmpty) - Text( - address, - style: const TextStyle( - color: Colors.black54, fontSize: 13), - maxLines: 1, - overflow: TextOverflow.ellipsis, - ), - ], - ), - ), - const SizedBox(width: 10), - // المسافة - if (distance != null) - Text( - '${distance.toStringAsFixed(1)} كم', - style: const TextStyle( - color: kPrimaryColor, - fontWeight: FontWeight.w500, - fontSize: 13, - ), - ), - ], + @override + Widget build(BuildContext context) { + return Positioned( + top: 0, + left: 0, + right: 0, + child: SafeArea( + bottom: false, + child: Padding( + padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 12), + child: Container( + decoration: BoxDecoration( + color: _kCardColor, + borderRadius: BorderRadius.circular(16), + boxShadow: [ + BoxShadow( + color: Colors.black.withOpacity(0.08), + blurRadius: 24, + offset: const Offset(0, 8), + ) + ], + ), + padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 6), + child: Row( + children: [ + IconButton( + icon: Icon(Icons.menu_rounded, color: _kOnSurface, size: 24), + onPressed: () => Scaffold.of(context).openDrawer(), + ), + const SizedBox(width: 8), + Expanded( + child: TextField( + controller: controller.placeDestinationController, + onChanged: controller.onSearchChanged, + textInputAction: TextInputAction.search, + style: TextStyle( + fontSize: 16, + color: _kOnSurface, + fontWeight: FontWeight.w600), + decoration: InputDecoration( + hintText: box.read(BoxName.lang) == 'ar' + ? 'إلى أين؟' + : 'Where to?', + hintStyle: TextStyle( + color: _kOnSurface.withOpacity(0.4), fontSize: 16), + border: InputBorder.none, + isDense: true, ), ), ), + if (controller.placeDestinationController.text.isNotEmpty || + controller.routes.isNotEmpty) + IconButton( + icon: Icon(Icons.close_rounded, + color: Colors.red.shade400, size: 22), + onPressed: () => controller.clearEverything(), + ) + else + Padding( + padding: const EdgeInsets.only(right: 8), + child: CircleAvatar( + radius: 18, + backgroundColor: _kPrimary, + child: const Icon(Icons.person_rounded, + color: Colors.white, size: 20), + ), + ), + ], + ), + ), + ), + ), + ); + } +} + +class _ExploreBottomPanel extends StatelessWidget { + final NavigationController controller; + const _ExploreBottomPanel({required this.controller}); + + @override + Widget build(BuildContext context) { + final bool hasRoutes = controller.routes.isNotEmpty; + final isArabic = box.read(BoxName.lang) == 'ar'; + final bottomPad = MediaQuery.of(context).padding.bottom; + + if (!hasRoutes) return const SizedBox.shrink(); + + return Positioned( + bottom: 0, + left: 0, + right: 0, + child: Container( + padding: EdgeInsets.only(bottom: bottomPad + 16, top: 16), + decoration: BoxDecoration( + color: _kCardColor, + borderRadius: const BorderRadius.vertical(top: Radius.circular(24)), + boxShadow: [ + BoxShadow( + color: Colors.black.withOpacity(0.1), + blurRadius: 32, + offset: const Offset(0, -4), + ) + ], + ), + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + Padding( + padding: const EdgeInsets.symmetric(horizontal: 16), + child: Row( + children: [ + Text( + isArabic ? 'المسارات المتاحة' : 'Available Routes', + style: TextStyle( + color: _kOnSurface, + fontWeight: FontWeight.bold, + fontSize: 14, + ), + ), + ], + ), + ), + const SizedBox(height: 12), + SizedBox( + height: 90, + child: ListView.builder( + padding: const EdgeInsets.symmetric(horizontal: 12), + scrollDirection: Axis.horizontal, + itemCount: controller.routes.length, + itemBuilder: (context, index) { + final r = controller.routes[index]; + final isSelected = controller.selectedRouteIndex == index; + return GestureDetector( + onTap: () => controller.selectRoute(index), + child: Container( + width: 140, + margin: const EdgeInsets.symmetric(horizontal: 4), + padding: const EdgeInsets.all(12), + decoration: BoxDecoration( + color: isSelected ? _kPrimary : _kSurface, + borderRadius: BorderRadius.circular(16), + border: Border.all( + color: isSelected ? _kPrimary : Colors.grey.shade300, + width: 1.5, + ), + ), + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Icon( + Icons.route_rounded, + color: isSelected ? Colors.white : _kOnSurface, + ), + const SizedBox(height: 6), + Text( + "${(r.distanceM / 1000).toStringAsFixed(1)} km", + style: TextStyle( + color: isSelected ? Colors.white : _kOnSurface, + fontWeight: FontWeight.bold, + ), + ), + Text( + "${(r.durationS / 60).toInt()} min", + style: TextStyle( + color: isSelected + ? Colors.white70 + : _kOnSurface.withOpacity(0.6), + fontSize: 12, + ), + ), + ], + ), + ), + ); + }, + ), + ), + const SizedBox(height: 16), + Padding( + padding: const EdgeInsets.symmetric(horizontal: 24), + child: SizedBox( + width: double.infinity, + height: 52, + child: ElevatedButton( + style: ElevatedButton.styleFrom( + backgroundColor: _kPrimary, + elevation: 0, + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(16)), + ), + onPressed: () { + HapticFeedback.mediumImpact(); + controller.startActiveNavigation(); + }, + child: Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + const Icon(Icons.navigation_rounded, + color: Colors.white, size: 20), + const SizedBox(width: 8), + Text(isArabic ? 'ابدأ الملاحة' : 'Start Navigation', + style: const TextStyle( + color: Colors.white, + fontSize: 16, + fontWeight: FontWeight.w700)), + ], + ), + ), + ), + ), + ], + ), + ), + ); + } +} + +class _ActiveTopInstruction extends StatelessWidget { + final NavigationController controller; + const _ActiveTopInstruction({required this.controller}); + + @override + Widget build(BuildContext context) { + return Positioned( + top: MediaQuery.of(context).padding.top + 12, + left: 16, + right: 16, + child: Container( + decoration: BoxDecoration( + color: const Color(0xFF1B5E20), + borderRadius: BorderRadius.circular(20), + boxShadow: [ + BoxShadow( + color: Colors.black.withOpacity(0.25), + blurRadius: 16, + offset: const Offset(0, 8)) + ], + ), + padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 14), + child: Row( + children: [ + Container( + padding: const EdgeInsets.all(10), + decoration: BoxDecoration( + color: Colors.white.withOpacity(0.15), + shape: BoxShape.circle, + ), + child: Icon(controller.currentManeuverIcon, + color: Colors.white, size: 28), + ), + const SizedBox(width: 14), + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisSize: MainAxisSize.min, + children: [ + Text( + controller.currentInstruction, + style: const TextStyle( + color: Colors.white, + fontSize: 18, + fontWeight: FontWeight.w700), + maxLines: 2, + overflow: TextOverflow.ellipsis, + ), + const SizedBox(height: 2), + Text( + controller.distanceToNextStep, + style: TextStyle( + color: Colors.white.withOpacity(0.8), + fontSize: 14, + fontWeight: FontWeight.w600), + ), + ], + ), + ), + ], + ), + ), + ); + } +} + +class _ActiveBottomHUD extends StatelessWidget { + final NavigationController controller; + const _ActiveBottomHUD({required this.controller}); + + @override + Widget build(BuildContext context) { + final bottomPad = MediaQuery.of(context).padding.bottom; + final isArabic = box.read(BoxName.lang) == 'ar'; + + return Positioned( + bottom: bottomPad + 16, + left: 16, + right: 16, + child: Row( + crossAxisAlignment: CrossAxisAlignment.end, + children: [ + Container( + width: 70, + height: 70, + decoration: BoxDecoration( + color: _kCardColor, + shape: BoxShape.circle, + border: Border.all(color: Colors.red, width: 3), + boxShadow: [ + BoxShadow(color: Colors.black.withOpacity(0.1), blurRadius: 10) + ], + ), + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Text( + controller.currentSpeed.toStringAsFixed(0), + style: const TextStyle( + fontSize: 22, + fontWeight: FontWeight.w900, + color: Colors.black, + ), + ), + const Text( + 'km/h', + style: TextStyle( + fontSize: 10, + fontWeight: FontWeight.w600, + color: Colors.grey, + ), + ), + ], + ), + ), + const SizedBox(width: 12), + Expanded( + child: Container( + decoration: BoxDecoration( + color: _kCardColor, + borderRadius: BorderRadius.circular(24), + boxShadow: [ + BoxShadow( + color: Colors.black.withOpacity(0.15), + blurRadius: 24, + offset: const Offset(0, 8)) + ], + ), + padding: const EdgeInsets.all(16), + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text( + controller.arrivalTime, + style: const TextStyle( + fontSize: 22, + fontWeight: FontWeight.w900, + color: Color(0xFF2563EB), + ), + ), + Text( + isArabic + ? '${controller.estimatedTimeRemaining} د' + : '${controller.estimatedTimeRemaining} min', + style: TextStyle( + fontSize: 16, + fontWeight: FontWeight.w600, + color: _kOnSurface, + ), + ), + Text( + controller.distanceWithUnit, + style: TextStyle( + fontSize: 16, + fontWeight: FontWeight.w600, + color: _kOnSurface.withOpacity(0.7), + ), + ), + ], + ), + const SizedBox(height: 14), + Row( + children: [ + _CircleIconBtn( + icon: controller.isMuted + ? Icons.volume_off_rounded + : Icons.volume_up_rounded, + color: const Color(0xFFE3F2FD), + iconColor: _kPrimary, + onTap: () => controller.toggleMute()), + const Spacer(), + GestureDetector( + onTap: () => controller.clearRoute(), + child: Container( + height: 44, + padding: const EdgeInsets.symmetric(horizontal: 32), + decoration: BoxDecoration( + color: Colors.red.shade600, + borderRadius: BorderRadius.circular(22), + ), + child: Center( + child: Text( + isArabic ? 'إنهاء' : 'End', + style: const TextStyle( + color: Colors.white, + fontSize: 15, + fontWeight: FontWeight.bold, + ), + ), + ), + ), + ), + ], + ), + ], + ), + ), + ), + ], + ), + ); + } +} + +class _CircleIconBtn extends StatelessWidget { + final IconData icon; + final Color color; + final Color iconColor; + final VoidCallback onTap; + const _CircleIconBtn( + {required this.icon, + required this.color, + required this.iconColor, + required this.onTap}); + + @override + Widget build(BuildContext context) { + return GestureDetector( + onTap: () { + HapticFeedback.lightImpact(); + onTap(); + }, + child: Container( + width: 44, + height: 44, + decoration: BoxDecoration(color: color, shape: BoxShape.circle), + child: Icon(icon, color: iconColor, size: 22), + ), + ); + } +} + +class _SearchResults extends StatelessWidget { + final NavigationController controller; + const _SearchResults({required this.controller}); + + @override + Widget build(BuildContext context) { + return Positioned( + top: MediaQuery.of(context).padding.top + 80, + left: 16, + right: 16, + child: Material( + color: _kCardColor, + borderRadius: BorderRadius.circular(16), + elevation: 4, + child: Container( + constraints: BoxConstraints( + maxHeight: MediaQuery.of(context).size.height * 0.4, + ), + child: ListView.separated( + shrinkWrap: true, + itemCount: controller.placesDestination.length, + separatorBuilder: (_, __) => + Divider(height: 1, color: _kOnSurface.withOpacity(0.1)), + itemBuilder: (context, index) { + final place = controller.placesDestination[index]; + return ListTile( + onTap: () => controller.selectDestination(place), + leading: Icon(Icons.location_on_rounded, color: _kPrimary), + title: Text( + place['name'] ?? 'Unknown', + style: TextStyle( + color: _kOnSurface, fontWeight: FontWeight.w600), + ), + subtitle: Text( + place['address'] ?? place['formatted_address'] ?? '', + maxLines: 1, + overflow: TextOverflow.ellipsis, + style: TextStyle( + color: _kOnSurface.withOpacity(0.5), fontSize: 12), + ), ); }, ), @@ -255,171 +671,484 @@ class NavigationView extends StatelessWidget { ), ); } +} - /// --- 2. أزرار التحكم بالتصميم العائم --- - Widget _buildFloatingMapControls(NavigationController controller) { - return Positioned( - // اجعلها تطفو فوق لوحة الملاحة - bottom: controller.currentInstruction.isNotEmpty ? 190 : 24, - right: 16, - child: Column( - children: [ - if (controller.polylines.isNotEmpty) ...[ - FloatingActionButton( - heroTag: 'rerouteBtn', - backgroundColor: Colors.white, - elevation: 6, - onPressed: () => controller.recalculateRoute(), - tooltip: 'إعادة حساب المسار', - child: const Icon(Icons.sync_alt, color: kPrimaryColor, size: 24), - ), - const SizedBox(height: 12), - ], - FloatingActionButton( - heroTag: 'gpsBtn', - backgroundColor: Colors.white, - elevation: 6, - onPressed: () { - if (controller.myLocation != null) { - controller.animateCameraToPosition( - controller.myLocation!, - bearing: controller.heading, - zoom: 18.5, - ); - } - }, - child: const Icon(Icons.gps_fixed, color: Colors.black54, size: 24), - ), - ], - ), - ); - } +class _LoadingOverlay extends StatelessWidget { + const _LoadingOverlay(); - /// --- 3. واجهة الملاحة بالتصميم العائم المطور --- - Widget _buildFloatingNavigationUI(NavigationController controller) { - return Positioned( - bottom: 16, - left: 16, - right: 16, + @override + Widget build(BuildContext context) { + return Positioned.fill( child: Container( - decoration: BoxDecoration( - gradient: const LinearGradient( - colors: [Color(0xFF1E88E5), Color(0xFF0D47A1)], // أزرق متدرج - begin: Alignment.topCenter, - end: Alignment.bottomCenter, - ), - borderRadius: BorderRadius.circular(28), - boxShadow: [ - BoxShadow( - color: Colors.black.withOpacity(0.3), - blurRadius: 25, - offset: const Offset(0, 10), + color: Colors.black38, + child: Center( + child: Container( + padding: const EdgeInsets.all(24), + decoration: BoxDecoration( + color: _kCardColor, + borderRadius: BorderRadius.circular(20), ), - ], - ), - child: Padding( - padding: const EdgeInsets.fromLTRB(22, 20, 22, 22), - child: Column( - mainAxisSize: MainAxisSize.min, - children: [ - // --- الصف العلوي: الإرشاد والمسافة --- - Row( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - // الأيقونة - Container( - padding: const EdgeInsets.all(10), - decoration: BoxDecoration( - color: Colors.white.withOpacity(0.2), - shape: BoxShape.circle, - ), - child: const Icon(Icons.navigation_rounded, - color: Colors.white, size: 28), - ), - const SizedBox(width: 16), - // الإرشاد - Expanded( - child: Text( - controller.currentInstruction, - style: const TextStyle( - color: Colors.white, - fontSize: 22, - fontWeight: FontWeight.bold, - height: 1.3, - ), - maxLines: 2, - overflow: TextOverflow.ellipsis, - ), - ), - const SizedBox(width: 16), - // المسافة - Text( - controller.distanceToNextStep, - style: const TextStyle( - color: Colors.white, - fontSize: 32, - fontWeight: FontWeight.bold, - ), - ), - ], - ), - - // --- فاصل --- - if (controller.nextInstruction.isNotEmpty || - controller.currentSpeed > 0) - const Padding( - padding: EdgeInsets.symmetric(vertical: 14.0), - child: Divider(color: Colors.white30, height: 1), - ), - - // --- الصف السفلي: الإرشاد التالي والسرعة --- - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - // الإرشاد التالي - Expanded( - child: controller.nextInstruction.isNotEmpty - ? Text( - 'التالي: ${controller.nextInstruction}', - style: const TextStyle( - color: Colors.white70, - fontSize: 15, - fontWeight: FontWeight.w500, - ), - maxLines: 1, - overflow: TextOverflow.ellipsis, - ) - : const SizedBox(), // يترك مساحة فارغة إذا لم يكن هناك إرشاد تالي - ), - - // السرعة - Row( - children: [ - Text( - controller.currentSpeed.toStringAsFixed(0), - style: const TextStyle( - color: Colors.white, - fontSize: 22, - fontWeight: FontWeight.bold, - ), - ), - const SizedBox(width: 6), - const Text( - 'كم/س', - style: TextStyle( - color: Colors.white70, - fontSize: 14, - fontWeight: FontWeight.w500, - ), - ), - ], - ), - ], - ), - ], + child: + const CircularProgressIndicator(color: AppColor.primaryColor), ), ), ), ); } } + +class _ExploreActionRow extends StatelessWidget { + final NavigationController controller; + const _ExploreActionRow({required this.controller}); + + @override + Widget build(BuildContext context) { + final bool hasRoutes = controller.routes.isNotEmpty; + final isAr = box.read(BoxName.lang) == 'ar'; + final double safeBottom = MediaQuery.of(context).padding.bottom; + + if (hasRoutes) return const SizedBox.shrink(); + + return Positioned( + bottom: safeBottom + 20, + left: 0, + right: 0, + child: SingleChildScrollView( + scrollDirection: Axis.horizontal, + padding: const EdgeInsets.symmetric(horizontal: 16), + physics: const BouncingScrollPhysics(), + child: Row( + children: [ + _ActionCapsule( + icon: Icons.add_rounded, + label: isAr ? 'إضافة' : 'Add', + onTap: () => controller.togglePlaceSelectionMode(), + isPrimary: true, + ), + _ActionCapsule( + icon: Icons.home_rounded, + label: isAr ? 'المنزل' : 'Home', + onTap: () => controller.goToFavorite('home'), + ), + _ActionCapsule( + icon: Icons.work_rounded, + label: isAr ? 'العمل' : 'Work', + onTap: () => controller.goToFavorite('work'), + ), + _ActionCapsule( + icon: Icons.bookmark_rounded, + label: isAr ? 'المحفوظات' : 'Saved', + onTap: () {}, + ), + ], + ), + ), + ); + } +} + +class _ActionCapsule extends StatelessWidget { + final IconData icon; + final String label; + final VoidCallback onTap; + final bool isPrimary; + + const _ActionCapsule({ + required this.icon, + required this.label, + required this.onTap, + this.isPrimary = false, + }); + + @override + Widget build(BuildContext context) { + Color bgColor; + Color textColor; + + if (isPrimary) { + bgColor = const Color(0xFF0D47A1).withOpacity(0.9); + textColor = Colors.white; + } else { + bgColor = _kCardColor.withOpacity(0.85); + textColor = _kOnSurface; + } + + return Padding( + padding: const EdgeInsets.only(right: 8), + child: GestureDetector( + onTap: () { + HapticFeedback.lightImpact(); + onTap(); + }, + child: ClipRRect( + borderRadius: BorderRadius.circular(50), + child: BackdropFilter( + filter: ImageFilter.blur(sigmaX: 12, sigmaY: 12), + child: Container( + padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 12), + decoration: BoxDecoration( + color: bgColor, + borderRadius: BorderRadius.circular(50), + border: Border.all( + color: Colors.white.withOpacity(0.2), width: 1.2), + boxShadow: const [ + BoxShadow( + color: Color(0x14000000), + blurRadius: 8, + offset: Offset(0, 4)) + ], + ), + child: Row( + mainAxisSize: MainAxisSize.min, + children: [ + Icon(icon, size: 18, color: textColor), + const SizedBox(width: 8), + Text( + label, + style: TextStyle( + fontSize: 14, + fontWeight: FontWeight.w700, + color: textColor, + ), + ), + ], + ), + ), + ), + ), + ), + ); + } +} + +class _LocationPickerOverlay extends StatelessWidget { + final NavigationController controller; + const _LocationPickerOverlay({required this.controller}); + + @override + Widget build(BuildContext context) { + if (!controller.isSelectingPlaceLocation) return const SizedBox.shrink(); + + final isAr = box.read(BoxName.lang) == 'ar'; + + return Stack( + children: [ + IgnorePointer( + child: Container(color: Colors.black.withOpacity(0.1)), + ), + IgnorePointer( + child: Center( + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + Container( + padding: const EdgeInsets.all(8), + decoration: BoxDecoration( + color: Colors.white.withOpacity(0.9), + shape: BoxShape.circle, + boxShadow: [ + BoxShadow( + color: Colors.black.withOpacity(0.2), + blurRadius: 10, + offset: const Offset(0, 4)) + ], + ), + child: const Icon(Icons.add_location_alt_rounded, + color: Color(0xFF0D47A1), size: 40), + ), + const SizedBox(height: 40), + ], + ), + ), + ), + Positioned( + bottom: 110, + left: 32, + right: 32, + child: ElevatedButton( + style: ElevatedButton.styleFrom( + backgroundColor: const Color(0xFF1B5E20), + padding: const EdgeInsets.symmetric(vertical: 16), + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(16)), + elevation: 8, + shadowColor: const Color(0xFF1B5E20).withOpacity(0.5), + ), + onPressed: () => _showAddPlaceFormDialog(context, controller), + child: Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + const Icon(Icons.check_circle_rounded, color: Colors.white), + const SizedBox(width: 12), + Text( + isAr ? 'تأكيد الموقع' : 'Confirm Location', + style: const TextStyle( + color: Colors.white, + fontSize: 18, + fontWeight: FontWeight.w800), + ), + ], + ), + ), + ), + Positioned( + top: 140, + left: 40, + right: 40, + child: IgnorePointer( + child: Container( + padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 10), + decoration: BoxDecoration( + color: Colors.black.withOpacity(0.7), + borderRadius: BorderRadius.circular(30), + ), + child: Text( + isAr + ? "حرك الخريطة لتحديد موقع المكان" + : "Move map to pick place location", + textAlign: TextAlign.center, + style: const TextStyle(color: Colors.white, fontSize: 13), + ), + ), + ), + ), + Positioned( + top: 60, + right: 20, + child: FloatingActionButton.small( + backgroundColor: Colors.white, + elevation: 4, + child: const Icon(Icons.close_rounded, color: Colors.black87), + onPressed: () => controller.togglePlaceSelectionMode(), + ), + ), + ], + ); + } +} + +void _showAddPlaceFormDialog( + BuildContext context, NavigationController controller) { + final nameController = TextEditingController(); + final categoryNotifier = ValueNotifier?>(null); + final isAr = box.read(BoxName.lang) == 'ar'; + + Get.dialog( + AlertDialog( + shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(24)), + backgroundColor: _kCardColor, + title: Row( + children: [ + const Icon(Icons.add_business_rounded, + color: Color(0xFF0D47A1), size: 28), + const SizedBox(width: 12), + Text(isAr ? 'إضافة مكان جديد' : 'Add New Place', + style: + TextStyle(color: _kOnSurface, fontWeight: FontWeight.bold)), + ], + ), + content: SingleChildScrollView( + child: Column( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.stretch, + children: [ + Text( + isAr + ? "ساهم في تحسين الخريطة بإضافة الأماكن الناقصة." + : "Help improve the map by adding missing places.", + style: + TextStyle(color: _kOnSurface.withOpacity(0.6), fontSize: 13), + ), + const SizedBox(height: 20), + TextField( + controller: nameController, + style: TextStyle(color: _kOnSurface), + decoration: InputDecoration( + labelText: isAr ? 'اسم المكان' : 'Place Name', + labelStyle: TextStyle(color: _kOnSurface.withOpacity(0.6)), + prefixIcon: Icon(Icons.label_rounded, + color: _kOnSurface.withOpacity(0.6)), + filled: true, + fillColor: _kSurface.withOpacity(0.3), + border: + OutlineInputBorder(borderRadius: BorderRadius.circular(12)), + ), + ), + const SizedBox(height: 16), + ValueListenableBuilder?>( + valueListenable: categoryNotifier, + builder: (context, selected, _) { + return InkWell( + onTap: () => _showCategoryPicker(context, (cat) { + categoryNotifier.value = cat; + }), + borderRadius: BorderRadius.circular(12), + child: Container( + padding: const EdgeInsets.symmetric( + horizontal: 12, vertical: 16), + decoration: BoxDecoration( + color: _kSurface.withOpacity(0.3), + borderRadius: BorderRadius.circular(12), + border: Border.all(color: Colors.grey.withOpacity(0.3)), + ), + child: Row( + children: [ + Icon(Icons.category_rounded, + color: _kOnSurface.withOpacity(0.6)), + const SizedBox(width: 12), + Expanded( + child: Text( + selected != null + ? (isAr ? selected['ar']! : selected['en']!) + : (isAr ? 'اختر الفئة' : 'Select Category'), + style: TextStyle( + color: selected != null + ? _kOnSurface + : _kOnSurface.withOpacity(0.4), + fontSize: 16, + ), + ), + ), + Icon(Icons.keyboard_arrow_down_rounded, + color: _kOnSurface.withOpacity(0.6)), + ], + ), + ), + ); + }), + const SizedBox(height: 24), + ElevatedButton( + style: ElevatedButton.styleFrom( + backgroundColor: const Color(0xFF0D47A1), + padding: const EdgeInsets.symmetric(vertical: 16), + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(12)), + ), + onPressed: () { + if (nameController.text.isNotEmpty && + categoryNotifier.value != null) { + Get.back(); + controller.submitNewPlace( + nameController.text, categoryNotifier.value!['id']!); + } else { + mySnackbarWarning( + isAr ? 'يرجى إكمال البيانات' : 'Please fill all fields'); + } + }, + child: Text(isAr ? 'إرسال' : 'Submit', + style: const TextStyle( + color: Colors.white, fontWeight: FontWeight.bold)), + ), + TextButton( + onPressed: () => Get.back(), + child: Text(isAr ? 'إلغاء' : 'Cancel', + style: TextStyle(color: _kOnSurface.withOpacity(0.6))), + ), + ], + ), + ), + ), + ); +} + +void _showCategoryPicker( + BuildContext context, Function(Map) onSelected) { + final isAr = box.read(BoxName.lang) == 'ar'; + + Get.bottomSheet( + Container( + decoration: BoxDecoration( + color: _kCardColor, + borderRadius: const BorderRadius.vertical(top: Radius.circular(24)), + ), + padding: const EdgeInsets.only(top: 12, bottom: 24), + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + Container( + width: 40, + height: 4, + decoration: BoxDecoration( + color: Colors.grey.withOpacity(0.3), + borderRadius: BorderRadius.circular(2), + ), + ), + const SizedBox(height: 16), + Text(isAr ? 'اختر الفئة' : 'Select Category', + style: TextStyle( + fontSize: 18, + fontWeight: FontWeight.bold, + color: _kOnSurface)), + const SizedBox(height: 16), + Flexible( + child: ListView.builder( + shrinkWrap: true, + itemCount: NavigationController.placeCategories.length, + itemBuilder: (context, index) { + final cat = NavigationController.placeCategories[index]; + return ListTile( + leading: Icon(_getIconData(cat['icon']!), + color: const Color(0xFF0D47A1)), + title: Text(isAr ? cat['ar']! : cat['en']!, + style: TextStyle( + color: _kOnSurface, fontWeight: FontWeight.w600)), + onTap: () { + HapticFeedback.lightImpact(); + onSelected(cat); + Get.back(); + }, + ); + }, + ), + ), + ], + ), + ), + isScrollControlled: true, + ); +} + +IconData _getIconData(String name) { + switch (name) { + case 'restaurant': + return Icons.restaurant_rounded; + case 'coffee': + return Icons.coffee_rounded; + case 'shopping_basket': + return Icons.shopping_basket_rounded; + case 'local_pharmacy': + return Icons.local_pharmacy_rounded; + case 'local_gas_station': + return Icons.local_gas_station_rounded; + case 'atm': + return Icons.atm_rounded; + case 'account_balance': + return Icons.account_balance_rounded; + case 'mosque': + return Icons.mosque_rounded; + case 'local_hospital': + return Icons.local_hospital_rounded; + case 'school': + return Icons.school_rounded; + case 'park': + return Icons.park_rounded; + case 'hotel': + return Icons.hotel_rounded; + case 'shopping_mall': + return Icons.store_rounded; + case 'fitness_center': + return Icons.fitness_center_rounded; + case 'content_cut': + return Icons.content_cut_rounded; + case 'bakery_dining': + return Icons.bakery_dining_rounded; + case 'local_laundry_service': + return Icons.local_laundry_service_rounded; + case 'build': + return Icons.build_rounded; + case 'gavel': + return Icons.gavel_rounded; + default: + return Icons.place_rounded; + } +} diff --git a/lib/controller/home/navigation/route_matcher_worker.dart b/lib/controller/home/navigation/route_matcher_worker.dart index 7ff3bc0..edf7ed4 100644 --- a/lib/controller/home/navigation/route_matcher_worker.dart +++ b/lib/controller/home/navigation/route_matcher_worker.dart @@ -2,7 +2,7 @@ import 'dart:async'; import 'dart:isolate'; import 'dart:typed_data'; -import 'package:google_maps_flutter/google_maps_flutter.dart'; +import 'package:intaleq_maps/intaleq_maps.dart'; import 'dart:math'; /// Worker entrypoint (spawnUri/spawn). diff --git a/lib/controller/home/points_for_rider_controller.dart b/lib/controller/home/points_for_rider_controller.dart index cbd4856..03aca65 100755 --- a/lib/controller/home/points_for_rider_controller.dart +++ b/lib/controller/home/points_for_rider_controller.dart @@ -1,6 +1,6 @@ import 'package:flutter/material.dart'; import 'package:get/get.dart'; -import 'package:google_maps_flutter/google_maps_flutter.dart'; +import 'package:intaleq_maps/intaleq_maps.dart'; import 'package:sefer_driver/constant/style.dart'; import '../../constant/api_key.dart'; diff --git a/lib/controller/local/local_controller.dart b/lib/controller/local/local_controller.dart index b95121a..38a726b 100755 --- a/lib/controller/local/local_controller.dart +++ b/lib/controller/local/local_controller.dart @@ -4,109 +4,57 @@ import 'package:get/get.dart'; import '../../constant/box_name.dart'; import '../../main.dart'; import '../themes/themes.dart'; +import '../profile/setting_controller.dart'; class LocaleController extends GetxController { Locale? language; String countryCode = ''; - ThemeData appTheme = lightThemeEnglish; + ThemeData get appTheme { + String lang = box.read(BoxName.lang) ?? 'en'; + bool isDarkMode = box.read('isDarkMode') ?? false; + return _getThemeFor(lang, isDarkMode); + } + + ThemeData get lightTheme { + String lang = box.read(BoxName.lang) ?? 'en'; + return _getThemeFor(lang, false); + } + + ThemeData get darkTheme { + String lang = box.read(BoxName.lang) ?? 'en'; + return _getThemeFor(lang, true); + } + + ThemeData _getThemeFor(String lang, bool isDarkMode) { + if (lang.startsWith('ar')) { + return isDarkMode ? darkThemeArabic : lightThemeArabic; + } else { + return isDarkMode ? darkThemeEnglish : lightThemeEnglish; + } + } + + void refreshTheme() { + update(); + } void changeLang(String langcode) { - Locale locale; - switch (langcode) { - case "ar": - locale = const Locale("ar"); - appTheme = lightThemeArabic; - box.write(BoxName.lang, 'ar'); - break; - case "en": - locale = const Locale("en"); - appTheme = lightThemeEnglish; - box.write(BoxName.lang, 'en'); - break; - case "tr": - locale = const Locale("tr"); - appTheme = lightThemeEnglish; - box.write(BoxName.lang, 'tr'); - break; - case "fr": - locale = const Locale("fr"); - appTheme = lightThemeEnglish; - box.write(BoxName.lang, 'fr'); - break; - case "it": - locale = const Locale("it"); - appTheme = lightThemeEnglish; - box.write(BoxName.lang, 'it'); - break; - case "de": - locale = const Locale("de"); - appTheme = lightThemeEnglish; - box.write(BoxName.lang, 'de'); - break; - case "el": - locale = const Locale("el"); - appTheme = lightThemeEnglish; - box.write(BoxName.lang, 'el'); - break; - case "es": - locale = const Locale("es"); - appTheme = lightThemeEnglish; - box.write(BoxName.lang, 'es'); - break; - case "fa": - locale = const Locale("fa"); - appTheme = lightThemeEnglish; - box.write(BoxName.lang, 'fa'); - break; - case "zh": - locale = const Locale("zh"); - appTheme = lightThemeEnglish; - box.write(BoxName.lang, 'zh'); - break; - case "ru": - locale = const Locale("ru"); - appTheme = lightThemeEnglish; - box.write(BoxName.lang, 'ru'); - break; - case "hi": - locale = const Locale("hi"); - appTheme = lightThemeEnglish; - box.write(BoxName.lang, 'hi'); - break; - case "ar-ma": - locale = const Locale("ar-ma"); - appTheme = lightThemeArabic; - box.write(BoxName.lang, 'ar-ma'); - break; - case "ar-gulf": - locale = const Locale("ar-gulf"); - appTheme = lightThemeArabic; - box.write(BoxName.lang, 'ar-gulf'); - break; - default: - locale = Locale(Get.deviceLocale!.languageCode); - box.write(BoxName.lang, Get.deviceLocale!.languageCode); - appTheme = lightThemeEnglish; - break; - } - + Locale locale = Locale(langcode); box.write(BoxName.lang, langcode); - Get.changeTheme(appTheme); Get.updateLocale(locale); update(); } + @override void onInit() { String? storedLang = box.read(BoxName.lang); if (storedLang == null) { - // Use device language if no language is stored storedLang = Get.deviceLocale!.languageCode; box.write(BoxName.lang, storedLang); } - - changeLang(storedLang); + language = Locale(storedLang); super.onInit(); } } + diff --git a/lib/controller/local/translations.dart b/lib/controller/local/translations.dart index 06b0e86..5ee8184 100755 --- a/lib/controller/local/translations.dart +++ b/lib/controller/local/translations.dart @@ -4,9611 +4,2519 @@ class MyTranslation extends Translations { @override Map> get keys => { "ar": { - "Order": "طلب", - "OrderVIP": "طلب VIP", - "Cancel Trip": "إلغاء الرحلة", - "Passenger Cancel Trip": "الراكب ألغى الرحلة", - "VIP Order": "طلب VIP", - 'Hi ,I Arrive your site': "مرحبًا، لقد وصلت إلى موقعك", - "The driver accepted your trip": "السائق قبل رحلتك", - "message From passenger": "رسالة من الراكب", - "Cancel": "إلغاء", - "Trip Cancelled. The cost of the trip will be added to your wallet.": - "تم إلغاء الرحلة. سيتم إضافة تكلفة الرحلة إلى محفظتك.", - "token change": "تغيير الرمز", - "face detect": "كشف الوجه", - "Face Detection Result": "نتيجة كشف الوجه", - "similar": "مشابه", - "not similar": "غير مشابه", - "Hi ,I will go now": "مرحبًا، سأذهب الآن", - "Passenger come to you": "الراكب قادم إليك", - "Call Income": "مكالمة واردة", - "Call Income from Passenger": "مكالمة واردة من الراكب", - "Criminal Document Required": "مطلوب وثيقة جنائية", - "You should have upload it .": "يجب عليك تحميلها.", - "Call End": "انتهاء المكالمة", - "The order has been accepted by another driver.": - "تم قبول الطلب من قبل سائق آخر.", - "The order Accepted by another Driver": - "تم قبول الطلب من قبل سائق آخر", - "We regret to inform you that another driver has accepted this order.": - "نأسف لإعلامك بأن سائقًا آخر قد قبل هذا الطلب.", - "Driver Applied the Ride for You": "السائق قدم الطلب لك", - "Applied": "تم التقديم", - 'Pay by Sham Cash': 'الدفع عبر شام كاش', - 'Pay with Debit Card': 'الدفع ببطاقة الخصم', - "Please go to Car Driver": "يرجى الذهاب إلى سائق السيارة", - "Ok I will go now.": "حسنًا، سأذهب الآن.", - "Accepted Ride": "تم قبول الرحلة", - "Driver Accepted the Ride for You": "السائق قبل الرحلة لك", - "Promo": "عرض ترويجي", - "Show latest promo": "عرض أحدث عرض ترويجي", - "Trip Monitoring": "مراقبة الرحلة", - "Driver Is Going To Passenger": "السائق في طريقه إليك", - "Please stay on the picked point.": - "يرجى البقاء في نقطة الالتقاط المحددة.", - "message From Driver": "رسالة من السائق", - "Trip is Begin": "بدأت الرحلة", - 'Rides': 'الرحلات', - "Invalid customer MSISDN": "رقم هاتف العميل غير صالح", - 'Your Activity': 'نشاطك', - "Customer MSISDN doesn’t have customer wallet": - "رقم هاتف العميل لا يحتوي على محفظة عميل", - 'Please enter the number without the leading 0': - 'يرجى إدخال الرقم بدون الصفر الأولي', - 'witout zero': 'بدون صفر', - "You cannot call the passenger due to policy violations": - "لا يمكنك الاتصال بالراكب بسبب انتهاكات السياسة", - "Alert": "تنبيه", - "Passenger cancelled the ride.": "الراكب ألغى الرحلة.", - "Reason": "السبب", - 'Waiting Time': 'وقت الانتظار', - 'Confirm Cancellation': 'تأكيد الإلغاء', - 'You Can Cancel the Trip and get Cost From ': - 'يمكنك إلغاء الرحلة واسترداد التكلفة من ', - 'Please enter a correct phone': 'يرجى إدخال رقم هاتف صحيح', - 'Only Syrian phone numbers are allowed': - 'يسمح بأرقام الهواتف السورية فقط', - 'Go to passenger:': 'اذهب إلى الراكب:', - 'Birth year must be 4 digits': - 'يجب أن يكون سنة الميلاد مكونة من 4 أرقام', - 'Required field': 'حقل مطلوب', - 'You are not near': 'أنت لست بالقرب من', - 'Please enter your phone number': 'يرجى إدخال رقم هاتفك', - 'Enter a valid year': 'أدخل سنة صحيحة', - 'Phone number seems too short': 'يبدو أن رقم الهاتف قصير جدًا', - 'You have upload Criminal documents': 'لقد قمت بتحميل وثائق جنائية', - 'Close': 'إغلاق', - "Cancel Trip from driver": "إلغاء الرحلة من السائق", - "We will look for a new driver.\nPlease wait.": - "هنبحث عن سائق جديد.\nمن فضلك انتظر.", - "The driver canceled your ride.": "السائق ألغى رحلتك.", - "Driver Finish Trip": "السائق أنهى الرحلة", - "you will pay to Driver": "هتدفع للسائق", - "Don’t forget your personal belongings.": "متنساش حاجاتك الشخصية.", - "Please make sure you have all your personal belongings and that any remaining fare, if applicable, has been added to your wallet before leaving. Thank you for choosing the Intaleq app": - "من فضلك تأكد إن معاك كل حاجاتك الشخصية وإن أي مبلغ متبقي، لو موجود، تم إضافته لمحفظتك قبل ما تمشي. شكرًا لاستخدامك تطبيق انطلق", - "Finish Monitor": "إنهاء المراقبة", - "Trip finished": "الرحلة انتهت", - "Call Income from Driver": "مكالمة واردة من السائق", - "Driver Cancelled Your Trip": "السائق ألغى رحلتك", - "you will pay to Driver you will be pay the cost of driver time look to your Intaleq Wallet": - "هتدفع للسائق هتدفع تكلفة وقت السائق شوف محفظة Intaleq بتاعتك", - "Order Applied": "تم تطبيق الطلب", - - //firebase above - "Driver Portal": "بوابة السائق", - "Sign in to start your journey": "سجّل الدخول لبدء رحلتك", - "Sign in with a provider for easy access": - "سجّل الدخول عبر أحد المزودين للوصول بسهولة", - "Sign In with Google": "تسجيل الدخول باستخدام جوجل", - "Sign in with Apple": "تسجيل الدخول باستخدام آبل", - "Or": "أو", - "Create Account with Email": "إنشاء حساب بالبريد الإلكتروني", - "Need help? Contact Us": "هل تحتاج للمساعدة؟ تواصل معنا", - "Create Driver Account": "إنشاء حساب سائق", - "Driver Login": "تسجيل دخول السائق", - "Email": "البريد الإلكتروني", - "Enter your email": "أدخل بريدك الإلكتروني", - "Please enter a valid email": "الرجاء إدخال بريد إلكتروني صالح", - "Password": "كلمة المرور", - "Enter your password": "أدخل كلمة المرور", - "Password must be at least 6 characters": - "يجب أن تتكون كلمة المرور من 6 أحرف على الأقل", - "Create Account": "إنشاء حساب", - 'Pay by MTN Wallet': 'الدفع عبر محفظة MTN', - 'Pay by Syriatel Wallet': 'الدفع عبر محفظة سيريتل', - "Login": "تسجيل الدخول", - "Back to other sign-in options": "العودة إلى خيارات التسجيل الأخرى", - "Driver Agreement": "اتفاقية السائق", - "To become a driver, you must review and agree to the ": - "لتصبح سائقًا، يجب عليك مراجعة والموافقة على ", - "Terms of Use": "شروط الاستخدام", - " and acknowledge our Privacy Policy.": - " والإقرار بسياسة الخصوصية الخاصة بنا.", - "I Agree": "أنا أوافق", - "Continue": "متابعة", "Customer not found": "العميل غير موجود", - "Wallet is blocked": "المحفظة محظورة", - "Customer phone is not active": "هاتف العميل غير نشط", - "Balance not enough": "الرصيد غير كافٍ", - "Balance limit exceeded": "تم تجاوز حد الرصيد", - "Privacy Policy": "سياسة الخصوصية", - "Location Access Required": "مطلوب الوصول إلى الموقع", - "We need access to your location to match you with nearby passengers and provide accurate navigation.": - "نحتاج للوصول إلى موقعك لمطابقتك مع الركاب القريبين وتوفير توجيه دقيق.", - "Please allow location access \"all the time\" to receive ride requests even when the app is in the background.": - "الرجاء السماح بالوصول إلى الموقع \"طوال الوقت\" لاستقبال طلبات الرحلات حتى عندما يكون التطبيق في الخلفية.", - "Allow Location Access": "السماح بالوصول إلى الموقع", - "Open Settings": "فتح الإعدادات", - "payment_success": "تمت العملية بنجاح", - "transaction_id": "رقم العملية", - "amount_paid": "المبلغ المدفوع", - "bonus_added": "البونص المضاف", - "points": "نقطة", - "transaction_failed": "فشل العملية", - "connection_failed": "فشل الاتصال", - "server_error": "خطأ في الخادم", - "server_error_message": "حدث خطأ أثناء الاتصال بالخادم", - - "cancel": "إلغاء", "Syria": "‏سوريا", - "Security Warning": "تحذير أمني", - "Potential security risks detected. The application will close in @seconds seconds.": - "تم اكتشاف مخاطر أمنية محتملة. سيتم إغلاق التطبيق خلال @seconds ثانية.", - 'please order now': " ‏الرجاء الطلب مرة أخرى", - 'Session expired. Please log in again.': - 'انتهت الجلسة. يرجى تسجيل الدخول مرة أخرى.', - "Security Warning": "⚠️ تحذير أمني", - "Potential security risks detected. The application may not function correctly.": - "تم اكتشاف ثغرات أمنية على هذا الجهاز. للحفاظ على أمان بياناتك، سيتم حذف جميع البيانات وإغلاق التطبيق.", - "How to use Intaleq": "كيفية استخدام Intaleq", - "What are the order details we provide to you?": - "ما هي تفاصيل الطلب التي نوفرها لك؟", - 'An OTP has been sent to your number.': - 'تم إرسال رمز التحقق إلى رقمك.', - "Intaleq Wallet Features:\n\nTransfer money multiple times.\nTransfer to anyone.\nMake purchases.\nCharge your account.\nCharge a friend's Intaleq account.\nStore your money with us and receive it in your bank as a monthly salary.": - "ميزات محفظة Intaleq:\n\nتحويل الأموال عدة مرات.\nالتحويل إلى أي شخص.\nإجراء عمليات شراء.\nشحن حسابك.\nشحن حساب Intaleq لصديق.\nقم بتخزين أموالك معنا واستلامها في بنكك كراتب شهري.", - "What is the feature of our wallet?": "ما هي مميزات محفظتنا؟", - "What is Types of Trips in Intaleq?": - "ما هي أنواع الرحلات في Intaleq؟", - "No rides available for your vehicle type.": "لا توجد رحلات متاحة .", - "Failed to fetch rides. Please try again.": - "فشل في جلب الرحلات. يرجى المحاولة مرة أخرى.", - '''Types of Trips in Intaleq: - -Comfort: For cars newer than 2017 with air conditioning. -Lady: For girl drivers. -Speed: For fixed salary and endpoints. -Mashwari: For flexible trips where passengers choose the car and driver with prior arrangements. -Raih Gai: For same-day return trips longer than 50km. -''': """أنواع الرحلات في Intaleq: - -راحة: للسيارات الأحدث من 2017 مع تكييف الهواء. -للسائقات الإناث. -سبيد: براتب ثابت ونقاط نهاية محددة. -مشاوير: للرحلات المرنة حيث يختار الركاب السيارة والسائق باتفاق مسبق. -رحّي غاي: للرحلات ذات العودة في نفس اليوم التي تزيد عن 50 كم. -""", - "I will go now": "هروح دلوقتي", - "Yes": "نعم", - 'Privacy Policy': "سياسة الخصوصية", - 'Ride info': "معلومات الرحلة", - 'you dont have accepted ride': "ليس لديك رحلة مقبولة", - 'Total Points': "إجمالي النقاط", - "No,I want": "لا، أنا عاوز", - "Your fee is": "المبلغ بتاعك هو", - "Do you want to pay Tips for this Driver": - "عاوز تدفع إكرامية للسائق ده؟", - "Tip is": "الإكرامية هي", - "No i want": "لا، أنا عاوز", - "Call Passenger": "اتصل بالراكب", - "Send Message": "إرسال رسالة", - "Open in Maps": "فتح في الخرائط", - "Duration": "المدة", - "Distance": "المسافة", - "Passenger": "الراكب", - "Cost": "التكلفة", - // "Order": "طلب", - "Car Type": "نوع السيارة", - "Start the Ride": "ابدأ الرحلة", - // "Accepted Ride": "تم قبول الرحلة", - "Is the Passenger in your Car?": "هل الراكب في سيارتك؟", - "Don't start trip if passenger not in your car": - "لا تبدأ الرحلة إذا لم يكن الراكب في سيارتك", - "your ride is Accepted": "تم قبول رحلتك", - // "Driver Accepted the Ride for You": "السائق قبل الرحلة لك", - "I Arrive": "لقد وصلت", - // "Trip is Begin": "بدأت الرحلة", - "You are not near the passenger location": - "أنت لست بالقرب من موقع الراكب", - // "Driver Finish Trip": "السائق أنهى الرحلة", - "Please go to the pickup location exactly": - "يرجى الذهاب إلى موقع الالتقاط بالضبط", - "You Can Cancel the Trip and get Cost From": - "يمكنك إلغاء الرحلة واسترداد التكلفة من", - "Are you sure to cancel?": "هل أنت متأكد من الإلغاء؟", - // "Driver Cancelled Your Trip": "السائق ألغى رحلتك", - "You will need to pay the cost to the driver, or it will be deducted from your next trip": - "سيتم دفع التكلفة للسائق أو خصمها من رحلتك القادمة", - "Select a quick message": "اختر رسالة سريعة", - "Where are you, sir?": "أين أنت يا سيدي؟", - "I've been trying to reach you but your phone is off.": - "كنت أحاول الوصول إليك لكن هاتفك مغلق.", - "Please don't be late, I'm waiting for you at the specified location.": - "يرجى عدم التأخير، أنا في انتظارك في الموقع المحدد.", - "Please don't be late": "يرجى عدم التأخير", - "Type something": "اكتب شيئًا", - "Passenger Information": "معلومات الراكب", - "Name": "الاسم", - "wallet_updated": "تم تحديث المحفظة", - "wallet_credited_message": "تم إضافة", - "default_tone": "النغمة الافتراضية", - "No orders available": "لا توجد طلبات متوفرة", - "Phone": "رقم الهاتف", - "A promotion record for this driver already exists for today.": - "يوجد بالفعل سجل ترويج لهذا السائق لهذا اليوم.", - "Gender": "الجنس", - "time Selected": "الوقت المختار", - "Ride Status": "حالة الرحلة", - "If you need any help or have questions, this is the right place to do that. You are welcome!": - "إذا كنت بحاجة إلى أي مساعدة أو لديك أي أسئلة، فهذا هو المكان المناسب لذلك. أهلاً وسهلاً بك!", - "ID Mismatch": "عدم تطابق الرقم التعريفي", - // "face detect": "كشف الوجه", - "Would you like to proceed with health insurance?": - "هل ترغب في الاستمرار مع التأمين الصحي؟", - "Confirmation": "تأكيد", - "Enter Health Insurance Provider": "أدخل مزود التأمين الصحي", - // "Yes": "نعم", - "No": "لا", - "You need to complete 500 trips": "يجب عليك إكمال 500 رحلة", - "Please enter a valid insurance provider": - "الرجاء إدخال مزود تأمين صالح", - "Opted out": "اختيار عدم الاستمرار", - "You have chosen not to proceed with health insurance.": - "لقد اخترت عدم الاستمرار مع التأمين الصحي.", - "Do you have a disease for a long time?": - "هل لديك مرض منذ فترة طويلة؟", - "When you complete 500 trips, you will be eligible for exclusive health insurance offers.": - "عند إكمال 500 رحلة، ستكون مؤهلاً للحصول على عروض حصرية للتأمين الصحي.", - "We have partnered with health insurance providers to offer you special health coverage. Complete 500 trips and receive a 20% discount on health insurance premiums.": - "لقد عقدنا شراكة مع مزودي التأمين الصحي لتقديم تغطية صحية خاصة لك. أكمل 500 رحلة واحصل على خصم 20% على أقساط التأمين الصحي.", - "Show health insurance providers near me": - "اعرض مزودي التأمين الصحي القريبين مني", - "Health Insurance": "التأمين الصحي", - "An error occurred while saving driver data": - "حدث خطأ أثناء حفظ بيانات السائق", - // "Face Detection Result": "نتيجة كشف الوجه", - "false": "خطأ", - "true": "صحيح", - "Failed to save driver data": "فشل حفظ بيانات السائق", - // "similar": "مشابه", - // "not similar": "غير مشابه", - "error": "خطأ", - "error_processing_document": "خطأ في معالجة المستند", - "expected": "متوقع", - "detected": "تم الكشف عنه", - "car_license_front": "الجانب الأمامي لرخصة السيارة", - "car_license_back": "الجانب الخلفي لرخصة السيارة", - "id_card_front": "الجانب الأمامي لبطاقة الهوية", - "id_card_back": "الجانب الخلفي لبطاقة الهوية", - "driver_license": "رخصة القيادة", - "unknown_document": "وثيقة غير معروفة", - "incorrect_document_title": "وثيقة غير صحيحة", - "incorrect_document_message": - "الرجاء تحميل {expected} الصحيحة. تم الكشف عن {detected}.", - "minute": "دقيقة", - "kilometer": "كم", - "You have successfully charged your account": "تم شحن حسابك بنجاح", - "has been added to your budget": "تمت إضافته إلى ميزانيتك", - "id_front": "هوية_أمامية", - "id_back": "هوية_خلفية", - "car_back": "سيارة_خلفية", - "car_front": "سيارة_أمامية", - "ID Documents Front": "الوثيقه الشخصية - الأمامية", - "Vehicle Details Front": "تفاصيل المركبة - الأمامية", - "Vehicle Details Back": "تفاصيل المركبة - الخلفية", - "Criminal Record": "السجل الجنائي", - "ID Documents Back": "الوثيقه الشخصية - الخلفية", - "Driver's License": "رخصة القيادة", - "No, still Waiting.": "لا، ما زلت في انتظار.", - "you can show video how to setup": - "يمكنك عرض فيديو حول كيفية الإعداد", - "don't start trip if not": "لا تبدأ الرحلة إذا لم", - "you are not moved yet !": "أنت لم تتحرك بعد!", - "Update Available": "تحديث متوفر", + "\$error": "صار خطأ", + "\${AppInformation.appName} Wallet": + "محفظة \${AppInformation.appName}", + ". I am at least 18 years old.": ". عمري 18 سنة أو أكثر.", + "I am currently located at": "أنا موجود حالياً بـ", + "I am using": "أنا عم بستخدم", + "If you need to reach me, please contact the driver directly at": + "إذا بدك تتواصل معي، اتصل بالسائق مباشرة على", + "Intaleq Wallet": "محفظة انطلق", + "KM": "كم", + "Minutes": "دقايق", + "Next as Cash !": "الرحلة الجاية كاش!", + "You Earn today is": "أرباحك اليوم هي", + "You Have in": "عندك بـ", + "and acknowledge our Privacy Policy.": + "وبوافق على سياسة الخصوصية بتاعتنا.", + "and acknowledge the": "وبوافق على", + "as the driver.": "كسائق.", + "below, I confirm that I have read and agree to the": + "تحت، بأؤكد إني قرأت ووافقت على", + "below, I have reviewed and agree to the Terms of Use and acknowledge the": + "تحت، راجعت ووافقت على شروط الاستخدام وبوافق على", + "below, I have reviewed and agree to the Terms of Use and acknowledge the Privacy Notice. I am at least 18 years of age.": + "تحت، راجعت ووافقت على شروط الاستخدام وبوافق على سياسة الخصوصية. عمري 18 سنة أو أكثر.", + "in your wallet": "بمحفظتك", + "is ON for this month": "مفعّلة هالشهر", + "tips\nTotal is": "الإكراميات\nالإجمالي هو", + "to arrive you.": "ليوصل لعندك.", + "to receive ride requests even when the app is in the background.": + "عشان تستلم طلبات الرحلات حتى لو التطبيق شغّال بالخلفية.", + "to ride with": "لترحل مع", + "with license plate": "لوحة أرقام", + "\$pricePoint": "\$pricePoint", + "\$title \$subtitle": "\$title \$subtitle", + ")[1]}": ")[1]}", + "*Intaleq APP CODE*": "*كود تطبيق انطلق*", + "*Intaleq DRIVER CODE*": "*كود سائق انطلق*", + "--": "--", + ". I am at least 18 years of age.": ". عمري 18 سنة أو أكثر.", + ". The app will connect you with a nearby driver.": + ". التطبيق رح يربطك بسائق قريب منك.", + "1. Describe Your Issue": "1. صف مشكلتك", + "10 and get 4% discount": "10 واحصل على خصم 4%", + "100 and get 11% discount": "100 واحصل على خصم 11%", + "1999": "1999", + "2. Attach Recorded Audio": "2. أرفق التسجيل الصوتي", + "2. Attach Recorded Audio (Optional)": + "2. أرفق التسجيل الصوتي (اختياري)", + "20 and get 6% discount": "20 واحصل على خصم 6%", + "27\\": "27\\", + "3. Review Details & Response": "3. راجع التفاصيل والرد", + "300 LE": "300 ل.م", + "3000 LE": "3000 ل.م", + "40 and get 8% discount": "40 واحصل على خصم 8%", + "5 digit": "5 أرقام", + "<< BACK": "<< رجوع", "A new version of the app is available. Please update to the latest version.": - "تتوفر نسخة جديدة من التطبيق. يرجى التحديث إلى أحدث إصدار.", - "We use location to get accurate and nearest passengers for you": - "نستخدم الموقع للحصول على أقرب الركاب وأكثرهم دقة لك", - "This ride is already applied by another driver.": - "هذه الرحلة قام بقبولها سائق آخر بالفعل.", - "My location is correct. You can search for me using the navigation app": - "موقعي صحيح. يمكنك البحث عني باستخدام تطبيق الملاحة", - "Hello, I'm at the agreed-upon location": - "مرحباً، أنا في المكان المتفق عليه", - // "message From Driver": "رسالة من السائق", - "How much longer will you be?": "‏قدامك قد إيه", - "Phone number is verified before": "تم التحقق من رقم الهاتف مسبقاً", - "Change Ride": "تغيير الرحلة", - "Authentication failed": "فشل المصادقة", - "Biometric Authentication": "المصادقة البيومترية", - "You should use Touch ID or Face ID to confirm payment": - "يجب عليك استخدام Touch ID أو Face ID لتأكيد الدفع", - "Cost Of Trip IS": "تكلفة الرحلة هي", - "You must be recharge your Account": - "رصيد حسابك غير كافٍ. يرجى إعادة الشحن للمتابعة", - "Ahli United Bank": "البنك الأهلي المتحد", - "Citi Bank N.A. Egypt": "سيتي بنك مصر", - "MIDBANK": "بنك ميد", - "Banque Du Caire": "بنك القاهرة", - "HSBC Bank Egypt S.A.E": "اتش اس بي سي", - "Credit Agricole Egypt S.A.E": "كريدي أجريكول مصر", - "Egyptian Gulf Bank": "البنك المصري الخليجي", - "The United Bank": "البنك المتحد", - "Qatar National Bank Alahli": "البنك الأهلي القطري", + "في نسخة جديدة من التطبيق. تفضل حدّث لآخر إصدار.", + "A promotion record for this driver already exists for today.": + "في سجل ترويجي لهالسائق من قبل بهاليوم.", + "A trip with a prior reservation, allowing you to choose the best captains and cars.": + "رحلة محجوزة مسبقاً، بتقدر تختار فيها أحسن السواقين والسيارات.", + "AI Page": "صفحة الذكاء الاصطناعي", + "AI failed to extract info": + "الذكاء الاصطناعي ما قدر يستخرج المعلومات", + "ATTIJARIWAFA BANK Egypt": "بنك التيجاري الوفا مصر", + "About Us": "من نحن", + "Abu Dhabi Commercial Bank – Egypt": "بنك أبوظبي التجاري – مصر", + "Abu Dhabi Islamic Bank – Egypt": "بنك أبوظبي الإسلامي – مصر", + "Accept Order": "اقبل الطلب", + "Accept Ride": "اقبل الرحلة", + "Accepted Ride": "الرحلة انقبلت", + "Accepted your order": "قبل طلبك", + "Account": "الحساب", + "Account Updated": "تم تحديث الحساب", + "Active Duration": "مدة النشاط", + "Active Duration:": "مدة النشاط:", + "Active Ride": "الرحلة النشطة", + "Active Users": "المستخدمين النشطين", + "Active ride in progress. Leaving might stop tracking. Exit?": + "في مشوار شغال هلق. الخروج ممكن يوقف التتبع. بدك تطلع؟", + "Activities": "النشاطات", + "Add Card": "إضافة بطاقة", + "Add Credit Card": "إضافة بطاقة ائتمان", + "Add Home": "ضيف المنزل", + "Add Location": "ضيف موقع", + "Add Location 1": "ضيف موقع 1", + "Add Location 2": "ضيف موقع 2", + "Add Location 3": "ضيف موقع 3", + "Add Location 4": "ضيف موقع 4", + "Add Payment Method": "إضافة طريقة دفع", + "Add Phone": "إضافة هاتف", + "Add Promo": "ضيف كود ترويجي", + "Add Question": "إضافة سؤال", + "Add SOS Phone": "ضيف رقم طوارئ", + "Add Stops": "إضافة محطات", + "Add Work": "ضيف الشغل", + "Add a Stop": "ضيف محطة", + "Add a comment (optional)": "إضافة تعليق (اختياري)", + "Add bank Account": "إضافة حساب بنكي", + "Add criminal page": "إضافة صحيفة الحالة الجنائية", + "Add funds using our secure methods": "ضيف رصيد بطرقنا الآمنة", + "Add new car": "إضافة سيارة جديدة", + "Add to Passenger Wallet": "إضافة لمحفة الراكب", + "Add wallet phone you use": "إضافة رقم المحفظة اللي عم تستخدمه", + "Address": "العنوان", + "Address:": "العنوان:", + "Admin DashBoard": "لوحة تحكم المسؤول", + "Affordable for Everyone": "أسعار مناسبة للكل", + "After this period": "بعد هالفترة", + "Afternoon Promo": "عرض الظهيرة", + "Afternoon Promo Rides": "رحلات عرض الظهيرة", + "Age": "العمر", + "Age is": "العمر هو", + "Agricultural Bank of Egypt": "البنك الزراعي المصري", + "Alert": "تنبيه", + "Alerts": "التنبيهات", + "Alex Bank Egypt": "بنك الإسكندرية مصر", + "Allow Location Access": "اسمح بالوصول للموقع", + "Allow overlay permission": "اسمح بصلاحية العرض فوق التطبيقات", + "Allowing location access will help us display orders near you. Please enable it now.": + "السماح بالوصول للموقع رح يساعدنا نعرض الطلبات القريبة منك. تفضل فعّله هلق.", + "Amount": "المبلغ", + "An OTP has been sent to your number.": "تم إرسال رمز التحقق لرقمك.", + "An application error occurred during upload.": + "صار خطأ بالتطبيق وقت الرفع.", + "An application error occurred.": "صار خطأ بالتطبيق.", + "An error occurred": "صار خطأ", + "An error occurred during contact sync: \$e": + "صار خطأ بمزامنة جهات الاتصال: \$e", + "An error occurred during the payment process.": + "صار خطأ بعملية الدفع.", + "An error occurred while loading contacts: \$e": + "صار خطأ وقت تحميل جهات الاتصال: \$e", + "An error occurred while picking a contact": + "صار خطأ وقت اختيار جهة اتصال", + "An error occurred while picking contacts:": + "صار خطأ وقت اختيار جهات الاتصال:", + "An error occurred while saving driver data": + "صار خطأ وقت حفظ بيانات السائق", + "An unexpected error occurred. Please try again.": + "صار خطأ غير متوقع. جرب مرة تانية.", + "An unexpected error occurred:": "صار خطأ غير متوقع:", + "Any comments about the passenger?": "في أي تعليق على الراكب؟", + "App Dark Mode": "الوضع الليلي للتطبيق", + "App Preferences": "تفضيلات التطبيق", + "App with Passenger": "التطبيق مع الراكب", + "Applied": "تم التطبيق", + "Apply": "تطبيق", + "Apply Order": "تطبيق الطلب", + "Apply Promo Code": "طبّق كود الخصم", + "Approaching your area. Should be there in 3 minutes.": + "عم يقرب من منطقتك. رح يوصل خلال 3 دقايق.", + "Approve Driver Documents": "الموافقة على وثائق السائق", + "Arab African International Bank": "العربي الأفريقي الدولي", "Arab Bank PLC": "البنك العربي", - "Emirates National Bank of Dubai": "بنك الإمارات دبي الوطني", - "Al Ahli Bank of Kuwait – Egypt": "البنك الأهلي الكويتي - مصر", - "National Bank of Kuwait – Egypt": "البنك الوطني الكويتي - مصر", "Arab Banking Corporation - Egypt S.A.E": "الشركة العربية المصرفية - مصر", - "First Abu Dhabi Bank": "بنك أبوظبي الأول", - "Abu Dhabi Islamic Bank – Egypt": "مصرف أبوظبي الإسلامي - مصر", + "Arab International Bank": "البنك العربي الدولي", + "Arab Investment Bank": "بنك الاستثمار العربي", + "Are You sure to ride to": "متأكد إنك بدك تروح لـ", + "Are you Sure to LogOut?": "متأكد إنك بدك تطلع من الحساب؟", + "Are you sure to cancel?": "متأكد إنك بدك تلغي؟", + "Are you sure to delete recorded files": + "متأكد إنك بدك تحذف الملفات المسجلة؟", + "Are you sure to delete this location?": + "متأكد إنك بدك تحذف هالموقع؟", + "Are you sure to delete your account?": "متأكد إنك بدك تحذف حسابك؟", + "Are you sure to exit ride ?": "متأكد إنك بدك تخرج من الرحلة؟", + "Are you sure to exit ride?": "متأكد إنك بدك تخرج من الرحلة؟", + "Are you sure to make this car as default": + "متأكد إنك بدك تخلي هالسيارة الافتراضية؟", + "Are you sure you want to cancel and collect the fee?": + "متأكد إنك بدك تلغي وتستلم الرسوم؟", + "Are you sure you want to cancel this trip?": + "متأكد إنك بدك تلغي هالرحلة؟", + "Are you sure you want to logout?": "متأكد إنك بدك تطلع من الحساب؟", + "Are you sure?": "متأكد؟", + "Are you sure? This action cannot be undone.": + "متأكد؟ هالعملية ما فيها رجعة.", + "Are you want to change": "بدك تغير", + "Are you want to go this site": "بدك تروح لهالموقع؟", + "Are you want to go to this site": "بدك تروح لهالموقع؟", + "Are you want to wait drivers to accept your order": + "بدك تستنى السواقين يقبلوا طلبك؟", + "Arrival time": "وقت الوصول", + "Associate Degree": "شهادة الدبلوم المشارك", + "Attach this audio file?": "ترفق هالملف الصوتي؟", + "Attention": "انتباه", + "Audio file not attached": "ما في ملف صوتي مرفق", + "Audio uploaded successfully.": "تم رفع الملف الصوتي بنجاح.", + "Authentication failed": "فشل المصادقة", + "Available Rides": "الرحلات المتاحة", + "Available for rides": "متاح للرحلات", + "Average of Hours of": "متوسط ساعات", + "Awaiting response...": "عم نستنى الرد...", + "Awfar Car": "سيارة أوفر", + "Back": "رجوع", + "Back to other sign-in options": + "الرجوع لخيارات تسجيل الدخول التانية", + "Bahrain": "البحرين", + "Balance": "الرصيد", + "Balance limit exceeded": "تم تجاوز حد الرصيد", + "Balance not enough": "الرصيد ما يكفي", + "Balance:": "الرصيد:", + "Bank Account": "حساب بنكي", + "Bank account added successfully": "تمت إضافة الحساب البنكي بنجاح", + "Banque Du Caire": "بنك القاهرة", + "Banque Misr": "بنك مصر", + "Be Slowly": "خفف السرعة", + "Be sure for take accurate images please": + "تأكد إنك تلتقط صور واضحة من فضلك", + "Be sure for take accurate images please\nYou have": + "تأكد إنك تلتقط صور واضحة من فضلك\nعندك", + "Be sure to use it quickly! This code expires at": + "تأكد تستخدمه بسرعة! هالكود بينتهي بـ", + "Because we are near, you have the flexibility to choose the ride that works best for you.": + "لأننا قريبين، عندك حرية تختار الرحلة اللي أنسب لك.", + "Before we start, please review our terms.": + "قبل ما نبدأ، تفضل راجع شروطنا.", + "Behavior Page": "صفحة السلوك", + "Behavior Score": "درجة السلوك", + "Best choice for a comfortable car with a flexible route and stop points. This airport offers visa entry at this price.": + "أحسن خيار لسيارة مريحة بطريق مرن ومحطات توقف. هالمطار بيوفر تأشيرة دخول بهالسعر.", + "Best choice for cities": "أحسن خيار للمدن", + "Best choice for comfort car and flexible route and stops point": + "أحسن خيار لسيارة مريحة وطريق مرن ومحطات توقف", + "Biometric Authentication": "المصادقة البيومترية", + "Birth Date": "تاريخ الميلاد", + "Birth year must be 4 digits": "سنة الميلاد لازم تكون 4 أرقام", + "Birthdate Mismatch": "عدم تطابق تاريخ الميلاد", + "Birthdate on ID front and back does not match.": + "تاريخ الميلاد بالهوية من الأمام والخلف ما بيتطابق.", + "Blom Bank": "بنك بلوم", + "Bonus gift": "هدية بونص", + "BookingFee": "رسوم الحجز", + "Bottom Bar Example": "مثال الشريط السفلي", + "But you have a negative salary of": "بس عندك راتب سلبي بقيمة", + "CODE": "الكود", + "Calculating...": "عم نحسب...", + "Call": "اتصل", + "Call Driver": "اتصل بالسائق", + "Call End": "انتهت المكالمة", + "Call Income": "مكالمة واردة", + "Call Income from Driver": "مكالمة واردة من السائق", + "Call Income from Passenger": "مكالمة واردة من الراكب", + "Call Left": "مكالمة فائتة", + "Call Page": "صفحة الاتصال", + "Call Passenger": "اتصل بالراكب", + "Call Support": "اتصل بالدعم", + "Camera Access Denied.": "تم رفض الوصول للكاميرا.", + "Camera not initialized yet": "الكاميرا ما تجهزت بعد", + "Camera not initilaized yet": "الكاميرا ما تجهزت بعد", + "Can I cancel my ride?": "مقدر ألغي رحلتي؟", + "Can we know why you want to cancel Ride ?": + "ممكن نعرف ليش بدك تلغي الرحلة؟", + "Cancel": "إلغاء", + "Cancel & Collect Fee": "إلغاء واستلام الرسوم", + "Cancel Ride": "إلغاء الرحلة", + "Cancel Search": "إلغاء البحث", + "Cancel Trip": "إلغاء الرحلة", + "Cancel Trip from driver": "إلغاء الرحلة من السائق", + "Cancel Trip?": "إلغاء الرحلة؟", + "Canceled": "ملغية", + "Canceled Orders": "الطلبات الملغاة", + "Cannot apply further discounts.": "ما في تطبيق خصومات إضافية.", + "Capture an Image of Your Criminal Record": + "التقط صورة لصحيفة الحالة الجنائية", + "Capture an Image of Your Driver License": "التقط صورة لرخصة السائق", + "Capture an Image of Your Driver’s License": + "التقط صورة لرخصة السائق", + "Capture an Image of Your ID Document Back": + "التقط صورة للوجه الخلفي للهوية", + "Capture an Image of Your ID Document front": + "التقط صورة للوجه الأمامي للهوية", + "Capture an Image of Your car license back": + "التقط صورة للوجه الخلفي لرخصة السيارة", + "Capture an Image of Your car license front": + "التقط صورة للوجه الأمامي لرخصة السيارة", + "Car": "سيارة", + "Car Color": "لون السيارة", + "Car Color (Hex)": "لون السيارة (كود)", + "Car Color (Name)": "لون السيارة (اسم)", + "Car Color:": "لون السيارة:", + "Car Details": "تفاصيل السيارة", + "Car Expire": "انتهاء صلاحية السيارة", + "Car Kind": "نوع السيارة", + "Car License Card": "رخصة السيارة", + "Car Make (e.g., Toyota)": "ماركة السيارة (مثال: تويوتا)", + "Car Make:": "ماركة السيارة:", + "Car Model (e.g., Corolla)": "موديل السيارة (مثال: كورولا)", + "Car Model:": "موديل السيارة:", + "Car Plate": "لوحة السيارة", + "Car Plate Number": "رقم لوحة السيارة", + "Car Plate is": "لوحة السيارة هي", + "Car Plate:": "لوحة السيارة:", + "Car Registration (Back)": "رخصة السيارة (خلفي)", + "Car Registration (Front)": "رخصة السيارة (أمامي)", + "Car Type": "نوع السيارة", + "Card Number": "رقم البطاقة", + "CardID": "رقم البطاقة", + "Cash": "كاش", + "Cash Out": "سحب الرصيد", + "Central Bank Of Egypt": "البنك المركزي المصري", + "Change Country": "تغيير البلد", + "Change Home location?": "تغيير موقع المنزل؟", + "Change Ride": "تغيير الرحلة", + "Change Route": "تغيير الطريق", + "Change Work location?": "تغيير موقع العمل؟", + "Change the app language": "تغيير لغة التطبيق", + "Charge your Account": "اشحن حسابك", + "Charge your account.": "اشحن حسابك.", + "Chassis": "الشاسيه", + "Check back later for new offers!": "رجع لاحقاً لعروض جديدة!", + "Checking for updates...": "عم نتحقق من التحديثات...", + "Choose Language": "اختر اللغة", + "Choose a contact option": "اختر خيار جهة اتصال", + "Choose between those Type Cars": "اختر بين هالأنواع من السيارات", + "Choose from Map": "اختر من الخريطة", + "Choose from contact": "اختر من جهات الاتصال", + "Choose the trip option that perfectly suits your needs and preferences.": + "اختر خيار الرحلة اللي بيناسب احتياجاتك وتفضيلاتك تماماً.", + "Choose who this order is for": "اختر هالطلب لمين", + "Choose your ride": "اختر رحلتك", + "Citi Bank N.A. Egypt": "سيتي بنك مصر", + "City": "المدينة", + "Claim your 20 LE gift for inviting": + "استلم هديتك 20 ل.م عشان الدعوة", + "Click here point": "اضغط هون", + "Click here to Show it in Map": "اضغط هون لعرضها بالخريطة", + "Close": "إغلاق", + "Closest & Cheapest": "الأقرب والأرخص", + "Closest to You": "الأقرب إليك", + "Code": "الكود", + "Code approved": "تمت الموافقة على الكود", + "Code not approved": "ما انقبل الكود", + "Collect Cash": "استلم كاش", + "Collect Payment": "استلم الدفع", + "Color": "اللون", + "Color is": "اللون هو", + "Comfort": "كومفورت", + "Comfort choice": "خيار مريح", + "Comfort ❄️": "كومفورت ❄️", + "Comfort: For cars newer than 2017 with air conditioning.": + "كومفورت: للسيارات موديل 2017 وما فوق مع تكييف.", + "Coming Soon": "قريباً", "Commercial International Bank - Egypt S.A.E": "البنك التجاري الدولي - مصر", - "Housing And Development Bank": "بنك الإسكان والتعمير", - "Banque Misr": "بنك مصر", - "Arab African International Bank": "البنك العربي الأفريقي الدولي", - "Egyptian Arab Land Bank": "البنك المصري العربي", - "Export Development Bank of Egypt": "بنك التنمية والتصدير المصري", - "Faisal Islamic Bank of Egypt": "البنك الإسلامي المصري", - "Blom Bank": "بلوم بنك", - "Abu Dhabi Commercial Bank – Egypt": "بنك أبوظبي التجاري - مصر", - "Alex Bank Egypt": "بنك الإسكندرية", - "Societe Arabe Internationale De Banque": "البنك العربي الدولي", - "National Bank of Egypt": "البنك الأهلي المصري", - "Al Baraka Bank Egypt B.S.C.": "بنك البركة مصر", + "Communication": "التواصل", + "Compensation Received": "تم استلام التعويض", + "Complaint": "شكوى", + "Complaint cannot be filed for this ride. It may not have been completed or started.": + "ما في تقديم شكوى لهالرحلة. ممكن ما تكون خلصت أو ما بلشت.", + "Complaint data saved successfully": "تم حفظ بيانات الشكوى بنجاح", + "Complete Payment": "إتمام الدفع", + "Completed": "مكتملة", + "Confirm": "تأكيد", + "Confirm & Find a Ride": "تأكيد والبحث عن رحلة", + "Confirm Attachment": "تأكيد المرفق", + "Confirm Cancellation": "تأكيد الإلغاء", + "Confirm Payment": "تأكيد الدفع", + "Confirm Pick-up Location": "تأكيد موقع الالتقاط", + "Confirm Selection": "تأكيد الاختيار", + "Confirm Trip": "تأكيد الرحلة", + "Confirm your Email": "تأكيد بريدك الإلكتروني", + "Confirmation": "تأكيد", + "Connected": "متصل", + "Contact Options": "خيارات التواصل", + "Contact Support": "تواصل مع الدعم", + "Contact Support to Recharge": "تواصل مع الدعم للشحن", + "Contact Us": "تواصل معنا", + "Contact permission is required to pick a contact": + "مطلوب صلاحية جهات الاتصال عشان تختار جهة اتصال", + "Contact permission is required to pick contacts": + "مطلوب صلاحية جهات الاتصال عشان تختار جهات اتصال", + "Contact us for any questions on your order.": + "تواصل معنا لأي سؤال عن طلبك.", + "Contacts Loaded": "تم تحميل جهات الاتصال", + "Contacts sync completed successfully!": + "تمت مزامنة جهات الاتصال بنجاح!", + "Continue": "متابعة", + "Continue Ride": "متابعة الرحلة", + "Continue straight": "كمل على خط مستقيم", + "Copy": "نسخ", + "Copy Code": "نسخ الكود", + "Copy this Promo to use it in your Ride!": + "انسخ هالعرض عشان تستخدمه برحلتك!", + "Cost": "التكلفة", + "Cost Duration": "مدة التكلفة", + "Cost Of Trip IS": "تكلفة الرحلة هي", + "Could not load trip details.": "ما انقدرنا نحمّل تفاصيل الرحلة.", + "Counts of Hours on days": "عدد الساعات بالأيام", + "Counts of budgets on days": "عدد الميزانيات بالأيام", + "Counts of rides on days": "عدد الرحلات بالأيام", + "Create Account": "إنشاء حساب", + "Create Account with Email": "إنشاء حساب بالبريد الإلكتروني", + "Create Driver Account": "إنشاء حساب سائق", + "Create Wallet to receive your money": "أنشئ محفظة عشان تستلم فلوسك", + "Create new Account": "إنشاء حساب جديد", + "Credit": "رصيد", + "Credit Agricole Egypt S.A.E": "كريدي أجريكول مصر", + "Credit card is": "بطاقة الائتمان هي", + "Criminal Document": "الوثيقة الجنائية", + "Criminal Document Required": "مطلوب وثيقة جنائية", + "Criminal Record": "صحيفة الحالة الجنائية", + "Cropper": "أداة القص", + "Current Balance": "الرصيد الحالي", + "Current Location": "الموقع الحالي", + "Customer MSISDN doesn’t have customer wallet": + "رقم هاتف العميل ما فيه محفظة عميل", + "Customer not found": "ما لقينا العميل", + "Customer phone is not active": "هاتف العميل مش شغال", + "DISCOUNT": "خصم", + "DRIVER123": "DRIVER123", + "Date": "التاريخ", + "Date and Time Picker": "اختيار التاريخ والوقت", + "Date of Birth": "تاريخ الميلاد", + "Date of Birth is": "تاريخ الميلاد هو", + "Date of Birth:": "تاريخ الميلاد:", + "Days": "الأيام", + "Dear ,\n🚀 I have just started an exciting trip and I would like to share the details of my journey and my current location with you in real-time! Please download the Intaleq app. It will allow you to view my trip details and my latest location.\n👉 Download link:\nAndroid [https://play.google.com/store/apps/details?id=com.mobileapp.store.ride]\niOS [https://getapp.cc/app/6458734951]\nI look forward to keeping you close during my adventure!\nIntaleq ,": + "عزيزي/عزيزتي،\n🚀 بلشت رحلة جديدة وحابب/حابّة أشاركك التفاصيل وموقعي الحالي معك مباشرة! تفضل حمّل تطبيق انطلق... إلخ", + "Debit": "خصم", + "Delete": "حذف", + "Delete My Account": "احذف حسابي", + "Delete Permanently": "حذف نهائي", + "Deleted": "محذوف", + "Delivery": "توصيل", + "Destination": "الوجهة", + "Destination selected": "تم اختيار الوجهة", + "Detect Your Face": "اكتشاف وجهك", + "Device Change Detected": "تم اكتشاف تغيير الجهاز", + "Diesel": "ديزل", + "Directions": "الاتجاهات", + "Displacement": "الإزاحة", + "Distance": "المسافة", + "Distance To Passenger is": "المسافة للراكب هي", + "Distance from Passenger to destination is": + "المسافة من الراكب للوجهة هي", + "Distance is": "المسافة هي", + "Distance of the Ride is": "مسافة الرحلة هي", + "Do you have a disease for a long time?": "عندك مرض مزمن من زمان؟", + "Do you have an invitation code from another driver?": + "عندك كود دعوة من سائق تاني؟", + "Do you want to change Home location": "بدك تغير موقع المنزل؟", + "Do you want to change Work location": "بدك تغير موقع العمل؟", + "Do you want to collect your earnings?": "بدك تجمع أرباحك؟", + "Do you want to pay Tips for this Driver": + "بدك تدفع إكرامية لهالسائق؟", + "Docs": "المستندات", + "Doctoral Degree": "دكتوراه", + "Document Number:": "رقم الوثيقة:", + "Documents check": "فحص المستندات", + "Done": "تم", + "Don’t forget your personal belongings.": "متنساش حاجاتك الشخصية.", + "Download the Intaleq Driver app now and earn rewards!": + "حمّل تطبيق سائق انطلق هلق واكسب مكافآت!", + "Download the Intaleq app now and enjoy your ride!": + "حمّل تطبيق انطلق هلق واستمتع برحلتك!", + "Download the app now:": "حمّل التطبيق هلق:", + "Drawing route on map...": "عم نرسم الطريق على الخريطة...", + "Driver": "السائق", + "Driver Accepted Request": "السائق قبل الطلب", + "Driver Accepted the Ride for You": "السائق قبل الرحلة لك", + "Driver Agreement": "اتفاقية السائق", + "Driver Applied the Ride for You": "السائق قدم على الرحلة لك", + "Driver Balance": "رصيد السائق", + "Driver Behavior": "سلوك السائق", + "Driver Cancel Your Trip": "السائق ألغى رحلتك", + "Driver Cancelled Your Trip": "السائق ألغى رحلتك", + "Driver Car Plate": "لوحة سيارة السائق", + "Driver Finish Trip": "السائق أنهى الرحلة", + "Driver Is Going To Passenger": "السائق بيوصل للراكب", + "Driver License (Back)": "رخصة السائق (خلفي)", + "Driver License (Front)": "رخصة السائق (أمامي)", + "Driver List": "قائمة السائقين", + "Driver Login": "تسجيل دخول السائق", + "Driver Message": "رسالة السائق", + "Driver Name": "اسم السائق", + "Driver Name:": "اسم السائق:", + "Driver Phone:": "رقم السائق:", + "Driver Portal": "بوابة السائق", + "Driver Registration": "تسجيل السائق", + "Driver Registration & Requirements": "تسجيل السائق والمتطلبات", + "Driver Wallet": "محفظة السائق", + "Driver already has 2 trips within the specified period.": + "عند السائق رحلتين بهالفترة المحددة من قبل.", + "Driver is on the way": "السائق عم ييجي", + "Driver is waiting": "السائق عم يستنى", + "Driver is waiting at pickup.": "السائق عم يستنى بمكان الالتقاط.", + "Driver joined the channel": "السائق دخل القناة", + "Driver left the channel": "السائق خرج من القناة", + "Driver phone": "رقم السائق", + "Drivers": "السواقين", + "Drivers License Class": "فئة رخصة السائق", + "Drivers License Class:": "فئة رخصة السائق:", + "Drivers received orders": "السواقين استلموا طلبات", + "Duration": "المدة", + "Duration To Passenger is": "الوقت للراكب هو", + "Duration is": "المدة هي", + "Duration of Trip is": "مدة الرحلة هي", + "Duration of the Ride is": "مدة الرحلة هي", + "E-mail validé.\\": "تم التحقق من البريد الإلكتروني.\\", + "Earnings": "الأرباح", + "Earnings & Distance": "الأرباح والمسافة", + "Edit Profile": "تعديل الملف الشخصي", + "Edit Your data": "عدّل بياناتك", + "Education": "التعليم", + "Egypt": "مصر", "Egypt Post": "البريد المصري", - "Nasser Social Bank": "بنك ناصر الاجتماعي", - "Industrial Development Bank": "بنك التنمية الصناعية والعمال", - "Suez Canal Bank": "بنك قناة السويس", - "Mashreq Bank": "بنك المشرق", - "Arab Investment Bank": "البنك العربي للاستثمار", + "Egyptian Arab Land Bank": "البنك العقاري المصري العربي", + "Egyptian Gulf Bank": "البنك المصري الخليجي", + "Electric": "كهربائي", + "Email": "البريد الإلكتروني", + "Email Us": "راسلنا", + "Email Wrong": "البريد خاطئ", + "Email is": "البريد هو", + "Email must be correct.": "البريد لازم يكون صحيح.", + "Email you inserted is Wrong.": "البريد اللي أدخلته غلط.", + "Emergency Contact": "جهة اتصال طوارئ", + "Emergency Number": "رقم الطوارئ", + "Emirates National Bank of Dubai": "بنك الإمارات الوطني دبي", + "Employment Type": "نوع التوظيف", + "Enable Location": "تفعيل الموقع", + "Enable Location Access": "تفعيل الوصول للموقع", + "Enable Location Permission": "تفعيل صلاحية الموقع", + "End": "إنهاء", + "End Ride": "أنهي الرحلة", + "End Trip": "أنهي الرحلة", + "Enjoy a safe and comfortable ride.": "استمتع برحلة آمنة ومريحة.", + "Enjoy competitive prices across all trip options, making travel accessible.": + "استمتع بأسعار منافسة بكل خيارات الرحلات، عشان السفر يكون بمتناول إيدك.", + "Ensure the passenger is in the car.": "تأكد إن الراكب دخل السيارة.", + "Enter Amount Paid": "أدخل المبلغ المدفوع", + "Enter Health Insurance Provider": "أدخل مزود التأمين الصحي", + "Enter Your First Name": "أدخل اسمك الأول", + "Enter a valid email": "أدخل بريد إلكتروني صحيح", + "Enter a valid year": "أدخل سنة صحيحة", + "Enter phone": "أدخل الهاتف", + "Enter promo code": "أدخل كود الخصم", + "Enter promo code here": "أدخل كود الخصم هون", + "Enter the promo code and get": "أدخل كود الخصم واحصل على", + "Enter your City": "أدخل مدينتك", + "Enter your Note": "أدخل ملاحظتك", + "Enter your Password": "أدخل كلمة المرور", + "Enter your Question here": "أدخل سؤالك هون", + "Enter your code below to apply the discount.": + "أدخل كودك تحت عشان تطبق الخصم.", + "Enter your complaint here": "أدخل شكواك هون", + "Enter your complaint here...": "أدخل شكواك هون...", + "Enter your email": "أدخل بريدك الإلكتروني", + "Enter your email address": "أدخل عنوان بريدك الإلكتروني", + "Enter your feedback here": "أدخل تعليقك هون", + "Enter your first name": "أدخل اسمك الأول", + "Enter your last name": "أدخل اسم عائلتك", + "Enter your password": "أدخل كلمة المرور", + "Enter your phone number": "أدخل رقم هاتفك", + "Enter your promo code": "أدخل كود الخصم بتاعك", + "Enter your wallet number": "أدخل رقم محفظتك", + "Error": "صار خطأ", + "Evening": "المسا", + "Exclusive offers and discounts always with the Intaleq app": + "عروض وخصومات حصرية دايماً مع تطبيق انطلق", + "Exclusive offers and discounts always with the Sefer app": + "عروض وخصومات حصرية دايماً مع تطبيق سفر", + "Exit": "خروج", + "Exit Ride?": "تخرج من الرحلة؟", + "Expiration Date": "تاريخ الانتهاء", + "Expired Driver’s License": "رخصة السائق منتهية", + "Expired License": "رخصة منتهية", + "Expiry Date": "تاريخ الانتهاء", + "Expiry Date:": "تاريخ الانتهاء:", + "Export Development Bank of Egypt": "بنك التصدير والاستيراد المصري", + "Face Detection Result": "نتيجة كشف الوجه", + "Failed to connect to the server. Please try again.": + "ما انقدرنا نتصل بالخادم. جرب مرة تانية.", + "Failed to fetch rides. Please try again.": + "ما انقدرنا نجيب الرحلات. جرب مرة تانية.", + "Failed to finish ride. Please check internet.": + "ما انقدرنا ننهي الرحلة. تفضل تحقق من الإنترنت.", + "Failed to initiate payment. Please try again.": + "فشل بدء الدفع. جرب مرة تانية.", + "Failed to load profile data.": + "ما انقدرنا نحمّل بيانات الملف الشخصي.", + "Failed to save driver data": "ما انقدرنا نحفظ بيانات السائق", + "Failed to send invite": "فشل إرسال الدعوة", + "Failed to upload audio file.": "فشل رفع الملف الصوتي.", + "Faisal Islamic Bank of Egypt": "بنك فيصل الإسلامي المصري", + "Fastest Complaint Response": "أسرع رد على الشكاوى", + "Favorite Places": "الأماكن المفضلة", + "Fee is": "الرسوم هي", + "Feed Back": "التعليق", + "Feedback": "التعليق", + "Feedback data saved successfully": "تم حفظ بيانات التعليق بنجاح", + "Female": "أنثى", + "Find answers to common questions": "لاقي أجوبة للأسئلة الشائعة", + "Finish & Submit": "إنهاء وإرسال", + "Finish Monitor": "إنهاء المراقبة", + "Finished": "انتهت", + "First Abu Dhabi Bank": "بنك أبوظبي الأول", + "First Name": "الاسم الأول", + "First name": "الاسم الأول", + "Fixed Price": "سعر ثابت", + "Flag-down fee": "رسوم بداية المشوار", + "For Drivers": "للسواقين", + "For Egypt": "لمصر", + "For Intaleq and Delivery trips, the price is calculated dynamically. For Comfort trips, the price is based on time and distance": + "لرحلات انطلق والتوصيل، السعر بيحسب ديناميكياً. لرحلات الكومفورت، السعر بيعتمد على الوقت والمسافة.", + "For Intaleq and scooter trips, the price is calculated dynamically. For Comfort trips, the price is based on time and distance": + "لرحلات انطلاق والسكوتر، السعر بيحسب ديناميكياً. لرحلات الكومفورت، السعر بيعتمد على الوقت والمسافة.", + "Frequently Asked Questions": "الأسئلة الشائعة", + "Frequently Questions": "أسئلة متكررة", + "From": "من", + "From :": "من :", + "From : Current Location": "من : الموقع الحالي", + "From Budget": "من الميزانية", + "From:": "من:", + "Fuel": "الوقود", + "Fuel Type": "نوع الوقود", + "Full Name": "الاسم الكامل", + "Full Name (Marital)": "الاسم الكامل (الزواج)", + "FullName": "الاسم الكامل", + "GPS Required Allow !.": "مطلوب تفعيل GPS !.", + "Gender": "الجنس", + "General": "عام", "General Authority For Supply Commodities": "الهيئة العامة للسلع التموينية", - "Arab International Bank": "البنك العربي الدولي", - "Agricultural Bank of Egypt": "البنك الزراعي المصري", - "National Bank of Greece": "البنك الوطني اليوناني", - "Central Bank Of Egypt": "البنك المركزي المصري", - "ATTIJARIWAFA BANK Egypt": "البنك التجاري وفا مصر", - "Morning Promo": "بونص الصباح", - "Show my Cars": "عرض سياراتي", - 'Behavior Score': "درجة السلوك", 'Fixed Price': 'سعر ثابت', - "Driver Behavior": "سلوك السائق", - "Last 10 Trips": "آخر 10 رحلات", - "Trip ID": "رقم الرحلة", 'Vehicle Details': "تفاصيل المركبة", - 'Hard Brake': "فرملة قوية", - 'Show behavior page': "عرض صفحة السلوك", - 'Coming Soon': "قريبًا", - 'Logout': "تسجيل الخروج", - 'Contact Support to Recharge': "تواصل مع الدعم لإعادة الشحن", - 'Are you sure you want to logout?': - "هل أنت متأكد أنك تريد تسجيل الخروج؟", - "How to use App": "كيفية استخدام التطبيق", - 'This service will be available soon.': - "هذه الخدمة ستكون متاحة قريبًا.", - 'Change the app language': "تغيير لغة التطبيق", - 'Get features for your country': "احصل على ميزات لبلدك", - 'Vibration feedback for buttons': "ردود فعل الاهتزاز للأزرار", - 'Run Google Maps directly': "تشغيل خرائط جوجل مباشرة", - 'reviews': "المراجعات", - "Trip Summary with": "ملخص الرحلة مع", - "Original Fare": "الأجرة الأصلية", - "Your Earnings": "أرباحك", - "Exclusive offers and discounts always with the Sefer app": - "عروض وخصومات حصرية دائماً مع تطبيق سفر", - "Would the passenger like to settle the remaining fare using their wallet?": - "هل يرغب الراكب بتسوية الأجرة المتبقية من محفظته؟", - "Yes, Pay": "نعم، ادفع", - "How much Passenger pay?": "كم دفع الراكب؟", - "Passenger paid amount": "المبلغ الذي دفعه الراكب", - "Add to Passenger Wallet": "أضف إلى محفظة الراكب", - "How was the passenger?": "كيف كان الراكب؟", - "Add a comment (optional)": "أضف تعليقاً (اختياري)", - "Type something...": "اكتب شيئاً...", - "Submit rating": "إرسال التقييم", - 'Is device compatible': "هل الجهاز متوافق", - 'Exclusive offers and discounts always with the Intaleq app': - "عروض وخصومات حصرية دائماً مع تطبيق انطلق", - "Driver Registration": "تسجيل السائق", - "Driver": "السائق", - "Vehicle": "المركبة", - "Docs": "الوثائق", - "Driver's Personal Information": "المعلومات الشخصية للسائق", - "First Name": "الاسم الأول", - "Last Name": "اسم العائلة", - 'You have gift 30000 SYP': 'لديك هدية 30000 ليرة سورية', - "National ID Number": "الرقم الوطني", - "License Expiry Date": "تاريخ انتهاء الرخصة", - "YYYY-MM-DD": "YYYY-MM-DD", - "Please select a date": "يرجى اختيار تاريخ", - "Vehicle Information": "معلومات المركبة", - "Car Plate Number": "رقم اللوحة", - "Car Make (e.g., Toyota)": "نوع السيارة (مثال تويوتا)", - "Car Model (e.g., Corolla)": "طراز السيارة (مثال كورولا)", - "Year of Manufacture": "سنة الصنع", - "Car Color": "لون السيارة", - "Upload Documents": "رفع المستندات", - "Driver License (Front)": "رخصة السائق (أمام)", - "Driver License (Back)": "رخصة السائق (خلف)", - "Car Registration (Front)": "ترخيص السيارة (أمام)", - "Car Registration (Back)": "ترخيص السيارة (خلف)", - "Tap to upload": "اضغط للرفع", - "<< BACK": "« السابق", - "NEXT >>": "التالي »", - "SUBMIT": "إرسال", - "Required field": "حقل مطلوب", - "Expired License": "الرخصة منتهية", - "Your driver’s license has expired.": "انتهت صلاحية رخصة قيادتك.", - "Missing Documents": "مستندات ناقصة", - "Please upload all 4 required documents.": - "يرجى رفع المستندات الأربعة جميعها.", - "Success": "تم بنجاح", - "Registration completed successfully!": "تم التسجيل بنجاح!", - "Error": "خطأ", - "Car Color (Name)": "لون السيارة (الاسم)", - "Car Color (Hex)": "لون السيارة (كود HEX)", - "Required field": "حقل مطلوب", - - "color.white": "أبيض", - "color.black": "أسود", - "color.silver": "فضي", - "color.gray": "رمادي", - "color.gunmetal": "رصاصي غامق", - "color.red": "أحمر", - "color.blue": "أزرق", - "color.navy": "كحلي", - "color.green": "أخضر", - "color.darkGreen": "أخضر داكن", - "color.beige": "بيج", - "color.brown": "بني", - "color.maroon": "خمري", - 'Ride History': "تاريخ الرحلات", - "color.burgundy": "برغندي", - 'Name must be at least 2 characters': - "الاسم يجب أن يكون على الأقل 2 حرف", - 'This Trip Was Cancelled': "تم إلغاء هذه الرحلة", - 'Trip Details': "تفاصيل الرحلة", - 'Could not load trip details.': "تعذر تحميل تفاصيل الرحلة.", - 'Trip Info': "معلومات الرحلة", - 'Order ID': "رقم الطلب", - 'Date': "التاريخ", - 'Earnings & Distance': "الأرباح والمسافة", - 'Trip Timeline': "جدول الرحلة", - 'Time to Passenger': "الوقت للراكب", - 'Trip Started': "بدأت الرحلة", - 'Trip Finished': "انتهت الرحلة", - 'Passenger & Status': "الراكب والحالة", - 'Status': "الحالة", - 'Passenger Name': "اسم الراكب", - 'National ID must be 11 digits': "الرقم الوطني يجب أن يكون 11 رقمًا", - "color.yellow": "أصفر", - "color.orange": "برتقالي", - "color.gold": "ذهبي", - "color.bronze": "برونزي", "Verify OTP": "التحقق من الرمز", - "Verification Code": "رمز التحقق", - "We have sent a verification code to your mobile number:": - "لقد أرسلنا رمز التحقق إلى رقم هاتفك المحمول:", - "Verify": "تحقق", - "Resend Code": "إعادة إرسال الرمز", - "You can resend in": "يمكنك إعادة الإرسال خلال", - "seconds": "ثوانٍ", - "color.champagne": "شامبانيا", - "Device Change Detected": "تم اكتشاف تغيير في الجهاز", - "Please verify your identity": "يرجى التحقق من هويتك", - "color.purple": "بنفسجي", - "Registration failed. Please try again.": "فشل التسجيل، حاول مجدداً.", - "An unexpected error occurred:": "حدث خطأ غير متوقع:", - 'Your email not updated yet': "بريدك الإلكتروني لم يتم تحديثه بعد", - 'Enter your email' - '''Types of Trips in Intaleq: - -- Comfort: For cars newer than 2017 with air conditioning. -- Lady: For girl drivers. -- Speed: For fixed salary and endpoints. -- Mashwari: For flexible trips where passengers choose the car and driver with prior arrangements. -- Raih Gai: For same-day return trips longer than 50km.''': - '''أنواع الرحلات في Intaleq: -- راحة: للسيارات الأحدث من 2017 مع تكييف الهواء. -- للسائقات الإناث. -- سبيد: براتب ثابت ونقاط نهاية محددة. -- مشاوير: للرحلات المرنة حيث يختار الركاب السيارة والسائق باتفاق مسبق. -- رحّي غاي: للرحلات ذات العودة في نفس اليوم التي تزيد عن 50 كم.''', - - '''Intaleq Wallet Features: - -- Transfer money multiple times. -- Transfer to anyone. -- Make purchases. -- Charge your account. -- Charge a friend's Intaleq account. -- Store your money with us and receive it in your bank as a monthly salary.''': - '''ميزات محفظة Intaleq: -- تحويل الأموال عدة مرات. -- التحويل إلى أي شخص. -- إجراء عمليات شراء. -- شحن حسابك. -- شحن حساب Intaleq لصديق. -- قم بتخزين أموالك معنا واستلامها في بنكك كراتب شهري.''', - 'Are you sure you want to logout?': - "هل أنت متأكد أنك تريد تسجيل الخروج؟", - 'My Cars': "سياراتي", - 'Bank Account': "الحساب البنكي", - 'Behavior Page': "صفحة السلوك", - 'Personal Information': "المعلومات الشخصية", - "Add criminal page": "إضافة صفحة جنائية", - "Overall Behavior Score": "درجة السلوك العامة", - "Add new car": "إضافة سيارة جديدة", - "You have gift 300 L.E": "لديك هدية بقيمة 300 جنيه.", - // "VIP Order": "طلب VIP", - "VIP Order Accepted": "تم قبول طلب VIP.", - "Incorrect sms code": - "⚠️ رمز التحقق الذي أدخلته غير صحيح. يرجى المحاولة مرة أخرى.", - // "The driver accepted your trip": "السائق قبل رحلتك.", - "this is count of your all trips in the morning promo today from 7:00am-10:00am": - "هذا عدد جميع رحلاتك في بونص الصباح اليوم من الساعة 7:00 صباحًا حتى 10:00 صباحًا", - "Morning Promo Rides": "رحلات عرض الصباح", - "Are you sure to make this car as default": - "هل أنت متأكد من تعيين هذه السيارة كافتراضية؟", - "Sign In by Google": "تسجيل الدخول باستخدام جوجل", - "Not updated": "لم يتم التحديث", - "Updated": "تم التحديث", - "Remaining time": "الوقت المتبقي", - "Add bank Account": "إضافة حساب بنكي", - "Are you sure to exit ride?": "هل أنت متأكد من إنهاء الرحلة؟", - "Today": "اليوم", - "seconds": "ثواني", - "You will cancel registration": "ستقوم بإلغاء التسجيل", - "Create new Account": "إنشاء حساب جديد", - "You haven't moved sufficiently!": "أنت لم تتحرك بما فيه الكفاية!", - "This for new registration": "للتسجيل الجديد", - "You have received a gift token!": "لقد حصلت على رمز هدية!", - "Afternoon Promo": "بونص الظهر", - "for ": "ل ", - "You dont have invitation code": "ليس لديك رمز دعوة.", - "this is count of your all trips in the Afternoon promo today from 3:00pm-6:00 pm": - "هذا عدد جميع رحلاتك في بونص بعد الظهر اليوم من الساعة 3:00 مساءً حتى 6:00 مساءً", - "Afternoon Promo Rides": "رحلات بونص بعد الظهر", - "Heading your way now. Please be ready.": - "في طريقي إليك الآن. يرجى الاستعداد.", - "Alert": "تنبيه", - "Insert Wallet phone number": "أدخل رقم هاتف المحفظة", - "You have successfully opted for health insurance.": - "لقد اخترت التأمين الصحي بنجاح.", - "Please enter a health insurance status.": - "يرجى إدخال حالة التأمين الصحي", - "Intaleq Driver": "انطلق السائق", - "The 300 points equal 300 L.E for you \nSo go and gain your money": - "300 نقطة تساوي 300 جنيه لك \nلذا اذهب واحصل على أموالك", - "Info": "معلومات", - "You dont have money in your Wallet": "ليس لديك أموال في محفظتك", - "You dont have money in your Wallet or you should less transfer 5 LE to activate": - "ليس لديك أموال في محفظتك أو يجب عليك تحويل 5 جنيهات على الأقل لتفعيل الحساب", - "Rejected Orders Count": "عدد الطلبات المرفوضة", - "This is the total number of rejected orders per day after accepting the orders": - "هذا هو العدد الإجمالي للطلبات المرفوضة يوميًا بعد قبول الطلبات", - "Invite": "دعوة", - "Drivers": "السائقين", - "Passengers": "الركاب", - "Your Driver Referral Code": "رمز الإحالة الخاص بالسائق", - "DRIVER123": "سائق123", - "Share this code with other drivers. Both of you will receive rewards!": - "شارك هذا الرمز مع السائقين الآخرين. سيحصل كل منكما على مكافآت!", - "Share Code": "مشاركة الرمز", - "Invite another driver and both get a gift after he completes 100 trips!": - "ادع سائقًا آخر وسيحصل كلاكما على هدية بعد أن يكمل 100 رحلة!", - "Enter phone": "أدخل رقم الهاتف", - "Send Invite": "إرسال دعوة", - "Show Invitations": "عرض الدعوات", - "We need access to your location to match you with nearby passengers and ensure accurate navigation.": - "نحتاج إلى الوصول إلى موقعك لمطابقتك مع الركاب القريبين وضمان التنقل الدقيق.", - "Please allow location access at all times to receive ride requests and ensure smooth service.": - "يرجى السماح بالوصول إلى الموقع في جميع الأوقات لتلقي طلبات الرحلات وضمان خدمة سلسة.", - "No invitation found yet!": "لم يتم العثور على دعوات حتى الآن!", - "Trip": "رحلة", - "Your Passenger Referral Code": "رمز الإحالة الخاص بالراكب", - "Intaleq123": "انطلق123", - "Share this code with passengers and earn rewards when they use it!": - "شارك هذا الرمز مع الركاب واكسب مكافآت عند استخدامه!", - "Your Rewards": "مكافآتك", - "Total Invites": "إجمالي الدعوات", - "Active Users": "المستخدمون النشطون", - "Total Earnings": "إجمالي الأرباح", - "Choose from contact": "اختر من جهات الاتصال", - // "Cancel": "إلغاء", - "Open App": "افتح التطبيق", - // "Ok I will go now.": "حسنًا، سأذهب الآن.", - "Hi, I will go now": "مرحبًا، سأذهب الآن.", - // "Add new car": "أضف سيارة جديدة", - "Rate Our App": "قيّم تطبيقنا", - "How would you rate our app?": "كيف تقيم تطبيقنا؟", - "write comment here": "اكتب تعليقك هنا", - "Submit Rating": "إرسال التقييم", - "Rating submitted successfully": "تم إرسال التقييم بنجاح", - "Open the app to stay updated and ready for upcoming tasks.": - "افتح التطبيق لتبقى على اطلاع واستعداد للمهام القادمة.", - "No invitation found": "لم يتم العثور على دعوة", - "Please upload this license.": "يرجى تحميل هذه الرخصة.", - "If your car license has the new design, upload the front side with two images.": - "إذا كانت رخصة سيارتك ذات التصميم الجديد، يرجى تحميل الوجه الأمامي بصورتين.", - "If you need assistance, contact us": - "إذا كنت بحاجة إلى المساعدة، تواصل معنا", - "Please make sure to read the license carefully.": - "يرجى التأكد من قراءة الرخصة بعناية", - "Videos Tutorials": "فيديوهات تعليمية", - "Approaching your area. Should be there in 3 minutes.": - "اقترب من منطقتك. يجب أن أكون هناك خلال 3 دقائق.", - "There's heavy traffic here. Can you suggest an alternate pickup point?": - "هناك حركة مرور كثيفة هنا. هل يمكنك اقتراح نقطة استلام بديلة؟", - "This ride is already taken by another driver.": - "تم حجز هذه الرحلة من قبل سائق آخر.", - "Type Any thing": "اكتب أي شيء", - "Price: ": "السعر ", - "Add Question": "أضف سؤالاً", - "Please enter a valid card 16-digit number.": - "الرجاء إدخال رقم بطاقة صحيح مكون من 16 رقمًا.", - "Insert card number": "أدخل رقم البطاقة", - "Bank account added successfully": "تمت إضافة الحساب البنكي بنجاح", - "Updated successfully": "تم التحديث بنجاح", - "Create Wallet to receive your money": "أنشئ محفظة لاستقبال أموالك", - "Insert Account Bank": "أدخل رقم حسابك البنكي", - "Insert Card Bank Details to Receive Your Visa Money Weekly": - "أدخل تفاصيل بطاقتك البنكية لاستقبال راتبك عبر فيزا كل أسبوع", - "Select Name of Your Bank": "اختر اسم بنكك", - "You don't have enough money in your Intaleq wallet": - "لا يوجد رصيد كافٍ في محفظة Intaleq الخاصة بك ", - "You have transferred to your wallet from": "لقد حولت إلى محفظتك من", - "Transfer": "تحويل", - "amount": "المبلغ", - "This driver is not registered": "هذا السائق غير مسجل", - "insert amount": "أدخل المبلغ", - "phone number of driver": "رقم هاتف السائق", - "Transfer budget": "نقل الميزانية", - "Comfort": "كمفورت", - "Speed": "سعر ثابت", - 'Insert Emergency Number': 'أدخل رقم الطوارئ', - 'Emergency Number': 'رقم الطوارئ', - 'Save': 'حفظ', - 'Stay': 'ابقى', - 'Exit': 'خروج', - 'Waiting': 'انتظار', - 'Your data will be erased after 2 weeks\nAnd you will can\'t return to use app after 1 month ': - ',سيتم مسح بياناتك بعد أسبوعين\nولن تتمكن من العودة لاستخدام التطبيق بعد شهر واحد ', - "You are in an active ride. Leaving this screen might stop tracking. Are you sure you want to exit?": - "أنت في رحلة نشطة. قد يؤدي مغادرة هذه الشاشة إلى إيقاف التتبع. هل أنت متأكد أنك تريد الخروج؟", - "Lady": "ليدي", - "Permission denied": "تم رفض الإذن", - "Contact permission is required to pick a contact": - "مطلوب إذن الوصول إلى جهات الاتصال لاختيار جهة اتصال", - "No contact selected": "لم يتم تحديد جهة اتصال", - "Please select a contact": "يرجى تحديد جهة اتصال", - "No phone number": "لا يوجد رقم هاتف", - "The selected contact does not have a phone number": - "جهة الاتصال المحددة لا تحتوي على رقم هاتف", - "Error": "خطأ", - "An error occurred while picking a contact": - "حدث خطأ أثناء اختيار جهة اتصال", - "Are you sure you want to cancel this trip?": - "هل أنت متأكد من أنك تريد إلغاء هذه الرحلة؟", - // "Cancel Trip from driver": "إلغاء الرحلة من السائق", - "Why do you want to cancel this trip?": - "لماذا تريد إلغاء هذه الرحلة؟", - "Write the reason for canceling the trip": "اكتب سبب الإلغاء:", - "Trip Cancelled from driver. We are looking for a new driver. Please wait.": - "تم إلغاء الرحلة من قبل السائق. نحن نبحث عن سائق جديد. من فضلك انتظر.", - "Delivery": "توصيل", - "Mashwari": "‏مشواري", - "Total Net": "صافي الإجمالي", - "Special Order": "طلب خاص", - "Intaleq Order": "طلب سريع", - "No data yet!": "لا توجد بيانات حتى الآن!", - "You Refused 3 Rides this Day that is the reason \nSee you Tomorrow!": - "لقد رفضت 3 رحلات اليوم وهذا هو السبب \nأراك غدًا!", - "fromBudget": "من الميزانية", - "You must restart the app to change the language.": - "يجب إعادة تشغيل التطبيق لتغيير اللغة", - "hours before trying again.": "ساعة قبل المحاولة مرة أخرى", - "Transaction failed": "فشل المعاملة", - "Wallet Type": "نوع المحفظة", - "Enter your wallet number": "أدخل رقم محفظتك", - "The Amount is less than": "المبلغ أقل من", - "Cash Out": "صرف", - "Do you want to collect your earnings?": "هل تريد استلام أموالك؟", - "Total wallet is ": "إجمالي المحفظة هو ", - "Remainder": "‏الباقي", - "Call Page": "صفحة المكالمة", - // "Call End": "إنهاء المكالمة", - "Call Left": "مكالمات متبقية", - "Rayeh Gai": "رايح جاي ", - "cost is ": " التكلفة هي ", - "Total budgets on month": "إجمالي الميزانيات لهذا الشهر", - "Counts of budgets on days": "عدد الميزانيات حسب الأيام", - "Wallet Added": "تم إضافة المحفظة", - "The price must be over than ": "يجب أن يكون السعر أكثر من ", - "Total Cost": "إجمالي التكلفة", - "This Trip Cancelled": "تم إلغاء هذه الرحلة", - "Total price from ": "إجمالي السعر من ", - "Wallet Add": "إضافة إلى المحفظة", - "Press here": "اضغط هنا", - "Would the passenger like to settle the remaining fare using their wallet?": - "هل يرغب الراكب بسداد باقي الأجرة باستخدام محفظته؟", - "How much Passenger pay?": "كم يدفع الراكب؟", - "passenger amount to me": "مبلغ الراكب لي", - "Please wait": "الرجاء الانتظار", - "minutes before trying again.": " دقيقة قبل المحاولة مرة أخرى.", - "Total rides on month": "إجمالي الرحلات في الشهر", - "Counts of rides on days": "عدد الرحلات حسب الأيام", - "You should restart app to change language": - "يجب إعادة تشغيل التطبيق لتغيير اللغة", - "No data yet": "لا توجد بيانات حتى الآن", - "Question": "استفسار", - "Enter your Question here": "اسأل هنا", - "History Page": "سجل الرحلات ", - "Finished": "مكتملة", - "Trip Detail": "تفاصيل الرحلة", - "you must insert token code ": "يجب إدخال رمز التحقق", - "Invite code already used": "تم استخدام رمز الدعوة بالفعل", - "Price is": "السعر", - "Times of Trip": "أوقات الرحلة", - "Time to Passenger is": "الوقت للوصول للراكب", - "TimeStart is": "وقت البداية", - "Time Finish is": "وقت الانتهاء", - "Status is": "الحالة", - "Total Orders": "إجمالي الطلبات", - "Completed": "مكتملة", - "Canceled Orders": "الطلبات الملغاة", - "Rejected Orders": "الطلبات المرفوضة", - "Percent Rejected": "نسبة المرفوضة", - "Percent Canceled": "نسبة الملغاة", - "Percent Completed": "نسبة المكتملة", - "Statistic": "إحصائية", - "Value": "القيمة", - "You Have in": "لديك في", - "Total Budget is ": "رصيد ‏التشغيل هو", - "Ride Today : ": "‏رحلات اليوم ", - "You Earn today is ": "ما كسبته اليوم هو", - "registration_date": "تاريخ_التسجيل", - "Total Budget from trips by\nCredit card is ": - "إجمالي الميزانية من الرحلات عن طريق\nبطاقة الائتمان هي ", - "This amount for all trip I get from Passengers and Collected For me in": - "هذا المبلغ لجميع الرحلات التي أحصل عليها من الركاب والمجموعة لي في", - "Total Budget from trips is ": "إجمالي الميزانية من الرحلات هو ", - "You can purchase a budget to enable online access through the options listed below.": - "يمكنك ‏إضافة رصيد من هذه القائمة", - "You can buy points from your budget": - "يمكنك سداد المديونية من حسابك", - "expiration_date": "تاريخ الانتهاء", - "rating_count": "عدد التقييمات", - "rating_driver": "تقييم السائق", - "age": "سن/عمر", - "vin": "رقم تعريف المركبة", - "car_color": "اللون", - "car_plate": "لوحة السيارة", - "car_model": "طراز السيارة:", - "education": "التعليم", - "gender": "الجنس", - "birthdate": "تاريخ ميلاد", - "Approve Driver Documents": "الموافقة على مستندات الشريك السائق", - "Total Budget is": "الميزانية الإجمالية", - "You will receive code in sms message": - "ستتلقى الرمز في رسالة نصية قصيرة", - "Please enter": "الرجاء إدخال", - "We need your phone number to contact you and to help you receive orders.": - "نحتاج إلى رقم هاتفك للاتصال بك ولمساعدتك في تلقي الطلبات.", - "The full name on your criminal record does not match the one on your driver’s license. Please verify and provide the correct documents.": - "لا يتطابق الاسم الكامل في سجلك الجنائي مع الاسم الموجود في رخصة القيادة. يرجى التحقق وتقديم المستندات الصحيحة.", - "The national number on your driver’s license does not match the one on your ID document. Please verify and provide the correct documents.": - "الرقم الوطني الموجود في رخصة القيادة الخاصة بك لا يتطابق مع الرقم الموجود في مستند هويتك. يرجى التحقق وتقديم المستندات الصحيحة.", - "Capture an Image of Your Criminal Record": - "التقط صورة لسجلك الجنائي", - "IssueDate": "تاريخ الإصدار", - "Capture an Image of Your car license front": - "التقط صورة لرخصة سيارتك من الأمام", - "Capture an Image of Your ID Document front": - "التقاط صورة لوثيقة هويتك من الأمام", - "NationalID": "الرقم الوطني", - "reject your order.": "رفض طلبك.", - "Order Under Review": "الطلب قيد المراجعة", - "is reviewing your order. They may need more information or a higher price.": - "يتم مراجعة طلبك. قد يحتاجون إلى مزيد من المعلومات أو سعر أعلى.", - "FullName": "الاسم الكامل", - "If you want order to another person": "إذا كنت تريد الطلب لشخص آخر", - // "We will look for a new driver.\nPlease wait.": - // "سنبحث عن سائق جديد.\nمن فضلك انتظر.", - "No, I want to cancel this trip": "لا، أريد إلغاء هذه الرحلة", - "Attention": "تنبيه", - // "Trip Cancelled. The cost of the trip will be added to your wallet.": - // "تم إلغاء الرحلة. سيتم إضافة تكلفة الرحلة إلى محفظتك.", - "Trip Cancelled. The cost of the trip will be deducted from your wallet.": - "تم إلغاء الرحلة. سيتم خصم تكلفة الرحلة من محفظتك.", - "You will be charged for the cost of the driver coming to your location.": - "سيتم خصم تكلفة قدوم السائق إلى موقعك.", - "Location Tracking Active": "تعقب الموقع نشط", - "Your location is being tracked in the background.": - "يتم تتبع موقعك في الخلفية.", - "Maintenance Center": "‏مركز الصيانة", - "When you complete 600 trips, you will be eligible to receive offers for maintenance of your car.": - "عندما تكمل 600 رحلة، ستكون مؤهلاً للحصول على عروض لصيانة سيارتك.", - // "The driver canceled your ride.": "ألغى السائق رحلتك.", - "We haven't found any drivers yet. Consider increasing your trip fee to make your offer more attractive to drivers.": - "لم نجد أي سائقين بعد. ضع في اعتبارك زيادة رسوم رحلتك لجعل عرضك أكثر جاذبية للسائقين.", - "Allow Location Access": "السماح بالوصول إلى الموقع", - "Show My Trip Count": "عرض عدد رحلاتي", - "Intaleq is the safest ride-sharing app that introduces many features for both captains and passengers. We offer the lowest commission rate of just 8%, ensuring you get the best value for your rides. Our app includes insurance for the best captains, regular maintenance of cars with top engineers, and on-road services to ensure a respectful and high-quality experience for all users.": - "انطلق هو التطبيق الأكثر أمانًا لمشاركة الركوب الذي يقدم العديد من الميزات لكل من السائقين والركاب. نحن نقدم أقل عمولة بنسبة 8% فقط، مما يضمن حصولك على أفضل قيمة لرحلاتك. يتضمن تطبيقنا التأمين لأفضل السائقين، الصيانة المنتظمة للسيارات مع أفضل المهندسين، والخدمات على الطريق لضمان تجربة محترمة وعالية الجودة لجميع المستخدمين.", - "You can contact us during working hours from 10:00 - 17:00.": - "يمكنك الاتصال بنا خلال ساعات العمل من 10:00 - 17:00.", - "Show maintenance center near my location": - "أظهر مركز الصيانة بالقرب من موقعي", - "How do I request a ride?": "كيف أطلب رحلة؟", - "Step-by-step instructions on how to request a ride through the Intaleq app.": - "تعليمات خطوة بخطوة حول كيفية طلب رحلة من خلال تطبيق Intaleq.", - "What types of vehicles are available?": - "ما هي أنواع المركبات المتاحة؟", - "Intaleq offers a variety of vehicle options to suit your needs, including economy, comfort, and luxury. Choose the option that best fits your budget and passenger count.": - "توفر Intaleq مجموعة متنوعة من خيارات المركبات لتناسب احتياجاتك، بما في ذلك الاقتصادية والمريحة والفخمة. اختر الخيار الذي يناسب ميزانيتك وعدد الركاب.", - "How can I pay for my ride?": "كيف يمكنني الدفع لرحلتي؟", - "Intaleq offers multiple payment methods for your convenience. Choose between cash payment or credit/debit card payment during ride confirmation.": - "توفر Intaleq طرق دفع متعددة لراحتك. اختر بين الدفع نقدًا أو بطاقة ائتمان/خصم أثناء تأكيد الرحلة.", - "Can I cancel my ride?": "هل يمكنني إلغاء رحلتي؟", - "Yes, you can cancel your ride under certain conditions (e.g., before driver is assigned). See the Intaleq cancellation policy for details.": - "نعم، يمكنك إلغاء رحلتك في ظل ظروف معينة (مثل قبل تعيين السائق). اطلع على سياسة الإلغاء في Intaleq للحصول على التفاصيل.", - "Driver Registration & Requirements": "تسجيل السائقين والمتطلبات", - "How can I register as a driver?": "كيف يمكنني التسجيل كسائق؟", - "What are the requirements to become a driver?": - "ما هي المتطلبات للعمل كسائق؟", - "Types of Trips in Intaleq:": "أنواع الرحلات في انطلق:", - "Comfort: For cars newer than 2017 with air conditioning.": - "كمفورت: للسيارات الأحدث من 2017 والمكيفة.", - "Lady: For girl drivers.": "ليدي: للسائقات النساء.", - "Intaleq: For fixed salary and endpoints.": - "انطلق: للرحلات ذات الرواتب الثابتة والنقاط النهائية المحددة.", - "Mashwari: For flexible trips where passengers choose the car and driver with prior arrangements.": - "مشواري: للرحلات المرنة حيث يختار الركاب السيارة والسائق مسبقًا.", - "Raih Gai: For same-day return trips longer than 50km.": - "رايح جاي: للرحلات ذهاب وعودة في نفس اليوم لمسافات تزيد عن 50 كم.", - "What is Types of Trips in Intaleq?": "أنواع الرحلات في انطلق", - "Intaleq Wallet Features:": "مميزات محفظة انطلق:", - "Transfer money multiple times.": "تحويل الأموال عدة مرات.", - "Transfer to anyone.": "تحويل لأي شخص.", - "Make purchases.": "الشراء.", - "Charge your account.": "شحن حسابك.", - "Charge a friend's Intaleq account.": "شحن حساب صديقك في انطلق.", - "Store your money with us and receive it in your bank as a monthly salary.": - "الاحتفاظ بأموالك معنا واستلامها في حسابك البنكي كراتب شهري.", - "No Rides Available": "لا توجد رحلات متاحة حالياً", - "What are the order details we provide to you?": - "ما هي تفاصيل الطلب التي نقدمها لك؟", - "What is the feature of our wallet?": "ما هي ميزة محفظتنا؟", - "How to use Intaleq": "كيف تستخدم Intaleq", - "Visit our website or contact Intaleq support for information on driver registration and requirements.": - "تفضل بزيارة موقعنا الإلكتروني أو اتصل بدعم Intaleq للحصول على معلومات حول تسجيل السائقين والمتطلبات.", - "How do I communicate with the other party (passenger/driver)?": - "كيف أتواصل مع الطرف الآخر (الراكب/السائق)؟", - "Intaleq provides in-app chat functionality to allow you to communicate with your driver or passenger during your ride.": - "توفر Intaleq ميزة الدردشة داخل التطبيق لتتيح لك التواصل مع سائقك أو راكبك أثناء الرحلة.", - "What safety measures does Intaleq offer?": - "ما هي تدابير السلامة التي تقدمها Intaleq؟", - "Intaleq prioritizes your safety. We offer features like driver verification, in-app trip tracking, and emergency contact options.": - "تُولي Intaleq أهمية كبيرة لسلامتك. نحن نقدم ميزات مثل التحقق من هوية السائق ، وتتبع الرحلات داخل التطبيق ، وخيارات الاتصال في حالات الطوارئ.", - "Frequently Questions": "الأسئلة الشائعة", - "Contact Us": "اتصل بنا", - "Choose a contact option": "اختر خيار الاتصال", - "You can change the vibration feedback for all buttons": - "يمكنك تغيير اهتزاز الرج لجميع الأزرار", - "About Us": "نبذة عنا", - "Work time is from 10:00 - 17:00.\nYou can send a WhatsApp message or email.": - "ساعات العمل من 10:00 - 17:00.\nيمكنك إرسال رسالة عبر واتساب أو بريد إلكتروني.", - "Most Secure Methods": "أساليب الأمان الأكثر فاعلية", - "In-App VOIP Calls": "مكالمات VOIP داخل التطبيق", - "Recorded Trips for Safety": "تسجيل الرحلات من أجل السلامة", - "\nWe also prioritize affordability, offering competitive pricing to make your rides accessible.": - "\nكما أننا نضع توفير التكاليف في أولوية اهتماماتنا، ونقدم أسعاراً منافسة لجعل رحلاتك في متناول اليد.", - "Intaleq is a ride-sharing app designed with your safety and affordability in mind. We connect you with reliable drivers in your area, ensuring a convenient and stress-free travel experience.\n\nHere are some of the key features that set us apart:": - "Intaleq: تطبيق مشاركة الرحلات يضع سلامتك وادخارك في المقدمة Intaleq هو تطبيق مشاركة رحلات مصمم مع وضع سلامتك وتوفيرك في الاعتبار. نربطك بسائقين موثوقين في منطقتك، ونضمن لك تجربة انطلق مريحة وخالية من الضغوط.فيما يلي بعض الميزات الرئيسية التي تميزنا:", - "Send WhatsApp Message": "إرسال رسالة واتساب", - "Send Email": "إرسال بريد إلكتروني", - "You should complete 600 trips": "يجب عليك إكمال 600 رحلة", - "We have maintenance offers for your car. You can use them after completing 600 trips to get a 20% discount on car repairs. Enjoy using our Intaleq app and be part of our Intaleq family.": - "لدينا عروض صيانة لسيارتك. يمكنك استخدامها بعد إكمال 600 رحلة للحصول على خصم 20% على إصلاحات السيارة. استمتع باستخدام تطبيق Intaleq وكن جزءًا من عائلتنا.", - "Enable Location Permission": "تمكين إذن الموقع", - "Allowing location access will help us display orders near you. Please enable it now.": - "سيساعدنا السماح بالوصول إلى الموقع في عرض الطلبات القريبة منك. يرجى تمكينه الآن.", - "Allow overlay permission": "السماح بإذن‏الظهور فوق التطبيقات", - "To display orders instantly, please grant permission to draw over other apps.": - "لعرض الطلبات على الفور، يرجى منح إذن لرسم فوق التطبيقات الأخرى.", - "InspectionResult": "نتيجة الفحص", - // "Criminal Record": "صحيفة الحالة الجنائية", - "The email or phone number is already registered.": - "البريد الإلكتروني أو رقم الهاتف مسجل بالفعل.", - "To become a ride-sharing driver on the Intaleq app, you need to upload your driver's license, ID document, and car registration document. Our AI system will instantly review and verify their authenticity in just 2-3 minutes. If your documents are approved, you can start working as a driver on the Intaleq app. Please note, submitting fraudulent documents is a serious offense and may result in immediate termination and legal consequences.": - "لتصبح شريكاً سائقاً لمشاركة الرحلات في تطبيق انطلق، يجب عليك تحميل رخصة القيادة ووثيقة الهوية ووثيقة تسجيل السيارة. سيقوم نظام الذكاء الاصطناعي لدينا بمراجعة مصداقيتها والتحقق منها على الفور في غضون 2-3 دقائق فقط. إذا تمت الموافقة على مستنداتك، يمكنك بدء العمل كشريك سائق في تطبيق انطلق. يرجى ملاحظة أن تقديم المستندات المزورة يعد جريمة خطيرة وقد يؤدي إلى الإنهاء الفوري والعواقب القانونية.", - "Documents check": "التحقق من المستندات", - // "Driver's License": "رخصة القيادة", - "License Type": "نوع الترخيص", - "National Number": "الرقم القومي:", - "Name (Arabic)": "الاسم (عربي)", - "Name (English)": "الإنجليزية", - "Address": "العنوان", - "Issue Date": "تاريخ الإصدار", - "Expiry Date": "تاريخ انهاء الصلاحية", - "License Categories": "فئات الترخيص", - // "driver_license": "رخصة القيادة", - "Capture an Image of Your Driver License": - "التقط صورة لرخصة القيادة الخاصة بك", - // "ID Documents Back": "ظهر وثائق الهوية", - "National ID": "الهوية الوطنية", - "Occupation": "المهنة", - "Your driver’s license and/or car tax has expired. Please renew them before proceeding.": - "لقد انتهت صلاحية رخصة القيادة و/أو ضريبة السيارة الخاصة بك. يرجى تجديدها قبل المتابعة.", - "Your driver’s license has expired. Please renew it before proceeding.": - "لقد انتهت صلاحية رخصة القيادة الخاصة بك. يرجى تجديدها قبل المتابعة.", - // "The national number on your driver’s license does not match the one on your ID document. Please verify and provide the correct documents.": - // "الرقم الوطني على رخصة القيادة الخاصة بك لا يتطابق مع الرقم الموجود على مستند هويتك. يرجى التحقق وتقديم المستندات الصحيحة.", - "Religion": "الدين", - "You have 500": "لديك 500", - "You have got a gift for invitation": "لقد حصلت على هدية للدعوة", - "You have got a gift": "لقد حصلت على هدية", - "Share the app with another new driver": - "شارك التطبيق مع سائق جديد آخر", - "for your first registration!": "للتسجيل الأول!", - "Get it Now!": "احصل عليه الآن!", - "before": "قبل", - "Intaleq": "انطلق", - "Code not approved": "الرمز غير موافق عليه", - "300 LE": "300 جنيه مصري", - "Do you have an invitation code from another driver?": - "هل لديك كود دعوة من سائق آخر؟", - "Paste the code here": "الصق الكود هنا", - "No, I don't have a code": "لا، لا أملك كودا", - "Code approved": "تمت الموافقة على الكود", - "Install our app:": "قم بتثبيت تطبيقنا:", - // "Invite another driver and both get a gift after he completes 100 trips!": - // "ادع صديقًا ليكون سائقًا واحصلا على هدية بعد إكماله 100 مشوار!", - "Share App": "شارك التطبيق", - "You deserve the gift": "أنت تستحق الهدية", - "complete, you can claim your gift": " يمكنك المطالبة بهديتك", - "When": "‏عندما يكمل", - "Enter driver's phone": "أدخل رقم هاتف السائق", - // "Send Invite": "أرسل الدعوة", - // "Show Invitations": "عرض الدعوات", - "The period of this code is 1 hour": - "فترة صلاحية هذا الكود هي ساعة واحدة", - "Intaleq DRIVER CODE": "كود سائق انطلق", - "Use this code in registration": "استخدم هذا الكود عند التسجيل", - "To get a gift for both": "للحصول على هدية لكليكما", - "Invite a Driver": "ادع سائقًا", - "As a new driver, you're eligible for a special offer!": - "بصفتك سائقًا جديدًا، فأنت مؤهل للحصول على عرض خاص!", - "Welcome Offer!": "عرض ترحيبي!", - "Please enter a phone number": "من فضلك أدخل رقم هاتف", - "Invite sent successfully": "تم إرسال الدعوة بنجاح", - "Failed to send invite": "فشل إرسال الدعوة", - "An error occurred": "حدث خطأ", - "Air Condition Trip": "رحلة تكييف ", - "Passenger name: ": "اسم الراكب: ", - // "Criminal Document Required": "الفيش الجنائي مطلوب", - "Criminal Document": "الفيش الجنائي", - "Marital Status": "الحالة الاجتماعية", - "Full Name (Marital)": "الاسم الكامل (الزوجي)", - "Payment Method": "طريقة الدفع", - "Expiration Date": "تاريخ الانتهاء", - "Capture an Image of Your ID Document Back": - "التقاط صورة للجهة الخلفية من وثيقة الهوية الخاصة بك", - // "ID Documents Front": "الوجه الأمامي لوثائق الهوية", - "First Name": "الاسم الأول", - "Press to hear": "اضغط للاستماع", - "CardID": "التقاط صورة للجهة الخلفية من وثيقة الهوية الخاصة بك", - "Full Name": "الاسم الكامل", - // "Vehicle Details Front": "تفاصيل المركبة الأمامية", - "Plate Number": "رقم اللوحة", - "Owner Name": "اسم المالك", - // "Vehicle Details Back": "تفاصيل المركبة الخلفية", - "Make": "‏نوع السيارة", - "Model": "طراز السيارة:", - "Year": "السنة", - "Chassis": "الشاسيه", - "Color": "اللون", - "Displacement": "سعه المحرك", - "Fuel": "الوقود", - "Tax Expiry Date": "تاريخ انهاء الصلاحية", - "Inspection Date": "تاريخ الفحص", - "Capture an Image of Your car license back": - "التقاط صورة لرخصة سيارتك مرة أخرى", - "Capture an Image of Your Driver’s License": - "التقط صورة لرخصة القيادة الخاصة بك", - "Sign in with Google for easier email and name entry": - "سجّل الدخول باستخدام جوجل لتسهيل إدخال البريد الإلكتروني والاسم", - "You will choose allow all the time to be ready receive orders": - "ستختار السماح طوال الوقت بتلقي الطلبات الجاهزة", - "Welcome to Intaleq!": "مرحبًا بك في انطلق!", + "Get": "احصل على", + "Get Details of Trip": "احصل على تفاصيل الرحلة", + "Get Direction": "احصل على الاتجاهات", + "Get a discount on your first Intaleq ride!": + "احصل على خصم بأول رحلة انطلق!", + "Get features for your country": "احصل على الميزات لبلدك", + "Get it Now!": "احصل عليها هلق!", "Get to your destination quickly and easily.": - "الوصول إلى وجهتك بسرعة وسهولة.", - "Enjoy a safe and comfortable ride.": "استمتع بمشوار آمن ومريح.", - "Choose Language": "اختر لغة", - "Login": "تسجيل الدخول", - "Pay with Wallet": "الدفع باستخدام المحفظة", - "Invalid MPIN": "رمز MPIN غير صالح", - "Invalid OTP": "رمز التحقق غير صالح", - "Enter your email address": "أدخل عنوان بريدك الإلكتروني", - "Please enter Your Email.": "يُرجى إدخال...", - "Enter your phone number": "أدخل رقم هاتفك", - "Please enter your phone number.": "الرجاء إدخال رقم هاتفك.", - "Please enter Your Password.": "إدخال كلمة المرور الخاصة بك", - "Submit": "إرسال", - "if you dont have account": "إذا لم يكن لديك حساب", - "Register": "سجل", - "Accept Ride's Terms & Review Privacy Notice": - "اقبل شروط الرحلة وراجع إشعار الخصوصية", - "By selecting 'I Agree' below, I have reviewed and agree to the Terms of Use and acknowledge the Privacy Notice. I am at least 18 years of age.": - "من خلال تحديد \"أوافق\" أدناه، فقد راجعت شروط الاستخدام وأوافق عليها وأقر بإشعار الخصوصية.عمري 18 سنة على الأقل.", - "I Agree": "أوافق", - "First name": "الاسم الأول", - "Enter your first name": "أدخل اسمك الأول", - "Please enter your first name.": "‏‏الرجاء إدخال اسمك.", - "Last name": "اسم العائلة", - "Enter your last name": "أدخل اسم العائلة", - "Please enter your last name.": "‏‏الرجاء إدخال اسمك.", - "City": "المدينة", - "Please enter your City.": "يُرجى إدخال...", - "Male": "ذكر", - "Female": "أنثى", - "Verify Email": "التحقق من صحة البريد الإلكتروني", - "We sent 5 digit to your Email provided": - "أرسلنا 5 أرقام إلى بريدك الإلكتروني المقدم", - "5 digit": "PIN(5-أرقام)", - "Send Verification Code": "رمز التحقق", - "Your Ride Duration is": "مدة مشوارك هي", - "You will be thier in": "سوف تكون لهم في", - "You trip distance is": "مسافة مشوارك هي", - "Fee is": "الرسوم هي", - "To :": "إلى:", - "Add Promo": "إضافة عرض ترويجي", - "Confirm Selection": "تأكيد التحديد", - "distance is": "المسافة هي", - "duration is": "المدة هي", - "I don't need a ride anymore": "لا أحتاج إلى مشوار بعد الآن", - "I was just trying the application": "كنت أجرب التطبيق فقط", - "No driver accepted my request": "لم يقبل أي شريك سائق طلبي", - "I added the wrong pick-up/drop-off location": - "أضفت موقع الالتقاء/النزول غير الصحيح", - "I don't have a reason": "ليس لدي سبب", - "Other": "أخرى", - "Can we know why you want to cancel Ride ?": - "هل يمكننا معرفة سبب رغبتك في إلغاء الرحلة ؟", - "Cancel Ride": "إلغاء!", - "Add Payment Method": "أضف طريقة دفع", - "Your Wallet balance is": "رصيد محفظتك هو", - "Ride Wallet": "محفظة الرحلات", - // "Payment Method": "طريقة الدفع", - "Type here Place": "اكتب هنا المكان", - "Are You sure to ride to": "هل أنت متأكد من إجراء مشوار إلى", - "Confirm": "تأكيد", - "Back": "عودة", - "You are Delete": "أنت تحذف", - "Deleted": "محذوف", - "You Dont Have Any places yet !": "ليس لديك أي أماكن حتى الآن !", - "Favorite Places": "الأماكن المفضلة", - "From : Current Location": "الموقع الحالي:", - "Where to": "أين؟", - "Notifications": "الإشعارات", - "Profile": "الملف الشخصي", - "go to your passenger location before\nPassenger cancel trip": - "اذهب إلى موقع الراكب قبل أن يلغي الراكب الرحلة", - "Home": "الصفحة الرئيسية", - "My Cared": "ماي كيرت", - "Add Card": "أضف بطاقة", - "Add Credit Card": "أضف بطاقة ائتمان", - "Please enter the cardholder name": "يرجى إدخال اسم حامل البطاقة", - "Please enter the expiry date": "يرجى إدخال تاريخ انتهاء الصلاحية", - "Please enter the CVV code": "يرجى إدخال رمز التحقق من البطاقة", - "Go To Favorite Places": "الانتقال إلى الأماكن المفضلة", - "Go to this Target": "انتقل إلى هذا الهدف", - "My Profile": "‏ملفي", - "Sign Out": "تسجيل الخروج", - "Home Page": "الصفحة الرئيسية", - "Are you want to go to this site": "هل تريد الذهاب إلى هذا الموقع", - "MyLocation": "موقعي", - "my location": "موقعي", - "Target": "الهدف", - "Update": "تحديث", - "Are you sure to exit ride ?": "هل أنت متأكد من الإنهاء", - "You Should choose rate figure": "يجب عليك اختيار الرقم الصحيح", - "Login Captin": "كابتن تسجيل الدخول", - "Register Captin": "تسجيل الكابتن", - "Send Verfication Code": "إرسال رمز التحقق", - "End Ride": "‏إنهاء الرحلة", - "Minute": "الدقيقة", - "Go to passenger Location": "انتقل إلى موقع الراكب ", - "Duration of the Ride is": "مدة المشوار هي", - "Distance of the Ride is": "مسافة المشوار هي", - "Name of the Passenger is": "اسم الراكب هو", - "Hello this is Captain": "مرحبًا، أنا الكابتن", - // "Start the Ride": "ابدأ المشوار", - "Please Wait If passenger want To Cancel!": - "يرجى الانتظار إذا أراد الراكب الإلغاء!", - "Total Duration:": "المدة الإجمالية:", - "Active Duration:": "‏مدة النشاط الحالي", - "Waiting for Captin ...": "في انتظار الكابتن ...", - "Age is": "العمر هو", - "Rating is": "التقييم هو", - "to arrive you.": "للوصول إليك.", - "Order History": "سجل تاريخ الأمر", - "My Wallet": "محفظتي", - "Tariff": "التعريفة", - "Settings": "الإعدادات", - "Feed Back": "ردود الفعل", - "Promos": "العروض الترويجية", - "Please enter a valid 16-digit card number": - "الرجاء إدخال رقم أمر شراء صالح.", - "Add Phone": "الهاتف", - // "Please enter a phone number": "الرجاء إدخال رقم الهاتف", - "You dont Add Emergency Phone Yet!": - "لم تقم بإضافة هاتف الطوارئ بعد!", - "You will arrive to your destination after": "ستصل إلى وجهتك بعد", - "You can cancel Ride now": "يمكنك إلغاء المشوار الآن", - "You Can cancel Ride After Captain did not come in the time": - "يمكنك إلغاء المشوار بعد عدم وصول الكابتن في الوقت المناسب", - "If you in Car Now. Press Start The Ride": - "إذا كنت في السيارة الآن. اضغط على بدء المشوار", - "You Dont Have Any amount in": "ليس لديك أي مبلغ في", - "Wallet!": "محفظة!", - "You Have": "لديك", - "Save Credit Card": "احتفظ ببطاقة الائتمان", - "Show Promos": "عرض العروض", - "10 and get 4% discount": "١٠ واحصل على خصم ٤٪", - "20 and get 6% discount": "٢٠ واحصل على خصم ٦٪", - "40 and get 8% discount": "40 واحصل على خصم 8%", - "100 and get 11% discount": "١٠٠ واحصل على خصم ١١٪", - "Pay with Your PayPal": "ادفع باستخدام PayPal", - "You will choose one of above !": - "سوف تختار واحدة من الخيارات أعلاه!", - // "Cancel": "إلغاء", - "Delete My Account": "حذف حسابي", - "Edit Profile": "تعديل الملف الشخصي", - // "Name": "الاسم", - "Update Gender": "تحديث الجنس", - "Education": "التعليم", - "Update Education": "تحديث التعليم", - "Employment Type": "نوع الوظيفة", - "SOS Phone": "SOS الهاتف", - "High School Diploma": "شهادة الثانوية العامة", - "Associate Degree": "درجة الدبلوم المشترك", - "Bachelor's Degree": "درجة البكالوريوس", - "Master's Degree": "درجة الماجستير", - "Doctoral Degree": "درجة الدكتوراه", - 'Orders Page': 'صفحة الطلبات', - 'ShamCash Account': 'حساب شام كاش', 'Trip Completed': 'اكتملت الرحلة', - 'Finish & Submit': 'إنهاء وتقديم', - 'Collect Cash': 'جمع النقود', - "Pay remaining to Wallet?": "هل تدفع الباقي إلى المحفظة؟", - "Enter Amount Paid": "أدخل المبلغ المدفوع", - "Confirm Payment": "تأكيد الدفع", - "Take Photo Now": "التقط صورة الآن", - "Later": "لاحقًا", - "Profile Photo Required": "صورة الملف الشخصي مطلوبة", - "Please upload a clear photo of your face to be identified by passengers.": - "يرجى تحميل صورة واضحة لوجهك ليتم التعرف عليك من قبل الركاب.", - 'Any comments about the passenger?': 'هل لديك أي تعليقات حول الراكب؟', - "Promos For today": "العروض الترويجية لليوم", - "Copy this Promo to use it in your Ride!": - "انسخ هذا العرض الترويجي لاستخدامه في رحلتك!", - "To change some Settings": "لتغيير بعض الإعدادات", - "To change Language the App": "لتغيير لغة التطبيق", - "Order Request Page": "صفحة طلب الطلبية", - "Routs of Trip": "طرق الرحلة", - "Passenger Name is": "اسم المسافر", - "Total From Passenger is": "إجمالي من الراكب هو", - "Duration To Passenger is": "المدة إلى الراكب", - "Distance To Passenger is": "مسافة إلى الراكب تكون", - "Total For You is": "المجموع بالنسبة لك هو", - "Distance is": "المسافة", - "KM": "كيلومتر", - "Duration of Trip is": "مدة الرحلة هي", - "Minutes": "دقائق", - "Apply Order": "تطبيق الطلب", - "Refuse Order": "رفض الطلب", - "Rate Captain": "تقييم الكابتن", - "Enter your Note": "أدخل ملاحظتك", - "Type something...": "اكتب شيئًا...", - "Submit rating": "تقديم التقييم", - "Rate Passenger": "تقييم الراكب", - "Ride Summary": "ملخص الرحلة", - "welcome_message": "رسالة الترحيب", - "app_description": "وصف_التطبيق", - "get_to_destination": "الوصول إلى الوجهة", - "get_a_ride": "احصل على رحلة", - "safe_and_comfortable": "آمن ومريح", - "committed_to_safety": "ملتزم بالسلامة", - // "Driver Applied the Ride for You": "سائق قدم الرحلة من أجلك", - // "Show latest promo": "أظهر أحدث عرض ترويجي", - // "Cancel Trip": "إلغاء الرحلة", - // "Passenger Cancel Trip": "الرحلة ألغيت من قبل المسافر", - // "Please stay on the picked point.": "يرجى البقاء على النقطة المحددة.", - // "Hi ,I will go now": "مرحبًا، سأذهب الآن", - // "Passenger come to you": "الراكب يأتي إليك", - // "Hi ,I Arrive your site": "مرحبًا، لقد وصلت إلى موقعك.", - // "you will pay to Driver": "سوف تدفع للسائق", - "Driver Cancel Your Trip": "ألغِ رحلتك، سائق.", - // "you will pay to Driver you will be pay the cost of driver time look to your Intaleq Wallet": - // "سوف تدفع للسائق ستدفع تكلفة وقت السائق انظر إلى محفظتك Intaleq", - // "I will go now": "سأذهب الآن", - "You Have Tips": "لديك نصائح", - "tips": "نصائح", - "Total is": "المجموع هو", - // "No,I want": "لا ، أريد", - // "Your fee is": "رسومك هي", - // "Do you want to pay Tips for this Driver": - // "هل ترغب في دفع البقشيش لهذا السائق؟", - // "Tip is": "‏إكرامي", - "Camera Access Denied.": "تم رفض الوصول إلى الكاميرا.", - "Open Settings": "افتح الإعدادات", - "GPS Required Allow !.": "GPS مطلوب تمكينه!", - "Your Account is Deleted": "تم حذف حسابك", - "Are you sure to delete your account?": - "هل أنت متأكد من رغبتك في حذف حسابك؟", - "Your data will be erased after 2 weeks": - "سيتم محو بياناتك بعد مرور أسبوعين", - "And you will can't return to use app after 1 month": - "وستتمكن من العودة لاستخدام التطبيق بعد شهر واحد", - "Enter Your First Name": "أدخل اسمك الأول", - "Are you Sure to LogOut?": "هل أنت متأكد من تسجيل الخروج؟", - "Email Wrong": "البريد الإلكتروني خاطئ", - "Email you inserted is Wrong.": "البريد الإلكتروني الذي أدخلته خاطئ.", - "You have finished all times": "لقد انتهيت من كل الأوقات", - "if you want help you can email us here": - "إذا كنت ترغب في المساعدة يمكنك مراسلتنا عبر البريد الإلكتروني هنا", - "Thanks": "شكرًا", - "Email Us": "أرسل لنا بريدًا إلكترونيًا", - "I cant register in your app in face detection": - "لا أستطيع التسجيل في تطبيقك باستخدام كشف الوجه", - "Hi": "مرحبا", - "No face detected": "لم يتم الكشف عن وجه", - "Image detecting result is": "نتيجة كشف الصورة هي", - "from 3 times Take Attention": "من 3 مرات خذ انتباهك", - "Be sure for take accurate images please": - "تأكد من التقاط صور دقيقة من فضلك", - "You have": "لديك", - "image verified": "الصورة موثقة", - "Next": "التالي", - "There is no help Question here": "لا يوجد سؤال مساعدة هنا", - // "Call End": "انتهاء المكالمة", - "You dont have Points": "ليس لديك رصيد تشغيل", - "You Are Stopped For this Day !": "تم إيقافك لهذا اليوم!", - "You must be charge your Account": "يجب عليك شحن حسابك", - "You Refused 3 Rides this Day that is the reason": - "رفضت 3 رحلات هذا اليوم وهذا هو السبب", - "See you Tomorrow!": "أراك غدًا!", - "Recharge my Account": "قم بإعادة شحن حسابي", - "Ok , See you Tomorrow": "حسنًا، أراك غدًا", - "You are Stopped": "أنت متوقف", - "Connected": "متصل", - "Not Connected": "غير متصل", - "Your are far from passenger location": "أنت بعيد عن موقع الركاب", - "go to your passenger location before": - "انتقل إلى موقع الراكب الخاص بك قبل", - "Passenger cancel trip": "الراكب قام بإلغاء الرحلة", - "You will get cost of your work for this trip": - "ستحصل على تكلفة عملك لهذه الرحلة", - "in your wallet": "في محفظتك", - "you gain": "تكسب", - "Account": "الحساب", - "Wallet": "المحفظة", - "Maintenance Offer": "عرض الصيانة", - // "Enter your Question here": "أدخل سؤالك هنا", - "Ineligible for Offer": "غير مؤهل للحصول على العرض", - "You should complete 500 trips to unlock this feature.": - "يجب عليك إكمال 500 رحلة لتفعيل هذه الميزة.", - "Thank You!": "شكراً لك!", - "Your rating has been submitted.": "تم إرسال تقييمك.", - "General": "عام", - "Language": "اللغة", - "You can change the language of the app": "يمكنك تغيير لغة التطبيق", - "Change Country": "تغيير الدولة", - // "Don't start trip if passenger not in your car": - // "لا تبدأ الرحلة إذا لم يكن الراكب في سيارتك", - "You can change the Country to get all features": - "يمكنك تغيير الدولة للحصول على جميع الميزات", - "Slide to End Trip": "‏اسحب لإنهاء الرحلة", - "App Preferences": "تفضيلات التطبيق", - "For Egypt": "للمصريين", - "Non Egypt": "لغير المصريين", + "توصل لوجهتك بسرعة وسهولة.", + "Getting Started": "البدء", + "Gift Already Claimed": "تم استلام الهدية من قبل", + "Go": "انطلق", + "Go To Favorite Places": "روح للأماكن المفضلة", + "Go to next step": "روح للخطوة الجاية", + "Go to next step\nscan Car License.": + "روح للخطوة الجاية\nامسح رخصة السيارة.", + "Go to passenger Location": "روح لموقع الراكب", + "Go to passenger Location now": "روح لموقع الراكب هلق", + "Go to passenger:": "روح للراكب:", + "Go to this Target": "روح لهالهدف", + "Go to this location": "روح لهالموقع", "Google Map App": "تطبيق خرائط جوجل", - "If you want to make Google Map App run directly when you apply order": - "إذا كنت تريد تشغيل تطبيق خرائط جوجل مباشرة عند تطبيق الطلب", - "Vibration": "الاهتزاز", - "Help & Support": "المساعدة والدعم", - "Please select a rating before submitting.": - "يرجى تحديد تقييم قبل الإرسال.", - "Please check back later for available rides.": - "يرجى التحقق مرة أخرى لاحقًا للحصول على الرحلات المتاحة.", - "Please enter your question": "يرجى إدخال سؤالك", - "Submit Question": "إرسال السؤال", - "Your Questions": "أسئلتك", - "No questions asked yet.": "لم يتم طرح أي أسئلة بعد.", - "Activities": "الأنشطة", - "History of Trip": "سجل الرحلات", - "Available for rides": "متاح للرحلات", - "Support": "الدعم", - "Helping Center": "مركز المساعدة", - "More": "المزيد", - "Order Cancelled": "الطلب ملغى", - "Order Cancelled by Passenger": "تم إلغاء الطلب من قبل الراكب", - "Success": "‏تمام", - "Feedback data saved successfully": "تم حفظ بيانات التقييم بنجاح", - "No Promo for today .": "لا ترويج لليوم.", - "Select your destination": "اختر وجهتك", - "Search for your Start point": "ابحث عن نقطة البداية الخاصة بك", - "Search for waypoint": "ابحث عن نقطة الوايبوينت", - "Current Location": "الموقع الحالي", - "Add Location 1": "أضف الموقع 1", - "You must Verify email !.": "يجب التحقق من البريد الإلكتروني!", - "Cropper": "القص", - "Saved Sucssefully": "تم الحفظ بنجاح", - "Select Date": "اختر التاريخ", - "Birth Date": "تاريخ الميلاد", - "Ok": "حسنا", - "the 500 points equal 30 JOD": "الـ 500 نقطة تساوي 30 دينار أردني", - "the 500 points equal 30 JOD for you": - "الـ500 نقطة تعادل 30 دينار أردني لك", - "token updated": "الرمز تم تحديثه", - "Add Location 2": "أضف الموقع ٢", - "Add Location 3": "أضف الموقع ٣", - "Add Location 4": "أضف الموقع ٤", - "Waiting for your location": "في انتظار موقعك", - "Search for your destination": "ابحث عن وجهتك", - "Hi! This is": "مرحبًا! هذا", - "I am using": "أنا استخدم", - "to ride with": "للركوب مع", - "as the driver.": "كسائق.", - "is driving a": "يقود", - "with license plate": "بوجود لوحة ترخيص", - "I am currently located at": "أنا حاليا موجود في", - "Please go to Car now": "الرجاء الذهاب إلى السيارة الآن", - "If you need to reach me, please contact the driver directly at": - "إذا كنت بحاجة للتواصل معي، يرجى التواصل مع السائق مباشرة على", - "No Car or Driver Found in your area.": - "لم يتم العثور على سيارة أو سائق في منطقتك.", - "Please Try anther time": "يرجى المحاولة مرة أخرى", - "There no Driver Aplly your order sorry for that": - "لا يوجد سائق يمكنه تنفيذ طلبك، نأسف لذلك.", - "Trip Cancelled": "تم إلغاء الرحلة", - "The Driver Will be in your location soon .": - "سيكون السائق في موقعك قريبًا.", - "The distance less than 500 meter.": "المسافة أقل من 500 متر.", - "Promo End !": "انتهاء العرض!", - "There is no notification yet": "لا توجد إشعارات بعد", - "Use Touch ID or Face ID to confirm payment": - "استخدم معرف اللمس أو معرف الوجه لتأكيد الدفع", - "Contact us for any questions on your order.": - "اتصل بنا لأي استفسار حول طلبك.", - "Pyament Cancelled .": "تم إلغاء الدفع.", - "type here": "اكتب هنا", - "Scan Driver License": "فحص رخصة القيادة", - "Please put your licence in these border": - "يرجى وضع رخصتك في هذه الحدود", - "Camera not initialized yet": "الكاميرا لم تُهيأ بعد", - "Take Image": "خذ صورة", - "AI Page": "صفحة الذكاء الاصطناعي", - "Take Picture Of ID Card": "خذ صورة لبطاقة الهوية", - "Take Picture Of Driver License Card": "خذ صورة لبطاقة رخصة القيادة.", - "We are process picture please wait": - "نحن نقوم بمعالجة الصور، يرجى الانتظار.", - "There is no data yet.": "لا توجد بيانات بعد.", - "Name :": "الاسم:", - "Drivers License Class:": "رخصة القيادة الفئة:", - "Document Number:": "رقم الوثيقة:", - "Address:": "العنوان:", + "H and": "و", + "HSBC Bank Egypt S.A.E": "بنك إتش إس بي سي مصر", + "Hard Brake": "فرملة قوية", + "Have a promo code?": "عندك كود ترويجي؟", + "Head": "الرأس", + "Heading your way now. Please be ready.": + "عم ييجي لعندك هلق. تفضل جهّز حالك.", + "Health Insurance": "التأمين الصحي", + "Heatmap": "خريطة حرارية", "Height:": "الطول:", - "Expiry Date:": "تاريخ الانتهاء:", - "Date of Birth:": "تاريخ الميلاد:", - "You can't continue with us .": "لا يمكنك الاستمرار معنا.", - "You should renew Driver license": "يجب عليك تجديد رخصة القيادة", - "Detect Your Face": "اكتشاف وجهك", - "Go to next step": "انتقل إلى الخطوة التالية", - "scan Car License.": "فحص رخصة السيارة.", - "Name in arabic": "الاسم بالعربية", - "Drivers License Class": "رخصة القيادة الفئة", - "Date of Birth": "تاريخ الميلاد", - "Age": "العمر", - "Lets check Car license": "دعونا نتحقق من رخصة السيارة", - "Car Kind": "نوع السيارة", - "Car Plate": "لوحة السيارة", - "Lets check License Back Face": "دعونا نتحقق من رخصة الوجه الخلفي", - "Car License Card": "بطاقة ترخيص السيارة", - "No image selected yet": "لم يتم اختيار صورة بعد", - "Made :": "صنع:", - "model :": "الموديل:", - "VIN :": "رقم الهيكل:", - "year :": "سنة:", - "ُExpire Date": "تاريخ الانتهاء", - "Login Driver": "تسجيل الدخول للسائق", - "Password must br at least 6 character.": - "يجب أن تكون كلمة المرور على الأقل 6 أحرف.", - "if you don't have account": "إذا لم يكن لديك حساب", - "Here recorded trips audio": "هنا تسجيلات رحلات صوتية", - "Register as Driver": "التسجيل كشريك سائق", - "Privacy Notice": "إشعار الخصوصية", - "By selecting \"I Agree\" below, I have reviewed and agree to the Terms of Use and acknowledge the": - "من خلال اختيار \"أوافق\" أدناه، قمت بمراجعة الشروط والأحكام وأوافق عليها وأقر بها", - ". I am at least 18 years of age.": ". أنا عمري على الأقل 18 عامًا.", - "Log Out Page": "صفحة تسجيل الخروج", - "Log Off": "سجل الخروج", - "Register Driver": "سجل السائق", - "Verify Email For Driver": "تحقق من البريد الإلكتروني للسائق", - "Admin DashBoard": "لوحة تحكم المشرف", - "Your name": "اسمك", - "your ride is applied": "تم تطبيق مشوارك", - "Your password": "كلمة السر الخاصة بك", - "LE": "جنيه مصري", - "JOD": "الدينار الأردني", - "m": "m", - "We search nearst Driver to you": "نحن نبحث عن أقرب شريك سائق إليك", - "please wait till driver accept your order": - "انتظر من فضلك حتى يقبل السائق طلبك", - "No accepted orders? Try raising your trip fee to attract riders.": - "لا توجد طلبات مقبولة ؟ حاول زيادة رسوم رحلتك لجذب الركاب.", - "You should select one": "يجب عليك اختيار واحد", - "The driver accept your order for": "قبل الشريك السائق طلبك مقابل", - "Increase Fee": "زيادة الرسوم", - "No, thanks": "لا، شكرًا", - "The driver on your way": "الشريك السائق في طريقه إليك", - "Total price from": "السعر الإجمالي من", - "Order Details Intaleq": "تفاصيل الطلب السرعة", - // "Order Applied": "تم تطبيق الطلب", - "accepted your order": "تم قبول طلبك", - // "We regret to inform you that another driver has accepted this order.": - // "يؤسفنا إبلاغك بأن شريكاً سائقاً آخر قد قبل هذا الطلب.", - "Selected file:": "الملف المحدد:", - "Your trip cost is": "تبلغ تكلفة رحلتك", - "this will delete all files from your device": - "سيقوم هذا بحذف جميع الملفات من جهازك", - "you have a negative balance of": "لديك رصيد سلبي قدره", - "in your": "فيك", - "Exclusive offers and discounts always with the Intaleq app": - "عروض وخصومات حصرية دائمًا مع تطبيق انطلق", - // "Please go to Car Driver": "من فضلك اذهب إلى سائق السيارة", - "wallet due to a previous trip.": "المحفظة بسبب رحلة سابقة.", - // "Submit Question": "إرسال السؤال", - "Please enter your Question.": "الرجاء إدخال سؤالك.", + "Hello": "أهلاً", + "Hello this is Captain": "أهلاً، أنا الكابتن", + "Hello this is Driver": "أهلاً، أنا السائق", + "Help & Support": "المساعدة والدعم", "Help Details": "تفاصيل المساعدة", - "No trip yet found": "لم يتم العثور على رحلة بعد", - "No Response yet.": "لا توجد استجابة حتى الآن.", - "You Earn today is": "كسبك اليوم هو", - // "You Have in": "لديك في", - "Total points is": "‏الرصيد التشغيل", - "Total Connection Duration:": "إجمالي مدة الاتصال:", - "H and": "H و", - "Passenger name :": "اسم المسافر:", - // "Cost Of Trip IS": "تكلفة الرحلة هي", - "Arrival time": "وقت الوصول", - "arrival time to reach your point": "وقت الوصول للوصول إلى وجهتك", - "For Intaleq and Delivery trips, the price is calculated dynamically. For Comfort trips, the price is based on time and distance": - "للرحلات السريعة والتوصيل، يتم حساب السعر بشكل ديناميكي. أما بالنسبة للرحلات المريحة، يعتمد السعر على الوقت والمسافة.", - "Hello this is Driver": "مرحباً، أنا الشريك السائق", - "Please wait for the passenger to enter the car before starting the trip.": - "يرجى الانتظار حتى يدخل الراكب السيارة قبل بدء الرحلة.", - "No ,still Waiting.": "لا ، ما زلت في انتظارك.", - "I arrive you": "لقد وصلت إليك", - "I Arrive your site": "لقد وصلت إليك", - "please go to picker location exactly": - "الرجاء الانتقال إلى موقع الاختيار بالضبط", - "You Can Cancel Trip And get Cost of Trip From": - "يمكنك إلغاء المشوار والحصول على تكلفة المشوار من", - // "Yes": "نعم", - "Insert Emergincy Number": "أدخل رقم الطوارئ", - "Best choice for comfort car and flexible route and stops point": - "أفضل خيار للسيارة المريحة والطريق المرن ونقطة التوقف", - "Insert": "إدراج", - "Total weekly is ": " ‏مجموع التحصيل الأسبوعي ", - "you can buy ": "‏يمكنك شراء", - "Which method you will pay": "‏أي طريقة الدفع تفضل", - "This is for delivery or a motorcycle.": - "هذا للتوصيل أو دراجة نارية.", - "by ": "‏ ب", 'Fixed Price': 'سعر ثابت', - "Weekly Budget": "‏التقرير الأسبوعي", - "This trip goes directly from your starting point to your destination for a fixed price. The driver must follow the planned route": - "ينتقل هذا المشوار مباشرة من نقطة البداية إلى وجهتك بسعر ثابت. يجب على الشريك السائق اتباع المسار المخطط له", - "You can decline a request without any cost": - "يمكنك رفض الطلب دون أي تكلفة", - "Perfect for adventure seekers who want to experience something new and exciting": - "مثالي للباحثين عن المغامرة الذين يرغبون في تجربة شيء جديد ومثير", - "My current location is:": "موقعي الحالي هو:", - "and I have a trip on": "ولدي رحلة في", - "App with Passenger": "تطبيق مع الراكب", - "You will be pay the cost to driver or we will get it from you on next trip": - "سيتم دفع التكلفة للشريك السائق أو سنحصل عليها منك في المشوار التالي", - "Trip has Steps": "الرحلة لها خطوات", - "Distance from Passenger to destination is": - "مسافة الراكب إلى الوجهة هي", - "price is": "السعر هو", - "This ride type does not allow changes to the destination or additional stops": - "لا يسمح نوع المشوار هذا بإجراء تغييرات على الوجهة أو نقاط توقُّف إضافية", - "This price may be changed": "قد يتم تغيير هذا السعر", - "No SIM card, no problem! Call your driver directly through our app. We use advanced technology to ensure your privacy.": - "لا توجد بطاقة SIM، لا توجد مشكلة! اتصل بالشريك السائق مباشرة من خلال تطبيقنا. نحن نستخدم التكنولوجيا المتقدمة لضمان خصوصيتك.", - "This ride type allows changes, but the price may increase": - "يسمح نوع الرحلة هذا بالتغييرات، لكن قد يرتفع السعر", - // "message From Driver": "‏رسالة من السائق", - // "message From passenger": "رسالة من الراكب", - "Select one message": "اختر رسالة واحدة", - "I'm waiting for you": "أنا في انتظارك", - "We noticed the Intaleq is exceeding 100 km/h. Please slow down for your safety. If you feel unsafe, you can share your trip details with a contact or call the police using the red SOS button.": - "لاحظنا أن السرعة تتجاوز 100 كم/ساعة. يرجى إبطاء السرعة حفاظًا على سلامتك. إذا شعرت بعدم الأمان، يمكنك مشاركة تفاصيل رحلتك مع جهة اتصال أو الاتصال بالشرطة باستخدام الزر الأحمر للاستغاثة.", - "Warning: Intaleqing detected!": "تحذير: تم اكتشاف السرعة الزائدة!", - "Please help! Contact me as soon as possible.": - "من فضلك ساعدني! تواصل معي في أقرب وقت ممكن.", - "Email": "البريد الإلكتروني", - "Please enter your Email.": "يرجى إدخال بريدك الإلكتروني", - "Email must be correct.": "البريد الإلكتروني يجب أن يكون صحيحاً", - "Password": "كلمة المرور", - "Please enter your Password.": "يرجى إدخال كلمة المرور", - "Password must be at least 6 characters.": - "يجب أن تكون كلمة المرور مكونة من 6 أحرف على الأقل", - "Phone Number": "رقم الهاتف", - // "Please enter your phone number.": "يرجى إدخال رقم هاتفك", - "Phone number must be valid.": "يجب أن يكون رقم الهاتف صحيحاً", - "Share Trip Details": "شارك تفاصيل الرحلة", - "Car Plate is": "لوحة السيارة", - "L.E": "ج.م", - "the 300 points equal 300 L.E for you": - "الـ 300 نقطة تعادل 300 جنيه مصري بالنسبة لك", - "So go and gain your money": "انطلق واكسب مالك", - "the 300 points equal 300 L.E": "الـ 300 نقطة تساوي 300 جنيه مصري", - "The payment was not approved. Please try again.": - "لم يتم الموافقة على الدفع. يرجى المحاولة مرة أخرى.", - "Payment Failed": "تعذرت عملية الدفع", - // "Error": "خطأ", - "By selecting 'I Agree' below, I have reviewed and agree to the Terms of Use and acknowledge the ": - "مِنْ خِلَال اخْتِيَار 'أُوَافِق' أَدْنَاهُ، قُمْتُ بِمُرَاجَعَة وَقَبُول شُرُوط الاسْتِخْدَام وَأُقِرُّ بِإِشْعَار الخُصُوصِيَّة. أَنَا عَلَى الأَقَل 18 عَامًا.", + "Helping Center": "مركز المساعدة", + "Helping Page": "صفحة المساعدة", + "Here recorded trips audio": "هون في صوت الرحلات المسجلة", + "Hi": "هلا", + "Hi ,I Arrive your site": "هلا، وصلت لموقعك", + "Hi ,I will go now": "هلا، رح روح هلق", + "Hi! This is": "هلا! أنا", + "Hi, I will go now": "هلا، رح روح هلق", + "Hi, Where to": "أهلاً، وين بدك تروح؟", + "High School Diploma": "شهادة ثانوية عامة", + "History Page": "صفحة السجل", + "History of Trip": "سجل الرحلة", + "Home": "الرئيسية", + "Home Page": "الصفحة الرئيسية", + "Home Saved": "تم حفظ المنزل", + "Housing And Development Bank": "بنك الإسكان والتعمير", + "How can I pay for my ride?": "كيف بقدر أدفع لرحلتي؟", + "How can I register as a driver?": "كيف بقدر أسجل كسائق؟", + "How do I communicate with the other party (passenger/driver)?": + "كيف بقدر أتواصل مع الطرف التاني (راكب/سائق)؟", + "How do I request a ride?": "كيف بطلب رحلة؟", + "How many hours would you like to wait?": "كام ساعة بدك تستنى؟", + "How much Passenger pay?": "قديش بدفع الراكب؟", + "How much longer will you be?": "قديش بعدك بتأخر؟", + "How to use App": "كيف تستخدم التطبيق", + "How to use Intaleq": "كيف تستخدم انطلق", + "How was the passenger?": "كيف كان الراكب؟", + "How was your trip with": "كيف كانت رحلتك مع", + "How would you rate our app?": "كيف بتقيّم تطبيقنا؟", + "Hybrid": "هايبرد", + "I Agree": "بوافق", + "I Arrive": "وصلت", + "I Arrive your site": "وصلت لموقعك", + "I Have Arrived": "أنا وصلت", + "I added the wrong pick-up/drop-off location": + "حطيت مكان الالتقاط/التنزيل غلط", + "I arrive you": "وصلت لعندك", + "I cant register in your app in face detection": + "ما بقدر أسجل بتطبيقك بكشف الوجه", + "I want to order for myself": "حابب أطلب لحالي", + "I want to order for someone else": "حابب أطلب لغيري", + "I was just trying the application": "كنت عم جرّب التطبيق بس", + "I will go now": "رحروح هلق", + "I will slow down": "رحخفف السرعة", + "ID Documents Back": "وثائق الهوية (خلفي)", + "ID Documents Front": "وثائق الهوية (أمامي)", + "ID Mismatch": "عدم تطابق الهوية", + "If you in Car Now. Press Start The Ride": + "إذا أنت بالسيارة هلق. اضغط ابدأ الرحلة", "If you need any help or have question this is right site to do that and your welcome": - "إذا كنت بحاجة إلى أي مساعدة أو لديك أي أسئلة، فهذا هو الموقع المناسب للقيام بذلك، ومرحباً بك", - "Helping Page": "‏مركز المساعدة", - "No ride yet": "‏لا يوجد رحلات متوفرة", - "An error occurred during the payment process.": - "حدث خطأ أثناء عملية الدفع.", - "The payment was approved.": "تمت الموافقة على الدفع.", - "Payment Successful": "تم الدفع بنجاح", - "No ride found yet": "لم يتم العثور على رحلة بعد", - "Accept Order": "قبول الطلب", - "Bottom Bar Example": "مثال على الشريط السفلي", - "Driver phone": "هاتف الشريك السائق", - "Statistics": "الإحصائيات", - "is ON for this month": " لهذا الشهر ", - "Origin": "الأصل", - "Destination": "مكان الوصول", - "the 300 points equal 300 L.E for you \nSo go and gain your money": - "ال300 نقطة تعادل 300 ج.م لك، فاذهب واكسب مالك.", - "Driver Name": "اسم السائق", - "Driver Car Plate": "لوحة سيارة السائق", - // "Available for rides": "‏الرحلات المتوفرة", - "Scan Id": "فحص الهوية", - "Camera not initilaized yet": "الكاميرا لم تُهيأ بعد", - "Scan ID MklGoogle": "فحص الهوية MklGoogle", - // "Language": "اللغة", - "Jordan": "الأردن", - "USA": "الولايات المتحدة الأمريكية", - "Egypt": "مصر", - "Turkey": "تركيا", - "Saudi Arabia": "السعودية", - "Qatar": "قطر", - "Bahrain": "البحرين", - "Kuwait": "الكويت", - "But you have a negative salary of": "لكن لديك راتب سالب من", - "Promo Code": "الرمز الترويجي", - "Your trip distance is": "مسافة رحلتك هي", - "Enter promo code": "أدخِل الرمز الترويجي", - "You have promo!": "لديك عرض ترويجي!", - "Cost Duration": "مدة التكلفة", - "Duration is": "المدة هي", - "Leave": "اترك", + "إذا بدك مساعدة أو عندك سؤال، هون المكان المناسب. أهلاً وسهلاً!", + "If you need any help or have questions, this is the right place to do that. You are welcome!": + "إذا كنت بحاجة لأي مساعدة أو عندك أسئلة، هون المكان المناسب. أهلاً وسهلاً!", + "If you need assistance, contact us": "إذا بدك مساعدة، تواصل معنا", + "If you want add stop click here": "إذا بدك تضيف محطة اضغط هون", + "If you want order to another person": "إذا بدك تطلب لشخص تاني", + "If you want to make Google Map App run directly when you apply order": + "إذا بدك تطبيق خرائط جوجل يشتغل مباشرة وقت تقدم الطلب", + "If your car license has the new design, upload the front side with two images.": + "إذا رخصة سيارتك عليها التصميم الجديد، ارفع الوجه الأمامي بصورتين.", + "Image Upload Failed": "فشل رفع الصورة", + "Image detecting result is": "نتيجة كشف الصورة هي", + "In-App VOIP Calls": "مكالمات صوتية جوا التطبيق", + "Including Tax": "شامل الضريبة", + "Incorrect sms code": "كود SMS غلط", + "Increase Fare": "زيادة الأجرة", + "Increase Fee": "زيادة الرسوم", + "Increase Your Trip Fee (Optional)": "زيد رسوم رحلتك (اختياري)", + "Increasing the fare might attract more drivers. Would you like to increase the price?": + "زيادة الأجرة ممكن تجذب سواقين أكثر. بدك ترفع السعر؟", + "Industrial Development Bank": "بنك التنمية الصناعية", + "Ineligible for Offer": "غير مؤهل للعرض", + "Info": "معلومات", + "Insert": "إدخال", + "Insert Account Bank": "أدخل الحساب البنكي", + "Insert Card Bank Details to Receive Your Visa Money Weekly": + "أدخل تفاصيل البطاقة البنكية عشان تستلم فلوسك أسبوعياً", + "Insert Emergency Number": "أدخل رقم الطوارئ", + "Insert Emergincy Number": "أدخل رقم الطوارئ", + "Insert Payment Details": "أدخل تفاصيل الدفع", + "Insert SOS Phone": "أدخل رقم طوارئ", + "Insert Wallet phone number": "أدخل رقم هاتف المحفظة", + "Insert Your Promo Code": "أدخل كود الخصم بتاعك", + "Insert card number": "أدخل رقم البطاقة", + "Insert mobile wallet number": "أدخل رقم محفظة الجوال", + "Insert your mobile wallet details to receive your money weekly": + "أدخل تفاصيل محفظة الجوال عشان تستلم فلوسك أسبوعياً", + "Inspection Date": "تاريخ الفحص", + "InspectionResult": "نتيجة الفحص", + "Install our app:": "ثبّت تطبيقنا:", + "Intaleq": "انطلق", + "Intaleq Balance": "رصيد انطلق", + "Intaleq DRIVER CODE": "كود سائق انطلق", + "Intaleq Driver": "سائق انطلق", + "Intaleq LLC": "شركة انطلق", + "Intaleq Order": "طلب انطلق", + "Intaleq Over": "انطلق انتهى", + "Intaleq Reminder": "تذكير انطلق", + "Intaleq Wallet Features:": "ميزات محفظة انطلق:", + "Intaleq is a ride-sharing app designed with your safety and affordability in mind. We connect you with reliable drivers in your area, ensuring a convenient and stress-free travel experience.\nHere are some of the key features that set us apart:": + "انطلق تطبيق مشاركة رحلات مصمم لسلامتك وتوفير فلوسك. بنربطك بسواقين موثوقين بمنطقتك...", + "Intaleq is committed to safety, and all of our captains are carefully screened and background checked.": + "انطلق ملتزم بالسلامة، وكل سواقينا بتم فحصهم بدقة.", + "Intaleq is the first ride-sharing app in Syria, designed to connect you with the nearest drivers for a quick and convenient travel experience.": + "انطلق أول تطبيق مشاركة رحلات بسوريا، مصمم يربطك بأقرب السواقين لرحلة سريعة ومريحة.", + "Intaleq is the ride-hailing app that is safe, reliable, and accessible.": + "انطلق تطبيق نقل آمن وموثوق ومتاح للجميع.", + "Intaleq is the safest and most reliable ride-sharing app designed especially for passengers in Syria. We provide a comfortable, respectful, and affordable riding experience with features that prioritize your safety and convenience. Our trusted captains are verified, insured, and supported by regular car maintenance carried out by top engineers. We also offer on-road support services to make sure every trip is smooth and worry-free. With Intaleq, you enjoy quality, safety, and peace of mind—every time you ride.": + "انطلق هو تطبيق مشاركة الرحلات الآمن والأكثر موثوقية المصمم خصيصاً للركاب بسوريا. بنقدملك تجربة رحلة مريحة، محترمة، وبأسعار مناسبة، مع ميزات بتعطي أولوية لسلامتك وراحتك. سواقينا الموثوقين موثقين ومؤمنين، وبيدعمهم صيانة دورية من مهندسين محترفين. كمان بنقدم خدمات دعم على الطريق عشان نضمنلك رحلة سلسة ومن دون هموم. مع انطلق، بتستمتع بالجودة، السلامة، وراحة البال—بكل رحلة.", + "Intaleq is the safest ride-sharing app that introduces many features for both captains and passengers. We offer the lowest commission rate of just 8%, ensuring you get the best value for your rides. Our app includes insurance for the best captains, regular maintenance of cars with top engineers, and on-road services to ensure a respectful and high-quality experience for all users.": + "انطلق هو تطبيق مشاركة الرحلات الآمن اللي بقدّم ميزات كتير للسواقين والركاب. بنقدّم أقل عمولة بس 8% عشان تاخد أحسن قيمة لرحلاتك...", + "Intaleq offers a variety of options including Economy, Comfort, and Luxury to suit your needs and budget.": + "انطلق بيقدم خيارات متنوعة منها اقتصادي، مريح، وفاخر لتناسب احتياجاتك وميزانيتك.", + "Intaleq offers a variety of vehicle options to suit your needs, including economy, comfort, and luxury. Choose the option that best fits your budget and passenger count.": + "انطلق بيقدم خيارات سيارات متنوعة تناسب احتياجاتك، منها الاقتصادي، المريح، والفاخر. اختر اللي بيناسب ميزانيتك وعدد الركاب.", + "Intaleq offers multiple payment methods for your convenience. Choose between cash payment or credit/debit card payment during ride confirmation.": + "انطلق بيقدم طرق دفع متعددة لراحتك. اختر بين الدفع كاش أو ببطاقة ائتمان/خصم وقت تأكيد الرحلة.", + "Intaleq offers various safety features including driver verification, in-app trip tracking, emergency contact options, and the ability to share your trip status with trusted contacts.": + "انطلق بيقدم ميزات سلامة متعددة منها التحقق من السائق، تتبع الرحلة جوا التطبيق، خيارات اتصال الطوارئ، وإمكانية مشاركة حالة رحلتك مع جهات موثوقة.", + "Intaleq prioritizes your safety. We offer features like driver verification, in-app trip tracking, and emergency contact options.": + "انطلق بيعطي أولوية لسلامتك. بنقدم ميزات مثل التحقق من السائق، تتبع الرحلة جوا التطبيق، وخيارات اتصال الطوارئ.", + "Intaleq provides in-app chat functionality to allow you to communicate with your driver or passenger during your ride.": + "انطلق بوفر دردشة جوا التطبيق عشان تتواصل مع السائق أو الراكب وقت الرحلة.", + "Intaleq123": "Intaleq123", + "Intaleq: For fixed salary and endpoints.": + "انطلق: للراتب الثابت والمحطات النهائية.", + "Invalid MPIN": "رمز MPIN غير صالح", + "Invalid OTP": "رمز OTP غير صالح", + "Invalid customer MSISDN": "رقم هاتف العميل غير صالح", + "Invitation Used": "تم استخدام الدعوة", + "Invite": "ادعوا", + "Invite a Driver": "ادعوا سائق", + "Invite another driver and both get a gift after he completes 100 trips!": + "ادعوا سائق تاني وكلكم بتاخدوا هدية بعد ما يكمل 100 رحلة!", + "Invite code already used": "كود الدعوة مستخدم من قبل", + "Invite sent successfully": "تم إرسال الدعوة بنجاح", + "Is device compatible": "الجهاز متوافق", + "Is the Passenger in your Car ?": "الراكب بسيارتك؟", + "Is the Passenger in your Car?": "الراكب بسيارتك؟", + "Issue Date": "تاريخ الإصدار", + "IssueDate": "تاريخ الإصدار", + "JOD": "د.أ", "Join": "انضم", - "You Should be select reason.": "يجب عليك اختيار السبب.", - "\$": "\$", - "Waiting for Driver ...": "في انتظار الشريك السائق ...", - "Latest Recent Trip": "أحدث مشوار", - "from your list": "من قائمتك", - "Do you want to change Work location": "هل ترغب في تغيير موقع العمل؟", - "Do you want to change Home location": "هل ترغب في تغيير موقع المنزل", - "We Are Sorry That we dont have cars in your Location!": - "نحن نأسف لعدم توفر السيارات في موقعك!", - "Choose from Map": "اختر من الخريطة", - "Pick your ride location on the map - Tap to confirm": - "اختر موقع ركوبك على الخريطة - اضغط لتأكيد", - "To Work": "للعمل", "welcome_to_intaleq": "أهلاً بك في انطلق", - "welcome to intaleq": "أهلاً بك في انطلق", - "login or register subtitle": - "أدخل رقم هاتفك للدخول أو إنشاء حساب جديد", - "phone number label": "رقم الهاتف", - "phone number required": "يرجى إدخال رقم الهاتف", - "send otp button": "إرسال رمز التحقق", - "verify your number title": "التحقق من الرقم", - "otp sent subtitle": "تم إرسال رمز تحقق من 5 أرقام إلى\n@phoneNumber", - "verify and continue button": "تحقق ومتابعة", - "enter otp validation": "الرجاء إدخال رمز التحقق المكون من 5 أرقام", - "one last step title": "خطوة أخيرة", - "complete profile subtitle": "أكمل بياناتك الشخصية للبدء", - "first name label": "الاسم الأول", - "first name required": "يرجى إدخال الاسم الأول", - "last name label": "الاسم الأخير", - "last name required": "يرجى إدخال الاسم الأخير", - "email optional label": "البريد الإلكتروني (اختياري)", - "complete registration button": "إكمال التسجيل", - "otp sent success": "تم إرسال رمز التحقق إلى واتساب.", - "failed to send otp": "فشل إرسال الرمز.", - "server error try again": "حدث خطأ بالخادم، يرجى المحاولة لاحقاً.", - "an error occurred": "حدث خطأ غير متوقع: @error", - "otp verification failed": "رمز التحقق غير صحيح.", - "registration failed": "فشلت عملية التسجيل.", - "welcome user": "أهلاً بك، @firstName!", - 'Balance': 'الرصيد', - "Today's Promo": "عرض اليوم", - 'Credit': 'رصيد', 'Debit': 'خصم', - 'Transactions this week': 'المعاملات هذا الأسبوع', - 'Weekly Summary': 'ملخص أسبوعي', - 'Total Weekly Earnings': 'إجمالي الأرباح الأسبوعية', - 'No transactions this week': 'لا توجد معاملات هذا الأسبوع', - "Driver Balance": "رصيد السائق", - "The 30000 points equal 30000 S.P for you \nSo go and gain your money": - "الـ 30000 نقطة تساوي 30000 ل.س لك \nلذا اذهب واكسب أموالك", - "OK": "موافق", - "Your Application is Under Review": "طلبك قيد المراجعة", - "We have received your application to join us as a driver. Our team is currently reviewing it. Thank you for your patience.": - "لقد استلمنا طلبك للانضمام إلينا كسائق. يقوم فريقنا حاليًا بمراجعته. شكرًا لك على صبرك.", - "You Will Be Notified": "سيتم إشعارك قريباً", - "We will send you a notification as soon as your account is approved. You can safely close this page, and we'll let you know when the review is complete.": - "سنرسل لك إشعاراً فور الموافقة على حسابك. يمكنك إغلاق هذه الصفحة بأمان، وسنعلمك عند اكتمال المراجعة.", - "Refresh Status": "تحديث الحالة", - "Checking for updates...": "جاري التحقق من التحديثات...", - "Total Points is": "إجمالي النقاط هو", - "Charge your Account": "اشحن حسابك", - '''Types of Trips in Intaleq: - -- Comfort: For cars newer than 2017 with air conditioning. -- Lady: For girl drivers. -- Speed: For fixed salary and endpoints. -- Mashwari: For flexible trips where passengers choose the car and driver with prior arrangements. -- Raih Gai: For same-day return trips longer than 50km.''': - "أنواع الرحلات في انطلق:\n\n- مريح: للسيارات الأحدث من 2017 مع تكييف الهواء.\n- سيدة: للسائقات الإناث.\n- سرعة: لرحلات ذات راتب ثابت ونقاط نهاية محددة.\n- مشاوير: لرحلات مرنة حيث يختار الركاب السيارة والسائق مع ترتيبات مسبقة.\n- رايح جاي: لرحلات العودة في نفس اليوم لأكثر من 50 كم.", - 'L.S': 'ل.س', - "Total Amount:": "المبلغ الإجمالي:", - "Intaleq Wallet": "رصيد انطلق", - "Current Balance": "الرصيد الحالي", - "SYP": "ل.س.", - "Your total balance:": "رصيدك الإجمالي:", + "Join Intaleq as a driver using my referral code!": + "انضم لسواقة انطلق بكود الدعوة بتاعي!", + "Jordan": "الأردن", + "Keep it up!": "كمل بهالحماس!", + "Kuwait": "الكويت", + "L.E": "ل.م", + "L.S": "ل.س", + "LE": "ل.م", + "Lady": "سائقة بنات", + "Lady Captain for girls": "كابتن بنات للبنات", + "Lady Captains Available": "سواقة بنات متاحين", + "Lady 👩": "سائقة بنات 👩", + "Lady: For girl drivers.": "سائقة بنات: للرحلات النسائية.", + "Language": "اللغة", + "Language Options": "خيارات اللغة", + "Last 10 Trips": "آخر 10 رحلات", + "Last Name": "اسم العائلة", + "Last name": "اسم العائلة", + "Later": "لاحقاً", + "Latest Recent Trip": "أحدث رحلة", + "Learn more about our app and mission": + "تعرف أكثر عن تطبيقنا ورسالتنا", + "Leave": "مغادرة", + "Leave a detailed comment (Optional)": "اترك تعليق مفصل (اختياري)", + "Lets check Car license": "يلا نفحص رخصة السيارة", + "Lets check License Back Face": "يلا نفحص الوجه الخلفي للرخصة", + "License Categories": "فئات الرخصة", + "License Expiry Date": "تاريخ انتهاء الرخصة", + "License Type": "نوع الرخصة", + "Link a phone number for transfers": "اربط رقم هاتف للتحويلات", + "Location Access Required": "مطلوب الوصول للموقع", + "Location Link": "رابط الموقع", + "Location Tracking Active": "تتبع الموقع مفعل", + "Log Off": "تسجيل خروج", + "Log Out Page": "صفحة تسجيل الخروج", + "Login": "تسجيل الدخول", + "Login Captin": "تسجيل دخول الكابتن", + "Login Driver": "تسجيل دخول السائق", + "Logout": "تسجيل خروج", + "Lowest Price Achieved": "تم تحقيق أدنى سعر", + "MIDBANK": "بنك ميد", + "Made :": "صنع :", + "Maintenance Center": "مركز الصيانة", + "Maintenance Offer": "عرض صيانة", + "Make": "الماركة", + "Make a U-turn": "اعمل دورّة", + "Make is": "الماركة هي", + "Make purchases.": "ادفع واشتري.", + "Male": "ذكر", + "Map Dark Mode": "الوضع الليلي للخريطة", + "Map Passenger": "خريطة الراكب", + "Marital Status": "الحالة الاجتماعية", + "Mashreq Bank": "بنك المشرق", + "Mashwari": "مشاري", + "Mashwari: For flexible trips where passengers choose the car and driver with prior arrangements.": + "مشاري: للرحلات المرنة اللي بيختار فيها الراكب السيارة والسائق بترتيب مسبق.", + "Max Speed": "أقصى سرعة", + "Maximum fare": "أقصى أجرة", + "Message": "رسالة", + "Meter Fare": "أجرة العداد", + "Minimum fare": "أدنى أجرة", + "Minute": "دقيقة", + "Mishwar Vip": "مشوار VIP", + "Missing Documents": "وثائق ناقصة", + "Model": "الموديل", + "Model is": "الموديل هو", + "More": "المزيد", + "Morning": "الصباح", + "Morning Promo": "عرض الصباح", + "Morning Promo Rides": "رحلات عرض الصباح", + "Most Secure Methods": "أكثر الطرق أماناً", + "Motorcycle": "موتوسيكل", + "Move the map to adjust the pin": "حرّك الخريطة عشان تعدّل الدبوس", + "My Balance": "رصيدي", + "My Card": "بطاقتي", + "My Cared": "بطاقتي", + "My Cars": "سياراتي", + "My Location": "موقعي", + "My Profile": "ملفي الشخصي", + "My Wallet": "محفظتي", + "My current location is:": "موقعي الحالي هو:", + "My location is correct. You can search for me using the navigation app": + "موقعي صحيح. تقدر تبحث عليي بتطبيق الملاحة", + "MyLocation": "موقعي", + "N/A": "غير متاح", + "NEXT >>": "التالي >>", + "NEXT STEP": "الخطوة التالية", + "Name": "الاسم", + "Name (Arabic)": "الاسم (عربي)", + "Name (English)": "الاسم (إنجليزي)", + "Name :": "الاسم :", + "Name in arabic": "الاسم بالعربي", + "Name must be at least 2 characters": + "الاسم لازم يكون حرفين على الأقل", + "Name of the Passenger is": "اسم الراكب هو", + "Nasser Social Bank": "بنك ناصر الاجتماعي", + "National Bank of Egypt": "البنك الأهلي المصري", + "National Bank of Greece": "البنك الوطني اليوناني", + "National Bank of Kuwait – Egypt": "البنك الوطني الكويتي – مصر", + "National ID": "الهوية الشخصية", + "National ID Number": "رقم الهوية الشخصية", + "National ID must be 11 digits": "رقم الهوية لازم يكون 11 رقم", + "National Number": "الرقم القومي", + "NationalID": "الهوية الشخصية", + "Navigation": "الملاحة", + "Nearest Car": "أقرب سيارة", + "Nearest Car for you about": "أقرب سيارة لك بعد حوالي", + "Nearest Car: ~": "أقرب سيارة: ~", + "Need assistance? Contact us": "بدك مساعدة؟ تواصل معنا", + "Need help? Contact Us": "بدك مساعدة؟ تواصل معنا", + "Next": "التالي", + "Night": "الليل", + "No": "لأ", + "No ,still Waiting.": "لأ، لسا عم نستنى.", + "No Captain Accepted Your Order": "ما في كابتن قبل طلبك", + "No Car in your site. Sorry!": "ما في سيارة بموقعك. آسفين!", + "No Car or Driver Found in your area.": + "ما لقينا سيارة أو سائق بمنطقتك.", + "No I want": "لأ، أنا بدّي", + "No Promo for today .": "ما في عروض بهاليوم.", + "No Response yet.": "ما في رد لسا.", + "No Rides Available": "ما في رحلات متاحة", + "No Rides Yet": "ما في رحلات لسا", + "No SIM card, no problem! Call your driver directly through our app. We use advanced technology to ensure your privacy.": + "ما عندك شريحة، ما في مشكلة! اتصل بسائقك مباشرة عبر التطبيق. بنستخدم تكنولوجيا متطورة عشان نضمن خصوصيتك.", + "No accepted orders? Try raising your trip fee to attract riders.": + "ما في طلبات منقبولة؟ جرّب ترفع رسوم رحلتك عشان تجذب ركاب.", + "No audio files found.": "ما لقينا ملفات صوتية.", + "No audio files recorded.": "ما في ملفات صوتية مسجلة.", + "No cars are available at the moment. Please try again later.": + "ما في سيارات متاحة هلق. تفضل جرّب مرة تانية لاحقاً.", + "No cars nearby": "ما في سيارات قريبة", + "No contact selected": "ما في جهة اتصال مختارة", + "No contacts found": "ما لقينا جهات اتصال", + "No contacts with phone numbers found": + "ما لقينا جهات اتصال بأرقام هواتف", + "No contacts with phone numbers were found on your device.": + "ما لقينا جهات اتصال بأرقام هواتف بجهازك.", + "No data yet": "ما في بيانات لسا", + "No data yet!": "ما في بيانات لسا!", + "No driver accepted my request": "ما في سائق قبل طلبي", + "No drivers accepted your request yet": "ما في سائقين قبلوا طلبك لسا", + "No drivers available": "ما في سائقين متاحين", + "No drivers available at the moment. Please try again later.": + "ما في سائقين متاحين هلق. تفضل جرّب مرة تانية لاحقاً.", + "No face detected": "ما في وجه مكتشف", + "No favorite places yet!": "ما في أماكن مفضلة لسا!", + "No i want": "لأ، أنا بدّي", + "No image selected yet": "ما في صورة مختارة لسا", + "No invitation found": "ما لقينا دعوة", + "No invitation found yet!": "ما لقينا دعوة لسا!", + "No one accepted? Try increasing the fare.": + "ما في حدا قبل؟ جرّب ترفع الأجرة.", + "No orders available": "ما في طلبات متاحة", + "No passenger found for the given phone number": + "ما لقينا راكب بهالرقم", + "No phone number": "ما في رقم هاتف", + "No promos available right now.": "ما في عروض ترويجية هلق.", + "No questions asked yet.": "ما في أسئلة لسا.", + "No ride found yet": "ما لقينا رحلة لسا", + "No ride yet": "ما في رحلة لسا", + "No rides available for your vehicle type.": + "ما في رحلات متاحة لنوع سيارتك.", + "No rides available right now.": "ما في رحلات متاحة هلق.", + "No transactions this week": "ما في معاملات بهالأسبوع", + "No transactions yet": "ما في معاملات لسا", + "No trip data available": "ما في بيانات رحلة متاحة", + "No trip history found": "ما لقينا سجل رحلات", + "No trip yet found": "ما لقينا رحلة لسا", + "No user found for the given phone number": "ما لقينا مستخدم بهالرقم", + "No wallet record found": "ما لقينا سجل محفظة", + "No, I want to cancel this trip": "لأ، بدّي ألغي هالرحلة", + "No, still Waiting.": "لأ، لسا عم نستنى.", + "No, thanks": "لأ، شكراً", + "No,I want": "لأ، أنا بدّي", + "Non Egypt": "غير مصر", + "Not Connected": "غير متصل", + "Not set": "غير محدد", + "Not updated": "ما انحدث", + "Notifications": "الإشعارات", + "Now select start pick": "هلق اختر نقطة البداية", + "OK": "تمام", + "Occupation": "المهنة", + "Offline": "غير متصل", + "Ok": "تمام", + "Ok , See you Tomorrow": "تمام، نشوفك بكرة", + "Ok I will go now.": "تمام، رحروح هلق.", + "Old and affordable, perfect for budget rides.": + "قديمة ومناسبة للسعر، مثالية لرحلات الميزانية المحدودة.", + "Online": "متصل", + "Only Syrian phone numbers are allowed": + "مسموح بس بأرقام الهواتف السورية", + "Open App": "افتح التطبيق", + "Open Settings": "افتح الإعدادات", + "Open app and go to passenger": "افتح التطبيق وروح للراكب", + "Open in Maps": "افتح بالخرائط", + "Open the app to stay updated and ready for upcoming tasks.": + "افتح التطبيق عشان تظل محدّث وجاهز للمهام الجاية.", + "Opted out": "تم إلغاء الاشتراك", + "Or": "أو", + "Or pay with Cash instead": "أو ادفع كاش بدل هيك", + "Order": "طلب", + "Order Accepted": "تم قبول الطلب", + "Order Accepted by another driver": "طلبك انقبل من سائق تاني", + "Order Applied": "تم تطبيق الطلب", + "Order Cancelled": "تم إلغاء الطلب", + "Order Cancelled by Passenger": "تم إلغاء الطلب من الراكب", + "Order Details Intaleq": "تفاصيل الطلب انطلق", + "Order History": "سجل الطلبات", + "Order ID": "رقم الطلب", + "Order Request Page": "صفحة طلب الرحلة", + "Order Under Review": "الطلب قيد المراجعة", + "Order for myself": "طلب لحالي", + "Order for someone else": "طلب لغيري", + "OrderId": "رقم الطلب", + "OrderVIP": "طلب VIP", + "Orders Page": "صفحة الطلبات", + "Origin": "نقطة البداية", + "Original Fare": "الأجرة الأصلية", + "Other": "أخرى", + "Our dedicated customer service team ensures swift resolution of any issues.": + "فريق خدمة العملاء المتخصص عندنا بيضمن حل سريع لأي مشكلة.", + "Overall Behavior Score": "درجة السلوك العامة", + "Overlay": "العرض العلوي", + "Owner Name": "اسم المالك", + "Passenger": "الراكب", + "Passenger & Status": "الراكب والحالة", + "Passenger Cancel Trip": "الراكب ألغى الرحلة", + "Passenger Information": "معلومات الراكب", + "Passenger Name": "اسم الراكب", + "Passenger Name is": "اسم الراكب هو", + "Passenger cancel trip": "الراكب ألغى الرحلة", + "Passenger cancelled order": "الراكب ألغى الطلب", + "Passenger cancelled the ride.": "الراكب ألغى الرحلة.", + "Passenger come to you": "الراكب قادم إليك", + "Passenger name :": "اسم الراكب :", + "Passenger name:": "اسم الراكب:", + "Passenger paid amount": "المبلغ اللي دفعه الراكب", + "Passengers": "الركاب", + "Password": "كلمة المرور", + "Password must be at least 6 characters": + "كلمة المرور لازم تكون 6 أحرف على الأقل", + "Password must be at least 6 characters.": + "كلمة المرور لازم تكون 6 أحرف على الأقل.", + "Password must br at least 6 character.": + "كلمة المرور لازم تكون 6 أحرف على الأقل.", + "Paste WhatsApp location link": "الصق رابط موقع الواتساب", + "Paste location link here": "الصق رابط الموقع هون", + "Paste the code here": "الصق الكود هون", + "Pay": "ادفع", + "Pay by MTN Wallet": "الدفع عبر محفظة MTN", + "Pay by Sham Cash": "الدفع عبر شام كاش", + "Pay by Syriatel Wallet": "الدفع عبر محفظة سيريتل", + "Pay directly to the captain": "ادفع مباشرة للكابتن", + "Pay from my budget": "ادفع من ميزانيتي", + "Pay remaining to Wallet?": "بدك تدفع الباقي للمحفظة؟", + "Pay with Credit Card": "ادفع ببطاقة ائتمان", + "Pay with Debit Card": "ادفع ببطاقة خصم", + "Pay with Wallet": "ادفع من المحفظة", + "Pay with Your": "ادفع بـ", + "Pay with Your PayPal": "ادفع بباي بال", + "Payment Failed": "فشل الدفع", + "Payment History": "سجل المدفوعات", + "Payment Method": "طريقة الدفع", "Payment Method:": "طريقة الدفع:", - "e.g., 0912345678": "مثال: 0912345678", - + "Payment Options": "خيارات الدفع", + "Payment Successful": "تم الدفع بنجاح", + "Payment Successful!": "تم الدفع بنجاح!", + "Payment details added successfully": "تمت إضافة تفاصيل الدفع بنجاح", + "Payments": "المدفوعات", + "Percent Canceled": "نسبة الإلغاء", + "Percent Completed": "نسبة الإنجاز", + "Percent Rejected": "نسبة الرفض", + "Perfect for adventure seekers who want to experience something new and exciting": + "مثالية لمحبي المغامرة اللي بدّهم يجربوا شي جديد ومثير", + "Perfect for passengers seeking the latest car models with the freedom to choose any route they desire": + "مثالية للركاب اللي بيدوروا على أحدث موديلات السيارات مع حرية اختيار أي طريق بدّهم", + "Permission denied": "تم رفض الصلاحية", + "Personal Information": "المعلومات الشخصية", + "Petrol": "بنزين", + "Phone": "رقم الهاتف", + "Phone Check": "فحص الهاتف", + "Phone Number": "رقم الهاتف", + "Phone Number Check": "فحص رقم الهاتف", + "Phone Number is": "رقم الهاتف هو", + "Phone Number is not Egypt phone": "رقم الهاتف مش مصري", + "Phone Number wrong": "رقم الهاتف غلط", + "Phone Wallet Saved Successfully": "تم حفظ رقم المحفظة بنجاح", + "Phone number is already verified": "رقم الهاتف موثق من قبل", + "Phone number is verified before": "رقم الهاتف موثق من قبل", + "Phone number must be exactly 11 digits long": + "رقم الهاتف لازم يكون بالضبط 11 رقم", + "Phone number must be valid.": "رقم الهاتف لازم يكون صحيح.", + "Phone number seems too short": "يبدو أن رقم الهاتف قصير جداً", + "Pick from map": "اختر من الخريطة", + "Pick from map destination": "اختر الوجهة من الخريطة", + "Pick or Tap to confirm": "اختر أو اضغط للتأكيد", + "Pick your destination from Map": "اختر وجهتك من الخريطة", + "Pick your ride location on the map - Tap to confirm": + "اختر موقع رحلتك على الخريطة - اضغط للتأكيد", + "Plate": "اللوحة", + "Plate Number": "رقم اللوحة", + "Please Try anther time": "تفضل جرّب مرة تانية", + "Please Wait If passenger want To Cancel!": + "تفضل استنى إذا بد الراكب يلغي!", + "Please allow location access at all times to receive ride requests and ensure smooth service.": + "تفضل اسمح بالوصول للموقع دايماً عشان تستلم طلبات الرحلات وتضمن خدمة سلسة.", + "Please check back later for available rides.": + "تفضل رجع لاحقاً للرحلات المتاحة.", + "Please complete more distance before ending.": + "تفضل كمّل شوية مسافة قبل ما تنهي.", + "Please describe your issue before submitting.": + "تفضل صف مشكلتك قبل ما ترسل.", + "Please enter": "تفضل أدخل", + "Please enter Your Email.": "تفضل أدخل بريدك الإلكتروني.", + "Please enter Your Password.": "تفضل أدخل كلمة المرور.", + "Please enter a correct phone": "تفضل أدخل رقم هاتف صحيح", + "Please enter a description of the issue.": "تفضل أدخل وصف للمشكلة.", + "Please enter a health insurance status.": + "تفضل أدخل حالة التأمين الصحي.", + "Please enter a phone number": "تفضل أدخل رقم هاتف", + "Please enter a valid 16-digit card number": + "تفضل أدخل رقم بطاقة صالح من 16 رقم", + "Please enter a valid card 16-digit number.": + "تفضل أدخل رقم بطاقة صالح من 16 رقم.", + "Please enter a valid email": "الرجاء إدخال بريد إلكتروني صالح", + "Please enter a valid email.": "تفضل أدخل بريد إلكتروني صحيح.", + "Please enter a valid insurance provider": + "الرجاء إدخال مزود تأمين صالح", + "Please enter a valid phone number.": "تفضل أدخل رقم هاتف صحيح.", + "Please enter a valid promo code": "تفضل أدخل كود خصم صالح", + "Please enter the CVV code": "تفضل أدخل رمز CVV", + "Please enter the cardholder name": "تفضل أدخل اسم حامل البطاقة", + "Please enter the complete 6-digit code.": + "تفضل أدخل الكود المكون من 6 أرقام كاملاً.", + "Please enter the emergency number.": "تفضل أدخل رقم الطوارئ.", + "Please enter the expiry date": "تفضل أدخل تاريخ الانتهاء", + "Please enter the number without the leading 0": + "يرجى إدخال الرقم بدون الصفر الأولي", + "Please enter your City.": "تفضل أدخل مدينتك.", + "Please enter your Email.": "تفضل أدخل بريدك الإلكتروني.", + "Please enter your Password.": "تفضل أدخل كلمة المرور.", + "Please enter your Question.": "تفضل أدخل سؤالك.", + "Please enter your complaint.": "تفضل أدخل شكواك.", + "Please enter your feedback.": "تفضل أدخل تعليقك.", + "Please enter your first name.": "تفضل أدخل اسمك الأول.", + "Please enter your last name.": "تفضل أدخل اسم عائلتك.", + "Please enter your phone number": "يرجى إدخال رقم هاتفك", + "Please enter your phone number.": "تفضل أدخل رقم هاتفك.", + "Please enter your question": "تفضل أدخل سؤالك", + "Please go closer to the passenger location (less than 150m)": + "تفضل قرب من موقع الراكب (أقل من 150 متر)", + "Please go to Car Driver": "يرجى الذهاب إلى سائق السيارة", + "Please go to Car now": "تفضل روح للسيارة هلق", + "Please go to the pickup location exactly": + "يرجى الذهاب إلى موقع الالتقاط بالضبط", + "Please help! Contact me as soon as possible.": + "من فضلك ساعدني! اتصل بي بأسرع وقت ممكن.", + "Please make sure not to leave any personal belongings in the car.": + "تفضل تأكد ما تترك أي حاجات شخصية بالسيارة.", + "Please make sure to read the license carefully.": + "تفضل تأكد تقرأ الرخصة بعناية.", + "Please make sure you have all your personal belongings and that any remaining fare, if applicable, has been added to your wallet before leaving. Thank you for choosing the Intaleq app": + "من فضلك تأكد إن معاك كل حاجاتك الشخصية وإن أي مبلغ متبقي، لو موجود، تم إضافته لمحفظتك قبل ما تمشي. شكرًا لاستخدامك تطبيق انطلق", + "Please provide details about any long-term diseases.": + "تفضل قدّم تفاصيل عن أي أمراض مزمنة.", + "Please put your licence in these border": "تفضل حط رخصتك بهالإطار", + "Please select a contact": "تفضل اختر جهة اتصال", + "Please select a date": "تفضل اختر تاريخ", + "Please select a rating before submitting.": + "تفضل اختر تقييم قبل ما ترسل.", + "Please stay on the picked point.": + "يرجى البقاء في نقطة الالتقاط المحددة.", + "Please tell us why you want to cancel.": "تفضل قلنا ليش بدك تلغي.", + "Please try again in a few moments": "تفضل جرّب مرة تانية بعد شوي", + "Please upload a clear photo of your face to be identified by passengers.": + "تفضل ارفع صورة واضحة لوجهك عشان الركاب يتعرفوا عليك.", + "Please upload all 4 required documents.": + "تفضل ارفع كل الـ4 وثائق المطلوبة.", + "Please upload this license.": "تفضل ارفع هالرخصة.", + "Please verify your identity": "تفضل وثّق هويتك", + "Please wait": "تفضل استنى", + "Please wait for the passenger to enter the car before starting the trip.": + "تفضل استنى لحتى يدخل الراكب السيارة قبل ما تبدأ الرحلة.", + "Please wait while we prepare your trip.": + "تفضل استنى شوي لحتى نجهّز رحلتك.", + "Point": "نقطة", + "Policy restriction on calls": "قيود سياسة على المكالمات", + "Potential security risks detected. The application may not function correctly.": + "تم اكتشاف مخاطر أمنية محتملة. التطبيق ممكن ما يشتغل بشكل صحيح.", + "Potential security risks detected. The application may not function correctly.": + "تم اكتشاف مخاطر أمنية محتملة. التطبيق ممكن ما يشتغل بشكل صحيح.", + "Potential security risks detected. The application will close in @seconds seconds.": + "تم اكتشاف مخاطر أمنية محتملة. التطبيق رح يقفل خلال @seconds ثانية.", + "Pre-booking": "حجز مسبق", + "Press here": "اضغط هون", + "Press to hear": "اضغط عشان تسمع", + "Price": "السعر", + "Price is": "السعر هو", + "Price of trip": "سعر الرحلة", + "Price:": "السعر:", + "Privacy Notice": "إشعار الخصوصية", + "Privacy Policy": "سياسة الخصوصية", + "Profile": "الملف الشخصي", + "Profile Photo Required": "مطلوب صورة شخصية", + "Promo": "عرض ترويجي", + "Promo Already Used": "تم استخدام العرض من قبل", + "Promo Code": "كود الخصم", + "Promo Code Accepted": "تم قبول كود الخصم", + "Promo Copied!": "تم نسخ الكود!", + "Promo End !": "انتهى العرض!", + "Promo Ended": "انتهى العرض", + "Promo code copied to clipboard!": "تم نسخ كود الخصم!", + "Promos": "العروض", + "Promos For Today": "عروض اليوم", + "Promos For today": "عروض اليوم", + "Pyament Cancelled .": "تم إلغاء الدفع.", + "Qatar": "قطر", + "Qatar National Bank Alahli": "البنك الأهلي القطري", + "Question": "سؤال", + "Quick Actions": "إجراءات سريعة", + "Quick Messages": "رسائل سريعة", + "Quiet & Eco-Friendly": "هادئ وصديق للبيئة", + "Raih Gai: For same-day return trips longer than 50km.": + "رايح جاي: لرحلات العودة بنفس اليوم أطول من 50 كم.", + "Rate": "تقييم", + "Rate Captain": "قيّم الكابتن", + "Rate Driver": "قيّم السائق", + "Rate Our App": "قيّم تطبيقنا", + "Rate Passenger": "قيّم الراكب", + "Rating is": "التقييم هو", + "Rating submitted successfully": "تم إرسال التقييم بنجاح", + "Rayeh Gai": "رايح جاي", + "Rayeh Gai: Round trip service for convenient travel between cities, easy and reliable.": + "رايح جاي: خدمة الذهاب والعودة لرحلات مريحة بين المدن، سهلة وموثوقة.", + "Reason": "السبب", + "Recent Places": "الأماكن الأخيرة", + "Recharge my Account": "اشحن حسابي", + "Record": "تسجيل", + "Record saved": "تم حفظ التسجيل", + "Recorded Trips (Voice & AI Analysis)": + "الرحلات المسجلة (صوت وتحليل ذكاء اصطناعي)", + "Recorded Trips for Safety": "رحلات مسجلة للسلامة", + "Refresh": "تحديث", + "Refresh Market": "تحديث السوق", + "Refresh Status": "تحديث الحالة", + "Refuse Order": "رفض الطلب", + "Register": "اشتراك جديد", + "Register Captin": "تسجيل الكابتن", + "Register Driver": "تسجيل السائق", + "Register as Driver": "سجل كسائق", + "Registration completed successfully!": "تم التسجيل بنجاح!", + "Registration failed. Please try again.": + "فشل التسجيل. تفضل جرّب مرة تانية.", + "Reject": "رفض", + "Rejected Orders": "الطلبات المرفوضة", + "Rejected Orders Count": "عدد الطلبات المرفوضة", + "Religion": "الدين", + "Remainder": "الباقي", + "Remaining time": "الوقت المتبقي", + "Report": "تقرير", + "Required field": "حقل مطلوب", + "Resend Code": "إعادة إرسال الكود", + "Resend code": "إعادة إرسال الكود", + "Ride History": "سجل الرحلات", + "Ride Management": "إدارة الرحلات", + "Ride Status": "حالة الرحلة", + "Ride Summaries": "ملخصات الرحلات", + "Ride Summary": "ملخص الرحلة", + "Ride Today :": "رحلات اليوم :", + "Ride Wallet": "محفظة الرحلة", + "Ride info": "معلومات الرحلة", + "Ride information not found. Please refresh the page.": + "ما لقينا معلومات الرحلة. تفضل حدّث الصفحة.", + "Rides": "الرحلات", + "Rouats of Trip": "محطات الرحلة", + "Route Not Found": "ما لقينا طريق", + "Routs of Trip": "محطات الرحلة", + "Run Google Maps directly": "شغّل خرائط جوجل مباشرة", + "S.P": "ل.س", + "SAFAR Wallet": "محفظة سفر", + "SOS": "طوارئ", + "SOS Phone": "هاتف الطوارئ", + "SUBMIT": "إرسال", + "SYP": "ل.س", + "Safety & Security": "السلامة والأمان", + "Saudi Arabia": "السعودية", + "Save": "حفظ", + "Save & Call": "حفظ واتصل", + "Save Credit Card": "حفظ بطاقة الائتمان", + "Saved Sucssefully": "تم الحفظ بنجاح", + "Scan Driver License": "امسح رخصة السائق", + "Scan ID Api": "امسح الهوية API", + "Scan ID MklGoogle": "امسح الهوية MklGoogle", + "Scan ID Tesseract": "امسح الهوية Tesseract", + "Scan Id": "امسح الهوية", + "Scheduled Time:": "الوقت المحدد:", + "Scooter": "سكوتر", + "Search country": "ابحث عن بلد", + "Search for a starting point": "ابحث عن نقطة بداية", + "Search for waypoint": "ابحث عن نقطة طريق", + "Search for your Start point": "ابحث عن نقطة البداية", + "Search for your destination": "ابحث عن وجهتك", + "Search name or number...": "ابحث باسم أو رقم...", + "Searching for the nearest captain...": "عم نبحث عن أقرب كابتن...", + "Security Warning": "تحذير أمني", + "See you Tomorrow!": "نشوفك بكرة!", + "See you on the road!": "نشوفك على الطريق!", + "Select Country": "اختر البلد", + "Select Date": "اختر التاريخ", + "Select Name of Your Bank": "اختر اسم بنكك", + "Select Order Type": "اختر نوع الطلب", + "Select Payment Amount": "اختر مبلغ الدفع", + "Select This Ride": "اختر هالرحلة", + "Select Time": "اختر الوقت", + "Select Waiting Hours": "اختر ساعات الانتظار", + "Select Your Country": "اختر بلدك", + "Select a Bank": "اختر بنك", + "Select a Contact": "اختر جهة اتصال", + "Select a File": "اختر ملف", + "Select a file": "اختر ملف", + "Select a quick message": "اختر رسالة سريعة", + "Select date and time of trip": "اختر تاريخ ووقت الرحلة", + "Select one message": "اختر رسالة وحدة", + "Select recorded trip": "اختر رحلة مسجلة", + "Select your destination": "اختر وجهتك", + "Select your preferred language for the app interface.": + "اختر اللغة اللي بتفضلها لواجهة التطبيق.", + "Selected Date": "التاريخ المختار", + "Selected Date and Time": "التاريخ والوقت المختار", + "Selected Time": "الوقت المختار", + "Selected driver": "السائق المختار", + "Selected file:": "الملف المختار:", + "Send Email": "أرسل بريد", + "Send Intaleq app to him": "أرسل تطبيق انطلق له", + "Send Invite": "أرسل دعوة", + "Send Message": "أرسل رسالة", + "Send Verfication Code": "أرسل رمز التحقق", + "Send Verification Code": "أرسل رمز التحقق", + "Send WhatsApp Message": "أرسل رسالة واتساب", + "Send a custom message": "أرسل رسالة مخصصة", + "Send to Driver Again": "أرسل للسائق مرة تانية", + "Server error. Please try again.": + "خطأ بالخادم. تفضل جرّب مرة تانية.", + "Session expired. Please log in again.": + "الجلسة انتهت. سجل دخول مرة تانية.", + "Set Location on Map": "حدد الموقع على الخريطة", + "Set Phone Number": "حدد رقم الهاتف", + "Set Wallet Phone Number": "حدد رقم هاتف المحفظة", + "Set pickup location": "حدد موقع الالتقاط", + "Setting": "إعداد", + "Settings": "الإعدادات", + "Sex is": "الجنس هو", + "ShamCash Account": "حساب شام كاش", + "Share": "مشاركة", + "Share App": "شارك التطبيق", + "Share Code": "شارك الكود", + "Share Trip Details": "شارك تفاصيل الرحلة", + "Share the app with another new driver": + "شارك التطبيق مع سائق جديد تاني", + "Share the app with another new passenger": + "شارك التطبيق مع راكب جديد تاني", + "Share this code with other drivers. Both of you will receive rewards!": + "شارك هالكود مع سواقين تانيين. كلكم رح تاخدوا مكافآت!", + "Share this code with passengers and earn rewards when they use it!": + "شارك هالكود مع ركاب واكسب مكافآت لما يستخدموه!", + "Share this code with your friends and earn rewards when they use it!": + "شارك هالكود مع صحابك واكسب مكافآت لما يستخدموه!", + "Share with friends and earn rewards": "شارك مع صحابك واكسب مكافآت", + "Share your experience to help us improve...": + "شارك تجربتك عشان تساعدنا نتحسّن...", + "Show Invitations": "عرض الدعوات", + "Show My Trip Count": "عرض عدد رحلاتي", + "Show Promos": "عرض العروض", + "Show Promos to Charge": "عرض العروض للشحن", + "Show behavior page": "عرض صفحة السلوك", + "Show health insurance providers near me": + "اعرض مزودي التأمين الصحي القريبين مني", + "Show latest promo": "عرض أحدث عرض ترويجي", + "Show maintenance center near my location": + "اعرض مراكز الصيانة القريبة مني", + "Show my Cars": "عرض سياراتي", + "Showing": "عرض", + "Sign In by Apple": "تسجيل الدخول بآبل", + "Sign In by Google": "تسجيل الدخول بجوجل", + "Sign In with Google": "تسجيل الدخول بجوجل", + "Sign Out": "تسجيل خروج", + "Sign in for a seamless experience": "سجل دخول لتجربة سلسة", + "Sign in to start your journey": "سجل الدخول لبدء رحلتك", + "Sign in with Apple": "تسجيل الدخول بآبل", + "Sign in with Google for easier email and name entry": + "سجل الدخول بجوجل لإدخال البريد والاسم بسهولة", + "Sign in with a provider for easy access": + "سجل الدخول عبر مزود للوصول بسهولة", + "Slide to End Trip": "اسحب عشان تنهي الرحلة", + "So go and gain your money": "يلا استلم فلوسك", + "Societe Arabe Internationale De Banque": + "المجتمع العربي الدولي للبنوك", + "Something went wrong. Please try again.": + "صار شي غلط. جرب مرة تانية.", + "Sorry": "آسف", + "Sorry, the order was taken by another driver.": + "آسف، الطلب أخذه سائق تاني.", + "Spacious van service ideal for families and groups. Comfortable, safe, and cost-effective travel together.": + "خدمة فان واسعة مثالية للعائلات والمجموعات. رحلة مريحة، آمنة، واقتصادية سوا.", + "Special Order": "طلب خاص", + "Speed": "السرعة", + "Speed Order": "طلب سريع", + "Speed 🔻": "سرعة 🔻", + "Start": "ابدأ", + "Start Record": "ابدأ التسجيل", + "Start Ride": "ابدأ الرحلة", + "Start Trip": "ابدأ الرحلة", + "Start Trip?": "ابدأ الرحلة؟", + "Start the Ride": "ابدأ الرحلة", + "Starting contacts sync in background...": + "عم نبدأ مزامنة جهات الاتصال بالخلفية...", + "Statistic": "إحصائية", + "Statistics": "الإحصائيات", + "Status": "الحالة", + "Status is": "الحالة هي", + "Stay": "ابقى", + "Step-by-step instructions on how to request a ride through the Intaleq app.": + "تعليمات خطوة بخطوة عشان تطلب رحلة عبر تطبيق انطلق.", + "Stop": "توقف", + "Store your money with us and receive it in your bank as a monthly salary.": + "خزّن فلوسك عنا واستلمها ببنكك كراتب شهري.", + "Submission Failed": "فشل الإرسال", + "Submit": "إرسال", + "Submit Complaint": "إرسال شكوى", + "Submit Question": "إرسال سؤال", + "Submit Rating": "إرسال تقييم", + "Submit Your Complaint": "أرسل شكواك", + "Submit Your Question": "أرسل سؤالك", + "Submit a Complaint": "قدّم شكوى", + "Submit rating": "أرسل تقييم", + "Success": "تم بنجاح", + "Suez Canal Bank": "بنك قناة السويس", + "Support": "الدعم", + "Support Reply": "رد الدعم", + "Swipe to End Trip": "اسحب عشان تنهي الرحلة", + "Switch Rider": "تبديل الراكب", + "Switch between light and dark map styles": + "بدّل بين أنماط الخريطة الفاتحة والداكنة", + "Switch between light and dark themes": + "بدّل بين السمات الفاتحة والداكنة", + "Syria": "سوريا", + "Take Image": "التقط صورة", + "Take Photo Now": "التقط صورة هلق", + "Take Picture Of Driver License Card": "التقط صورة لرخصة السائق", + "Take Picture Of ID Card": "التقط صورة لبطاقة الهوية", + "Tap on the promo code to copy it!": "اضغط على كود الخصم عشان تنسخه!", + "Tap to upload": "اضغط عشان ترفع", + "Target": "الهدف", + "Tariff": "التعريفة", + "Tariffs": "التعريفات", + "Tax Expiry Date": "تاريخ انتهاء الضريبة", + "Terms of Use": "شروط الاستخدام", + "Terms of Use & Privacy Notice": "شروط الاستخدام وإشعار الخصوصية", + "Thank You!": "شكراً كتير!", + "Thanks": "شكراً", + "The 300 points equal 300 L.E for you\nSo go and gain your money": + "الـ 300 نقطة بتساوي 300 ل.م لك\nيلا استلم فلوسك", + "The 30000 points equal 30000 S.P for you\nSo go and gain your money": + "الـ 30000 نقطة بتساوي 30000 ل.س لك\nيلا استلم فلوسك", + "The Amount is less than": "المبلغ أقل من", + "The Driver Will be in your location soon .": + "السائق رح يوصل لموقعك قريباً.", + "The United Bank": "البنك المتحد", + "The audio file is not uploaded yet.\nDo you want to submit without it?": + "الملف الصوتي ما انرفع لسا.\nبدك ترسل من دونه؟", + "The captain is responsible for the route.": + "الكابتن مسؤول عن الطريق.", + "The context does not provide any complaint details, so I cannot provide a solution to this issue. Please provide the necessary information, and I will be happy to assist you.": + "المعلومات ما بتعطي تفاصيل عن الشكوى، فما بقدر قدّم حل. تفضل قدّم المعلومات اللازمة، ورح أساعدك بكل سرور.", + "The distance less than 500 meter.": "المسافة أقل من 500 متر.", + "The driver accept your order for": "السائق قبل طلبك بـ", + "The driver accepted your order for": "السائق قبل طلبك بـ", + "The driver accepted your trip": "السائق قبل رحلتك", + "The driver canceled your ride.": "السائق ألغى رحلتك.", + "The driver is approaching.": "السائق عم يقرب.", + "The driver on your way": "السائق بطريقه لعندك", + "The driver waiting you in picked location .": + "السائق عم يستنياك بمكان الالتقاط.", + "The driver waitting you in picked location .": + "السائق عم يستنياك بمكان الالتقاط.", + "The drivers are reviewing your request": "السواقين عم يراجعوا طلبك", + "The email or phone number is already registered.": + "البريد أو رقم الهاتف مسجل من قبل.", + "The full name on your criminal record does not match the one on your driver’s license. Please verify and provide the correct documents.": + "الاسم الكامل بصحيفتك الجنائية ما بيتطابق مع رخصة السائق. تفضل تحقق وقدّم الوثائق الصحيحة.", + "The invitation was sent successfully": "تم إرسال الدعوة بنجاح", + "The national number on your driver’s license does not match the one on your ID document. Please verify and provide the correct documents.": + "الرقم القومي برخصة السائق ما بيتطابق مع الهوية. تفضل تحقق وقدّم الوثائق الصحيحة.", + "The order Accepted by another Driver": "تم قبول الطلب من سائق تاني", + "The order has been accepted by another driver.": + "تم قبول الطلب من سائق تاني.", + "The payment was approved.": "تمت الموافقة على الدفع.", + "The payment was not approved. Please try again.": + "ما انقبل الدفع. تفضل جرّب مرة تانية.", + "The period of this code is 1 hour": "مدة هالكود ساعة وحدة", + "The price may increase if the route changes.": + "السعر ممكن يزيد إذا تغيّر الطريق.", + "The price must be over than": "السعر لازم يكون أكثر من", + "The promotion period has ended.": "انتهت فترة العرض.", + "The reason is": "السبب هو", + "The selected contact does not have a phone number": + "جهة الاتصال المختارة ما فيها رقم هاتف", + "The trip has started! Feel free to contact emergency numbers, share your trip, or activate voice recording for the journey": + "بلشت الرحلة! تفضل اتصل بأرقام الطوارئ، شارك رحلتك، أو فعّل التسجيل الصوتي للرحلة", + "There is no data yet.": "ما في بيانات لسا.", + "There is no help Question here": "ما في أسئلة مساعدة هون", + "There is no notification yet": "ما في إشعارات لسا", + "There no Driver Aplly your order sorry for that": + "ما في سائق قدم على طلبك، آسفين علهيك", + "This Trip Cancelled": "تم إلغاء هالرحلة", + "This Trip Was Cancelled": "تم إلغاء هالرحلة", + "This amount for all trip I get from Passengers": + "هالمبلغ عن كل الرحلات اللي جبته من الركاب", + "This amount for all trip I get from Passengers and Collected For me in": + "هالمبلغ عن كل الرحلات اللي جبته من الركاب وتم جمعه لي بـ", + "This driver is not registered": "هالسائق مش مسجل", + "This for new registration": "هالتسجيل جديد", + "This is a scheduled notification.": "هإشعار مبرمج.", + "This is for delivery or a motorcycle.": "هالتوصيل أو للموتوسيكل.", + "This is for scooter or a motorcycle.": "هالسكوتر أو للموتوسيكل.", + "This is the total number of rejected orders per day after accepting the orders": + "هالعدد الكلي للطلبات المرفوضة باليوم بعد ما انقبلت", + "This page is only available for Android devices": + "هالصفحة متاحة بس لأجهزة أندرويد", + "This phone number has already been invited.": + "هالرقم انُدعِي من قبل.", + "This price is": "هالسعر هو", + "This price is fixed even if the route changes for the driver.": + "هالسعر ثابت حتى لو تغيّر الطريق للسائق.", + "This price may be changed": "هالسعر ممكن يتغير", + "This ride is already applied by another driver.": + "هالرحلة قدم عليها سائق تاني من قبل.", + "This ride is already taken by another driver.": + "هالرحلة أخدها سائق تاني من قبل.", + "This ride type allows changes, but the price may increase": + "هالنوع من الرحلات بيسمح بالتغييرات، بس السعر ممكن يزيد", + "This ride type does not allow changes to the destination or additional stops": + "هالنوع من الرحلات ما بيسمح بتغيير الوجهة أو إضافة محطات", + "This ride was just accepted by another driver.": + "هالرحلة انقبلت للتو من سائق تاني.", + "This service will be available soon.": "هالخدمة رح تتوفر قريباً.", + "This trip goes directly from your starting point to your destination for a fixed price. The driver must follow the planned route": + "هالرحلة بتروح مباشرة من نقطة البداية للوجهة بسعر ثابت. السائق لازم يتبع الطريق المخطط", + "This trip is for women only": "هالرحلة للنساء بس", + "This will delete all recorded files from your device.": + "هالشي رح يحذف كل الملفات المسجلة من جهازك.", + "Time": "الوقت", + "Time Finish is": "وقت الانتهاء هو", + "Time to Passenger": "الوقت للراكب", + "Time to Passenger is": "الوقت للراكب هو", + "Time to arrive": "وقت الوصول", + "TimeStart is": "وقت البدء هو", + "Times of Trip": "أوقات الرحلة", + "Tip is": "الإكرامية هي", + "To :": "إلى :", + "To Home": "للمنزل", + "To Work": "للعمل", + "To become a driver, you must review and agree to the": + "عشان تصير سائق، لازم تراجع وتوافق على", + "To become a passenger, you must review and agree to the": + "عشان تصير راكب، لازم تراجع وتوافق على", + "To change Language the App": "عشان تغير لغة التطبيق", + "To change some Settings": "عشان تغير بعض الإعدادات", + "To display orders instantly, please grant permission to draw over other apps.": + "عشان تعرض الطلبات فوراً، تفضل امنح صلاحية العرض فوق التطبيقات الأخرى.", + "To ensure you receive the most accurate information for your location, please select your country below. This will help tailor the app experience and content to your country.": + "عشان تاخد أدق معلومات لموقعك، تفضل اختر بلدك من تحت. هالشي رح يساعدنا نخصّص تجربة التطبيق ومحتواه لبلدك.", + "To get a gift for both": "عشان تاخد هدية للكل", + "To give you the best experience, we need to know where you are. Your location is used to find nearby captains and for pickups.": + "عشان نعطيك أحسن تجربة، لازم نعرف وينك موقعك. بنستخدم موقعك عشان نلاقي سواقين قريبين ولعملية الالتقاط.", + "To register as a driver or learn about the requirements, please visit our website or contact Intaleq support directly.": + "عشان تسجل كسائق أو تتعرف على المتطلبات، تفضل زور موقعنا أو تواصل مع دعم انطلق مباشرة.", + "To use Wallet charge it": "عشان تستخدم المحفظة اشحنها", + "Today": "اليوم", + "Top up Balance": "شحن الرصيد", + "Top up Balance to continue": "اشحن الرصيد عشان تكمل", + "Top up Wallet": "شحن المحفظة", + "Top up Wallet to continue": "اشحن المحفظة عشان تكمل", + "Total Amount:": "المبلغ الإجمالي:", + "Total Budget from trips by": "إجمالي الميزانية من الرحلات بـ", + "Total Budget from trips by\nCredit card is": + "إجمالي الميزانية من الرحلات بـ\nبطاقة الائتمان هي", + "Total Budget from trips is": "إجمالي الميزانية من الرحلات هو", + "Total Budget is": "إجمالي الميزانية هو", + "Total Connection": "إجمالي الاتصال", + "Total Connection Duration:": "إجمالي مدة الاتصال:", + "Total Cost": "التكلفة الإجمالية", + "Total Cost is": "التكلفة الإجمالية هي", + "Total Duration:": "إجمالي المدة:", + "Total Earnings": "إجمالي الأرباح", + "Total For You is": "الإجمالي لك هو", + "Total From Passenger is": "الإجمالي من الراكب هو", + "Total Hours on month": "إجمالي الساعات بالشهر", + "Total Invites": "إجمالي الدعوات", + "Total Net": "صافي الإجمالي", + "Total Orders": "إجمالي الطلبات", + "Total Points": "إجمالي النقاط", + "Total Points is": "إجمالي النقاط هو", + "Total Price": "السعر الإجمالي", + "Total Weekly Earnings": "إجمالي الأرباح الأسبوعية", + "Total budgets on month": "إجمالي الميزانيات بالشهر", + "Total is": "الإجمالي هو", + "Total points is": "إجمالي النقاط هو", + "Total price from": "السعر الإجمالي من", + "Total rides on month": "إجمالي الرحلات بالشهر", + "Total wallet is": "إجمالي المحفظة هو", + "Total weekly is": "إجمالي الأسبوعي هو", + "Transaction failed": "فشلت العملية", + "Transaction successful": "نجاح العملية", + "Transactions this week": "المعاملات بهالأسبوع", + "Transfer": "تحويل", + "Transfer budget": "تحويل الميزانية", + "Transfer money multiple times.": "حوّل فلوس كذا مرة.", + "Transfer to anyone.": "حوّل لأي واحد.", + "Travel in a modern, silent electric car. A premium, eco-friendly choice for a smooth ride.": + "سافر بسيارة كهربائية حديثة وهادئة. خيار فاخر وصديق للبيئة لرحلة سلسة.", + "Traveled": "تم السفر", + "Trip": "مشوار", + "Trip Cancelled": "انلغى المشوار", + "Trip Cancelled from driver. We are looking for a new driver. Please wait.": + "انلغى المشوار من السائق. عم نبحث عن سائق جديد. تفضل استنى.", + "Trip Cancelled. The cost of the trip will be added to your wallet.": + "تم إلغاء الرحلة. رح تتضاف تكلفة الرحلة لمحفظتك.", + "Trip Cancelled. The cost of the trip will be deducted from your wallet.": + "تم إلغاء الرحلة. رح تنخصم تكلفة الرحلة من محفظتك.", + "Trip Completed": "تمت الرحلة", + "Trip Detail": "تفاصيل الرحلة", + "Trip Details": "تفاصيل الرحلة", + "Trip Finished": "خلص المشوار", + "Trip ID": "رقم الرحلة", + "Trip Info": "معلومات الرحلة", + "Trip Monitor": "مراقب الرحلة", + "Trip Monitoring": "مراقبة الرحلة", + "Trip Started": "بلش المشوار", + "Trip Status:": "حالة الرحلة:", + "Trip Summary with": "ملخص الرحلة مع", + "Trip Timeline": "خط زمني للرحلة", + "Trip finished": "الرحلة خلصت", + "Trip has Steps": "الرحل فيها محطات", + "Trip is Begin": "بلشت الرحلة", + "Trip taken": "تم أخذ الرحلة", + "Trip updated successfully": "تم تحديث الرحلة بنجاح", + "Trips recorded": "تم تسجيل الرحلات", + "Turkey": "تركيا", + "Turn left": "انعطف يسار", + "Turn right": "انعطف يمين", + "Turn sharp left": "انعطف حاد يسار", + "Turn sharp right": "انعطف حاد يمين", + "Turn slight left": "انعطف خفيف يسار", + "Turn slight right": "انعطف خفيف يمين", + "Type Any thing": "اكتب أي شي", + "Type a message...": "اكتب رسالة...", + "Type here Place": "اكتب المكان هون", + "Type something": "اكتب شيئًا", + "Type something...": "اكتب شيئًا...", + "Type your Email": "اكتب بريدك الإلكتروني", + "Type your message": "اكتب رسالتك", + "Type your message...": "اكتب رسالتك...", + "Types of Trips in Intaleq:": "أنواع الرحلات بانطلاق:", + "USA": "أمريكا", + "Uncompromising Security": "أمان لا يتنازل عنه", + "Unknown": "غير معروف", + "Unknown Driver": "سائق غير معروف", + "Unknown Location": "موقع غير معروف", + "Update": "تحديث", + "Update Available": "في تحديث جديد", + "Update Education": "تحديث التعليم", + "Update Gender": "تحديث الجنس", + "Updated": "تم التحديث", + "Updated successfully": "تم التحديث بنجاح", + "Upload Documents": "ارفع المستندات", + "Upload or AI failed": "فشل الرفع أو الذكاء الاصطناعي", + "Uploaded": "تم الرفع", + "Use Touch ID or Face ID to confirm payment": + "استخدم بصمة اللمس أو الوجه لتأكيد الدفع", + "Use code:": "استخدم الكود:", + "Use my invitation code to get a special gift on your first ride!": + "استخدم كود الدعوة بتاعي عشان تاخد هدية خاصة بأول رحلة!", + "Use my referral code:": "استخدم كود الدعوة بتاعي:", + "Use this code in registration": "استخدم هالكود بالتسجيل", + "User does not exist.": "المستخدم مش موجود.", + "User does not have a wallet #1652": "المستخدم ما عندو محفظة #1652", + "User not found": "ما لقينا المستخدم", + "User not logged in": "المستخدم مسجل دخول", + "User with this phone number or email already exists.": + "مستخدم بهالرقم أو البريد موجود من قبل.", + "VIN": "رقم الهيكل", + "VIN :": "رقم الهيكل :", + "VIN is": "رقم الهيكل هو", + "VIP Order": "طلب VIP", + "VIP Order Accepted": "تم قبول طلب VIP", + "VIP Orders": "طلبات VIP", + "Valid Until:": "صالح حتى:", + "Value": "القيمة", + "Van": "فان", + "Van / Bus": "فان / باص", + "Van for familly": "فان للعائلات", + "Variety of Trip Choices": "تنوع خيارات الرحلات", + "Vehicle": "المركبة", + "Vehicle Category": "فئة المركبة", + "Vehicle Details": "تفاصيل المركبة", + "Vehicle Details Back": "تفاصيل المركبة (خلفي)", + "Vehicle Details Front": "تفاصيل المركبة (أمامي)", + "Vehicle Information": "معلومات المركبة", + "Vehicle Options": "خيارات المركبة", + "Verification Code": "رمز التحقق", + "Verify": "توثيق", + "Verify Email": "توثيق البريد", + "Verify Email For Driver": "توثيق البريد للسائق", + "Verify OTP": "توثيق OTP", + "Vibration": "اهتزاز", + "Vibration feedback for all buttons": + "تغذية راجعة بالاهتزاز لكل الأزرار", + "Vibration feedback for buttons": "تغذية راجعة بالاهتزاز للأزرار", + "Videos Tutorials": "فيديوهات تعليمية", + "View your past transactions": "شوف معاملاتك السابقة", + "Visa": "فيزا", + "Visit Website/Contact Support": "زور الموقع/تواصل مع الدعم", + "Visit our website or contact Intaleq support for information on driver registration and requirements.": + "زور موقعنا أو تواصل مع دعم انطلق لمعلومات عن تسجيل السائق والمتطلبات.", + "Voice Calling": "الاتصال الصوتي", + "Waiting": "بالانتظار", + "Waiting Time": "وقت الانتظار", + "Waiting VIP": "انتظار VIP", + "Waiting for Captin ...": "عم نستنى الكابتن...", + "Waiting for Driver ...": "عم نستنى السائق...", + "Waiting for your location": "عم نستنى موقعك", + "Wallet": "المحفظة", + "Wallet Add": "إضافة للمحفظة", + "Wallet Added": "تمت الإضافة للمحفظة", + "Wallet Added\${(remainingFee).toStringAsFixed(0)}": + "تمت الإضافة للمحفظة \${(remainingFee).toStringAsFixed(0)}", + "Wallet Type": "نوع المحفظة", + "Wallet is blocked": "المحفظة محظورة", + "Wallet!": "المحفظة!", + "Warning": "تحذير", + "Warning: Intaleqing detected!": "تحذير: تم كشف تجاوزات!", + "Warning: Speeding detected!": "تحذير: تم كشف سرعة زائدة!", + "We Are Sorry That we dont have cars in your Location!": + "آسفين ما عندنا سيارات بموقعك!", + "We are looking for a captain but the price may increase to let a captain accept": + "عم نبحث عن كابتن بس السعر ممكن يزيد عشان يقبل كابتن", + "We are process picture please wait": "عم نعالج الصورة تفضل استنى", + "We are search for nearst driver": "عم نبحث عن أقرب سائق", + "We are searching for the nearest driver": "عم نبحث عن أقرب سائق لك", + "We are searching for the nearest driver to you": + "عم نبحث عن أقرب سائق لك", + "We connect you with the nearest drivers for faster pickups and quicker journeys.": + "بنربطك بأقرب السواقين لالتقاط أسرع ورحلات أسرع.", + "We have maintenance offers for your car. You can use them after completing 600 trips to get a 20% discount on car repairs. Enjoy using our Intaleq app and be part of our Intaleq family.": + "عندنا عروض صيانة لسيارتك. تقدر تستخدمها بعد ما تكمل 600 رحلة عشان تاخد خصم 20% على تصليح السيارة. استمتع باستخدام تطبيق انطلق وكون جزء من عيلة انطلق.", + "We have partnered with health insurance providers to offer you special health coverage. Complete 500 trips and receive a 20% discount on health insurance premiums.": + "عقدنا شراكة مع مزودي تأمين صحي عشان نعطيك تغطية صحية خاصة. اكمل 500 رحلة واحصل على خصم 20% على أقساط التأمين الصحي.", + "We have received your application to join us as a driver. Our team is currently reviewing it. Thank you for your patience.": + "استلمنا طلبك للانضمام إلينا كسائق. فريقنا عم يراجعه هلق. شكراً لصبرك.", + "We have sent a verification code to your mobile number:": + "أرسلنا رمز تحقق لرقم جوالك:", + "We need access to your location to match you with nearby passengers and ensure accurate navigation.": + "نحتاج صلاحية موقعك عشان نربطك بركاب قريبين ونضمن ملاحة دقيقة.", + "We need access to your location to match you with nearby passengers and provide accurate navigation.": + "نحتاج للوصول لموقعك عشان نربطك بالركاب القريبين ونوفر توجيه دقيق.", + "We need your location to find nearby drivers for pickups and drop-offs.": + "بنحتاج موقعك عشان نلاقي سواقين قريبين للالتقاط والتنزيل.", + "We need your phone number to contact you and to help you receive orders.": + "بنحتاج رقم هاتفك عشان نتواصل معك ونساعدك تستلم طلبات.", + "We need your phone number to contact you and to help you.": + "بنحتاج رقم هاتفك عشان نتواصل معك ونساعدك.", + "We noticed the Intaleq is exceeding 100 km/h. Please slow down for your safety. If you feel unsafe, you can share your trip details with a contact or call the police using the red SOS button.": + "لاحظنا إن السرعة فوق 100 كم/ساعة. تفضل خفف السرعة عشان سلامتك. إذا حسيت إنك مش بأمان، تقدر تشارك تفاصيل رحلتك مع جهة اتصال أو تتصل بالشرطة بزر الطوارئ الأحمر.", + "We regret to inform you that another driver has accepted this order.": + "نأسف لإعلامك إن سائق تاني قبل هالطلب.", + "We search nearst Driver to you": "عم نبحث عن أقرب سائق لك", + "We sent 5 digit to your Email provided": + "أرسلنا 5 أرقام لبريدك الإلكتروني اللي قدّمته", + "We use location to get accurate and nearest passengers for you": + "بنستخدم موقعك عشان نلاقي أدق وأقرب ركاب لك", + "We use your precise location to find the nearest available driver and provide accurate pickup and dropoff information. You can manage this in Settings.": + "بنستخدم موقعك الدقيق عشان نلاقي أقرب سائق متاح ونعطيك معلومات دقيقة للالتقاط والتنزيل. تقدر تدير هالشي بالإعدادات.", + "We will look for a new driver.\nPlease wait.": + "هنبحث عن سائق جديد.\nمن فضلك انتظر.", + "Weekly Budget": "الميزانية الأسبوعية", + "Weekly Summary": "الملخص الأسبوعي", + "Welcome": "ياهلا وسهلا", + "Welcome Back!": "مرحباً بعودتك!", + "Welcome Offer!": "عرض ترحيبي!", + "Welcome to Intaleq!": "أهلاً بانطلق!", + "What are the order details we provide to you?": + "إيش تفاصيل الطلب اللي بنقدملك؟", + "What are the requirements to become a driver?": + "إيش المتطلبات عشان تصير سائق؟", + "What is Types of Trips in Intaleq?": "إيش أنواع الرحلات بانطلاق؟", + "What is the feature of our wallet?": "إيش مميزات محفظتنا؟", + "What safety measures does Intaleq offer?": + "إيش إجراءات السلامة اللي بيقدمها انطلق؟", + "What types of vehicles are available?": + "إيش أنواع المركبات المتاحة؟", + "WhatsApp": "واتساب", + "WhatsApp Location Extractor": "مستخرج موقع الواتساب", + "When": "متى", + "When you complete 500 trips, you will be eligible for exclusive health insurance offers.": + "لما تكمل 500 رحلة، رح تكون مؤهل لعروض تأمين صحي حصرية.", + "When you complete 600 trips, you will be eligible to receive offers for maintenance of your car.": + "لما تكمل 600 رحلة، رح تكون مؤهل لعروض صيانة سيارتك.", + "Where are you going?": "وين رايح؟", + "Where are you, sir?": "وينك يا سيدي؟", + "Where to": "وين بدك تروح؟", + "Where you want go": "وين بدك تروح", + "Which method you will pay": "إيش طريقة الدفع اللي بدك تستخدمها", + "Why Choose Intaleq?": "ليش تختار انطلق؟", + "Why do you want to cancel this trip?": "ليش بدك تلغي هالرحلة؟", + "With Intaleq, you can get a ride to your destination in minutes.": + "مع انطلق، تقدر تاخد رحلة لوجهتك بدقايق.", + "Work": "العمل", + "Work & Contact": "العمل والتواصل", + "Work Saved": "تم حفظ العمل", + "Work time is from 10:00 - 17:00.\nYou can send a WhatsApp message or email.": + "وقت العمل من 10:00 لـ 17:00.\nتقدر ترسل رسالة واتساب أو بريد إلكتروني.", + "Work time is from 10:00 AM to 16:00 PM.\nYou can send a WhatsApp message or email.": + "وقت العمل من 10:00 ص لـ 4:00 م.\nتقدر ترسل رسالة واتساب أو بريد إلكتروني.", + "Work time is from 12:00 - 19:00.\nYou can send a WhatsApp message or email.": + "وقت العمل من 12:00 لـ 19:00.\nتقدر ترسل رسالة واتساب أو بريد إلكتروني.", + "Would the passenger like to settle the remaining fare using their wallet?": + "بد الراكب يسدّد الأجرة المتبقية بمحفظته؟", + "Would you like to proceed with health insurance?": + "بدك تكمل مع التأمين الصحي؟", + "Write note": "اكتب ملاحظة", + "Write the reason for canceling the trip": "اكتب سبب إلغاء الرحلة", + "Write your comment here": "اكتب تعليقك هون", + "Write your reason...": "اكتب سببك...", + "YYYY-MM-DD": "YYYY-MM-DD", + "Year": "السنة", + "Year is": "السنة هي", + "Year of Manufacture": "سنة الصنع", + "Yes": "إي", + "Yes, Pay": "إي، ادفع", + "Yes, you can cancel your ride under certain conditions (e.g., before driver is assigned). See the Intaleq cancellation policy for details.": + "إي، تقدر تلغي رحلتك بشروط معينة (مثلاً قبل ما يتحدد سائق). شوف سياسة الإلغاء بانطلاق للتفاصيل.", + "Yes, you can cancel your ride, but please note that cancellation fees may apply depending on how far in advance you cancel.": + "إي، تقدر تلغي رحلتك، بس انتبه إن في رسوم إلغاء ممكن تتطبق حسب الوقت اللي بتلغي فيه.", + "You Are Stopped For this Day !": "تم إيقافك لهاليوم!", + "You Can Cancel Trip And get Cost of Trip From": + "تقدر تلغي الرحلة وتسترد التكلفة من", + "You Can Cancel the Trip and get Cost From": + "تقدر تلغي الرحلة وتسترد التكلفة من", + "You Can cancel Ride After Captain did not come in the time": + "تقدر تلغي الرحلة إذا ما جاك الكابتن بالوقت المحدد", + "You Dont Have Any amount in": "ما عندك أي مبلغ بـ", + "You Dont Have Any places yet !": "ما عندك أي أماكن لسا!", + "You Have": "عندك", + "You Have Tips": "عندك إكراميات", + "You Refused 3 Rides this Day that is the reason": + "رفضت 3 رحلات بهاليوم وهيك السبب", + "You Refused 3 Rides this Day that is the reason\nSee you Tomorrow!": + "رفضت 3 رحلات بهاليوم وهيك السبب\nنشوفك بكرة!", + "You Should be select reason.": "لازم تختار سبب.", + "You Should choose rate figure": "لازم تختار رقم التقييم", + "You Will Be Notified": "رح نبلّغك", + "You accepted the VIP order.": "قبلت طلب VIP.", + "You are Delete": "تم حذفك", + "You are Stopped": "تم إيقافك", + "You are far from passenger location": "أنت بعيد عن موقع الراكب", + "You are in an active ride. Leaving this screen might stop tracking. Are you sure you want to exit?": + "أنت برحلة نشطة. خروجك من هالشاشة ممكن يوقف التتبع. متأكد بدك تخرج؟", + "You are near the destination": "أنت قريب من الوجهة", + "You are not in near to passenger location": + "أنت مش قريب من موقع الراكب", + "You are not near": "أنت مش قريب من", + "You are not near the passenger location": + "أنت مش قريب من موقع الراكب", + "You can buy Points to let you online": + "تقدر تشتري نقاط عشان تكون أونلاين", + "You can buy Points to let you online\nby this list below": + "تقدر تشتري نقاط عشان تكون أونلاين\nبهالقائمة تحت", + "You can buy points from your budget": "تقدر تشتري نقاط من ميزانيتك", + "You can call or record audio during this trip.": + "تقدر تتصل أو تسجّل صوت خلال هالرحلة.", + "You can call or record audio of this trip": + "تقدر تتصل أو تسجّل صوت هالرحلة", + "You can cancel Ride now": "تقدر تلغي الرحلة هلق", + "You can cancel trip": "تقدر تلغي الرحلة", + "You can change the Country to get all features": + "تقدر تغير البلد عشان تاخد كل الميزات", + "You can change the destination by long-pressing any point on the map": + "تقدر تغير الوجهة بالضغط المطوّل على أي نقطة بالخريطة", + "You can change the language of the app": "تقدر تغير لغة التطبيق", + "You can change the vibration feedback for all buttons": + "تقدر تغير الاهتزاز لكل الأزرار", + "You can claim your gift once they complete 2 trips.": + "تقدر تستلم هديتك لما يكملوا رحلتين.", + "You can communicate with your driver or passenger through the in-app chat feature once a ride is confirmed.": + "تقدر تتواصل مع السائق أو الراكب عبر الدردشة جوا التطبيق بعد ما تتأكد الرحلة.", + "You can contact us during working hours from 10:00 - 16:00.": + "تقدر تتواصل معنا بساعات العمل من 10:00 لـ 16:00.", + "You can contact us during working hours from 10:00 - 17:00.": + "تقدر تتواصل معنا بساعات العمل من 10:00 لـ 17:00.", + "You can contact us during working hours from 12:00 - 19:00.": + "تقدر تتواصل معنا بساعات العمل من 12:00 لـ 19:00.", + "You can decline a request without any cost": + "تقدر ترفض طلب من دون أي تكلفة", + "You can now receive orders": "الآن تقدر تستلم طلبات", + "You can only use one device at a time. This device will now be set as your active device.": + "تقدر تستخدم جهاز واحد بوقت واحد. هالجهاز رح يصير جهازك النشط هلق.", + "You can pay for your ride using cash or credit/debit card. You can select your preferred payment method before confirming your ride.": + "تقدر تدفع لرحلتك كاش أو ببطاقة ائتمان/خصم. تقدر تختار طريقة الدفع المفضلة قبل ما تؤكد الرحلة.", + "You can purchase a budget to enable online access through the options listed below": + "تقدر تشتري ميزانية عشان تفعّل الاتصال الأونلاين عبر الخيارات اللي تحت", + "You can purchase a budget to enable online access through the options listed below.": + "تقدر تشتري ميزانية عشان تفعّل الاتصال الأونلاين عبر الخيارات اللي تحت.", + "You can resend in": "تقدر تعيد الإرسال بـ", + "You can share the Intaleq App with your friends and earn rewards for rides they take using your code": + "تقدر تشارك تطبيق انطلق مع صحابك وتكسب مكافآت عن الرحلات اللي يعملوها بكودك", + "You can upgrade price to may driver accept your order": + "تقدر ترفع السعر عشان يقبل سائق طلبك", + "You canceled VIP trip": "ألغيت رحلة VIP", + "You cannot call the passenger due to policy violations": + "ما تقدر تتصل بالراكب بسبب انتهاكات السياسة", + "You deserve the gift": "أنت تستحق الهدية", + "You do not have enough money in your SAFAR wallet": + "ما عندك فلوس كافية بمحفظة سفرك", + "You dont Add Emergency Phone Yet!": "ما ضفت رقم طوارئ لسا!", + "You dont have Points": "ما عندك نقاط", + "You dont have invitation code": "ما عندك كود دعوة", + "You dont have money in your Wallet": "ما عندك فلوس بمحفظتك", + "You dont have money in your Wallet or you should less transfer 5 LE to activate": + "ما عندك فلوس بمحفظتك أو لازم تحول أقل من 5 ل.م عشان تفعّل", + "You gained": "ربحت", + "You have": "عندك", + "You have 200": "عندك 200", + "You have 500": "عندك 500", + "You have already received your gift for inviting": + "استلمت هديتك للدعوة من قبل", + "You have already used this promo code.": + "استخدمت هالكود الترويجي من قبل.", + "You have arrived at your destination": "وصلت لوجهتك", + "You have arrived at your destination, @name": "وصلت لوجهتك، @name", + "You have call from driver": "عندك مكالمة من السائق", + "You have chosen not to proceed with health insurance.": + "اخترت ما تكمل مع التأمين الصحي.", + "You have copied the promo code.": "نسخت الكود الترويجي.", + "You have earned 20": "ربحت 20", + "You have exceeded the allowed cancellation limit (3 times).\nYou cannot work until the penalty expires.": + "تجاوزت الحد المسموح للإلغاء (3 مرات).\nما تقدر تشتغل لحتى تنتهي العقوبة.", + "You have finished all times": "خلصت كل الأوقات", + "You have gift 300 L.E": "عندك هدية 300 ل.م", + "You have gift 300 SYP": "عندك هدية 300 ل.س", + "You have gift 30000 SYP": "عندك هدية 30000 ل.س", + "You have got a gift": "وصلتك هدية", + "You have got a gift for invitation": "وصلتك هدية للدعوة", + "You have in account": "عندك بالحساب", + "You have promo!": "عندك عرض ترويجي!", + "You have received a gift token!": "استلمت رمز هدية!", + "You have successfully charged your account": "شحنت حسابك بنجاح", + "You have successfully opted for health insurance.": + "اخترت التأمين الصحي بنجاح.", + "You have transfer to your wallet from": "تم التحويل لمحفظتك من", + "You have transferred to your wallet from": "تم التحويل لمحفظتك من", + "You have upload Criminal documents": "رفعت وثائق جنائية", + "You must Verify email !.": "لازم توثّق بريدك الإلكتروني !.", + "You must be charge your Account": "لازم تشحن حسابك", + "You must be recharge your Account": "لازم تعيد شحن حسابك", + "You must restart the app to change the language.": + "لازم تعيد تشغيل التطبيق عشان تغير اللغة.", + "You need to be closer to the pickup location.": + "لازم تكون أقرب لموقع الالتقاط.", + "You need to complete 500 trips": "لازم تكمل 500 رحلة", + "You should complete 500 trips to unlock this feature.": + "لازم تكمل 500 رحلة عشان تفتح هالميزة.", + "You should complete 600 trips": "لازم تكمل 600 رحلة", + "You should have upload it .": "لازم تكون رفعتها.", + "You should renew Driver license": "لازم تجدّد رخصة السائق", + "You should restart app to change language": + "لازم تعيد تشغيل التطبيق عشان تغير اللغة", + "You should select one": "لازم تختار واحد", + "You should select your country": "لازم تختار بلدك", + "You should use Touch ID or Face ID to confirm payment": + "لازم تستخدم بصمة اللمس أو الوجه لتأكيد الدفع", + "You trip distance is": "مسافة رحلتك هي", + "You will arrive to your destination after": "رح توصل لوجهتك بعد", + "You will arrive to your destination after timer end.": + "رح توصل لوجهتك بعد ما يخلص العداد.", + "You will be charged for the cost of the driver coming to your location.": + "رح يتحسب عليك تكلفة وصول السائق لموقعك.", + "You will be pay the cost to driver or we will get it from you on next trip": + "رح تدفع التكلفة للسائق أو بنخصمها من رحلتك الجاية", + "You will be thier in": "رح توصل هناك بـ", + "You will cancel registration": "رح تلغي التسجيل", + "You will choose allow all the time to be ready receive orders": + "رح تختار السماح دايماً عشان تكون جاهز تستلم طلبات", + "You will choose one of above !": "رح تختار واحد من فوق!", + "You will get cost of your work for this trip": + "رح تاخد أجرة شغلك بهالرحلة", + "You will need to pay the cost to the driver, or it will be deducted from your next trip": + "لازم تدفع التكلفة للسائق، أو رح تنخصم من رحلتك الجاية", + "You will receive a code in SMS message": "رح تستلم كود برسالة SMS", + "You will receive a code in WhatsApp Messenger": + "رح تستلم كود بواتساب", + "You will receive code in sms message": "رح تستلم كود برسالة SMS", + "You will recieve code in sms message": "رح تستلم كود برسالة SMS", + "Your Account is Deleted": "تم حذف حسابك", + "Your Activity": "نشاطك", + "Your Application is Under Review": "طلبك قيد المراجعة", + "Your Budget less than needed": "ميزانيتك أقل من المطلوب", + "Your Choice, Our Priority": "اختيارك، أولويتنا", + "Your Driver Referral Code": "كود دعوة السائق بتاعك", + "Your Earnings": "أرباحك", + "Your Journey Begins Here": "رحلتك بلشت من هون", + "Your Name is Wrong": "اسمك غلط", + "Your Passenger Referral Code": "كود دعوة الراكب بتاعك", + "Your Question": "سؤالك", + "Your Questions": "أسئلتك", + "Your Rewards": "مكافآتك", + "Your Ride Duration is": "مدة رحلتك هي", + "Your Wallet balance is": "رصيد محفظتك هو", + "Your account is temporarily restricted ⛔": "حسابك مقيد مؤقتاً ⛔", + "Your are far from passenger location": "أنت بعيد عن موقع الراكب", "Your balance is less than the minimum withdrawal amount of {minAmount} S.P.": "رصيدك أقل من الحد الأدنى للسحب وهو {minAmount} ل.س.", - "This amount for all trip I get from Passengers": - "هذا المبلغ عن كل رحلة أحصل عليها من الركاب", - "SAFAR Wallet": "محفظة سفر", - "Pay from my budget": "ادفع من رصيدي", - "You have in account": "لديك في الحساب", - "Pay": "دفع", - "Your Budget less than needed": "رصيدك أقل من المطلوب", - - "You do not have enough money in your SAFAR wallet": - "ليس لديك ما يكفي من المال في محفظة سفر الخاصة بك", - "You can purchase a budget to enable online access through the options listed below": - "يمكنك شراء رصيد لتفعيل الوصول عبر الإنترنت من خلال الخيارات المذكورة أدناه", - "this is count of your all trips in the morning promo today from 7:00am to 10:00am": - "هذا هو عدد جميع رحلاتك في عرض الصباح اليوم من الساعة 7:00 صباحًا حتى 10:00 صباحًا", - "this is count of your all trips in the Afternoon promo today from 3:00pm to 6:00 pm": - "هذا هو عدد جميع رحلاتك في عرض الظهيرة اليوم من الساعة 3:00 مساءً حتى 6:00 مساءً", - "Payment History": "سجل المدفوعات", - "Insert Payment Details": "أدخل تفاصيل الدفع", - "Insert your mobile wallet details to receive your money weekly": - "أدخل تفاصيل محفظتك الإلكترونية لاستلام أموالك أسبوعيًا", - "Insert mobile wallet number": "أدخل رقم المحفظة الإلكترونية", - "syriatel": "سيريتل", - "mtn": "إم تي إن", - "Payment details added successfully": "تمت إضافة تفاصيل الدفع بنجاح", - "Your Journey Begins Here": "رحلتك تبدأ هنا", - "Are you want to go this site": "هل تريد الذهاب إلى هذا الموقع", - "Closest & Cheapest": "الأقرب والأرخص", - "Work Saved": "‏‏تم حفظ:", - "Intaleq is the ride-hailing app that is safe, reliable, and accessible.": - "انطلق هو تطبيق طلب المشاوير الآمن والموثوق به والذي يمكن الوصول إليه.", - "With Intaleq, you can get a ride to your destination in minutes.": - "مع انطلق، يمكنك إجراء مشوار إلى وجهتك في غضون دقائق.", - "Intaleq is committed to safety, and all of our captains are carefully screened and background checked.": - "يلتزم انطلق بالسلامة، ويتم فحص جميع قادتنا بعناية وفحص الخلفية الجنائية.", - "To Home": "إلى الصفحة الرئيسية", - "Home Saved": "‏‏تم حفظ:", - "Destination selected": "تم تحديد الوجهة", - "Now select start pick": "الآن اختر بدء الاختيار", - "Pick from map": "اختر من الخريطة", - "Click here point": "انقر هنا", - "No Car in your site. Sorry!": "لا توجد سيارة في موقعك. عذرًا!", - "Nearest Car for you about": "أقرب سيارة لك حوالي", - "N/A": "لا توجد معلومات", - "From :": "من:", - "Get Details of Trip": "احصل على تفاصيل الرحلة", - "If you want add stop click here": - "إذا كنت ترغب في إضافة توقف، انقر هنا", - "Driver": "سائق", - "Where you want go": "أين تريد أن تذهب؟", - "My Card": "بطاقتي", - "Start Record": "بدء التسجيل", - // "Wallet": "محفظة", - // "History of Trip": "‏أرشيف الرحلات", - // "Helping Center": "مركز المساعدة", - "Record saved": "تم حفظ السجل", - "Trips recorded": "رحلات مسجلة", - "Select Your Country": "اختر بلدك", - "To ensure you receive the most accurate information for your location, please select your country below. This will help tailor the app experience and content to your country.": - "لضمان حصولك على أدق المعلومات لموقعك، يرجى تحديد بلدك أدناه. سيساعد هذا في تخصيص تجربة التطبيق والمحتوى لبلدك.", - "Are you sure to delete recorded files": - "هل أنت متأكد من حذف الملفات المسجلة", - "Select recorded trip": "اختر مشوارًا مسجلاً", - "Card Number": "رقم البطاقة", - "Hi, Where to": "مرحبًا، إلى أين؟", - "Pick your destination from Map": "اختر وجهتك من الخريطة", - "Add Stops": "أضف توقفات", - "Get Direction": "احصل على الاتجاه", - "Add Location": "أضف الموقع", - "Switch Rider": "تبديل الراكب", - "You will arrive to your destination after timer end.": - "سوف تصل إلى وجهتك بعد انتهاء المؤقت.", - "You can cancel trip": "يمكنك إلغاء الرحلة", - "The driver waitting you in picked location .": - "الشريك السائق في انتظارك في الموقع المُحدَّد .", - "Pay with Your": "ادفع باستخدام", - "Pay with Credit Card": "ادفع ببطاقة الائتمان", - "Show Promos to Charge": "إظهار العروض الترويجية للشحن", - "Point": "نقطة", - "Total Budget from trips is": "الميزانية الإجمالية من الرحلات هي", - "Total Budget from trips by": "الميزانية الإجمالية من الرحلات حسب", - "Credit card is": "بطاقة الائتمان", - - "You can buy Points to let you online": - "يمكنك شراء النقاط لتمكينك من الدخول عبر الإنترنت", - "by this list below": "من خلال هذه القائمة أدناه", - // "Create Wallet to receive your money": "أنشئ محفظة لاستقبال أموالك", - "Enter your feedback here": "أدخل ملاحظاتك هنا", - "Please enter your feedback.": "الرجاء إدخال نص ملاحظاتك", - "Feedback": "التغذية الراجعة", - "Click here to Show it in Map": "انقر هنا لعرضه على الخريطة", - "Canceled": "تم الإلغاء", - "Type your Email": "اكتب بريدك الإلكتروني", - "No I want": "لا، أريد", - "Email is": "البريد الإلكتروني", - "Phone Number is": "رقم الهاتف هو", - "Date of Birth is": "تاريخ الميلاد هو", - "Sex is": "الجنس هو", - "Car Details": "تفاصيل السيارة", - "VIN is": "رقم الهيكل", - "Color is": "اللون هو", - "Make is": "الصنع هو", - "Model is": "النموذج من:", - "Year is": "السنة", - "Edit Your data": "تعديل بياناتك", - "write vin for your car": "اكتب رقم الهيكل الخاص بسيارتك", - "VIN": "رقم هيكل السيارة", - "write Color for your car": "اكتب لون سيارتك", - "write Make for your car": "اكتب صنع لسيارتك", - "write Model for your car": "اكتب نموذج سيارتك", - "write Year for your car": "اكتب سنة لسيارتك", - "write Expiration Date for your car": - "اكتب تاريخ انتهاء الصلاحية لسيارتك", - "Tariffs": "تعريفات", - "Minimum fare": "الحد الأدنى للأجرة", - "Maximum fare": "أقصى سعر", - "Flag-down fee": "رسوم التوقف", - "Including Tax": "بما في ذلك الضريبة", - "BookingFee": "رسوم الحجز", - "Morning": "الصباح", - "from 07:30 till 10:30 (Thursday, Friday, Saturday, Monday)": - "من الساعة 07:30 حتى الساعة 10:30 (الخميس، الجمعة، السبت، الاثنين)", - "Evening": "مساء", - "from 12:00 till 15:00 (Thursday, Friday, Saturday, Monday)": - "من الساعة 12:00 حتى الساعة 15:00 (الخميس، الجمعة، السبت، الاثنين)", - "Night": "الليل", - "You have in account": "لديك في الحساب", - "Select Country": "اختر البلد", - "Ride Today :": "اطلب مشواراً اليوم :", - "After this period": "بعد هذه الفترة", - "You can't cancel!": "لا يمكنك الإلغاء!", - "from 23:59 till 05:30": "من 23:59 حتى 05:30", - "Rate Driver": "قيم السائق", - "Total Cost is": "التكلفة الإجمالية هي", - "Write note": "اكتب ملاحظة", - "Time to arrive": "الوقت المتوقع للوصول", - "Ride Summaries": "ملخصات الرحلات", - // "Total Cost": "التكلفة الإجمالية", - "Average of Hours of": "متوسط ساعات العمل", - // "is ON for this month": "قيد التشغيل لهذا الشهر", - "Days": "أيام", - "Total Hours on month": "إجمالي عدد الساعات في الشهر", - "Counts of Hours on days": "عدد الساعات في الأيام", - "OrderId": "رقم الطلب", - "created time": "وقت الإنشاء", - "Intaleq Over": "السرعة فوق", - "I will slow down": "سأبطئ", - "Map Passenger": "خريطة الراكب", - "Be Slowly": "كن بطيئًا", - // 'Confirm Cancellation': 'تأكيد الإلغاء', - 'Are you sure you want to cancel and collect the fee?': - 'هل أنت متأكد أنك تريد الإلغاء وجمع الرسوم؟', - 'Cancel & Collect Fee': 'إلغاء وجمع الرسوم', - "You need to be closer to the pickup location.": - "تحتاج إلى أن تكون أقرب إلى موقع الالتقاط.", - "Start Trip?": "بدء الرحلة؟", - "Ensure the passenger is in the car.": - "تأكد من وجود الراكب في السيارة.", - 'Start Trip': 'ابدأ الرحلة', - 'min': 'دقيقة', - 'Swipe to End Trip': 'اسحب لإنهاء الرحلة', - 'End Trip': 'إنهاء الرحلة', - 'Time': 'الوقت', - 'I Have Arrived': 'لقد وصلت', - "Please complete more distance before ending.": - "يرجى إكمال المزيد من المسافة قبل الانتهاء.", - 'Traveled': 'المسافة المقطوعة', - 'Meter Fare': 'أجرة العداد', - "Cancel Trip?": "إلغاء الرحلة؟", - "Please tell us why you want to cancel.": - "يرجى إخبارنا لماذا تريد الإلغاء.", - 'Vehicle Category': 'فئة المركبة', - 'Car': 'سيارة', - - 'Motorcycle': 'دراجة نارية', - 'Van / Bus': 'فان / باص', - - 'Fuel Type': 'نوع الوقود', - 'Petrol': 'بنزين', - 'Diesel': 'ديزل', - 'Electric': 'كهربائي', - 'Hybrid': 'هايبرد', - // "Passenger cancelled the ride.": "قام الراكب بإلغاء الرحلة.", - "Write your reason...": "اكتب سببك...", - }, - "tr": { - "Order": "Sipariş", - "OrderVIP": "VIP Sipariş", - "Cancel Trip": "Yolculuğu İptal Et", - "Passenger Cancel Trip": "Yolcu Yolculuğu İptal Etti", - "VIP Order": "VIP Sipariş", - "The driver accepted your trip": "Sürücü yolculuğunuzu kabul etti", - "message From passenger": "Yolcudan mesaj", - "Cancel": "İptal", - "Trip Cancelled. The cost of the trip will be added to your wallet.": - "Yolculuk İptal Edildi. Yolculuk ücreti cüzdanınıza eklenecektir.", - "token change": "token değişikliği", - "face detect": "yüz algılama", - "Face Detection Result": "Yüz Algılama Sonucu", - "similar": "benzer", - "not similar": "benzer değil", - "Hi ,I will go now": "Merhaba, şimdi gideceğim", - "Passenger come to you": "Yolcu size geliyor", - "Call Income": "Gelen Arama", - "Call Income from Passenger": "Yolcudan Gelen Arama", - "Criminal Document Required": "Adli Belge Gerekli", - "You should have upload it .": "Yüklemeniz gerekiyor.", - "Call End": "Arama Sonu", - "The order has been accepted by another driver.": - "Sipariş başka bir sürücü tarafından kabul edildi.", - "The order Accepted by another Driver": - "Sipariş başka bir Sürücü tarafından Kabul Edildi", - "We regret to inform you that another driver has accepted this order.": - "Başka bir sürücünün bu siparişi kabul ettiğini bildirmekten üzgünüz.", - "Driver Applied the Ride for You": - "Sürücü Sizin İçin Yolculuğa Başvurdu", - "Applied": "Başvuruldu", - "Hi ,I Arrive your site": "Merhaba, konumunuza geldim", - "Please go to Car Driver": "Lütfen Araç Sürücüsüne gidin", - "Ok I will go now.": "Tamam, şimdi gideceğim.", - "Accepted Ride": "Kabul Edilen Yolculuk", - "Driver Accepted the Ride for You": - "Sürücü Sizin İçin Yolculuğu Kabul Etti", - "Promo": "Promosyon", - "Show latest promo": "En son promosyonu göster", - "Trip Monitoring": "Yolculuk İzleme", - "Driver Is Going To Passenger": "Sürücü Yolcuya Gidiyor", - "Please stay on the picked point.": "Lütfen seçilen noktada kalın.", - "message From Driver": "Sürücüden mesaj", - "Trip is Begin": "Yolculuk Başladı", - "Cancel Trip from driver": "Sürücüden Yolculuk İptali", - "We will look for a new driver.\nPlease wait.": - "Yeni bir sürücü arayacağız.\nLütfen bekleyin.", - "The driver canceled your ride.": "Sürücü yolculuğunuzu iptal etti.", - "Driver Finish Trip": "Sürücü Yolculuğu Bitirdi", - "you will pay to Driver": "Sürücüye ödeme yapacaksınız", - "Don’t forget your personal belongings.": - "Kişisel eşyalarınızı unutmayın.", - "Please make sure you have all your personal belongings and that any remaining fare, if applicable, has been added to your wallet before leaving. Thank you for choosing the Intaleq app": - "Lütfen ayrılmadan önce tüm kişisel eşyalarınızın yanınızda olduğundan ve varsa kalan ücretin cüzdanınıza eklendiğinden emin olun. Intaleq uygulamasını seçtiğiniz için teşekkür ederiz", - "Finish Monitor": "İzlemeyi Bitir", - "Trip finished": "Yolculuk bitti", - "Call Income from Driver": "Sürücüden Gelen Arama", - "Driver Cancelled Your Trip": "Sürücü Yolculuğunuzu İptal Etti", - "you will pay to Driver you will be pay the cost of driver time look to your Intaleq Wallet": - "Sürücüye ödeme yapacaksınız, sürücü zamanının maliyetini ödeyeceksiniz, Intaleq Cüzdanınıza bakın", - "Order Applied": "Sipariş Uygulandı", - //firbase - }, - "fr": { - "Order": "Commande", - "OrderVIP": "Commande VIP", - "Cancel Trip": "Annuler le trajet", - "Passenger Cancel Trip": "Passager a annulé le trajet", - "VIP Order": "Commande VIP", - "The driver accepted your trip": - "Le chauffeur a accepté votre trajet", - "message From passenger": "Message du passager", - "Cancel": "Annuler", - "Trip Cancelled. The cost of the trip will be added to your wallet.": - "Trajet annulé. Le coût du trajet sera ajouté à votre portefeuille.", - "token change": "changement de jeton", - "face detect": "détection faciale", - "Face Detection Result": "Résultat de la détection faciale", - "similar": "similaire", - "not similar": "non similaire", - "Hi ,I will go now": "Salut, je vais y aller maintenant", - "Passenger come to you": "Le passager vient vers vous", - "Call Income": "Appel entrant", - "Call Income from Passenger": "Appel entrant du passager", - "Criminal Document Required": "Document judiciaire requis", - "You should have upload it .": "Vous auriez dû le télécharger.", - "Call End": "Fin d'appel", - "The order has been accepted by another driver.": - "La commande a été acceptée par un autre chauffeur.", - "The order Accepted by another Driver": - "La commande acceptée par un autre chauffeur", - "We regret to inform you that another driver has accepted this order.": - "Nous regrettons de vous informer qu'un autre chauffeur a accepté cette commande.", - "Driver Applied the Ride for You": - "Le chauffeur a postulé pour le trajet pour vous", - "Applied": "Appliqué", - "Hi ,I Arrive your site": "Salut, je suis arrivé à votre emplacement", - "Please go to Car Driver": - "Veuillez vous rendre au chauffeur de la voiture", - "Ok I will go now.": "Ok, j'y vais maintenant.", - "Accepted Ride": "Trajet accepté", - "Driver Accepted the Ride for You": - "Le chauffeur a accepté le trajet pour vous", - "Promo": "Promo", - "Show latest promo": "Afficher la dernière promo", - "Trip Monitoring": "Surveillance du trajet", - "Driver Is Going To Passenger": - "Le chauffeur se dirige vers le passager", - "Please stay on the picked point.": - "Veuillez rester au point de prise en charge indiqué.", - "message From Driver": "Message du chauffeur", - "Trip is Begin": "Le trajet commence", - "Cancel Trip from driver": "Annulation du trajet par le chauffeur", - "We will look for a new driver.\nPlease wait.": - "Nous allons chercher un nouveau chauffeur.\nVeuillez patienter.", - "The driver canceled your ride.": - "Le chauffeur a annulé votre trajet.", - "Driver Finish Trip": "Le chauffeur a terminé le trajet", - "you will pay to Driver": "vous paierez le chauffeur", - "Don’t forget your personal belongings.": - "N'oubliez pas vos effets personnels.", - "Please make sure you have all your personal belongings and that any remaining fare, if applicable, has been added to your wallet before leaving. Thank you for choosing the Intaleq app": - "Veuillez vous assurer que vous avez tous vos effets personnels et que tout montant restant, le cas échéant, a été ajouté à votre portefeuille avant de partir. Merci d'avoir choisi l'application Intaleq", - "Finish Monitor": "Terminer la surveillance", - "Trip finished": "Trajet terminé", - "Call Income from Driver": "Appel entrant du chauffeur", - "Driver Cancelled Your Trip": "Le chauffeur a annulé votre trajet", - "you will pay to Driver you will be pay the cost of driver time look to your Intaleq Wallet": - "vous paierez le chauffeur, vous paierez le coût du temps du chauffeur, consultez votre portefeuille Intaleq", - "Order Applied": "Commande appliquée", - //firbase - - "registration_date": "Date d'enregistrement", - "expiration_date": "Date d'expiration", - "rating_count": "Nombre d'évaluations", - "rating_driver": "Note du chauffeur", - "age": "Âge", - "vin": - "Parce que je suis les fonctions. J'ai mémorisé les numéros d'identification.", - "car_color": "- La couleur.", - "car_plate": "Le numéro d'immatriculation ?", - "car_model": "Modèle de voiture :", - "education": "Les études", - "gender": "sexe", - "birthdate": "Date de naissance", - "Approve Driver Documents": "Approuver les documents du chauffeur", - "Total Budget is": "BUDGET TOTAL", - "You will recieve code in sms message": - "Vous recevrez le code par SMS", - "Please enter": "Emplacement du fichier d'agenda pour KAlarm", - "We need your phone number to contact you and to help you receive orders.": - "Nous avons besoin de votre numéro de téléphone pour vous contacter et vous aider à recevoir des commandes.", - "The full name on your criminal record does not match the one on your driver’s license. Please verify and provide the correct documents.": - "Le nom complet sur votre casier judiciaire ne correspond pas au nom sur votre permis de conduire. Veuillez vérifier et fournir les documents corrects.", - "The national number on your driver’s license does not match the one on your ID document. Please verify and provide the correct documents.": - "Le numéro national de votre permis de conduire ne correspond pas à celui de votre pièce d'identité. Veuillez vérifier et fournir les documents corrects.", - "Capture an Image of Your Criminal Record": - "Prenez une photo de votre casier judiciaire", - "IssueDate": "Date de délivrance ", - "Capture an Image of Your car license front": - "Prenez une photo de votre permis de conduire de face", - "Capture an Image of Your ID Document front": - "Prenez une photo de votre pièce d'identité de face", - "NationalID": "Numéro national", - "FullName": "Nom complet", - "InspectionResult": "Résultats de l'examen", - "Criminal Record": "Casier judiciaire", - "The email or phone number is already registered.": - "L'adresse e-mail ou le numéro de téléphone est déjà enregistré.", - "To become a ride-sharing driver on the Intaleq app, you need to upload your driver's license, ID document, and car registration document. Our AI system will instantly review and verify their authenticity in just 2-3 minutes. If your documents are approved, you can start working as a driver on the Intaleq app. Please note, submitting fraudulent documents is a serious offense and may result in immediate termination and legal consequences.": - "Pour devenir chauffeur de covoiturage dans l'app Voyages, vous devez télécharger votre permis de conduire, votre pièce d'identité et votre document d'immatriculation du véhicule. Notre système d'IA examinera et vérifiera immédiatement son authenticité en seulement 2 à 3 minutes. Si vos documents sont approuvés, vous pouvez commencer à travailler en tant que chauffeur dans l'application Voyages. Veuillez noter que la fourniture de documents falsifiés est une infraction grave et peut entraîner une résiliation immédiate et des conséquences juridiques.", - "Documents check": "Vérification des documents", - "Driver's License": "Permis de conduire", - "License Type": "Type de licence", - "National Number": "Numéro d’identité national :", - "Name (Arabic)": "Nom (arabe)", - "Name (English)": "Anglais", - "Address": "Adresse", - "Issue Date": "Date de délivrance ", - "Expiry Date": "Date d'expiration", - "License Categories": "Autorisation", - "driver_license": "Permis de conduire", - "Capture an Image of Your Driver License": - "Prenez une photo de votre permis de conduire", - "ID Documents Back": "B. Pièces d'identité", - "National ID": "Carte d'identité nationale", - "Occupation": "Profession :", - "Gender": "sexe", - "Religion": "la religion", - "Marital Status": "État civil ", - "Full Name (Marital)": "Nom complet", - "Expiration Date": "Date d'expiration", - "Capture an Image of Your ID Document Back": - "Prenez une photo du verso de votre pièce d'identité", - "ID Documents Front": "Recto des documents d'identification", - "First Name": "Prénom...", - "CardID": "Prenez une photo du verso de votre pièce d'identité", - "Full Name": "Nom complet", - "Vehicle Details Front": "Détails du véhicule avant", - "Plate Number": "Plaque d'immatriculation", - "Owner Name": "Le nom du propriétaire est Dr.", - "Vehicle Details Back": "Détails du véhicule", - "Make": "Make", - "Model": "Modèle de voiture :", - "Year": "Année", - "Chassis": "Châssis", - "Color": "- La couleur.", - "Displacement": "À remplacer", - "Fuel": "Carburant !", - "Tax Expiry Date": "Date d'expiration", - "Inspection Date": "DATE D'EXAMEN:", - "Capture an Image of Your car license back": - "Prenez à nouveau une photo de votre permis de conduire", - "Capture an Image of Your Driver’s License": - "Prenez une photo de votre permis de conduire", - "Sign in with Google for easier email and name entry": - "Connectez-vous avec Google pour saisir facilement votre adresse e-mail et votre nom", - "You will choose allow all the time to be ready receive orders": - "Vous choisirez d'autoriser les commandes prêtes à l'emploi tout le temps", - "Welcome to Intaleq!": "Bienvenue dans", - "Get to your destination quickly and easily.": - "Accédez à votre destination rapidement et facilement.", - "Enjoy a safe and comfortable ride.": - "Profitez d'une course sûre et confortable.", - "Choose Language": "Choisissez la langue", - "Login": "Se connecter", - "Pay with Wallet": "Payer avec un portefeuille", - "Invalid MPIN": "Code MPIN invalide", - "Invalid OTP": "Code de vérification", - "Enter your email address": "Saisissez votre adresse e-mail", - "Please enter Your Email.": "Veuillez saisir...", - "Enter your phone number": "Quel est ton nom ?", - "Please enter your phone number.": - "Veuillez saisir votre numéro de téléphone.", - "Please enter Your Password.": "Veuillez entrer votre mot de passe", - "Submit": "Envoyé", - "if you dont have account": "Que voulez-vous dire ?", - "Register": "C'est parti !", - "Accept Ride's Terms & Review Privacy Notice": - "Acceptez les conditions de la course et consultez l'avis de confidentialité", - "By selecting 'I Agree' below, I have reviewed and agree to the Terms of Use and acknowledge the Privacy Notice. I am at least 18 years of age.": - "En sélectionnant « J'accepte » ci-dessous, j'ai examiné et accepté les Conditions d'utilisation et j'accepte la Déclaration de confidentialité.Au moins un an", - "I Agree": " Je suis d'accord", - "First name": "Prénom...", - "Enter your first name": "Saisissez votre nom", - "Please enter your first name.": "Veuillez saisir votre nom.", - "Last name": "Nom de famille", - "Enter your last name": "NOM:", - "Please enter your last name.": "Veuillez saisir votre nom.", - "City": "Ville", - "Please enter your City.": "Veuillez saisir...", - "Male": "Homme", - "Female": "Femme", - "Verify Email": "27\":\"E-mail validé.\":", - "We sent 5 digit to your Email provided": - "Nous avons envoyé 5 chiffres à l'adresse e-mail que vous avez fournie", - "5 digit": "Broche(5chiffres)", - "Send Verification Code": "Code de vérification", - "Your Ride Duration is": "La durée de votre course est de", - "You will be thier in": "Vous les aurez dans", - "You trip distance is": "La distance de votre course est de", - "Fee is": "Les frais sont", - "To :": "À :", - "Add Promo": "Ajouter une promotion", - "Confirm Selection": "Confirmer la sélection", - "distance is": "La distance est", - "duration is": "La durée est", - "I don't need a ride anymore": "J'en ai plus besoin.", - "I was just trying the application": "J'essayais juste l'application", - "No driver accepted my request": - "Aucun chauffeur n'a accepté ma commande", - "I added the wrong pick-up/drop-off location": - "Vous avez ajouté le mauvais lieu de prise en charge/destination", - "I don't have a reason": "J'en sais rien.", - "Other": "Autre …", - "Can we know why you want to cancel Ride ?": - "Peut-on savoir pourquoi vous souhaitez annuler la course ?", - "Cancel Ride": "Avorter!", - "Add Payment Method": "Ajouter un mode de paiement", - "Your Wallet balance is": "Le solde de votre portefeuille est", - "Ride Wallet": "Portefeuille de voyage", - "Payment Method": "Mode de paiement", - "Type here Place": "C'est ici !", - "Are You sure to ride to": "Êtes-vous sûr de vouloir rouler jusqu'à", - "Confirm": "Valider", - "Back": "Répondez.", - "You are Delete": "Vous supprimez", - "Deleted": "Supprimé", - "You Dont Have Any places yet !": - "Vous n'avez pas encore de places !", - "Favorite Places": "C'est votre genre d'endroit ?", - "From : Current Location": "Utiliser la position actuelle", - "Where to": "Où?", - "Notifications": "Notifications", - "Profile": "Profil personnel", - "Home": "Accueil", - "My Cared": "MyCurt", - "Add Card": "Ajouter une carte", - "Add Credit Card": "C'est de la MasterCard.", - "Please enter the cardholder name": - "Veuillez saisir le nom du titulaire de la carte", - "Please enter the expiry date": "la date de péremption", - "Please enter the CVV code": - "Veuillez saisir le code de vérification de la carte", - "Go To Favorite Places": "Accéder aux lieux favoris", - "Go to this Target": "Atteindre cet objectif", - "My Profile": "Aperçu du profil", - "Sign Out": "Se Déconnecter", - "Home Page": "Accueil", - "Are you want to go to this site": "Voulez-vous aller à cet endroit", - "MyLocation": "Ma position", - "my location": "Ma position", - "Target": "Objectif", - "Update": "Mise à jour", - "You Should choose rate figure": "Vous devez choisir le bon numéro", - "Login Captin": "Se connecter", - "Register Captin": "Inscription du capitaine", - "Send Verfication Code": "Code de vérification", - "End Ride": "Embarquez !", - "Minute": "Minute", - "Go to passenger Location now": - "Accéder à l'emplacement du passager maintenant", - "Duration of the Ride is": "La durée de la course est de", - "Distance of the Ride is": "La distance parcourue est de", - "Name of the Passenger is": "Le nom du passager est", - "Hello this is Captain": "Bonjour, je suis le capitaine", - "Start the Ride": "Commencer la course", - "Please Wait If passenger want To Cancel!": - "Veuillez patienter si le passager souhaite annuler !", - "Total Duration:": "durée totale de la formation", - "Active Duration:": "Durée de l'étape active", - "Waiting for Captin ...": "J'attends le capitaine.", - "Age is": "C'est l'âge...", - "Rating is": "- L'évaluation est...", - "to arrive you.": "pour vous joindre.", - "Order History": "Enregistrer l'historique des commandes", - "My Wallet": "Ma portefeuille", - "Tariff": "Tarif", - "Settings": "Paramètres", - "Feed Back": "- Les réflexes sont normaux.", - "Promos": "Promotions", - "Please enter a valid 16-digit card number": - "Veuillez saisir un numéro de bon de commande valide.", - "Add Phone": "Téléphone", - "Please enter a phone number": - "Veuillez saisir un numéro de téléphone.", - "You dont Add Emergency Phone Yet!": - "Vous n'avez pas encore ajouté de téléphone d'urgence !", - "You will arrive to your destination after": - "Vous arriverez à destination après", - "You can cancel Ride now": "Vous pouvez annuler la course maintenant", - "You Can cancel Ride After Captain did not come in the time": - "Vous pouvez annuler la course lorsque le capitaine n'est pas arrivé à temps", - "If you in Car Now. Press Start The Ride": - "Si vous êtes dans la voiture en ce moment. Appuyez sur Commencer la course.", - "You Dont Have Any amount in": "Vous n'avez aucun montant en", - "Wallet!": "Ho !", - "You Have": "- Euh...", - "Save Credit Card": "- La carte.", - "Show Promos": "Presentations ", - "10 and get 4% discount": "10 et obtenez 4 % de réduction", - "20 and get 6% discount": "20 et obtenez 6 % de réduction", - "40 and get 8% discount": "40 et obtenez 8 % de réduction", - "100 and get 11% discount": "100 % et obtenez 11 % de réduction", - "Pay with Your PayPal": "Payer avec PayPal", - "You will choose one of above !": - "Vous choisirez l'une des options ci-dessus !", - "Cancel": "Annuler", - "Delete My Account": "Supprimer mon compte", - "Edit Profile": "Modifier le profil", - "Name": "Nom", - "Update Gender": "Mettre à jour le sexe", - "Education": "Les études", - "Update Education": ":: Moderniser l'enseignement;", - "Employment Type": "Catégorie de personnel", - "SOS Phone": "Mobile", - "High School Diploma": "BACCALAUREAT DE L'ENSEIGNEMENT", - "Associate Degree": "Diplôme conjoint", - "Bachelor's Degree": "Grade de bachelier", - "Master's Degree": "Master", - "Doctoral Degree": "Docteur en philosophie.", - "Promos For today": "Promotions", - "Copy this Promo to use it in your Ride!": - "Copiez cette promotion pour l'utiliser lors de votre voyage !", - "To change some Settings": "Pour modifier certains paramètres", - "To change Language the App": - "Pour modifier la langue de l'application", - "Order Request Page": "Page de demande de commande", - "Rouats of Trip": "Tripp.", - "Passenger Name is": "Voyageur.", - "Total From Passenger is": "Le total du passager est", - "Duration To Passenger is": "Durée jusqu'au passager", - "Distance To Passenger is": "distance par rapport au passager est", - "Total For You is": "Le total pour vous est de", - "Distance is": "Distance", - "KM": "Km", - "Duration of Trip is": "La durée de la course est de", - "Minutes": "Minutes", - "Apply Order": "Appliquer la commande", - "Refuse Order": "- Demande rejetée.", - "Rate Captain": "Cote de capitaine", - "Enter your Note": "J'ai eu votre mot.", - "Type something...": "Écrire quelque chose...", - "Submit rating": "Fournir une évaluation", - "Rate Passenger": "Note du passager", - "Ride Summary": "Résumé de la course", - "welcome_message": "Insérer « & #160; Bonjour monde & #160; »", - "app_description": "ApplicationDescription", - "get_to_destination": - "Destination atteinte. Déblocage des contrôles manuels.", - "get_a_ride": "Commandez une course", - "safe_and_comfortable": "Sûr et confortable", - "committed_to_safety": "Engagé pour la sécurité", - "Driver Applied the Ride for You": - "Un chauffeur qui a effectué la course pour vous", - "Show latest promo": "Afficher la dernière promotion", - "Cancel Trip": "Le vol est annulé.", - "Passenger Cancel Trip": "Le passager annule la course", - "Please stay on the picked point.": - "Veuillez rester au point sélectionné.", - "Trip is Begin": "Votre initiation a commencé.", - "Hi ,I will go now": "Bonjour, j'y vais maintenant", - "Passenger come to you": "Votre passager vient vous voir", - "Hi ,I Arrive your site": - "Bonjour, vous avez atteint votre position.", - "Driver Finish Trip": "Fin de la course du chauffeur", - "you will pay to Driver": "Sérieux ? Probablement avec mon argent.", - "Driver Cancel Your Trip": "Annulez votre course, chauffeur.", - "you will pay to Driver you will be pay the cost of driver time look to your Intaleq Wallet": - "Vous paierez le chauffeur Vous paierez le coût du temps du chauffeur Regardez votre portefeuille Intaleq", - "I will go now": "- J'y vais.", - "You Have Tips": "Astuces", - "tips": "Des paroles sages ?", - "Total is": "Chiffre total est de 15", - "No,I want": "- Je n'en ai pas envie.", - "Your fee is": "Vos frais sont de", - "Do you want to pay Tips for this Driver": - "Souhaitez-vous laisser un pourboire à ce chauffeur ?", - "Tip is": "Monconseil", - "Camera Access Denied.": "Accès à la caméra refusé.", - "Open Settings": - "|||UNTRANSLATED_CONTENT_START|||افتح الإعدادات|||UNTRANSLATED_CONTENT_END|||", - "GPS Required Allow !.": "Le GPS doit être activé !", - "Your Account is Deleted": "Votre compte a été supprimé", - "Are you sure to delete your account?": - "Voulez-vous vraiment supprimer votre compte ?", + "Your complaint has been submitted.": "تم إرسال شكواك.", "Your data will be erased after 2 weeks": - "Vos données seront effacées après 2 semaines", - "And you will can't return to use app after 1 month": - "Vous pourrez revenir à l'application après un mois", - "Enter Your First Name": "Saisissez votre nom", - "Are you Sure to LogOut?": "Voulez-vous vraiment vous déconnecter?", - "Email Wrong": "Email ", - "Email you inserted is Wrong.": - "L'adresse e-mail que vous avez saisie est incorrecte.", - "You have finished all times": "J'en ai assez !", - "if you want help you can email us here": - "Si vous souhaitez de l'aide, vous pouvez nous envoyer un e-mail ici", - "Thanks": "Merci.", - "Email Us": "Envoyez-nous un e-mail", - "I cant register in your app in face detection": - "Je ne peux pas m'inscrire à votre application avec la détection de visage", - "Hi": "-C'est un plaisir. -Hello.", - "No face detected": "Aucun scanner n'a été détécté", - "Image detecting result is": - "Le résultat de la détection d'image est", - "from 3 times Take Attention": "que 3 fois attirent votre attention", - "Be sure for take accurate images please": - "Assurez-vous de prendre des photos précises s'il vous plaît", - "You have": "- Euh...", - "image verified": "La photo est notariée", - "Next": "Suivant", - "There is no help Question here": "Ouais, pas d'aide ici.", - "Call End": "Terminer l'appel", - "You dont have Points": "- Vous n'avez pas...", - "You Are Stopped For this Day !": - "Vous avez été mis en pause pour la journée !", - "You must be charge your Account": - "Vous devez recharger votre compte", - "You Refused 3 Rides this Day that is the reason": - "Vous avez refusé 3 courses aujourd'hui et c'est pourquoi", - "See you Tomorrow!": "Je te verrais demain.", - "Recharge my Account": "Recharger mon compte", - "Ok , See you Tomorrow": "D'accord, on se voit demain.", - "You are Stopped": "Vous êtes arrêté", - "Connected": "Online", - "Not Connected": "Offiline", - "Your are far from passenger location": - "Vous êtes loin de l'emplacement des passagers", - "go to your passenger location before": - "Accédez à l'emplacement de votre passager avant le", - "Passenger cancel trip": "Le passager a annulé la course", - "You will get cost of your work for this trip": - "Vous obtiendrez le coût de votre entreprise pour cette course", - "in your wallet": "Elle est dans ton portefeuille.", - "you gain": "Vous gagnerez", - "Order Cancelled": "Commande annulée", - "Order Cancelled by Passenger": "Demande annulée par le passager", - "Success": "Je l'ai.", - "Feedback data saved successfully": - "Données d'évaluation enregistrées avec succès", - "No Promo for today .": "Pas de promotion pour aujourd'hui.", - "Select your destination": "Sélectionnez la destination;", - "Search for your Start point": "Trouvez votre point de départ", - "Search for waypoint": "Rechercher un point WIPOINT", - "Current Location": "Utiliser la position actuelle", - "Add Location 1": "Emplacement & #160;: %1", - "You must Verify email !.": "Relever le courriel", - "Cropper": "Récolte", - "Saved Sucssefully": "Bien reçu.", - "Select Date": "Choisir une nouvelle date", - "Birth Date": "Date de naissance", - "Ok": "D'accord.", - "the 500 points equal 30 JOD": "500 points équivaut à 30 JOD", - "the 500 points equal 30 JOD for you": - "500 points équivaut à 30 JOD pour vous", - "token updated": "Code mis à jour", - "Add Location 2": "Ajouter un emplacement 2", - "Add Location 3": "Ajouter un emplacement 3", - "Add Location 4": "Ajouter un emplacement 4", - "Waiting for your location": "En attente de votre localisation", - "Search for your destination": "Trouvez votre destination", - "Hi! This is": "Bienvenue \"moi\": c' est ça.", - "I am using": "Du matériel que j'utilisais.", - "to ride with": "pour rouler avec", - "as the driver.": "On dirait un chauffeur.", - "is driving a": "- Je vais le tenter comme ça. - Conduire.", - "with license plate": "Avec une plaque d'immatriculation", - "I am currently located at": "Je suis actuellement en", - "Please go to Car now": "S'il te plaît, va-t-en maintenant.", - "If you need to reach me, please contact the driver directly at": - "Si vous avez besoin de me joindre, veuillez contacter directement le chauffeur au", - "No Car or Driver Found in your area.": - "Aucune voiture ou chauffeur trouvé dans votre région.", - "Please Try anther time": "Réessayer", - "There no Driver Aplly your order sorry for that": - "Aucun chauffeur ne peut répondre à votre demande, nous sommes désolés.", - "Trip Cancelled": "Course annulée", - "The Driver Will be in your location soon .": - "Votre chauffeur arrivera bientôt chez vous.", - "The distance less than 500 meter.": - "La distance est inférieure à 500 mètres.", - "Promo End !": "- C'est seulement jusqu'au spectacle.", - "There is no notification yet": "Aucune notification pour le moment", - "Use Touch ID or Face ID to confirm payment": - "Utilisez Touch ID ou Face ID pour confirmer le paiement", - "Contact us for any questions on your order.": - "Contactez-nous pour toute question concernant votre commande.", - "Pyament Cancelled .": "Le paiement a été annulé.", - "type here": "Tapez ici", - "Scan Driver License": "Permis de conduire", - "Please put your licence in these border": - "Veuillez placer votre licence dans ces limites", - "Camera not initialized yet": "Caméra pas encore configurée", - "Take Image": - "Prends une photo, parce que demain matin, ces lettres partiront.", - "AI Page": "Tu dis que ton système \"IA\"", - "Take Picture Of ID Card": - "Prenez une photo de votre pièce d'identité", - "Take Picture Of Driver License Card": - "Prenez une photo de votre permis de conduire.", - "We are process picture please wait": - "Nous traitons les images, veuillez patienter.", - "There is no data yet.": "Aucune donnée trouvée", - "Name :": "Nom :", - "Drivers License Class:": "Catégorie de permis de conduire :", - "Document Number:": "Numéro du document", - "Address:": "Adresse:", - "Height:": "& Hauteur & #160;:", - "Expiry Date:": "Expiration & #160;:", - "Date of Birth:": "Anniversaire & #160;: @title: group", - "You can't continue with us .": "Ça ne peut pas durer.", - "You should renew Driver license": - "Vous devez renouveler votre permis de conduire", - "Detect Your Face": "Découvrez votre visage", - "Go to next step": "\"", - "scan Car License.": "Vérification de l'immatriculation du véhicule.", - "Name in arabic": "Full Name AR", - "Drivers License Class": "Permis de conduire", - "Date of Birth": "Date de naissance", - "Age": "l’âge", - "Lets check Car license": "Vérifions le permis de conduire", - "Car Kind": "Type de véhicule", - "Car Plate": "Le numéro d'immatriculation ?", - "Lets check License Back Face": - "Vérifions la licence de face arrière", - "Car License Card": "Carte d'immatriculation du véhicule", - "No image selected yet": "Aucune photo sélectionnée pour le moment", - "Made :": "Make", - "model :": "Mod.", - "VIN :": "Structure :", - "year :": "Année", - "ُExpire Date": "Date d'expiration", - "Login Driver": "Se connecter", - "Password must br at least 6 character.": - "Le mot de passe doit comporter au moins 6 caractères.", - "if you don't have account": "Que voulez-vous dire ?", - "Here recorded trips audio": - "Voici les enregistrements audio du voyage", - "Register as Driver": "Inscrivez-vous en tant que chauffeur", - "Privacy Notice": "Avis de confidentialité", - "By selecting \"I Agree\" below, I have reviewed and agree to the Terms of Use and acknowledge the": - "En sélectionnant « J'accepte » ci-dessous, j'ai lu, j'accepte et j'accepte les conditions générales", - ". I am at least 18 years of age.": ". J'ai au moins 18 ans.", - "Log Out Page": "Se Déconnecter", - "Log Off": "Signe.", - "Register Driver": "Le chauffeur...", - "Verify Email For Driver": "Consultez l'e-mail du chauffeur", - "Admin DashBoard": "Tableau de bord d'administration", - "Your name": "Ton... nom.", - "your ride is applied": "Votre course a été appliquée", - "Your password": "Renouveler votre mot de passe", - "LE": "Livre égyptienne", - "JOD": "Monnaie: Dinar jordanien", - "m": "%1 km", - "We search nearst Driver to you": - "Nous recherchons le chauffeur le plus proche", - "please wait till driver accept your order": - "Veuillez attendre que le chauffeur accepte votre demande", - "No accepted orders? Try raising your trip fee to attract riders.": - "Aucune Essayez d'augmenter les frais de course pour attirer des passagers.", - "You should select one": "Vous devez en choisir un", - "The driver accept your order for": - "Votre chauffeur a accepté votre demande de", - "Increase Fee": "Augmenter les frais", - "No, thanks": "Non merci", - "The driver on your way": "Votre chauffeur est en route", - "Total price from": "P.T", - "Order Details Intaleq": "Détails du commande", - "Order Applied": "Commande appliquée", - "accepted your order": "- Retenue.", - "We regret to inform you that another driver has accepted this order.": - "Nous sommes désolés de vous informer qu'un autre chauffeur a accepté cette demande.", - "Selected file:": "Ouvre un fichier existant", - "Your trip cost is": "Les frais de votre course", - "this will delete all files from your device": - "Cela supprimera tous les fichiers de votre appareil", - "you have a negative balance of": "Vous avez un solde négatif de", - "in your": "En toi.", - "Exclusive offers and discounts always with the Intaleq app": - "Offres exclusives et réductions toujours avec l'application de voyage", - "Please go to Car Driver": - "Veuillez vous rendre chez le conducteur de la voiture", - "wallet due to a previous trip.": - "Portefeuille en raison d'une course précédente.", - "Submit Question": "Envoyer la question", - "Please enter your Question.": "Veuillez saisir votre question.", - "Help Details": "Détails de l'aide", - "No trip yet found": "Aucune campagne trouvée", - "No Response yet.": "Il n'y a pas de réponses.", - "You Earn today is": "- On est euh...", - "You Have in": "Vous avez à", - "Total points is": "Le score total est de", - "Total Connection Duration:": "Durée totale de connexion :", - "H and": "H et", - "Passenger name :": "Le voyageur.", - "Cost Of Trip IS": "Coûts des vols par avion spécial", - "Arrival time": "On arrive dans 7 minutes.", - "arrival time to reach your point": - "Heure d'arrivée pour atteindre votre destination", - "For Intaleq and Delivery trips, the price is calculated dynamically. For Comfort trips, the price is based on time and distance": - "Pour les courses et livraisons rapides, le prix est calculé de manière dynamique. Pour des courses confortables, le prix est basé sur la durée et la distance.", - "Hello this is Driver": "Bonjour, je suis le chauffeur", - "Is the Passenger in your Car ?": - "Le passager est-il dans votre véhicule ?", - "Please wait for the passenger to enter the car before starting the trip.": - "Veuillez attendre que le passager entre dans le véhicule avant de commencer la course.", - "No ,still Waiting.": "Non , je t'attends toujours.", - "I arrive you": "Elle t'a eue.", - "I Arrive your site": "Elle t'a eue.", - "You are not in near to passenger location": - "Vous n'êtes pas près de l'emplacement du passager", - "please go to picker location exactly": - "Veuillez vous rendre à l'emplacement exact de la sélection", - "You Can Cancel Trip And get Cost of Trip From": - "Vous pouvez annuler la course et obtenir le coût de la course auprès de", - "Are you sure to cancel?": "Voulez-vous vraiment annuler ?", - "Yes": "Oui", - "Insert Emergincy Number": "Saisir le numéro d'urgence", - "Best choice for comfort car and flexible route and stops point": - "Le meilleur choix pour une voiture confortable, un itinéraire flexible et un point d'arrêt", - "Insert": "En cours d' utilisation", - "This is for delivery or a motorcycle.": - "C'est pour la livraison ou une moto.", - "This trip goes directly from your starting point to your destination for a fixed price. The driver must follow the planned route": - "Cette course va directement de votre point de départ à votre destination pour un tarif forfaitaire. Le chauffeur doit suivre l'itinéraire prévu", - "You can decline a request without any cost": - "Vous pouvez refuser la demande sans frais", - "Perfect for adventure seekers who want to experience something new and exciting": - "Idéal pour les chercheurs d'aventure qui veulent essayer quelque chose de nouveau et d'excitant", - "My current location is:": "Mon emplacement actuel est :", - "and I have a trip on": "et j'ai un voyage à", - "App with Passenger": "Postuler avec le passager", - "You will be pay the cost to driver or we will get it from you on next trip": - "Le coût sera payé au chauffeur ou nous l'obtiendrons de votre part lors de la prochaine course", - "Trip has Steps": "La course comporte des étapes", - "Distance from Passenger to destination is": - "La distance entre le passager et la destination est", - "price is": "C'est cent dollars.", - "This ride type does not allow changes to the destination or additional stops": - "Ce type de course ne permet pas de modifier la destination ou d'effectuer des arrêts supplémentaires", - "This price may be changed": "Ce prix peut changer", - "No SIM card, no problem! Call your driver directly through our app. We use advanced technology to ensure your privacy.": - "Pas de carte SIM, pas de problème ! Contactez directement votre chauffeur via notre application. Nous utilisons une technologie de pointe pour garantir votre confidentialité.", - "This ride type allows changes, but the price may increase": - "Ce type de course peut être modifié, mais le prix peut augmenter", - "message From passenger": "Estafette.", - "Select one message": "Message un.", - "My location is correct. You can search for me using the navigation app": - "Ma position est correcte. Vous pouvez me rechercher à l'aide de l'application de navigation", - "I'm waiting for you": "- Quand vous voulez.", - "Hello, I'm at the agreed-upon location": - "Bonjour, je suis à l'endroit convenu", - "We noticed the Intaleq is exceeding 100 km/h. Please slow down for your safety. If you feel unsafe, you can share your trip details with a contact or call the police using the red SOS button.": - "Nous avons remarqué que la vitesse dépasse 100 km/h. Veuillez ralentir pour votre propre sécurité. Si vous ne vous sentez pas en sécurité, vous pouvez communiquer les détails de votre course à un contact ou appeler la police à l'aide du bouton de détresse rouge.", - "Warning: Intaleqing detected!": - "Avertissement : survitesse détectée !", - "Please help! Contact me as soon as possible.": - "Aide-moi s'il te plaît. Contactez-moi dès que possible.", - "Share Trip Details": "Partagez les détails de la", - "Car Plate is": "Le numéro d'immatriculation ?", - "the 3000 points equal 3000 L.E for you": - "3000 points équivaut à 3000 EGP pour vous", - "So go and gain your money": "Gagnez de l'argent", - "the 3000 points equal 3000 L.E": "3000 points équivaut à 3000 EGP", - "The payment was not approved. Please try again.": - "Paiement non approuvé. Réessayer", - "Payment Failed": "Échec du paiement", - "Error": "ⵜⴰⵣⴳⵍⵜ", - "An error occurred during the payment process.": - "Une erreur s'est produite lors de votre paiement.", - "The payment was approved.": "Paiement approuvé.", - "Payment Successful": "Paiement réussi", - "No ride found yet": "Aucune campagne trouvée", - "Accept Order": "Commande acceptée", - "reject your order.": "Votre Ordre.", - "Bottom Bar Example": "Exemple de barre inférieure", - "Driver phone": "Téléphone du chauffeur", - "Statistics": "& Statistiques", - "Origin": "ORIGINE", - "Destination": "- Destination ?", - "Driver Name": "Nom de pilote & #160;:", - "Driver Car Plate": "Plaque d'immatriculation du conducteur", - "Available for rides": "Disponible pour les courses", - "Scan Id": "Contrôle d'identité", - "Camera not initilaized yet": "Caméra pas encore configurée", - "Scan ID MklGoogle": "Vérification d'identité MklGoogle", - "Language": "Langue ", - "Jordan": "Jordanie", - "USA": "Etats Unis d'Amérique", - "Egypt": "Egypte", - "Turkey": "Turquie", - "Saudi Arabia": "Arabie Saoudite", - "Qatar": "Qatar", - "Bahrain": "Bahreïn", - "Kuwait": "Koweït", - "But you have a negative salary of": - "Mais vous avez un salaire négatif de", - "Promo Code": "Code promo", - "Your trip distance is": "La distance de votre course est de", - "Enter promo code": "Code promo", - "You have promo!": "Vous avez une promotion !", - "Cost Duration": "Durée du coût", - "Duration is": "La durée est", - "Leave": "Quitter", - "Join": "Joindre", - "You Should be select reason.": "Vous devez choisir une raison.", - "\$": "\$", - "Waiting for Driver ...": "En attente du chauffeur ...", - "Latest Recent Trip": "J'ai des choses à faire!", - "from your list": "À partir de votre liste", - "Do you want to change Work location": - "Souhaitez-vous changer de lieu de travail ?", - "Do you want to change Home location": - "Souhaitez-vous changer l'emplacement de la maison", - "We Are Sorry That we dont have cars in your Location!": - "Nous sommes désolés que les voitures ne soient pas disponibles chez vous !", - "Choose from Map": "Sélectionner sur la carte", - "Pick your ride location on the map - Tap to confirm": - "Sélectionnez votre lieu de prise en charge sur la carte - appuyez pour confirmer", - "To Work": "Pour le boulot", - "Are you want to go this site": "Voulez-vous aller à cet endroit", - "Closest & Cheapest": "Le plus proche et le moins cher", - "Work Saved": "Enregistré :", - "Intaleq is the ride-hailing app that is safe, reliable, and accessible.": - "Intaleq est une application de covoiturage sûre, fiable et accessible.", - "With Intaleq, you can get a ride to your destination in minutes.": - "En voyageant, vous pouvez vous rendre à destination en quelques minutes.", - "Intaleq is committed to safety, and all of our captains are carefully screened and background checked.": - "Safar s'engage pour la sécurité, et tous nos commandants sont soigneusement contrôlés et leurs antécédents vérifiés.", - "To Home": "RETOUR À LA PAGE D'ACCUEIL", - "Home Saved": "Enregistré :", - "Destination selected": "Destination sélectionnée", - "Now select start pick": - "Maintenant, choisissez Démarrer la sélection", - "Pick from map": "Sélectionner sur la carte", - "Click here point": "Cliquez ici", - "No Car in your site. Sorry!": - "Il n'y a pas de voiture dans votre région. Ex... Excusez moi.", - "Nearest Car for you about": - "La voiture la plus proche de chez vous est d'environ", - "N/A": "Aucune information", - "From :": "Du :", - "Get Details of Trip": "Obtenir les détails de la course", - "If you want add stop click here": - "Si vous souhaitez ajouter un arrêt, cliquez ici", - "Driver": "ⴰⵎⵏⴷⴰⵀ", - "Where you want go": "D'où viens-tu ?", - "My Card": "Ma carte.", - "Start Record": "Début de la campagne d'enregistrement", - "Wallet": "Un portefeuille.", - "History of Trip": "2.1 Histoire du vol", - "Helping Center": "Centre d'aide", - "Record saved": "Sauvegarde de l'historique effectuée !", - "Trips recorded": "Voyages enregistrés", - "Select Your Country": "Selectionnez votre pays", - "To ensure you receive the most accurate information for your location, please select your country below. This will help tailor the app experience and content to your country.": - "Pour vous assurer d'avoir les informations les plus précises pour votre emplacement, veuillez sélectionner votre pays ci-dessous. Cela vous aidera à personnaliser l'expérience et le contenu de l'application pour votre pays.", - "Are you sure to delete recorded files": - "Êtes-vous sûr de vouloir supprimer les fichiers enregistrés", - "Select recorded trip": "Choisissez une course enregistrée", - "Card Number": "N  de pièce d'identité:", - "Hi, Where to": "Bonjour, oùallez-vous ?", - "Pick your destination from Map": "Sélectionner sur la carte", - "Add Stops": "Ajouter des arrêts", - "Get Direction": "Obtenir une direction", - "Add Location": "Ajouter l'emplacement correctement", - "Switch Rider": "Changer de passager", - "You will arrive to your destination after timer end.": - "Vous arriverez à destination après l'expiration de la minuterie.", - "You can cancel trip": "Vous pouvez annuler la course", - "The driver waitting you in picked location .": - "Votre chauffeur vous attend à l'endroit désigné .", - "Pay with Your": "Payer avec", - "Pay with Credit Card": "- La carte.", - "Payment History": "Historique des paiements", - "Show Promos to Charge": "Afficher les promotions d'expédition", - "Point": "Points", - "Driver Balance": "Portefeuille chauffeur", - "Total Points is": "Le score total est de", - "Total Budget from trips is": "Le budget total des voyages est de", - "Total Amount:": "Montant total", - "Total Budget from trips by": "Budget total des voyages par", - "Credit card is": "Votre carte de crédit.", - "This amount for all trip I get from Passengers": - "Ce montant s'applique à toutes les courses que je reçois de la part de passagers.", - "Pay from my budget": "Payer sur mon budget", - "This amount for all trip I get from Passengers and Collected For me in": - "Ce montant s'applique à toutes les courses que je reçois de la part de passagers collectés pour moi à", - "You can buy points from your budget": - "Vous pouvez acheter des points à partir de votre budget", - "insert amount": "Entrez le montant", - "You can buy Points to let you online": - "Vous pouvez acheter des points pour vous permettre d'accéder en ligne", - "by this list below": "Grâce à cette liste ci-dessous", - "Create Wallet to receive your money": - "Créez un portefeuille pour recevoir votre argent", - "Enter your feedback here": "Saisissez vos commentaires ici", - "Please enter your feedback.": - "Veuillez saisir le texte de vos notes", - "Feedback": "Feedback:", - "Click here to Show it in Map": - "Cliquez ici pour le voir sur la carte", - "Canceled": "Annulé", - "Type your Email": "Votre e-mail", - "No I want": "- Je n'en ai pas envie.", - "Email is": "Email ", - "Phone Number is": "C'est le 92.38.09.06.", - "Date of Birth is": "Année de naissance", - "Sex is": "Le sexe est cardio.", - "Car Details": "Détails du véhicule", - "VIN is": "Structure", - "Color is": "- Sa couleur?", - "Make is": "Make is", - "Model is": "Formulaire de :", - "Year is": "Année", - "Edit Your data": "Modifiez vos informations", - "write vin for your car": - "Notez le numéro de châssis de votre véhicule", - "VIN": - "|||UNTRANSLATED_CONTENT_START|||رقم هيكل السيارة|||UNTRANSLATED_CONTENT_END|||", - "write Color for your car": "Tapez la couleur de votre voiture", - "write Make for your car": "Écrivez une marque pour votre voiture", - "write Model for your car": "Tapez votre modèle de voiture", - "write Year for your car": "Saisissez une année pour votre voiture", - "write Expiration Date for your car": "la date de péremption", - "Tariffs": "Définitions ", - "Minimum fare": "Prix minimum", - "Maximum fare": "Prix maximum", - "Flag-down fee": "Frais d'escale", - "Including Tax": "Incluant...", - "BookingFee": "Frais de réservation", - "Morning": "- Bonjour.", - "from 07:30 till 10:30 (Thursday, Friday, Saturday, Monday)": - "07h30 - 10h30 (jeudi, vendredi, samedi, lundi)", - "Evening": "- Bonsoir.", - "from 12:00 till 15:00 (Thursday, Friday, Saturday, Monday)": - "12h00 - 15h00 (jeudi, vendredi, samedi, lundi)", - "Night": "la nuit", - "You have in account": "Vous avez dans le compte", - "Select Country": "Sélectionner un pays.", - "Ride Today :": "Commandez une course aujourd'hui :", - "After this period": "Après cette période", - "You can't cancel!": "- Vous pouvez plus...", - "from 23:59 till 05:30": "23:59 - 05:30", - "Rate Driver": "Le chauffeur...", - "Total Cost is": "Coût total", - "Write note": "J'écris une lettre de menace.", - "Time to arrive": "Bobby, Qu'elle est notre e. t. a.?", - "Ride Summaries": "Résumés des courses", - "Total Cost": "Coût total", - "Average of Hours of": "Nombre moyen d'heures de travail", - "is ON for this month": "En cours ce mois-ci", - "Days": "Quelques mois, semaines... quelques jours.", - "Total Hours on month": "Nombre total d'heures", - "Counts of Hours on days": "Heures en jours", - "OrderId": "Commande N°", - "created time": "Date de création", - "Intaleq Over": "Et c'est là qu'on l'aura.", - "I will slow down": "Je vais ralentir.", - "Map Passenger": "Carte du passager", - "Be Slowly": "Soyez lent", - "If you want to make Google Map App run directly when you apply order": - "Si vous souhaitez lancer Google Maps directement lorsque vous appliquez la commande", - "You can change the language of the app": - "Vous pouvez modifier la langue de l'application", - "Your Budget less than needed": "Votre budget est sous-estimé", - "You can change the Country to get all features": - "Vous pouvez modifier le pays pour obtenir toutes les fonctionnalités", - "Change Country": "Non-pays" - }, - "it": { - "Order": "Ordine", - "OrderVIP": "Ordine VIP", - "Cancel Trip": "Annulla Viaggio", - "Passenger Cancel Trip": "Passeggero Annulla Viaggio", - "VIP Order": "Ordine VIP", - "The driver accepted your trip": - "L'autista ha accettato il tuo viaggio", - "message From passenger": "Messaggio dal passeggero", - "Cancel": "Annulla", - "Trip Cancelled. The cost of the trip will be added to your wallet.": - "Viaggio Annullato. Il costo del viaggio sarà aggiunto al tuo portafoglio.", - "token change": "cambio token", - "face detect": "rilevamento facciale", - "Face Detection Result": "Risultato Rilevamento Facciale", - "similar": "simile", - "not similar": "non simile", - "Hi ,I will go now": "Ciao, vado ora", - "Passenger come to you": "Il passeggero sta venendo da te", - "Call Income": "Chiamata in Entrata", - "Call Income from Passenger": "Chiamata in Entrata dal Passeggero", - "Criminal Document Required": "Documento Penale Richiesto", - "You should have upload it .": "Avresti dovuto caricarlo.", - "Call End": "Fine Chiamata", - "The order has been accepted by another driver.": - "L'ordine è stato accettato da un altro autista.", - "The order Accepted by another Driver": - "Ordine Accettato da un altro Autista", - "We regret to inform you that another driver has accepted this order.": - "Siamo spiacenti di informarti che un altro autista ha accettato questo ordine.", - "Driver Applied the Ride for You": - "L'Autista Ha Applicato la Corsa per Te", - "Applied": "Applicato", - "Hi ,I Arrive your site": "Ciao, sono arrivato al tuo sito", - "Please go to Car Driver": "Per favore vai dall'Autista", - "Ok I will go now.": "Ok, vado ora.", - "Accepted Ride": "Corsa Accettata", - "Driver Accepted the Ride for You": - "L'Autista Ha Accettato la Corsa per Te", - "Promo": "Promo", - "Show latest promo": "Mostra l'ultima promo", - "Trip Monitoring": "Monitoraggio Viaggio", - "Driver Is Going To Passenger": - "L'Autista Sta Andando dal Passeggero", - "Please stay on the picked point.": - "Per favore rimani nel punto di prelievo selezionato.", - "message From Driver": "Messaggio dall'Autista", - "Trip is Begin": "Il Viaggio è Iniziato", - "Cancel Trip from driver": "Annulla Viaggio dall'autista", - "We will look for a new driver.\nPlease wait.": - "Cercheremo un nuovo autista.\nPer favore aspetta.", - "The driver canceled your ride.": - "L'autista ha annullato la tua corsa.", - "Driver Finish Trip": "L'Autista Ha Finito il Viaggio", - "you will pay to Driver": "pagherai l'Autista", - "Don’t forget your personal belongings.": - "Non dimenticare i tuoi effetti personali.", - "Please make sure you have all your personal belongings and that any remaining fare, if applicable, has been added to your wallet before leaving. Thank you for choosing the Intaleq app": - "Assicurati di avere con te tutti i tuoi effetti personali e che eventuali tariffe rimanenti, se applicabili, siano state aggiunte al tuo portafoglio prima di partire. Grazie per aver scelto l'app Intaleq", - "Finish Monitor": "Termina Monitoraggio", - "Trip finished": "Viaggio finito", - "Call Income from Driver": "Chiamata in Entrata dall'Autista", - "Driver Cancelled Your Trip": "L'Autista Ha Annullato il Tuo Viaggio", - "you will pay to Driver you will be pay the cost of driver time look to your Intaleq Wallet": - "pagherai l'Autista pagherai il costo del tempo dell'autista guarda il tuo Portafoglio Intaleq", - "Order Applied": "Ordine Applicato", - //firebase - - "registration_date": "Data di registrazione", - "expiration_date": "Data di scadenza", - "rating_count": "Recensioni", - "rating_driver": "Valutazione del conducente", - "age": "Età", - "vin": - "Perche' mi affido alla tecnologia. Numero di telaio memorizzato.", - "car_color": "- E' il colore...", - "car_plate": "Colore? Numero di targa?", - "car_model": "Modello dell'auto:", - "education": "Istruzione", - "gender": "Sesso", - "birthdate": "Compleanno", - "Approve Driver Documents": - "Approva i documenti dell'autista partner", - "Total Budget is": "Budget totale", - "You will recieve code in sms message": - "Riceverai il codice in un SMS", - "Please enter": "Inserisci un nome di calendario. @option: check", - "We need your phone number to contact you and to help you receive orders.": - "Abbiamo bisogno del tuo numero di telefono per contattarti e aiutarti a ricevere gli ordini.", - "The full name on your criminal record does not match the one on your driver’s license. Please verify and provide the correct documents.": - "Il nome completo sulla tua fedina penale non corrisponde al nome sulla tua patente di guida. Controlla e fornisci i documenti corretti.", - "The national number on your driver’s license does not match the one on your ID document. Please verify and provide the correct documents.": - "Il numero nazionale sulla patente di guida non corrisponde al numero sul documento d'identità. Controlla e fornisci i documenti corretti.", - "Capture an Image of Your Criminal Record": - "Scatta una foto della tua fedina penale", - "IssueDate": "Data emissione", - "Capture an Image of Your car license front": - "Scatta una foto della tua patente di guida dalla parte anteriore", - "Capture an Image of Your ID Document front": - "Scatta una foto del tuo documento d'identità dalla parte anteriore", - "NationalID": "Numero nazionale", - "FullName": "Nome completo", - "InspectionResult": "Risultato del test", - "Criminal Record": "Fedina Penale ", - "The email or phone number is already registered.": - "L'e-mail o il numero di telefono sono già registrati.", - "To become a ride-sharing driver on the Intaleq app, you need to upload your driver's license, ID document, and car registration document. Our AI system will instantly review and verify their authenticity in just 2-3 minutes. If your documents are approved, you can start working as a driver on the Intaleq app. Please note, submitting fraudulent documents is a serious offense and may result in immediate termination and legal consequences.": - "Per diventare un autista partner in condivisione nell'app Viaggi, devi caricare la patente di guida, il documento di identità e il documento di immatricolazione del veicolo. Il nostro sistema di intelligenza artificiale esaminerà e verificherà immediatamente la sua autenticità in soli 2-3 minuti. Se i tuoi documenti sono stati approvati, puoi iniziare a lavorare come autista partner nell'app Viaggi. Si prega di notare che fornire documenti falsi è un reato grave e può comportare la risoluzione immediata e conseguenze legali.", - "Documents check": "Verifica del documento", - "Driver's License": "La patente di guida.", - "License Type": "Passa?", - "National Number": "N. ID nazionale: ", - "Name (Arabic)": "Nome (arabo)", - "Name (English)": "- Inglese...", - "Address": "Indirizzo ", - "Issue Date": "Data emissione", - "Expiry Date": "Data di scadenza", - "License Categories": "Passa?", - "driver_license": "La patente di guida.", - "Capture an Image of Your Driver License": - "Scatta una foto della tua patente di guida", - "ID Documents Back": "Comparsa di documenti di identità", - "National ID": "Documento d'identità", - "Occupation": "Professione ", - "Gender": "Sesso", - "Religion": "La religione.", - "Marital Status": "Stato Civile", - "Full Name (Marital)": "Nome completo", - "Expiration Date": "Data di scadenza", - "Capture an Image of Your ID Document Back": - "Scatta una foto del retro del tuo documento d'identità", - "ID Documents Front": "Fronte dei documenti di identificazione", - "First Name": "Nome", - "CardID": "Scatta una foto del retro del tuo documento d'identità", - "Full Name": "Nome completo", - "Vehicle Details Front": "Dettagli del veicolo anteriore", - "Plate Number": "Numero di targa", - "Owner Name": - "|||UNTRANSLATED_CONTENT_START|||اسم المالك|||UNTRANSLATED_CONTENT_END|||", - "Vehicle Details Back": "Di nuovo i dettagli del veicolo", - "Make": "A %1", - "Model": "Modello dell'auto:", - "Year": "Anno", - "Chassis": "Telaio", - "Color": "- E' il colore...", - "Displacement": "Schemi sostituzioni", - "Fuel": "Alimentazione", - "Tax Expiry Date": "Data di scadenza", - "Inspection Date": "Data esame:", - "Capture an Image of Your car license back": - "Scatta di nuovo una foto della tua patente di guida", - "Capture an Image of Your Driver’s License": - "Scatta una foto della tua patente di guida", - "Sign in with Google for easier email and name entry": - "Accedi con Google per facilitare l'inserimento di email e nome", - "You will choose allow all the time to be ready receive orders": - "Sceglierai di consentire sempre gli ordini già pronti", - "Welcome to Intaleq!": "Benvenuto in Safar!", - "Get to your destination quickly and easily.": - "Raggiungi la tua destinazione in modo rapido e semplice.", - "Enjoy a safe and comfortable ride.": - "Goditi una corsa sicura e confortevole.", - "Choose Language": "Scegli la lingua", - "Login": "Chiamo per il controllo.", - "Pay with Wallet": "Paga con il portafoglio", - "Invalid MPIN": "Codice MPIN non valido", - "Invalid OTP": "Codice di verifica non valido", - "Enter your email address": "Immetti il tuo indirizzo e-mail", - "Please enter Your Email.": "Inserisci...", - "Enter your phone number": "Inserisci il tuo numero di telefono", - "Please enter your phone number.": "Please enter your mob.", - "Please enter Your Password.": "Immetti la password", - "Submit": "Hut!", - "if you dont have account": "- Se non le dispiace...", - "Register": "Contribuisci.", - "Accept Ride's Terms & Review Privacy Notice": - "Accetta i termini della corsa e consulta l'informativa sulla privacy", - "By selecting 'I Agree' below, I have reviewed and agree to the Terms of Use and acknowledge the Privacy Notice. I am at least 18 years of age.": - "Selezionando \"Accetto\" di seguito, ho letto e accetto i Termini di utilizzo e accetto l'Informativa sulla privacy.Almeno un anno", - "I Agree": "- Concordo.", - "First name": "Nome", - "Enter your first name": "Il nome di battesimo.", - "Please enter your first name.": "Inserisci il tuo nome.", - "Last name": "Cognome.", - "Enter your last name": "Cognome.", - "Please enter your last name.": "Inserisci il tuo nome.", - "City": "Città", - "Please enter your City.": "Inserisci...", - "Male": "Maschio", - "Female": "Femmina", - "Verify Email": "Convalida e-mail", - "We sent 5 digit to your Email provided": - "Abbiamo inviato 5 cifre all'email che ci hai fornito", - "5 digit": "Pin(5cifre)", - "Send Verification Code": - "Abbiamo un dardo che sta cercando di contattarci.", - "Your Ride Duration is": "La durata del tuo viaggio è", - "You will be thier in": "Li avrai in", - "You trip distance is": "La distanza del tuo viaggio è", - "Fee is": "La commissione è", - "To :": "a:", - "Add Promo": "Aggiungi vista", - "Confirm Selection": "Conferma selezione", - "distance is": "La distanza è", - "duration is": "La durata è", - "I don't need a ride anymore": "Non ne ho piu' bisogno.", - "I was just trying the application": "Stavo solo provando l'app", - "No driver accepted my request": - "Nessun autista partner ha accettato il mio ordine", - "I added the wrong pick-up/drop-off location": - "Hai aggiunto un punto di partenza/arrivo errato", - "I don't have a reason": "- lo non l'ho trovata.", - "Other": "Altro", - "Can we know why you want to cancel Ride ?": - "Possiamo sapere perché vuoi cancellare la corsa?", - "Cancel Ride": "- Annullare, annullare!", - "Add Payment Method": "Un metodo di pagamento?", - "Your Wallet balance is": "Il saldo del tuo portafoglio è", - "Ride Wallet": "Portafoglio da viaggio", - "Payment Method": "MODALITÀ’ DI PAGAMENTO", - "Type here Place": "Va bene qui.", - "Are You sure to ride to": "Sei sicuro di voler viaggiare fino a", - "Confirm": "Conferma", - "Back": "- Ne abbiamo parlato! Ma guarda, una reunion della serie.", - "You are Delete": "Stai eliminando", - "Deleted": "Eliminato", - "You Dont Have Any places yet !": "Non hai ancora nessun posto!", - "Favorite Places": "Ii tuo genere di posto?", - "From : Current Location": "posizione attuale:", - "Where to": "Dove?", - "Notifications": "Avvisamenti ", - "Profile": "Profilo", - "Home": "Homepage", - "My Cared": "MyCurt", - "Add Card": "Aggiungi carta", - "Add Credit Card": "Carta di Credito", - "Please enter the cardholder name": - "Inserisci il nome del titolare della carta", - "Please enter the expiry date": "Data scadenza", - "Please enter the CVV code": - "Inserisci il codice di verifica della carta", - "Go To Favorite Places": "Vai ai luoghi preferiti", - "Go to this Target": "Vai a questo obiettivo", - "My Profile": "Panoramica estensione", - "Sign Out": "Mi disconnetto.", - "Home Page": "Homepage", - "Are you want to go to this site": "Vuoi andare in questa posizione", - "MyLocation": "Il mio sito web?", - "my location": "Il mio sito web?", - "Target": "B-E-R... Bersaglio.", - "Update": "- Aggiorna... aggiorna...", - "You Should choose rate figure": "Devi scegliere il numero corretto", - "Login Captin": "Chiamo per il controllo.", - "Register Captin": "Registrazione del capitano", - "Send Verfication Code": "Invia codice di verifica", - "End Ride": "- ln carrozza!", - "Minute": "Minuto", - "Go to passenger Location now": - "Vai subito alla posizione dell'utente", - "Duration of the Ride is": "La durata del viaggio è", - "Distance of the Ride is": "La distanza del viaggio è", - "Name of the Passenger is": "Il nome dell'utente è", - "Hello this is Captain": "Ciao, sono il capitano", - "Start the Ride": "Inizia corsa", - "Please Wait If passenger want To Cancel!": - "Attendi se l'utente desidera cancellare la corsa!", - "Total Duration:": "Durata totale:", - "Active Duration:": "Durata fase attiva", - "Waiting for Captin ...": "Aspettando il capitano ...", - "Age is": "- L'eta' e' un numero.", - "Rating is": "- La valutazione e'...", - "to arrive you.": "per raggiungerti.", - "Order History": "Registra cronologia ordini", - "My Wallet": "Dov'è il mio portafogli?", - "Tariff": "tariffa", - "Settings": "& Impostazioni", - "Feed Back": "Riflessi?", - "Promos": "PROMOZIONI", - "Please enter a valid 16-digit card number": - "Inserisci un numero di ordine d'acquisto valido.", - "Add Phone": "Telefono", - "Please enter a phone number": "Inserisci il numero di telefono", - "You dont Add Emergency Phone Yet!": - "Non hai ancora aggiunto un telefono di emergenza!", - "You will arrive to your destination after": - "Arriverai a destinazione dopo", - "You can cancel Ride now": "Ora puoi cancellare la corsa", - "You Can cancel Ride After Captain did not come in the time": - "Puoi cancellare la corsa dopo che il capitano non è arrivato in tempo", - "If you in Car Now. Press Start The Ride": - "Se sei in macchina in questo momento. Tocca Inizia corsa.", - "You Dont Have Any amount in": "Non hai alcun importo in", - "Wallet!": "Il portafoglio.", - "You Have": "Ce l'avevi tu!", - "Save Credit Card": "Conserva carta di credito", - "Show Promos": "Offerte", - "10 and get 4% discount": "10 e ottieni il 4% di sconto", - "20 and get 6% discount": "20 e ottieni il 6% di sconto", - "40 and get 8% discount": "40 e ottieni l'8% di sconto", - "100 and get 11% discount": "100% e 11% di sconto", - "Pay with Your PayPal": "Paga con PayPal", - "You will choose one of above !": - "Sceglierai una delle opzioni di cui sopra!", - "Cancel": "Annullare", - "Delete My Account": "Elimina il mio account", - "Edit Profile": "Modifier le profil", - "Name": "Nom", - "Update Gender": "Mettre à jour le sexe", - "Education": "Les études", - "Update Education": ":: Moderniser l'enseignement;", - "Employment Type": "Catégorie de personnel", - "SOS Phone": "Mobile", - "High School Diploma": "BACCALAUREAT DE L'ENSEIGNEMENT", - "Associate Degree": "Diplôme conjoint", - "Bachelor's Degree": "Grade de bachelier", - "Master's Degree": "Master", - "Doctoral Degree": "Docteur en philosophie.", - "Promos For today": "Promotions", - "Copy this Promo to use it in your Ride!": - "Copiez cette promotion pour l'utiliser lors de votre voyage !", - "To change some Settings": "Pour modifier certains paramètres", - "To change Language the App": - "Pour modifier la langue de l'application", - "Order Request Page": "Page de demande de commande", - "Rouats of Trip": "Tripp.", - "Passenger Name is": "Voyageur.", - "Total From Passenger is": "Le total du passager est", - "Duration To Passenger is": "Durée jusqu'au passager", - "Distance To Passenger is": "distance par rapport au passager est", - "Total For You is": "Le total pour vous est de", - "Distance is": "Distance", - "KM": "Km", - "Duration of Trip is": "La durée de la course est de", - "Minutes": "Minutes", - "Apply Order": "Appliquer la commande", - "Refuse Order": "- Demande rejetée.", - "Rate Captain": "Cote de capitaine", - "Enter your Note": "J'ai eu votre mot.", - "Type something...": "Écrire quelque chose...", - "Submit rating": "Fournir une évaluation", - "Rate Passenger": "Note du passager", - "Ride Summary": "Résumé de la course", - "welcome_message": "Insérer « & #160; Bonjour monde & #160; »", - "app_description": "ApplicationDescription", - "get_to_destination": - "Destination atteinte. Déblocage des contrôles manuels.", - "get_a_ride": "Commandez une course", - "safe_and_comfortable": "Sûr et confortable", - "committed_to_safety": "Engagé pour la sécurité", - "Driver Applied the Ride for You": - "Un chauffeur qui a effectué la course pour vous", - "Show latest promo": "Afficher la dernière promotion", - "Cancel Trip": "Le vol est annulé.", - "Passenger Cancel Trip": "Le passager annule la course", - "Please stay on the picked point.": - "Veuillez rester au point sélectionné.", - "Trip is Begin": "Votre initiation a commencé.", - "Hi ,I will go now": "Bonjour, j'y vais maintenant", - "Passenger come to you": "Votre passager vient vous voir", - "Hi ,I Arrive your site": - "Bonjour, vous avez atteint votre position.", - "Driver Finish Trip": "Fin de la course du chauffeur", - "you will pay to Driver": "Sérieux ? Probablement avec mon argent.", - "Driver Cancel Your Trip": "Annulez votre course, chauffeur.", - "you will pay to Driver you will be pay the cost of driver time look to your Intaleq Wallet": - "Vous paierez le chauffeur Vous paierez le coût du temps du chauffeur Regardez votre portefeuille Intaleq", - "I will go now": "- J'y vais.", - "You Have Tips": "Astuces", - "tips": "Des paroles sages ?", - "Total is": "Chiffre total est de 15", - "No,I want": "- Je n'en ai pas envie.", - "Your fee is": "Vos frais sont de", - "Do you want to pay Tips for this Driver": - "Souhaitez-vous laisser un pourboire à ce chauffeur ?", - "Tip is": "Monconseil", - "Camera Access Denied.": "Accès à la caméra refusé.", - "Open Settings": - "|||UNTRANSLATED_CONTENT_START|||افتح الإعدادات|||UNTRANSLATED_CONTENT_END|||", - "GPS Required Allow !.": "Le GPS doit être activé !", - "Your Account is Deleted": "Votre compte a été supprimé", - "Are you sure to delete your account?": - "Voulez-vous vraiment supprimer votre compte ?", - "Your data will be erased after 2 weeks": - "Vos données seront effacées après 2 semaines", - "And you will can't return to use app after 1 month": - "Vous pourrez revenir à l'application après un mois", - "Enter Your First Name": "Saisissez votre nom", - "Are you Sure to LogOut?": "Voulez-vous vraiment vous déconnecter?", - "Email Wrong": "Email ", - "Email you inserted is Wrong.": - "L'adresse e-mail que vous avez saisie est incorrecte.", - "You have finished all times": "J'en ai assez !", - "if you want help you can email us here": - "Si vous souhaitez de l'aide, vous pouvez nous envoyer un e-mail ici", - "Thanks": "Merci.", - "Email Us": "Envoyez-nous un e-mail", - "I cant register in your app in face detection": - "Je ne peux pas m'inscrire à votre application avec la détection de visage", - "Hi": "-C'est un plaisir. -Hello.", - "No face detected": "Aucun scanner n'a été détécté", - "Image detecting result is": - "Le résultat de la détection d'image est", - "from 3 times Take Attention": "que 3 fois attirent votre attention", - "Be sure for take accurate images please": - "Assurez-vous de prendre des photos précises s'il vous plaît", - "You have": "- Euh...", - "image verified": "La photo est notariée", - "Next": "Suivant", - "There is no help Question here": "Ouais, pas d'aide ici.", - "Call End": "Terminer l'appel", - "You dont have Points": "- Vous n'avez pas...", - "You Are Stopped For this Day !": - "Vous avez été mis en pause pour la journée !", - "You must be charge your Account": - "Vous devez recharger votre compte", - "You Refused 3 Rides this Day that is the reason": - "Vous avez refusé 3 courses aujourd'hui et c'est pourquoi", - "See you Tomorrow!": "Je te verrais demain.", - "Recharge my Account": "Recharger mon compte", - "Ok , See you Tomorrow": "D'accord, on se voit demain.", - "You are Stopped": "Vous êtes arrêté", - "Connected": "Online", - "Not Connected": "Offiline", - "Your are far from passenger location": - "Vous êtes loin de l'emplacement des passagers", - "go to your passenger location before": - "Accédez à l'emplacement de votre passager avant le", - "Passenger cancel trip": "Le passager a annulé la course", - "You will get cost of your work for this trip": - "Vous obtiendrez le coût de votre entreprise pour cette course", - "in your wallet": "Elle est dans ton portefeuille.", - "you gain": "Vous gagnerez", - "Order Cancelled": "Commande annulée", - "Order Cancelled by Passenger": "Demande annulée par le passager", - "Success": "Je l'ai.", - "Feedback data saved successfully": - "Données d'évaluation enregistrées avec succès", - "No Promo for today .": "Pas de promotion pour aujourd'hui.", - "Select your destination": "Sélectionnez la destination;", - "Search for your Start point": "Trouvez votre point de départ", - "Search for waypoint": "Rechercher un point WIPOINT", - "Current Location": "Utiliser la position actuelle", - "Add Location 1": "Emplacement & #160;: %1", - "You must Verify email !.": "Relever le courriel", - "Cropper": "Récolte", - "Saved Sucssefully": "Bien reçu.", - "Select Date": "Choisir une nouvelle date", - "Birth Date": "Date de naissance", - "Ok": "D'accord.", - "the 500 points equal 30 JOD": "500 points équivaut à 30 JOD", - "the 500 points equal 30 JOD for you": - "500 points équivaut à 30 JOD pour vous", - "token updated": "Code mis à jour", - "Add Location 2": "Ajouter un emplacement 2", - "Add Location 3": "Ajouter un emplacement 3", - "Add Location 4": "Ajouter un emplacement 4", - "Waiting for your location": "En attente de votre localisation", - "Search for your destination": "Trouvez votre destination", - "Hi! This is": "Bienvenue \"moi\": c' est ça.", - "I am using": "Du matériel que j'utilisais.", - "to ride with": "pour rouler avec", - "as the driver.": "On dirait un chauffeur.", - "is driving a": "- Je vais le tenter comme ça. - Conduire.", - "with license plate": "Avec une plaque d'immatriculation", - "I am currently located at": "Je suis actuellement en", - "Please go to Car now": "S'il te plaît, va-t-en maintenant.", - "If you need to reach me, please contact the driver directly at": - "Si vous avez besoin de me joindre, veuillez contacter directement le chauffeur au", - "No Car or Driver Found in your area.": - "Aucune voiture ou chauffeur trouvé dans votre région.", - "Please Try anther time": "Réessayer", - "There no Driver Aplly your order sorry for that": - "Aucun chauffeur ne peut répondre à votre demande, nous sommes désolés.", - "Trip Cancelled": "Course annulée", - "The Driver Will be in your location soon .": - "Votre chauffeur arrivera bientôt chez vous.", - "The distance less than 500 meter.": - "La distance est inférieure à 500 mètres.", - "Promo End !": "- C'est seulement jusqu'au spectacle.", - "There is no notification yet": "Aucune notification pour le moment", - "Use Touch ID or Face ID to confirm payment": - "Utilisez Touch ID ou Face ID pour confirmer le paiement", - "Contact us for any questions on your order.": - "Contactez-nous pour toute question concernant votre commande.", - "Pyament Cancelled .": "Le paiement a été annulé.", - "type here": "Tapez ici", - "Scan Driver License": "Permis de conduire", - "Please put your licence in these border": - "Veuillez placer votre licence dans ces limites", - "Camera not initialized yet": "Caméra pas encore configurée", - "Take Image": - "Prends une photo, parce que demain matin, ces lettres partiront.", - "AI Page": "Tu dis que ton système \"IA\"", - "Take Picture Of ID Card": - "Prenez une photo de votre pièce d'identité", - "Take Picture Of Driver License Card": - "Prenez une photo de votre permis de conduire.", - "We are process picture please wait": - "Nous traitons les images, veuillez patienter.", - "There is no data yet.": "Aucune donnée trouvée", - "Name :": "Nom :", - "Drivers License Class:": "Catégorie de permis de conduire :", - "Document Number:": "Numéro du document", - "Address:": "Adresse:", - "Height:": "& Hauteur & #160;:", - "Expiry Date:": "Expiration & #160;:", - "Date of Birth:": "Anniversaire & #160;: @title: group", - "You can't continue with us .": "Ça ne peut pas durer.", - "You should renew Driver license": - "Vous devez renouveler votre permis de conduire", - "Detect Your Face": "Découvrez votre visage", - "Go to next step": "\"", - "scan Car License.": "Vérification de l'immatriculation du véhicule.", - "Name in arabic": "Full Name AR", - "Drivers License Class": "Permis de conduire", - "Date of Birth": "Date de naissance", - "Age": "l’âge", - "Lets check Car license": "Vérifions le permis de conduire", - "Car Kind": "Type de véhicule", - "Car Plate": "Le numéro d'immatriculation ?", - "Lets check License Back Face": - "Vérifions la licence de face arrière", - "Car License Card": "Carte d'immatriculation du véhicule", - "No image selected yet": "Aucune photo sélectionnée pour le moment", - "Made :": "Make", - "model :": "Mod.", - "VIN :": "Structure :", - "year :": "Année", - "ُExpire Date": "Date d'expiration", - "Login Driver": "Se connecter", - "Password must br at least 6 character.": - "Le mot de passe doit comporter au moins 6 caractères.", - "if you don't have account": "Que voulez-vous dire ?", - "Here recorded trips audio": - "Voici les enregistrements audio du voyage", - "Register as Driver": "Inscrivez-vous en tant que chauffeur", - "Privacy Notice": "Avis de confidentialité", - "By selecting \"I Agree\" below, I have reviewed and agree to the Terms of Use and acknowledge the": - "En sélectionnant « J'accepte » ci-dessous, j'ai lu, j'accepte et j'accepte les conditions générales", - ". I am at least 18 years of age.": ". J'ai au moins 18 ans.", - "Log Out Page": "Se Déconnecter", - "Log Off": "Signe.", - "Register Driver": "Le chauffeur...", - "Verify Email For Driver": "Consultez l'e-mail du chauffeur", - "Admin DashBoard": "Tableau de bord d'administration", - "Your name": "Ton... nom.", - "your ride is applied": "Votre course a été appliquée", - "Your password": "Renouveler votre mot de passe", - "LE": "Livre égyptienne", - "JOD": "Monnaie: Dinar jordanien", - "m": "%1 km", - "We search nearst Driver to you": - "Nous recherchons le chauffeur le plus proche", - "please wait till driver accept your order": - "Veuillez attendre que le chauffeur accepte votre demande", - "No accepted orders? Try raising your trip fee to attract riders.": - "Aucune Essayez d'augmenter les frais de course pour attirer des passagers.", - "You should select one": "Vous devez en choisir un", - "The driver accept your order for": - "Votre chauffeur a accepté votre demande de", - "Increase Fee": "Augmenter les frais", - "No, thanks": "Non merci", - "The driver on your way": "Votre chauffeur est en route", - "Total price from": "P.T", - "Order Details Intaleq": "Détails du commande", - "Order Applied": "Commande appliquée", - "accepted your order": "- Retenue.", - "We regret to inform you that another driver has accepted this order.": - "Nous sommes désolés de vous informer qu'un autre chauffeur a accepté cette demande.", - "Selected file:": "Ouvre un fichier existant", - "Your trip cost is": "Les frais de votre course", - "this will delete all files from your device": - "Cela supprimera tous les fichiers de votre appareil", - "you have a negative balance of": "Vous avez un solde négatif de", - "in your": "En toi.", - "Exclusive offers and discounts always with the Intaleq app": - "Offres exclusives et réductions toujours avec l'application de voyage", - "Please go to Car Driver": - "Veuillez vous rendre chez le conducteur de la voiture", - "wallet due to a previous trip.": - "Portefeuille en raison d'une course précédente.", - "Submit Question": "Envoyer la question", - "Please enter your Question.": "Veuillez saisir votre question.", - "Help Details": "Détails de l'aide", - "No trip yet found": "Aucune campagne trouvée", - "No Response yet.": "Il n'y a pas de réponses.", - "You Earn today is": "- On est euh...", - "You Have in": "Vous avez à", - "Total points is": "Le score total est de", - "Total Connection Duration:": "Durée totale de connexion :", - "H and": "H et", - "Passenger name :": "Le voyageur.", - "Cost Of Trip IS": "Coûts des vols par avion spécial", - "Arrival time": "On arrive dans 7 minutes.", - "arrival time to reach your point": - "Heure d'arrivée pour atteindre votre destination", - "For Intaleq and Delivery trips, the price is calculated dynamically. For Comfort trips, the price is based on time and distance": - "Pour les courses et livraisons rapides, le prix est calculé de manière dynamique. Pour des courses confortables, le prix est basé sur la durée et la distance.", - "Hello this is Driver": "Bonjour, je suis le chauffeur", - "Is the Passenger in your Car ?": - "Le passager est-il dans votre véhicule ?", - "Please wait for the passenger to enter the car before starting the trip.": - "Veuillez attendre que le passager entre dans le véhicule avant de commencer la course.", - "No ,still Waiting.": "Non , je t'attends toujours.", - "I arrive you": "Elle t'a eue.", - "I Arrive your site": "Elle t'a eue.", - "You are not in near to passenger location": - "Vous n'êtes pas près de l'emplacement du passager", - "please go to picker location exactly": - "Veuillez vous rendre à l'emplacement exact de la sélection", - "You Can Cancel Trip And get Cost of Trip From": - "Vous pouvez annuler la course et obtenir le coût de la course auprès de", - "Are you sure to cancel?": "Voulez-vous vraiment annuler ?", - "Yes": "Oui", - "Insert Emergincy Number": "Saisir le numéro d'urgence", - "Best choice for comfort car and flexible route and stops point": - "Le meilleur choix pour une voiture confortable, un itinéraire flexible et un point d'arrêt", - "Insert": "En cours d' utilisation", - "This is for delivery or a motorcycle.": - "C'est pour la livraison ou une moto.", - "This trip goes directly from your starting point to your destination for a fixed price. The driver must follow the planned route": - "Cette course va directement de votre point de départ à votre destination pour un tarif forfaitaire. Le chauffeur doit suivre l'itinéraire prévu", - "You can decline a request without any cost": - "Vous pouvez refuser la demande sans frais", - "Perfect for adventure seekers who want to experience something new and exciting": - "Idéal pour les chercheurs d'aventure qui veulent essayer quelque chose de nouveau et d'excitant", - "My current location is:": "Mon emplacement actuel est :", - "and I have a trip on": "et j'ai un voyage à", - "App with Passenger": "Postuler avec le passager", - "You will be pay the cost to driver or we will get it from you on next trip": - "Le coût sera payé au chauffeur ou nous l'obtiendrons de votre part lors de la prochaine course", - "Trip has Steps": "La course comporte des étapes", - "Distance from Passenger to destination is": - "La distance entre le passager et la destination est", - "price is": "C'est cent dollars.", - "This ride type does not allow changes to the destination or additional stops": - "Ce type de course ne permet pas de modifier la destination ou d'effectuer des arrêts supplémentaires", - "This price may be changed": "Ce prix peut changer", - "No SIM card, no problem! Call your driver directly through our app. We use advanced technology to ensure your privacy.": - "Pas de carte SIM, pas de problème ! Contactez directement votre chauffeur via notre application. Nous utilisons une technologie de pointe pour garantir votre confidentialité.", - "This ride type allows changes, but the price may increase": - "Ce type de course peut être modifié, mais le prix peut augmenter", - "message From passenger": "Estafette.", - "Select one message": "Message un.", - "My location is correct. You can search for me using the navigation app": - "Ma position est correcte. Vous pouvez me rechercher à l'aide de l'application de navigation", - "I'm waiting for you": "- Quand vous voulez.", - "Hello, I'm at the agreed-upon location": - "Bonjour, je suis à l'endroit convenu", - "We noticed the Intaleq is exceeding 100 km/h. Please slow down for your safety. If you feel unsafe, you can share your trip details with a contact or call the police using the red SOS button.": - "Nous avons remarqué que la vitesse dépasse 100 km/h. Veuillez ralentir pour votre propre sécurité. Si vous ne vous sentez pas en sécurité, vous pouvez communiquer les détails de votre course à un contact ou appeler la police à l'aide du bouton de détresse rouge.", - "Warning: Intaleqing detected!": - "Avertissement : survitesse détectée !", - "Please help! Contact me as soon as possible.": - "Aide-moi s'il te plaît. Contactez-moi dès que possible.", - "Share Trip Details": "Partagez les détails de la", - "Car Plate is": "Le numéro d'immatriculation ?", - "the 3000 points equal 3000 L.E for you": - "3000 points équivaut à 3000 EGP pour vous", - "So go and gain your money": "Gagnez de l'argent", - "the 3000 points equal 3000 L.E": "3000 points équivaut à 3000 EGP", - "The payment was not approved. Please try again.": - "Paiement non approuvé. Réessayer", - "Payment Failed": "Échec du paiement", - "Error": "ⵜⴰⵣⴳⵍⵜ", - "An error occurred during the payment process.": - "Une erreur s'est produite lors de votre paiement.", - "The payment was approved.": "Paiement approuvé.", - "Payment Successful": "Paiement réussi", - "No ride found yet": "Aucune campagne trouvée", - "Accept Order": "Commande acceptée", - "reject your order.": "Votre Ordre.", - "Bottom Bar Example": "Exemple de barre inférieure", - "Driver phone": "Téléphone du chauffeur", - "Statistics": "& Statistiques", - "Origin": "ORIGINE", - "Destination": "- Destination ?", - "Driver Name": "Nom de pilote & #160;:", - "Driver Car Plate": "Plaque d'immatriculation du conducteur", - "Available for rides": "Disponible pour les courses", - "Scan Id": "Contrôle d'identité", - "Camera not initilaized yet": "Caméra pas encore configurée", - "Scan ID MklGoogle": "Vérification d'identité MklGoogle", - "Language": "Langue ", - "Jordan": "Jordanie", - "USA": "Etats Unis d'Amérique", - "Egypt": "Egypte", - "Turkey": "Turquie", - "Saudi Arabia": "Arabie Saoudite", - "Qatar": "Qatar", - "Bahrain": "Bahreïn", - "Kuwait": "Koweït", - "But you have a negative salary of": - "Mais vous avez un salaire négatif de", - "Promo Code": "Code promo", - "Your trip distance is": "La distance de votre course est de", - "Enter promo code": "Code promo", - "You have promo!": "Vous avez une promotion !", - "Cost Duration": "Durée du coût", - "Duration is": "La durée est", - "Leave": "Quitter", - "Join": "Joindre", - "You Should be select reason.": "Vous devez choisir une raison.", - "\$": "\$", - "Waiting for Driver ...": "En attente du chauffeur ...", - "Latest Recent Trip": "J'ai des choses à faire!", - "from your list": "À partir de votre liste", - "Do you want to change Work location": - "Souhaitez-vous changer de lieu de travail ?", - "Do you want to change Home location": - "Souhaitez-vous changer l'emplacement de la maison", - "We Are Sorry That we dont have cars in your Location!": - "Nous sommes désolés que les voitures ne soient pas disponibles chez vous !", - "Choose from Map": "Sélectionner sur la carte", - "Pick your ride location on the map - Tap to confirm": - "Sélectionnez votre lieu de prise en charge sur la carte - appuyez pour confirmer", - "To Work": "Pour le boulot", - "Are you want to go this site": "Voulez-vous aller à cet endroit", - "Closest & Cheapest": "Le plus proche et le moins cher", - "Work Saved": "Enregistré :", - "Intaleq is the ride-hailing app that is safe, reliable, and accessible.": - "Intaleq est une application de covoiturage sûre, fiable et accessible.", - "With Intaleq, you can get a ride to your destination in minutes.": - "En voyageant, vous pouvez vous rendre à destination en quelques minutes.", - "Intaleq is committed to safety, and all of our captains are carefully screened and background checked.": - "Safar s'engage pour la sécurité, et tous nos commandants sont soigneusement contrôlés et leurs antécédents vérifiés.", - "To Home": "RETOUR À LA PAGE D'ACCUEIL", - "Home Saved": "Enregistré :", - "Destination selected": "Destination sélectionnée", - "Now select start pick": - "Maintenant, choisissez Démarrer la sélection", - "Pick from map": "Sélectionner sur la carte", - "Click here point": "Cliquez ici", - "No Car in your site. Sorry!": - "Il n'y a pas de voiture dans votre région. Ex... Excusez moi.", - "Nearest Car for you about": - "La voiture la plus proche de chez vous est d'environ", - "N/A": "Aucune information", - "From :": "Du :", - "Get Details of Trip": "Obtenir les détails de la course", - "If you want add stop click here": - "Si vous souhaitez ajouter un arrêt, cliquez ici", - "Driver": "ⴰⵎⵏⴷⴰⵀ", - "Where you want go": "D'où viens-tu ?", - "My Card": "Ma carte.", - "Start Record": "Début de la campagne d'enregistrement", - "Wallet": "Un portefeuille.", - "History of Trip": "2.1 Histoire du vol", - "Helping Center": "Centre d'aide", - "Record saved": "Sauvegarde de l'historique effectuée !", - "Trips recorded": "Voyages enregistrés", - "Select Your Country": "Selectionnez votre pays", - "To ensure you receive the most accurate information for your location, please select your country below. This will help tailor the app experience and content to your country.": - "Pour vous assurer d'avoir les informations les plus précises pour votre emplacement, veuillez sélectionner votre pays ci-dessous. Cela vous aidera à personnaliser l'expérience et le contenu de l'application pour votre pays.", - "Are you sure to delete recorded files": - "Êtes-vous sûr de vouloir supprimer les fichiers enregistrés", - "Select recorded trip": "Choisissez une course enregistrée", - "Card Number": "N  de pièce d'identité:", - "Hi, Where to": "Bonjour, oùallez-vous ?", - "Pick your destination from Map": "Sélectionner sur la carte", - "Add Stops": "Ajouter des arrêts", - "Get Direction": "Obtenir une direction", - "Add Location": "Ajouter l'emplacement correctement", - "Switch Rider": "Changer de passager", - "You will arrive to your destination after timer end.": - "Vous arriverez à destination après l'expiration de la minuterie.", - "You can cancel trip": "Vous pouvez annuler la course", - "The driver waitting you in picked location .": - "Votre chauffeur vous attend à l'endroit désigné .", - "Pay with Your": "Payer avec", - "Pay with Credit Card": "- La carte.", - "Payment History": "Historique des paiements", - "Show Promos to Charge": "Afficher les promotions d'expédition", - "Point": "Points", - "Driver Balance": "Portefeuille chauffeur", - "Total Points is": "Le score total est de", - "Total Budget from trips is": "Le budget total des voyages est de", - "Total Amount:": "Montant total", - "Total Budget from trips by": "Budget total des voyages par", - "Credit card is": "Votre carte de crédit.", - "This amount for all trip I get from Passengers": - "Ce montant s'applique à toutes les courses que je reçois de la part de passagers.", - "Pay from my budget": "Payer sur mon budget", - "This amount for all trip I get from Passengers and Collected For me in": - "Ce montant s'applique à toutes les courses que je reçois de la part de passagers collectés pour moi à", - "You can buy points from your budget": - "Vous pouvez acheter des points à partir de votre budget", - "insert amount": "Entrez le montant", - "You can buy Points to let you online": - "Vous pouvez acheter des points pour vous permettre d'accéder en ligne", - "by this list below": "Grâce à cette liste ci-dessous", - "Create Wallet to receive your money": - "Créez un portefeuille pour recevoir votre argent", - "Enter your feedback here": "Saisissez vos commentaires ici", - "Please enter your feedback.": - "Veuillez saisir le texte de vos notes", - "Feedback": "Feedback:", - "Click here to Show it in Map": - "Cliquez ici pour le voir sur la carte", - "Canceled": "Annulé", - "Type your Email": "Votre e-mail", - "No I want": "- Je n'en ai pas envie.", - "Email is": "Email ", - "Phone Number is": "C'est le 92.38.09.06.", - "Date of Birth is": "Année de naissance", - "Sex is": "Le sexe est cardio.", - "Car Details": "Détails du véhicule", - "VIN is": "Structure", - "Color is": "- Sa couleur?", - "Make is": "Make is", - "Model is": "Formulaire de :", - "Year is": "Année", - "Edit Your data": "Modifiez vos informations", - "write vin for your car": - "Notez le numéro de châssis de votre véhicule", - "VIN": - "|||UNTRANSLATED_CONTENT_START|||رقم هيكل السيارة|||UNTRANSLATED_CONTENT_END|||", - "write Color for your car": "Tapez la couleur de votre voiture", - "write Make for your car": "Écrivez une marque pour votre voiture", - "write Model for your car": "Tapez votre modèle de voiture", - "write Year for your car": "Saisissez une année pour votre voiture", - "write Expiration Date for your car": "la date de péremption", - "Tariffs": "Définitions ", - "Minimum fare": "Prix minimum", - "Maximum fare": "Prix maximum", - "Flag-down fee": "Frais d'escale", - "Including Tax": "Incluant...", - "BookingFee": "Frais de réservation", - "Morning": "- Bonjour.", - "from 07:30 till 10:30 (Thursday, Friday, Saturday, Monday)": - "07h30 - 10h30 (jeudi, vendredi, samedi, lundi)", - "Evening": "- Bonsoir.", - "from 12:00 till 15:00 (Thursday, Friday, Saturday, Monday)": - "12h00 - 15h00 (jeudi, vendredi, samedi, lundi)", - "Night": "la nuit", - "You have in account": "Vous avez dans le compte", - "Select Country": "Sélectionner un pays.", - "Ride Today :": "Commandez une course aujourd'hui :", - "After this period": "Après cette période", - "You can't cancel!": "- Vous pouvez plus...", - "from 23:59 till 05:30": "23:59 - 05:30", - "Rate Driver": "Le chauffeur...", - "Total Cost is": "Coût total", - "Write note": "J'écris une lettre de menace.", - "Time to arrive": "Bobby, Qu'elle est notre e. t. a.?", - "Ride Summaries": "Résumés des courses", - "Total Cost": "Coût total", - "Average of Hours of": "Nombre moyen d'heures de travail", - "is ON for this month": "En cours ce mois-ci", - "Days": "Quelques mois, semaines... quelques jours.", - "Total Hours on month": "Nombre total d'heures", - "Counts of Hours on days": "Heures en jours", - "OrderId": "Commande N°", - "created time": "Date de création", - "Intaleq Over": "Et c'est là qu'on l'aura.", - "I will slow down": "Je vais ralentir.", - "Map Passenger": "Carte du passager", - "Be Slowly": "Soyez lent", - "If you want to make Google Map App run directly when you apply order": - "Si vous souhaitez lancer Google Maps directement lorsque vous appliquez la commande", - "You can change the language of the app": - "Vous pouvez modifier la langue de l'application", - "Your Budget less than needed": "Votre budget est sous-estimé", - "You can change the Country to get all features": - "Vous pouvez modifier le pays pour obtenir toutes les fonctionnalités", - "Change Country": "Non-pays" - }, - "ru": { - "Order": "Заказ", - "OrderVIP": "VIP Заказ", - "Cancel Trip": "Отменить поездку", - "Passenger Cancel Trip": "Пассажир отменил поездку", - "VIP Order": "VIP Заказ", - "The driver accepted your trip": "Водитель принял вашу поездку", - "message From passenger": "Сообщение от пассажира", - "Cancel": "Отмена", - "Trip Cancelled. The cost of the trip will be added to your wallet.": - "Поездка отменена. Стоимость поездки будет добавлена в ваш кошелек.", - "token change": "изменение токена", - "face detect": "распознавание лица", - "Face Detection Result": "Результат распознавания лица", - "similar": "похожий", - "not similar": "не похожий", - "Hi ,I will go now": "Привет, я сейчас поеду", - "Passenger come to you": "Пассажир идет к вам", - "Call Income": "Входящий звонок", - "Call Income from Passenger": "Входящий звонок от пассажира", - "Criminal Document Required": "Требуется справка о несудимости", - "You should have upload it .": "Вы должны были загрузить его.", - "Call End": "Завершение звонка", - "The order has been accepted by another driver.": - "Заказ принят другим водителем.", - "The order Accepted by another Driver": - "Заказ принят другим водителем", - "We regret to inform you that another driver has accepted this order.": - "К сожалению, другой водитель принял этот заказ.", - "Driver Applied the Ride for You": - "Водитель подал заявку на поездку для вас", - "Applied": "Применено", - "Hi ,I Arrive your site": "Привет, я прибыл на ваше место", - "Please go to Car Driver": - "Пожалуйста, подойдите к водителю автомобиля", - "Ok I will go now.": "Хорошо, я сейчас пойду.", - "Accepted Ride": "Поездка принята", - "Driver Accepted the Ride for You": "Водитель принял поездку для вас", - "Promo": "Промо", - "Show latest promo": "Показать последнее промо", - "Trip Monitoring": "Мониторинг поездки", - "Driver Is Going To Passenger": "Водитель едет к пассажиру", - "Please stay on the picked point.": - "Пожалуйста, оставайтесь в выбранной точке.", - "message From Driver": "Сообщение от водителя", - "Trip is Begin": "Поездка началась", - "Cancel Trip from driver": "Отмена поездки водителем", - "We will look for a new driver.\nPlease wait.": - "Мы поищем нового водителя.\nПожалуйста, подождите.", - "The driver canceled your ride.": "Водитель отменил вашу поездку.", - "Driver Finish Trip": "Водитель завершил поездку", - "you will pay to Driver": "вы заплатите водителю", - "Don’t forget your personal belongings.": - "Не забудьте свои личные вещи.", - "Please make sure you have all your personal belongings and that any remaining fare, if applicable, has been added to your wallet before leaving. Thank you for choosing the Intaleq app": - "Пожалуйста, убедитесь, что у вас есть все ваши личные вещи и что любая оставшаяся плата, если таковая имеется, была добавлена в ваш кошелек перед уходом. Спасибо за выбор приложения Intaleq", - "Finish Monitor": "Завершить мониторинг", - "Trip finished": "Поездка завершена", - "Call Income from Driver": "Входящий звонок от водителя", - "Driver Cancelled Your Trip": "Водитель отменил вашу поездку", - "you will pay to Driver you will be pay the cost of driver time look to your Intaleq Wallet": - "вы заплатите водителю, вы оплатите стоимость времени водителя, посмотрите в своем кошельке Intaleq", - "Order Applied": "Заказ применен", - // firebase - - "registration_date": "Дата регистрации", - "expiration_date": "banners|Дата окончания показа", - "rating_count": "Количество оценок", - "rating_driver": "Рейтинг водителя", - "age": "Возраст", - "vin": "VIN", - "car_color": "Цвет", - "car_plate": "Номерной знак", - "car_model": "Модель автомобиля:", - "education": "образование", - "gender": "Пол", - "birthdate": "Дата рождения", - "Approve Driver Documents": "Утвердить документы водителя", - "Total Budget is": "Общий бюджет", - "You will recieve code in sms message": "Вы получите код в SMS", - "Please enter": "dynprops|Укажите название", - "We need your phone number to contact you and to help you receive orders.": - "Нам нужен ваш номер телефона, чтобы связаться с вами и помочь вам получать заказы.", - "The full name on your criminal record does not match the one on your driver’s license. Please verify and provide the correct documents.": - "Полное имя в вашей судимости не совпадает с именем в водительских правах. Пожалуйста, проверьте и предоставьте правильные документы.", - "The national number on your driver’s license does not match the one on your ID document. Please verify and provide the correct documents.": - "Национальный номер в водительском удостоверении не совпадает с номером в удостоверении личности. Пожалуйста, проверьте и предоставьте правильные документы.", - "Capture an Image of Your Criminal Record": - "Сфотографируйте свою судимость", - "IssueDate": "Дата выдачи", - "Capture an Image of Your car license front": - "Сфотографируйте водительские права спереди", - "Capture an Image of Your ID Document front": - "Сфотографируйте удостоверение личности спереди", - "NationalID": "Национальный идентификатор:", - "FullName": "full name", - "InspectionResult": "Результат осмотра", - "Criminal Record": "Судимость", - "The email or phone number is already registered.": - "Электронная почта или номер телефона уже зарегистрированы.", - "To become a ride-sharing driver on the Intaleq app, you need to upload your driver's license, ID document, and car registration document. Our AI system will instantly review and verify their authenticity in just 2-3 minutes. If your documents are approved, you can start working as a driver on the Intaleq app. Please note, submitting fraudulent documents is a serious offense and may result in immediate termination and legal consequences.": - "Чтобы стать водителем-партнером в приложении для путешествий, загрузите водительские права, документ, удостоверяющий личность, и документ о регистрации транспортного средства. Наша система искусственного интеллекта немедленно рассмотрит и проверит ее подлинность всего за 2-3 минуты. Если документы будут одобрены, вы сможете стать водителем-партнером в приложении для путешествий. Обратите внимание, что предоставление поддельных документов является серьезным преступлением и может привести к немедленному расторжению и юридическим последствиям.", - "Documents check": "Проверка документов", - "Driver's License": "Водительские права", - "License Type": "Тип лицензии", - "National Number": "Национальный номер", - "Name (Arabic)": "Наименование", - "Name (English)": "Английский", - "Address": "Адрес", - "Issue Date": "Дата выдачи", - "Expiry Date": "Дата истечения срока действия", - "License Categories": "Категории лицензий", - "driver_license": "Водительские права", - "Capture an Image of Your Driver License": - "Сфотографируйте водительские права", - "ID Documents Back": - "Оборудование для изготовления удостоверений личности", - "National ID": ":: национальная идентичность;", - "Occupation": "Профессия", - "Gender": "Пол", - "Religion": "Религия", - "Marital Status": "Семейное положение", - "Full Name (Marital)": "(расшифровка подписи)", - "Expiration Date": "banners|Дата окончания показа", - "Capture an Image of Your ID Document Back": - "Сфотографируйте оборотную сторону удостоверения личности", - "ID Documents Front": - "Лицевая сторона документов, удостоверяющих личность", - "First Name": "Имя:", - "CardID": "Сфотографируйте оборотную сторону удостоверения личности", - "Full Name": "full name", - "Vehicle Details Front": "Сведения о переднем транспортном средстве", - "Plate Number": "Номерной знак", - "Owner Name": "Имя владельца", - "Vehicle Details Back": "Сведения об автомобиле снова", - "Make": "Марка", - "Model": "Модель автомобиля:", - "Year": "год", - "Chassis": "Шасси", - "Color": "Цвет", - "Displacement": "Замена", - "Fuel": "Горючее", - "Tax Expiry Date": "Дата истечения срока действия", - "Inspection Date": "Дата Обследования", - "Capture an Image of Your car license back": - "Сфотографируйте водительские права еще раз", - "Capture an Image of Your Driver’s License": - "Сфотографируйте водительские права", - "Sign in with Google for easier email and name entry": - "Войдите в систему с помощью Google, чтобы упростить ввод адреса электронной почты и имени", - "You will choose allow all the time to be ready receive orders": - "Вы будете разрешать готовые заказы все время", - "Welcome to Intaleq!": "Добро пожаловать в Safar!", - "Get to your destination quickly and easily.": - "Быстро и легко добирайтесь до места назначения.", - "Enjoy a safe and comfortable ride.": - "Безопасная и комфортная поездка.", - "Choose Language": "Выбрать", - "Login": "Войти", - "Pay with Wallet": "Оплатить с помощью кошелька", - "Invalid MPIN": "Неверный MPIN-код", - "Invalid OTP": "Неверный код подтверждения", - "Enter your email address": "Email", - "Please enter Your Email.": "Пожалуйста, введите...", - "Enter your phone number": "Введите номер телефона", - "Please enter your phone number.": "Введите номер телефона.", - "Please enter Your Password.": "Введите пароль", - "Submit": " Отправка ", - "if you dont have account": "Если у вас нет аккаунта", - "Register": "записать", - "Accept Ride's Terms & Review Privacy Notice": - "Примите условия поездки и ознакомьтесь с Заявлением о конфиденциальности", - "By selecting 'I Agree' below, I have reviewed and agree to the Terms of Use and acknowledge the Privacy Notice. I am at least 18 years of age.": - "Нажимая «Я согласен (-на)» ниже, я подтверждаю, что ознакомился (-ась) и принимаю Условия использования, а также Уведомление о конфиденциальности.Мне не менее 18 лет.", - "I Agree": "Согласиться", - "First name": "Имя:", - "Enter your first name": "Введите имя", - "Please enter your first name.": "Пожалуйста, введите ваше имя.", - "Last name": "Фамилия", - "Enter your last name": "(фамилия)", - "Please enter your last name.": "Пожалуйста, введите ваше имя.", - "City": "Город", - "Please enter your City.": "Пожалуйста, введите...", - "Male": "Муж.", - "Female": "Самка", - "Verify Email": "Подтвердить адрес электронной почты", - "We sent 5 digit to your Email provided": - "Мы отправили 5 цифр на указанный вами адрес электронной почты", - "5 digit": "PIN-код(5-значный)", - "Send Verification Code": "Код подтверждения", - "Your Ride Duration is": "Продолжительность поездки:", - "You will be thier in": "Вы получите их в", - "You trip distance is": "Расстояние поездки:", - "Fee is": "Сбор составляет", - "To :": "Действительна до", - "Add Promo": "Добавить промокод", - "Confirm Selection": "Подтвердить выбор", - "distance is": "Расстояние составляет", - "duration is": "Продолжительность составляет", - "I don't need a ride anymore": "Меня больше не нужно подвозить", - "I was just trying the application": - "Я только что опробовал приложение", - "No driver accepted my request": - "Ни один водитель не принял мой заказ", - "I added the wrong pick-up/drop-off location": - "Вы указали неправильное место посадки/высадки", - "I don't have a reason": "У меня нет причин", - "Other": "Прочее", - "Can we know why you want to cancel Ride ?": - "Почему вы хотите отменить поездку?", - "Cancel Ride": "Отменить", - "Add Payment Method": "Добавить способ оплаты", - "Your Wallet balance is": "Баланс вашего кошелька", - "Ride Wallet": "Кошелек для поездок", - "Payment Method": "Форма расчетов", - "Type here Place": "Введите здесь место", - "Are You sure to ride to": - "Вы уверены, что хотите совершить поездку в", - "Confirm": "Подтверждения", - "Back": "Назад", - "You are Delete": "Вы удаляете", - "Deleted": "Удален", - "You Dont Have Any places yet !": "У вас пока нет мест!", - "Favorite Places": "Избранные места", - "From : Current Location": "Текущее местоположение:", - "Where to": "Где Аллах?", - "Notifications": "Извещения", - "Profile": "Профиль", - "Home": "Главная страница ", - "My Cared": "MyCurt", - "Add Card": "Добавить карту", - "Add Credit Card": "Добавить кредитную карту", - "Please enter the cardholder name": "Введите имя владельца карты", - "Please enter the expiry date": "Дата истечения срока аккредитива", - "Please enter the CVV code": "Введите код подтверждения карты", - "Go To Favorite Places": "Перейти к избранным местам", - "Go to this Target": "Перейти к этой цели", - "My Profile": "Профиль", - "Sign Out": "Выйти", - "Home Page": "Главная страница ", - "Are you want to go to this site": "Вы хотите поехать в это место", - "MyLocation": "Мое местоположение", - "my location": "Мое местоположение", - "Target": "Цель", - "Update": "Модернизация", - "You Should choose rate figure": "Вы должны выбрать правильный номер", - "Login Captin": "bills|Логин", - "Register Captin": "Регистрация капитана", - "Send Verfication Code": "Отправить код подтверждения", - "End Ride": "Поездка", - "Minute": "Минута", - "Go to passenger Location now": - "Перейти к местоположению пользователя", - "Duration of the Ride is": "Продолжительность поездки:", - "Distance of the Ride is": "Расстояние поездки:", - "Name of the Passenger is": "Имя пользователя Uber:", - "Hello this is Captain": "Здравствуйте, я капитан", - "Start the Ride": "Начать поездку", - "Please Wait If passenger want To Cancel!": - "Если пользователь хочет отменить поездку, подождите.", - "Total Duration:": "Общая длительность", - "Active Duration:": "Продолжительность активного шага", - "Waiting for Captin ...": "В ожидании капитана ...", - "Age is": "Возраст", - "Rating is": "Целью оценки является:", - "to arrive you.": "чтобы связаться с вами.", - "Order History": "Записать историю заказов", - "My Wallet": "Мой кошелек", - "Tariff": "Тариф", - "Settings": "spasibo", - "Feed Back": "Обратная связь", - "Promos": "Категория «Акции»", - "Please enter a valid 16-digit card number": - "Введите действительный номер заказа на закупку.", - "Add Phone": "Телефон", - "Please enter a phone number": "Введите номер телефона", - "You dont Add Emergency Phone Yet!": - "Вы еще не добавили телефон экстренной помощи!", - "You will arrive to your destination after": - "Вы прибудете в пункт назначения через", - "You can cancel Ride now": "Вы можете отменить поездку прямо сейчас", - "You Can cancel Ride After Captain did not come in the time": - "Вы можете отменить поездку после того, как капитан не прибыл вовремя", - "If you in Car Now. Press Start The Ride": - "Если вы сейчас в машине. Нажмите Начать поездку.", - "You Dont Have Any amount in": "У вас нет средств в", - "Wallet!": "Wallet", - "You Have": "Есть?", - "Save Credit Card": "Сохранить кредитную карту", - "Show Promos": "АКЦИИ", - "10 and get 4% discount": "10 и получите скидку 4%", - "20 and get 6% discount": "20 и получите скидку 6%", - "40 and get 8% discount": "40 и получите скидку 8%", - "100 and get 11% discount": "100% и получите скидку 11%", - "Pay with Your PayPal": "Оплатить через PayPal", - "You will choose one of above !": - "Вы выберете один из вариантов выше!", - "Cancel": "Отменить", - "Delete My Account": "Удалить мой аккаунт", - "Edit Profile": "Modifier le profil", - "Name": "Nom", - "Update Gender": "Mettre à jour le sexe", - "Education": "Les études", - "Update Education": ":: Moderniser l'enseignement;", - "Employment Type": "Catégorie de personnel", - "SOS Phone": "Mobile", - "High School Diploma": "BACCALAUREAT DE L'ENSEIGNEMENT", - "Associate Degree": "Diplôme conjoint", - "Bachelor's Degree": "Grade de bachelier", - "Master's Degree": "Master", - "Doctoral Degree": "Docteur en philosophie.", - "Promos For today": "Promotions", - "Copy this Promo to use it in your Ride!": - "Copiez cette promotion pour l'utiliser lors de votre voyage !", - "To change some Settings": "Pour modifier certains paramètres", - "To change Language the App": - "Pour modifier la langue de l'application", - "Order Request Page": "Page de demande de commande", - "Rouats of Trip": "Tripp.", - "Passenger Name is": "Voyageur.", - "Total From Passenger is": "Le total du passager est", - "Duration To Passenger is": "Durée jusqu'au passager", - "Distance To Passenger is": "distance par rapport au passager est", - "Total For You is": "Le total pour vous est de", - "Distance is": "Distance", - "KM": "Km", - "Duration of Trip is": "La durée de la course est de", - "Minutes": "Minutes", - "Apply Order": "Appliquer la commande", - "Refuse Order": "- Demande rejetée.", - "Rate Captain": "Cote de capitaine", - "Enter your Note": "J'ai eu votre mot.", - "Type something...": "Écrire quelque chose...", - "Submit rating": "Fournir une évaluation", - "Rate Passenger": "Note du passager", - "Ride Summary": "Résumé de la course", - "welcome_message": "Insérer « & #160; Bonjour monde & #160; »", - "app_description": "ApplicationDescription", - "get_to_destination": - "Destination atteinte. Déblocage des contrôles manuels.", - "get_a_ride": "Commandez une course", - "safe_and_comfortable": "Sûr et confortable", - "committed_to_safety": "Engagé pour la sécurité", - "Driver Applied the Ride for You": - "Un chauffeur qui a effectué la course pour vous", - "Show latest promo": "Afficher la dernière promotion", - "Cancel Trip": "Le vol est annulé.", - "Passenger Cancel Trip": "Le passager annule la course", - "Please stay on the picked point.": - "Veuillez rester au point sélectionné.", - "Trip is Begin": "Votre initiation a commencé.", - "Hi ,I will go now": "Bonjour, j'y vais maintenant", - "Passenger come to you": "Votre passager vient vous voir", - "Hi ,I Arrive your site": - "Bonjour, vous avez atteint votre position.", - "Driver Finish Trip": "Fin de la course du chauffeur", - "you will pay to Driver": "Sérieux ? Probablement avec mon argent.", - "Driver Cancel Your Trip": "Annulez votre course, chauffeur.", - "you will pay to Driver you will be pay the cost of driver time look to your Intaleq Wallet": - "Vous paierez le chauffeur Vous paierez le coût du temps du chauffeur Regardez votre portefeuille Intaleq", - "I will go now": "- J'y vais.", - "You Have Tips": "Astuces", - "tips": "Des paroles sages ?", - "Total is": "Chiffre total est de 15", - "No,I want": "- Je n'en ai pas envie.", - "Your fee is": "Vos frais sont de", - "Do you want to pay Tips for this Driver": - "Souhaitez-vous laisser un pourboire à ce chauffeur ?", - "Tip is": "Monconseil", - "Camera Access Denied.": "Accès à la caméra refusé.", - "Open Settings": - "|||UNTRANSLATED_CONTENT_START|||افتح الإعدادات|||UNTRANSLATED_CONTENT_END|||", - "GPS Required Allow !.": "Le GPS doit être activé !", - "Your Account is Deleted": "Votre compte a été supprimé", - "Are you sure to delete your account?": - "Voulez-vous vraiment supprimer votre compte ?", - "Your data will be erased after 2 weeks": - "Vos données seront effacées après 2 semaines", - "And you will can't return to use app after 1 month": - "Vous pourrez revenir à l'application après un mois", - "Enter Your First Name": "Saisissez votre nom", - "Are you Sure to LogOut?": "Voulez-vous vraiment vous déconnecter?", - "Email Wrong": "Email ", - "Email you inserted is Wrong.": - "L'adresse e-mail que vous avez saisie est incorrecte.", - "You have finished all times": "J'en ai assez !", - "if you want help you can email us here": - "Si vous souhaitez de l'aide, vous pouvez nous envoyer un e-mail ici", - "Thanks": "Merci.", - "Email Us": "Envoyez-nous un e-mail", - "I cant register in your app in face detection": - "Je ne peux pas m'inscrire à votre application avec la détection de visage", - "Hi": "-C'est un plaisir. -Hello.", - "No face detected": "Aucun scanner n'a été détécté", - "Image detecting result is": - "Le résultat de la détection d'image est", - "from 3 times Take Attention": "que 3 fois attirent votre attention", - "Be sure for take accurate images please": - "Assurez-vous de prendre des photos précises s'il vous plaît", - "You have": "- Euh...", - "image verified": "La photo est notariée", - "Next": "Suivant", - "There is no help Question here": "Ouais, pas d'aide ici.", - "Call End": "Terminer l'appel", - "You dont have Points": "- Vous n'avez pas...", - "You Are Stopped For this Day !": - "Vous avez été mis en pause pour la journée !", - "You must be charge your Account": - "Vous devez recharger votre compte", - "You Refused 3 Rides this Day that is the reason": - "Vous avez refusé 3 courses aujourd'hui et c'est pourquoi", - "See you Tomorrow!": "Je te verrais demain.", - "Recharge my Account": "Recharger mon compte", - "Ok , See you Tomorrow": "D'accord, on se voit demain.", - "You are Stopped": "Vous êtes arrêté", - "Connected": "Online", - "Not Connected": "Offiline", - "Your are far from passenger location": - "Vous êtes loin de l'emplacement des passagers", - "go to your passenger location before": - "Accédez à l'emplacement de votre passager avant le", - "Passenger cancel trip": "Le passager a annulé la course", - "You will get cost of your work for this trip": - "Vous obtiendrez le coût de votre entreprise pour cette course", - "in your wallet": "Elle est dans ton portefeuille.", - "you gain": "Vous gagnerez", - "Order Cancelled": "Commande annulée", - "Order Cancelled by Passenger": "Demande annulée par le passager", - "Success": "Je l'ai.", - "Feedback data saved successfully": - "Données d'évaluation enregistrées avec succès", - "No Promo for today .": "Pas de promotion pour aujourd'hui.", - "Select your destination": "Sélectionnez la destination;", - "Search for your Start point": "Trouvez votre point de départ", - "Search for waypoint": "Rechercher un point WIPOINT", - "Current Location": "Utiliser la position actuelle", - "Add Location 1": "Emplacement & #160;: %1", - "You must Verify email !.": "Relever le courriel", - "Cropper": "Récolte", - "Saved Sucssefully": "Bien reçu.", - "Select Date": "Choisir une nouvelle date", - "Birth Date": "Date de naissance", - "Ok": "D'accord.", - "the 500 points equal 30 JOD": "500 points équivaut à 30 JOD", - "the 500 points equal 30 JOD for you": - "500 points équivaut à 30 JOD pour vous", - "token updated": "Code mis à jour", - "Add Location 2": "Ajouter un emplacement 2", - "Add Location 3": "Ajouter un emplacement 3", - "Add Location 4": "Ajouter un emplacement 4", - "Waiting for your location": "En attente de votre localisation", - "Search for your destination": "Trouvez votre destination", - "Hi! This is": "Bienvenue \"moi\": c' est ça.", - "I am using": "Du matériel que j'utilisais.", - "to ride with": "pour rouler avec", - "as the driver.": "On dirait un chauffeur.", - "is driving a": "- Je vais le tenter comme ça. - Conduire.", - "with license plate": "Avec une plaque d'immatriculation", - "I am currently located at": "Je suis actuellement en", - "Please go to Car now": "S'il te plaît, va-t-en maintenant.", - "If you need to reach me, please contact the driver directly at": - "Si vous avez besoin de me joindre, veuillez contacter directement le chauffeur au", - "No Car or Driver Found in your area.": - "Aucune voiture ou chauffeur trouvé dans votre région.", - "Please Try anther time": "Réessayer", - "There no Driver Aplly your order sorry for that": - "Aucun chauffeur ne peut répondre à votre demande, nous sommes désolés.", - "Trip Cancelled": "Course annulée", - "The Driver Will be in your location soon .": - "Votre chauffeur arrivera bientôt chez vous.", - "The distance less than 500 meter.": - "La distance est inférieure à 500 mètres.", - "Promo End !": "- C'est seulement jusqu'au spectacle.", - "There is no notification yet": "Aucune notification pour le moment", - "Use Touch ID or Face ID to confirm payment": - "Utilisez Touch ID ou Face ID pour confirmer le paiement", - "Contact us for any questions on your order.": - "Contactez-nous pour toute question concernant votre commande.", - "Pyament Cancelled .": "Le paiement a été annulé.", - "type here": "Tapez ici", - "Scan Driver License": "Permis de conduire", - "Please put your licence in these border": - "Veuillez placer votre licence dans ces limites", - "Camera not initialized yet": "Caméra pas encore configurée", - "Take Image": - "Prends une photo, parce que demain matin, ces lettres partiront.", - "AI Page": "Tu dis que ton système \"IA\"", - "Take Picture Of ID Card": - "Prenez une photo de votre pièce d'identité", - "Take Picture Of Driver License Card": - "Prenez une photo de votre permis de conduire.", - "We are process picture please wait": - "Nous traitons les images, veuillez patienter.", - "There is no data yet.": "Aucune donnée trouvée", - "Name :": "Nom :", - "Drivers License Class:": "Catégorie de permis de conduire :", - "Document Number:": "Numéro du document", - "Address:": "Adresse:", - "Height:": "& Hauteur & #160;:", - "Expiry Date:": "Expiration & #160;:", - "Date of Birth:": "Anniversaire & #160;: @title: group", - "You can't continue with us .": "Ça ne peut pas durer.", - "You should renew Driver license": - "Vous devez renouveler votre permis de conduire", - "Detect Your Face": "Découvrez votre visage", - "Go to next step": "\"", - "scan Car License.": "Vérification de l'immatriculation du véhicule.", - "Name in arabic": "Full Name AR", - "Drivers License Class": "Permis de conduire", - "Date of Birth": "Date de naissance", - "Age": "l’âge", - "Lets check Car license": "Vérifions le permis de conduire", - "Car Kind": "Type de véhicule", - "Car Plate": "Le numéro d'immatriculation ?", - "Lets check License Back Face": - "Vérifions la licence de face arrière", - "Car License Card": "Carte d'immatriculation du véhicule", - "No image selected yet": "Aucune photo sélectionnée pour le moment", - "Made :": "Make", - "model :": "Mod.", - "VIN :": "Structure :", - "year :": "Année", - "ُExpire Date": "Date d'expiration", - "Login Driver": "Se connecter", - "Password must br at least 6 character.": - "Le mot de passe doit comporter au moins 6 caractères.", - "if you don't have account": "Que voulez-vous dire ?", - "Here recorded trips audio": - "Voici les enregistrements audio du voyage", - "Register as Driver": "Inscrivez-vous en tant que chauffeur", - "Privacy Notice": "Avis de confidentialité", - "By selecting \"I Agree\" below, I have reviewed and agree to the Terms of Use and acknowledge the": - "En sélectionnant « J'accepte » ci-dessous, j'ai lu, j'accepte et j'accepte les conditions générales", - ". I am at least 18 years of age.": ". J'ai au moins 18 ans.", - "Log Out Page": "Se Déconnecter", - "Log Off": "Signe.", - "Register Driver": "Le chauffeur...", - "Verify Email For Driver": "Consultez l'e-mail du chauffeur", - "Admin DashBoard": "Tableau de bord d'administration", - "Your name": "Ton... nom.", - "your ride is applied": "Votre course a été appliquée", - "Your password": "Renouveler votre mot de passe", - "LE": "Livre égyptienne", - "JOD": "Monnaie: Dinar jordanien", - "m": "%1 km", - "We search nearst Driver to you": - "Nous recherchons le chauffeur le plus proche", - "please wait till driver accept your order": - "Veuillez attendre que le chauffeur accepte votre demande", - "No accepted orders? Try raising your trip fee to attract riders.": - "Aucune Essayez d'augmenter les frais de course pour attirer des passagers.", - "You should select one": "Vous devez en choisir un", - "The driver accept your order for": - "Votre chauffeur a accepté votre demande de", - "Increase Fee": "Augmenter les frais", - "No, thanks": "Non merci", - "The driver on your way": "Votre chauffeur est en route", - "Total price from": "P.T", - "Order Details Intaleq": "Détails du commande", - "Order Applied": "Commande appliquée", - "accepted your order": "- Retenue.", - "We regret to inform you that another driver has accepted this order.": - "Nous sommes désolés de vous informer qu'un autre chauffeur a accepté cette demande.", - "Selected file:": "Ouvre un fichier existant", - "Your trip cost is": "Les frais de votre course", - "this will delete all files from your device": - "Cela supprimera tous les fichiers de votre appareil", - "you have a negative balance of": "Vous avez un solde négatif de", - "in your": "En toi.", - "Exclusive offers and discounts always with the Intaleq app": - "Offres exclusives et réductions toujours avec l'application de voyage", - "Please go to Car Driver": - "Veuillez vous rendre chez le conducteur de la voiture", - "wallet due to a previous trip.": - "Portefeuille en raison d'une course précédente.", - "Submit Question": "Envoyer la question", - "Please enter your Question.": "Veuillez saisir votre question.", - "Help Details": "Détails de l'aide", - "No trip yet found": "Aucune campagne trouvée", - "No Response yet.": "Il n'y a pas de réponses.", - "You Earn today is": "- On est euh...", - "You Have in": "Vous avez à", - "Total points is": "Le score total est de", - "Total Connection Duration:": "Durée totale de connexion :", - "H and": "H et", - "Passenger name :": "Le voyageur.", - "Cost Of Trip IS": "Coûts des vols par avion spécial", - "Arrival time": "On arrive dans 7 minutes.", - "arrival time to reach your point": - "Heure d'arrivée pour atteindre votre destination", - "For Intaleq and Delivery trips, the price is calculated dynamically. For Comfort trips, the price is based on time and distance": - "Pour les courses et livraisons rapides, le prix est calculé de manière dynamique. Pour des courses confortables, le prix est basé sur la durée et la distance.", - "Hello this is Driver": "Bonjour, je suis le chauffeur", - "Is the Passenger in your Car ?": - "Le passager est-il dans votre véhicule ?", - "Please wait for the passenger to enter the car before starting the trip.": - "Veuillez attendre que le passager entre dans le véhicule avant de commencer la course.", - "No ,still Waiting.": "Non , je t'attends toujours.", - "I arrive you": "Elle t'a eue.", - "I Arrive your site": "Elle t'a eue.", - "You are not in near to passenger location": - "Vous n'êtes pas près de l'emplacement du passager", - "please go to picker location exactly": - "Veuillez vous rendre à l'emplacement exact de la sélection", - "You Can Cancel Trip And get Cost of Trip From": - "Vous pouvez annuler la course et obtenir le coût de la course auprès de", - "Are you sure to cancel?": "Voulez-vous vraiment annuler ?", - "Yes": "Oui", - "Insert Emergincy Number": "Saisir le numéro d'urgence", - "Best choice for comfort car and flexible route and stops point": - "Le meilleur choix pour une voiture confortable, un itinéraire flexible et un point d'arrêt", - "Insert": "En cours d' utilisation", - "This is for delivery or a motorcycle.": - "C'est pour la livraison ou une moto.", - "This trip goes directly from your starting point to your destination for a fixed price. The driver must follow the planned route": - "Cette course va directement de votre point de départ à votre destination pour un tarif forfaitaire. Le chauffeur doit suivre l'itinéraire prévu", - "You can decline a request without any cost": - "Vous pouvez refuser la demande sans frais", - "Perfect for adventure seekers who want to experience something new and exciting": - "Idéal pour les chercheurs d'aventure qui veulent essayer quelque chose de nouveau et d'excitant", - "My current location is:": "Mon emplacement actuel est :", - "and I have a trip on": "et j'ai un voyage à", - "App with Passenger": "Postuler avec le passager", - "You will be pay the cost to driver or we will get it from you on next trip": - "Le coût sera payé au chauffeur ou nous l'obtiendrons de votre part lors de la prochaine course", - "Trip has Steps": "La course comporte des étapes", - "Distance from Passenger to destination is": - "La distance entre le passager et la destination est", - "price is": "C'est cent dollars.", - "This ride type does not allow changes to the destination or additional stops": - "Ce type de course ne permet pas de modifier la destination ou d'effectuer des arrêts supplémentaires", - "This price may be changed": "Ce prix peut changer", - "No SIM card, no problem! Call your driver directly through our app. We use advanced technology to ensure your privacy.": - "Pas de carte SIM, pas de problème ! Contactez directement votre chauffeur via notre application. Nous utilisons une technologie de pointe pour garantir votre confidentialité.", - "This ride type allows changes, but the price may increase": - "Ce type de course peut être modifié, mais le prix peut augmenter", - "message From passenger": "Estafette.", - "Select one message": "Message un.", - "My location is correct. You can search for me using the navigation app": - "Ma position est correcte. Vous pouvez me rechercher à l'aide de l'application de navigation", - "I'm waiting for you": "- Quand vous voulez.", - "Hello, I'm at the agreed-upon location": - "Bonjour, je suis à l'endroit convenu", - "We noticed the Intaleq is exceeding 100 km/h. Please slow down for your safety. If you feel unsafe, you can share your trip details with a contact or call the police using the red SOS button.": - "Nous avons remarqué que la vitesse dépasse 100 km/h. Veuillez ralentir pour votre propre sécurité. Si vous ne vous sentez pas en sécurité, vous pouvez communiquer les détails de votre course à un contact ou appeler la police à l'aide du bouton de détresse rouge.", - "Warning: Intaleqing detected!": - "Avertissement : survitesse détectée !", - "Please help! Contact me as soon as possible.": - "Aide-moi s'il te plaît. Contactez-moi dès que possible.", - "Share Trip Details": "Partagez les détails de la", - "Car Plate is": "Le numéro d'immatriculation ?", - "the 3000 points equal 3000 L.E for you": - "3000 points équivaut à 3000 EGP pour vous", - "So go and gain your money": "Gagnez de l'argent", - "the 3000 points equal 3000 L.E": "3000 points équivaut à 3000 EGP", - "The payment was not approved. Please try again.": - "Paiement non approuvé. Réessayer", - "Payment Failed": "Échec du paiement", - "Error": "ⵜⴰⵣⴳⵍⵜ", - "An error occurred during the payment process.": - "Une erreur s'est produite lors de votre paiement.", - "The payment was approved.": "Paiement approuvé.", - "Payment Successful": "Paiement réussi", - "No ride found yet": "Aucune campagne trouvée", - "Accept Order": "Commande acceptée", - "reject your order.": "Votre Ordre.", - "Bottom Bar Example": "Exemple de barre inférieure", - "Driver phone": "Téléphone du chauffeur", - "Statistics": "& Statistiques", - "Origin": "ORIGINE", - "Destination": "- Destination ?", - "Driver Name": "Nom de pilote & #160;:", - "Driver Car Plate": "Plaque d'immatriculation du conducteur", - "Available for rides": "Disponible pour les courses", - "Scan Id": "Contrôle d'identité", - "Camera not initilaized yet": "Caméra pas encore configurée", - "Scan ID MklGoogle": "Vérification d'identité MklGoogle", - "Language": "Langue ", - "Jordan": "Jordanie", - "USA": "Etats Unis d'Amérique", - "Egypt": "Egypte", - "Turkey": "Turquie", - "Saudi Arabia": "Arabie Saoudite", - "Qatar": "Qatar", - "Bahrain": "Bahreïn", - "Kuwait": "Koweït", - "But you have a negative salary of": - "Mais vous avez un salaire négatif de", - "Promo Code": "Code promo", - "Your trip distance is": "La distance de votre course est de", - "Enter promo code": "Code promo", - "You have promo!": "Vous avez une promotion !", - "Cost Duration": "Durée du coût", - "Duration is": "La durée est", - "Leave": "Quitter", - "Join": "Joindre", - "You Should be select reason.": "Vous devez choisir une raison.", - "\$": "\$", - "Waiting for Driver ...": "En attente du chauffeur ...", - "Latest Recent Trip": "J'ai des choses à faire!", - "from your list": "À partir de votre liste", - "Do you want to change Work location": - "Souhaitez-vous changer de lieu de travail ?", - "Do you want to change Home location": - "Souhaitez-vous changer l'emplacement de la maison", - "We Are Sorry That we dont have cars in your Location!": - "Nous sommes désolés que les voitures ne soient pas disponibles chez vous !", - "Choose from Map": "Sélectionner sur la carte", - "Pick your ride location on the map - Tap to confirm": - "Sélectionnez votre lieu de prise en charge sur la carte - appuyez pour confirmer", - "To Work": "Pour le boulot", - "Are you want to go this site": "Voulez-vous aller à cet endroit", - "Closest & Cheapest": "Le plus proche et le moins cher", - "Work Saved": "Enregistré :", - "Intaleq is the ride-hailing app that is safe, reliable, and accessible.": - "Intaleq est une application de covoiturage sûre, fiable et accessible.", - "With Intaleq, you can get a ride to your destination in minutes.": - "En voyageant, vous pouvez vous rendre à destination en quelques minutes.", - "Intaleq is committed to safety, and all of our captains are carefully screened and background checked.": - "Safar s'engage pour la sécurité, et tous nos commandants sont soigneusement contrôlés et leurs antécédents vérifiés.", - "To Home": "RETOUR À LA PAGE D'ACCUEIL", - "Home Saved": "Enregistré :", - "Destination selected": "Destination sélectionnée", - "Now select start pick": - "Maintenant, choisissez Démarrer la sélection", - "Pick from map": "Sélectionner sur la carte", - "Click here point": "Cliquez ici", - "No Car in your site. Sorry!": - "Il n'y a pas de voiture dans votre région. Ex... Excusez moi.", - "Nearest Car for you about": - "La voiture la plus proche de chez vous est d'environ", - "N/A": "Aucune information", - "From :": "Du :", - "Get Details of Trip": "Obtenir les détails de la course", - "If you want add stop click here": - "Si vous souhaitez ajouter un arrêt, cliquez ici", - "Driver": "ⴰⵎⵏⴷⴰⵀ", - "Where you want go": "D'où viens-tu ?", - "My Card": "Ma carte.", - "Start Record": "Début de la campagne d'enregistrement", - "Wallet": "Un portefeuille.", - "History of Trip": "2.1 Histoire du vol", - "Helping Center": "Centre d'aide", - "Record saved": "Sauvegarde de l'historique effectuée !", - "Trips recorded": "Voyages enregistrés", - "Select Your Country": "Selectionnez votre pays", - "To ensure you receive the most accurate information for your location, please select your country below. This will help tailor the app experience and content to your country.": - "Pour vous assurer d'avoir les informations les plus précises pour votre emplacement, veuillez sélectionner votre pays ci-dessous. Cela vous aidera à personnaliser l'expérience et le contenu de l'application pour votre pays.", - "Are you sure to delete recorded files": - "Êtes-vous sûr de vouloir supprimer les fichiers enregistrés", - "Select recorded trip": "Choisissez une course enregistrée", - "Card Number": "N  de pièce d'identité:", - "Hi, Where to": "Bonjour, oùallez-vous ?", - "Pick your destination from Map": "Sélectionner sur la carte", - "Add Stops": "Ajouter des arrêts", - "Get Direction": "Obtenir une direction", - "Add Location": "Ajouter l'emplacement correctement", - "Switch Rider": "Changer de passager", - "You will arrive to your destination after timer end.": - "Vous arriverez à destination après l'expiration de la minuterie.", - "You can cancel trip": "Vous pouvez annuler la course", - "The driver waitting you in picked location .": - "Votre chauffeur vous attend à l'endroit désigné .", - "Pay with Your": "Payer avec", - "Pay with Credit Card": "- La carte.", - "Payment History": "Historique des paiements", - "Show Promos to Charge": "Afficher les promotions d'expédition", - "Point": "Points", - "Driver Balance": "Portefeuille chauffeur", - "Total Points is": "Le score total est de", - "Total Budget from trips is": "Le budget total des voyages est de", - "Total Amount:": "Montant total", - "Total Budget from trips by": "Budget total des voyages par", - "Credit card is": "Votre carte de crédit.", - "This amount for all trip I get from Passengers": - "Ce montant s'applique à toutes les courses que je reçois de la part de passagers.", - "Pay from my budget": "Payer sur mon budget", - "This amount for all trip I get from Passengers and Collected For me in": - "Ce montant s'applique à toutes les courses que je reçois de la part de passagers collectés pour moi à", - "You can buy points from your budget": - "Vous pouvez acheter des points à partir de votre budget", - "insert amount": "Entrez le montant", - "You can buy Points to let you online": - "Vous pouvez acheter des points pour vous permettre d'accéder en ligne", - "by this list below": "Grâce à cette liste ci-dessous", - "Create Wallet to receive your money": - "Créez un portefeuille pour recevoir votre argent", - "Enter your feedback here": "Saisissez vos commentaires ici", - "Please enter your feedback.": - "Veuillez saisir le texte de vos notes", - "Feedback": "Feedback:", - "Click here to Show it in Map": - "Cliquez ici pour le voir sur la carte", - "Canceled": "Annulé", - "Type your Email": "Votre e-mail", - "No I want": "- Je n'en ai pas envie.", - "Email is": "Email ", - "Phone Number is": "C'est le 92.38.09.06.", - "Date of Birth is": "Année de naissance", - "Sex is": "Le sexe est cardio.", - "Car Details": "Détails du véhicule", - "VIN is": "Structure", - "Color is": "- Sa couleur?", - "Make is": "Make is", - "Model is": "Formulaire de :", - "Year is": "Année", - "Edit Your data": "Modifiez vos informations", - "write vin for your car": - "Notez le numéro de châssis de votre véhicule", - "VIN": - "|||UNTRANSLATED_CONTENT_START|||رقم هيكل السيارة|||UNTRANSLATED_CONTENT_END|||", - "write Color for your car": "Tapez la couleur de votre voiture", - "write Make for your car": "Écrivez une marque pour votre voiture", - "write Model for your car": "Tapez votre modèle de voiture", - "write Year for your car": "Saisissez une année pour votre voiture", - "write Expiration Date for your car": "la date de péremption", - "Tariffs": "Définitions ", - "Minimum fare": "Prix minimum", - "Maximum fare": "Prix maximum", - "Flag-down fee": "Frais d'escale", - "Including Tax": "Incluant...", - "BookingFee": "Frais de réservation", - "Morning": "- Bonjour.", - "from 07:30 till 10:30 (Thursday, Friday, Saturday, Monday)": - "07h30 - 10h30 (jeudi, vendredi, samedi, lundi)", - "Evening": "- Bonsoir.", - "from 12:00 till 15:00 (Thursday, Friday, Saturday, Monday)": - "12h00 - 15h00 (jeudi, vendredi, samedi, lundi)", - "Night": "la nuit", - "You have in account": "Vous avez dans le compte", - "Select Country": "Sélectionner un pays.", - "Ride Today :": "Commandez une course aujourd'hui :", - "After this period": "Après cette période", - "You can't cancel!": "- Vous pouvez plus...", - "from 23:59 till 05:30": "23:59 - 05:30", - "Rate Driver": "Le chauffeur...", - "Total Cost is": "Coût total", - "Write note": "J'écris une lettre de menace.", - "Time to arrive": "Bobby, Qu'elle est notre e. t. a.?", - "Ride Summaries": "Résumés des courses", - "Total Cost": "Coût total", - "Average of Hours of": "Nombre moyen d'heures de travail", - "is ON for this month": "En cours ce mois-ci", - "Days": "Quelques mois, semaines... quelques jours.", - "Total Hours on month": "Nombre total d'heures", - "Counts of Hours on days": "Heures en jours", - "OrderId": "Commande N°", - "created time": "Date de création", - "Intaleq Over": "Et c'est là qu'on l'aura.", - "I will slow down": "Je vais ralentir.", - "Map Passenger": "Carte du passager", - "Be Slowly": "Soyez lent", - "If you want to make Google Map App run directly when you apply order": - "Si vous souhaitez lancer Google Maps directement lorsque vous appliquez la commande", - "You can change the language of the app": - "Vous pouvez modifier la langue de l'application", - "Your Budget less than needed": "Votre budget est sous-estimé", - "You can change the Country to get all features": - "Vous pouvez modifier le pays pour obtenir toutes les fonctionnalités", - "Change Country": "Non-pays" - }, - "de": { - "Order": "Auftrag", - "OrderVIP": "VIP-Auftrag", - "Cancel Trip": "Fahrt stornieren", - "Passenger Cancel Trip": "Fahrgast hat storniert", - "VIP Order": "VIP-Auftrag", - "Hi ,I Arrive your site": "Hallo, ich bin am Standort angekommen", - "The driver accepted your trip": - "Der Fahrer hat Ihre Fahrt angenommen", - "message From passenger": "Nachricht vom Fahrgast", - "Cancel": "Abbrechen", - "Trip Cancelled. The cost of the trip will be added to your wallet.": - "Fahrt storniert. Die Kosten werden Ihrer Wallet gutgeschrieben.", - "token change": "Token-Änderung", - "face detect": "Gesichtserkennung", - "Face Detection Result": "Ergebnis der Gesichtserkennung", - "similar": "Ähnlich", - "not similar": "Nicht ähnlich", - "Hi ,I will go now": "Hallo, ich fahre jetzt los", - "Passenger come to you": "Fahrgast kommt zu Ihnen", - "Call Income": "Eingehender Anruf", - "Call Income from Passenger": "Anruf vom Fahrgast", - "Criminal Document Required": "Führungszeugnis erforderlich", - "You should have upload it .": "Sie müssen es hochladen.", - "Call End": "Anruf beendet", - "The order has been accepted by another driver.": - "Der Auftrag wurde von einem anderen Fahrer angenommen.", - "The order Accepted by another Driver": - "Auftrag von anderem Fahrer angenommen", - "We regret to inform you that another driver has accepted this order.": - "Es tut uns leid, ein anderer Fahrer hat diesen Auftrag bereits angenommen.", - "Driver Applied the Ride for You": - "Fahrer hat die Fahrt für Sie beantragt", - "Applied": "Beantragt", - "Pay by Sham Cash": "Mit Sham Cash bezahlen", - "Pay with Debit Card": "Mit Debitkarte bezahlen", - "Please go to Car Driver": "Bitte gehen Sie zum Fahrer", - "Ok I will go now.": "Ok, ich gehe jetzt.", - "Accepted Ride": "Akzeptierte Fahrt", - "Driver Accepted the Ride for You": - "Fahrer hat die Fahrt für Sie akzeptiert", - "Promo": "Promo", - "Show latest promo": "Neueste Promos anzeigen", - "Trip Monitoring": "Fahrtüberwachung", - "Driver Is Going To Passenger": "Fahrer ist auf dem Weg zum Fahrgast", - "Please stay on the picked point.": "Bitte bleiben Sie am Abholort.", - "message From Driver": "Nachricht vom Fahrer", - "Trip is Begin": "Fahrt beginnt", - "Cancel Trip from driver": "Fahrtstornierung durch Fahrer", - "We will look for a new driver.\nPlease wait.": - "Wir suchen einen neuen Fahrer.\nBitte warten.", - "The driver canceled your ride.": - "Der Fahrer hat Ihre Fahrt storniert.", - "Driver Finish Trip": "Fahrer hat Fahrt beendet", - "you will pay to Driver": "Sie zahlen an den Fahrer", - "Don’t forget your personal belongings.": - "Vergessen Sie Ihre persönlichen Gegenstände nicht.", - "Please make sure you have all your personal belongings and that any remaining fare, if applicable, has been added to your wallet before leaving. Thank you for choosing the Intaleq app": - "Bitte stellen Sie sicher, dass Sie alle persönlichen Gegenstände haben und dass Restbeträge Ihrer Wallet gutgeschrieben wurden. Danke, dass Sie Intaleq nutzen.", - "Finish Monitor": "Überwachung beenden", - "Trip finished": "Fahrt beendet", - "Call Income from Driver": "Anruf vom Fahrer", - "Driver Cancelled Your Trip": "Fahrer hat Ihre Fahrt storniert", - "you will pay to Driver you will be pay the cost of driver time look to your Intaleq Wallet": - "Sie bezahlen die Zeit des Fahrers, siehe Ihre Intaleq Wallet", - "Order Applied": "Auftrag angewendet", - "welcome to intaleq": "Willkommen bei Intaleq", - "login or register subtitle": - "Geben Sie Ihre Handynummer ein, um sich anzumelden oder zu registrieren", - "An application error occurred.": - "Ein Anwendungsfehler ist aufgetreten.", - "Submission Failed": "Senden fehlgeschlagen", - "Your complaint has been submitted.": - "Ihre Beschwerde wurde eingereicht.", - "Failed to connect to the server. Please try again.": - "Verbindung zum Server fehlgeschlagen. Bitte versuchen Sie es erneut.", - "Ride information not found. Please refresh the page.": - "Fahrtinformationen nicht gefunden. Bitte Seite aktualisieren.", - "Please describe your issue before submitting.": - "Bitte beschreiben Sie Ihr Problem vor dem Absenden.", - "An application error occurred during upload.": - "Fehler beim Hochladen aufgetreten.", - "Failed to upload audio file.": - "Hochladen der Audiodatei fehlgeschlagen.", - "Audio uploaded successfully.": "Audio erfolgreich hochgeladen.", - "Complaint cannot be filed for this ride. It may not have been completed or started.": - "Beschwerde kann für diese Fahrt nicht eingereicht werden. Vielleicht nicht beendet oder gestartet.", - "2. Attach Recorded Audio (Optional)": - "2. Audioaufnahme anhängen (Optional)", - "Please enter a description of the issue.": - "Bitte geben Sie eine Beschreibung des Problems ein.", - "phone number label": "Telefonnummer", - "phone number required": "Telefonnummer erforderlich", - "send otp button": "OTP senden", - "verify your number title": "Nummer verifizieren", - "otp sent subtitle": - "Ein 5-stelliger Code wurde gesendet an\n@phoneNumber", - "verify and continue button": "Verifizieren und weiter", - "enter otp validation": "Bitte geben Sie den 5-stelligen OTP ein", - "one last step title": "Ein letzter Schritt", - "complete profile subtitle": "Vervollständigen Sie Ihr Profil", - "first name label": "Vorname", - "first name required": "Vorname erforderlich", - "last name label": "Nachname", - "Verify OTP": "OTP verifizieren", - "Verification Code": "Verifizierungscode", - "We have sent a verification code to your mobile number:": - "Wir haben einen Code an Ihre Handynummer gesendet:", - "Verify": "Verifizieren", - "Resend Code": "Code erneut senden", - "You can resend in": "Erneut senden in", - "seconds": "Sekunden", - "Error": "Fehler", - "Please enter the complete 6-digit code.": - "Bitte geben Sie den vollständigen 6-stelligen Code ein.", - "last name required": "Nachname erforderlich", - "email optional label": "E-Mail (Optional)", - "complete registration button": "Registrierung abschließen", - "User with this phone number or email already exists.": - "Benutzer mit dieser Nummer oder E-Mail existiert bereits.", - "otp sent success": "OTP erfolgreich an WhatsApp gesendet.", - "failed to send otp": "Senden des OTP fehlgeschlagen.", - "server error try again": - "Serverfehler, bitte versuchen Sie es erneut.", - "an error occurred": "Ein Fehler ist aufgetreten: @error", - "otp verification failed": "OTP-Verifizierung fehlgeschlagen.", - "registration failed": "Registrierung fehlgeschlagen.", - "welcome user": "Willkommen, @firstName!", - "Cancel Trip from driver": "Fahrtstornierung durch Fahrer", - "We will look for a new driver.\nPlease wait.": - "Wir suchen einen neuen Fahrer.\nBitte warten.", - "The driver canceled your ride.": - "Der Fahrer hat Ihre Fahrt storniert.", - "Driver Finish Trip": "Fahrer beendet Fahrt", - "you will pay to Driver": "Sie zahlen an den Fahrer", - "Don't forget your personal belongings.": - "Vergessen Sie Ihre persönlichen Gegenstände nicht.", - "Please make sure you have all your personal belongings and that any remaining fare, if applicable, has been added to your wallet before leaving. Thank you for choosing the Intaleq app": - "Bitte prüfen Sie Ihre Gegenstände und ob Restbeträge Ihrer Wallet gutgeschrieben wurden. Danke für die Nutzung von Intaleq.", - "Finish Monitor": "Überwachung beenden", - "Trip finished": "Fahrt beendet", - "Call Income from Driver": "Anruf vom Fahrer", - "Driver Cancelled Your Trip": "Fahrer hat Ihre Fahrt storniert", - "you will pay to Driver you will be pay the cost of driver time look to your Intaleq Wallet": - "Sie zahlen die Zeit des Fahrers, siehe Ihre Intaleq Wallet", - "Order Applied": "Auftrag aufgegeben", - "Share App": "App teilen", - "Wallet": "Wallet", - "Balance": "Guthaben", - "Don’t forget your personal belongings.": - "Vergessen Sie Ihre persönlichen Sachen nicht.", - "Profile": "Profil", - "Contact Support": "Support kontaktieren", - "Session expired. Please log in again.": - "Sitzung abgelaufen. Bitte erneut anmelden.", - "Security Warning": "⚠️ Sicherheitswarnung", - "Potential security risks detected. The application may not function correctly.": - "Potenzielle Sicherheitsrisiken erkannt. Die App funktioniert möglicherweise nicht korrekt.", - "please order now": "Jetzt bestellen", - "Where to": "Wohin?", - "Where are you going?": "Wohin fahren Sie?", - "Quick Actions": "Schnellaktionen", - "My Balance": "Mein Guthaben", - "Order History": "Bestellverlauf", - "Contact Us": "Kontakt", - "Driver": "Fahrer", - "Complaint": "Beschwerde", - "Promos": "Promos", - "Recent Places": "Letzte Orte", - "From": "Von", - "WhatsApp Location Extractor": "WhatsApp Standort-Extraktor", - "Location Link": "Standort-Link", - "Paste location link here": "Standort-Link hier einfügen", - "Go to this location": "Zu diesem Ort navigieren", - "Paste WhatsApp location link": "WhatsApp Standort-Link einfügen", - "Select Order Type": "Auftragstyp wählen", - "Choose who this order is for": "Für wen ist diese Fahrt?", - "I want to order for myself": "Ich bestelle für mich", - "I want to order for someone else": "Ich bestelle für jemand anderen", - "Order for someone else": "Für jemand anderen bestellen", - "Order for myself": "Für mich bestellen", - "Are you want to go this site": "Möchten Sie zu diesem Ort?", - "No": "Nein", - "Pay by Sham Cash": "Mit Sham Cash zahlen", - "Intaleq Wallet": "Intaleq Wallet", - "Have a promo code?": "Haben Sie einen Promo-Code?", - "Your Wallet balance is ": "Ihr Wallet-Guthaben beträgt ", - "Cash": "Bar", - "Phone Number": "Telefonnummer", - "Search country": "Land suchen", - "Payment Successful!": "Zahlung erfolgreich!", - "Your payment was successful.": "Ihre Zahlung war erfolgreich.", - "Pay directly to the captain": "Direkt an den Fahrer zahlen", - "Top up Wallet to continue": "Wallet aufladen zum Fortfahren", - "Or pay with Cash instead": "Oder bar bezahlen", - "Confirm & Find a Ride": "Bestätigen & Fahrt finden", - "Balance:": "Guthaben:", - "Alerts": "Benachrichtigungen", - "Welcome Back!": "Willkommen zurück!", - "Current Balance": "Aktuelles Guthaben", - "Set Wallet Phone Number": "Wallet-Telefonnummer festlegen", - "Link a phone number for transfers": - "Telefonnummer für Überweisungen verknüpfen", - "Payment History": "Zahlungsverlauf", - "View your past transactions": "Vergangene Transaktionen ansehen", - "Top up Wallet": "Wallet aufladen", - "Add funds using our secure methods": "Guthaben sicher aufladen", - "Driver is waiting": "Fahrer wartet", - "Type your message...": "Nachricht eingeben...", - "Driver Accepted Request": "Fahrer hat Anfrage akzeptiert", - "Message": "Nachricht", - "Call": "Anrufen", - "Set Phone Number": "Telefonnummer festlegen", - "Select This Ride": "Diese Fahrt wählen", - "Call Driver": "Fahrer anrufen", - "Increase Fare": "Preis erhöhen", - "Stop": "Stopp", - "Record": "Aufnehmen", - "Share": "Teilen", - "WhatsApp": "WhatsApp", - "SOS": "SOS", - "No drivers accepted your request yet": - "Noch kein Fahrer hat Ihre Anfrage akzeptiert", - "Increasing the fare might attract more drivers. Would you like to increase the price?": - "Eine Preiserhöhung könnte mehr Fahrer anlocken. Möchten Sie den Preis erhöhen?", - "Please make sure not to leave any personal belongings in the car.": - "Bitte lassen Sie keine persönlichen Gegenstände im Auto zurück.", - "Cancel Ride": "Fahrt stornieren", - "Route Not Found": "Route nicht gefunden", - "We couldn't find a valid route to this destination. Please try selecting a different point.": - "Keine gültige Route gefunden. Bitte wählen Sie einen anderen Punkt.", - "alert": "Alarm", - "You can call or record audio during this trip.": - "Sie können während der Fahrt anrufen oder Audio aufnehmen.", - "Warning: Speeding detected!": - "Warnung: Geschwindigkeitsüberschreitung!", - "Fixed Price": "Festpreis", - "Report": "Melden", - "Comfort": "Komfort", - "Intaleq Balance": "Intaleq Guthaben", - "Search for a starting point": "Startpunkt suchen", - "Top up Balance to continue": "Guthaben aufladen zum Fortfahren", - "Electric": "Elektro", - "Lady": "Damen", - "Van": "Van", - "Rayeh Gai": "Hin & Zurück", - "Join Intaleq as a driver using my referral code!": - "Werde Fahrer bei Intaleq mit meinem Code!", - "Use code:": "Code verwenden:", - "Download the Intaleq Driver app now and earn rewards!": - "Lade die Intaleq Fahrer-App und verdiene Belohnungen!", - "Get a discount on your first Intaleq ride!": - "Rabatt auf deine erste Intaleq-Fahrt!", - "Use my referral code:": "Mein Empfehlungscode:", - "Download the Intaleq app now and enjoy your ride!": - "Intaleq App laden und Fahrt genießen!", - "Contacts Loaded": "Kontakte geladen", - "Showing": "Zeige", - "of": "von", - "Pay by MTN Wallet": "Mit MTN Wallet zahlen", - "Pay by Syriatel Wallet": "Mit Syriatel Wallet zahlen", - "Customer not found": "Kunde nicht gefunden", - "Wallet is blocked": "Wallet ist gesperrt", - "Customer phone is not active": "Kundentelefon nicht aktiv", - "Balance not enough": "Guthaben nicht ausreichend", - "Balance limit exceeded": "Guthabenlimit überschritten", - "Incorrect sms code": "⚠️ Falscher SMS-Code. Bitte erneut versuchen.", - "contacts. Others were hidden because they don't have a phone number.": - "Kontakte. Andere ausgeblendet wegen fehlender Nummer.", - "No contacts found": "Keine Kontakte gefunden", - "No contacts with phone numbers were found on your device.": - "Keine Kontakte mit Telefonnummern auf dem Gerät gefunden.", - "Permission denied": "Zugriff verweigert", - "Contact permission is required to pick contacts": - "Kontaktzugriff erforderlich.", - "An error occurred while picking contacts:": - "Fehler beim Auswählen der Kontakte:", - "Please enter a correct phone": "Bitte korrekte Nummer eingeben", - "Success": "Erfolg", - "Invite sent successfully": "Einladung erfolgreich gesendet", - "Hello! I'm inviting you to try Intaleq.": - "Hallo! Ich lade dich ein, Intaleq zu testen.", - "Use my invitation code to get a special gift on your first ride!": - "Nutze meinen Code für ein Geschenk bei der ersten Fahrt!", - "Your personal invitation code is:": - "Dein persönlicher Einladungscode:", - "Be sure to use it quickly! This code expires at": - "Schnell nutzen! Code läuft ab am", - "Download the app now:": "App jetzt laden:", - "See you on the road!": "Wir sehen uns auf der Straße!", - "This phone number has already been invited.": - "Diese Nummer wurde bereits eingeladen.", - "An unexpected error occurred. Please try again.": - "Unerwarteter Fehler. Bitte erneut versuchen.", - "You deserve the gift": "Sie haben das Geschenk verdient", - "Claim your 20 LE gift for inviting": - "Fordern Sie Ihr 20 € Geschenk an", - "You have got a gift for invitation": - "Sie haben ein Geschenk für die Einladung erhalten", - "You have earned 20": "Sie haben 20 verdient", - "LE": "€", - "Vibration feedback for all buttons": - "Vibrationsfeedback für alle Tasten", - "Share with friends and earn rewards": - "Mit Freunden teilen und Belohnungen verdienen", - "Gift Already Claimed": "Geschenk bereits eingelöst", - "You have already received your gift for inviting": - "Sie haben Ihr Geschenk für diese Einladung bereits erhalten", - "Keep it up!": "Weiter so!", - "has completed": "hat abgeschlossen", - "trips": "Fahrten", - "Personal Information": "Persönliche Informationen", - "Name": "Name", - "Not set": "Nicht festgelegt", - "Gender": "Geschlecht", - "Education": "Bildung", - "Work & Contact": "Arbeit & Kontakt", - "Employment Type": "Beschäftigungsart", - "Marital Status": "Familienstand", - "SOS Phone": "SOS-Telefon", - "Sign Out": "Abmelden", - "Delete My Account": "Mein Konto löschen", - "Update Gender": "Geschlecht aktualisieren", - "Update": "Aktualisieren", - "Update Education": "Bildung aktualisieren", - "Are you sure? This action cannot be undone.": - "Sind Sie sicher? Dies kann nicht rückgängig gemacht werden.", - "Confirm your Email": "E-Mail bestätigen", - "Type your Email": "E-Mail eingeben", - "Delete Permanently": "Dauerhaft löschen", - "Male": "Männlich", - "Female": "Weiblich", - "Other": "Divers", - "High School Diploma": "Abitur / Mittlere Reife", - "Associate Degree": "Berufsausbildung", - "Bachelor's Degree": "Bachelor-Abschluss", - "Master's Degree": "Master-Abschluss", - "Doctoral Degree": "Doktortitel", - "Select your preferred language for the app interface.": - "Wählen Sie Ihre bevorzugte Sprache für die App.", - "Language Options": "Sprachoptionen", - "You can claim your gift once they complete 2 trips.": - "Sie erhalten das Geschenk, sobald 2 Fahrten abgeschlossen sind.", - "Closest & Cheapest": "Am Nächsten & Günstigsten", - "Comfort choice": "Komfort-Wahl", - "Travel in a modern, silent electric car. A premium, eco-friendly choice for a smooth ride.": - "Reisen Sie im modernen, leisen Elektroauto. Premium und umweltfreundlich.", - "Spacious van service ideal for families and groups. Comfortable, safe, and cost-effective travel together.": - "Geräumiger Van-Service, ideal für Familien und Gruppen. Komfortabel, sicher und günstig.", - "Quiet & Eco-Friendly": "Leise & Umweltfreundlich", - "Lady Captain for girls": "Fahrerin für Frauen", - "Van for familly": "Van für Familie", - "Are you sure to delete this location?": - "Diesen Ort wirklich löschen?", - "Change Work location?": "Arbeitsort ändern?", - "Change Home location?": "Wohnort ändern?", - "Submit a Complaint": "Beschwerde einreichen", - "Submit Complaint": "Beschwerde absenden", - "No trip history found": "Kein Fahrtverlauf gefunden", - "Your past trips will appear here.": - "Ihre vergangenen Fahrten erscheinen hier.", - "1. Describe Your Issue": "1. Problem beschreiben", - "Enter your complaint here...": - "Geben Sie Ihre Beschwerde hier ein...", - "2. Attach Recorded Audio": "2. Audioaufnahme anhängen", - "No audio files found.": "Keine Audiodateien gefunden.", - "Confirm Attachment": "Anhang bestätigen", - "Attach this audio file?": "Diese Audiodatei anhängen?", - "Uploaded": "Hochgeladen", - "3. Review Details & Response": "3. Details & Antwort überprüfen", - "Date": "Datum", - "Today's Promos": "Heutige Promos", - "No promos available right now.": "Derzeit keine Promos verfügbar.", - "Check back later for new offers!": - "Schauen Sie später wieder vorbei!", - "Valid Until:": "Gültig bis:", - "CODE": "CODE", - "Login": "Anmelden", - "Sign in for a seamless experience": - "Melden Sie sich für ein nahtloses Erlebnis an", - "Sign In with Google": "Mit Google anmelden", - "Sign in with Apple": "Mit Apple anmelden", - "User not found": "Benutzer nicht gefunden", - "Need assistance? Contact us": - "Brauchen Sie Hilfe? Kontaktieren Sie uns", - "Email": "E-Mail", - "Your email address": "Ihre E-Mail-Adresse", - "Enter a valid email": "Gültige E-Mail eingeben", - "Password": "Passwort", - "Your password": "Ihr Passwort", - "Enter your password": "Passwort eingeben", - "Submit": "Absenden", - "Terms of Use & Privacy Notice": - "Nutzungsbedingungen & Datenschutzerklärung", - "By selecting \"I Agree\" below, I confirm that I have read and agree to the ": - "Mit \"Ich stimme zu\" bestätige ich, dass ich die ", - "Terms of Use": "Nutzungsbedingungen", - " and acknowledge the ": " gelesen habe und die ", - "Privacy Notice": "Datenschutzerklärung", - " . I am at least 18 years old.": - " akzeptiere. Ich bin mindestens 18 Jahre alt.", - "I Agree": "Ich stimme zu", - "Continue": "Weiter", - "Enable Location": "Standort aktivieren", - "To give you the best experience, we need to know where you are. Your location is used to find nearby captains and for pickups.": - "Für das beste Erlebnis benötigen wir Ihren Standort, um Fahrer in der Nähe zu finden.", - "Allow Location Access": "Standortzugriff erlauben", - "Welcome to Intaleq!": "Willkommen bei Intaleq!", - "Before we start, please review our terms.": - "Bitte lesen Sie zuerst unsere Bedingungen.", - "Your journey starts here": "Ihre Reise beginnt hier", - "Cancel Search": "Suche abbrechen", - "Set pickup location": "Abholort festlegen", - "Move the map to adjust the pin": "Karte bewegen, um Pin anzupassen", - "Searching for the nearest captain...": - "Suche nach dem nächsten Fahrer...", - "No one accepted? Try increasing the fare.": - "Niemand akzeptiert? Versuchen Sie, den Preis zu erhöhen.", - "Increase Your Trip Fee (Optional)": "Fahrtpreis erhöhen (Optional)", - "We haven't found any drivers yet. Consider increasing your trip fee to make your offer more attractive to drivers.": - "Noch keine Fahrer gefunden. Erhöhen Sie den Preis, um das Angebot attraktiver zu machen.", - "No, thanks": "Nein, danke", - "Increase Fee": "Preis erhöhen", - "Copy": "Kopieren", - "Promo Copied!": "Promo kopiert!", - "Code": "Code", - "copied to clipboard": "in Zwischenablage kopiert", - "Price": "Preis", - "Intaleq's Response": "Antwort von Intaleq", - "Awaiting response...": "Warte auf Antwort...", - "Audio file not attached": "Audiodatei nicht angehängt", - "The audio file is not uploaded yet.\\nDo you want to submit without it?": - "Audiodatei noch nicht hochgeladen.\\nOhne sie absenden?", - "deleted": "gelöscht", - "To Work": "Zur Arbeit", - "Work Saved": "Arbeit gespeichert", - "To Home": "Nach Hause", - "Home Saved": "Zuhause gespeichert", - "Destination selected": "Ziel ausgewählt", - "Now select start pick": "Jetzt Startpunkt wählen", - "OK": "OK", - "Confirm Pick-up Location": "Abholort bestätigen", - "Set Location on Map": "Ort auf Karte festlegen", - "Leave a detailed comment (Optional)": - "Detaillierten Kommentar hinterlassen (Optional)", - "Share your experience to help us improve...": - "Teilen Sie Ihre Erfahrung, um uns zu verbessern...", - "Your valuable feedback helps us improve our service quality.": - "Ihr Feedback hilft uns, die Servicequalität zu verbessern.", - "witout zero": "ohne Null", - "Top up Balance": "Guthaben aufladen", - "An error occurred": "Ein Fehler ist aufgetreten", - "Send WhatsApp Message": "WhatsApp-Nachricht senden", - "How was your trip with": "Wie war Ihre Fahrt mit", - "Drawing route on map...": "Route wird auf Karte gezeichnet...", - "Please wait while we prepare your trip.": - "Bitte warten, Fahrt wird vorbereitet.", - "Submit Rating": "Bewertung absenden", - "Call Support": "Support anrufen", - "You can contact us during working hours from 10:00 - 16:00.": - "Sie können uns während der Geschäftszeiten von 10:00 - 16:00 Uhr kontaktieren.", - "Intaleq is the safest and most reliable ride-sharing app designed especially for passengers in Syria. We provide a comfortable, respectful, and affordable riding experience with features that prioritize your safety and convenience. Our trusted captains are verified, insured, and supported by regular car maintenance carried out by top engineers. We also offer on-road support services to make sure every trip is smooth and worry-free. With Intaleq, you enjoy quality, safety, and peace of mind—every time you ride.": - "Intaleq ist die sicherste Mitfahr-App für Deutschland. Wir bieten eine komfortable und erschwingliche Fahrt, bei der Ihre Sicherheit Vorrang hat. Unsere Fahrer sind verifiziert und versichert.", - "Work time is from 10:00 AM to 16:00 PM.\nYou can send a WhatsApp message or email.": - "Arbeitszeit ist 10:00 - 16:00 Uhr.\nSie können WhatsApp oder E-Mail senden.", - "Sorry": "Entschuldigung", - "Customer MSISDN doesn’t have customer wallet": - "Kunden-MSISDN hat keine Wallet", - "Please enter the number without the leading 0": - "Bitte Nummer ohne führende 0 eingeben", - "Please enter your phone number": - "Bitte geben Sie Ihre Telefonnummer ein", - "Phone number seems too short": - "Telefonnummer scheint zu kurz zu sein", - "No cars are available at the moment. Please try again later.": - "Derzeit keine Autos verfügbar. Bitte später versuchen.", - "Nearest Car: ~": "Nächstes Auto: ~", - "Nearest Car": "Nächstes Auto", - "No cars nearby": "Keine Autos in der Nähe", - "Favorite Places": "Lieblingsorte", - "No favorite places yet!": "Noch keine Lieblingsorte!", - "from your favorites": "aus Favoriten", - "Back": "Zurück", - "Enter your code below to apply the discount.": - "Code unten eingeben, um Rabatt zu erhalten.", - "By selecting \"I Agree\" below, I confirm that I have read and agree to the": - "Mit \"Ich stimme zu\" bestätige ich, dass ich die", - "and acknowledge the": "gelesen habe und die", - "Enable Location Access": "Standortzugriff aktivieren", - "We need your location to find nearby drivers for pickups and drop-offs.": - "Wir benötigen Ihren Standort, um Fahrer zu finden.", - "You should restart app to change language": - "App neu starten, um Sprache zu ändern", - "Home Page": "Startseite", - "To change Language the App": "Um die Sprache der App zu ändern", - "Learn more about our app and mission": - "Mehr über unsere App und Mission erfahren", - "Promos For Today": "Heutige Promos", - "Choose your ride": "Wählen Sie Ihre Fahrt", - "Your Journey Begins Here": "Ihre Reise beginnt hier", - "Bonus gift": "Bonusgeschenk", - "Pay": "Bezahlen", - "Get": "Erhalten", - "Send to Driver Again": "Erneut an Fahrer senden", - "Driver Name:": "Fahrername:", - "No trip data available": "Keine Fahrtdaten verfügbar", - "Car Plate:": "Kennzeichen:", - "remaining": "verbleibend", - "Order Cancelled": "Auftrag storniert", - "You canceled VIP trip": "Sie haben die VIP-Fahrt storniert", - "Passenger cancelled order": "Fahrgast hat Auftrag storniert", - "Your trip is scheduled": "Ihre Fahrt ist geplant", - "Don't forget your ride!": "Vergessen Sie Ihre Fahrt nicht!", - "Trip updated successfully": "Fahrt erfolgreich aktualisiert", - "Car Make:": "Marke:", - "Car Model:": "Modell:", - "Car Color:": "Farbe:", - "Driver Phone:": "Fahrer-Telefon:", - "Pre-booking": "Vorbuchung", - "Waiting VIP": "Warten auf VIP", - "Driver List": "Fahrerliste", - "Confirm Trip": "Fahrt bestätigen", - "Select date and time of trip": "Datum und Uhrzeit wählen", - "Date and Time Picker": "Datum- und Zeitwähler", - "Trip Status:": "Fahrtstatus:", - "pending": "ausstehend", - "accepted": "akzeptiert", - "rejected": "abgelehnt", - "Apply": "Anwenden", - "Enter your promo code": "Promo-Code eingeben", - "Apply Promo Code": "Promo-Code anwenden", - "Scheduled Time:": "Geplante Zeit:", - "No drivers available": "Keine Fahrer verfügbar", - "No drivers available at the moment. Please try again later.": - "Derzeit keine Fahrer verfügbar. Bitte später versuchen.", - "you have a negative balance of": - "Sie haben ein negatives Guthaben von", - "Please try again in a few moments": - "Bitte in wenigen Augenblicken erneut versuchen", - "Unknown Driver": "Unbekannter Fahrer", - "in your": "in Ihrer", - "The driver accepted your order for": - "Der Fahrer hat Ihren Auftrag angenommen für", - "wallet due to a previous trip.": - "Wallet aufgrund einer früheren Fahrt.", - "rides": "Fahrten", - "Add Work": "Arbeit hinzufügen", - "The reason is": "Der Grund ist", - "User does not have a wallet #1652": - "Benutzer hat keine Wallet #1652", - "Price of trip": "Fahrtpreis", - "From:": "Von:", - "For Intaleq and Delivery trips, the price is calculated dynamically. For Comfort trips, the price is based on time and distance": - "Für Intaleq- und Lieferfahrten wird der Preis dynamisch berechnet. Für Komfortfahrten basiert er auf Zeit und Entfernung.", - "Phone Wallet Saved Successfully": "Wallet-Telefonnummer gespeichert", - "Add wallet phone you use": - "Verwendete Wallet-Telefonnummer hinzufügen", - "Update Available": "Update verfügbar", - "Phone number must be exactly 11 digits long": - "Telefonnummer muss genau 11 Ziffern lang sein", - "Insert Wallet phone number": "Wallet-Telefonnummer eingeben", - "Phone number isn't an Egyptian phone number": - "Keine deutsche Telefonnummer", - "A new version of the app is available. Please update to the latest version.": - "Neue App-Version verfügbar. Bitte aktualisieren.", - "We use location to get accurate and nearest passengers for you": - "Wir nutzen den Standort, um die nächsten Fahrgäste zu finden", - "This ride is already applied by another driver.": - "Diese Fahrt wurde bereits von einem anderen Fahrer übernommen.", - "We use your precise location to find the nearest available driver and provide accurate pickup and dropoff information. You can manage this in Settings.": - "Wir nutzen Ihren genauen Standort für Fahrer und präzise Abholinfos. Dies können Sie in den Einstellungen verwalten.", - "Where are you, sir?": "Wo sind Sie?", - "I've been trying to reach you but your phone is off.": - "Ich habe versucht Sie zu erreichen, aber Ihr Telefon ist aus.", - "Please don't be late": "Bitte kommen Sie nicht zu spät", - "Please don't be late, I'm waiting for you at the specified location.": - "Bitte nicht zu spät kommen, ich warte am angegebenen Ort.", - "My location is correct. You can search for me using the navigation app": - "Mein Standort ist korrekt. Sie können mich über die Navi-App suchen.", - "Hello, I'm at the agreed-upon location": - "Hallo, ich bin am vereinbarten Ort", - "How much longer will you be?": "Wie lange brauchen Sie noch?", - "Phone number is verified before": - "Telefonnummer wurde bereits verifiziert", - "Change Ride": "Fahrt ändern", - "You can change the destination by long-pressing any point on the map": - "Sie können das Ziel durch langes Drücken auf der Karte ändern", - "Pick from map destination": "Ziel von Karte wählen", - "Pick or Tap to confirm": "Wählen oder Tippen zum Bestätigen", - "Accepted your order": "Hat Ihren Auftrag angenommen", - "Order Accepted": "Auftrag angenommen", - "with type": "mit Typ", - "accepted your order at price": "hat Auftrag angenommen zum Preis", - "you canceled order": "Sie haben den Auftrag storniert", - "If you want order to another person": - "Wenn Sie für jemand anderen bestellen wollen", - "upgrade price": "Preis erhöhen", - "airport": "Flughafen", - "Best choice for a comfortable car with a flexible route and stop points. This airport offers visa entry at this price.": - "Beste Wahl für ein komfortables Auto mit flexibler Route.", - "You can upgrade price to may driver accept your order": - "Sie können den Preis erhöhen, damit ein Fahrer annimmt", - "Change Route": "Route ändern", - "No Captain Accepted Your Order": - "Kein Fahrer hat Ihren Auftrag angenommen", - "We are looking for a captain but the price may increase to let a captain accept": - "Wir suchen einen Fahrer, aber der Preis könnte steigen", - "No, I want to cancel this trip": - "Nein, ich möchte diese Fahrt stornieren", - "Attention": "Achtung", - "Trip Cancelled. The cost of the trip will be deducted from your wallet.": - "Fahrt storniert. Kosten werden von Ihrer Wallet abgezogen.", - "You will be charged for the cost of the driver coming to your location.": - "Die Anfahrtskosten des Fahrers werden berechnet.", - "reject your order.": "lehnen Ihren Auftrag ab.", - "Order Under Review": "Auftrag wird geprüft", - "is reviewing your order. They may need more information or a higher price.": - "prüft Ihren Auftrag. Eventuell werden mehr Infos oder ein höherer Preis benötigt.", - "Vibration": "Vibration", - "Resend code": "Code erneut senden", - "change device": "Gerät wechseln", - "Device Change Detected": "Gerätewechsel erkannt", - "You can only use one device at a time. This device will now be set as your active device.": - "Sie können nur ein Gerät gleichzeitig nutzen. Dieses Gerät ist nun aktiv.", - "Click here point": "Hier klicken", - "Are you want to change": "Möchten Sie ändern", - "by": "von", - "Enter your complaint here": "Beschwerde hier eingeben", - "Please enter your complaint.": - "Bitte geben Sie Ihre Beschwerde ein.", - "Complaint data saved successfully": "Beschwerdedaten gespeichert", - "Trip Monitor": "Fahrtmonitor", - "Insert SOS Phone": "SOS-Nummer eingeben", - "Add SOS Phone": "SOS-Nummer hinzufügen", - "Dear ,\n\n 🚀 I have just started an exciting trip and I would like to share the details of my journey and my current location with you in real-time! Please download the Intaleq app. It will allow you to view my trip details and my latest location.\n\n 👉 Download link: \n Android [https://play.google.com/store/apps/details?id=com.mobileapp.store.ride]\n iOS [https://getapp.cc/app/6458734951]\n\n I look forward to keeping you close during my adventure!\n\n Intaleq ,": - "Hallo,\n\n🚀 ich habe eine Fahrt begonnen und möchte meinen Standort teilen! Lade die Intaleq App, um meine Fahrt zu verfolgen.\n\n👉 Download:\nAndroid [https://play.google.com/store/apps/details?id=com.mobileapp.store.ride]\niOS [https://getapp.cc/app/6458734951]\n\nBis bald!\n\nIntaleq ,", - "Send Intaleq app to him": "Intaleq App an ihn senden", - "No passenger found for the given phone number": - "Kein Fahrgast für diese Nummer gefunden", - "No user found for the given phone number": - "Kein Benutzer für diese Nummer gefunden", - "This price is": "Dieser Preis ist", - "Work": "Arbeit", - "Add Home": "Zuhause hinzufügen", - "Notifications": "Benachrichtigungen", - "💳 Pay with Credit Card": "💳 Mit Kreditkarte zahlen", - "⚠️ You need to choose an amount!": - "⚠️ Sie müssen einen Betrag wählen!", - "💰 Pay with Wallet": "💰 Mit Wallet zahlen", - "You must restart the app to change the language.": - "App neu starten, um Sprache zu ändern.", - "joined": "beigetreten", - "Driver joined the channel": "Fahrer ist dem Kanal beigetreten", - "Driver left the channel": "Fahrer hat den Kanal verlassen", - "Call Page": "Anrufseite", - "Call Left": "Verbleibende Anrufe", - " Next as Cash !": " Nächste als Barzahlung!", - "To use Wallet charge it": "Wallet aufladen, um sie zu nutzen", - "We are searching for the nearest driver to you": - "Wir suchen den nächsten Fahrer", - "Best choice for cities": "Beste Wahl für Städte", - "Rayeh Gai: Round trip service for convenient travel between cities, easy and reliable.": - "Rayeh Gai: Hin- und Rückfahrt-Service zwischen Städten.", - "This trip is for women only": "Diese Fahrt ist nur für Frauen", - "Total budgets on month": "Gesamtbudget im Monat", - "You have call from driver": "Anruf vom Fahrer", - "Intaleq": "Intaleq", - "passenger agreement": "Fahrgastvereinbarung", - "To become a passenger, you must review and agree to the ": - "Um Fahrgast zu werden, müssen Sie zustimmen den ", - "agreement subtitle": - "Um fortzufahren, müssen Sie den Nutzungsbedingungen und der Datenschutzerklärung zustimmen.", - "terms of use": "Nutzungsbedingungen", - " and acknowledge our Privacy Policy.": - " und unserer Datenschutzerklärung.", - "and acknowledge our": "und anerkennen unsere", - "privacy policy": "Datenschutzerklärung.", - "i agree": "Ich stimme zu", - "Driver already has 2 trips within the specified period.": - "Fahrer hat bereits 2 Fahrten in diesem Zeitraum.", - "The invitation was sent successfully": - "Einladung erfolgreich gesendet", - "You should select your country": "Sie sollten Ihr Land wählen", - "Scooter": "E-Scooter", - "A trip with a prior reservation, allowing you to choose the best captains and cars.": - "Fahrt mit Vorreservierung, Auswahl der besten Fahrer und Autos.", - "Mishwar Vip": "Mishwar VIP", - "The driver waiting you in picked location .": - "Fahrer wartet am Abholort.", - "About Us": "Über uns", - "You can change the vibration feedback for all buttons": - "Vibrationsfeedback für Tasten ändern", - "Most Secure Methods": "Sicherste Methoden", - "In-App VOIP Calls": "In-App VOIP Anrufe", - "Recorded Trips for Safety": "Aufgezeichnete Fahrten zur Sicherheit", - "\nWe also prioritize affordability, offering competitive pricing to make your rides accessible.": - "\nWir bieten wettbewerbsfähige Preise.", - "Intaleq is a ride-sharing app designed with your safety and affordability in mind. We connect you with reliable drivers in your area, ensuring a convenient and stress-free travel experience.\n\nHere are some of the key features that set us apart:": - "Intaleq ist eine Mitfahr-App für Ihre Sicherheit. Wir verbinden Sie mit zuverlässigen Fahrern.", - "Sign In by Apple": "Mit Apple anmelden", - "Sign In by Google": "Mit Google anmelden", - "How do I request a ride?": "Wie bestelle ich eine Fahrt?", - "Step-by-step instructions on how to request a ride through the Intaleq app.": - "Schritt-für-Schritt-Anleitung zur Fahrtbestellung.", - "What types of vehicles are available?": - "Welche Fahrzeuge sind verfügbar?", - "Intaleq offers a variety of vehicle options to suit your needs, including economy, comfort, and luxury. Choose the option that best fits your budget and passenger count.": - "Intaleq bietet Economy, Komfort und Luxus.", - "How can I pay for my ride?": "Wie kann ich bezahlen?", - "Intaleq offers multiple payment methods for your convenience. Choose between cash payment or credit/debit card payment during ride confirmation.": - "Wählen Sie zwischen Barzahlung oder Karte.", - "Can I cancel my ride?": "Kann ich stornieren?", - "Yes, you can cancel your ride, but please note that cancellation fees may apply depending on how far in advance you cancel.": - "Ja, Stornierung möglich, evtl. fallen Gebühren an.", - "Driver Registration & Requirements": - "Fahrer-Registrierung & Anforderungen", - "How can I register as a driver?": - "Wie registriere ich mich als Fahrer?", - "What are the requirements to become a driver?": - "Was sind die Anforderungen?", - "Visit our website or contact Intaleq support for information on driver registration and requirements.": - "Besuchen Sie unsere Website oder den Support.", - "Intaleq provides in-app chat functionality to allow you to communicate with your driver or passenger during your ride.": - "Intaleq bietet In-App-Chat.", - "Intaleq prioritizes your safety. We offer features like driver verification, in-app trip tracking, and emergency contact options.": - "Sicherheit hat Priorität: Fahrerverifizierung, Tracking, Notruf.", - "Frequently Questions": "Häufige Fragen", - "User does not exist.": "Benutzer existiert nicht.", - "We need your phone number to contact you and to help you.": - "Wir benötigen Ihre Telefonnummer.", - "You will recieve code in sms message": - "Sie erhalten einen Code per SMS", - "Please enter": "Bitte eingeben", - "We need your phone number to contact you and to help you receive orders.": - "Wir benötigen Ihre Nummer für Aufträge.", - "The full name on your criminal record does not match the one on your driver's license. Please verify and provide the correct documents.": - "Name im Führungszeugnis stimmt nicht mit Führerschein überein.", - "The national number on your driver's license does not match the one on your ID document. Please verify and provide the correct documents.": - "Ausweisnummer stimmt nicht überein.", - "Capture an Image of Your Criminal Record": - "Bild des Führungszeugnisses aufnehmen", - "IssueDate": "Ausstellungsdatum", - "Capture an Image of Your car license front": - "Bild der Fahrzeugschein-Vorderseite", - "Capture an Image of Your ID Document front": - "Bild der Ausweis-Vorderseite", - "NationalID": "Personalausweisnummer", - "You can share the Intaleq App with your friends and earn rewards for rides they take using your code": - "Teile die App und verdiene Belohnungen.", - "FullName": "Vollständiger Name", - "No invitation found yet!": "Keine Einladung gefunden!", - "InspectionResult": "Prüfergebnis", - "Criminal Record": "Führungszeugnis", - "The email or phone number is already registered.": - "E-Mail oder Nummer bereits registriert.", - "To become a ride-sharing driver on the Intaleq app, you need to upload your driver's license, ID document, and car registration document. Our AI system will instantly review and verify their authenticity in just 2-3 minutes. If your documents are approved, you can start working as a driver on the Intaleq app. Please note, submitting fraudulent documents is a serious offense and may result in immediate termination and legal consequences.": - "Um Fahrer zu werden, laden Sie Führerschein, Ausweis und Fahrzeugschein hoch. KI prüft in 2-3 Min. Betrug führt zur Kündigung.", - "Documents check": "Dokumentenprüfung", - "Driver's License": "Führerschein", - "for your first registration!": "für Ihre erste Registrierung!", - "Get it Now!": "Jetzt holen!", - "before": "vor", - "Code not approved": "Code nicht genehmigt", - "3000 LE": "30 €", - "Do you have an invitation code from another driver?": - "Haben Sie einen Einladungscode?", - "Paste the code here": "Code hier einfügen", - "No, I don't have a code": "Nein, kein Code", - "Code approved": "Code genehmigt", - "Install our app:": "App installieren:", - "Invite another driver and both get a gift after he completes 100 trips!": - "Lade einen Fahrer ein und erhalte ein Geschenk nach 100 Fahrten!", - "Invite": "Einladen", - "Are you sure?": "Sind Sie sicher?", - "This will delete all recorded files from your device.": - "Dies löscht alle Aufnahmen vom Gerät.", - "Select a file": "Datei auswählen", - "Select a File": "Datei auswählen", - "Delete": "Löschen", - "attach audio of complain": "Beschwerde-Audio anhängen", - "Phone Number Check": "Telefonnummer-Prüfung", - "Drivers received orders": "Fahrer haben Aufträge erhalten", - "No audio files recorded.": "Keine Audioaufnahmen.", - "This is for delivery or a motorcycle.": - "Dies ist für Lieferung oder Motorrad.", - "Intaleq Reminder": "Intaleq Erinnerung", - "It's time to check the Intaleq app!": - "Zeit, die Intaleq App zu prüfen!", - "you must insert token code": "Token-Code eingeben", - "Something went wrong. Please try again.": - "Etwas ist schiefgelaufen. Bitte erneut versuchen.", - "Trip Details": "Fahrtdetails", - "The context does not provide any complaint details, so I cannot provide a solution to this issue. Please provide the necessary information, and I will be happy to assist you.": - "Keine Beschwerdedetails. Bitte Infos bereitstellen.", - "Submit Your Complaint": "Beschwerde einreichen", - "Status": "Status", - "Choose from contact": "Aus Kontakten wählen", - "attach correct audio": "korrektes Audio anhängen", - "be sure": "sicher sein", - "Audio uploaded successfully.": "Audio erfolgreich hochgeladen.", - "Perfect for passengers seeking the latest car models with the freedom to choose any route they desire": - "Perfekt für Fahrgäste, die neue Autos und freie Routenwahl suchen", - "Share this code with your friends and earn rewards when they use it!": - "Code teilen und Belohnungen verdienen!", - "Enter phone": "Telefon eingeben", - "complete, you can claim your gift": - "abgeschlossen, Geschenk abholen", - "When": "Wenn", - "Enter driver's phone": "Fahrer-Telefon eingeben", - "Send Invite": "Einladung senden", - "Show Invitations": "Einladungen anzeigen", - "License Type": "Lizenztyp", - "National Number": "Personalausweisnummer", - "Name (Arabic)": "Name (Arabisch)", - "Name (English)": "Name (Englisch)", - "Address": "Adresse", - "Issue Date": "Ausstellungsdatum", - "Expiry Date": "Ablaufdatum", - "License Categories": "Führerscheinklassen", - "driver_license": "Führerschein", - "Capture an Image of Your Driver License": - "Bild des Führerscheins aufnehmen", - "ID Documents Back": "Ausweis Rückseite", - "National ID": "Personalausweis", - "Occupation": "Beruf", - "Religion": "Religion", - "Full Name (Marital)": "Vollständiger Name", - "Expiration Date": "Ablaufdatum", - "Capture an Image of Your ID Document Back": - "Bild der Ausweis-Rückseite", - "ID Documents Front": "Ausweis Vorderseite", - "First Name": "Vorname", - "CardID": "Kartennummer", - "Vehicle Details Front": "Fahrzeugdetails Vorne", - "Plate Number": "Kennzeichen", - "Owner Name": "Haltername", - "Vehicle Details Back": "Fahrzeugdetails Hinten", - "Make": "Marke", - "Model": "Modell", - "Year": "Jahr", - "Chassis": "Fahrgestellnummer", - "Color": "Farbe", - "Displacement": "Hubraum", - "Fuel": "Kraftstoff", - "Tax Expiry Date": "Steuer-Ablaufdatum", - "Inspection Date": "Inspektionsdatum", - "Capture an Image of Your car license back": - "Bild der Fahrzeugschein-Rückseite", - "Capture an Image of Your Driver's License": "Bild des Führerscheins", - "Sign in with Google for easier email and name entry": - "Mit Google anmelden für einfachere Eingabe", - "You will choose allow all the time to be ready receive orders": - "Wählen Sie 'Immer erlauben', um Aufträge zu erhalten", - "Get to your destination quickly and easily.": - "Schnell und einfach ans Ziel.", - "Enjoy a safe and comfortable ride.": - "Sichere und komfortable Fahrt genießen.", - "Choose Language": "Sprache wählen", - "Pay with Wallet": "Mit Wallet zahlen", - "Invalid MPIN": "Ungültige MPIN", - "Invalid OTP": "Ungültiger OTP", - "Enter your email address": "E-Mail eingeben", - "Please enter Your Email.": "Bitte E-Mail eingeben.", - "Enter your phone number": "Telefonnummer eingeben", - "Please enter your phone number.": "Bitte Telefonnummer eingeben.", - "Please enter Your Password.": "Bitte Passwort eingeben.", - "if you dont have account": "wenn Sie kein Konto haben", - "Register": "Registrieren", - "Accept Ride's Terms & Review Privacy Notice": - "Bedingungen & Datenschutz akzeptieren", - "By selecting 'I Agree' below, I have reviewed and agree to the Terms of Use and acknowledge the Privacy Notice. I am at least 18 years of age.": - "Ich akzeptiere die Bedingungen und Datenschutzrichtlinien. Ich bin 18+.", - "First name": "Vorname", - "Enter your first name": "Vorname eingeben", - "Please enter your first name.": "Bitte Vorname eingeben.", - "Last name": "Nachname", - "Enter your last name": "Nachname eingeben", - "Please enter your last name.": "Bitte Nachname eingeben.", - "City": "Stadt", - "Please enter your City.": "Bitte Stadt eingeben.", - "Verify Email": "E-Mail verifizieren", - "We sent 5 digit to your Email provided": - "Wir haben 5 Ziffern an Ihre E-Mail gesendet", - "5 digit": "5 Ziffern", - "Send Verification Code": "Verifizierungscode senden", - "Your Ride Duration is ": "Ihre Fahrtdauer beträgt ", - "You will be thier in": "Sie sind dort in", - "You trip distance is": "Fahrtdistanz ist", - "Fee is": "Gebühr ist", - "From : ": "Von: ", - "To : ": "Nach: ", - "Add Promo": "Promo hinzufügen", - "Confirm Selection": "Auswahl bestätigen", - "distance is": "Distanz ist", - "Privacy Policy": "Datenschutzerklärung", - "Intaleq LLC": "Intaleq LLC", - "Syria's pioneering ride-sharing service, proudly developed by Arabian and local owners. We prioritize being near you – both our valued passengers and our dedicated captains.": - "Deutschlands wegweisender Mitfahrdienst.", - "Intaleq is the first ride-sharing app in Syria, designed to connect you with the nearest drivers for a quick and convenient travel experience.": - "Intaleq verbindet Sie mit den nächsten Fahrern.", - "Why Choose Intaleq?": "Warum Intaleq?", - "Closest to You": "Am nächsten zu Ihnen", - "We connect you with the nearest drivers for faster pickups and quicker journeys.": - "Wir verbinden Sie mit den nächsten Fahrern.", - "Uncompromising Security": "Kompromisslose Sicherheit", - "Lady Captains Available": "Fahrerinnen verfügbar", - "Recorded Trips (Voice & AI Analysis)": - "Aufgezeichnete Fahrten (Stimme & KI)", - "Fastest Complaint Response": "Schnellste Beschwerdeantwort", - "Our dedicated customer service team ensures swift resolution of any issues.": - "Unser Kundenservice löst Probleme schnell.", - "Affordable for Everyone": "Erschwinglich für alle", - "Frequently Asked Questions": "Häufig gestellte Fragen", - "Getting Started": "Erste Schritte", - "Simply open the Intaleq app, enter your destination, and tap \"Request Ride\". The app will connect you with a nearby driver.": - "Öffnen Sie Intaleq, geben Sie das Ziel ein und tippen Sie auf 'Fahrt anfordern'.", - "Vehicle Options": "Fahrzeugoptionen", - "Intaleq offers a variety of options including Economy, Comfort, and Luxury to suit your needs and budget.": - "Intaleq bietet Economy, Komfort und Luxus.", - "Payments": "Zahlungen", - "You can pay for your ride using cash or credit/debit card. You can select your preferred payment method before confirming your ride.": - "Zahlen Sie bar oder mit Karte.", - "Ride Management": "Fahrtmanagement", - "Yes, you can cancel your ride, but please note that cancellation fees may apply depending on how far in advance you cancel.": - "Stornierung möglich, Gebühren können anfallen.", - "For Drivers": "Für Fahrer", - "Driver Registration": "Fahrer-Registrierung", - "To register as a driver or learn about the requirements, please visit our website or contact Intaleq support directly.": - "Besuchen Sie die Website oder kontaktieren Sie den Support.", - "Visit Website/Contact Support": - "Website besuchen / Support kontaktieren", - "Close": "Schließen", - "We are searching for the nearest driver": - "Wir suchen den nächsten Fahrer", - "Communication": "Kommunikation", - "How do I communicate with the other party (passenger/driver)?": - "Wie kommuniziere ich mit dem Fahrer/Fahrgast?", - "You can communicate with your driver or passenger through the in-app chat feature once a ride is confirmed.": - "Nutzen Sie den In-App-Chat nach Bestätigung.", - "Safety & Security": "Sicherheit", - "What safety measures does Intaleq offer?": - "Welche Sicherheitsmaßnahmen bietet Intaleq?", - "Intaleq offers various safety features including driver verification, in-app trip tracking, emergency contact options, and the ability to share your trip status with trusted contacts.": - "Intaleq bietet Fahrerverifizierung, Tracking und Notrufe.", - "Enjoy competitive prices across all trip options, making travel accessible.": - "Genießen Sie wettbewerbsfähige Preise.", - "Variety of Trip Choices": "Vielfalt an Fahrtoptionen", - "Choose the trip option that perfectly suits your needs and preferences.": - "Wählen Sie die passende Option.", - "Your Choice, Our Priority": "Ihre Wahl, unsere Priorität", - "Because we are near, you have the flexibility to choose the ride that works best for you.": - "Flexibilität bei der Wahl der Fahrt.", - "duration is": "Dauer ist", - "Setting": "Einstellung", - "Find answers to common questions": - "Antworten auf häufige Fragen finden", - "I don't need a ride anymore": "Ich brauche keine Fahrt mehr", - "I was just trying the application": - "Ich habe die App nur ausprobiert", - "No driver accepted my request": "Kein Fahrer hat angenommen", - "I added the wrong pick-up/drop-off location": - "Falscher Ort eingegeben", - "I don't have a reason": "Kein Grund", - "Can we know why you want to cancel Ride ?": - "Warum möchten Sie stornieren?", - "Cancel Ride": "Fahrt stornieren", - "Add Payment Method": "Zahlungsmethode hinzufügen", - "Ride Wallet": "Fahrt-Wallet", - "Payment Method": "Zahlungsmethode", - "Type here Place": "Ort hier eingeben", - "Are You sure to ride to": "Sind Sie sicher, nach ... zu fahren", - "Confirm": "Bestätigen", - "You are Delete": "Sie löschen", - "Deleted": "Gelöscht", - "You Dont Have Any places yet !": "Noch keine Orte gespeichert!", - "From : Current Location": "Von: Aktueller Standort", - "My Cared": "Meine Karten", - "Add Card": "Karte hinzufügen", - "Add Credit Card": "Kreditkarte hinzufügen", - "Please enter the cardholder name": "Karteninhaber eingeben", - "Please enter the expiry date": "Ablaufdatum eingeben", - "Please enter the CVV code": "CVV-Code eingeben", - "Go To Favorite Places": "Zu Lieblingsorten", - "Go to this Target": "Zu diesem Ziel", - "My Profile": "Mein Profil", - "Are you want to go to this site": "Möchten Sie zu diesem Ort?", - "MyLocation": "MeinStandort", - "my location": "mein Standort", - "Target": "Ziel", - "You Should choose rate figure": "Sie sollten eine Bewertung wählen", - "Login Captin": "Fahrer Login", - "Register Captin": "Fahrer Registrierung", - "Send Verfication Code": "Verifizierungscode senden", - "KM": "KM", - "End Ride": "Fahrt beenden", - "Minute": "Minute", - "Go to passenger Location now": "Zum Fahrgaststandort fahren", - "Duration of the Ride is ": "Fahrtdauer ist ", - "Distance of the Ride is ": "Fahrtdistanz ist ", - "Name of the Passenger is ": "Name des Fahrgastes ist ", - "Hello this is Captain": "Hallo, hier spricht der Fahrer", - "Start the Ride": "Fahrt starten", - "Please Wait If passenger want To Cancel!": - "Bitte warten, falls Fahrgast stornieren will!", - "Total Duration:": "Gesamtdauer:", - "Active Duration:": "Aktive Dauer:", - "Waiting for Captin ...": "Warten auf Fahrer...", - "Age is ": "Alter ist ", - "Rating is ": "Bewertung ist ", - " to arrive you.": " um anzukommen.", - "Tariff": "Tarif", - "Settings": "Einstellungen", - "Feed Back": "Feedback", - "Please enter a valid 16-digit card number": - "Bitte gültige 16-stellige Kartennummer eingeben", - "Add Phone": "Telefon hinzufügen", - "Please enter a phone number": "Bitte Telefonnummer eingeben", - "You dont Add Emergency Phone Yet!": - "Noch keine Notrufnummer hinzugefügt!", - "You will arrive to your destination after ": "Sie kommen an in ", - "You can cancel Ride now": "Sie können die Fahrt jetzt stornieren", - "You Can cancel Ride After Captain did not come in the time": - "Stornierung möglich, wenn Fahrer nicht rechtzeitig kommt", - "If you in Car Now. Press Start The Ride": - "Wenn Sie im Auto sind, drücken Sie Start", - "You Dont Have Any amount in": "Sie haben kein Guthaben in", - "Wallet!": "Wallet!", - "You Have": "Sie haben", - "Save Credit Card": "Kreditkarte speichern", - "Show Promos": "Promos anzeigen", - "10 and get 4% discount": "10 und erhalte 4% Rabatt", - "20 and get 6% discount": "20 und erhalte 6% Rabatt", - "40 and get 8% discount": "40 und erhalte 8% Rabatt", - "100 and get 11% discount": "100 und erhalte 11% Rabatt", - "Pay with Your PayPal": "Mit PayPal zahlen", - "You will choose one of above !": "Bitte oben auswählen!", - "Edit Profile": "Profil bearbeiten", - "Copy this Promo to use it in your Ride!": - "Promo kopieren und nutzen!", - "To change some Settings": "Um Einstellungen zu ändern", - "Order Request Page": "Auftragsanfrageseite", - "Rouats of Trip": "Routen der Fahrt", - "Passenger Name is ": "Fahrgastname ist ", - "Total From Passenger is ": "Gesamt vom Fahrgast ist ", - "Duration To Passenger is ": "Dauer zum Fahrgast ist ", - "Distance To Passenger is ": "Distanz zum Fahrgast ist ", - "Total For You is ": "Gesamt für Sie ist ", - "Distance is ": "Distanz ist ", - " KM": " KM", - "Duration of Trip is ": "Fahrtdauer ist ", - " Minutes": " Minuten", - "Apply Order": "Auftrag annehmen", - "Refuse Order": "Auftrag ablehnen", - "Rate Captain": "Fahrer bewerten", - "Enter your Note": "Notiz eingeben", - "Type something...": "Etwas eingeben...", - "Submit rating": "Bewertung absenden", - "Rate Passenger": "Fahrgast bewerten", - "Ride Summary": "Fahrtzusammenfassung", - "welcome_message": "Willkommen bei Intaleq!", - "app_description": - "Intaleq ist eine sichere und zuverlässige Mitfahr-App.", - "get_to_destination": "Kommen Sie schnell ans Ziel.", - "get_a_ride": "Mit Intaleq in Minuten eine Fahrt bekommen.", - "safe_and_comfortable": "Genießen Sie eine sichere Fahrt.", - "committed_to_safety": "Intaleq engagiert sich für Sicherheit.", - "your ride is Accepted": "Ihre Fahrt wurde angenommen", - "Driver is waiting at pickup.": "Fahrer wartet am Abholort.", - "Driver is on the way": "Fahrer ist auf dem Weg", - "Contact Options": "Kontaktoptionen", - "Send a custom message": "Benutzerdefinierte Nachricht senden", - "Type your message": "Nachricht eingeben", - "I will go now": "Ich gehe jetzt", - "You Have Tips": "Sie haben Trinkgeld", - " tips\nTotal is": " Trinkgeld\nGesamt ist", - "Your fee is ": "Ihre Gebühr ist ", - "Do you want to pay Tips for this Driver": - "Möchten Sie Trinkgeld geben?", - "Tip is ": "Trinkgeld ist ", - "Are you want to wait drivers to accept your order": - "Wollen Sie warten, bis Fahrer annehmen?", - "This price is fixed even if the route changes for the driver.": - "Festpreis, auch bei Routenänderung.", - "The price may increase if the route changes.": - "Preis kann bei Routenänderung steigen.", - "The captain is responsible for the route.": - "Der Fahrer ist für die Route verantwortlich.", - "We are search for nearst driver": "Wir suchen den nächsten Fahrer", - "Your order is being prepared": "Ihr Auftrag wird vorbereitet", - "The drivers are reviewing your request": - "Fahrer prüfen Ihre Anfrage", - "Your order sent to drivers": "Auftrag an Fahrer gesendet", - "You can call or record audio of this trip": - "Sie können anrufen oder aufnehmen", - "The trip has started! Feel free to contact emergency numbers, share your trip, or activate voice recording for the journey": - "Fahrt gestartet! Notruf, Teilen oder Aufnahme möglich.", - "Camera Access Denied.": "Kamerazugriff verweigert.", - "Open Settings": "Einstellungen öffnen", - "GPS Required Allow !.": "GPS erforderlich, bitte erlauben!", - "Your Account is Deleted": "Ihr Konto wurde gelöscht", - "Are you sure to delete your account?": "Konto wirklich löschen?", - "Your data will be erased after 2 weeks\nAnd you will can't return to use app after 1 month ": - "Daten werden nach 2 Wochen gelöscht\nApp-Nutzung nach 1 Monat nicht mehr möglich", - "Enter Your First Name": "Vorname eingeben", - "Are you Sure to LogOut?": "Wirklich abmelden?", - "Email Wrong": "E-Mail falsch", - "Email you inserted is Wrong.": "Eingegebene E-Mail ist falsch.", - "You have finished all times ": "Alle Versuche aufgebraucht", - "if you want help you can email us here": "Hilfe per E-Mail hier", - "Thanks": "Danke", - "Email Us": "E-Mail senden", - "I cant register in your app in face detection ": - "Registrierung bei Gesichtserkennung fehlgeschlagen", - "Hi": "Hallo", - "No face detected": "Kein Gesicht erkannt", - "Image detecting result is ": "Ergebnis der Bilderkennung ist ", - "from 3 times Take Attention": "von 3 Malen, Achtung", - "Be sure for take accurate images please\nYou have": - "Bitte genaue Bilder machen\nSie haben", - "image verified": "Bild verifiziert", - "Next": "Weiter", - "There is no help Question here": "Keine Hilfe-Frage hier", - "You dont have Points": "Sie haben keine Punkte", - "You Are Stopped For this Day !": "Sie sind für heute gesperrt!", - "You must be charge your Account": "Sie müssen Ihr Konto aufladen", - "You Refused 3 Rides this Day that is the reason \nSee you Tomorrow!": - "Sie haben 3 Fahrten abgelehnt \nBis morgen!", - "Recharge my Account": "Mein Konto aufladen", - "Ok , See you Tomorrow": "Ok, bis morgen", - "You are Stopped": "Sie sind gesperrt", - "Connected": "Verbunden", - "Not Connected": "Nicht verbunden", - "Your are far from passenger location": - "Sie sind weit vom Fahrgast entfernt", - "go to your passenger location before\nPassenger cancel trip": - "Zum Fahrgast fahren bevor\ner storniert", - "You will get cost of your work for this trip": - "Sie erhalten die Kosten für diese Fahrt", - " in your wallet": " in Ihrer Wallet", - "you gain": "Sie gewinnen", - "Order Cancelled by Passenger": "Auftrag vom Fahrgast storniert", - "Feedback data saved successfully": "Feedback gespeichert", - "No Promo for today .": "Keine Promo für heute.", - "Select your destination": "Ziel auswählen", - "Search for your Start point": "Startpunkt suchen", - "Search for waypoint": "Wegpunkt suchen", - "Current Location": "Aktueller Standort", - "Add Location 1": "Ort 1 hinzufügen", - "You must Verify email !.": "E-Mail verifizieren!", - "Cropper": "Zuschneiden", - "Saved Sucssefully": "Erfolgreich gespeichert", - "Select Date": "Datum wählen", - "Birth Date": "Geburtsdatum", - "Ok": "Ok", - "the 500 points equal 30 JOD": "500 Punkte entsprechen 30 €", - "the 500 points equal 30 JOD for you \nSo go and gain your money": - "500 Punkte sind 30 € für Sie \nVerdienen Sie Ihr Geld", - "token updated": "Token aktualisiert", - "Add Location 2": "Ort 2 hinzufügen", - "Add Location 3": "Ort 3 hinzufügen", - "Add Location 4": "Ort 4 hinzufügen", - "Waiting for your location": "Warten auf Standort", - "Search for your destination": "Ziel suchen", - "Hi! This is": "Hallo! Hier ist", - " I am using": " Ich nutze", - " to ride with": " um zu fahren mit", - " as the driver.": " als Fahrer.", - "is driving a ": "fährt einen ", - " with license plate ": " mit Kennzeichen ", - " I am currently located at ": " Ich befinde mich bei ", - "Please go to Car now ": "Bitte zum Auto gehen ", - "You will receive a code in WhatsApp Messenger": - "Sie erhalten einen Code per WhatsApp", - "If you need assistance, contact us": - "Bei Fragen kontaktieren Sie uns", - "Promo Ended": "Promo beendet", - "Enter the promo code and get": "Promo-Code eingeben und erhalten", - "DISCOUNT": "RABATT", - "No wallet record found": "Kein Wallet-Eintrag gefunden", - "for": "für", - "Intaleq is the safest ride-sharing app that introduces many features for both captains and passengers. We offer the lowest commission rate of just 8%, ensuring you get the best value for your rides. Our app includes insurance for the best captains, regular maintenance of cars with top engineers, and on-road services to ensure a respectful and high-quality experience for all users.": - "Intaleq ist sicherste Mitfahr-App mit vielen Features. Niedrigste Provision von 8%.", - "You can contact us during working hours from 12:00 - 19:00.": - "Kontaktieren Sie uns von 12:00 - 19:00 Uhr.", - "Choose a contact option": "Kontaktoption wählen", - "Work time is from 12:00 - 19:00.\nYou can send a WhatsApp message or email.": - "Arbeitszeit 12:00 - 19:00 Uhr.\nWhatsApp oder E-Mail senden.", - "Promo code copied to clipboard!": "Promo-Code kopiert!", - "Copy Code": "Code kopieren", + "بياناتك رح تنمسح بعد أسبوعين", + "Your driver’s license and/or car tax has expired. Please renew them before proceeding.": + "رخصة سيارتك و/أو ضريبة السيارة منتهية. تفضل تجددها قبل ما تكمل.", + "Your driver’s license has expired.": "رخصة سيارتك منتهية.", + "Your driver’s license has expired. Please renew it before proceeding.": + "رخصة سيارتك منتهية. تفضل تجددها قبل ما تكمل.", + "Your driver’s license has expired. Please renew it.": + "رخصة سيارتك منتهية. تفضل تجددها.", + "Your email address": "عنوان بريدك الإلكتروني", + "Your email not updated yet": "بريدك ما انحدث لسا", + "Your fee is": "أجرتك هي", "Your invite code was successfully applied!": - "Einladungscode erfolgreich angewendet!", - "Payment Options": "Zahlungsoptionen", - "wait 1 minute to receive message": "1 Minute auf Nachricht warten", - "You have copied the promo code.": "Sie haben den Code kopiert.", - "Select Payment Amount": "Zahlungsbetrag wählen", - "The promotion period has ended.": "Promotionszeitraum beendet.", - "Promo Code Accepted": "Promo-Code akzeptiert", - "Tap on the promo code to copy it!": "Tippen zum Kopieren!", - "Lowest Price Achieved": "Niedrigster Preis erreicht", - "Cannot apply further discounts.": "Keine weiteren Rabatte möglich.", - "Promo Already Used": "Promo bereits genutzt", - "Invitation Used": "Einladung genutzt", - "You have already used this promo code.": "Code bereits verwendet.", - "Insert Your Promo Code": "Promo-Code eingeben", - "Enter promo code here": "Promo-Code hier eingeben", - "Please enter a valid promo code": "Bitte gültigen Code eingeben", - "Awfar Car": "Spar-Auto", - "Old and affordable, perfect for budget rides.": - "Alt und günstig, perfekt für Budget-Fahrten.", - " If you need to reach me, please contact the driver directly at": - " Um mich zu erreichen, kontaktieren Sie den Fahrer unter", - "No Car or Driver Found in your area.": - "Kein Auto oder Fahrer in Ihrer Nähe.", - "Please Try anther time ": "Bitte später versuchen ", - "There no Driver Aplly your order sorry for that ": - "Kein Fahrer hat angenommen, tut uns leid ", - "Trip Cancelled": "Fahrt storniert", - "The Driver Will be in your location soon .": "Fahrer ist bald da.", - "The distance less than 500 meter.": "Distanz weniger als 500 Meter.", - "Promo End !": "Promo Ende!", - "There is no notification yet": "Noch keine Benachrichtigung", - "Use Touch ID or Face ID to confirm payment": - "Touch ID oder Face ID zur Bestätigung nutzen", - "Contact us for any questions on your order.": - "Kontaktieren Sie uns bei Fragen.", - "Pyament Cancelled .": "Zahlung abgebrochen.", - "type here": "hier tippen", - "Scan Driver License": "Führerschein scannen", - "Please put your licence in these border": - "Führerschein in den Rahmen legen", - "Camera not initialized yet": "Kamera noch nicht initialisiert", - "Take Image": "Bild aufnehmen", - "AI Page": "KI-Seite", - "Take Picture Of ID Card": "Bild des Ausweises machen", - "Take Picture Of Driver License Card": - "Bild des Führerscheins machen", - "We are process picture please wait ": - "Bild wird verarbeitet, bitte warten ", - "There is no data yet.": "Noch keine Daten.", - "Name :": "Name:", - "Drivers License Class: ": "Führerscheinklasse:", - "Document Number: ": "Dokumentennummer:", - "Address: ": "Adresse:", - "Height: ": "Größe:", - "Expiry Date: ": "Ablaufdatum:", - "Date of Birth: ": "Geburtsdatum:", - "You can't continue with us .\nYou should renew Driver license": - "Sie können nicht fortfahren.\nFührerschein erneuern", - "Detect Your Face ": "Gesicht erkennen ", - "Go to next step\nscan Car License.": - "Nächster Schritt\nFahrzeugschein scannen.", - "Name in arabic": "Name auf Arabisch", - "Drivers License Class": "Führerscheinklasse", - "Selected Date": "Ausgewähltes Datum", - "Select Time": "Zeit wählen", - "Selected Time": "Ausgewählte Zeit", - "Selected Date and Time": "Ausgewähltes Datum und Zeit", - "Lets check Car license ": "Fahrzeugschein prüfen ", - "Car": "Auto", - "Plate": "Kennzeichen", - "Rides": "Fahrten", - "Selected driver": "Ausgewählter Fahrer", - "Lets check License Back Face": "Rückseite prüfen", - "Car License Card": "Fahrzeugschein", - "No image selected yet": "Kein Bild ausgewählt", - "Made :": "Marke:", - "model :": "Modell:", - "VIN :": "FIN:", - "year :": "Jahr:", - "ُExpire Date": "Ablaufdatum", - "Login Driver": "Fahrer Login", - "Password must br at least 6 character.": - "Passwort muss mind. 6 Zeichen haben.", - "if you don't have account": "wenn Sie kein Konto haben", - "Here recorded trips audio": "Hier aufgezeichnete Fahrten-Audios", - "Register as Driver": "Als Fahrer registrieren", - "By selecting \"I Agree\" below, I have reviewed and agree to the Terms of Use and acknowledge the ": - "Durch Auswahl von \"Ich stimme zu\" akzeptiere ich die Nutzungsbedingungen und ", - "Log Out Page": "Abmeldeseite", - "Log Off": "Abmelden", - "Register Driver": "Fahrer registrieren", - "Verify Email For Driver": "E-Mail für Fahrer verifizieren", - "Admin DashBoard": "Admin-Dashboard", - "Your name": "Ihr Name", - "your ride is applied": "Ihre Fahrt wurde beantragt", - "H and": "S und", - "JOD": "€", - "m": "m", - "We search nearst Driver to you": "Wir suchen den nächsten Fahrer", - "please wait till driver accept your order": - "bitte warten bis Fahrer annimmt", - "No accepted orders? Try raising your trip fee to attract riders.": - "Keine Annahme? Preis erhöhen.", - "You should select one": "Sie sollten eins wählen", - "The driver accept your order for": - "Der Fahrer akzeptiert Ihren Auftrag für", - "The driver on your way": "Fahrer ist auf dem Weg", - "Total price from ": "Gesamtpreis von ", - "Order Details Intaleq": "Auftragsdetails Intaleq", - "Selected file:": "Ausgewählte Datei:", - "Your trip cost is": "Ihre Fahrtkosten sind", - "this will delete all files from your device": - "dies löscht alle Dateien vom Gerät", - "Exclusive offers and discounts always with the Intaleq app": - "Exklusive Angebote mit Intaleq", - "Submit Question": "Frage absenden", - "Please enter your Question.": "Bitte Frage eingeben.", - "Help Details": "Hilfe-Details", - "No trip yet found": "Noch keine Fahrt gefunden", - "No Response yet.": "Noch keine Antwort.", - " You Earn today is ": " Ihr Verdienst heute ist ", - " You Have in": " Sie haben in", - "Total points is ": "Gesamtpunkte sind ", - "Total Connection Duration:": "Gesamtverbindungsdauer:", - "Passenger name : ": "Fahrgastname: ", - "Cost Of Trip IS ": "Fahrtkosten sind ", - "Arrival time": "Ankunftszeit", - "arrival time to reach your point": "Ankunftszeit am Punkt", - "For Intaleq and scooter trips, the price is calculated dynamically. For Comfort trips, the price is based on time and distance": - "Intaleq/Scooter: dynamisch. Komfort: Zeit/Distanz.", - "Hello this is Driver": "Hallo, hier ist der Fahrer", - "Is the Passenger in your Car ?": "Ist der Fahrgast im Auto?", - "Please wait for the passenger to enter the car before starting the trip.": - "Bitte warten bis Fahrgast einsteigt.", - "No ,still Waiting.": "Nein, warte noch.", - "I arrive you": "Ich bin da", - "I Arrive your site": "Ich bin am Standort", - "You are not in near to passenger location": - "Nicht in der Nähe des Fahrgastes", - "please go to picker location exactly": - "bitte genau zum Abholort fahren", - "You Can Cancel Trip And get Cost of Trip From": - "Sie können stornieren und Kosten erhalten von", - "Are you sure to cancel?": "Wirklich stornieren?", - "Insert Emergincy Number": "Notrufnummer eingeben", - "Best choice for comfort car and flexible route and stops point": - "Beste Wahl für Komfort und Flexibilität", - "Insert": "Einfügen", - "This is for scooter or a motorcycle.": - "Dies ist für Scooter oder Motorrad.", - "This trip goes directly from your starting point to your destination for a fixed price. The driver must follow the planned route": - "Direktfahrt zum Festpreis. Fahrer muss Route folgen.", - "You can decline a request without any cost": - "Ablehnen ohne Kosten möglich", - "Perfect for adventure seekers who want to experience something new and exciting": - "Perfekt für Abenteurer", - "My current location is:": "Mein Standort ist:", - "and I have a trip on": "und ich habe eine Fahrt auf", - "App with Passenger": "App mit Fahrgast", - "You will be pay the cost to driver or we will get it from you on next trip": - "Zahlen Sie den Fahrer oder wir ziehen es beim nächsten Mal ein", - "Trip has Steps": "Fahrt hat Zwischenstopps", - "Distance from Passenger to destination is ": - "Entfernung Fahrgast zum Ziel ist ", - "price is": "Preis ist", - "This ride type does not allow changes to the destination or additional stops": - "Keine Änderungen erlaubt", - "This price may be changed": "Preis kann sich ändern", - "No SIM card, no problem! Call your driver directly through our app. We use advanced technology to ensure your privacy.": - "Keine SIM? Anruf über App möglich.", - "This ride type allows changes, but the price may increase": - "Änderungen erlaubt, Preis kann steigen", - "Select one message": "Eine Nachricht wählen", - "I'm waiting for you": "Ich warte auf Sie", - "We noticed the Intaleq is exceeding 100 km/h. Please slow down for your safety. If you feel unsafe, you can share your trip details with a contact or call the police using the red SOS button.": - "Geschwindigkeit über 100 km/h. Bitte langsamer fahren.", - "Warning: Intaleqing detected!": "Warnung: Zu schnell!", - "Please help! Contact me as soon as possible.": - "Hilfe! Kontaktieren Sie mich sofort.", - "Share Trip Details": "Fahrtdetails teilen", - "Car Plate is ": "Kennzeichen ist ", - "the 300 points equal 300 L.E for you \nSo go and gain your money": - "300 Punkte sind 300 € für Sie \nVerdienen Sie Ihr Geld", - "the 300 points equal 300 L.E": "300 Punkte sind 300 €", - "The payment was not approved. Please try again.": - "Zahlung nicht genehmigt. Bitte erneut versuchen.", - "Payment Failed": "Zahlung fehlgeschlagen", - "This is a scheduled notification.": "Geplante Benachrichtigung.", - "An error occurred during the payment process.": - "Fehler beim Zahlungsprozess.", - "The payment was approved.": "Zahlung genehmigt.", - "Payment Successful": "Zahlung erfolgreich", - "No ride found yet": "Noch keine Fahrt gefunden", - "Accept Order": "Auftrag annehmen", - "Bottom Bar Example": "Beispiel untere Leiste", - "Driver phone": "Fahrer-Telefon", - "Statistics": "Statistiken", - "Origin": "Start", - "Destination": "Ziel", - "Driver Name": "Fahrername", - "Driver Car Plate": "Fahrer-Kennzeichen", - "Available for rides": "Verfügbar für Fahrten", - "Scan Id": "Ausweis scannen", - "Camera not initilaized yet": "Kamera nicht initialisiert", - "Scan ID MklGoogle": "ID MklGoogle scannen", - "Language": "Sprache", - "Jordan": "Jordanien", - "USA": "USA", - "Egypt": "Ägypten", - "Turkey": "Türkei", - "Saudi Arabia": "Saudi-Arabien", - "Qatar": "Katar", - "Bahrain": "Bahrain", - "Kuwait": "Kuwait", - "But you have a negative salary of": - "Aber Sie haben ein negatives Gehalt von", - "Promo Code": "Promo-Code", - "Your trip distance is": "Ihre Fahrtdistanz ist", - "Enter promo code": "Promo-Code eingeben", - "You have promo!": "Sie haben eine Promo!", - "Cost Duration": "Kostendauer", - "Duration is": "Dauer ist", - "Leave": "Verlassen", - "Join": "Beitreten", - "Heading your way now. Please be ready.": - "Ich komme. Bitte bereit sein.", - "Approaching your area. Should be there in 3 minutes.": - "In der Nähe. In 3 Minuten da.", - "There's heavy traffic here. Can you suggest an alternate pickup point?": - "Viel Verkehr. Anderen Abholort vorschlagen?", - "This ride is already taken by another driver.": - "Fahrt bereits vergeben.", - "You Should be select reason.": "Grund auswählen.", - "Waiting for Driver ...": "Warten auf Fahrer...", - "Latest Recent Trip": "Letzte Fahrt", - "from your list": "aus Ihrer Liste", - "Do you want to change Work location": "Arbeitsort ändern", - "Do you want to change Home location": "Wohnort ändern", - "We Are Sorry That we dont have cars in your Location!": - "Keine Autos in Ihrer Gegend!", - "Choose from Map": "Von Karte wählen", - "Pick your ride location on the map - Tap to confirm": - "Ort auf Karte wählen - Tippen zum Bestätigen", - "Intaleq is the ride-hailing app that is safe, reliable, and accessible.": - "Intaleq ist sicher und zuverlässig.", - "With Intaleq, you can get a ride to your destination in minutes.": - "In Minuten ans Ziel mit Intaleq.", - "Intaleq is committed to safety, and all of our captains are carefully screened and background checked.": - "Sicherheit verpflichtet: Alle Fahrer geprüft.", - "Pick from map": "Von Karte wählen", - "No Car in your site. Sorry!": "Kein Auto an Ihrem Standort. Sorry!", - "Nearest Car for you about ": "Nächstes Auto in ca. ", - "From :": "Von:", - "Get Details of Trip": "Fahrtdetails abrufen", - "If you want add stop click here": "Für Zwischenstopp hier klicken", - "Where you want go ": "Wohin wollen Sie ", - "My Card": "Meine Karte", - "Start Record": "Aufnahme starten", - "History of Trip": "Fahrtverlauf", - "Helping Center": "Hilfe-Center", - "Record saved": "Aufnahme gespeichert", - "Trips recorded": "Aufgezeichnete Fahrten", - "Select Your Country": "Land wählen", - "To ensure you receive the most accurate information for your location, please select your country below. This will help tailor the app experience and content to your country.": - "Bitte wählen Sie Ihr Land für genaue Informationen.", - "Are you sure to delete recorded files": - "Aufnahmen wirklich löschen?", - "Select recorded trip": "Aufgezeichnete Fahrt wählen", - "Card Number": "Kartennummer", - "Hi, Where to ": "Hallo, wohin ", - "Pick your destination from Map": "Ziel auf Karte wählen", - "Add Stops": "Stopps hinzufügen", - "Get Direction": "Route abrufen", - "Add Location": "Ort hinzufügen", - "Switch Rider": "Fahrgast wechseln", - "You will arrive to your destination after timer end.": - "Ankunft nach Timer-Ende.", - "You can cancel trip": "Sie können stornieren", - "The driver waitting you in picked location .": - "Fahrer wartet am Abholort.", - "Pay with Your": "Zahlen mit", - "Pay with Credit Card": "Mit Kreditkarte zahlen", - "Show Promos to Charge": "Promos zum Aufladen zeigen", - "Point": "Punkt", - "How many hours would you like to wait?": "Wie viele Stunden warten?", - "Driver Wallet": "Fahrer-Wallet", - "Choose between those Type Cars": "Fahrzeugtyp wählen", - "hour": "Stunde", - "Select Waiting Hours": "Wartezeit wählen", - "Total Points is": "Gesamtpunkte sind", - "You will receive a code in SMS message": "Sie erhalten SMS-Code", - "Done": "Fertig", - "Total Budget from trips is ": "Gesamtbudget aus Fahrten ist ", - "Total Amount:": "Gesamtbetrag:", - "Total Budget from trips by\nCredit card is ": - "Gesamtbudget per\nKreditkarte ist ", - "This amount for all trip I get from Passengers": - "Betrag von Fahrgästen", - "Pay from my budget": "Vom Budget zahlen", - "This amount for all trip I get from Passengers and Collected For me in": - "Gesammelter Betrag in", - "You can buy points from your budget": "Punkte vom Budget kaufen", - "insert amount": "Betrag eingeben", - "You can buy Points to let you online\nby this list below": - "Punkte kaufen, um online zu bleiben\nüber Liste unten", - "Create Wallet to receive your money": - "Wallet erstellen für Geldempfang", - "Enter your feedback here": "Feedback hier eingeben", - "Please enter your feedback.": "Bitte Feedback eingeben.", - "Feedback": "Feedback", - "Submit ": "Absenden ", - "Click here to Show it in Map": "Hier klicken für Karte", - "Canceled": "Storniert", - "No I want": "Nein ich will", - "Email is": "E-Mail ist:", - "Phone Number is": "Telefonnummer ist:", - "Date of Birth is": "Geburtsdatum ist:", - "Sex is ": "Geschlecht ist: ", - "Car Details": "Fahrzeugdetails", - "VIN is": "FIN ist:", - "Color is ": "Farbe ist: ", - "Make is ": "Marke ist: ", - "Model is": "Modell ist:", - "Year is": "Jahr ist:", - "Expiration Date ": "Ablaufdatum: ", - "Edit Your data": "Daten bearbeiten", - "write vin for your car": "FIN eingeben", - "VIN": "FIN", - "Device Change Detected": "Gerätewechsel erkannt", - "Please verify your identity": "Identität verifizieren", - "write Color for your car": "Farbe eingeben", - "write Make for your car": "Marke eingeben", - "write Model for your car": "Modell eingeben", - "write Year for your car": "Jahr eingeben", - "write Expiration Date for your car": "Ablaufdatum eingeben", - "Tariffs": "Tarife", - "Minimum fare": "Mindestfahrpreis", - "Maximum fare": "Höchstfahrpreis", - "Flag-down fee": "Grundgebühr", - "Including Tax": "Inkl. Steuer", - "BookingFee": "Buchungsgebühr", - "Morning": "Morgen", + "تم تطبيق كود الدعوة بنجاح!", + "Your journey starts here": "رحلتك بلشت من هون", + "Your location is being tracked in the background.": + "موقعك عم يتتبع بالخلفية.", + "Your name": "اسمك", + "Your order is being prepared": "طلبك عم يتجهّز", + "Your order sent to drivers": "تم إرسال طلبك للسواقين", + "Your password": "كلمة مرورك", + "Your past trips will appear here.": "رحلاتك السابقة رح تظهر هون.", + "Your payment was successful.": "تم دفعك بنجاح.", + "Your personal invitation code is:": "كود الدعوة الشخصي بتاعك هو:", + "Your rating has been submitted.": "تم إرسال تقييمك.", + "Your total balance:": "رصيدك الإجمالي:", + "Your trip cost is": "تكلفة رحلتك هي", + "Your trip distance is": "مسافة رحلتك هي", + "Your trip is scheduled": "رحلتك مجدولة", + "Your valuable feedback helps us improve our service quality.": + "تعليقك القيم بيساعدنا نحسّن جودة خدمتنا.", + "\$": "\$", + "\nWe also prioritize affordability, offering competitive pricing to make your rides accessible.": + "\nكمان بنعطي أولوية للتوفير، بنقدم أسعار منافسة عشان الرحلات تكون بمتناول إيدك.", + "accepted": "انقبلت", + "accepted your order": "قبل طلبك", + "accepted your order at price": "قبل طلبك بسعر", + "age": "العمر", + "agreement subtitle": "عنوان الاتفاقية", + "airport": "المطار", + "alert": "تنبيه", + "amount": "المبلغ", + "amount_paid": "المبلغ المدفوع", + "an error occurred": "صار خطأ", + "and I have a trip on": "وعندي رحلة بـ", + "and acknowledge our": "وبوافق على", + "app_description": "وصف التطبيق", + "ar": "ar", + "ar-gulf": "ar-gulf", + "ar-ma": "ar-ma", + "arrival time to reach your point": "وقت الوصول لنقطتك", + "attach audio of complain": "أرفق صوت الشكوى", + "attach correct audio": "أرفق الصوت الصحيح", + "be sure": "تأكد", + "before": "قبل", + "birthdate": "تاريخ الميلاد", + "bonus_added": "البونص المضاف", + "by": "بواسطة", + "by this list below": "بهالقائمة تحت", + "cancel": "إلغاء", + "car_back": "خلفي السيارة", + "car_color": "لون السيارة", + "car_front": "أمامي السيارة", + "car_license_back": "الجانب الخلفي لرخصة السيارة", + "car_license_front": "الجانب الأمامي لرخصة السيارة", + "car_model": "موديل السيارة", + "car_plate": "لوحة السيارة", + "change device": "تغيير الجهاز", + "color.beige": "بيج", + "color.black": "أسود", + "color.blue": "أزرق", + "color.bronze": "برونزي", + "color.brown": "بني", + "color.burgundy": "نبيتي", + "color.champagne": "شمبانيا", + "color.darkGreen": "أخضر غامق", + "color.gold": "ذهبي", + "color.gray": "رمادي", + "color.green": "أخضر", + "color.gunmetal": "رمادي معدني", + "color.maroon": "كستنائي", + "color.navy": "كحلي", + "color.orange": "برتقالي", + "color.purple": "بنفسجي", + "color.red": "أحمر", + "color.silver": "فضي", + "color.white": "أبيض", + "color.yellow": "أصفر", + "committed_to_safety": "ملتزم بالسلامة", + "complete profile subtitle": "عنوان إكمال الملف", + "complete registration button": "زر إكمال التسجيل", + "complete, you can claim your gift": "اكمل، تقدر تستلم هديتك", + "connection_failed": "فشل الاتصال", + "copied to clipboard": "تم النسخ للحافظة", + "cost is": "التكلفة هي", + "created time": "وقت الإنشاء", + "de": "de", + "default_tone": "النغمة الافتراضية", + "deleted": "تم الحذف", + "detected": "تم الكشف عنه", + "distance is": "المسافة هي", + "driver_license": "رخصة القيادة", + "duration is": "المدة هي", + "e.g., 0912345678": "مثال: 0912345678", + "education": "التعليم", + "el": "el", + "email optional label": "تسمية البريد الاختياري", + "end": "نهاية", + "enter otp validation": "أدخل تحقق OTP", + "error": "خطأ", + "error_processing_document": "خطأ بمعالجة المستند", + "es": "es", + "expected": "متوقع", + "expiration_date": "تاريخ الانتهاء", + "fa": "fa", + "face detect": "كشف الوجه", + "failed to send otp": "فشل إرسال OTP", + "false": "خطأ", + "first name label": "تسمية الاسم الأول", + "first name required": "الاسم الأول مطلوب", + "for": "لـ", + "for your first registration!": "لتسجيلك الأول!", + "fr": "fr", "from 07:30 till 10:30 (Thursday, Friday, Saturday, Monday)": - "von 07:30 bis 10:30", - "Evening": "Abend", + "من 7:30 لـ 10:30 (خميس، جمعة، سبت، اثنين)", "from 12:00 till 15:00 (Thursday, Friday, Saturday, Monday)": - "von 12:00 bis 15:00", - "Night": "Nacht", - "You have in account": "Sie haben auf dem Konto", - "Select Country": "Land wählen", - "Ride Today : ": "Fahrt heute: ", - "After this period\nYou can't cancel!": - "Nach dieser Zeit\nkeine Stornierung möglich!", - "from 23:59 till 05:30": "von 23:59 bis 05:30", - "Rate Driver": "Fahrer bewerten", - "Total Cost is ": "Gesamtkosten sind ", - "Write note": "Notiz schreiben", - "Time to arrive": "Ankunftszeit", - "Ride Summaries": "Fahrtzusammenfassungen", - "Total Cost": "Gesamtkosten", - "Average of Hours of": "Durchschnittsstunden von", - " is ON for this month": " ist ON diesen Monat", - "Days": "Tage", - "Total Hours on month": "Gesamtstunden im Monat", - "Counts of Hours on days": "Stundenanzahl an Tagen", - "OrderId": "Auftrags-ID", - "created time": "Erstellzeit", - "Intaleq Over": "Intaleq Ende", - "I will slow down": "Ich werde langsamer fahren", - "Map Passenger": "Karte Fahrgast", - "Be Slowly": "Langsam", - "If you want to make Google Map App run directly when you apply order": - "Google Maps direkt starten bei Auftrag", - "You can change the language of the app": "App-Sprache ändern", - "Your Budget less than needed": "Budget niedriger als benötigt", - "You can change the Country to get all features": - "Land ändern für alle Funktionen", - "Change Country": "Land ändern" - }, - "es": { - "Order": "Pedido", - "OrderVIP": "Pedido VIP", - "Cancel Trip": "Cancelar Viaje", - "Passenger Cancel Trip": "Pasajero Canceló Viaje", - "VIP Order": "Pedido VIP", - "The driver accepted your trip": "El conductor aceptó tu viaje", - "message From passenger": "Mensaje del pasajero", - "Cancel": "Cancelar", - "Trip Cancelled. The cost of the trip will be added to your wallet.": - "Viaje Cancelado. El costo del viaje se agregará a tu billetera.", - "token change": "cambio de token", - "face detect": "detección facial", - "Face Detection Result": "Resultado de Detección Facial", - "similar": "similar", - "not similar": "no similar", - "Hi ,I will go now": "Hola, me voy ahora", - "Passenger come to you": "El pasajero viene hacia ti", - "Call Income": "Llamada Entrante", - "Call Income from Passenger": "Llamada Entrante del Pasajero", - "Criminal Document Required": "Documento Criminal Requerido", - "You should have upload it .": "Deberías haberlo subido.", - "Call End": "Fin de Llamada", - "The order has been accepted by another driver.": - "El pedido ha sido aceptado por otro conductor.", - "The order Accepted by another Driver": - "El pedido Aceptado por otro Conductor", - "We regret to inform you that another driver has accepted this order.": - "Lamentamos informarte que otro conductor ha aceptado este pedido.", - "Driver Applied the Ride for You": - "El Conductor Aplicó el Viaje para Ti", - "Applied": "Aplicado", - "Hi ,I Arrive your site": "Hola, llegué a tu ubicación", - "Please go to Car Driver": "Por favor, ve con el Conductor del Coche", - "Ok I will go now.": "Ok, me voy ahora.", - "Accepted Ride": "Viaje Aceptado", - "Driver Accepted the Ride for You": - "El Conductor Aceptó el Viaje para Ti", - "Promo": "Promo", - "Show latest promo": "Mostrar la última promo", - "Trip Monitoring": "Monitoreo de Viaje", - "Driver Is Going To Passenger": "El Conductor Va Hacia el Pasajero", - "Please stay on the picked point.": - "Por favor, permanece en el punto de recogida seleccionado.", - "message From Driver": "Mensaje del Conductor", - "Trip is Begin": "El Viaje Comienza", - "Cancel Trip from driver": "Cancelar Viaje desde el conductor", - "We will look for a new driver.\nPlease wait.": - "Buscaremos un nuevo conductor.\nPor favor, espera.", - "The driver canceled your ride.": "El conductor canceló tu viaje.", - "Driver Finish Trip": "El Conductor Finalizó el Viaje", - "you will pay to Driver": "le pagarás al Conductor", - "Don’t forget your personal belongings.": - "No olvides tus pertenencias personales.", - "Please make sure you have all your personal belongings and that any remaining fare, if applicable, has been added to your wallet before leaving. Thank you for choosing the Intaleq app": - "Por favor, asegúrate de tener todas tus pertenencias personales y de que cualquier tarifa restante, si corresponde, se haya agregado a tu billetera antes de irte. Gracias por elegir la aplicación Intaleq", - "Finish Monitor": "Finalizar Monitoreo", - "Trip finished": "Viaje finalizado", - "Call Income from Driver": "Llamada Entrante del Conductor", - "Driver Cancelled Your Trip": "El Conductor Canceló Tu Viaje", - "you will pay to Driver you will be pay the cost of driver time look to your Intaleq Wallet": - "le pagarás al Conductor, pagarás el costo del tiempo del conductor, mira tu Billetera Intaleq", - "Order Applied": "Pedido Aplicado", - //firebase - }, - "el": { - "Order": "Παραγγελία", - "OrderVIP": "VIP Παραγγελία", - "Cancel Trip": "Ακύρωση Διαδρομής", - "Passenger Cancel Trip": "Ο Επιβάτης Ακύρωσε τη Διαδρομή", - "VIP Order": "VIP Παραγγελία", - "The driver accepted your trip": - "Ο οδηγός αποδέχτηκε τη διαδρομή σας", - "message From passenger": "Μήνυμα από επιβάτη", - "Cancel": "Ακύρωση", - "Trip Cancelled. The cost of the trip will be added to your wallet.": - "Η διαδρομή ακυρώθηκε. Το κόστος της διαδρομής θα προστεθεί στο πορτοφόλι σας.", - "token change": "αλλαγή κωδικού", - "face detect": "ανίχνευση προσώπου", - "Face Detection Result": "Αποτέλεσμα Ανίχνευσης Προσώπου", - "similar": "παρόμοιος", - "not similar": "μη παρόμοιος", - "Hi ,I will go now": "Γεια, θα πάω τώρα", - "Passenger come to you": "Ο επιβάτης έρχεται προς το μέρος σας", - "Call Income": "Εισερχόμενη Κλήση", - "Call Income from Passenger": "Εισερχόμενη Κλήση από Επιβάτη", - "Criminal Document Required": "Απαιτείται Ποινικό Μητρώο", - "You should have upload it .": "Έπρεπε να το ανεβάσετε.", - "Call End": "Τέλος Κλήσης", - "The order has been accepted by another driver.": - "Η παραγγελία έχει γίνει αποδεκτή από άλλον οδηγό.", - "The order Accepted by another Driver": - "Η παραγγελία έγινε αποδεκτή από άλλον οδηγό", - "We regret to inform you that another driver has accepted this order.": - "Λυπούμαστε που σας ενημερώνουμε ότι άλλος οδηγός έχει αποδεχτεί αυτήν την παραγγελία.", - "Driver Applied the Ride for You": - "Ο Οδηγός Υπέβαλε Αίτηση για τη Διαδρομή για Εσάς", - "Applied": "Εφαρμόστηκε", - "Hi ,I Arrive your site": "Γεια, έφτασα στην τοποθεσία σας", - "Please go to Car Driver": - "Παρακαλώ πηγαίνετε στον Οδηγό Αυτοκινήτου", - "Ok I will go now.": "Εντάξει, θα πάω τώρα.", - "Accepted Ride": "Αποδεκτή Διαδρομή", - "Driver Accepted the Ride for You": - "Ο Οδηγός Αποδέχτηκε τη Διαδρομή για Εσάς", - "Promo": "Προσφορά", - "Show latest promo": "Εμφάνιση τελευταίας προσφοράς", - "Trip Monitoring": "Παρακολούθηση Διαδρομής", - "Driver Is Going To Passenger": "Ο Οδηγός Πηγαίνει προς τον Επιβάτη", - "Please stay on the picked point.": - "Παρακαλώ μείνετε στο σημείο παραλαβής που επιλέξατε.", - "message From Driver": "Μήνυμα από τον Οδηγό", - "Trip is Begin": "Η Διαδρομή Ξεκινά", - "Cancel Trip from driver": "Ακύρωση Διαδρομής από τον οδηγό", - "We will look for a new driver.\nPlease wait.": - "Θα αναζητήσουμε νέο οδηγό.\nΠαρακαλώ περιμένετε.", - "The driver canceled your ride.": "Ο οδηγός ακύρωσε τη διαδρομή σας.", - "Driver Finish Trip": "Ο Οδηγός Τερμάτισε τη Διαδρομή", - "you will pay to Driver": "θα πληρώσετε στον Οδηγό", - "Don’t forget your personal belongings.": - "Μην ξεχάσετε τα προσωπικά σας αντικείμενα.", - "Please make sure you have all your personal belongings and that any remaining fare, if applicable, has been added to your wallet before leaving. Thank you for choosing the Intaleq app": - "Βεβαιωθείτε ότι έχετε όλα τα προσωπικά σας αντικείμενα και ότι τυχόν υπόλοιπο ναύλο, εάν υπάρχει, έχει προστεθεί στο πορτοφόλι σας πριν φύγετε. Ευχαριστούμε που επιλέξατε την εφαρμογή Intaleq", - "Finish Monitor": "Τερματισμός Παρακολούθησης", - "Trip finished": "Η διαδρομή τελείωσε", - "Call Income from Driver": "Εισερχόμενη Κλήση από τον Οδηγό", - "Driver Cancelled Your Trip": "Ο Οδηγός Ακύρωσε τη Διαδρομή Σας", - "you will pay to Driver you will be pay the cost of driver time look to your Intaleq Wallet": - "θα πληρώσετε στον Οδηγό, θα πληρώσετε το κόστος του χρόνου του οδηγού, κοιτάξτε το Πορτοφόλι Intaleq σας", - "Order Applied": "Η Παραγγελία Εφαρμόστηκε", -//firebase - - "registration_date": "Ημερομηνία εγγραφής", - "expiration_date": "Ημερ. λήξης", - "rating_count": "Για την ακροαματικότητα;", - "rating_driver": "Βαθμολογία οδηγού", - "age": "Ηλικία", - "vin": - "Γιατί εγώ είμαι στα λειτουργικά. Έχω απομνημονεύσει τον Αριθμό Αναγνώρισης Οχήματος.", - "car_color": "Στο χρώμα.", - "car_plate": "C-R-M-S-Κ ...", - "car_model": "Μοντέλο Αυτοκινήτου:", - "education": "Η Εκπαίδευση", - "gender": "Φύλο:", - "birthdate": "Γενέθλια", - "Approve Driver Documents": "Έγκριση Εγγράφων Οδηγού", - "Total Budget is": "Συνολικός προϋπολογισμός", - "You will recieve code in sms message": - "Θα λάβετε τον κωδικό σε ένα SMS", - "Please enter": - "Παρακαλώ εισάγετε ένα όνομα πόρου. @ info: whatsthis", - "We need your phone number to contact you and to help you receive orders.": - "Χρειαζόμαστε τον αριθμό τηλεφώνου σας για να επικοινωνήσουμε μαζί σας και να σας βοηθήσουμε να λαμβάνετε παραγγελίες.", - "The full name on your criminal record does not match the one on your driver’s license. Please verify and provide the correct documents.": - "Το πλήρες ονοματεπώνυμο στο ποινικό μητρώο σας δεν αντιστοιχεί στο ονοματεπώνυμο στο δίπλωμα οδήγησής σας. Ελέγξτε και προσκομίστε τα σωστά έγγραφα.", - "The national number on your driver’s license does not match the one on your ID document. Please verify and provide the correct documents.": - "Ο εθνικός αριθμός στην άδεια οδήγησής σας δεν αντιστοιχεί στον αριθμό που αναγράφεται στο έγγραφο ταυτότητάς σας. Ελέγξτε και προσκομίστε τα σωστά έγγραφα.", - "Capture an Image of Your Criminal Record": - "Τραβήξτε μια φωτογραφία του ποινικού σας μητρώου", - "IssueDate": "Ημερομηνία έκδοσης", - "Capture an Image of Your car license front": - "Τραβήξτε μια φωτογραφία του διπλώματος οδήγησής σας από μπροστά", - "Capture an Image of Your ID Document front": - "Τραβήξτε μια φωτογραφία της ταυτότητάς σας από μπροστά", - "NationalID": "Εθνικός αριθμός:", - "FullName": "Πλήρες όνομα", - "InspectionResult": "Έφερα τις εξετάσεις.", - "Criminal Record": "Ποινικό μητρώο", - "The email or phone number is already registered.": - "Το email ή ο αριθμός τηλεφώνου είναι ήδη καταχωρημένα.", - "To become a ride-sharing driver on the Intaleq app, you need to upload your driver's license, ID document, and car registration document. Our AI system will instantly review and verify their authenticity in just 2-3 minutes. If your documents are approved, you can start working as a driver on the Intaleq app. Please note, submitting fraudulent documents is a serious offense and may result in immediate termination and legal consequences.": - "Για να γίνετε οδηγός επιμερισμού διαδρομής στην εφαρμογή Ταξίδια, πρέπει να ανεβάσετε την άδεια οδήγησης, το έγγραφο ταυτοποίησης και το έγγραφο ταξινόμησης οχήματος. Το σύστημα τεχνητής νοημοσύνης μας θα ελέγξει και θα επαληθεύσει αμέσως την αυθεντικότητά του σε μόλις 2-3 λεπτά. Εάν τα έγγραφά σας εγκριθούν, μπορείτε να αρχίσετε να εργάζεστε ως οδηγός στην εφαρμογή Ταξίδια. Λάβετε υπόψη ότι η παροχή πλαστών εγγράφων αποτελεί σοβαρό αδίκημα και μπορεί να οδηγήσει σε άμεση καταγγελία και νομικές συνέπειες.", - "Documents check": "Επαλήθευση εγγράφου", - "Driver's License": "'δεια.", - "License Type": "- Πάσο.", - "National Number": "Την ταυτότητα μου, την ασφάλεια μου.", - "Name (Arabic)": "Όνομα (Αραβικά)", - "Name (English)": "- Αγγλοσύνη.", - "Address": "Διεύθυνση", - "Issue Date": "Ημερομηνία έκδοσης", - "Expiry Date": "Ημερομηνία λήξης", - "License Categories": "- Πάσο.", - "driver_license": "'δεια.", - "Capture an Image of Your Driver License": - "Τραβήξτε μια φωτογραφία της άδειας οδήγησής σας", - "ID Documents Back": "- Ταυτότητα.", - "National ID": "Δελτίο Εθνικής ταυτότητας", - "Occupation": "Επάγγελμα", - "Gender": "Φύλο:", - "Religion": "Η θρησκεία.", - "Marital Status": "Οικογενειακή κατάσταση...", - "Full Name (Marital)": "Πλήρες όνομα", - "Expiration Date": "Ημερ. λήξης", - "Capture an Image of Your ID Document Back": - "Τραβήξτε μια φωτογραφία της πίσω όψης του εγγράφου ταυτότητάς σας", - "ID Documents Front": "Μπροστινή όψη εγγράφων ταυτοποίησης", - "First Name": "Μικρό όνομα...", - "CardID": - "Τραβήξτε μια φωτογραφία της πίσω όψης του εγγράφου ταυτότητάς σας", - "Full Name": "Πλήρες όνομα", - "Vehicle Details Front": "Στοιχεία εμπρόσθιου οχήματος", - "Plate Number": "Αριθμός πίνακα", - "Owner Name": "Ιδιοκτήτης, μάλιστα.", - "Vehicle Details Back": "Τα στοιχεία του οχήματος ξανά", - "Make": "Grep:% 1", - "Model": "Μοντέλο Αυτοκινήτου:", - "Year": "- Είναι οι ετήσιες.", - "Chassis": "Πλαίσιο", - "Color": "Στο χρώμα.", - "Displacement": "Υποκατάσταση", - "Fuel": "- ΑΜΟΛΥΒΔΗ ΜΟΝΟ - Βενζίνη!", - "Tax Expiry Date": "Ημερομηνία λήξης", - "Inspection Date": "Ημερομηνία εξέτασης", - "Capture an Image of Your car license back": - "Τραβήξτε ξανά μια φωτογραφία της άδειας οδήγησής σας", - "Capture an Image of Your Driver’s License": - "Τραβήξτε μια φωτογραφία της άδειας οδήγησής σας", - "Sign in with Google for easier email and name entry": - "Συνδεθείτε μέσω Google για να καταχωρίσετε εύκολα το email και το όνομά σας", - "You will choose allow all the time to be ready receive orders": - "Θα επιλέξετε να επιτρέπετε τις έτοιμες παραγγελίες όλη την ώρα", - "Welcome to Intaleq!": "Καλώς ήρθατε στο Safar!", - "Get to your destination quickly and easily.": - "Φτάστε στον προορισμό σας γρήγορα και εύκολα.", - "Enjoy a safe and comfortable ride.": - "Απολαύστε μια ασφαλή και άνετη διαδρομή.", - "Choose Language": "Επιλέξτε τη γλώσσα", - "Login": "Αναφέρω.", - "Pay with Wallet": "Πληρωμή με Wallet", - "Invalid MPIN": "Μη έγκυρος κωδικός MPIN", - "Invalid OTP": "Μη έγκυρος κωδικός επαλήθευσης", - "Enter your email address": "Εισάγετε το email σας", - "Please enter Your Email.": "Παρακαλώ εισάγετε...", - "Enter your phone number": "Τηλέφωνο;", - "Please enter your phone number.": - "Εισαγάγετε τον αριθμό τηλεφώνου σας.", - "Please enter Your Password.": "Εισαγωγή κωδικού", - "Submit": "Aπoστoλή...", - "if you dont have account": "- Αν δεν σε πειράζει.", - "Register": "Ξεκίνα.", - "Accept Ride's Terms & Review Privacy Notice": - "Αποδεχτείτε τους όρους της διαδρομής και διαβάστε τη δήλωση απορρήτου", - "By selecting 'I Agree' below, I have reviewed and agree to the Terms of Use and acknowledge the Privacy Notice. I am at least 18 years of age.": - "Επιλέγοντας «Συμφωνώ» παρακάτω, διάβασα και συμφωνώ με τους Όρους Χρήσης και αποδέχομαι τη Δήλωση Απορρήτου.Είμαι τουλάχιστον 18 ετών.", - "I Agree": "- Αμήν. - Αμήν. Αξιέπαινες ψήφοι!", - "First name": "Μικρό όνομα...", - "Enter your first name": "- Το μικρό σας. - Τζέιμς.", - "Please enter your first name.": "Εισαγάγετε το όνομά σας.", - "Last name": "Επίθετο.", - "Enter your last name": "Επίθετο.", - "Please enter your last name.": "Εισαγάγετε το όνομά σας.", - "City": "Μεντίνα", - "Please enter your City.": "Παρακαλώ εισάγετε...", - "Male": "Άρρεν", - "Female": "θήλυ", - "Verify Email": "Επικύρωση email", - "We sent 5 digit to your Email provided": - "Στείλαμε 5 ψηφία στο παρεχόμενο email σας", - "5 digit": "PIN(5 ψηφία)", - "Send Verification Code": "Διερεύνηση...", - "Your Ride Duration is": "Η διάρκεια της διαδρομής σας είναι", - "You will be thier in": "Θα τα έχετε σε", - "You trip distance is": "Η απόσταση της διαδρομής σας είναι", - "Fee is": "Η αμοιβή είναι", - "To :": "προς:", - "Add Promo": "Προσθήκη προσφοράς", - "Confirm Selection": "Επιβεβαίωση επιλογής", - "distance is": "Η απόσταση είναι", - "duration is": "Η διάρκεια είναι", - "I don't need a ride anymore": "Δεν χρειάζομαι πλέον διαδρομή", - "I was just trying the application": "Απλώς δοκίμαζα την εφαρμογή", - "No driver accepted my request": - "Κανένας οδηγός δεν αποδέχτηκε την παραγγελία μου", - "I added the wrong pick-up/drop-off location": - "Προσθέσατε λάθος τοποθεσία παραλαβής/αποβίβασης", - "I don't have a reason": "- Δεν ξέρω το γιατί.", - "Other": "Άλλα", - "Can we know why you want to cancel Ride ?": - "Μπορούμε να μάθουμε γιατί θέλετε να ακυρώσετε τη διαδρομή;", - "Cancel Ride": "Ματαίωση!", - "Add Payment Method": "Έναν τρόπο πληρωμής;", - "Your Wallet balance is": "Το υπόλοιπο του πορτοφολιού σας είναι", - "Ride Wallet": "Wallet διαδρομής", - "Payment Method": "Τρόπος πληρωμής;", - "Type here Place": "Ασε με εδώ.", - "Are You sure to ride to": - "Είστε βέβαιοι ότι θέλετε να μετακινηθείτε προς", - "Confirm": "Έγινε.", - "Back": "Μάζεμα! Επάνω!", - "You are Delete": "Διαγράφετε", - "Deleted": "Διαγραμμένοmessage status", - "You Dont Have Any places yet !": "Δεν έχετε ακόμα κηλίδες!", - "Favorite Places": "Το αγαπημένο σου στέκι;", - "From : Current Location": "Τρέχουσα τοποθεσία:", - "Where to": "- Ίσως μέσα στην επόμενη ώρα.", - "Notifications": "Ρύθμιση ειδοποιήσεων...", - "Profile": "& Προφίλ acls", - "Home": "Αρχική σελίδα", - "My Cared": "MyCurt", - "Add Card": "Προσθήκη κάρτας", - "Add Credit Card": "Πιστωτική.", - "Please enter the cardholder name": - "Εισαγάγετε το όνομα του κατόχου της κάρτας", - "Please enter the expiry date": "Ανάλωση έως", - "Please enter the CVV code": - "Εισαγάγετε τον κωδικό επαλήθευσης κάρτας", - "Go To Favorite Places": "Μετάβαση στα Αγαπημένα Μέρη", - "Go to this Target": "Μετάβαση σε αυτόν τον στόχο", - "My Profile": "Προφίλ", - "Sign Out": "Αποσυνδέομαι.", - "Home Page": "Αρχική σελίδα", - "Are you want to go to this site": - "Θέλετε να μεταβείτε σε αυτήν την τοποθεσία", - "MyLocation": "Στην ιστοσελίδα μου;", - "my location": "Στην ιστοσελίδα μου;", - "Target": "Ένας στόχος.", - "Update": "Ανανέωση!", - "You Should choose rate figure": - "Πρέπει να επιλέξετε τον σωστό αριθμό", - "Login Captin": "Αναφέρω.", - "Register Captin": "Εγγραφή καπετάνι", - "Send Verfication Code": "Αποστολή κωδικού επαλήθευσης", - "End Ride": "Επιβιβαστείτε!", - "Minute": "Σχολαστικές;", - "Go to passenger Location now": - "Μεταβείτε στην τοποθεσία επιβάτη τώρα", - "Duration of the Ride is": "Η διάρκεια της διαδρομής είναι", - "Distance of the Ride is": "Η απόσταση διαδρομής είναι", - "Name of the Passenger is": "Το όνομα του επιβάτη είναι", - "Hello this is Captain": "Γεια σας, είμαι ο καπετάνιος", - "Start the Ride": "Έναρξη διαδρομής", - "Please Wait If passenger want To Cancel!": - "Περιμένετε εάν ο επιβάτης θέλει να ακυρώσει!", - "Total Duration:": "Συνολική Διάρκεια:", - "Active Duration:": "Ενεργή διάρκεια βήματος", - "Waiting for Captin ...": "Αναμένω τον καπετάνιο.", - "Age is": "Η ηλικία είναι απλά ένας αριθμός.", - "Rating is": "- Η αξιολόγηση είναι...", - "to arrive you.": "Είναι πολύ εύκολο να σε βρουν.", - "Order History": "Καταγραφή ιστορικού παραγγελιών", - "My Wallet": "Αχ, η τσάντα μου.", - "Tariff": "Τιμολόγιο", - "Settings": "Ρυθμίσεις.", - "Feed Back": "Aντανακλαστικά;", - "Promos": "Προσφορές", - "Please enter a valid 16-digit card number": - "Εισαγάγετε έναν έγκυρο αριθμό εντολής αγοράς.", - "Add Phone": "Συγχωρήστε με, κύριοι.", - "Please enter a phone number": "Εισαγάγετε τον αριθμό τηλεφώνου", - "You dont Add Emergency Phone Yet!": - "Δεν έχετε προσθέσει ακόμα τηλέφωνο έκτακτης ανάγκης!", - "You will arrive to your destination after": - "Θα φτάσετε στον προορισμό σας μετά από", - "You can cancel Ride now": "Μπορείτε να ακυρώσετε τη διαδρομή τώρα", - "You Can cancel Ride After Captain did not come in the time": - "Μπορείτε να ακυρώσετε τη διαδρομή αφού ο καπετάνιος δεν έφτασε εγκαίρως", - "If you in Car Now. Press Start The Ride": - "Αν είστε στο αυτοκίνητο αυτή τη στιγμή. Πατήστε Έναρξη διαδρομής", - "You Dont Have Any amount in": "Δεν έχετε κανένα ποσό σε", - "Wallet!": "- Τίποτα. Πορτοφόλι.", - "You Have": "- Έχεις λίγη...", - "Save Credit Card": "Διατήρηση πιστωτικής κάρτας", - "Show Promos": "Αναπαραστάσεις;", - "10 and get 4% discount": "10 και κερδίστε έκπτωση 4%", - "20 and get 6% discount": "20 και κερδίστε έκπτωση 6%", - "40 and get 8% discount": "40 και κερδίστε έκπτωση 8%", - "100 and get 11% discount": "100% και έκπτωση 11%", - "Pay with Your PayPal": "Πληρωμή με PayPal", - "You will choose one of above !": - "Θα επιλέξετε μία από τις παραπάνω επιλογές!", - "Cancel": "Ακύρωση.", - "Delete My Account": "Διαγραφή του λογαριασμού μου", - "Edit Profile": "Modifier le profil", - "Name": "Nom", - "Update Gender": "Mettre à jour le sexe", - "Education": "Les études", - "Update Education": ":: Moderniser l'enseignement;", - "Employment Type": "Catégorie de personnel", - "SOS Phone": "Mobile", - "High School Diploma": "BACCALAUREAT DE L'ENSEIGNEMENT", - "Associate Degree": "Diplôme conjoint", - "Bachelor's Degree": "Grade de bachelier", - "Master's Degree": "Master", - "Doctoral Degree": "Docteur en philosophie.", - "Promos For today": "Promotions", - "Copy this Promo to use it in your Ride!": - "Copiez cette promotion pour l'utiliser lors de votre voyage !", - "To change some Settings": "Pour modifier certains paramètres", - "To change Language the App": - "Pour modifier la langue de l'application", - "Order Request Page": "Page de demande de commande", - "Rouats of Trip": "Tripp.", - "Passenger Name is": "Voyageur.", - "Total From Passenger is": "Le total du passager est", - "Duration To Passenger is": "Durée jusqu'au passager", - "Distance To Passenger is": "distance par rapport au passager est", - "Total For You is": "Le total pour vous est de", - "Distance is": "Distance", - "KM": "Km", - "Duration of Trip is": "La durée de la course est de", - "Minutes": "Minutes", - "Apply Order": "Appliquer la commande", - "Refuse Order": "- Demande rejetée.", - "Rate Captain": "Cote de capitaine", - "Enter your Note": "J'ai eu votre mot.", - "Type something...": "Écrire quelque chose...", - "Submit rating": "Fournir une évaluation", - "Rate Passenger": "Note du passager", - "Ride Summary": "Résumé de la course", - "welcome_message": "Insérer « & #160; Bonjour monde & #160; »", - "app_description": "ApplicationDescription", - "get_to_destination": - "Destination atteinte. Déblocage des contrôles manuels.", - "get_a_ride": "Commandez une course", - "safe_and_comfortable": "Sûr et confortable", - "committed_to_safety": "Engagé pour la sécurité", - "Driver Applied the Ride for You": - "Un chauffeur qui a effectué la course pour vous", - "Show latest promo": "Afficher la dernière promotion", - "Cancel Trip": "Le vol est annulé.", - "Passenger Cancel Trip": "Le passager annule la course", - "Please stay on the picked point.": - "Veuillez rester au point sélectionné.", - "Trip is Begin": "Votre initiation a commencé.", - "Hi ,I will go now": "Bonjour, j'y vais maintenant", - "Passenger come to you": "Votre passager vient vous voir", - "Hi ,I Arrive your site": - "Bonjour, vous avez atteint votre position.", - "Driver Finish Trip": "Fin de la course du chauffeur", - "you will pay to Driver": "Sérieux ? Probablement avec mon argent.", - "Driver Cancel Your Trip": "Annulez votre course, chauffeur.", - "you will pay to Driver you will be pay the cost of driver time look to your Intaleq Wallet": - "Vous paierez le chauffeur Vous paierez le coût du temps du chauffeur Regardez votre portefeuille Intaleq", - "I will go now": "- J'y vais.", - "You Have Tips": "Astuces", - "tips": "Des paroles sages ?", - "Total is": "Chiffre total est de 15", - "No,I want": "- Je n'en ai pas envie.", - "Your fee is": "Vos frais sont de", - "Do you want to pay Tips for this Driver": - "Souhaitez-vous laisser un pourboire à ce chauffeur ?", - "Tip is": "Monconseil", - "Camera Access Denied.": "Accès à la caméra refusé.", - "Open Settings": - "|||UNTRANSLATED_CONTENT_START|||افتح الإعدادات|||UNTRANSLATED_CONTENT_END|||", - "GPS Required Allow !.": "Le GPS doit être activé !", - "Your Account is Deleted": "Votre compte a été supprimé", - "Are you sure to delete your account?": - "Voulez-vous vraiment supprimer votre compte ?", - "Your data will be erased after 2 weeks": - "Vos données seront effacées après 2 semaines", - "And you will can't return to use app after 1 month": - "Vous pourrez revenir à l'application après un mois", - "Enter Your First Name": "Saisissez votre nom", - "Are you Sure to LogOut?": "Voulez-vous vraiment vous déconnecter?", - "Email Wrong": "Email ", - "Email you inserted is Wrong.": - "L'adresse e-mail que vous avez saisie est incorrecte.", - "You have finished all times": "J'en ai assez !", + "من 12:00 لـ 15:00 (خميس، جمعة، سبت، اثنين)", + "from 23:59 till 05:30": "من 23:59 لـ 5:30", + "from 3 times Take Attention": "انتبه بعد 3 مرات", + "from your favorites": "من مفضلاتك", + "from your list": "من قائمتك", + "fromBudget": "من الميزانية", + "gender": "الجنس", + "get_a_ride": "احصل على رحلة", + "get_to_destination": "الوصول للوجهة", + "go to your passenger location before": "روح لموقع الراكب قبل", + "go to your passenger location before\nPassenger cancel trip": + "روح لموقع الراكب قبل ما يلغي الراكب الرحلة", + "has been added to your budget": "تمت إضافته لميزانيتك", + "has completed": "اكتمل", + "hi": "هلا", + "hour": "ساعة", + "hours before trying again.": "ساعات قبل ما تجرب مرة تانية.", + "i agree": "بوافق", + "id_back": "خلفي الهوية", + "id_card_back": "الجانب الخلفي لبطاقة الهوية", + "id_card_front": "الجانب الأمامي لبطاقة الهوية", + "id_front": "أمامي الهوية", + "if you dont have account": "إذا ما عندك حساب", "if you want help you can email us here": - "Si vous souhaitez de l'aide, vous pouvez nous envoyer un e-mail ici", - "Thanks": "Merci.", - "Email Us": "Envoyez-nous un e-mail", - "I cant register in your app in face detection": - "Je ne peux pas m'inscrire à votre application avec la détection de visage", - "Hi": "-C'est un plaisir. -Hello.", - "No face detected": "Aucun scanner n'a été détécté", - "Image detecting result is": - "Le résultat de la détection d'image est", - "from 3 times Take Attention": "que 3 fois attirent votre attention", - "Be sure for take accurate images please": - "Assurez-vous de prendre des photos précises s'il vous plaît", - "You have": "- Euh...", - "image verified": "La photo est notariée", - "Next": "Suivant", - "There is no help Question here": "Ouais, pas d'aide ici.", - "Call End": "Terminer l'appel", - "You dont have Points": "- Vous n'avez pas...", - "You Are Stopped For this Day !": - "Vous avez été mis en pause pour la journée !", - "You must be charge your Account": - "Vous devez recharger votre compte", - "You Refused 3 Rides this Day that is the reason": - "Vous avez refusé 3 courses aujourd'hui et c'est pourquoi", - "See you Tomorrow!": "Je te verrais demain.", - "Recharge my Account": "Recharger mon compte", - "Ok , See you Tomorrow": "D'accord, on se voit demain.", - "You are Stopped": "Vous êtes arrêté", - "Connected": "Online", - "Not Connected": "Offiline", - "Your are far from passenger location": - "Vous êtes loin de l'emplacement des passagers", - "go to your passenger location before": - "Accédez à l'emplacement de votre passager avant le", - "Passenger cancel trip": "Le passager a annulé la course", - "You will get cost of your work for this trip": - "Vous obtiendrez le coût de votre entreprise pour cette course", - "in your wallet": "Elle est dans ton portefeuille.", - "you gain": "Vous gagnerez", - "Order Cancelled": "Commande annulée", - "Order Cancelled by Passenger": "Demande annulée par le passager", - "Success": "Je l'ai.", - "Feedback data saved successfully": - "Données d'évaluation enregistrées avec succès", - "No Promo for today .": "Pas de promotion pour aujourd'hui.", - "Select your destination": "Sélectionnez la destination;", - "Search for your Start point": "Trouvez votre point de départ", - "Search for waypoint": "Rechercher un point WIPOINT", - "Current Location": "Utiliser la position actuelle", - "Add Location 1": "Emplacement & #160;: %1", - "You must Verify email !.": "Relever le courriel", - "Cropper": "Récolte", - "Saved Sucssefully": "Bien reçu.", - "Select Date": "Choisir une nouvelle date", - "Birth Date": "Date de naissance", - "Ok": "D'accord.", - "the 500 points equal 30 JOD": "500 points équivaut à 30 JOD", - "the 500 points equal 30 JOD for you": - "500 points équivaut à 30 JOD pour vous", - "token updated": "Code mis à jour", - "Add Location 2": "Ajouter un emplacement 2", - "Add Location 3": "Ajouter un emplacement 3", - "Add Location 4": "Ajouter un emplacement 4", - "Waiting for your location": "En attente de votre localisation", - "Search for your destination": "Trouvez votre destination", - "Hi! This is": "Bienvenue \"moi\": c' est ça.", - "I am using": "Du matériel que j'utilisais.", - "to ride with": "pour rouler avec", - "as the driver.": "On dirait un chauffeur.", - "is driving a": "- Je vais le tenter comme ça. - Conduire.", - "with license plate": "Avec une plaque d'immatriculation", - "I am currently located at": "Je suis actuellement en", - "Please go to Car now": "S'il te plaît, va-t-en maintenant.", - "If you need to reach me, please contact the driver directly at": - "Si vous avez besoin de me joindre, veuillez contacter directement le chauffeur au", - "No Car or Driver Found in your area.": - "Aucune voiture ou chauffeur trouvé dans votre région.", - "Please Try anther time": "Réessayer", - "There no Driver Aplly your order sorry for that": - "Aucun chauffeur ne peut répondre à votre demande, nous sommes désolés.", - "Trip Cancelled": "Course annulée", - "The Driver Will be in your location soon .": - "Votre chauffeur arrivera bientôt chez vous.", - "The distance less than 500 meter.": - "La distance est inférieure à 500 mètres.", - "Promo End !": "- C'est seulement jusqu'au spectacle.", - "There is no notification yet": "Aucune notification pour le moment", - "Use Touch ID or Face ID to confirm payment": - "Utilisez Touch ID ou Face ID pour confirmer le paiement", - "Contact us for any questions on your order.": - "Contactez-nous pour toute question concernant votre commande.", - "Pyament Cancelled .": "Le paiement a été annulé.", - "type here": "Tapez ici", - "Scan Driver License": "Permis de conduire", - "Please put your licence in these border": - "Veuillez placer votre licence dans ces limites", - "Camera not initialized yet": "Caméra pas encore configurée", - "Take Image": - "Prends une photo, parce que demain matin, ces lettres partiront.", - "AI Page": "Tu dis que ton système \"IA\"", - "Take Picture Of ID Card": - "Prenez une photo de votre pièce d'identité", - "Take Picture Of Driver License Card": - "Prenez une photo de votre permis de conduire.", - "We are process picture please wait": - "Nous traitons les images, veuillez patienter.", - "There is no data yet.": "Aucune donnée trouvée", - "Name :": "Nom :", - "Drivers License Class:": "Catégorie de permis de conduire :", - "Document Number:": "Numéro du document", - "Address:": "Adresse:", - "Height:": "& Hauteur & #160;:", - "Expiry Date:": "Expiration & #160;:", - "Date of Birth:": "Anniversaire & #160;: @title: group", - "You can't continue with us .": "Ça ne peut pas durer.", - "You should renew Driver license": - "Vous devez renouveler votre permis de conduire", - "Detect Your Face": "Découvrez votre visage", - "Go to next step": "\"", - "scan Car License.": "Vérification de l'immatriculation du véhicule.", - "Name in arabic": "Full Name AR", - "Drivers License Class": "Permis de conduire", - "Date of Birth": "Date de naissance", - "Age": "l’âge", - "Lets check Car license": "Vérifions le permis de conduire", - "Car Kind": "Type de véhicule", - "Car Plate": "Le numéro d'immatriculation ?", - "Lets check License Back Face": - "Vérifions la licence de face arrière", - "Car License Card": "Carte d'immatriculation du véhicule", - "No image selected yet": "Aucune photo sélectionnée pour le moment", - "Made :": "Make", - "model :": "Mod.", - "VIN :": "Structure :", - "year :": "Année", - "ُExpire Date": "Date d'expiration", - "Login Driver": "Se connecter", - "Password must br at least 6 character.": - "Le mot de passe doit comporter au moins 6 caractères.", - "if you don't have account": "Que voulez-vous dire ?", - "Here recorded trips audio": - "Voici les enregistrements audio du voyage", - "Register as Driver": "Inscrivez-vous en tant que chauffeur", - "Privacy Notice": "Avis de confidentialité", - "By selecting \"I Agree\" below, I have reviewed and agree to the Terms of Use and acknowledge the": - "En sélectionnant « J'accepte » ci-dessous, j'ai lu, j'accepte et j'accepte les conditions générales", - ". I am at least 18 years of age.": ". J'ai au moins 18 ans.", - "Log Out Page": "Se Déconnecter", - "Log Off": "Signe.", - "Register Driver": "Le chauffeur...", - "Verify Email For Driver": "Consultez l'e-mail du chauffeur", - "Admin DashBoard": "Tableau de bord d'administration", - "Your name": "Ton... nom.", - "your ride is applied": "Votre course a été appliquée", - "Your password": "Renouveler votre mot de passe", - "LE": "Livre égyptienne", - "JOD": "Monnaie: Dinar jordanien", - "m": "%1 km", - "We search nearst Driver to you": - "Nous recherchons le chauffeur le plus proche", - "please wait till driver accept your order": - "Veuillez attendre que le chauffeur accepte votre demande", - "No accepted orders? Try raising your trip fee to attract riders.": - "Aucune Essayez d'augmenter les frais de course pour attirer des passagers.", - "You should select one": "Vous devez en choisir un", - "The driver accept your order for": - "Votre chauffeur a accepté votre demande de", - "Increase Fee": "Augmenter les frais", - "No, thanks": "Non merci", - "The driver on your way": "Votre chauffeur est en route", - "Total price from": "P.T", - "Order Details Intaleq": "Détails du commande", - "Order Applied": "Commande appliquée", - "accepted your order": "- Retenue.", - "We regret to inform you that another driver has accepted this order.": - "Nous sommes désolés de vous informer qu'un autre chauffeur a accepté cette demande.", - "Selected file:": "Ouvre un fichier existant", - "Your trip cost is": "Les frais de votre course", - "this will delete all files from your device": - "Cela supprimera tous les fichiers de votre appareil", - "you have a negative balance of": "Vous avez un solde négatif de", - "in your": "En toi.", - "Exclusive offers and discounts always with the Intaleq app": - "Offres exclusives et réductions toujours avec l'application de voyage", - "Please go to Car Driver": - "Veuillez vous rendre chez le conducteur de la voiture", - "wallet due to a previous trip.": - "Portefeuille en raison d'une course précédente.", - "Submit Question": "Envoyer la question", - "Please enter your Question.": "Veuillez saisir votre question.", - "Help Details": "Détails de l'aide", - "No trip yet found": "Aucune campagne trouvée", - "No Response yet.": "Il n'y a pas de réponses.", - "You Earn today is": "- On est euh...", - "You Have in": "Vous avez à", - "Total points is": "Le score total est de", - "Total Connection Duration:": "Durée totale de connexion :", - "H and": "H et", - "Passenger name :": "Le voyageur.", - "Cost Of Trip IS": "Coûts des vols par avion spécial", - "Arrival time": "On arrive dans 7 minutes.", - "arrival time to reach your point": - "Heure d'arrivée pour atteindre votre destination", - "For Intaleq and Delivery trips, the price is calculated dynamically. For Comfort trips, the price is based on time and distance": - "Pour les courses et livraisons rapides, le prix est calculé de manière dynamique. Pour des courses confortables, le prix est basé sur la durée et la distance.", - "Hello this is Driver": "Bonjour, je suis le chauffeur", - "Is the Passenger in your Car ?": - "Le passager est-il dans votre véhicule ?", - "Please wait for the passenger to enter the car before starting the trip.": - "Veuillez attendre que le passager entre dans le véhicule avant de commencer la course.", - "No ,still Waiting.": "Non , je t'attends toujours.", - "I arrive you": "Elle t'a eue.", - "I Arrive your site": "Elle t'a eue.", - "You are not in near to passenger location": - "Vous n'êtes pas près de l'emplacement du passager", - "please go to picker location exactly": - "Veuillez vous rendre à l'emplacement exact de la sélection", - "You Can Cancel Trip And get Cost of Trip From": - "Vous pouvez annuler la course et obtenir le coût de la course auprès de", - "Are you sure to cancel?": "Voulez-vous vraiment annuler ?", - "Yes": "Oui", - "Insert Emergincy Number": "Saisir le numéro d'urgence", - "Best choice for comfort car and flexible route and stops point": - "Le meilleur choix pour une voiture confortable, un itinéraire flexible et un point d'arrêt", - "Insert": "En cours d' utilisation", - "This is for delivery or a motorcycle.": - "C'est pour la livraison ou une moto.", - "This trip goes directly from your starting point to your destination for a fixed price. The driver must follow the planned route": - "Cette course va directement de votre point de départ à votre destination pour un tarif forfaitaire. Le chauffeur doit suivre l'itinéraire prévu", - "You can decline a request without any cost": - "Vous pouvez refuser la demande sans frais", - "Perfect for adventure seekers who want to experience something new and exciting": - "Idéal pour les chercheurs d'aventure qui veulent essayer quelque chose de nouveau et d'excitant", - "My current location is:": "Mon emplacement actuel est :", - "and I have a trip on": "et j'ai un voyage à", - "App with Passenger": "Postuler avec le passager", - "You will be pay the cost to driver or we will get it from you on next trip": - "Le coût sera payé au chauffeur ou nous l'obtiendrons de votre part lors de la prochaine course", - "Trip has Steps": "La course comporte des étapes", - "Distance from Passenger to destination is": - "La distance entre le passager et la destination est", - "price is": "C'est cent dollars.", - "This ride type does not allow changes to the destination or additional stops": - "Ce type de course ne permet pas de modifier la destination ou d'effectuer des arrêts supplémentaires", - "This price may be changed": "Ce prix peut changer", - "No SIM card, no problem! Call your driver directly through our app. We use advanced technology to ensure your privacy.": - "Pas de carte SIM, pas de problème ! Contactez directement votre chauffeur via notre application. Nous utilisons une technologie de pointe pour garantir votre confidentialité.", - "This ride type allows changes, but the price may increase": - "Ce type de course peut être modifié, mais le prix peut augmenter", - "message From passenger": "Estafette.", - "Select one message": "Message un.", - "My location is correct. You can search for me using the navigation app": - "Ma position est correcte. Vous pouvez me rechercher à l'aide de l'application de navigation", - "I'm waiting for you": "- Quand vous voulez.", - "Hello, I'm at the agreed-upon location": - "Bonjour, je suis à l'endroit convenu", - "We noticed the Intaleq is exceeding 100 km/h. Please slow down for your safety. If you feel unsafe, you can share your trip details with a contact or call the police using the red SOS button.": - "Nous avons remarqué que la vitesse dépasse 100 km/h. Veuillez ralentir pour votre propre sécurité. Si vous ne vous sentez pas en sécurité, vous pouvez communiquer les détails de votre course à un contact ou appeler la police à l'aide du bouton de détresse rouge.", - "Warning: Intaleqing detected!": - "Avertissement : survitesse détectée !", - "Please help! Contact me as soon as possible.": - "Aide-moi s'il te plaît. Contactez-moi dès que possible.", - "Share Trip Details": "Partagez les détails de la", - "Car Plate is": "Le numéro d'immatriculation ?", - "the 3000 points equal 3000 L.E for you": - "3000 points équivaut à 3000 EGP pour vous", - "So go and gain your money": "Gagnez de l'argent", - "the 3000 points equal 3000 L.E": "3000 points équivaut à 3000 EGP", - "The payment was not approved. Please try again.": - "Paiement non approuvé. Réessayer", - "Payment Failed": "Échec du paiement", - "Error": "ⵜⴰⵣⴳⵍⵜ", - "An error occurred during the payment process.": - "Une erreur s'est produite lors de votre paiement.", - "The payment was approved.": "Paiement approuvé.", - "Payment Successful": "Paiement réussi", - "No ride found yet": "Aucune campagne trouvée", - "Accept Order": "Commande acceptée", - "reject your order.": "Votre Ordre.", - "Bottom Bar Example": "Exemple de barre inférieure", - "Driver phone": "Téléphone du chauffeur", - "Statistics": "& Statistiques", - "Origin": "ORIGINE", - "Destination": "- Destination ?", - "Driver Name": "Nom de pilote & #160;:", - "Driver Car Plate": "Plaque d'immatriculation du conducteur", - "Available for rides": "Disponible pour les courses", - "Scan Id": "Contrôle d'identité", - "Camera not initilaized yet": "Caméra pas encore configurée", - "Scan ID MklGoogle": "Vérification d'identité MklGoogle", - "Language": "Langue ", - "Jordan": "Jordanie", - "USA": "Etats Unis d'Amérique", - "Egypt": "Egypte", - "Turkey": "Turquie", - "Saudi Arabia": "Arabie Saoudite", - "Qatar": "Qatar", - "Bahrain": "Bahreïn", - "Kuwait": "Koweït", - "But you have a negative salary of": - "Mais vous avez un salaire négatif de", - "Promo Code": "Code promo", - "Your trip distance is": "La distance de votre course est de", - "Enter promo code": "Code promo", - "You have promo!": "Vous avez une promotion !", - "Cost Duration": "Durée du coût", - "Duration is": "La durée est", - "Leave": "Quitter", - "Join": "Joindre", - "You Should be select reason.": "Vous devez choisir une raison.", - "\$": "\$", - "Waiting for Driver ...": "En attente du chauffeur ...", - "Latest Recent Trip": "J'ai des choses à faire!", - "from your list": "À partir de votre liste", - "Do you want to change Work location": - "Souhaitez-vous changer de lieu de travail ?", - "Do you want to change Home location": - "Souhaitez-vous changer l'emplacement de la maison", - "We Are Sorry That we dont have cars in your Location!": - "Nous sommes désolés que les voitures ne soient pas disponibles chez vous !", - "Choose from Map": "Sélectionner sur la carte", - "Pick your ride location on the map - Tap to confirm": - "Sélectionnez votre lieu de prise en charge sur la carte - appuyez pour confirmer", - "To Work": "Pour le boulot", - "Are you want to go this site": "Voulez-vous aller à cet endroit", - "Closest & Cheapest": "Le plus proche et le moins cher", - "Work Saved": "Enregistré :", - "Intaleq is the ride-hailing app that is safe, reliable, and accessible.": - "Intaleq est une application de covoiturage sûre, fiable et accessible.", - "With Intaleq, you can get a ride to your destination in minutes.": - "En voyageant, vous pouvez vous rendre à destination en quelques minutes.", - "Intaleq is committed to safety, and all of our captains are carefully screened and background checked.": - "Safar s'engage pour la sécurité, et tous nos commandants sont soigneusement contrôlés et leurs antécédents vérifiés.", - "To Home": "RETOUR À LA PAGE D'ACCUEIL", - "Home Saved": "Enregistré :", - "Destination selected": "Destination sélectionnée", - "Now select start pick": - "Maintenant, choisissez Démarrer la sélection", - "Pick from map": "Sélectionner sur la carte", - "Click here point": "Cliquez ici", - "No Car in your site. Sorry!": - "Il n'y a pas de voiture dans votre région. Ex... Excusez moi.", - "Nearest Car for you about": - "La voiture la plus proche de chez vous est d'environ", - "N/A": "Aucune information", - "From :": "Du :", - "Get Details of Trip": "Obtenir les détails de la course", - "If you want add stop click here": - "Si vous souhaitez ajouter un arrêt, cliquez ici", - "Driver": "ⴰⵎⵏⴷⴰⵀ", - "Where you want go": "D'où viens-tu ?", - "My Card": "Ma carte.", - "Start Record": "Début de la campagne d'enregistrement", - "Wallet": "Un portefeuille.", - "History of Trip": "2.1 Histoire du vol", - "Helping Center": "Centre d'aide", - "Record saved": "Sauvegarde de l'historique effectuée !", - "Trips recorded": "Voyages enregistrés", - "Select Your Country": "Selectionnez votre pays", - "To ensure you receive the most accurate information for your location, please select your country below. This will help tailor the app experience and content to your country.": - "Pour vous assurer d'avoir les informations les plus précises pour votre emplacement, veuillez sélectionner votre pays ci-dessous. Cela vous aidera à personnaliser l'expérience et le contenu de l'application pour votre pays.", - "Are you sure to delete recorded files": - "Êtes-vous sûr de vouloir supprimer les fichiers enregistrés", - "Select recorded trip": "Choisissez une course enregistrée", - "Card Number": "N  de pièce d'identité:", - "Hi, Where to": "Bonjour, oùallez-vous ?", - "Pick your destination from Map": "Sélectionner sur la carte", - "Add Stops": "Ajouter des arrêts", - "Get Direction": "Obtenir une direction", - "Add Location": "Ajouter l'emplacement correctement", - "Switch Rider": "Changer de passager", - "You will arrive to your destination after timer end.": - "Vous arriverez à destination après l'expiration de la minuterie.", - "You can cancel trip": "Vous pouvez annuler la course", - "The driver waitting you in picked location .": - "Votre chauffeur vous attend à l'endroit désigné .", - "Pay with Your": "Payer avec", - "Pay with Credit Card": "- La carte.", - "Payment History": "Historique des paiements", - "Show Promos to Charge": "Afficher les promotions d'expédition", - "Point": "Points", - "Driver Balance": "Portefeuille chauffeur", - "Total Points is": "Le score total est de", - "Total Budget from trips is": "Le budget total des voyages est de", - "Total Amount:": "Montant total", - "Total Budget from trips by": "Budget total des voyages par", - "Credit card is": "Votre carte de crédit.", - "This amount for all trip I get from Passengers": - "Ce montant s'applique à toutes les courses que je reçois de la part de passagers.", - "Pay from my budget": "Payer sur mon budget", - "This amount for all trip I get from Passengers and Collected For me in": - "Ce montant s'applique à toutes les courses que je reçois de la part de passagers collectés pour moi à", - "You can buy points from your budget": - "Vous pouvez acheter des points à partir de votre budget", - "insert amount": "Entrez le montant", - "You can buy Points to let you online": - "Vous pouvez acheter des points pour vous permettre d'accéder en ligne", - "by this list below": "Grâce à cette liste ci-dessous", - "Create Wallet to receive your money": - "Créez un portefeuille pour recevoir votre argent", - "Enter your feedback here": "Saisissez vos commentaires ici", - "Please enter your feedback.": - "Veuillez saisir le texte de vos notes", - "Feedback": "Feedback:", - "Click here to Show it in Map": - "Cliquez ici pour le voir sur la carte", - "Canceled": "Annulé", - "Type your Email": "Votre e-mail", - "No I want": "- Je n'en ai pas envie.", - "Email is": "Email ", - "Phone Number is": "C'est le 92.38.09.06.", - "Date of Birth is": "Année de naissance", - "Sex is": "Le sexe est cardio.", - "Car Details": "Détails du véhicule", - "VIN is": "Structure", - "Color is": "- Sa couleur?", - "Make is": "Make is", - "Model is": "Formulaire de :", - "Year is": "Année", - "Edit Your data": "Modifiez vos informations", - "write vin for your car": - "Notez le numéro de châssis de votre véhicule", - "VIN": - "|||UNTRANSLATED_CONTENT_START|||رقم هيكل السيارة|||UNTRANSLATED_CONTENT_END|||", - "write Color for your car": "Tapez la couleur de votre voiture", - "write Make for your car": "Écrivez une marque pour votre voiture", - "write Model for your car": "Tapez votre modèle de voiture", - "write Year for your car": "Saisissez une année pour votre voiture", - "write Expiration Date for your car": "la date de péremption", - "Tariffs": "Définitions ", - "Minimum fare": "Prix minimum", - "Maximum fare": "Prix maximum", - "Flag-down fee": "Frais d'escale", - "Including Tax": "Incluant...", - "BookingFee": "Frais de réservation", - "Morning": "- Bonjour.", - "from 07:30 till 10:30 (Thursday, Friday, Saturday, Monday)": - "07h30 - 10h30 (jeudi, vendredi, samedi, lundi)", - "Evening": "- Bonsoir.", - "from 12:00 till 15:00 (Thursday, Friday, Saturday, Monday)": - "12h00 - 15h00 (jeudi, vendredi, samedi, lundi)", - "Night": "la nuit", - "You have in account": "Vous avez dans le compte", - "Select Country": "Sélectionner un pays.", - "Ride Today :": "Commandez une course aujourd'hui :", - "After this period": "Après cette période", - "You can't cancel!": "- Vous pouvez plus...", - "from 23:59 till 05:30": "23:59 - 05:30", - "Rate Driver": "Le chauffeur...", - "Total Cost is": "Coût total", - "Write note": "J'écris une lettre de menace.", - "Time to arrive": "Bobby, Qu'elle est notre e. t. a.?", - "Ride Summaries": "Résumés des courses", - "Total Cost": "Coût total", - "Average of Hours of": "Nombre moyen d'heures de travail", - "is ON for this month": "En cours ce mois-ci", - "Days": "Quelques mois, semaines... quelques jours.", - "Total Hours on month": "Nombre total d'heures", - "Counts of Hours on days": "Heures en jours", - "OrderId": "Commande N°", - "created time": "Date de création", - "Intaleq Over": "Et c'est là qu'on l'aura.", - "I will slow down": "Je vais ralentir.", - "Map Passenger": "Carte du passager", - "Be Slowly": "Soyez lent", - "If you want to make Google Map App run directly when you apply order": - "Si vous souhaitez lancer Google Maps directement lorsque vous appliquez la commande", - "You can change the language of the app": - "Vous pouvez modifier la langue de l'application", - "Your Budget less than needed": "Votre budget est sous-estimé", - "You can change the Country to get all features": - "Vous pouvez modifier le pays pour obtenir toutes les fonctionnalités", - "Change Country": "Non-pays" - }, - "hi": { - "Order": "ऑर्डर", - "OrderVIP": "वीआईपी ऑर्डर", - "Cancel Trip": "यात्रा रद्द करें", - "Passenger Cancel Trip": "यात्री ने यात्रा रद्द कर दी", - "VIP Order": "वीआईपी ऑर्डर", - "The driver accepted your trip": - "ड्राइवर ने आपकी यात्रा स्वीकार कर ली है", - "message From passenger": "यात्री से संदेश", - "Cancel": "रद्द करें", - "Trip Cancelled. The cost of the trip will be added to your wallet.": - "यात्रा रद्द कर दी गई। यात्रा की लागत आपके वॉलेट में जोड़ दी जाएगी।", - "token change": "टोकन परिवर्तन", - "face detect": "चेहरा पहचानना", - "Face Detection Result": "चेहरा पहचान परिणाम", - "similar": "समान", - "not similar": "असमान", - "Hi ,I will go now": "नमस्ते, मैं अब जाऊंगा", - "Passenger come to you": "यात्री आपके पास आ रहा है", - "Call Income": "आवक कॉल", - "Call Income from Passenger": "यात्री से आवक कॉल", - "Criminal Document Required": "आपराधिक दस्तावेज़ आवश्यक", - "You should have upload it .": "आपको इसे अपलोड करना चाहिए था।", - "Call End": "कॉल समाप्त", - "The order has been accepted by another driver.": - "ऑर्डर किसी अन्य ड्राइवर द्वारा स्वीकार कर लिया गया है।", - "The order Accepted by another Driver": - "ऑर्डर किसी अन्य ड्राइवर द्वारा स्वीकार किया गया", - "We regret to inform you that another driver has accepted this order.": - "हमें आपको यह सूचित करते हुए दुख हो रहा है कि किसी अन्य ड्राइवर ने यह ऑर्डर स्वीकार कर लिया है।", - "Driver Applied the Ride for You": - "ड्राइवर ने आपके लिए सवारी के लिए आवेदन किया", - "Applied": "लागू", - "Hi ,I Arrive your site": "नमस्ते, मैं आपके साइट पर पहुँच गया हूँ", - "Please go to Car Driver": "कृपया कार ड्राइवर के पास जाएं", - "Ok I will go now.": "ठीक है मैं अब जाऊंगा।", - "Accepted Ride": "सवारी स्वीकार की गई", - "Driver Accepted the Ride for You": - "ड्राइवर ने आपके लिए सवारी स्वीकार कर ली", - "Promo": "प्रोमो", - "Show latest promo": "नवीनतम प्रोमो दिखाएं", - "Trip Monitoring": "यात्रा निगरानी", - "Driver Is Going To Passenger": "ड्राइवर यात्री के पास जा रहा है", - "Please stay on the picked point.": "कृपया चुने हुए बिंदु पर रहें।", - "message From Driver": "ड्राइवर से संदेश", - "Trip is Begin": "यात्रा शुरू हो गई है", - "Cancel Trip from driver": "ड्राइवर से यात्रा रद्द", - "We will look for a new driver.\nPlease wait.": - "हम एक नए ड्राइवर की तलाश करेंगे।\nकृपया प्रतीक्षा करें।", - "The driver canceled your ride.": "ड्राइवर ने आपकी सवारी रद्द कर दी।", - "Driver Finish Trip": "ड्राइवर ने यात्रा समाप्त की", - "you will pay to Driver": "आप ड्राइवर को भुगतान करेंगे", - "Don’t forget your personal belongings.": - "अपनी निजी वस्तुएं न भूलें।", - "Please make sure you have all your personal belongings and that any remaining fare, if applicable, has been added to your wallet before leaving. Thank you for choosing the Intaleq app": - "कृपया सुनिश्चित करें कि आपके पास अपनी सभी निजी वस्तुएं हैं और यदि लागू हो तो कोई भी शेष किराया जाने से पहले आपके वॉलेट में जोड़ दिया गया है। Intaleq ऐप चुनने के लिए धन्यवाद", - "Finish Monitor": "निगरानी समाप्त करें", - "Trip finished": "यात्रा समाप्त हो गई", - "Call Income from Driver": "ड्राइवर से आवक कॉल", - "Driver Cancelled Your Trip": "ड्राइवर ने आपकी यात्रा रद्द कर दी", - "you will pay to Driver you will be pay the cost of driver time look to your Intaleq Wallet": - "आप ड्राइवर को भुगतान करेंगे आप ड्राइवर के समय की लागत का भुगतान करेंगे अपने Intaleq वॉलेट को देखें", - "Order Applied": "ऑर्डर लागू किया गया", - - //firebase - "registration_date": "दिनांक पंजीकृत", - "expiration_date": "खत्म होने की तारीख", - "rating_count": "रेटिंग्स", - "rating_driver": "ड्राइवर पार्टनर की रेटिंग", - "age": "दाँत", - "vin": "VIN", - "car_color": "फ़ॉन्ट रंग", - "car_plate": "कार के चारों ओर ले आओ।", - "car_model": "कार का मॉडल:", - "education": "शिक्षा", - "gender": "घराना", - "birthdate": "जन्मदिन", - "Approve Driver Documents": - "ड्राइवर पार्टनर के डॉक्यूमेंट मंज़ूर करें", - "Total Budget is": "कुल बजट", - "You will recieve code in sms message": - "आपको कोड एसएमएस (SMS) में मिलेगा", - "Please enter": "कृपया संसाधन नाम भरें. @ info: whatsthis", - "We need your phone number to contact you and to help you receive orders.": - "हमें आपसे संपर्क करने और ऑर्डर पाने में आपकी मदद करने के लिए आपका फ़ोन नंबर चाहिए।", - "The full name on your criminal record does not match the one on your driver’s license. Please verify and provide the correct documents.": - "आपके आपराधिक रिकॉर्ड पर मौजूद पूरा नाम आपके ड्राइविंग लाइसेंस पर मौजूद नाम से मेल नहीं खाता। कृपया जाँच करें और सही डॉक्यूमेंट दें।", - "The national number on your driver’s license does not match the one on your ID document. Please verify and provide the correct documents.": - "आपके ड्राइविंग लाइसेंस पर दिया गया राष्ट्रीय नंबर आपके आईडी डॉक्यूमेंट पर मौजूद नंबर से मेल नहीं खाता। कृपया जाँच करें और सही डॉक्यूमेंट दें।", - "Capture an Image of Your Criminal Record": - "अपने आपराधिक रिकॉर्ड की फ़ोटो लें", - "IssueDate": "जारी तिथि", - "Capture an Image of Your car license front": - "सामने से अपने कार लाइसेंस की फ़ोटो लें", - "Capture an Image of Your ID Document front": - "सामने से अपनी आईडी की फ़ोटो लें", - "NationalID": "राष्ट्रीय नंबर", - "FullName": "पूरा नाम", - "InspectionResult": "परीक्षा परिणाम", - "Criminal Record": "आपराधिक रिकॉर्ड", - "The email or phone number is already registered.": - "ईमेल या फ़ोन नंबर पहले से रजिस्टर है।", - "To become a ride-sharing driver on the Intaleq app, you need to upload your driver's license, ID document, and car registration document. Our AI system will instantly review and verify their authenticity in just 2-3 minutes. If your documents are approved, you can start working as a driver on the Intaleq app. Please note, submitting fraudulent documents is a serious offense and may result in immediate termination and legal consequences.": - "यात्रा ऐप में राइडशेयर ड्राइवर पार्टनर बनने के लिए, आपको अपना ड्राइविंग लाइसेंस, पहचान का डॉक्यूमेंट और गाड़ी के रजिस्ट्रेशन का डॉक्यूमेंट अपलोड करना होगा। हमारा AI सिस्टम केवल 2 -3 मिनट में इसकी प्रामाणिकता की तुरंत समीक्षा और सत्यापन करेगा। अगर आपके डॉक्यूमेंट मंज़ूर हो जाते हैं, तो आप ट्रैवल ऐप में ड्राइवर पार्टनर के तौर पर काम करना शुरू कर सकते हैं। कृपया ध्यान दें कि जाली डॉक्यूमेंट देना एक गंभीर अपराध है और इसके परिणामस्वरूप तत्काल समाप्ति और कानूनी परिणाम हो सकते हैं।", - "Documents check": "डॉक्यूमेंट वेरिफ़िकेशन", - "Driver's License": "ड्राइविंग लाइसेंस", - "License Type": "लाइसेंस:", - "National Number": "राष्ट्रीय आईडी संख्या:", - "Name (Arabic)": "नाम (अरबी)", - "Name (English)": "channa", - "Address": "पता", - "Issue Date": "जारी तिथि", - "Expiry Date": "समय - सीमा खत्म होने की तारीख", - "License Categories": "लाइसेंस:", - "driver_license": "ड्राइविंग लाइसेंस", - "Capture an Image of Your Driver License": - "अपने ड्राइविंग लाइसेंस की फ़ोटो लें", - "ID Documents Back": "पहचान के डॉक्यूमेंट दिखना", - "National ID": "राष्ट्रीय आईडी", - "Occupation": "व्यवसाय", - "Gender": "घराना", - "Religion": "nizamuddin", - "Marital Status": "वैवाहिक स्थिति", - "Full Name (Marital)": "पूरा नाम", - "Expiration Date": "खत्म होने की तारीख", - "Capture an Image of Your ID Document Back": - "अपने आईडी डॉक्यूमेंट के पिछले हिस्से की फ़ोटो लें", - "ID Documents Front": "पहचान के डॉक्यूमेंट के सामने", - "First Name": "पहला नाम", - "CardID": "अपने आईडी डॉक्यूमेंट के पिछले हिस्से की फ़ोटो लें", - "Full Name": "पूरा नाम", - "Vehicle Details Front": "सामने वाली गाड़ी का ब्यौरा", - "Plate Number": "बिसात की संख्या चुनें:", - "Owner Name": "मालिक का नाम", - "Vehicle Details Back": "गाड़ी का ब्यौरा फिर से", - "Make": "मेक:% 1", - "Model": "कार का मॉडल:", - "Year": "वर्ष", - "Chassis": "चेसिस", - "Color": "फ़ॉन्ट रंग", - "Displacement": "प्रतिस्थापन", - "Fuel": "ईंधन शुद्ध!", - "Tax Expiry Date": "समय - सीमा खत्म होने की तारीख", - "Inspection Date": "परीक्षा की तिथि", - "Capture an Image of Your car license back": - "अपने कार लाइसेंस की फ़ोटो फिर से लें", - "Capture an Image of Your Driver’s License": - "अपने ड्राइविंग लाइसेंस की फ़ोटो लें", - "Sign in with Google for easier email and name entry": - "ईमेल और नाम डालना आसान बनाने के लिए Google के साथ साइन इन करें", - "You will choose allow all the time to be ready receive orders": - "आप हर समय तैयार ऑर्डर की अनुमति देने का विकल्प चुनेंगे", - "Welcome to Intaleq!": "Safar में आपका स्वागत है!", - "Get to your destination quickly and easily.": - "अपने डेस्टिनेशन तक जल्दी और आसानी से पहुँचें।", - "Enjoy a safe and comfortable ride.": - "सुरक्षित और आरामदायक राइड का आनंद लें।", - "Choose Language": "भाषा चुनें", - "Login": "लॉगइन...", - "Pay with Wallet": "Wallet से भुगतान करें", - "Invalid MPIN": "अमान्य एमपीआईएन कोड", - "Invalid OTP": "अमान्य वेरिफ़िकेशन कोड", - "Enter your email address": "अपना ईमेल पता डालें", - "Please enter Your Email.": "कृपया दर्ज करें...", - "Enter your phone number": "अपना फ़ोन नंबर डालें", - "Please enter your phone number.": "कृपया अपना फ़ोन नंबर डालें।", - "Please enter Your Password.": "अपना पासवर्ड डालें", - "Submit": "भेजा जा रहा है", - "if you dont have account": "अगर आपके पास अकाउंट नहीं है", - "Register": "रेकॉर्ड", - "Accept Ride's Terms & Review Privacy Notice": - "ट्रिप की शर्तें एक्सेप्ट करें और निजता सूचना पर गौर करें", - "By selecting 'I Agree' below, I have reviewed and agree to the Terms of Use and acknowledge the Privacy Notice. I am at least 18 years of age.": - "नीचे \"मैं सहमत हूँ\" चुनकर, मैंने इस्तेमाल की शर्तों की समीक्षा की है और उनसे सहमत हूँ और निजता सूचना को स्वीकार करता हूँ।मेरी उम्र कम - से - कम 18 साल है।", - "I Agree": "सहमत", - "First name": "पहला नाम", - "Enter your first name": "अपना नाम डालें", - "Please enter your first name.": "कृपया अपना नाम डालें।", - "Last name": "परिवार नाम", - "Enter your last name": "परिवार नाम", - "Please enter your last name.": "कृपया अपना नाम डालें।", - "City": "शहर", - "Please enter your City.": "कृपया दर्ज करें...", - "Male": "पुरुष आवाज \"% 1\"", - "Female": "स्त्री", - "Verify Email": "ईमेल असत्यापित", - "We sent 5 digit to your Email provided": - "हमने आपके दिए गए ईमेल पर 5 अंक भेजे हैं", - "5 digit": "पिन(5-अंकोंवाला)", - "Send Verification Code": "Proofed और संचारण.", - "Your Ride Duration is": "आपकी यात्रा की अवधि है", - "You will be thier in": "आप उन्हें अंदर रखेंगे", - "You trip distance is": "आपकी ट्रिप की दूरी है", - "Fee is": "शुल्क है", - "To :": "को:", - "Add Promo": "प्रोमो जोड़ें", - "Confirm Selection": "चयन की पुष्टि करें", - "distance is": "दूरी है", - "duration is": "अवधि है", - "I don't need a ride anymore": "मुझे अब राइड की ज़रूरत नहीं है", - "I was just trying the application": "मैं अभी - अभी ऐप आज़मा रहा था", - "No driver accepted my request": - "किसी भी ड्राइवर पार्टनर ने मेरा ऑर्डर मंज़ूर नहीं किया", - "I added the wrong pick-up/drop-off location": - "आपने गलत पिकअप/ड्रॉप ऑफ़ लोकेशन जोड़ी है", - "I don't have a reason": "मेरे पास कोई कारण नहीं है", - "Other": "अन्य", - "Can we know why you want to cancel Ride ?": - "क्या हम जान सकते हैं कि आप ट्रिप क्यों कैंसिल करना चाहते हैं?", - "Cancel Ride": "चलाना बन्द करें", - "Add Payment Method": "भुगतान विधि जोड़ें", - "Your Wallet balance is": "आपका वॉलेट बैलेंस है", - "Ride Wallet": "ट्रिप वॉलेट", - "Payment Method": "भुगतान की विध", - "Type here Place": "यहाँ जगह टाइप करें", - "Are You sure to ride to": "क्या आप वाकई राइड करना चाहते हैं", - "Confirm": "पक्का करें", - "Back": "पीछे जाएँ", - "You are Delete": "आप मिटा रहे हैं", - "Deleted": "मिटाया", - "You Dont Have Any places yet !": - "आपके पास अभी तक कोई स्पॉट नहीं है !", - "Favorite Places": "पसंदीदा जगहें", - "From : Current Location": "मौज़ूदा स्थान बनाए रखें (_K)", - "Where to": "...कहाँ?", - "Notifications": "सूचनाएं", - "Profile": "प्रोफ़ाइल एसीएलएस (P)", - "Home": "घर", - "My Cared": "माई कर्ट", - "Add Card": "A6 कार्ड", - "Add Credit Card": "क्रेडिट कार्ड जोड़ें", - "Please enter the cardholder name": "कृपया कार्डधारक का नाम डालें", - "Please enter the expiry date": - "कृपया समय - सीमा खत्म होने की तारीख डालें", - "Please enter the CVV code": "कृपया कार्ड वेरिफ़िकेशन कोड डालें", - "Go To Favorite Places": "पसंदीदा जगहों पर जाएँ", - "Go to this Target": "इस लक्ष्य पर जाएँ", - "My Profile": "प्रोफ़ाइल नाम", - "Sign Out": "लॉगआउट", - "Home Page": "घर", - "Are you want to go to this site": - "क्या आप इस लोकेशन पर जाना चाहते हैं", - "MyLocation": "मेरी लोकेशन", - "my location": "मेरी लोकेशन", - "Target": "गंतव्य", - "Update": "अद्यतन", - "You Should choose rate figure": "आपको सही संख्या चुननी होगी", - "Login Captin": "लॉगइन...", - "Register Captin": "कप्तान का रजिस्ट्रेशन", - "Send Verfication Code": "वेरिफ़िकेशन कोड भेजें", - "End Ride": "राइड", - "Minute": "मिनट", - "Go to passenger Location now": "अभी राइडर की लोकेशन पर जाएँ", - "Duration of the Ride is": "ट्रिप की अवधि है", - "Distance of the Ride is": "ट्रिप की दूरी है", - "Name of the Passenger is": "राइडर का नाम है", - "Hello this is Captain": "नमस्ते, मैं कप्तान हूँ", - "Start the Ride": "ट्रिप शुरू करें", - "Please Wait If passenger want To Cancel!": - "अगर राइडर कैंसिल करना चाहते हैं, तो कृपया इंतज़ार करें!", - "Total Duration:": "कुल अवधि:", - "Active Duration:": "चरण की सक्रिय अवधि", - "Waiting for Captin ...": "कप्तान का इंतज़ार किया जा रहा है...", - "Age is": "उम्र है", - "Rating is": "रेटिंग है", - "to arrive you.": "आप तक पहुँचने के लिए।", - "Order History": "ऑर्डर का इतिहास रिकॉर्ड करें", - "My Wallet": "मेरा वॉलेट", - "Tariff": "टैरिफ", - "Settings": "विन्यास", - "Feed Back": "क्रिया:", - "Promos": "प्रमोशन", - "Please enter a valid 16-digit card number": - "कृपया एक मान्य PO नंबर डालें।", - "Add Phone": "टेलिफोन", - "Please enter a phone number": "कृपया फ़ोन नंबर डालें", - "You dont Add Emergency Phone Yet!": - "आपने अभी तक कोई आपातकालीन फ़ोन नहीं जोड़ा है!", - "You will arrive to your destination after": - "आप के बाद अपने डेस्टिनेशन पर पहुँचेंगे", - "You can cancel Ride now": "आप अभी ट्रिप कैंसिल कर सकते हैं", - "You Can cancel Ride After Captain did not come in the time": - "कैप्टन के समय पर न आने के बाद आप ट्रिप कैंसिल कर सकते हैं", - "If you in Car Now. Press Start The Ride": - "अगर तुम अभी कार में हो. ट्रिप शुरू करें पर टैप करें", - "You Dont Have Any amount in": "आपके पास में कोई राशि नहीं है", - "Wallet!": "एक बटुआ नाम", - "You Have": "तुम्हारे पास बकवास है.", - "Save Credit Card": "क्रेडिट कार्ड रखें", - "Show Promos": "ऑफ़र देखें", - "10 and get 4% discount": "10 और 4% की छूट पाएँ", - "20 and get 6% discount": "20 और 6% की छूट पाएँ", - "40 and get 8% discount": "40 और 8% की छूट पाएँ", - "100 and get 11% discount": "100% और 11% की छूट पाएँ", - "Pay with Your PayPal": "PayPal से भुगतान करें", - "You will choose one of above !": - "आप ऊपर दिए गए विकल्पों में से एक चुनेंगे!", - "Cancel": "चलाना बन्द करें", - "Delete My Account": "मेरा अकाउंट हटाएँ", - "Edit Profile": "प्रोफ़ाइल एसीएलएस (P)", - "Name": "नाम", - "Update Gender": "लिंग अपडेट करें", - "Education": "शिक्षा", - "Update Education": "शिक्षा अपडेट करें", - "Employment Type": "कार्य रद्द करें", - "SOS Phone": "फ़ोन नंबर", - "High School Diploma": "हाई स्कूल डिप्लोमा", - "Associate Degree": "जॉइंट डिप्लोमा डिग्री", - "Bachelor's Degree": "स्नातक की डिग्री", - "Master's Degree": "मैं एक मास्टर की डिग्री है.", - "Doctoral Degree": "पीएचडी", - "Promos For today": "आज के प्रमोशन", - "Copy this Promo to use it in your Ride!": - "अपनी ट्रिप में इस्तेमाल करने के लिए इस प्रोमो को कॉपी करें!", - "To change some Settings": "कुछ सेटिंग बदलने के लिए", - "To change Language the App": "ऐप की भाषा बदलने के लिए", - "Order Request Page": "ऑर्डर अनुरोध पेज", - "Rouats of Trip": "रावत ट्रिप", - "Passenger Name is": "यात्री का नाम", - "Total From Passenger is": "राइडर का कुल योग है", - "Duration To Passenger is": "राइडर की अवधि", - "Distance To Passenger is": "राइडर की दूरी है", - "Total For You is": "आपके लिए कुल राशि है", - "Distance is": "खाली जगह", - "KM": "किलोमीटर", - "Duration of Trip is": "ट्रिप की अवधि है", - "Minutes": "1 मिनट@ item: inlistbox", - "Apply Order": "ऑर्डर लागू करें", - "Refuse Order": "अनुरोध नामंज़ूर करें", - "Rate Captain": "कप्तान रेटिंग", - "Enter your Note": "अपना नोट डालें", - "Type something...": "कुछ लिखें...", - "Submit rating": "मूल्यांकन प्रदान करें", - "Rate Passenger": "राइडर की रेटिंग", - "Ride Summary": "ट्रिप का सारांश", - "welcome_message": "भरें - सबको नमस्कार", - "app_description": "आवेदनDescription", - "get_to_destination": "डेस्टिनेशन पर पहुँचना", - "get_a_ride": "राइड लें", - "safe_and_comfortable": "सुरक्षित और आरामदायक", - "committed_to_safety": "सुरक्षा के लिए प्रतिबद्ध", - "Driver Applied the Ride for You": - "एक ड्राइवर पार्टनर, जिन्होंने आपके लिए ट्रिप पूरी की है", - "Show latest promo": "नवीनतम प्रोमो दिखाएँ", - "Cancel Trip": "इस यात्रा को रद्द करें", - "Passenger Cancel Trip": "राइडर ने ट्रिप कैंसिल की", - "Please stay on the picked point.": - "कृपया चुने गए पॉइंट पर बने रहें।", - "Trip is Begin": "यात्रा शुरू होती है", - "Hi ,I will go now": "नमस्ते जी, अब मैं जा रहा हूँ", - "Passenger come to you": "आपके राइडर आपके पास आ रहे हैं", - "Hi ,I Arrive your site": - "नमस्ते जी, आप अपनी लोकेशन पर पहुँच गए हैं।", - "Driver Finish Trip": "ड्राइवर पार्टनर की ट्रिप खत्म होने की तारीख", - "you will pay to Driver": "आप ड्राइवर पार्टनर को भुगतान करेंगे", - "Driver Cancel Your Trip": "अपनी ट्रिप कैंसिल करें, ड्राइवर पार्टनर।", - "you will pay to Driver you will be pay the cost of driver time look to your Intaleq Wallet": - "आप ड्राइवर पार्टनर को भुगतान करेंगे आप ड्राइवर पार्टनर के समय की लागत का भुगतान करेंगे अपना सेफ़र वॉलेट देखें", - "I will go now": "अब मैं जा रही हूँ.", - "You Have Tips": "आपके पास बख्शीश है", - "tips": "सुझाव", - "Total is": "कुल है", - "No,I want": "मैं ठीक हूँ।", - "Your fee is": "आपका शुल्क है", - "Do you want to pay Tips for this Driver": - "क्या आप इस ड्राइवर पार्टनर को बख्शीश देना चाहेंगे?", - "Tip is": "मेरीबख्शीश", - "Camera Access Denied.": "कैमरे का ऐक्सेस नामंज़ूर कर दिया गया।", - "Open Settings": "सेटिंग खोलें", - "GPS Required Allow !.": "जीपीएस (GPS) चालू करना ज़रूरी है!", - "Your Account is Deleted": "आपका अकाउंट हटा दिया गया है", - "Are you sure to delete your account?": - "क्या आप वाकई अपना अकाउंट हटाना चाहते हैं?", - "Your data will be erased after 2 weeks": - "आपका डेटा 2 हफ़्तों के बाद मिटा दिया जाएगा", - "And you will can't return to use app after 1 month": - "आप एक महीने बाद ऐप पर वापस आ सकेंगे", - "Enter Your First Name": "अपना नाम डालें", - "Are you Sure to LogOut?": "क्या आप वाकई लॉग आउट करना चाहते हैं?", - "Email Wrong": "ईमेल", - "Email you inserted is Wrong.": "आपने जो ईमेल डाला है, वह गलत है।", - "You have finished all times": "आपने हर समय काम किया है", - "if you want help you can email us here": - "अगर आप मदद चाहते हैं, तो आप हमें यहाँ ईमेल कर सकते हैं", - "Thanks": "धन्यवाद", - "Email Us": "हमें एक ईमेल भेजें", - "I cant register in your app in face detection": - "मैं फ़ेस डिटेक्शन के साथ आपके ऐप के लिए साइन अप नहीं कर सकता", - "Hi": "सुस्वागतम", - "No face detected": "कोई चेहरा नहीं मिला", - "Image detecting result is": "इमेज डिटेक्शन का नतीजा है", - "from 3 times Take Attention": - "3 से अधिक बार आपका ध्यान आकर्षित करते हैं", - "Be sure for take accurate images please": - "कृपया सटीक फ़ोटो लेना न भूलें", - "You have": "तुम्हारे पास बकवास है.", - "image verified": "फ़ोटो नोटरीकृत है", - "Next": "अगला", - "There is no help Question here": "यहाँ कोई मदद का सवाल नहीं है", - "Call End": "कॉल खत्म करें", - "You dont have Points": "आप कोई आत्मा है.", - "You Are Stopped For this Day !": - "आपको पूरे दिन के लिए रोक दिया गया है!", - "You must be charge your Account": - "आपको अपना अकाउंट रिचार्ज करना होगा", - "You Refused 3 Rides this Day that is the reason": - "आपने आज 3 ट्रिप मना कर दी हैं और इसीलिए", - "See you Tomorrow!": "कल मिलते हैं!", - "Recharge my Account": "मेरा अकाउंट रीचार्ज करें", - "Ok , See you Tomorrow": "ठीक है, मैं तुमसे कल मिलूँगी.", - "You are Stopped": "आपको रोक दिया गया है", - "Connected": "ऑनलाइन", - "Not Connected": "मिटाया नहीं", - "Your are far from passenger location": - "आप राइडर की लोकेशन से बहुत दूर हैं", - "go to your passenger location before": - "तक अपने राइडर की लोकेशन पर जाएँ", - "Passenger cancel trip": "राइडर ने ट्रिप कैंसिल कर दी", - "You will get cost of your work for this trip": - "आपको इस यात्रा के लिए अपने काम के लिए भुगतान मिलेगा", - "in your wallet": "आपके वॉलेट में", - "you gain": "आप कमाते हैं", - "Order Cancelled": "निवेदन रोका गया", - "Order Cancelled by Passenger": "राइडर ने अनुरोध कैंसिल कर दिया", - "Success": "सफल", - "Feedback data saved successfully": - "मूल्यांकन डेटा सफलतापूर्वक सहेजा गया", - "No Promo for today .": "आज के लिए कोई प्रमोशन नहीं।", - "Select your destination": "अपना डेस्टिनेशन चुनें", - "Search for your Start point": "अपना शुरुआती बिंदु ढूँढें", - "Search for waypoint": "WIPOINT पॉइंट खोजें", - "Current Location": "मौज़ूदा स्थान बनाए रखें (_K)", - "Add Location 1": "स्थान:% 1", - "You must Verify email !.": "ईमेल असत्यापित", - "Cropper": "फ़सल", - "Saved Sucssefully": "सफलतापूर्वक सहेजा गया", - "Select Date": "दिनांक", - "Birth Date": "जन्मदिन: @ title: group", - "Ok": "ठीक", - "the 500 points equal 30 JOD": "500 points बराबर है: 30 JOD", - "the 500 points equal 30 JOD for you": - "500 पॉइंट्स आपके लिए 30 JOD के बराबर होते हैं", - "token updated": "कोड अपडेट किया गया", - "Add Location 2": "स्थान 2 जोड़ें", - "Add Location 3": "लोकेशन जोड़ें 3", - "Add Location 4": "लोकेशन जोड़ें 4", - "Waiting for your location": "आपकी लोकेशन का इंतज़ार है", - "Search for your destination": "अपना डेस्टिनेशन ढूँढ़ें", - "Hi! This is": "अरे, अब. इस तरफ वाला खेलेगा", - "I am using": "छवि इस्तेमाल करें", - "to ride with": "के साथ राइड करने के लिए", - "as the driver.": "एक ड्राइवर के रूप में", - "is driving a": "गाड़ी चलाएँ", - "with license plate": "लाइसेंस प्लेट के साथ", - "I am currently located at": "फ़िलहाल मैं में हूँ", - "Please go to Car now": "कृपया अभी कार में जाएँ", - "If you need to reach me, please contact the driver directly at": - "अगर आपको मुझसे संपर्क करना है, तो कृपया सीधे ड्राइवर पार्टनर से पर संपर्क करें", - "No Car or Driver Found in your area.": - "आपके इलाके में कोई कार या ड्राइवर पार्टनर नहीं मिला।", - "Please Try anther time": "फिर से कोशिश करें", - "There no Driver Aplly your order sorry for that": - "कोई भी ड्राइवर पार्टनर आपका अनुरोध पूरा नहीं कर सकता, हमें अफ़सोस है।", - "Trip Cancelled": "ट्रिप कैंसिल की गई", - "The Driver Will be in your location soon .": - "आपके ड्राइवर पार्टनर जल्द ही आपकी लोकेशन पर पहुँच जाएँगे।", - "The distance less than 500 meter.": "दूरी 500 मीटर से कम है।", - "Promo End !": "शो खत्म हो गया है!", - "There is no notification yet": "अभी तक कोई नोटिफ़िकेशन नहीं है", - "Use Touch ID or Face ID to confirm payment": - "भुगतान कन्फ़र्म करने के लिए टच आईडी या फ़ेस आईडी का इस्तेमाल करें", - "Contact us for any questions on your order.": - "अपने ऑर्डर के बारे में किसी भी सवाल के लिए हमसे संपर्क करें।", - "Pyament Cancelled .": "भुगतान कैंसिल कर दिया गया।", - "type here": "यहाँ लिखें", - "Scan Driver License": "ड्राइविंग लाइसेंस की जाँच", - "Please put your licence in these border": - "कृपया अपना लाइसेंस इन सीमाओं के भीतर रखें", - "Camera not initialized yet": "कैमरा अभी कॉन्फ़िगर नहीं किया गया है", - "Take Image": "(आह)", - "AI Page": "AI पेज", - "Take Picture Of ID Card": "अपनी आईडी की फ़ोटो लें", - "Take Picture Of Driver License Card": - "अपने ड्राइविंग लाइसेंस कार्ड की फ़ोटो लें।", - "We are process picture please wait": - "हम फ़ोटो प्रोसेस कर रहे हैं, कृपया इंतज़ार करें।", - "There is no data yet.": "अभी तक कोई डेटा नहीं है।", - "Name :": "नाम:", - "Drivers License Class:": "ड्राइविंग लाइसेंस श्रेणी:", - "Document Number:": "दस्तावेज़ संख्या:", - "Address:": "आईपी पता:", - "Height:": "ऊँचाईः", - "Expiry Date:": "समाप्ति तिथि:", - "Date of Birth:": "जन्मदिन: @ title: group", - "You can't continue with us .": "आप हमारे साथ जारी नहीं रख सकते।", - "You should renew Driver license": - "आपको अपने ड्राइविंग लाइसेंस का नवीनीकरण करना होगा", - "Detect Your Face": "अपने आप पता लगाएँ", - "Go to next step": "अगले चरण पर जाएँ", - "scan Car License.": "गाड़ी के लाइसेंस की जाँच।", - "Name in arabic": "अरबी में नाम", - "Drivers License Class": "ड्राइविंग लाइसेंस श्रेणी", - "Date of Birth": "जन्मदिन: @ title: group", - "Age": "जीवन", - "Lets check Car license": "आइए गाड़ी का लाइसेंस देखें", - "Car Kind": "कार के चारों ओर ले आओ।", - "Car Plate": "कार के चारों ओर ले आओ।", - "Lets check License Back Face": "आइए बैक फ़ेस लाइसेंस की जाँच करें", - "Car License Card": "गाड़ी का लाइसेंस कार्ड", - "No image selected yet": "अभी तक कोई फ़ोटो नहीं चुनी गई है", - "Made :": "मेक:", - "model :": "मॉडल:", - "VIN :": "चेसिस नंबर:", - "year :": "साल", - "ُExpire Date": "खत्म होने की तारीख", - "Login Driver": "लॉगइन...", - "Password must br at least 6 character.": - "पासवर्ड कम - से - कम 6 कैरेक्टर का होना चाहिए।", - "if you don't have account": "अगर आपके पास अकाउंट नहीं है", - "Here recorded trips audio": "यहाँ ऑडियो ट्रिप रिकॉर्डिंग दी गई हैं", - "Register as Driver": "ड्राइवर पार्टनर के रूप में साइन अप करें", - "Privacy Notice": "निजता सूचना", - "By selecting \"I Agree\" below, I have reviewed and agree to the Terms of Use and acknowledge the": - "नीचे \"मैं सहमत हूँ\" चुनकर, मैंने नियम और शर्तों की समीक्षा की है, सहमति दी है और उन्हें स्वीकार किया है", - ". I am at least 18 years of age.": - ". मेरी उम्र कम - से - कम 18 साल है।", - "Log Out Page": "लॉगआउट", - "Log Off": "बाहर आ रहा है.", - "Register Driver": "ड्राइवर चुनें", - "Verify Email For Driver": "ड्राइवर पार्टनर का ईमेल देखें", - "Admin DashBoard": "एडमिन डैशबोर्ड", - "Your name": "तुम्हारा नाम", - "your ride is applied": "आपकी ट्रिप लागू कर दी गई है", - "Your password": "आपका पासवर्ड बदला गया.", - "LE": "मिस्र पाउण्ड", - "JOD": "जॉर्डन दिनार", - "m": "% 1 मी", - "We search nearst Driver to you": - "हम आपके सबसे नज़दीकी ड्राइवर पार्टनर की तलाश कर रहे हैं", - "please wait till driver accept your order": - "कृपया ड्राइवर पार्टनर के आपका अनुरोध एक्सेप्ट करने तक इंतज़ार करें", - "No accepted orders? Try raising your trip fee to attract riders.": - "कोई एक्सेप्ट किए गए ऑर्डर नहीं हैं? राइडर को आकर्षित करने के लिए अपना ट्रिप शुल्क बढ़ाएँ।", - "You should select one": "आपको एक चुनना होगा", - "The driver accept your order for": - "आपके ड्राइवर पार्टनर ने के लिए आपका अनुरोध मंज़ूर कर लिया है", - "Increase Fee": "शुल्क बढ़ाएँ", - "No, thanks": "मैं देख रहा हूँ.", - "The driver on your way": "आपके ड्राइवर पार्टनर रास्ते में हैं", - "Total price from": "से कुल किराया", - "Order Details Intaleq": "ऑर्डर विवरण", - "Order Applied": "ऑर्डर लागू किया गया", - "accepted your order": "आपका अनुरोध मंज़ूर कर लिया गया है", - "We regret to inform you that another driver has accepted this order.": - "हमें यह बताते हुए अफ़सोस हो रहा है कि किसी दूसरे ड्राइवर पार्टनर ने यह अनुरोध एक्सेप्ट कर लिया है।", - "Selected file:": "मौज़ूदा फ़ाइल को खोलें", - "Your trip cost is": "आपकी ट्रिप का खर्च", - "this will delete all files from your device": - "यह आपके डिवाइस से सभी फ़ाइलों को हटा देगा", - "you have a negative balance of": "आपका बैलेंस नेगेटिव है", - "in your": "डार्सी विक?", - "Exclusive offers and discounts always with the Intaleq app": - "यात्रा ऐप के साथ हमेशा खास ऑफ़र और छूट", - "Please go to Car Driver": "कृपया कार के ड्राइवर पार्टनर के पास जाएँ", - "wallet due to a previous trip.": "पिछली ट्रिप की वजह से वॉलेट।", - "Submit Question": "प्रश्न सबमिट करें", - "Please enter your Question.": "कृपया अपना प्रश्न दर्ज करें।", - "Help Details": "मदद का ब्यौरा", - "No trip yet found": "अभी तक कोई ट्रिप नहीं मिली है", - "No Response yet.": "अभी तक कोई जवाब नहीं मिला।", - "You Earn today is": "आज आपकी कमाई है", - "You Have in": "आपके पास पर है", - "Total points is": "कुल स्कोर है", - "Total Connection Duration:": "कुल कनेक्शन अवधि:", - "H and": "H और", - "Passenger name :": "यात्री का नाम:", - "Cost Of Trip IS": "ट्रिप का खर्च है", - "Arrival time": "पहुँच अनुमतियाँ", - "arrival time to reach your point": - "अपने डेस्टिनेशन तक पहुँचने का समय", - "For Intaleq and Delivery trips, the price is calculated dynamically. For Comfort trips, the price is based on time and distance": - "झटपट राइड और डिलीवरी के लिए, किराए का हिसाब गतिशील तरीके से लगाया जाता है। आरामदायक राइड के लिए, किराया समय और दूरी पर आधारित होता है।", - "Hello this is Driver": "नमस्ते जी, मैं ड्राइवर पार्टनर हूँ", - "Is the Passenger in your Car ?": "क्या राइडर आपकी गाड़ी में हैं?", - "Please wait for the passenger to enter the car before starting the trip.": - "कृपया ट्रिप शुरू करने से पहले राइडर के गाड़ी में बैठने का इंतज़ार करें।", - "No ,still Waiting.": - "नहीं , मैं अभी भी तुम्हारा इंतज़ार कर रही हूँ।", - "I arrive you": "मैं पहुँच गया!", - "I Arrive your site": "मैं पहुँच गया!", - "You are not in near to passenger location": - "आप राइडर की लोकेशन के पास नहीं हैं", - "please go to picker location exactly": - "कृपया चयन की सटीक लोकेशन पर जाएँ", - "You Can Cancel Trip And get Cost of Trip From": - "आप ट्रिप कैंसिल कर सकते हैं और से ट्रिप का खर्च उठा सकते हैं", - "Are you sure to cancel?": "क्या आप वाक़ई रद्द करना चाहते हैं?", - "Yes": "نعم", - "Insert Emergincy Number": "आपातकालीन नंबर डालें", - "Best choice for comfort car and flexible route and stops point": - "आरामदायक कार, सुविधाजनक मार्ग और ठहरने की जगह के लिए सबसे अच्छा विकल्प", - "Insert": "प्रविष्ट", - "This is for delivery or a motorcycle.": - "यह डिलीवरी या मोटरसाइकिल के लिए है।", - "This trip goes directly from your starting point to your destination for a fixed price. The driver must follow the planned route": - "यह ट्रिप आपके शुरुआती स्थान से सीधे आपके डेस्टिनेशन तक जाती है। ड्राइवर पार्टनर को तय किए गए रास्ते पर चलना होगा", - "You can decline a request without any cost": - "आप बिना किसी शुल्क के अनुरोध नामंज़ूर कर सकते हैं", - "Perfect for adventure seekers who want to experience something new and exciting": - "एडवेंचर चाहने वालों के लिए आदर्श जो कुछ नया और रोमांचक आज़माना चाहते हैं", - "My current location is:": "मेरी मौजूदा लोकेशन है:", - "and I have a trip on": "और मेरी में एक यात्रा है", - "App with Passenger": "राइडर के साथ आवेदन करें", - "You will be pay the cost to driver or we will get it from you on next trip": - "लागत का भुगतान ड्राइवर पार्टनर को किया जाएगा या हम इसे अगली ट्रिप पर आपसे ले लेंगे", - "Trip has Steps": "ट्रिप में स्टेप हैं", - "Distance from Passenger to destination is": - "डेस्टिनेशन तक राइडर की दूरी है", - "price is": "किराया है", - "This ride type does not allow changes to the destination or additional stops": - "ट्रिप का यह प्रकार डेस्टिनेशन में बदलाव या अतिरिक्त स्टॉप की इजाज़त नहीं देता है", - "This price may be changed": "यह किराया बदल सकता है", - "No SIM card, no problem! Call your driver directly through our app. We use advanced technology to ensure your privacy.": - "कोई सिम कार्ड नहीं, कोई समस्या नहीं! हमारे ऐप के ज़रिए सीधे अपने ड्राइवर पार्टनर से संपर्क करें। हम आपकी निजता सुनिश्चित करने के लिए उन्नत तकनीक का उपयोग करते हैं।", - "This ride type allows changes, but the price may increase": - "इस तरह की ट्रिप में बदलाव हो सकते हैं, लेकिन किराया बढ़ सकता है", - "message From passenger": "राइडर का मैसेज", - "Select one message": "स्वचालितआवाज:", - "My location is correct. You can search for me using the navigation app": - "मेरी लोकेशन सही है। आप नेविगेशन ऐप का इस्तेमाल करके मुझे खोज सकते हैं", - "I'm waiting for you": "मैं आपका इंतज़ार कर रहा हूँ", - "Hello, I'm at the agreed-upon location": - "नमस्ते जी, मैं सहमत लोकेशन पर हूँ", - "We noticed the Intaleq is exceeding 100 km/h. Please slow down for your safety. If you feel unsafe, you can share your trip details with a contact or call the police using the red SOS button.": - "हमने देखा कि गति 100 किमी/घंटा से अधिक है। कृपया अपनी सुरक्षा के लिए इसे धीमा करें। अगर आप असुरक्षित महसूस करते हैं, तो आप किसी संपर्क के साथ अपनी ट्रिप का ब्यौरा शेयर कर सकते हैं या रेड डिस्ट्रेस बटन का इस्तेमाल करके पुलिस को कॉल कर सकते हैं।", - "Warning: Intaleqing detected!": "चेतावनी: ओवरस्पीड का पता चला!", - "Please help! Contact me as soon as possible.": - "कृपया मेरी मदद करें! जितनी जल्दी हो सके मुझसे संपर्क करें।", - "Share Trip Details": "ट्रिप का ब्यौरा दें", - "Car Plate is": "कार के चारों ओर ले आओ।", - "the 3000 points equal 3000 L.E for you": - "3000 अंक आपके लिए 3000 EGP के बराबर है", - "So go and gain your money": "अपने पैसे कमाने के लिए आगे बढ़ें", - "the 3000 points equal 3000 L.E": "3000 points बराबर है: 3000 EGP", - "The payment was not approved. Please try again.": - "भुगतान मंज़ूर नहीं किया गया। फिर से कोशिश करें", - "Payment Failed": "भुगतान नहीं हो सका", - "Error": "% 1 त्रुटि", - "An error occurred during the payment process.": - "आपके भुगतान में कोई गड़बड़ी हुई।", - "The payment was approved.": "भुगतान मंज़ूर हो गया।", - "Payment Successful": "भुगतान सफल रहा", - "No ride found yet": "अभी तक कोई ट्रिप नहीं मिली है", - "Accept Order": "निवेदन रोका गया", - "reject your order.": "इनकार करें", - "Bottom Bar Example": "निचला पटल", - "Driver phone": "ड्राइवर पार्टनर का फ़ोन नंबर", - "Statistics": "आंकड़े", - "Origin": "संपत्ति", - "Destination": "पहुँच अनुमतियाँ", - "Driver Name": "ड्राइवर नामः", - "Driver Car Plate": "ड्राइविंग लाइसेंस प्लेट", - "Available for rides": "राइड के लिए उपलब्ध", - "Scan Id": "पहचान की जाँच", - "Camera not initilaized yet": "कैमरा अभी कॉन्फ़िगर नहीं किया गया है", - "Scan ID MklGoogle": "MklGoogle पहचान जाँच", - "Language": "भाषा", - "Jordan": "जॉर्डन", - "USA": "संयुक्त राज्य अमेरिका", - "Egypt": "मिश्र", - "Turkey": "तुर्की", - "Saudi Arabia": "सऊदी अरब", - "Qatar": "क़तर", - "Bahrain": "बहारीन", - "Kuwait": "कुवैत", - "But you have a negative salary of": - "लेकिन आपके पास नकारात्मक वेतन है", - "Promo Code": "प्रोमो कोड", - "Your trip distance is": "आपकी ट्रिप की दूरी है", - "Enter promo code": "प्रोमो कोड डालें", - "You have promo!": "आपके पास एक प्रमोशन है!", - "Cost Duration": "कास्ट 2", - "Duration is": "अवधि है", - "Leave": "छोड़ें", - "Join": "दर्शक के रूप में शामिल हों (J)", - "You Should be select reason.": "आपको एक कारण चुनना होगा।", - "\$": "\$", - "Waiting for Driver ...": - "ड्राइवर पार्टनर का इंतज़ार किया जा रहा है...", - "Latest Recent Trip": "ताज़ा ट्रिप", - "from your list": "आपकी लिस्ट से", - "Do you want to change Work location": - "क्या आप कार्य स्थान बदलना चाहेंगे?", - "Do you want to change Home location": - "क्या आप घर की लोकेशन बदलना चाहेंगे", - "We Are Sorry That we dont have cars in your Location!": - "हमें अफ़सोस है कि आपकी लोकेशन पर कारें उपलब्ध नहीं हैं!", - "Choose from Map": "मैप से चुनें", - "Pick your ride location on the map - Tap to confirm": - "मैप पर अपनी पिकअप लोकेशन चुनें - कन्फ़र्म करने के लिए टैप करें", - "To Work": "काम के लिए", - "Are you want to go this site": "क्या आप इस लोकेशन पर जाना चाहते हैं", - "Closest & Cheapest": "सबसे नज़दीकी और सबसे सस्ती", - "Work Saved": "सेव", - "Intaleq is the ride-hailing app that is safe, reliable, and accessible.": - "Intaleq एक सुरक्षित, भरोसेमंद और सुलभ राइड - हेलिंग ऐप है।", - "With Intaleq, you can get a ride to your destination in minutes.": - "यात्रा के साथ, आप मिनटों में अपने डेस्टिनेशन तक राइड ले सकते हैं।", - "Intaleq is committed to safety, and all of our captains are carefully screened and background checked.": - "SAFAR सुरक्षा के लिए प्रतिबद्ध है, और हमारे सभी कमांडरों की सावधानीपूर्वक जांच की जाती है और पृष्ठभूमि की जाँच की जाती है।", - "To Home": "घर", - "Home Saved": "सेव", - "Destination selected": "डेस्टिनेशन चुना गया", - "Now select start pick": "अब चयन शुरू करें चुनें", - "Pick from map": "मैप से चुनें", - "Click here point": "यहाँ क्लिक करें", - "No Car in your site. Sorry!": - "आपकी लोकेशन में कोई कार नहीं है। क्षमा करें!", - "Nearest Car for you about": "आपकी सबसे नज़दीकी कार लगभग", - "N/A": "जानकारियाँ नहीं", - "From :": "द्वारा:", - "Get Details of Trip": "ट्रिप का ब्यौरा पाएँ", - "If you want add stop click here": - "अगर आप कोई स्टॉप जोड़ना चाहते हैं, तो यहाँ क्लिक करें", - "Driver": "ड्राइवर", - "Where you want go": "आप कहाँ जाना चाहते हैं?", - "My Card": "mera card kho gaya hai", - "Start Record": "रिकार्ड करने के लिए आरंभ कर रहा है", - "Wallet": "हमअपनेहाथोंपरकाफी लड़ाई है तो एलेन का बटुआ. .", - "History of Trip": "ट्रिप की तारीख", - "Helping Center": "मदद!", - "Record saved": "रिकॉर्ड सेव किया गया", - "Trips recorded": "रिकॉर्ड की गई ट्रिप", - "Select Your Country": "अपना देश चुनें", - "To ensure you receive the most accurate information for your location, please select your country below. This will help tailor the app experience and content to your country.": - "यह पक्का करने के लिए कि आपके पास अपनी लोकेशन के लिए सबसे सटीक जानकारी है, कृपया नीचे अपना देश चुनें। इससे आपके देश के लिए ऐप के अनुभव और कॉन्टेंट को कस्टमाइज़ करने में मदद मिलेगी।", - "Are you sure to delete recorded files": - "क्या आप वाकई लॉग की गई फ़ाइलों को हटाना चाहते हैं", - "Select recorded trip": "रिकॉर्ड की गई ट्रिप चुनें", - "Card Number": "कार्ड संख्य", - "Hi, Where to": "नमस्ते, कहाँ जाना है?", - "Pick your destination from Map": "मैप से अपना डेस्टिनेशन चुनें", - "Add Stops": "स्टॉप जोड़ें", - "Get Direction": "रास्ता जानें", - "Add Location": "लोकेशन जोड़ें", - "Switch Rider": "राइडर बदलें", - "You will arrive to your destination after timer end.": - "टाइमर की समय - सीमा खत्म होने के बाद आप अपने डेस्टिनेशन पर पहुँच जाएँगे।", - "You can cancel trip": "आप ट्रिप कैंसिल कर सकते हैं", - "The driver waitting you in picked location .": - "आपके ड्राइवर पार्टनर तय लोकेशन पर आपका इंतज़ार कर रहे हैं।", - "Pay with Your": "के द्वारा खोलें (i)", - "Pay with Credit Card": "क्रेडिट कार्ड से भुगतान करें", - "Payment History": "भुगतान इतिहास", - "Show Promos to Charge": "शिपिंग प्रमोशन दिखाएँ", - "Point": "pt", - "Driver Balance": "ड्राइवर पार्टनर का वॉलेट", - "Total Points is": "कुल स्कोर है", - "Total Budget from trips is": "ट्रिप का कुल बजट है", - "Total Amount:": "कुल राश", - "Total Budget from trips by": "तक ट्रिप का कुल बजट", - "Credit card is": "क्रेडिट कार्ड", - "This amount for all trip I get from Passengers": - "यह राशि उन सभी ट्रिप के लिए है, जो मुझे राइडर से मिलती हैं", - "Pay from my budget": "मेरे बजट से भुगतान करें", - "This amount for all trip I get from Passengers and Collected For me in": - "यह राशि उन सभी ट्रिप के लिए है, जो मुझे में मेरे लिए इकट्ठा किए गए राइडर से मिलती हैं", - "You can buy points from your budget": - "आप अपने बजट से पॉइंट खरीद सकते हैं", - "insert amount": "राशि डालें", - "You can buy Points to let you online": - "आप ऑनलाइन ऐक्सेस करने के लिए पॉइंट खरीद सकते हैं", - "by this list below": "नीचे इस सूची के माध्यम से", - "Create Wallet to receive your money": - "अपना पैसा पाने के लिए एक वॉलेट बनाएँ", - "Enter your feedback here": "अपना फ़ीडबैक यहाँ डालें", - "Please enter your feedback.": "कृपया अपने नोट्स का टेक्स्ट डालें", - "Feedback": "लांच फ़ीडबैक सक्षम करें (l)", - "Click here to Show it in Map": - "मैप पर इसे देखने के लिए यहाँ क्लिक करें", - "Canceled": "कैंसिल किया गया", - "Type your Email": "अपना ईमेल टाइप करें", - "No I want": "मैं ठीक हूँ।", - "Email is": "ईमेल", - "Phone Number is": "फ़ोन नंबर", - "Date of Birth is": "जन्मदिन: @ title: group", - "Sex is": "लिंग है", - "Car Details": "गाड़ी का ब्यौरा", - "VIN is": "स्केलेटान नक़ल करें", - "Color is": "रंग है", - "Make is": "मेक है", - "Model is": "फ़ॉर्म यहाँ से:", - "Year is": "वर्ष", - "Edit Your data": "अपने ब्यौरे में बदलाव करें", - "write vin for your car": "अपनी गाड़ी का चेसिस नंबर लिखें", - "VIN": "चेसिस नंबर", - "write Color for your car": "अपनी कार का रंग टाइप करें", - "write Make for your car": "अपनी कार के लिए मेक लिखें", - "write Model for your car": "अपनी कार का मॉडल टाइप करें", - "write Year for your car": "अपनी कार के लिए साल टाइप करें", - "write Expiration Date for your car": - "अपनी गाड़ी की समय - सीमा खत्म होने की तारीख लिखें", - "Tariffs": "परिभाषाएँ", - "Minimum fare": "30 मि.", - "Maximum fare": "अधि.", - "Flag-down fee": "स्टॉपओवर शुल्क", - "Including Tax": "टैक्स सहित", - "BookingFee": "बुकिंग शुल्क", - "Morning": "Apki ek photo dekh skta hu", - "from 07:30 till 10:30 (Thursday, Friday, Saturday, Monday)": - "07:30 - 10:30 (गुरुवार, शुक्रवार, शनिवार, सोमवार)", - "Evening": "और फिर एक शाम...", - "from 12:00 till 15:00 (Thursday, Friday, Saturday, Monday)": - "12:00 - 15:00 (गुरुवार, शुक्रवार, शनिवार, सोमवार)", - "Night": "रात", - "You have in account": "आपके अकाउंट में है", - "Select Country": "देश चुनें", - "Ride Today :": "आज ही राइड का अनुरोध करें :-", - "After this period": "इस अवधि के बाद", - "You can't cancel!": "आप कैंसिल नहीं कर सकते!", - "from 23:59 till 05:30": "23:59 - 05:30", - "Rate Driver": "ड्राइवर चुनें", - "Total Cost is": "कुल लागत है", - "Write note": "टिप्पणीः", - "Time to arrive": "पहुँचने का अनुमानित समय", - "Ride Summaries": "ट्रिप के सारांश", - "Total Cost": "कुल लागत", - "Average of Hours of": "कार्य घंटे@ info: whatsthis", - "is ON for this month": "इस महीने चल रहा है", - "Days": "2 दिन", - "Total Hours on month": "हर महीने घंटों की कुल संख्या", - "Counts of Hours on days": "दिनों में घंटे", - "OrderId": "निवेदन रोका गया", - "created time": "निर्माण समय", - "Intaleq Over": "एनिमेशन गति", - "I will slow down": "मैं धीमा हो जाऊँगी.", - "Map Passenger": "राइडर मैप", - "Be Slowly": "धीमा रहें", - "If you want to make Google Map App run directly when you apply order": - "यदि आप कमांड लागू करते समय सीधे Google मानचित्र लॉन्च करना चाहते हैं", - "You can change the language of the app": - "आप ऐप की भाषा बदल सकते हैं", - "Your Budget less than needed": "आपका बजट कम बजट वाला है", - "You can change the Country to get all features": - "आप सभी सुविधाएँ पाने के लिए देश बदल सकते हैं", - "Change Country": "गैर - देश" - }, - "fa": { - "Order": "سفارش", - "OrderVIP": "سفارش VIP", - "Cancel Trip": "لغو سفر", - "Passenger Cancel Trip": "مسافر سفر را لغو کرد", - "VIP Order": "سفارش VIP", - "The driver accepted your trip": "راننده سفر شما را پذیرفت", - "message From passenger": "پیام از طرف مسافر", - "Cancel": "لغو", - "Trip Cancelled. The cost of the trip will be added to your wallet.": - "سفر لغو شد. هزینه سفر به کیف پول شما اضافه خواهد شد.", - "token change": "تغییر رمز", - "face detect": "تشخیص چهره", - "Face Detection Result": "نتیجه تشخیص چهره", - "similar": "مشابه", - "not similar": "غیر مشابه", - "Hi ,I will go now": "سلام، من الان میروم", - "Passenger come to you": "مسافر به سمت شما می آید", - "Call Income": "تماس ورودی", - "Call Income from Passenger": "تماس ورودی از مسافر", - "Criminal Document Required": "مدرک جنایی مورد نیاز است", - "You should have upload it .": "شما باید آن را بارگذاری می کردید.", - "Call End": "پایان تماس", - "The order has been accepted by another driver.": - "سفارش توسط راننده دیگری پذیرفته شده است.", - "The order Accepted by another Driver": - "سفارش توسط راننده دیگر پذیرفته شد", - "We regret to inform you that another driver has accepted this order.": - "متاسفیم به اطلاع شما برسانیم که راننده دیگری این سفارش را پذیرفته است.", - "Driver Applied the Ride for You": - "راننده برای شما درخواست سفر داده است", - "Applied": "اعمال شد", - "Hi ,I Arrive your site": "سلام، من به موقعیت شما رسیدم", - "Please go to Car Driver": "لطفا به سمت راننده خودرو بروید", - "Ok I will go now.": "باشه، من الان میروم.", - "Accepted Ride": "سفر پذیرفته شد", - "Driver Accepted the Ride for You": "راننده سفر را برای شما پذیرفت", - "Promo": "تبلیغ", - "Show latest promo": "نمایش آخرین تبلیغ", - "Trip Monitoring": "نظارت بر سفر", - "Driver Is Going To Passenger": "راننده به سمت مسافر می رود", - "Please stay on the picked point.": "لطفا در نقطه انتخاب شده بمانید.", - "message From Driver": "پیام از طرف راننده", - "Trip is Begin": "سفر شروع شد", - "Cancel Trip from driver": "لغو سفر از طرف راننده", - "We will look for a new driver.\nPlease wait.": - "ما به دنبال راننده جدیدی خواهیم بود.\nلطفا صبر کنید.", - "The driver canceled your ride.": "راننده سفر شما را لغو کرد.", - "Driver Finish Trip": "راننده سفر را تمام کرد", - "you will pay to Driver": "شما به راننده پرداخت خواهید کرد", - "Don’t forget your personal belongings.": - "وسایل شخصی خود را فراموش نکنید.", - "Please make sure you have all your personal belongings and that any remaining fare, if applicable, has been added to your wallet before leaving. Thank you for choosing the Intaleq app": - "لطفا مطمئن شوید که تمام وسایل شخصی خود را برداشته‌اید و اگر مبلغ باقیمانده‌ای وجود دارد، قبل از رفتن به کیف پول شما اضافه شده است. از اینکه برنامه Intaleq را انتخاب کردید متشکریم", - "Finish Monitor": "پایان نظارت", - "Trip finished": "سفر به پایان رسید", - "Call Income from Driver": "تماس ورودی از راننده", - "Driver Cancelled Your Trip": "راننده سفر شما را لغو کرد", - "you will pay to Driver you will be pay the cost of driver time look to your Intaleq Wallet": - "شما به راننده پرداخت خواهید کرد، هزینه زمان راننده را پرداخت خواهید کرد، به کیف پول Intaleq خود نگاه کنید", - "Order Applied": "سفارش اعمال شد", - //firebase - - "registration_date": "تاریخ ثبت نام", - "expiration_date": "انقضا:", - "rating_count": "تعداد بررسی ها", - "rating_driver": "ارزیابی راننده", - "age": "سن/سن", - "vin": "شماره شناسایی خودرو رو توی ترابری", - "car_color": "& رنگ‌", - "car_plate": "پلاک اتومبیل", - "car_model": "مدل ماشین:", - "education": "-آموزش و پرورش .", - "gender": "-چي؟ -اون سکس", - "birthdate": "تولد", - "Approve Driver Documents": "تایید مدارک شریک راننده", - "Total Budget is": "کل بودجه", - "You will recieve code in sms message": - "کد را در پیامک دریافت خواهید کرد", - "Please enter": "لطفاً ، نام منبعی را وارد کنید.", - "We need your phone number to contact you and to help you receive orders.": - "برای تماس با شما و کمک به شما در گرفتن سفارشات به شماره تلفن شما نیاز داریم.", - "The full name on your criminal record does not match the one on your driver’s license. Please verify and provide the correct documents.": - "نام کامل در سوابق کیفری شما با نام گواهینامه رانندگی شما مطابقت ندارد. لطفا بررسی کنید و مدارک صحیح را ارسال کنید.", - "The national number on your driver’s license does not match the one on your ID document. Please verify and provide the correct documents.": - "شماره ملی گواهینامه رانندگی شما با شماره مندرج در مدرک هویت شما مطابقت ندارد. لطفا بررسی کنید و مدارک صحیح را ارسال کنید.", - "Capture an Image of Your Criminal Record": - "از سابقه کیفری خود عکس بگیرید", - "IssueDate": "اولین کلید", - "Capture an Image of Your car license front": - "از جلوی گواهینامه ماشین خود عکس بگیرید", - "Capture an Image of Your ID Document front": - "یک عکس از مدرک شناسایی خود از جلو بگیرید", - "NationalID": "شمار ملى ", - "FullName": "نام", - "InspectionResult": "نتیجه آزمایش", - "Criminal Record": "سابقه کیفری", - "The email or phone number is already registered.": - "ایمیل یا شماره تلفن قبلا ثبت شده است.", - "To become a ride-sharing driver on the Intaleq app, you need to upload your driver's license, ID document, and car registration document. Our AI system will instantly review and verify their authenticity in just 2-3 minutes. If your documents are approved, you can start working as a driver on the Intaleq app. Please note, submitting fraudulent documents is a serious offense and may result in immediate termination and legal consequences.": - "برای تبدیل شدن به یک راننده اشتراکی در یک برنامه انطلق، باید گواهینامه رانندگی، سند هویت و سند ثبت وسیله نقلیه خود را آپلود کنید. سیستم هوش مصنوعی ما در عرض 2 تا 3 دقیقه فوراً صحت آن را بررسی و تأیید می کند. اگر مدارک شما تأیید شد، می توانید به عنوان شریک راننده در یک برنامه انطلق شروع به کار کنید. لطفا توجه داشته باشید که ارائه مدارک جعلی یک تخلف جدی است و ممکن است منجر به فسخ فوری و عواقب قانونی شود.", - "Documents check": "تأیید سند", - "Driver's License": "گواهينامه؟", - "License Type": "مجوز:", - "National Number": "کد ملی:", - "Name (Arabic)": "نام (عربی)", - "Name (English)": "بهانگليسي!", - "Address": "آدرس چیه؟", - "Issue Date": "اولین کلید", - "Expiry Date": "تاریخ انقضا", - "License Categories": "مجوز:", - "driver_license": "گواهينامه؟", - "Capture an Image of Your Driver License": - "از گواهینامه رانندگی خود عکس بگیرید", - "ID Documents Back": "پشت مدارک شناسایی", - "National ID": "هویت ملی", - "Occupation": "حرفه", - "Gender": "-چي؟ -اون سکس", - "Religion": "مذهب؟", - "Marital Status": "وضعيت تاهل وعائله مندى: متاهل ", - "Full Name (Marital)": "نام", - "Expiration Date": "انقضا:", - "Capture an Image of Your ID Document Back": - "از پشت مدرک شناسایی خود عکس بگیرید", - "ID Documents Front": "قسمت جلوی اسناد هویتی", - "First Name": "نام کوچک", - "CardID": "از پشت مدرک شناسایی خود عکس بگیرید", - "Full Name": "نام", - "Vehicle Details Front": "جزئیات خودروی جلو", - "Plate Number": "پلاک اتومبيل رو برداشتي ؟", - "Owner Name": "صاحب", - "Vehicle Details Back": "جزئیات خودرو دوباره", - "Make": "مقدار Û±", - "Model": "مدل ماشین:", - "Year": "دنار", - "Chassis": "شاسی بلند", - "Color": "& رنگ‌", - "Displacement": "تعویض", - "Fuel": "بنزين...", - "Tax Expiry Date": "تاریخ انقضا", - "Inspection Date": "تاریخ امتحان", - "Capture an Image of Your car license back": - "دوباره از گواهینامه ماشین خود عکس بگیرید", - "Capture an Image of Your Driver’s License": - "از گواهینامه رانندگی خود عکس بگیرید", - "Sign in with Google for easier email and name entry": - "با Google وارد شوید تا وارد کردن ایمیل و نام خود را آسان کنید", - "You will choose allow all the time to be ready receive orders": - "شما انتخاب می کنید که تمام وقت برای دریافت سفارشات آماده اجازه دهید", - "Welcome to Intaleq!": "به خونه خوش اومدی", - "Get to your destination quickly and easily.": - "سریع و آسان به مقصد برسید.", - "Enjoy a safe and comfortable ride.": - "از یک سواری امن و راحت لذت ببرید.", - "Choose Language": "انتخاب ظاهر و احساس", - "Login": "ورود به سیستم", - "Pay with Wallet": "با استفاده از کیف پول پرداخت کنید", - "Invalid MPIN": "کد MPIN نامعتبر است", - "Invalid OTP": "کد تأیید نامعتبر است", - "Enter your email address": "آدرس ایمیل خود را وارد کنید", - "Please enter Your Email.": "لطفا وارد کنید...", - "Enter your phone number": "شماره تلفن خود را وارد کنید", - "Please enter your phone number.": - "لطفا شماره تلفن خود را وارد کنید.", - "Please enter Your Password.": "اسم رمز ورودی", - "Submit": ".فرستاده شود", - "if you dont have account": "اگه اشکالي نداره", - "Register": - "نامنويسي کردن , ثبت نام کردن , عضويت دادن , درفهرست واردکردن , در صورت نوشتن , نام نويسي کردن (در هيلت منصفه)", - "Accept Ride's Terms & Review Privacy Notice": - "شرایط انطلق را بپذیرید و اعلامیه حریم خصوصی را مرور کنید", - "By selecting 'I Agree' below, I have reviewed and agree to the Terms of Use and acknowledge the Privacy Notice. I am at least 18 years of age.": - "با انتخاب «موافقم» در زیر، شرایط استفاده را بررسی کرده و با آن موافقم و اعلامیه حریم خصوصی را تأیید می‌کنم.من حداقل 18 سال دارم.", - "I Agree": "بله!", - "First name": "نام کوچک", - "Enter your first name": "لطفاً نام و نام خانوادگی‌تان را وارد کنید:", - "Please enter your first name.": "لطفا نام خود را وارد کنید.", - "Last name": "فاميليت", - "Enter your last name": "فاميليت", - "Please enter your last name.": "لطفا نام خود را وارد کنید.", - "City": "داخل شهره", - "Please enter your City.": "لطفا وارد کنید...", - "Male": "ياداوري کردن , ياداور شدن , بياد اوردن", - "Female": "زن", - "Verify Email": "اعتبار سنجی ایمیل", - "We sent 5 digit to your Email provided": - "ما 5 شماره به ایمیل شما ارسال کردیم", - "5 digit": "پین (5 رقمی)", - "Send Verification Code": "کد تایید", - "Your Ride Duration is": "مدت انطلق شما است", - "You will be thier in": "شما در آنها خواهید بود", - "You trip distance is": "مسافت پیاده روی شما است", - "Fee is": "هزینه ها هستند", - "To :": "بيماريِ آسپرگرِش؟", - "Add Promo": "افزودن نما", - "Confirm Selection": "انتخاب را تایید کنید", - "distance is": "فاصله است", - "duration is": "مدت زمان است", - "I don't need a ride anymore": "من دیگر نیازی به سواری ندارم", - "I was just trying the application": "من فقط برنامه را امتحان کردم", - "No driver accepted my request": - "هیچ شریک راننده ای درخواست من را نپذیرفت", - "I added the wrong pick-up/drop-off location": - "اضافه شدن مکان نادرست تحویل / تحویل", - "I don't have a reason": "يه دليلي دارم.", - "Other": "يكي ديگه", - "Can we know why you want to cancel Ride ?": - "آیا می‌توانیم بدانیم چرا می‌خواهید انطلق را لغو کنید؟", - "Cancel Ride": "متوقفش کنيد!", - "Add Payment Method": "یک روش پرداخت اضافه کنید", - "Your Wallet balance is": "موجودی کیف پول شما است", - "Ride Wallet": "کیف پول انطلق", - "Payment Method": "و چه جوري هزينه اش رو پرداخت ميکنيد؟", - "Type here Place": "مکان را اینجا بنویسید", - "Are You sure to ride to": "آیا مطمئن هستید که قصد انطلق به ...", - "Confirm": "تاييد شد", - "Back": "بازگشت , مراجعت", - "You are Delete": "شما حذف کنید", - "Deleted": "حذف‌شده", - "You Dont Have Any places yet !": "شما هنوز جایی ندارید!", - "Favorite Places": "مکان های مورد علاقه", - "From : Current Location": "موقعيت فعلي: اسکدارسکا32", - "Where to": "-البته. کجا؟", - "Notifications": "& پیکربندی آگاه‌سازی‌ها", - "Profile": "‏پروفایل؟", - "Home": "آغازه", - "My Cared": "ممکن است کاهش یابد", - "Add Card": "کارت اضافه کنید", - "Add Credit Card": "درخواست كارت المثني ", - "Please enter the cardholder name": - "لطفا نام دارنده کارت را وارد کنید", - "Please enter the expiry date": "لطفا تاریخ انقضا را وارد کنید", - "Please enter the CVV code": "لطفا کد تایید کارت را وارد کنید", - "Go To Favorite Places": "به مکان های مورد علاقه بروید", - "Go to this Target": "برو به اون هدف", - "My Profile": "نام Profile", - "Sign Out": "همه ي ارتباط ها قطع شد", - "Home Page": "آغازه", - "Are you want to go to this site": "آیا می خواهید به این سایت بروید؟", - "MyLocation": "محل من", - "my location": "محل من", - "Target": "يه هدف.", - "Update": "نوسازي , نوپردازي , نوين گري", - "You Should choose rate figure": "باید عدد صحیح را انتخاب کنید", - "Login Captin": "ورود به سیستم", - "Register Captin": "ثبت نام کاپیتان", - "Send Verfication Code": "ارسال کد تایید", - "End Ride": "سواری", - "Minute": "حساسيت", - "Go to passenger Location now": "اکنون به وب سایت سوارکار بروید", - "Duration of the Ride is": "مدت انطلق است", - "Distance of the Ride is": "مسافت پیاده روی است", - "Name of the Passenger is": "نام مسافر است", - "Hello this is Captain": "سلام من کاپیتان هستم", - "Start the Ride": "انطلق را آغاز کنید", - "Please Wait If passenger want To Cancel!": - "لطفا صبر کنید اگر مسافر می خواهد لغو کند!", - "Total Duration:": "کل مدت زمان:", - "Active Duration:": "مدت زمان گام فعال", - "Waiting for Captin ...": "منتظر کاپیتان...", - "Age is": ". بزرگ شده", - "Rating is": "ارزیابی است", - "to arrive you.": "برای رسیدن به تو", - "Order History": "سابقه سفارش را ثبت کنید", - "My Wallet": "کيفم", - "Tariff": "تعرفه", - "Settings": "GnomeMeeting", - "Feed Back": "واکنش ها", - "Promos": "تبلیغات", - "Please enter a valid 16-digit card number": - "لطفاً یک شماره سفارش خرید معتبر وارد کنید.", - "Add Phone": "تلفن", - "Please enter a phone number": "لطفا شماره تلفن را وارد کنید", - "You dont Add Emergency Phone Yet!": - "هنوز تلفن اضطراری اضافه نکرده‌اید!", - "You will arrive to your destination after": - "هنوز به مقصد خواهی رسید", - "You can cancel Ride now": "اکنون می توانید انطلق را لغو کنید", - "You Can cancel Ride After Captain did not come in the time": - "بعد از اینکه کاپیتان به موقع نرسید می توانید انطلق را لغو کنید", - "If you in Car Now. Press Start The Ride": - "اگر الان در ماشین هستید. روی شروع انطلق کلیک کنید", - "You Dont Have Any amount in": "شما هیچ مبلغی ندارید", - "Wallet!": - "کيسه , جيب , کيسه پول , کيف پول , پول , دارايي , وجوهات خزانه , غنچه کردن , جمع کردن , پول دزديدن , جيب بري کردن , کيف جيبي", - "You Have": "تو داري مياي ؟", - "Save Credit Card": "کارت اعتباری را نگه دارید", - "Show Promos": "مشاهده پیشنهادات", - "10 and get 4% discount": "10 و 4 درصد تخفیف بگیرید", - "20 and get 6% discount": "20 و 6 درصد تخفیف بگیرید", - "40 and get 8% discount": "40 و 8 درصد تخفیف بگیرید", - "100 and get 11% discount": "100 و 11 درصد تخفیف بگیرید", - "Pay with Your PayPal": "با پی پال پرداخت کنید", - "You will choose one of above !": - "شما یکی از گزینه های بالا را انتخاب خواهید کرد!", - "Cancel": "& لغو‌", - "Delete My Account": "Delete My Account", - "Edit Profile": "‏پروفایل؟", - "Name": "اسم...", - "Update Gender": "به روز رسانی جنسیت", - "Education": "-آموزش و پرورش .", - "Update Education": "نوسازی آموزش و پرورش", - "Employment Type": "کارم ؟", - "SOS Phone": "تلفنچي", - "High School Diploma": "مدرک دبیرستان", - "Associate Degree": "مدرک دیپلم مشترک", - "Bachelor's Degree": "-اون دکتراست .", - "Master's Degree": ". استاد", - "Doctoral Degree": "و دکترات", - "Promos For today": "تبلیغات امروز", - "Copy this Promo to use it in your Ride!": - "این تبلیغ را برای استفاده در انطلق خود کپی کنید!", - "To change some Settings": "برای تغییر برخی تنظیمات", - "To change Language the App": "برای تغییر زبان برنامه", - "Order Request Page": "صفحه درخواست سفارش", - "Rouats of Trip": "! \" تريپ \"", - "Passenger Name is": "يک مسافر", - "Total From Passenger is": "مجموع مسافر است", - "Duration To Passenger is": "مدت زمان به مسافر", - "Distance To Passenger is": "فاصله تا مسافر", - "Total For You is": "مجموع برای شما است", - "Distance is": "فاصله هستيم", - "KM": "کيلومتر , هزارمتر", - "Duration of Trip is": "مدت پرواز است", - "Minutes": "صورت جلسه , خلا صه مذاکرات", - "Apply Order": "درخواست درخواست", - "Refuse Order": "که درخواست رد شد", - "Rate Captain": "امتیاز کاپیتان", - "Enter your Note": "یادداشت خود را وارد کنید", - "Type something...": "چیزی بنویسید...", - "Submit rating": "ارزیابی ارائه کنید", - "Rate Passenger": "رتبه سوار", - "Ride Summary": "خلاصه انطلق", - "welcome_message": "درج Hello World", - "app_description": "& پیاده‌سازی‌", - "get_to_destination": "مقصد کار انجامی", - "get_a_ride": "گمشو...", - "safe_and_comfortable": "و خيلي هم راحته", - "committed_to_safety": "متعهد به ایمنی", - "Driver Applied the Ride for You": - "یک راننده انطلق را برای شما انجام داد", - "Show latest promo": "نمایش آخرین تبلیغات", - "Cancel Trip": "لغو انطلق", - "Passenger Cancel Trip": "مسافر پرواز را لغو کرد", - "Please stay on the picked point.": "لطفا روی نقطه بمانید", - "Trip is Begin": "برنامه انطلق , خط سير , انطلقنامه", - "Hi ,I will go now": "هی الان میرم", - "Passenger come to you": "مسافر به سمت شما می آید", - "Hi ,I Arrive your site": "سلام من به سایت شما رسیدم", - "Driver Finish Trip": "انطلق برای راننده به پایان می رسد", - "you will pay to Driver": "شما به راننده پول می دهید", - "Driver Cancel Your Trip": "انطلقت را کنسل کن راننده", - "you will pay to Driver you will be pay the cost of driver time look to your Intaleq Wallet": - "شما به راننده پرداخت می کنید هزینه وقت راننده را می پردازید به کیف پول خود Intaleq نگاه کنید", - "I will go now": "دود باید برم باید برم", - "You Have Tips": "نکته؟", - "tips": "مدد", - "Total is": "پانزده نفر شدن", - "No,I want": "من از اونا نيستم", - "Your fee is": "هزینه های شما هستند", - "Do you want to pay Tips for this Driver": - "آیا می خواهید به این راننده انعام بدهید؟", - "Tip is": "نکته من", - "Camera Access Denied.": "دسترسی به دوربین ممنوع است.", - "Open Settings": "تنظیمات...", - "GPS Required Allow !.": "GPS باید فعال باشد!", - "Your Account is Deleted": "حساب شما حذف شده است", - "Are you sure to delete your account?": - "آیا مطمئن هستید که می خواهید اکانت خود را حذف کنید؟", - "Your data will be erased after 2 weeks": - "اطلاعات شما پس از دو هفته پاک می شود", - "And you will can't return to use app after 1 month": - "بعد از یک ماه می توانید به استفاده از برنامه بازگردید", - "Enter Your First Name": "لطفاً نام و نام خانوادگی‌تان را وارد کنید:", - "Are you Sure to LogOut?": - "آیا مطمئن هستید که از سیستم خارج می شوید؟", - "Email Wrong": "پست الکترونیکی", - "Email you inserted is Wrong.": "ایمیلی که وارد کردید نادرست است.", - "You have finished all times": "نميخوام که تو ...", - "if you want help you can email us here": - "اگر مایل به کمک هستید می توانید از اینجا به ما ایمیل بزنید", - "Thanks": "ممنون.", - "Email Us": "یک ایمیل برای ما بفرستید", - "I cant register in your app in face detection": - "من نمی توانم با استفاده از تشخیص چهره در برنامه شما ثبت نام کنم", - "Hi": - "هالو (کلمه اي که در گفتگوي تلفني براي صدا کردن طرف بکار ميرود) , سلا م کردن , خوشامد , خوشامد گفتن , پذيرايي کردن , خوشايند", - "No face detected": "هیچ چهره ای آشکار نشد", - "Image detecting result is": "نتیجه تشخیص تصویر:", - "from 3 times Take Attention": "بیش از 3 بار توجه خود را جلب کنید", - "Be sure for take accurate images please": - "حتما عکس های دقیق بگیرید لطفا", - "You have": "تو داري مياي ؟", - "image verified": "عکس محضری است", - "Next": "بعد", - "There is no help Question here": "در اینجا هیچ سوال کمکی وجود ندارد", - "Call End": "تماس تمام می شود", - "You dont have Points": "-شليک نکنيد ! - شما اجازه‌ي ورود ...", - "You Are Stopped For this Day !": "شما برای یک روز تعلیق هستید!", - "You must be charge your Account": "شما باید حساب خود را شارژ کنید", - "You Refused 3 Rides this Day that is the reason": - "من امروز 3 پرواز را رد کردم و دلیلش این است", - "See you Tomorrow!": "فردا می بینمت!", - "Recharge my Account": "حسابم را شارژ کن", - "Ok , See you Tomorrow": "باشه فردا میبینمت", - "You are Stopped": "شما خاموش هستید", - "Connected": "پيوسته , روان , خط شکسته", - "Not Connected": "برون خطي", - "Your are far from passenger location": "شما از سایت مسافر دور هستید", - "go to your passenger location before": - "قبلاً به وب سایت مسافر خود بروید", - "Passenger cancel trip": "مسافر پرواز را کنسل کرد", - "You will get cost of your work for this trip": - "هزینه کار خود را برای این انطلق دریافت خواهید کرد", - "in your wallet": "تو کيف پولته.", - "you gain": "تو بردي", - "Order Cancelled": "بسه ديگه.", - "Order Cancelled by Passenger": "سفارش توسط مسافر لغو شد", - "Success": "بدست آوردن بيشترش", - "Feedback data saved successfully": - "داده های ارزیابی با موفقیت ذخیره شد", - "No Promo for today .": "امروز تبلیغاتی وجود ندارد", - "Select your destination": "مقصد خود را انتخاب کنید", - "Search for your Start point": "نقطه شروع خود را پیدا کنید", - "Search for waypoint": "نقطه راه را پیدا کنید", - "Current Location": "موقعيت فعلي: اسکدارسکا32", - "Add Location 1": "محل:% 1", - "You must Verify email !.": "بررسی & نامه‌", - "Cropper": "دروگر", - "Saved Sucssefully": "با موفقیت ذخیره شد", - "Select Date": "انتخاب یک تاریخ جدید", - "Birth Date": "- تاريخ تولد", - "Ok": - "صحيح است , خوب , بسيار خوب , تصويب کردن , موافقت کردن , اجازه , تصويب , چشمه , جوهردان , دوات , ببالا فوران کردن , روامدن اب ومايع , درسطح امدن وجاري شدن , تندرست , سالم , راحت , بسيارخوب , به چشم , تماما , تمام وکمال , بدون اشکال , اوه , خيلي خوب", - "the 500 points equal 30 JOD": "500 امتیاز معادل 30 دینار اردن است", - "the 500 points equal 30 JOD for you": - "500 امتیاز برای شما معادل 30 دینار اردن است", - "token updated": "کد به روز شده است", - "Add Location 2": "اضافه کردن مکان 2", - "Add Location 3": "اضافه کردن مکان 3", - "Add Location 4": "سایت را اضافه کنید 4", - "Waiting for your location": "منتظر مکان شما هستیم", - "Search for your destination": "مقصد خود را پیدا کنید", - "Hi! This is": "خوش‌آمدید اين", - "I am using": "من استفاده می کنم", - "to ride with": "برای سوار شدن با", - "as the driver.": "به عنوان راننده", - "is driving a": "اون رانندگي ميکنه", - "with license plate": "داشتن پلاک", - "I am currently located at": "من در حال حاضر در", - "Please go to Car now": "لطفا همین الان برید سراغ ماشین", - "If you need to reach me, please contact the driver directly at": - "اگر نیاز به تماس با من دارید، لطفاً مستقیماً با راننده تماس بگیرید", - "No Car or Driver Found in your area.": - "هیچ ماشین یا راننده ای در منطقه شما پیدا نشد.", - "Please Try anther time": "سعی مجدد", - "There no Driver Aplly your order sorry for that": - "هیچ راننده ای وجود ندارد که بتواند درخواست شما را برآورده کند، متأسفیم.", - "Trip Cancelled": "پرواز لغو شده است", - "The Driver Will be in your location soon .": - "راننده به زودی در محل شما خواهد بود.", - "The distance less than 500 meter.": "فاصله کمتر از 500 متر است.", - "Promo End !": "پیشنهاد به پایان می رسد!", - "There is no notification yet": "هنوز اطلاعیه ای وجود ندارد", - "Use Touch ID or Face ID to confirm payment": - "برای تأیید پرداخت از Touch ID یا Face ID استفاده کنید", - "Contact us for any questions on your order.": - "برای هرگونه سوال در مورد سفارش خود با ما تماس بگیرید.", - "Pyament Cancelled .": "پرداخت لغو شده است.", - "type here": "نوشتن", - "Scan Driver License": "گواهينامه؟", - "Please put your licence in these border": - "لطفا مجوز خود را در این محدوده قرار دهید", - "Camera not initialized yet": "دوربین هنوز پیکربندی نشده است", - "Take Image": "- # I need direction, ah, please #", - "AI Page": "صفحه هوش مصنوعی", - "Take Picture Of ID Card": "از کارت شناسایی خود عکس بگیرید", - "Take Picture Of Driver License Card": - "از کارت گواهینامه رانندگی خود عکس بگیرید.", - "We are process picture please wait": - "ما در حال پردازش تصاویر هستیم، لطفا صبر کنید.", - "There is no data yet.": "هنوز هیچ داده ای وجود ندارد.", - "Name :": "اسم...", - "Drivers License Class:": "دسته گواهینامه رانندگی:", - "Document Number:": "شماره سند:", - "Address:": "آدرس:", - "Height:": "قد، متوسط.", - "Expiry Date:": "انقضا:", - "Date of Birth:": "تولد: @ title: group", - "You can't continue with us .": "‫ - می تونی ادامه بدی.", - "You should renew Driver license": - "باید گواهینامه رانندگی خود را تمدید کنید", - "Detect Your Face": "اين جديده", - "Go to next step": "به مرحله بعد برو", - "scan Car License.": "معاینه گواهینامه خودرو.", - "Name in arabic": "نام به عربی", - "Drivers License Class": "گواهينامه؟", - "Date of Birth": "- تاريخ تولد", - "Age": "سالخوردگی", - "Lets check Car license": "بیایید گواهینامه ماشین را بررسی کنیم", - "Car Kind": "چه جور ماشینی ؟", - "Car Plate": "پلاک اتومبیل", - "Lets check License Back Face": - "اجازه دهید مجوز سمت عقب را بررسی کنیم", - "Car License Card": "کارت گواهینامه خودرو", - "No image selected yet": "هنوز هیچ تصویری انتخاب نشده است", - "Made :": - "ساختن , بوجود اوردن , درست کردن , تصنيف کردن , خلق کردن , باعث شدن , وادار يامجبور کردن , تاسيس کردن , گاييدن , ساختمان , ساخت , سرشت , نظير , شبيه", - "model :": "مدل:", - "VIN :": "شماره ساختار:", - "year :": "!", - "ُExpire Date": "انقضا:", - "Login Driver": "ورود به سیستم", - "Password must br at least 6 character.": - "رمز عبور باید حداقل 6 کاراکتر باشد.", - "if you don't have account": "اگه اشکالي نداره", - "Here recorded trips audio": "در اینجا ضبط های صوتی انطلق است", - "Register as Driver": "به عنوان شریک راننده ثبت نام کنید", - "Privacy Notice": "اطلاعیه حفظ حریم خصوصی", - "By selecting \"I Agree\" below, I have reviewed and agree to the Terms of Use and acknowledge the": - "با انتخاب «موافقم» در زیر، شرایط و ضوابط را بررسی کرده، با آن موافقم و تأیید می کنم.", - ". I am at least 18 years of age.": ". من حداقل 18 سال دارم.", - "Log Out Page": "همه ي ارتباط ها قطع شد", - "Log Off": "خروج CVS", - "Register Driver": "راننده...\"راس وبر\"...", - "Verify Email For Driver": "ایمیل راننده را چک کنید", - "Admin DashBoard": "کنترل پنل مدیریت", - "Your name": "اسمت", - "your ride is applied": "انطلق شما اعمال شده است", - "Your password": "اسم رمز شما تغییر کرده است.", - "LE": "پوند مصر", - "JOD": "دینار اردن", - "m": "مستندسازی از", - "We search nearst Driver to you": - "ما به دنبال نزدیکترین شریک راننده به شما هستیم", - "please wait till driver accept your order": - "لطفا منتظر بمانید تا راننده درخواست شما را بپذیرد", - "No accepted orders? Try raising your trip fee to attract riders.": - "هیچ درخواستی پذیرفته نشد؟ سعی کنید هزینه پرواز خود را برای جذب مسافر افزایش دهید.", - "You should select one": "شما باید یکی را انتخاب کنید", - "The driver accept your order for": - "راننده در عوض درخواست شما را پذیرفت", - "Increase Fee": "هزینه ها را افزایش دهید", - "No, thanks": "نه، متشکرم.", - "The driver on your way": "راننده شما در راه است", - "Total price from": "قیمت کل از", - "Order Details Intaleq": "جزئیات درخواست:", - "Order Applied": "درخواست اعمال شده است", - "accepted your order": "درخواست شما پذیرفته شد", - "We regret to inform you that another driver has accepted this order.": - "متأسفانه به شما اطلاع می دهیم که شریک راننده دیگری این درخواست را پذیرفته است.", - "Selected file:": "باز کردن پرونده‌ای موجود", - "Your trip cost is": "هزینه انطلق شما", - "this will delete all files from your device": - "با این کار تمام فایل ها از دستگاه شما حذف می شود", - "you have a negative balance of": "تراز منفی دارید", - "in your": "که ما به تو ايمان نداشته باشيم.", - "Exclusive offers and discounts always with the Intaleq app": - "همیشه پیشنهادات و تخفیفات منحصر به فرد با اپلیکیشن انطلق", - "Please go to Car Driver": "لطفا به سراغ راننده ماشین بروید", - "wallet due to a previous trip.": "کیف پول به دلیل انطلق قبلی.", - "Submit Question": "ارسال سوال", - "Please enter your Question.": "لطفا سوال خود را وارد کنید", - "Help Details": "جزئیات راهنما", - "No trip yet found": "نبض اشعه گاما", - "No Response yet.": "هنوز پاسخی داده نشده است.", - "You Earn today is": "- ام، امروز ...", - "You Have in": "شما آن را در", - "Total points is": "مجموع امتیاز است", - "Total Connection Duration:": "کل مدت تماس:", - "H and": "H و", - "Passenger name :": "يک مسافر", - "Cost Of Trip IS": "هزینه انطلق است", - "Arrival time": "دستيابي پذير", - "arrival time to reach your point": "زمان رسیدن برای رسیدن به مقصد", - "For Intaleq and Delivery trips, the price is calculated dynamically. For Comfort trips, the price is based on time and distance": - "برای انطلقهای سریع و تحویل، قیمت به صورت پویا محاسبه می شود. در مورد انطلقهای راحت، قیمت بستگی به زمان و مسافت دارد.", - "Hello this is Driver": "سلام من راننده شما هستم", - "Is the Passenger in your Car ?": "آیا مسافر در ماشین شما است؟", - "Please wait for the passenger to enter the car before starting the trip.": - "لطفا قبل از شروع انطلق منتظر ورود مسافر به وسیله نقلیه باشید.", - "No ,still Waiting.": "نه من همچنان منتظرت هستم", - "I arrive you": "\"سلام، مامور \"دانم", - "I Arrive your site": "\"سلام، مامور \"دانم", - "You are not in near to passenger location": - "شما نزدیک محل مسافر نیستید", - "please go to picker location exactly": - "لطفا به محل دقیق انتخابی بروید", - "You Can Cancel Trip And get Cost of Trip From": - "می توانید انطلق را کنسل کنید و هزینه انطلق را از اینجا دریافت کنید", - "Are you sure to cancel?": "آیا مطمئن هستید که می خواهید لغو کنید؟", - "Yes": "بله , بلي , اري , بلي گفتن", - "Insert Emergincy Number": "ـ شماره تلفن آمبولانس", - "Best choice for comfort car and flexible route and stops point": - "بهترین انتخاب برای ماشین راحت، مسیر انعطاف پذیر و نقطه توقف", - "Insert": "درج", - "This is for delivery or a motorcycle.": - "این برای تحویل یا موتور است.", - "This trip goes directly from your starting point to your destination for a fixed price. The driver must follow the planned route": - "این سواری مستقیماً از نقطه شروع شما به مقصد شما با قیمت ثابت می رود. راننده باید مسیر برنامه ریزی شده را دنبال کند", - "You can decline a request without any cost": - "شما می توانید درخواست را بدون هیچ هزینه ای رد کنید", - "Perfect for adventure seekers who want to experience something new and exciting": - "ایده آل برای جویندگان ماجراجویی که می خواهند چیز جدید و هیجان انگیزی را امتحان کنند", - "My current location is:": "مکان فعلی من این است:", - "and I have a trip on": "و من یک انطلق به داخل دارم", - "App with Passenger": "درخواست با مسافر", - "You will be pay the cost to driver or we will get it from you on next trip": - "هزینه به راننده شما پرداخت می شود یا در انطلق بعدی آن را از شما دریافت می کنیم", - "Trip has Steps": "انطلق مراحلی دارد", - "Distance from Passenger to destination is": - "فاصله مسافر تا مقصد است", - "price is": "قیمت است", - "This ride type does not allow changes to the destination or additional stops": - "این نوع انطلق اجازه تغییر مقصد یا توقف های اضافی را نمی دهد", - "This price may be changed": "این قیمت ممکن است تغییر کند", - "No SIM card, no problem! Call your driver directly through our app. We use advanced technology to ensure your privacy.": - "سیم کارت نداره مشکلی نیست! مستقیماً از طریق برنامه ما با راننده خود تماس بگیرید. ما از فناوری پیشرفته برای اطمینان از حریم خصوصی شما استفاده می کنیم.", - "This ride type allows changes, but the price may increase": - "این نوع انطلق اجازه تغییرات را می دهد، اما ممکن است قیمت افزایش یابد", - "message From passenger": "پیام مسافر", - "Select one message": "حتی یدونه؟", - "My location is correct. You can search for me using the navigation app": - "مکان من درست است می توانید با استفاده از برنامه ناوبری من را جستجو کنید", - "I'm waiting for you": ".فکر کنم منتظر شماست", - "Hello, I'm at the agreed-upon location": - "سلام من در محل مورد توافق هستم", - "We noticed the Intaleq is exceeding 100 km/h. Please slow down for your safety. If you feel unsafe, you can share your trip details with a contact or call the police using the red SOS button.": - "ما متوجه شدیم که سرعت از 100 کیلومتر در ساعت فراتر رفته است. لطفا برای ایمنی خود سرعت خود را کم کنید. اگر احساس ناامنی می‌کنید، می‌توانید جزئیات پرواز خود را با یک مخاطب به اشتراک بگذارید یا با استفاده از دکمه قرمز خطر با پلیس تماس بگیرید.", - "Warning: Intaleqing detected!": "هشدار: سرعت بیش از حد شناسایی شد!", - "Please help! Contact me as soon as possible.": - "لطفأ ، کمکم کن. در اسرع وقت با من تماس بگیرید.", - "Share Trip Details": "جزئیات انطلق را به اشتراک بگذارید", - "Car Plate is": "پلاک اتومبیل", - "the 3000 points equal 3000 L.E for you": - "3000 امتیاز برای شما معادل 3000 پوند مصر است", - "So go and gain your money": "برو جلو و پولت را در بیاور", - "the 3000 points equal 3000 L.E": - "3000 امتیاز معادل 3000 پوند مصر است", - "The payment was not approved. Please try again.": - "پرداخت تایید نشد سعی مجدد", - "Payment Failed": "پرداخت ناموفق", - "Error": "اشتباه ميكني", - "An error occurred during the payment process.": - "خطایی در فرآیند پرداخت رخ داد.", - "The payment was approved.": "پرداخت تایید شده است.", - "Payment Successful": "پرداخت با موفقیت انجام شد", - "No ride found yet": "نبض اشعه گاما", - "Accept Order": "بسه ديگه.", - "reject your order.": "درخواست شما رو رد کنيم... .", - "Bottom Bar Example": "نمونه ای از نوار پایین", - "Driver phone": "تلفن شریک راننده", - "Statistics": "آمارها", - "Origin": ".ابتداييهستن. ..", - "Destination": "به مقصد", - "Driver Name": "راننده...\"راس وبر\"...", - "Driver Car Plate": "پلاک ماشین راننده", - "Available for rides": "برای انطلقها موجود است", - "Scan Id": "بررسی هویت", - "Camera not initilaized yet": "دوربین هنوز پیکربندی نشده است", - "Scan ID MklGoogle": "بررسی هویت MklGoogle", - "Language": "زبان", - "Jordan": "اردن", - "USA": "- ايالات متحده -", - "Egypt": "کشور مصر , مصر , پافشار , پاپي", - "Turkey": "ترکیه", - "Saudi Arabia": "عربستان سعودی", - "Qatar": "تقطيرشدن , عرق گرفتن از , چکاندن", - "Bahrain": "بحرین", - "Kuwait": "کویت", - "But you have a negative salary of": "اما شما حقوق منفی از", - "Promo Code": "کد تبلیغاتی", - "Your trip distance is": "مسافت انطلق شما است", - "Enter promo code": "کد تبلیغاتی را وارد کنید", - "You have promo!": "شما یک ترفیع دارید!", - "Cost Duration": "هزينه ؟", - "Duration is": "مدت زمان است", - "Leave": - "واگذار کردن , تسليم کردن , صرفنظرکردن از , ول کردن , ترک , رها کردن , انکار کردن , ترک کردن , چشم پوشيدن , سرزنش يا متهم کردن , چشم پوشيدن از , از قانون مستثني کردن", - "Join": "متصل", - "You Should be select reason.": "باید دلیل انتخاب کنی", - "\$": "\$", - "Waiting for Driver ...": "منتظر راننده ام...", - "Latest Recent Trip": "آخرین انطلق", - "from your list": "از لیست شما", - "Do you want to change Work location": - "آیا می خواهید محل کار را تغییر دهید؟", - "Do you want to change Home location": - "آیا می خواهید مکان خانه را تغییر دهید؟", - "We Are Sorry That we dont have cars in your Location!": - "متاسفیم که خودروها در محل شما در دسترس نیستند!", - "Choose from Map": "از نقشه انتخاب کنید", - "Pick your ride location on the map - Tap to confirm": - "مکان سواری خود را روی نقشه انتخاب کنید - برای تأیید ضربه بزنید", - "To Work": "اوه درسته ، پرونده ...", - "Are you want to go this site": "آیا می خواهید به این سایت بروید؟", - "Closest & Cheapest": "نزدیک ترین و ارزان ترین", - "Work Saved": "نگهداري , حفظ , محافظت , جلوگيري , حراست", - "Intaleq is the ride-hailing app that is safe, reliable, and accessible.": - "Intaleq یک برنامه سواری ایمن، قابل اعتماد و در دسترس است.", - "With Intaleq, you can get a ride to your destination in minutes.": - "با Safar، می توانید در عرض چند دقیقه به مقصد خود برسید.", - "Intaleq is committed to safety, and all of our captains are carefully screened and background checked.": - "انطلق به ایمنی متعهد است و همه رهبران ما به دقت مورد بررسی قرار می گیرند و سوابق جنایی خود را بررسی می کنند.", - "To Home": "آغازه", - "Home Saved": "نگهداري , حفظ , محافظت , جلوگيري , حراست", - "Destination selected": "مقصد مشخص شد - !", - "Now select start pick": "اکنون Start Selection را انتخاب کنید", - "Pick from map": "از نقشه انتخاب کنید", - "Click here point": "اينجا كليك كنيد", - "No Car in your site. Sorry!": - "هیچ ماشینی در محل شما وجود ندارد. ببخشيد", - "Nearest Car for you about": "نزدیکترین ماشین به شما تقریبا", - "N/A": "بدون اطلاعات", - "From :": - "از , بواسطه , درنتيجه , از روي , مطابق , از پيش , قطع , خاموش , ملغي , پرت , دور , نسبت به , تا , که , تا اينکه , بجز , غير از , کي , چه شخصي , چه اشخاصي , چه کسي , هرکه , هر انکه , هر انکس , هرکسي که , چه کسي را , به چه کسي , کسيکه , ان کسي که", - "Get Details of Trip": "دریافت جزئیات پرواز", - "If you want add stop click here": - "اگر می خواهید توقف اضافه کنید، اینجا را کلیک کنید", - "Driver": - "راننده ماشين , شوفر , رانندگي کردن , محرک , راننده , ماشين سوار", - "Where you want go": - "ميتوني اين قضيه رو باور کني؟ فکر ميکني کجا بخواي بري؟", - "My Card": "کارتم", - "Start Record": "درحال شروع برای ضبط", - "Wallet": - "کيسه , جيب , کيسه پول , کيف پول , پول , دارايي , وجوهات خزانه , غنچه کردن , جمع کردن , پول دزديدن , جيب بري کردن , کيف جيبي", - "History of Trip": "تاریخ انطلق", - "Helping Center": "مرکز کمک KDE", - "Record saved": "رکورد ذخیره شده است", - "Trips recorded": "پروازهای ثبت شده", - "Select Your Country": - "گزيدن , انتخاب کردن , خواستن , پسنديدن , برگزيدن", - "To ensure you receive the most accurate information for your location, please select your country below. This will help tailor the app experience and content to your country.": - "برای اطمینان از دریافت دقیق ترین اطلاعات برای موقعیت مکانی خود، لطفاً کشور خود را در زیر انتخاب کنید. این به شخصی‌سازی تجربه برنامه و محتوا برای کشورتان کمک می‌کند.", - "Are you sure to delete recorded files": - "آیا مطمئن هستید که فایل های ضبط شده را حذف می کنید؟", - "Select recorded trip": "یک انطلق ثبت شده را انتخاب کنید", - "Card Number": "بزن!", - "Hi, Where to": "سلام به کجا", - "Pick your destination from Map": - "مقصد خود را از روی نقشه انتخاب کنید", - "Add Stops": "مکث اضافه کنید", - "Get Direction": "جهت را دریافت کنید", - "Add Location": "اضافه کردن مکان", - "Switch Rider": "تعویض مسافر", - "You will arrive to your destination after timer end.": - "پس از اتمام تایمر به مقصد خواهید رسید.", - "You can cancel trip": "می توانید انطلق را لغو کنید", - "The driver waitting you in picked location .": - "راننده شما در محل تعیین شده منتظر شماست.", - "Pay with Your": "پرداخت با استفاده از", - "Pay with Credit Card": "پرداخت با کارت اعتباری", - "Payment History": "سابقه پرداخت", - "Show Promos to Charge": "نمایش تبلیغات حمل و نقل", - "Point": - "نقطه , خال , لکه , نقطه دار کردن , نوک , سر , نکته , ماده , اصل , موضوع , جهت , درجه , امتياز بازي , نمره درس , پوان , هدف , مسير , مرحله , قله , پايان , تيزکردن , گوشه دارکردن , نوکدار کردن , نوک گذاشتن (به) , خاطر نشان کردن , نشان دادن , متوجه ساختن , نقطه گذاري کردن , لک , لکه يا خال ميوه , ذره , لکه دار کردن , خالدار کردن", - "Driver Balance": "کیف پول راننده", - "Total Points is": "مجموع امتیاز است", - "Total Budget from trips is": "بودجه کل انطلقها می باشد", - "Total Amount:": "مبلغ کل:", - "Total Budget from trips by": "بودجه کل انطلقها توسط", - "Credit card is": "کارت بانکي سيهاون همراهمه", - "This amount for all trip I get from Passengers": - "این مبلغ برای تمام انطلقهایی است که از مسافران می گیرم", - "Pay from my budget": "من از بودجه ام پرداخت می کنم", - "This amount for all trip I get from Passengers and Collected For me in": - "این مبلغ برای تمام سواری هایی است که از مسافران می گیرم و برایم جمع آوری شده است", - "You can buy points from your budget": - "شما می توانید از بودجه خود امتیاز خریداری کنید", - "insert amount": "همش اونجاست", - "You can buy Points to let you online": - "می توانید امتیازهایی را خریداری کنید تا بتوانید به صورت آنلاین وارد شوید", - "by this list below": "از طریق این لیست زیر", - "Create Wallet to receive your money": - "برای دریافت وجوه خود یک کیف پول ایجاد کنید", - "Enter your feedback here": "بازخورد خود را اینجا وارد کنید", - "Please enter your feedback.": "لطفا متن بازخورد خود را وارد کنید", - "Feedback": "فعال‌سازی & راه‌اندازی باز‌خورد", - "Click here to Show it in Map": - "برای مشاهده روی نقشه اینجا را کلیک کنید", - "Canceled": "مطمئن باش اينطور نميشه", - "Type your Email": "ايميل تو رو چک ميکنم", - "No I want": "من از اونا نيستم", - "Email is": "پست الکترونیکی", - "Phone Number is": "شماره تلفن", - "Date of Birth is": "- تاريخ تولد", - "Sex is": "جنسیت است", - "Car Details": "جزئیات خودرو", - "VIN is": "رونوشت skeleton", - "Color is": "رنگ است", - "Make is": "ساخته شده است", - "Model is": "مدل از:", - "Year is": "دنار", - "Edit Your data": "داده های خود را ویرایش کنید", - "write vin for your car": "شماره شاسی ماشین خود را وارد کنید", - "VIN": "داريم شماره بدنه ماشينشون رو رديابي ميکنيم", - "write Color for your car": "رنگ ماشین خود را وارد کنید", - "write Make for your car": "مدل ماشین خود را بنویسید", - "write Model for your car": "مدل ماشین خود را وارد کنید", - "write Year for your car": "سال ماشین خود را وارد کنید", - "write Expiration Date for your car": - "تاریخ انقضای وسیله نقلیه خود را وارد کنید", - "Tariffs": "تعاریف", - "Minimum fare": "حاشیه‌ها:", - "Maximum fare": - "براورد کردن , تقويم کردن , قيمت کردن , مطلع کردن , اگاهي دادن", - "Flag-down fee": "هزینه های خرابی", - "Including Tax": "از جمله مالیات", - "BookingFee": "زندان؟ چطور فکر...", - "Morning": "صبح بخير.", - "from 07:30 till 10:30 (Thursday, Friday, Saturday, Monday)": - "از ساعت 07:30 تا 10:30 (پنجشنبه، جمعه، شنبه، دوشنبه)", - "Evening": "غروب , سرشب , شب هنگام , شبانگاه", - "from 12:00 till 15:00 (Thursday, Friday, Saturday, Monday)": - "از ساعت 12:00 الی 15:00 (پنجشنبه، جمعه، شنبه، دوشنبه)", - "Night": "شب بخير.", - "You have in account": "تو اکانت داری", - "Select Country": "کشور را انتخاب کنید", - "Ride Today :": "درخواست انطلق امروز:", - "After this period": "اون ميگذره", - "You can't cancel!": "نمیتونی", - "from 23:59 till 05:30": "از ساعت 23:59 تا 05:30", - "Rate Driver": "راننده...\"راس وبر\"...", - "Total Cost is": "کل هزینه است", - "Write note": "-يه يادداشت !", - "Time to arrive": "زمان مورد انتظار ورود", - "Ride Summaries": "خلاصه انطلق", - "Total Cost": "هزینه کل", - "Average of Hours of": "ساعتهای کاری", - "is ON for this month": "در حال اجرا برای این ماه", - "Days": "روز", - "Total Hours on month": "تعداد کل ساعت در ماه", - "Counts of Hours on days": "تعداد ساعات یک روز", - "OrderId": "بسه ديگه.", - "created time": "ایجادشده", - "Intaleq Over": "پاکو", - "I will slow down": "من سرعتم را کم می کنم", - "Map Passenger": "نقشه مسافر", - "Be Slowly": "آهسته برو", - "If you want to make Google Map App run directly when you apply order": - "اگر می خواهید برنامه Google Maps را مستقیماً هنگام اعمال فرمان راه اندازی کنید", - "You can change the language of the app": - "می توانید زبان برنامه را تغییر دهید", - "Your Budget less than needed": - "بودجه شما کمتر از مقدار مورد نیاز است", - "You can change the Country to get all features": - "می توانید کشور را برای دریافت همه ویژگی ها تغییر دهید", - "Change Country": "کشور را تغییر دهید" - }, - "zh": { - "Order": "订单", - "OrderVIP": "VIP订单", - "Cancel Trip": "取消行程", - "Passenger Cancel Trip": "乘客取消行程", - "VIP Order": "VIP订单", - "The driver accepted your trip": "司机接受了您的行程", - "message From passenger": "来自乘客的消息", - "Cancel": "取消", - "Trip Cancelled. The cost of the trip will be added to your wallet.": - "行程已取消。行程费用将添加到您的钱包。", - "token change": "令牌更改", - "face detect": "面部检测", - "Face Detection Result": "面部检测结果", - "similar": "相似", - "not similar": "不相似", - "Hi ,I will go now": "嗨,我现在就去", - "Passenger come to you": "乘客正在向您走来", - "Call Income": "来电", - "Call Income from Passenger": "来自乘客的来电", - "Criminal Document Required": "需要犯罪文件", - "You should have upload it .": "您应该上传它。", - "Call End": "通话结束", - "The order has been accepted by another driver.": "订单已被另一位司机接受。", - "The order Accepted by another Driver": "订单已被另一位司机接受", - "We regret to inform you that another driver has accepted this order.": - "我们很遗憾地通知您,另一位司机已接受此订单。", - "Driver Applied the Ride for You": "司机为您申请了行程", - "Applied": "已应用", - "Hi ,I Arrive your site": "嗨,我到达您的位置了", - "Please go to Car Driver": "请到汽车司机处", - "Ok I will go now.": "好的,我现在就去。", - "Accepted Ride": "接受行程", - "Driver Accepted the Ride for You": "司机为您接受了行程", - "Promo": "促销", - "Show latest promo": "显示最新促销", - "Trip Monitoring": "行程监控", - "Driver Is Going To Passenger": "司机正在前往乘客处", - "Please stay on the picked point.": "请留在选定的上车点。", - "message From Driver": "来自司机的消息", - "Trip is Begin": "行程开始", - "Cancel Trip from driver": "司机取消行程", - "We will look for a new driver.\nPlease wait.": "我们将寻找新的司机。\n请稍候。", - "The driver canceled your ride.": "司机取消了您的行程。", - "Driver Finish Trip": "司机完成行程", - "you will pay to Driver": "您将支付给司机", - "Don’t forget your personal belongings.": "不要忘记您的个人物品。", - "Please make sure you have all your personal belongings and that any remaining fare, if applicable, has been added to your wallet before leaving. Thank you for choosing the Intaleq app": - "请确保您带好所有个人物品,并在离开前将任何剩余费用(如果适用)添加到您的钱包中。感谢您选择Intaleq应用程序", - "Finish Monitor": "结束监控", - "Trip finished": "行程已完成", - "Call Income from Driver": "来自司机的来电", - "Driver Cancelled Your Trip": "司机取消了您的行程", - "you will pay to Driver you will be pay the cost of driver time look to your Intaleq Wallet": - "您将支付给司机,您将支付司机的时间成本,请查看您的Intaleq钱包", - "Order Applied": "订单已应用", - - //firebase - - "registration_date": "SignUpDate", - "expiration_date": "結束日期", - "rating_count": "評論數量", - "rating_driver": "職業駕駛評分", - "age": "年齡", - "vin": "車輛識別號碼", - "car_color": "顏色", - "car_plate": "車牌號碼", - "car_model": "汽車型號:", - "education": "教育", - "gender": "性別", - "birthdate": "出生日期", - "Approve Driver Documents": "核準職業駕駛文件", - "Total Budget is": "總預算", - "You will recieve code in sms message": "你會透過短訊收到驗證碼", - "Please enter": "請輸入", - "We need your phone number to contact you and to help you receive orders.": - "我們需要你的電話號碼聯絡你,並協助你接收訂單。", - "The full name on your criminal record does not match the one on your driver’s license. Please verify and provide the correct documents.": - "犯罪紀錄上的全名與駕駛執照上的姓名不符。請檢查並提供正確的文件。", - "The national number on your driver’s license does not match the one on your ID document. Please verify and provide the correct documents.": - "駕駛執照上的國民登記號碼與身分證件上的號碼不符。請檢查並提供正確的文件。", - "Capture an Image of Your Criminal Record": "拍攝犯罪紀錄的相片", - "IssueDate": "簽發日期", - "Capture an Image of Your car license front": "從正面拍攝你的汽車駕駛執照", - "Capture an Image of Your ID Document front": "從正面拍攝身分證件相片", - "NationalID": "國民登記號碼", - "FullName": "全名", - "InspectionResult": "檢查結果", - "Criminal Record": "犯罪紀錄", - "The email or phone number is already registered.": "電郵或電話號碼已登記。", - "To become a ride-sharing driver on the Intaleq app, you need to upload your driver's license, ID document, and car registration document. Our AI system will instantly review and verify their authenticity in just 2-3 minutes. If your documents are approved, you can start working as a driver on the Intaleq app. Please note, submitting fraudulent documents is a serious offense and may result in immediate termination and legal consequences.": - "若要透過Uber Travel App成為共乘職業駕駛,您需要上傳駕駛執照、身分證明文件和車輛登記文件。我們的人工智能系統將在2-3分鐘內立即審查並驗證其真實性。文件通過審核後,你便可透過Uber Travel App成為司機夥伴。請注意,提供偽造文件是嚴重違法行為,可能會導致立即終止和法律後果。", - "Documents check": "文件驗證", - "Driver's License": "駕駛執照", - "License Type": "授權類型", - "National Number": "國民身分證號碼:", - "Name (Arabic)": "姓名(阿拉伯文)", - "Name (English)": "英語", - "Address": "標題", - "Issue Date": "簽發日期", - "Expiry Date": "到期日期", - "License Categories": "許可證類別", - "driver_license": "駕駛執照", - "Capture an Image of Your Driver License": "請拍攝駕駛執照的相片", - "ID Documents Back": "身分證件外觀", - "National ID": "國民身分證", - "Occupation": "職業", - "Gender": "性別", - "Religion": "宗教", - "Marital Status": "婚姻狀況", - "Full Name (Marital)": "全名(配偶)", - "Expiration Date": "結束日期", - "Capture an Image of Your ID Document Back": "拍攝身份證明文件背面的相片", - "ID Documents Front": "身分證件正面", - "First Name": "名字", - "CardID": "拍攝身份證明文件背面的相片", - "Full Name": "全名", - "Vehicle Details Front": "正面車輛詳細資訊", - "Plate Number": "車牌號碼", - "Owner Name": "所有者姓名", - "Vehicle Details Back": "再次提供車輛詳細資訊", - "Make": "制作", - "Model": "汽車型號:", - "Year": "年", - "Chassis": "機箱", - "Color": "顏色", - "Displacement": "替代", - "Fuel": "燃料", - "Tax Expiry Date": "到期日期", - "Inspection Date": "考核日期", - "Capture an Image of Your car license back": "請再次拍攝車輛執照的相片", - "Capture an Image of Your Driver’s License": "請拍攝駕駛執照的相片", - "Sign in with Google for easier email and name entry": - "使用Google登入,輕鬆輸入電子郵件和姓名", - "You will choose allow all the time to be ready receive orders": - "您可以選擇隨時接受現成訂單", - "Welcome to Intaleq!": "歡迎來到Safar !", - "Get to your destination quickly and easily.": "輕鬆快捷地前往目的地。", - "Enjoy a safe and comfortable ride.": "享受安全舒適的行程。", - "Choose Language": "選擇語言", - "Login": "登錄", - "Pay with Wallet": "使用銀包付款", - "Invalid MPIN": "MPIN代碼無效", - "Invalid OTP": "無效的驗證碼", - "Enter your email address": "輸入您的電子郵件地址", - "Please enter Your Email.": "請輸入...", - "Enter your phone number": "輸入你的電話號碼", - "Please enter your phone number.": "請輸入您的電話號碼。", - "Please enter Your Password.": "輸入您的密碼", - "Submit": "提交", - "if you dont have account": "如果你沒有帳戶", - "Register": "馬德羅", - "Accept Ride's Terms & Review Privacy Notice": "接受行程條款並查看隱私權聲明", - "By selecting 'I Agree' below, I have reviewed and agree to the Terms of Use and acknowledge the Privacy Notice. I am at least 18 years of age.": - "在下方選擇「我同意」,即表示我已閱讀並同意使用條款,並確認隱私權聲明。我已年滿18歲。", - "I Agree": "同意", - "First name": "名字", - "Enter your first name": "輸入您的名字", - "Please enter your first name.": "請輸入您的姓名。", - "Last name": "姓氏", - "Enter your last name": "輸入姓氏", - "Please enter your last name.": "請輸入您的姓名。", - "City": "城市", - "Please enter your City.": "請輸入...", - "Male": "男性", - "Female": "女", - "Verify Email": "驗證電子郵件", - "We sent 5 digit to your Email provided": "我們已將5位數傳送至你提供的電郵", - "5 digit": "PIN碼( 5位數)", - "Send Verification Code": "驗證碼", - "Your Ride Duration is": "你的行程時間為", - "You will be thier in": "你會把它們放進去", - "You trip distance is": "你的行程距離為", - "Fee is": "費用為", - "To :": "Suoi To", - "Add Promo": "新增優惠", - "Confirm Selection": "確認選擇", - "distance is": "距離為", - "duration is": "持續時間為", - "I don't need a ride anymore": "我不再需要接載服務", - "I was just trying the application": "我只是想試試App", - "No driver accepted my request": "沒有職業駕駛接受我的訂單", - "I added the wrong pick-up/drop-off location": "你新增的上下車地點有誤", - "I don't have a reason": "我沒有理由", - "Other": "其他 ", - "Can we know why you want to cancel Ride ?": "請問您想取消行程的原因為何?", - "Cancel Ride": "取消!", - "Add Payment Method": "新增付款方式", - "Your Wallet balance is": "您的錢包餘額為", - "Ride Wallet": "行程錢包", - "Payment Method": "付款方式", - "Type here Place": "在此輸入地點", - "Are You sure to ride to": "您確定要搭乘前往", - "Confirm": "確認", - "Back": "返回", - "You are Delete": "您正在刪除", - "Deleted": "已刪除", - "You Dont Have Any places yet !": "您還沒有任何名額!", - "Favorite Places": "最愛的好去處", - "From : Current Location": "當前位置:", - "Where to": "在哪裡?", - "Notifications": "通知", - "Profile": "個人資料", - "Home": "首頁", - "My Cared": "MyCurt", - "Add Card": "新增卡片", - "Add Credit Card": "新增信用卡", - "Please enter the cardholder name": "請輸入持卡人姓名", - "Please enter the expiry date": "請輸入到期日", - "Please enter the CVV code": "請輸入卡片驗證碼", - "Go To Favorite Places": "前往「最愛好去處」", - "Go to this Target": "前往此目標", - "My Profile": "個人資料", - "Sign Out": "退出", - "Home Page": "首頁", - "Are you want to go to this site": "是否要前往此地點", - "MyLocation": "我的位置", - "my location": "我的位置", - "Target": "目的", - "Update": "更新", - "You Should choose rate figure": "您必須選擇正確的號碼", - "Login Captin": "登入隊長", - "Register Captin": "隊長登記", - "Send Verfication Code": "發送驗證碼", - "End Ride": "搭乘", - "Minute": "分", - "Go to passenger Location now": "立即前往乘客所在地點", - "Duration of the Ride is": "行程時間為", - "Distance of the Ride is": "行程距離為", - "Name of the Passenger is": "乘客的姓名是", - "Hello this is Captain": "你好,我是隊長", - "Start the Ride": "開始行程", - "Please Wait If passenger want To Cancel!": "如果乘客想取消行程,請稍候!", - "Total Duration:": "總持續時間:", - "Active Duration:": "作用中步驟持續時間", - "Waiting for Captin ...": "正在等候艦長…", - "Age is": "年齡為", - "Rating is": "評分為", - "to arrive you.": "與您聯絡。", - "Order History": "記錄訂單紀錄", - "My Wallet": "我的錢包", - "Tariff": "費率", - "Settings": "設定", - "Feed Back": "意見回饋", - "Promos": "額外獎勵", - "Please enter a valid 16-digit card number": "請輸入有效的訂單編號。", - "Add Phone": "致電", - "Please enter a phone number": "請輸入電話號碼", - "You dont Add Emergency Phone Yet!": "你尚未新增緊急電話!", - "You will arrive to your destination after": "你將於之後抵達目的地", - "You can cancel Ride now": "你現在可以取消行程", - "You Can cancel Ride After Captain did not come in the time": - "船長未及時抵達後,您可以取消行程", - "If you in Car Now. Press Start The Ride": "如果你現在在車上輕點「開始行程」", - "You Dont Have Any amount in": "您在沒有任何金額", - "Wallet!": "錢包!", - "You Have": "您有", - "Save Credit Card": "保留信用卡", - "Show Promos": "查看優惠", - "10 and get 4% discount": "10即享4%折扣", - "20 and get 6% discount": "20即享6%折扣", - "40 and get 8% discount": "40即享8%折扣", - "100 and get 11% discount": "100%折扣11%", - "Pay with Your PayPal": "使用PayPal付款", - "You will choose one of above !": "你將選擇上面的其中一個選項!", - "Cancel": "取消", - "Delete My Account": "刪除我的帳戶", - "Edit Profile": "編輯個人資料", - "Name": "名稱字體", - "Update Gender": "更新性別", - "Education": "教育", - "Update Education": "更新教育背景", - "Employment Type": "工作類型", - "SOS Phone": "SOS電話", - "High School Diploma": "高中文憑", - "Associate Degree": "聯合文憑學位", - "Bachelor's Degree": "學士學位", - "Master's Degree": "碩士學位", - "Doctoral Degree": "博士學位", - "Promos For today": "本日優惠", - "Copy this Promo to use it in your Ride!": "複製此優惠,以便在行程中使用!", - "To change some Settings": "若要變更部分設定", - "To change Language the App": "變更App語言的步驟", - "Order Request Page": "訂單申請頁面", - "Rouats of Trip": "拉瓦特之旅", - "Passenger Name is": "乘客姓名", - "Total From Passenger is": "乘客支付的總金額為", - "Duration To Passenger is": "距離乘客的持續時間", - "Distance To Passenger is": "與乘客的距離為", - "Total For You is": "你的總金額為", - "Distance is": "距離", - "KM": "公裏", - "Duration of Trip is": "行程時間為", - "Minutes": "分", - "Apply Order": "套用訂單", - "Refuse Order": "拒絕申請", - "Rate Captain": "隊長評分", - "Enter your Note": "輸入備註", - "Type something...": "寫點東西...", - "Submit rating": "提供評估", - "Rate Passenger": "乘客評分", - "Ride Summary": "旅程摘要", - "welcome_message": "歡迎訊息", - "app_description": "ApplicationDescription", - "get_to_destination": "抵達目的地", - "get_a_ride": "預約行程", - "safe_and_comfortable": "安全舒適", - "committed_to_safety": "致力保障安全", - "Driver Applied the Ride for You": "代您完成行程的職業駕駛", - "Show latest promo": "顯示最新優惠", - "Cancel Trip": "取消行程", - "Passenger Cancel Trip": "乘客取消行程", - "Please stay on the picked point.": "請停留在所選地點。", - "Trip is Begin": "旅程開始", - "Hi ,I will go now": "嗨,我現在就去", - "Passenger come to you": "乘客即將抵達", - "Hi ,I Arrive your site": ",您好:您已抵達所在地點。", - "Driver Finish Trip": "職業駕駛行程結束", - "you will pay to Driver": "您將向職業駕駛付款", - "Driver Cancel Your Trip": "司機夥伴,請取消行程。", - "you will pay to Driver you will be pay the cost of driver time look to your Intaleq Wallet": - "您將向職業駕駛支付您將支付職業駕駛花費的時間看看您的Intaleq錢包", - "I will go now": "我現在就去。", - "You Have Tips": "你有貼士", - "tips": "貼士", - "Total is": "總金額為", - "No,I want": "不,我想要", - "Your fee is": "您的費用為", - "Do you want to pay Tips for this Driver": "您想給這位職業駕駛小費嗎?", - "Tip is": "我的貼士", - "Camera Access Denied.": "相機存取被拒。", - "Open Settings": "開啟設定", - "GPS Required Allow !.": "需要啟用GPS !", - "Your Account is Deleted": "您的帳戶已刪除", - "Are you sure to delete your account?": "您確定要刪除您的帳戶嗎?", - "Your data will be erased after 2 weeks": "您的資料將在2週後刪除", - "And you will can't return to use app after 1 month": "你將可在一個月後返回App", - "Enter Your First Name": "輸入您的名字", - "Are you Sure to LogOut?": "您確定要登出嗎?", - "Email Wrong": "電子郵件", - "Email you inserted is Wrong.": "您輸入的電子郵件地址有誤。", - "You have finished all times": "你已經完成了所有的時間", - "if you want help you can email us here": "如果您需要幫助,請發送電子郵件至此處", - "Thanks": "謝謝", - "Email Us": "發送電子郵件給我們", - "I cant register in your app in face detection": - "我無法透過臉部偵測功能註冊你的應用程式", - "Hi": "ni hao", - "No face detected": "未偵測到臉部", - "Image detecting result is": "影像偵測的結果是", - "from 3 times Take Attention": "超過3次引起你的注意", - "Be sure for take accurate images please": "請務必拍攝準確的相片", - "You have": "您有", - "image verified": "相片已公證", - "Next": "下一步", - "There is no help Question here": "這裡沒有幫助問題", - "Call End": "結束通話", - "You dont have Points": "您沒有積分", - "You Are Stopped For this Day !": "您今天已被暫停!", - "You must be charge your Account": "您必須為您的帳戶充值", - "You Refused 3 Rides this Day that is the reason": "你今天拒絕了3個行程,因此", - "See you Tomorrow!": "明天見!", - "Recharge my Account": "向我的帳戶充值", - "Ok , See you Tomorrow": "好吧,明天見。", - "You are Stopped": "你已停止接單", - "Connected": "已連線", - "Not Connected": "離線", - "Your are far from passenger location": "您距離乘客所在地點很遠", - "go to your passenger location before": "請在前前往乘客所在地點", - "Passenger cancel trip": "乘客已取消行程", - "You will get cost of your work for this trip": "你將獲得這趟旅程的費用", - "in your wallet": "在您的錢包中", - "you gain": "您賺取了", - "Order Cancelled": "訂單已取消", - "Order Cancelled by Passenger": "乘客已取消預約", - "Success": "成功", - "Feedback data saved successfully": "已成功儲存評鑑資料", - "No Promo for today .": "今天沒有優惠。", - "Select your destination": "選擇目的地", - "Search for your Start point": "尋找出發點", - "Search for waypoint": "搜尋WIPOINT點", - "Current Location": "當前位置", - "Add Location 1": "添加位置1", - "You must Verify email !.": "必須驗證電子郵件!", - "Cropper": "收割", - "Saved Sucssefully": "儲存成功", - "Select Date": "選擇日期", - "Birth Date": "出生日期", - "Ok": "也已无大碍", - "the 500 points equal 30 JOD": "500分等於30 JOD", - "the 500 points equal 30 JOD for you": "500積分等於30 JOD", - "token updated": "代碼已更新", - "Add Location 2": "添加位置2", - "Add Location 3": "新增地點3", - "Add Location 4": "新增地點4", - "Waiting for your location": "正在等候你的地點", - "Search for your destination": "尋找目的地", - "Hi! This is": "您好!那個酷", - "I am using": "我使用", - "to ride with": "提供搭乘服務", - "as the driver.": "成為職業駕駛。", - "is driving a": "上線開車", - "with license plate": "有車牌號碼", - "I am currently located at": "我目前在", - "Please go to Car now": "請立即上車", - "If you need to reach me, please contact the driver directly at": - "如需聯絡我,請直接聯絡職業駕駛:", - "No Car or Driver Found in your area.": "您所在地區沒有找到車輛或職業駕駛。", - "Please Try anther time": "請再試一次", - "There no Driver Aplly your order sorry for that": - "很抱歉,沒有職業駕駛能夠滿足您的要求。", - "Trip Cancelled": "行程已取消", - "The Driver Will be in your location soon .": "職業駕駛即將抵達您的所在地點。", - "The distance less than 500 meter.": "距離不到500米。", - "Promo End !": "表演結束了!", - "There is no notification yet": "尚無通知", - "Use Touch ID or Face ID to confirm payment": - "使用Touch ID或Face ID確認付款", - "Contact us for any questions on your order.": "如對訂單有任何疑問,請聯絡我們。", - "Pyament Cancelled .": "付款已取消。", - "type here": "在此輸入", - "Scan Driver License": "駕駛執照檢查", - "Please put your licence in these border": "請將執照放置在這些範圍內", - "Camera not initialized yet": "相機尚未設定", - "Take Image": "拍攝相片", - "AI Page": "AI頁面", - "Take Picture Of ID Card": "請拍攝身份證明文件的相片", - "Take Picture Of Driver License Card": "請拍攝駕駛執照的相片。", - "We are process picture please wait": "我們正在處理圖片,請稍候。", - "There is no data yet.": "尚無數據。", - "Name :": "名稱字體", - "Drivers License Class:": "駕照類別:", - "Document Number:": "文件編號:", - "Address:": "標題", - "Height:": "長度:", - "Expiry Date:": "到期日期:", - "Date of Birth:": "出生日期:", - "You can't continue with us .": "您無法繼續使用我們的服務。", - "You should renew Driver license": "你必須更新駕駛執照", - "Detect Your Face": "發現你的臉孔", - "Go to next step": "前往下一步", - "scan Car License.": "車輛牌照審查。", - "Name in arabic": "姓名(阿拉伯文)", - "Drivers License Class": "駕照類別", - "Date of Birth": "出生日期", - "Age": "年齡", - "Lets check Car license": "請檢查車牌號碼", - "Car Kind": "車輛類型", - "Car Plate": "車牌號碼", - "Lets check License Back Face": "請檢查背面執照", - "Car License Card": "車輛牌照", - "No image selected yet": "尚未選擇相片", - "Made :": "製作儀式", - "model :": "型號:", - "VIN :": "底盤編號:", - "year :": "年份:", - "ُExpire Date": "結束日期", - "Login Driver": "職業駕駛登入", - "Password must br at least 6 character.": "密碼必須至少為6個字元。", - "if you don't have account": "如果你沒有帳戶", - "Here recorded trips audio": "以下是行程錄音", - "Register as Driver": "註冊成為職業駕駛", - "Privacy Notice": "隱私權聲明", - "By selecting \"I Agree\" below, I have reviewed and agree to the Terms of Use and acknowledge the": - "在下方選擇「我同意」,即表示我已查看、同意並確認條款與細則", - ". I am at least 18 years of age.": ". 我已年滿18歲。", - "Log Out Page": "結帳頁面", - "Log Off": "退出", - "Register Driver": "職業駕駛紀錄", - "Verify Email For Driver": "查看職業駕駛的電子郵件地址", - "Admin DashBoard": "管理員儀表板", - "Your name": "您的姓名", - "your ride is applied": "已套用你的行程", - "Your password": "您的密碼", - "LE": "埃及鎊", - "JOD": "約旦第納爾", - "m": "陳", - "We search nearst Driver to you": "我們正在尋找距離您最近的職業駕駛", - "please wait till driver accept your order": "請等候職業駕駛接受您的預約", - "No accepted orders? Try raising your trip fee to attract riders.": - "沒有已接受的訂單?請嘗試提高行程費用,以吸引乘客。", - "You should select one": "您必須選擇一項", - "The driver accept your order for": "職業駕駛已接受您的預約", - "Increase Fee": "增加費用", - "No, thanks": "不用了,謝謝", - "The driver on your way": "職業駕駛正在途中", - "Total price from": "總價最低", - "Order Details Intaleq": "Intaleq訂單詳細資訊", - "Order Applied": "訂單已套用", - "accepted your order": "您的申請已被接受", - "We regret to inform you that another driver has accepted this order.": - "很抱歉通知您,其他職業駕駛已接受此預約。", - "Selected file:": "所選檔案:", - "Your trip cost is": "行程費用", - "this will delete all files from your device": "這將刪除您裝置上的所有檔案", - "you have a negative balance of": "您的餘額為負數", - "in your": "VIC", - "Exclusive offers and discounts always with the Intaleq app": - "隨時透過旅遊應用程式享受專屬優惠和折扣", - "Please go to Car Driver": "請前往車輛的職業駕駛處", - "wallet due to a previous trip.": "因上一趟行程而產生的錢包。", - "Submit Question": "提交問題", - "Please enter your Question.": "請輸入您的問題。", - "Help Details": "幫助詳情", - "No trip yet found": "尚未找到行程", - "No Response yet.": "還沒有回復。", - "You Earn today is": "您今天的收入是", - "You Have in": "您有", - "Total points is": "總分為", - "Total Connection Duration:": "總連線持續時間:", - "H and": "H和", - "Passenger name :": "乘客姓名:", - "Cost Of Trip IS": "行程費用為", - "Arrival time": "抵達時間", - "arrival time to reach your point": "抵達目的地的時間", - "For Intaleq and Delivery trips, the price is calculated dynamically. For Comfort trips, the price is based on time and distance": - "對於快速行程和外送行程,價格會自動計算。為了提供舒適的行程體驗,行程費用會根據行程時間和距離而定。", - "Hello this is Driver": ",您好:我是職業駕駛", - "Is the Passenger in your Car ?": "乘客是否在您的車內?", - "Please wait for the passenger to enter the car before starting the trip.": - "請等候乘客上車後再開始行程。", - "No ,still Waiting.": "不,我還在等你。", - "I arrive you": "我抓住你了", - "I Arrive your site": "我抓住你了", - "You are not in near to passenger location": "您不在乘客所在地點附近", - "please go to picker location exactly": "請前往所選項目的確切位置", - "You Can Cancel Trip And get Cost of Trip From": "您可以取消行程,並透過獲得行程費用", - "Are you sure to cancel?": "您確定要取消嗎?", - "Yes": "是", - "Insert Emergincy Number": "輸入緊急電話號碼", - "Best choice for comfort car and flexible route and stops point": - "舒適的車輛、靈活的路線和停車點的最佳選擇", - "Insert": "插入", - "This is for delivery or a motorcycle.": "適用於送遞或電單車。", - "This trip goes directly from your starting point to your destination for a fixed price. The driver must follow the planned route": - "這趟行程會直接從您的出發地點前往目的地,費用為均一價。職業駕駛必須按照規劃路線行駛", - "You can decline a request without any cost": "你可以免費拒絕申請", - "Perfect for adventure seekers who want to experience something new and exciting": - "非常適合想嘗試新奇刺激體驗的探險者", - "My current location is:": "我目前的位置是:", - "and I have a trip on": "我在有趟行程", - "App with Passenger": "向乘客提出申請", - "You will be pay the cost to driver or we will get it from you on next trip": - "費用會支付給職業駕駛,否則我們會在下趟行程中向您收取", - "Trip has Steps": "此行程有個步驟", - "Distance from Passenger to destination is": "乘客與目的地的距離為", - "price is": "價格為", - "This ride type does not allow changes to the destination or additional stops": - "此行程類型不允許變更目的地或其他停靠點", - "This price may be changed": "此價格可能會有變動", - "No SIM card, no problem! Call your driver directly through our app. We use advanced technology to ensure your privacy.": - "沒有SIM卡,沒問題!請直接透過App聯絡職業駕駛。我們使用先進技術來確保您的隱私。", - "This ride type allows changes, but the price may increase": - "此旅程類型允許變更,但價格可能會上漲", - "message From passenger": "來自乘客的訊息", - "Select one message": "選擇一則訊息", - "My location is correct. You can search for me using the navigation app": - "我的位置正確。你可以使用導航應用程式搜尋我", - "I'm waiting for you": "我在等你", - "Hello, I'm at the agreed-upon location": ",您好:我在約定的地點", - "We noticed the Intaleq is exceeding 100 km/h. Please slow down for your safety. If you feel unsafe, you can share your trip details with a contact or call the police using the red SOS button.": - "我們注意到車速超過每小時100公裏。為了您的安全,請放慢速度。如果你感到不安全,可以與聯絡人分享行程詳細資料,或使用紅色遇險按鈕致電警方。", - "Warning: Intaleqing detected!": "警告:偵測到超速!", - "Please help! Contact me as soon as possible.": "請幫幫我!請盡快與我聯絡。", - "Share Trip Details": "提供行程詳細資訊", - "Car Plate is": "車牌號碼", - "the 3000 points equal 3000 L.E for you": "3000分等於3000 EGP", - "So go and gain your money": "開始賺取收入", - "the 3000 points equal 3000 L.E": "3000分等於3000 EGP", - "The payment was not approved. Please try again.": "付款未批準。請再試一次。", - "Payment Failed": "付款失敗", - "Error": "錯誤", - "An error occurred during the payment process.": "您的付款發生錯誤。", - "The payment was approved.": "付款已批準。", - "Payment Successful": "付款成功", - "No ride found yet": "尚未找到行程", - "Accept Order": "接受預約", - "reject your order.": "拒絕你的申請。", - "Bottom Bar Example": "底部欄範例", - "Driver phone": "職業駕駛電話", - "Statistics": "統計資料", - "Origin": "資產", - "Destination": "目的地", - "Driver Name": "職業駕駛姓名", - "Driver Car Plate": "駕駛車牌號碼", - "Available for rides": "可供預約行程", - "Scan Id": "身分驗證", - "Camera not initilaized yet": "相機尚未設定", - "Scan ID MklGoogle": "MklGoogle身分檢查", - "Language": "語言", - "Jordan": "約旦", - "USA": "美國", - "Egypt": "埃及", - "Turkey": "土耳其", - "Saudi Arabia": "沙特阿拉伯", - "Qatar": "卡塔爾", - "Bahrain": "巴林", - "Kuwait": "科威特", - "But you have a negative salary of": "但你的負薪水是", - "Promo Code": "優惠碼", - "Your trip distance is": "你的行程距離為", - "Enter promo code": "輸入優惠序號", - "You have promo!": "你有晉升機會!", - "Cost Duration": "費用持續時間", - "Duration is": "持續時間為", - "Leave": "離開", - "Join": "加入", - "You Should be select reason.": "您必須選擇一個原因。", - "\$": "\$", - "Waiting for Driver ...": "正在等候職業駕駛…", - "Latest Recent Trip": "最新行程", - "from your list": "從你的心水清單中", - "Do you want to change Work location": "您想變更工作地點嗎?", - "Do you want to change Home location": "您是否要更改房源的位置", - "We Are Sorry That we dont have cars in your Location!": - "很抱歉,你所在地區無法提供車輛服務!", - "Choose from Map": "從地圖中選擇", - "Pick your ride location on the map - Tap to confirm": - "在地圖上選擇上車地點,點按即可確認", - "To Work": "商務差旅", - "Are you want to go this site": "是否要前往此地點", - "Closest & Cheapest": "距離最近、價格最便宜", - "Work Saved": "已儲存:", - "Intaleq is the ride-hailing app that is safe, reliable, and accessible.": - "Intaleq是一款安全、可靠且易於使用的叫車App。", - "With Intaleq, you can get a ride to your destination in minutes.": - "透過行程,你可以在幾分鐘內預約行程前往目的地。", - "Intaleq is committed to safety, and all of our captains are carefully screened and background checked.": - "Safar致力於安全,我們所有的指揮官都經過仔細審查和背景調查。", - "To Home": "前往首頁", - "Home Saved": "已儲存:", - "Destination selected": "已選取目的地", - "Now select start pick": "現在選擇「開始選擇」", - "Pick from map": "從地圖中選擇", - "Click here point": "點擊此處", - "No Car in your site. Sorry!": "你所在地區沒有車輛。糟糕!", - "Nearest Car for you about": "距離您最近的車輛大約", - "N/A": "無信息", - "From :": "寄件人:", - "Get Details of Trip": "取得旅程詳情", - "If you want add stop click here": "如果你想新增停車點,請按一下此處", - "Driver": "職業駕駛", - "Where you want go": "你想去哪裡?", - "My Card": "我的信用卡", - "Start Record": "開始錄制", - "Wallet": "錢包", - "History of Trip": "行程日期", - "Helping Center": "說明中心", - "Record saved": "記錄已儲存", - "Trips recorded": "已記錄的行程", - "Select Your Country": "選擇你的國家/地區", - "To ensure you receive the most accurate information for your location, please select your country below. This will help tailor the app experience and content to your country.": - "為確保您有最準確的位置資訊,請在下方選擇您的國家/地區。這將有助於為您的國家/地區自訂應用程式體驗和內容。", - "Are you sure to delete recorded files": "您確定要刪除記錄的檔案嗎", - "Select recorded trip": "選擇記錄的行程", - "Card Number": "卡號", - "Hi, Where to": "您好,想去哪裡?", - "Pick your destination from Map": "從地圖上選擇目的地", - "Add Stops": "新增停靠點", - "Get Direction": "取得路線", - "Add Location": "新增地點", - "Switch Rider": "切換乘客", - "You will arrive to your destination after timer end.": - "您會在計時器結束後抵達目的地。", - "You can cancel trip": "你可以取消行程", - "The driver waitting you in picked location .": "職業駕駛正在指定地點等您。", - "Pay with Your": "付款方式:", - "Pay with Credit Card": "使用信用卡付款", - "Payment History": "付款紀錄", - "Show Promos to Charge": "顯示運送優惠", - "Point": "一個點", - "Driver Balance": "職業駕駛錢包", - "Total Points is": "總分為", - "Total Budget from trips is": "行程總預算為", - "Total Amount:": "總金額:", - "Total Budget from trips by": "的總預算行程費用", - "Credit card is": "信用卡", - "This amount for all trip I get from Passengers": "此金額適用於我收到的所有乘客行程", - "Pay from my budget": "從我的預算中支付", - "This amount for all trip I get from Passengers and Collected For me in": - "此金額適用於我從乘客收取的所有行程", - "You can buy points from your budget": "您可以從預算中購買積分", - "insert amount": "輸入金額", - "You can buy Points to let you online": "您可以購買積分,以便線上存取", - "by this list below": "透過以下清單", - "Create Wallet to receive your money": "建立錢包以收取款項", - "Enter your feedback here": "在此輸入您的意見回饋", - "Please enter your feedback.": "請輸入備註文字", - "Feedback": "意見回饋", - "Click here to Show it in Map": "按一下此處即可在地圖上查看", - "Canceled": "已取消", - "Type your Email": "輸入你的電郵", - "No I want": "不,我想要", - "Email is": "電子郵件", - "Phone Number is": "電話號碼為", - "Date of Birth is": "出生日期為", - "Sex is": "性別為", - "Car Details": "車輛詳情", - "VIN is": "底盤編號", - "Color is": "顏色是", - "Make is": "Make is", - "Model is": "表單來源:", - "Year is": "年", - "Edit Your data": "編輯您的詳細資訊", - "write vin for your car": "寫下車輛的底盤號碼", - "VIN": "底盤編號", - "write Color for your car": "輸入車輛顏色", - "write Make for your car": "為你的車輛撰寫廠牌", - "write Model for your car": "輸入您的汽車型號", - "write Year for your car": "輸入車輛年份", - "write Expiration Date for your car": "輸入車輛的有效期限", - "Tariffs": "定義", - "Minimum fare": "最低行程費用", - "Maximum fare": "最高價格", - "Flag-down fee": "中途停留費用", - "Including Tax": "含稅", - "BookingFee": "預訂費", - "Morning": "上午", - "from 07:30 till 10:30 (Thursday, Friday, Saturday, Monday)": - "07:30 - 10:30 (周四、周五、周六、周一)", - "Evening": "晚上", - "from 12:00 till 15:00 (Thursday, Friday, Saturday, Monday)": - "12:00 - 15:00 (周四、周五、周六、周一)", - "Night": "晚", - "You have in account": "您在帳戶中有", - "Select Country": "選擇國家/地區", - "Ride Today :": "立即預約行程:", - "After this period": "在此期間之後", - "You can't cancel!": "你不能取消!", - "from 23:59 till 05:30": "23:59 - 05:30", - "Rate Driver": "職業駕駛價值觀", - "Total Cost is": "總費用為", - "Write note": "撰寫備註", - "Time to arrive": "預計抵達時間", - "Ride Summaries": "旅程摘要", - "Total Cost": "總費用", - "Average of Hours of": "平均工作時數", - "is ON for this month": "本月運行", - "Days": "天", - "Total Hours on month": "每月總時數", - "Counts of Hours on days": "小時(天)", - "OrderId": "訂單編號", - "created time": "建立時間", - "Intaleq Over": "速度高於", - "I will slow down": "我會慢下來。", - "Map Passenger": "乘客地圖", - "Be Slowly": "慢一點", - "If you want to make Google Map App run directly when you apply order": - "如果您想在應用命令時直接啟動Google地圖", - "You can change the language of the app": "您可以變更App的語言", - "Your Budget less than needed": "您的預算不足", - "You can change the Country to get all features": "您可以更改國家/地區以獲得所有功能", - "Change Country": "非國家" - }, - "ar-gulf": { - "Order": "طلب", - "OrderVIP": "طلب VIP", - "Cancel Trip": "إلغاء الرحلة", - "Passenger Cancel Trip": "الراكب ألغى الرحلة", - "VIP Order": "طلب VIP", - "The driver accepted your trip": "السائق قبل رحلتك", + "إذا بدك مساعدة تقدر تراسلنا هون", + "image verified": "تم التحقق من الصورة", + "in your": "بـ", + "incorrect_document_message": "رسالة المستند غير صحيح", + "incorrect_document_title": "وثيقة غير صحيحة", + "insert amount": "أدخل المبلغ", + "is driving a": "عم يسوق", + "is reviewing your order. They may need more information or a higher price.": + "عم يراجع طلبك. ممكن يحتاجوا معلومات أكثر أو سعر أعلى.", + "it": "it", + "joined": "انضم", + "kilometer": "كيلومتر", + "last name label": "تسمية اسم العائلة", + "last name required": "اسم العائلة مطلوب", + "ll let you know when the review is complete.": + "رح نعلمك لما تكتمل المراجعة.", + "login or register subtitle": "عنوان تسجيل الدخول أو التسجيل", + "m": "م", + "m at the agreed-upon location": "بالموقع المتفق عليه", + "m inviting you to try Intaleq.": "بدعوك تجرب انطلق.", + "m waiting for you": "عم أستناك", + "m waiting for you at the specified location.": + "عم أستناك بالموقع المحدد.", + "message From Driver": "رسالة من السائق", "message From passenger": "رسالة من الراكب", - "Cancel": "إلغاء", - "Trip Cancelled. The cost of the trip will be added to your wallet.": - "تم إلغاء الرحلة. سيتم إضافة تكلفة الرحلة إلى محفظتك.", + "min": "دقيقة", + "minute": "دقيقة", + "minutes before trying again.": "دقايق قبل ما تجرب مرة تانية.", + "model :": "موديل :", + "moi\\": "moi\\", + "mtn": "mtn", + "my location": "موقعي", + "non_id_card_back": "خلفي غير الهوية", + "non_id_card_front": "أمامي غير الهوية", + "not similar": "غير متشابه", + "of": "من", + "on": "على", + "one last step title": "عنوان الخطوة الأخيرة", + "otp sent subtitle": "عنوان إرسال OTP", + "otp sent success": "تم إرسال OTP بنجاح", + "otp verification failed": "فشل التحقق من OTP", + "passenger agreement": "اتفاقية الراكب", + "passenger amount to me": "مبلغ الراكب لي", + "payment_success": "تمت العملية بنجاح", + "pending": "قيد الانتظار", + "phone number label": "تسمية رقم الهاتف", + "phone number of driver": "رقم هاتف السائق", + "phone number required": "رقم الهاتف مطلوب", + "please go to picker location exactly": + "تفضل روح لموقع الالتقاط بالضبط", + "please order now": "تفضل اطلب هلق", + "please wait till driver accept your order": + "تفضل استنى لحتى يقبل السائق طلبك", + "points": "نقطة", + "price is": "السعر هو", + "privacy policy": "سياسة الخصوصية", + "rating_count": "عدد التقييمات", + "rating_driver": "تقييم السائق", + "re eligible for a special offer!": "رح تكون مؤهل لعرض خاص!", + "registration failed": "فشل التسجيل", + "registration_date": "تاريخ التسجيل", + "reject your order.": "رفض طلبك.", + "rejected": "مرفوض", + "remaining": "المتبقي", + "reviews": "المراجعات", + "rides": "الرحلات", + "ru": "ru", + "s Degree": "درجة", + "s Intaleq account.": "حساب انطلق.", + "s Intaleq account.\nStore your money with us and receive it in your bank as a monthly salary.": + "ميزات محفظة انطلق:\nتحويل الأموال عدة مرات.\nالتحويل لأي شخص.\nإجراء عمليات شراء.\nشحن حسابك.\nشحن حساب انطلق لصديق.\nخزّن فلوسك عنا واستلمها ببنكك كراتب شهري.", + "s License": "رخصة", + "s Personal Information": "المعلومات الشخصية", + "s Promo": "عرض", + "s Promos": "عروض", + "s Response": "رد", + "s Terms & Review Privacy Notice": "شروط ومراجعة إشعار الخصوصية", + "s heavy traffic here. Can you suggest an alternate pickup point?": + "في زحمة كتير هون. تقترّح نقطة التقاط تانية؟", + "s license does not match the one on your ID document. Please verify and provide the correct documents.": + "رخصته ما بتتطابق مع الهوية. تفضل تحقق وقدّم الوثائق الصحيحة.", + "s license, ID document, and car registration document. Our AI system will instantly review and verify their authenticity in just 2-3 minutes. If your documents are approved, you can start working as a driver on the Intaleq app. Please note, submitting fraudulent documents is a serious offense and may result in immediate termination and legal consequences.": + "رخصته، الهوية، ورخصة السيارة. نظام الذكاء الاصطناعي رح يراجعها ويوثّقها بدقيقتين لـ 3. إذا انقبلت، تقبل تشتغل كسائق بانطلاق. انتبه، تزوير وثائق جريمة خطيرة وبتسبب فصل فوري وعواقب قانونية.", + "s license. Please verify and provide the correct documents.": + "رخصته. تفضل تحقق وقدّم الوثائق الصحيحة.", + "s phone": "هاتف", + "s pioneering ride-sharing service, proudly developed by Arabian and local owners. We prioritize being near you – both our valued passengers and our dedicated captains.": + "خدمة مشاركة الرحلات الرائدة، مطورة بفخر من ملاك عرب ومحليين. بنعطي أولوية للقرب منك – ركابنا وسواقينا.", + "s time to check the Intaleq app!": "وقت تتفقد تطبيق انطلق!", + "safe_and_comfortable": "آمن ومريح", + "scams operations": "عمليات احتيال", + "scan Car License.": "امسح رخصة السيارة.", + "seconds": "ثواني", + "security_warning": "تحذير أمني", + "send otp button": "زر إرسال OTP", + "server error try again": "خطأ بالخادم جرّب مرة تانية", + "server_error": "خطأ بالخادم", + "server_error_message": "صار خطأ بالاتصال بالخادم", + "similar": "متشابه", + "start": "ابدأ", + "string": "نص", + "syriatel": "سيريتل", + "t an Egyptian phone number": "رقم هاتف مصري", + "t be late": "ما تتأخر", + "t cancel!": "ما تلغي!", + "t continue with us .": "ما تقدر تكمل معنا.", + "t continue with us .\nYou should renew Driver license": + "ما تقدر تكمل معنا.\nلازم تجدّد رخصة السائق", + "t find a valid route to this destination. Please try selecting a different point.": + "ما لقينا طريق صالح لهالوجهة. تفضل جرّب تختار نقطة تانية.", + "t forget your personal belongings.": "ما تنسى حاجاتك الشخصية.", + "t forget your ride!": "ما تنسى رحلتك!", + "t found any drivers yet. Consider increasing your trip fee to make your offer more attractive to drivers.": + "ما لقينا سواقين لسا. فكّر ترفع رسوم رحلتك عشان تجذب سواقين أكثر.", + "t have a code": "ما عندك كود", + "t have a phone number.": "ما عندك رقم هاتف.", + "t have a reason": "ما عندك سبب", + "t have account": "ما عندك حساب", + "t have enough money in your Intaleq wallet": + "ما عندك فلوس كافية بمحفظة انطلق", + "t moved sufficiently!": "ما تحركت بشكل كافي!", + "t need a ride anymore": "ما بدك رحلة بعد هيك", + "t return to use app after 1 month": "ما ترجع تستخدم التطبيق بعد شهر", + "t start trip if not": "ما تبدأ الرحلة إذا ما", + "t start trip if passenger not in your car": + "لا تبدأ الرحلة إذا الراكب مش بسيارتك", + "terms of use": "شروط الاستخدام", + "the 300 points equal 300 L.E": "الـ 300 نقطة بتساوي 300 ل.م", + "the 300 points equal 300 L.E for you": + "الـ 300 نقطة بتساوي 300 ل.م لك", + "the 300 points equal 300 L.E for you\nSo go and gain your money": + "الـ 300 نقطة بتساوي 300 ل.م لك\nيلا استلم فلوسك", + "the 3000 points equal 3000 L.E": "الـ 3000 نقطة بتساوي 3000 ل.م", + "the 3000 points equal 3000 L.E for you": + "الـ 3000 نقطة بتساوي 3000 ل.م لك", + "the 500 points equal 30 JOD": "الـ 500 نقطة بتساوي 30 د.أ", + "the 500 points equal 30 JOD for you": + "الـ 500 نقطة بتساوي 30 د.أ لك", + "the 500 points equal 30 JOD for you\nSo go and gain your money": + "الـ 500 نقطة بتساوي 30 د.أ لك\nيلا استلم فلوسك", + "this is count of your all trips in the Afternoon promo today from 3:00pm to 6:00 pm": + "هالعدد لكل رحلاتك بعرض الظهيرة اليوم من 3:00 م لـ 6:00 م", + "this is count of your all trips in the Afternoon promo today from 3:00pm-6:00 pm": + "هالعدد لكل رحلاتك بعرض الظهيرة اليوم من 3:00 م لـ 6:00 م", + "this is count of your all trips in the morning promo today from 7:00am to 10:00am": + "هالعدد لكل رحلاتك بعرض الصباح اليوم من 7:00 ص لـ 10:00 ص", + "this is count of your all trips in the morning promo today from 7:00am-10:00am": + "هالعدد لكل رحلاتك بعرض الصباح اليوم من 7:00 ص لـ 10:00 ص", + "this will delete all files from your device": + "هالشي رح يحذف كل الملفات من جهازك", + "time Selected": "الوقت المختار", + "tips": "الإكراميات", + "to": "إلى", "token change": "تغيير الرمز", - "face detect": "كشف الوجه", - "Face Detection Result": "نتيجة كشف الوجه", - "similar": "مشابه", - "not similar": "غير مشابه", - "Hi ,I will go now": "هلا، أنا بروح الحين", - "Passenger come to you": "الراكب جاي لك", - "Call Income": "مكالمة واردة", - "Call Income from Passenger": "مكالمة واردة من الراكب", - "Criminal Document Required": "مطلوب وثيقة جنائية", - "You should have upload it .": "لازم تكون حملتها.", - "Call End": "انتهاء المكالمة", - "The order has been accepted by another driver.": - "الطلب تم قبوله من سائق ثاني.", - "The order Accepted by another Driver": "الطلب تم قبوله من سائق ثاني", - "We regret to inform you that another driver has accepted this order.": - "نتأسف لإبلاغك أن سائق آخر قد قبل هذا الطلب.", - "Driver Applied the Ride for You": "السائق قدم طلب الرحلة لك", - "Applied": "تم التقديم", - "Hi ,I Arrive your site": "هلا، وصلت موقعك", - "Please go to Car Driver": "لو سمحت روح حق سائق السيارة", - "Ok I will go now.": "اوكي بروح الحين.", - "Accepted Ride": "تم قبول الرحلة", - "Driver Accepted the Ride for You": "السائق قبل الرحلة لك", - "Promo": "عرض", - "Show latest promo": "عرض أحدث عرض", - "Trip Monitoring": "مراقبة الرحلة", - "Driver Is Going To Passenger": "السائق في طريقه حق الراكب", - "Please stay on the picked point.": - "لو سمحت خليك في نقطة الالتقاط المحددة.", - "message From Driver": "رسالة من السائق", - "Trip is Begin": "الرحلة بدت", - "Cancel Trip from driver": "إلغاء الرحلة من السائق", - "We will look for a new driver.\nPlease wait.": - "بندور على سائق جديد.\nلو سمحت انتظر.", - "The driver canceled your ride.": "السائق ألغى رحلتك.", - "Driver Finish Trip": "السائق أنهى الرحلة", - "you will pay to Driver": "بتدفع حق السائق", - "Don’t forget your personal belongings.": "لا تنسى أغراضك الشخصية.", - "Please make sure you have all your personal belongings and that any remaining fare, if applicable, has been added to your wallet before leaving. Thank you for choosing the Intaleq app": - "لو سمحت تأكد إن معاك كل أغراضك الشخصية وإن أي مبلغ متبقي، إذا فيه، تم إضافته لمحفظتك قبل لا تمشي. شكراً لاستخدامك تطبيق Intaleq", - "Finish Monitor": "إنهاء المراقبة", - "Trip finished": "الرحلة انتهت", - "Call Income from Driver": "مكالمة واردة من السائق", - "Driver Cancelled Your Trip": "السائق ألغى رحلتك", + "token updated": "تم تحديث الرمز", + "towards": "باتجاه", + "tr": "tr", + "transaction_failed": "فشلت العملية", + "transaction_id": "رقم العملية", + "transfer Successful": "نجاح التحويل", + "trips": "الرحلات", + "true": "صحيح", + "type here": "اكتب هون", + "unknown_document": "وثيقة غير معروفة", + "upgrade price": "رفع السعر", + "uploaded sucssefuly": "تم الرفع بنجاح", + "ve arrived.": "وصلت.", + "ve been trying to reach you but your phone is off.": + "كنت عم حاول توصلك بس هاتفك مقفول.", + "verify and continue button": "زر التحقق والمتابعة", + "verify your number title": "عنوان التحقق من رقمك", + "vin": "رقم الهيكل", + "wait 1 minute to receive message": + "استنى دقيقة وحدة عشان تستلم الرسالة", + "wallet due to a previous trip.": "المحفظة بسبب رحلة سابقة.", + "wallet_credited_message": "تم إضافة", + "wallet_updated": "تم تحديث المحفظة", + "welcome to intaleq": "أهلاً بانطلاق", + "welcome user": "أهلاً بالمستخدم", + "welcome_message": "رسالة الترحيب", + "welcome_to_intaleq": "أهلاً بانطلاق", + "with type": "بالنوع", + "witout zero": "بدون صفر", + "write Color for your car": "اكتب لون سيارتك", + "write Expiration Date for your car": "اكتب تاريخ انتهاء سيارتك", + "write Make for your car": "اكتب ماركة سيارتك", + "write Model for your car": "اكتب موديل سيارتك", + "write Year for your car": "اكتب سنة سيارتك", + "write comment here": "اكتب تعليق هون", + "write vin for your car": "اكتب رقم هيكل سيارتك", + "year :": "سنة :", + "you are not moved yet !": "ما تحركت لسا!", + "you can buy": "تقدر تشتري", + "you can show video how to setup": "تقدر تشوف فيديو كيف تضبط", + "you canceled order": "ألغيت الطلب", + "you dont have accepted ride": "ما عندك رحلة مقبولة", + "you gain": "تكسب", + "you have a negative balance of": "عندك رصيد سلبي بقيمة", + "you must insert token code": "لازم تدخل رمز الرمز", + "you will pay to Driver": "رح تدفع للسائق", "you will pay to Driver you will be pay the cost of driver time look to your Intaleq Wallet": - "بتدفع حق السائق بتدفع تكلفة وقت السائق شوف محفظة Intaleq مالتك", - "Order Applied": "تم تطبيق الطلب" + "رح تدفع للسائق هتدفع تكلفة وقت السائق شوف محفظة انطلق بتاعتك", + "you will use this device?": "رح تستخدم هالجهاز؟", + "your ride is Accepted": "رحلتك انقبلت", + "your ride is applied": "تم تقديم رحلتك", + "zh": "zh", + "أدخل رقم محفظتك": "أدخل رقم محفظتك", + "أوافق": "بوافق", + "إلغاء": "إلغاء", + "إلى": "إلى", + "اضغط للاستماع": "اضغط عشان تسمع", + "الاسم الكامل": "الاسم الكامل", + "التالي": "التالي", + "التقط صورة الوجه الخلفي للرخصة": "التقط صورة للوجه الخلفي للرخصة", + "التقط صورة لخلفية رخصة المركبة": "التقط صورة لظهر رخصة المركبة", + "التقط صورة لرخصة القيادة": "التقط صورة لرخصة القيادة", + "التقط صورة لصحيفة الحالة الجنائية": + "التقط صورة لصحيفة الحالة الجنائية", + "التقط صورة للوجه الأمامي للهوية": "التقط صورة للوجه الأمامي للهوية", + "التقط صورة للوجه الخلفي للهوية": "التقط صورة للوجه الخلفي للهوية", + "التقط صورة لوجه رخصة المركبة": "التقط صورة لوجه رخصة المركبة", + "الرصيد الحالي": "الرصيد الحالي", + "الرقم القومي": "الرقم القومي", + "السعر": "السعر", + "المبلغ في محفظتك أقل من الحد الأدنى للسحب وهو": + "المبلغ بمحفظتك أقل من الحد الأدنى للسحب وهو", + "المسافة": "المسافة", + "الوقت المتبقي": "الوقت المتبقي", + "بطاقة الهوية – الوجه الأمامي": "بطاقة الهوية – الوجه الأمامي", + "بطاقة الهوية – الوجه الخلفي": "بطاقة الهوية – الوجه الخلفي", + "تأكيد": "تأكيد", + "تم إلغاء الرحلة": "تم إلغاء الرحلة", + "تنبيه": "تنبيه", + "ثانية": "ثانية", + "رخصة القيادة – الوجه الأمامي": "رخصة القيادة – الوجه الأمامي", + "رخصة القيادة – الوجه الخلفي": "رخصة القيادة – الوجه الخلفي", + "رخصة المركبة – الوجه الأمامي": "رخصة المركبة – الوجه الأمامي", + "رخصة المركبة – الوجه الخلفي": "رخصة المركبة – الوجه الخلفي", + "رصيدك الإجمالي:": "رصيدك الإجمالي:", + "رفض": "رفض", + "سحب الرصيد": "سحب الرصيد", + "سنة الميلاد": "سنة الميلاد", + "سيتم إلغاء التسجيل": "رح يلغى التسجيل", + "شاهد فيديو الشرح": "شاهد فيديو الشرح", + "صحيفة الحالة الجنائية": "صحيفة الحالة الجنائية", + "طريقة الدفع:": "طريقة الدفع:", + "طلب جديد": "طلب جديد", + "قبول": "قبول", + "ل.س": "ل.س", + "للوصول": "للوصول", + "مثال: 0912345678": "مثال: 0912345678", + "مدة الرحلة: \${order.tripDurationMinutes} دقيقة": + "مدة الرحلة: \${order.tripDurationMinutes} دقيقة", + "من": "من", + "موافق": "موافق", + "نتيجة الفحص": "نتيجة الفحص", + "هل تريد سحب أرباحك؟": "بدك تسحب أرباحك؟", + "ُExpire Date": "ُExpire Date", + "⚠️ You need to choose an amount!": "⚠️ لازم تختار مبلغ!", + "💰 Pay with Wallet": "💰 ادفع من المحفظة", + "💳 Pay with Credit Card": "💳 ادفع ببطاقة ائتمان", + "Wait for timer": "استنى ليخلص الوقت", + "Due to excessive cancellations (3 times), receiving orders has been suspended for 4 hours.": + "بسبب كثرة الإلغاءات (3 مرات)، تم إيقاف استقبال الطلبات لمدة 4 ساعات.", + "No route points found": "ما لقينا نقاط للمسار", + "Failed to process route points": "فشلنا بمعالجة نقاط المسار", + "You must be closer than 100 meters to arrive": + "لازم تكون أقرب من 100 متر مشان توصل", + "A connection error occurred": "صار خطأ بالاتصال", + "Improve app performance": "تحسين أداء التطبيق", + "To ensure the best experience, we suggest adjusting the settings to suit your device. Would you like to proceed?": + "مشان نضمنلك أحسن تجربة، بنقترح تعديل الإعدادات لتناسب جهازك. بدك نكمل؟", + "Yes, optimize": "إي، حسن الأداء", + "Your device provides excellent performance": + "جهازك بيعطيك أداء ممتاز", + "Your device is good and very suitable": "جهازك جيد ومناسب كتير", + "Compatible, you may notice some slowness": + "متوافق، بس ممكن تلاحظ شوية بطء", + "The app may not work optimally": "ممكن التطبيق ما يشتغل بأحسن شكل", + "Device Compatibility": "توافق الجهاز", + "Continue to App": "أكمل للتطبيق", + "Place added successfully! Thanks for your contribution.": + "تمت إضافة المكان بنجاح! شكراً لمساهمتك.", + "Failed to add place. Please try again later.": + "تعذر إضافة المكان. يرجى المحاولة لاحقاً.", + "An error occurred while connecting to the server.": + "حدث خطأ أثناء الاتصال بالخادم.", + "Start Navigation?": "بدء الملاحة؟", + "Do you want to go to this location?": "بدك تروح لهالموقع؟", + "Go Now": "اذهب الآن", + "Selected Location": "الموقع المحدد", + "Add Balance": "إضافة رصيد", + "Select how you want to charge your account": "اختر كيف تريد شحن حسابك", + "Recharge Balance Packages": "باقات شحن الرصيد", + "Select Payment Method": "اختر طريقة الدفع", + "Amount to charge:": "المبلغ المطلوب شحنه:", + "Price:": "السعر:", + "Recharge Balance": "شحن الرصيد", + "Debit Card": "بطاقة دفع", + "Syriatel Cash": "سيريتل كاش", + "Sham Cash": "شام كاش", + "Confirm payment with biometrics": "تأكيد الدفع بالبصمة", + "Wallet Phone Number": "رقم هاتف المحفظة", + "Confirm": "تأكيد", + "PTS": "نقطة", + "SYP": "ل.س", + "You are buying": "أنت تقوم بشراء", + "for": "بـ", + "Points": "نقاط", + "Pay from my budget": "الدفع من الرصيد المتاح", + "Use Touch ID or Face ID to confirm payment": "استخدم بصمة الإصبع أو الوجه لتأكيد الدفع", + "Your Budget less than needed": "رصيدك أقل من المطلوب", + "Available Balance": "الرصيد المتاح", + "Total Rides": "إجمالي الرحلات", + "OrderId": "رقم الطلب", + "Pickup Location": "موقع الالتقاط", + "Destination Location": "موقع الوجهة", + "Completed": "مكتملة", + "Refused": "مرفوضة", + "Cancelled": "ملغية", + "Ride History": "سجل الرحلات", + "Total Earnings": "إجمالي الأرباح", + "Cash Earnings": "أرباح نقداً", + "Card Earnings": "أرباح البطاقة", + "Driver Balance": "رصيد السائق", + "Pay from my budget": "الدفع من الرصيد المتاح", + "You have in account": "لديك في الحساب", + "Select how you want to charge your account": "اختر كيف تريد شحن حسابك", + "Add Balance": "إضافة رصيد", + "SYP": "ل.س", + "Your completed trips will appear here": "ستظهر رحلاتك المكتملة هنا", + "Cancelled by Passenger": "تم الإلغاء بواسطة الراكب", }, - "ar-ma": { - "Order": "طلب", - "OrderVIP": "طلب VIP", - "Cancel Trip": "إلغي الرحلة", - "Passenger Cancel Trip": "الزبون ألغى الرحلة", - "VIP Order": "طلب VIP", - "The driver accepted your trip": "السائق قبل الرحلة ديالك", - "message From passenger": "رسالة من الزبون", - "Cancel": "إلغاء", - "Trip Cancelled. The cost of the trip will be added to your wallet.": - "الرحلة ملغية. الفلوس ديال الرحلة غادي تزاد في الجيب ديالك.", - "token change": "تبديل الرمز", - "face detect": "كشف الوجه", - "Face Detection Result": "نتيجة كشف الوجه", - "similar": "مشابه", - "not similar": "ماشي مشابه", - "Hi ,I will go now": "مرحبا، أنا غادي نمشي دابا", - "Passenger come to you": "الزبون جاي عندك", - "Call Income": "مكالمة واردة", - "Call Income from Passenger": "مكالمة واردة من الزبون", - "Criminal Document Required": "مطلوب وثيقة جنائية", - "You should have upload it .": "خاصك تكون حملتيها.", - "Call End": "نهاية المكالمة", - "The order has been accepted by another driver.": - "الطلب تقبل من عند سائق آخر.", - "The order Accepted by another Driver": "الطلب تقبل من عند سائق آخر", - "We regret to inform you that another driver has accepted this order.": - "كنتأسفوا نبلغوك باللي سائق آخر قبل هذا الطلب.", - "Driver Applied the Ride for You": "السائق قدم الطلب ليك", - "Applied": "تطبق", - "Hi ,I Arrive your site": "مرحبا، وصلت للموقع ديالك", - "Please go to Car Driver": "الله يرحم الوالدين سير عند سائق السيارة", - "Ok I will go now.": "واخا، غادي نمشي دابا.", - "Accepted Ride": "الرحلة مقبولة", - "Driver Accepted the Ride for You": "السائق قبل الرحلة ليك", - "Promo": "عرض ترويجي", - "Show latest promo": "عرض آخر عرض ترويجي", - "Trip Monitoring": "مراقبة الرحلة", - "Driver Is Going To Passenger": "السائق غادي في الطريق ليك", - "Please stay on the picked point.": - "الله يرحم الوالدين بقا في نقطة الالتقاط اللي تحددات.", - "message From Driver": "رسالة من السائق", - "Trip is Begin": "الرحلة بدات", - "Cancel Trip from driver": "إلغاء الرحلة من السائق", - "We will look for a new driver.\nPlease wait.": - "غادي نقلبوا على سائق جديد.\nالله يرحم الوالدين تسنى.", - "The driver canceled your ride.": "السائق ألغى الرحلة ديالك.", - "Driver Finish Trip": "السائق سالا الرحلة", - "you will pay to Driver": "غادي تخلص السائق", - "Don’t forget your personal belongings.": "متنساش حوايجك الشخصية.", - "Please make sure you have all your personal belongings and that any remaining fare, if applicable, has been added to your wallet before leaving. Thank you for choosing the Intaleq app": - "الله يرحم الوالدين تأكد باللي معاك كل حوايجك الشخصية وباللي أي مبلغ باقي، إلا كان، تزاد في الجيب ديالك قبل ما تمشي. شكرا لاستعمالك تطبيق Intaleq", - "Finish Monitor": "سالي المراقبة", - "Trip finished": "الرحلة سالات", - "Call Income from Driver": "مكالمة واردة من السائق", - "Driver Cancelled Your Trip": "السائق ألغى الرحلة ديالك", - "you will pay to Driver you will be pay the cost of driver time look to your Intaleq Wallet": - "غادي تخلص السائق غادي تخلص تكلفة وقت السائق شوف الجيب ديال Intaleq ديالك", - "Order Applied": "الطلب طبق", - - //firebase above - } }; } diff --git a/lib/controller/payment/payment_controller.dart b/lib/controller/payment/payment_controller.dart index 533d450..65f75ec 100755 --- a/lib/controller/payment/payment_controller.dart +++ b/lib/controller/payment/payment_controller.dart @@ -18,9 +18,7 @@ import '../../constant/colors.dart'; import '../../constant/info.dart'; import '../../constant/links.dart'; import '../../main.dart'; -import '../../print.dart'; import '../functions/crud.dart'; -import '../functions/encrypt_decrypt.dart'; import '../functions/toast.dart'; import 'paymob/paymob_wallet.dart'; @@ -170,8 +168,8 @@ class PaymentController extends GetxController { )), allowsDelayedPaymentMethods: true, customerEphemeralKeySecret: Stripe.merchantIdentifier, - appearance: const PaymentSheetAppearance( - shapes: PaymentSheetShape(borderRadius: 12), + appearance: PaymentSheetAppearance( + shapes: const PaymentSheetShape(borderRadius: 12), colors: PaymentSheetAppearanceColors( background: AppColor.secondaryColor, ), @@ -725,7 +723,6 @@ class PaymentController extends GetxController { box.write(BoxName.passengerWalletTotal, '0'); } // getPassengerWallet(); - final localAuth = LocalAuthentication(); super.onInit(); } } diff --git a/lib/controller/profile/setting_controller.dart b/lib/controller/profile/setting_controller.dart index bd8e7d9..e7a5f09 100755 --- a/lib/controller/profile/setting_controller.dart +++ b/lib/controller/profile/setting_controller.dart @@ -1,28 +1,45 @@ +import 'package:flutter/material.dart'; import 'package:sefer_driver/constant/box_name.dart'; import 'package:sefer_driver/main.dart'; import 'package:get/get.dart'; +import '../local/local_controller.dart'; class SettingController extends GetxController { bool isGoogleMapsEnabled = false; + bool isMapDarkMode = false; + bool isDarkMode = false; void onChangMapApp() { - if (!isGoogleMapsEnabled) { - isGoogleMapsEnabled = true; - box.write(BoxName.googlaMapApp, true); - update(); - } else { - isGoogleMapsEnabled = false; - box.write(BoxName.googlaMapApp, false); - update(); + isGoogleMapsEnabled = !isGoogleMapsEnabled; + box.write(BoxName.googlaMapApp, isGoogleMapsEnabled); + update(); + } + + void toggleMapTheme() { + isMapDarkMode = !isMapDarkMode; + box.write('isMapDarkMode', isMapDarkMode); + update(); + } + + void toggleAppTheme() { + isDarkMode = !isDarkMode; + box.write('isDarkMode', isDarkMode); + + // Update the theme using the LocaleController to ensure correct fonts are used + if (Get.isRegistered()) { + Get.find().refreshTheme(); } + + update(); } @override void onInit() { - if (box.read(BoxName.googlaMapApp) != null) { - isGoogleMapsEnabled = box.read(BoxName.googlaMapApp); - } - update(); + isGoogleMapsEnabled = box.read(BoxName.googlaMapApp) ?? false; + isMapDarkMode = box.read('isMapDarkMode') ?? false; + isDarkMode = box.read('isDarkMode') ?? false; + super.onInit(); } } + diff --git a/lib/controller/themes/themes.dart b/lib/controller/themes/themes.dart index 8bc52be..105240a 100755 --- a/lib/controller/themes/themes.dart +++ b/lib/controller/themes/themes.dart @@ -2,146 +2,89 @@ import 'package:flutter/material.dart'; import 'package:sefer_driver/constant/style.dart'; import '../../constant/colors.dart'; -ThemeData lightThemeEnglish = ThemeData( +ThemeData _createTheme({ + required Brightness brightness, + required String fontFamily, + required Color scaffoldBackgroundColor, + required Color cardColor, + required Color dividerColor, +}) { + return ThemeData( + brightness: brightness, + fontFamily: fontFamily, + scaffoldBackgroundColor: scaffoldBackgroundColor, + cardColor: cardColor, + dividerColor: dividerColor, + primaryColor: AppColor.primaryColor, + colorScheme: ColorScheme.fromSeed( + seedColor: AppColor.primaryColor, + brightness: brightness, + primary: AppColor.primaryColor, + surface: cardColor, + background: scaffoldBackgroundColor, + error: AppColor.redColor, + ), + textTheme: TextTheme( + displaySmall: AppStyle.title.copyWith(color: AppColor.writeColor), + displayLarge: AppStyle.headTitle.copyWith(color: AppColor.writeColor), + displayMedium: AppStyle.headTitle2.copyWith(color: AppColor.writeColor), + bodyLarge: AppStyle.title.copyWith(color: AppColor.writeColor), + bodyMedium: AppStyle.subtitle.copyWith(color: AppColor.writeColor), + titleLarge: AppStyle.headTitle2.copyWith(color: AppColor.writeColor), + ), + appBarTheme: AppBarTheme( + elevation: 0, + backgroundColor: scaffoldBackgroundColor, + centerTitle: true, + iconTheme: const IconThemeData(color: AppColor.primaryColor), + titleTextStyle: AppStyle.headTitle2.copyWith(color: AppColor.writeColor), + ), + dialogTheme: DialogThemeData( + backgroundColor: cardColor, + contentTextStyle: AppStyle.title.copyWith(color: AppColor.writeColor), + titleTextStyle: AppStyle.headTitle2.copyWith(color: AppColor.writeColor), + shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(16)), + ), + cardTheme: CardThemeData( + color: cardColor, + elevation: 2, + shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(12)), + ), + dividerTheme: DividerThemeData( + color: dividerColor, + thickness: 1, + ), + ); +} + +ThemeData lightThemeEnglish = _createTheme( brightness: Brightness.light, fontFamily: "SFPro", - textTheme: TextTheme( - displaySmall: AppStyle.title, - displayLarge: AppStyle.headTitle, - displayMedium: AppStyle.headTitle2, - bodyLarge: AppStyle.title, - bodyMedium: AppStyle.subtitle, - ), - primarySwatch: Colors.blue, - dialogTheme: DialogThemeData( - backgroundColor: AppColor.secondaryColor, - contentTextStyle: AppStyle.title, - titleTextStyle: AppStyle.headTitle2, - ), - appBarTheme: AppBarTheme( - elevation: 0, - color: AppColor.secondaryColor, - centerTitle: true, - iconTheme: const IconThemeData( - color: AppColor.primaryColor, - ), - toolbarTextStyle: TextTheme( - titleSmall: AppStyle.subtitle, - headlineSmall: AppStyle.title, - titleLarge: AppStyle.headTitle2, - ).bodyMedium, - titleTextStyle: TextTheme( - titleSmall: AppStyle.subtitle, - headlineSmall: AppStyle.title, - titleLarge: AppStyle.headTitle2, - ).titleLarge, - ), + scaffoldBackgroundColor: Colors.white, + cardColor: Colors.white, + dividerColor: Colors.black12, ); -ThemeData darkThemeEnglish = ThemeData( +ThemeData darkThemeEnglish = _createTheme( brightness: Brightness.dark, fontFamily: "SFPro", - textTheme: TextTheme( - displaySmall: AppStyle.title, - displayLarge: AppStyle.headTitle, - displayMedium: AppStyle.headTitle2, - bodyLarge: AppStyle.title, - bodyMedium: AppStyle.subtitle, - ), - primarySwatch: Colors.blue, - dialogTheme: DialogThemeData( - backgroundColor: AppColor.secondaryColor, - contentTextStyle: AppStyle.title, - titleTextStyle: AppStyle.headTitle2, - ), - appBarTheme: AppBarTheme( - elevation: 0, - color: AppColor.secondaryColor, - centerTitle: true, - iconTheme: const IconThemeData( - color: AppColor.primaryColor, - ), - toolbarTextStyle: TextTheme( - titleSmall: AppStyle.subtitle, - headlineSmall: AppStyle.title, - titleLarge: AppStyle.headTitle2, - ).bodyMedium, - titleTextStyle: TextTheme( - titleSmall: AppStyle.subtitle, - headlineSmall: AppStyle.title, - titleLarge: AppStyle.headTitle2, - ).titleLarge, - ), + scaffoldBackgroundColor: const Color(0xFF121212), + cardColor: const Color(0xFF1E1E1E), + dividerColor: Colors.white10, ); -ThemeData lightThemeArabic = ThemeData( +ThemeData lightThemeArabic = _createTheme( brightness: Brightness.light, fontFamily: 'SFArabic', - textTheme: TextTheme( - displaySmall: AppStyle.title, - displayLarge: AppStyle.headTitle, - displayMedium: AppStyle.headTitle2, - bodyLarge: AppStyle.title, - bodyMedium: AppStyle.subtitle, - ), - primarySwatch: Colors.blue, - dialogTheme: DialogThemeData( - backgroundColor: AppColor.secondaryColor, - contentTextStyle: AppStyle.title, - titleTextStyle: AppStyle.headTitle2, - ), - appBarTheme: AppBarTheme( - elevation: 0, - color: AppColor.secondaryColor, - centerTitle: true, - iconTheme: const IconThemeData( - color: AppColor.primaryColor, - ), - toolbarTextStyle: TextTheme( - titleSmall: AppStyle.subtitle, - headlineSmall: AppStyle.title, - titleLarge: AppStyle.headTitle2, - ).bodyMedium, - titleTextStyle: TextTheme( - titleSmall: AppStyle.subtitle, - headlineSmall: AppStyle.title, - titleLarge: AppStyle.headTitle2, - ).titleLarge, - ), + scaffoldBackgroundColor: Colors.white, + cardColor: Colors.white, + dividerColor: Colors.black12, ); -ThemeData darkThemeArabic = ThemeData( +ThemeData darkThemeArabic = _createTheme( brightness: Brightness.dark, fontFamily: 'SFArabic', - textTheme: TextTheme( - displaySmall: AppStyle.title, - displayLarge: AppStyle.headTitle, - displayMedium: AppStyle.headTitle2, - bodyLarge: AppStyle.title, - bodyMedium: AppStyle.subtitle, - ), - primarySwatch: Colors.blue, - dialogTheme: DialogThemeData( - backgroundColor: AppColor.secondaryColor, - contentTextStyle: AppStyle.title, - titleTextStyle: AppStyle.headTitle2, - ), - appBarTheme: AppBarTheme( - elevation: 0, - color: AppColor.secondaryColor, - centerTitle: true, - iconTheme: const IconThemeData( - color: AppColor.primaryColor, - ), - toolbarTextStyle: TextTheme( - titleSmall: AppStyle.subtitle, - headlineSmall: AppStyle.title, - titleLarge: AppStyle.headTitle2, - ).bodyMedium, - titleTextStyle: TextTheme( - titleSmall: AppStyle.subtitle, - headlineSmall: AppStyle.title, - titleLarge: AppStyle.headTitle2, - ).titleLarge, - ), + scaffoldBackgroundColor: const Color(0xFF121212), + cardColor: const Color(0xFF1E1E1E), + dividerColor: Colors.white10, ); diff --git a/lib/device_compatibility_page.dart b/lib/device_compatibility_page.dart index 052e11d..48f7eda 100644 --- a/lib/device_compatibility_page.dart +++ b/lib/device_compatibility_page.dart @@ -67,7 +67,7 @@ class CompatibilityDetailCard extends StatelessWidget { color: Colors.grey.shade800, fontWeight: FontWeight.w600)), ), - Text("$achievedScore/$maxScore نقطة", + Text("$achievedScore/$maxScore ${"points".tr}", style: TextStyle( color: color, fontWeight: FontWeight.bold, fontSize: 14)), ], @@ -130,10 +130,10 @@ class _DeviceCompatibilityPageState extends State { } String _getScoreMessage(int value) { - if (value >= 80) return "جهازك يقدم أداءً ممتازاً"; - if (value >= 60) return "جهازك جيد ومناسب جداً"; - if (value >= 40) return "متوافق، قد تلاحظ بعض البطء"; - return "قد لا يعمل التطبيق بالشكل الأمثل"; + if (value >= 80) return "Your device provides excellent performance".tr; + if (value >= 60) return "Your device is good and very suitable".tr; + if (value >= 40) return "Compatible, you may notice some slowness".tr; + return "The app may not work optimally".tr; } @override @@ -143,8 +143,8 @@ class _DeviceCompatibilityPageState extends State { return Scaffold( backgroundColor: const Color(0xFFF7F8FC), appBar: AppBar( - title: const Text("توافق الجهاز", - style: TextStyle( + title: Text("Device Compatibility".tr, + style: const TextStyle( color: Colors.black87, fontWeight: FontWeight.bold)), centerTitle: true, backgroundColor: Colors.transparent, @@ -159,12 +159,12 @@ class _DeviceCompatibilityPageState extends State { children: [ const Icon(Icons.phone_iphone, size: 56, color: Colors.grey), const SizedBox(height: 12), - const Text("هذه الصفحة متاحة لأجهزة أندرويد فقط", + Text("This page is only available for Android devices".tr, style: TextStyle(fontSize: 16)), const SizedBox(height: 8), ElevatedButton( onPressed: () => Get.back(), - child: const Text("رجوع"), + child: Text("Back".tr), ), ], ), @@ -176,9 +176,9 @@ class _DeviceCompatibilityPageState extends State { return Scaffold( backgroundColor: const Color(0xFFF7F8FC), appBar: AppBar( - title: const Text("توافق الجهاز", + title: Text("Device Compatibility".tr, style: - TextStyle(color: Colors.black87, fontWeight: FontWeight.bold)), + const TextStyle(color: Colors.black87, fontWeight: FontWeight.bold)), centerTitle: true, backgroundColor: Colors.transparent, elevation: 0, @@ -208,7 +208,7 @@ class _DeviceCompatibilityPageState extends State { elevation: 0, ), onPressed: () => Get.back(), - child: const Text("المتابعة إلى التطبيق", + child: Text("Continue to App".tr, style: TextStyle( fontSize: 16, fontWeight: FontWeight.bold, diff --git a/lib/env/env.dart b/lib/env/env.dart index 23da2e5..f4ba25d 100755 --- a/lib/env/env.dart +++ b/lib/env/env.dart @@ -12,6 +12,9 @@ abstract class Env { @EnviedField(varName: 'mapAPIKEYIOS', obfuscate: true) static final String mapAPIKEYIOS = _Env.mapAPIKEYIOS; + @EnviedField(varName: 'mapSaasKey', obfuscate: true) + static final String mapSaasKey = _Env.mapSaasKey; + @EnviedField(varName: 'email', obfuscate: true) static final String email = _Env.email; diff --git a/lib/env/env.g.dart b/lib/env/env.g.dart index 6f461db..d64ef06 100644 --- a/lib/env/env.g.dart +++ b/lib/env/env.g.dart @@ -11,71 +11,71 @@ part of 'env.dart'; // generated_from: .env final class _Env { static const List _enviedkeybasicAuthCredentials = [ - 3119662252, - 308341763, - 2015166535, - 3074198305, - 3116745311, - 1299432569, - 3498707833, - 1419509341, - 1523398991, - 134223789, - 1804990251, - 914766455, - 143847418, - 1072907411, - 2552437356, - 183644249, - 2324763500, - 2016445316, - 3005673044, - 3914070117, - 2510335365, - 219328798, - 1940125228, - 3171255662, - 3215469540, - 1508139915, - 3409555914, - 700823808, - 1883137536, - 1425916503, - 586193771, + 2990589258, + 4231032652, + 1960581160, + 2523752965, + 2254376721, + 878556145, + 209406639, + 1445479573, + 2460208703, + 3167966191, + 967159540, + 3362566192, + 216494215, + 632431381, + 1662586490, + 3335640140, + 420776473, + 2068738655, + 1903611039, + 3805653015, + 2621026051, + 164883116, + 2242456407, + 1067357525, + 4097827574, + 2277905079, + 829897287, + 2991445945, + 3086372913, + 2504507883, + 3445146738, ]; static const List _envieddatabasicAuthCredentials = [ - 3119662299, - 308341874, - 2015166505, - 3074198348, - 3116745262, - 1299432456, - 3498707722, - 1419509303, - 1523398966, - 134223835, - 1804990300, - 914766365, - 143847308, - 1072907433, - 2552437250, - 183644200, - 2324763422, - 2016445405, - 3005672990, - 3914070069, - 2510335429, - 219328815, - 1940125211, - 3171255645, - 3215469523, - 1508139987, - 3409555896, - 700823896, - 1883137644, - 1425916437, - 586193671, + 2990589245, + 4231032637, + 1960581190, + 2523753064, + 2254376800, + 878556032, + 209406684, + 1445479679, + 2460208710, + 3167966105, + 967159427, + 3362566234, + 216494321, + 632431407, + 1662586388, + 3335640125, + 420776555, + 2068738566, + 1903611093, + 3805653063, + 2621026115, + 164883101, + 2242456416, + 1067357542, + 4097827521, + 2277905135, + 829897269, + 2991445985, + 3086372957, + 2504507817, + 3445146654, ]; static final String basicAuthCredentials = String.fromCharCodes( @@ -88,49 +88,49 @@ final class _Env { _enviedkeybasicAuthCredentials[i])); static const List _enviedkeymapKeyOsm = [ - 1061947572, - 1154666970, - 1788134034, - 3441878628, - 4093708564, - 2488457761, - 3745638123, - 3197059312, - 721782794, - 1906372427, - 673202838, - 3487712682, - 3536566818, - 748259304, - 2578078811, - 896175043, - 2615577190, - 1895427507, - 908404633, - 3711829356, + 208493858, + 3350167483, + 1302125882, + 1192647419, + 2404732788, + 2076531854, + 1641419367, + 1819498687, + 2756794616, + 2271265160, + 410515984, + 2946375390, + 1516099909, + 475427434, + 1207502576, + 3766393267, + 507168482, + 2869547486, + 2351158037, + 442607028, ]; static const List _envieddatamapKeyOsm = [ - 1061947609, - 1154666939, - 1788134142, - 3441878528, - 4093708657, - 2488457815, - 3745638059, - 3197059202, - 721782885, - 1906372414, - 673202914, - 3487712719, - 3536566799, - 748259212, - 2578078772, - 896175023, - 2615577098, - 1895427538, - 908404715, - 3711829279, + 208493903, + 3350167514, + 1302125910, + 1192647327, + 2404732689, + 2076531960, + 1641419303, + 1819498701, + 2756794519, + 2271265277, + 410516068, + 2946375355, + 1516099944, + 475427342, + 1207502495, + 3766393311, + 507168398, + 2869547455, + 2351158119, + 442607047, ]; static final String mapKeyOsm = String.fromCharCodes(List.generate( @@ -140,87 +140,87 @@ final class _Env { ).map((int i) => _envieddatamapKeyOsm[i] ^ _enviedkeymapKeyOsm[i])); static const List _enviedkeymapAPIKEYIOS = [ - 2151695670, - 1054308886, - 1870950936, - 88263793, - 4089069531, - 3499077188, - 3476458014, - 3168336394, - 2909695516, - 4260265062, - 91281871, - 2357498250, - 1465939768, - 3162694029, - 2677109738, - 15978042, - 3254043132, - 218012237, - 2437645091, - 2891409295, - 31581396, - 277277467, - 3709929938, - 4286881507, - 819136536, - 172598488, - 2414274591, - 3522656593, - 1841701930, - 2616372343, - 2715457719, - 570092248, - 3920129267, - 2496493162, - 4138678271, - 3433391998, - 939132383, - 3897546811, - 2677079369, + 1993287479, + 2842696658, + 1670961530, + 571188323, + 3566057664, + 79810790, + 3095519207, + 2702178760, + 3505088102, + 1332839557, + 1099099824, + 3874657948, + 101827659, + 3612803306, + 3915111541, + 2547960786, + 1983753195, + 953785961, + 399710458, + 3520013645, + 3474320879, + 191306094, + 3407917650, + 3851143733, + 1603590875, + 1332796221, + 1989733533, + 2964509008, + 2772496351, + 4248238702, + 2069369743, + 1776566496, + 200328467, + 2798520895, + 68312770, + 2692339723, + 3680295276, + 1655200211, + 182747085, ]; static const List _envieddatamapAPIKEYIOS = [ - 2151695735, - 1054308959, - 1870951010, - 88263696, - 4089069448, - 3499077181, - 3476458074, - 3168336494, - 2909695597, - 4260264973, - 91281795, - 2357498311, - 1465939835, - 3162694143, - 2677109659, - 15978064, - 3254043050, - 218012223, - 2437645133, - 2891409336, - 31581324, - 277277558, - 3709929907, - 4286881415, - 819136593, - 172598441, - 2414274662, - 3522656575, - 1841701971, - 2616372248, - 2715457781, - 570092217, - 3920129220, - 2496493114, - 4138678221, - 3433391945, - 939132304, - 3897546846, - 2677079300, + 1993287542, + 2842696603, + 1670961408, + 571188226, + 3566057619, + 79810719, + 3095519139, + 2702178732, + 3505088023, + 1332839662, + 1099099900, + 3874658001, + 101827592, + 3612803224, + 3915111428, + 2547960760, + 1983753149, + 953785883, + 399710356, + 3520013690, + 3474320823, + 191305987, + 3407917619, + 3851143761, + 1603590802, + 1332796236, + 1989733604, + 2964508990, + 2772496294, + 4248238593, + 2069369805, + 1776566401, + 200328484, + 2798520943, + 68312816, + 2692339772, + 3680295203, + 1655200182, + 182747008, ]; static final String mapAPIKEYIOS = String.fromCharCodes(List.generate( @@ -229,40 +229,106 @@ final class _Env { growable: false, ).map((int i) => _envieddatamapAPIKEYIOS[i] ^ _enviedkeymapAPIKEYIOS[i])); + static const List _enviedkeymapSaasKey = [ + 1152515337, + 612278083, + 456797620, + 1338651092, + 3400820223, + 2372440906, + 2162269364, + 433812069, + 310318919, + 399053120, + 2870991475, + 561936812, + 2884617529, + 3677057575, + 622986133, + 1023997185, + 4142318139, + 2210519462, + 1747028641, + 1022530233, + 3838726965, + 4226461494, + 2617030857, + 3800004349, + 1091840269, + 4214668900, + 2855689796, + ]; + + static const List _envieddatamapSaasKey = [ + 1152515424, + 612278061, + 456797675, + 1338651117, + 3400820171, + 2372440957, + 2162269324, + 433811975, + 310318964, + 399053170, + 2870991435, + 561936799, + 2884617487, + 3677057603, + 622986148, + 1023997240, + 4142318168, + 2210519488, + 1747028679, + 1022530190, + 3838726918, + 4226461522, + 2617030827, + 3800004302, + 1091840317, + 4214668882, + 2855689847, + ]; + + static final String mapSaasKey = String.fromCharCodes(List.generate( + _envieddatamapSaasKey.length, + (int i) => i, + growable: false, + ).map((int i) => _envieddatamapSaasKey[i] ^ _enviedkeymapSaasKey[i])); + static const List _enviedkeyemail = [ - 2147741481, - 3022601776, - 627913709, - 1413637414, - 2903845769, - 3930413881, - 1191268173, - 10965538, - 598619137, - 3142526324, - 3745702052, - 4136725053, - 645579098, - 2625103278, - 60371886, + 3507274737, + 3264718769, + 2759567973, + 540972372, + 1397631761, + 3474581669, + 4105157398, + 3364497626, + 1705013345, + 1289768273, + 1175569918, + 4058620033, + 1812845490, + 971134022, + 1377684042, ]; static const List _envieddataemail = [ - 2147741545, - 3022601817, - 627913603, - 1413637458, - 2903845864, - 3930413909, - 1191268136, - 10965587, - 598619232, - 3142526212, - 3745702100, - 4136725011, - 645579065, - 2625103297, - 60371907, + 3507274673, + 3264718808, + 2759567883, + 540972320, + 1397631856, + 3474581705, + 4105157491, + 3364497579, + 1705013248, + 1289768225, + 1175569806, + 4058620079, + 1812845521, + 971133993, + 1377684007, ]; static final String email = String.fromCharCodes(List.generate( @@ -272,65 +338,65 @@ final class _Env { ).map((int i) => _envieddataemail[i] ^ _enviedkeyemail[i])); static const List _enviedkeybasicCompareFaces = [ - 2296343195, - 3793709033, - 3210279611, - 1382972713, - 2835826086, - 3832217435, - 2156224674, - 3937478928, - 3462847201, - 2788598618, - 125364131, - 1409664400, - 3732768056, - 2966368179, - 3018233973, - 4115898929, - 2270981991, - 1746945700, - 2357950794, - 2815430643, - 1906731934, - 2478074234, - 162304442, - 975875308, - 3384793524, - 2071543057, - 2278014588, - 356216334, + 2948603683, + 1419621286, + 4018212457, + 1121620281, + 221710536, + 3586502550, + 4100318555, + 1770443814, + 4219804944, + 2878283764, + 1552437214, + 185983079, + 2706699511, + 336330255, + 772190043, + 4294872002, + 2853475718, + 88610192, + 2151488097, + 384987953, + 1044193006, + 2957091184, + 33186055, + 1349225194, + 233154710, + 3542630164, + 42738728, + 981646969, ]; static const List _envieddatabasicCompareFaces = [ - 2296343265, - 3793708931, - 3210279630, - 1382972739, - 2835826122, - 3832217390, - 2156224723, - 3937479030, - 3462847121, - 2788598576, - 125364121, - 1409664510, - 3732768073, - 2966368193, - 3018233900, - 4115898971, - 2270981911, - 1746945764, - 2357950843, - 2815430596, - 1906731949, - 2478074189, - 162304482, - 975875230, - 3384793580, - 2071543165, - 2278014526, - 356216418, + 2948603737, + 1419621324, + 4018212380, + 1121620307, + 221710500, + 3586502627, + 4100318506, + 1770443840, + 4219805024, + 2878283678, + 1552437220, + 185982985, + 2706699398, + 336330365, + 772189954, + 4294871976, + 2853475830, + 88610256, + 2151488080, + 384987910, + 1044192989, + 2957091143, + 33186143, + 1349225112, + 233154766, + 3542630264, + 42738794, + 981646869, ]; static final String basicCompareFaces = String.fromCharCodes( @@ -342,129 +408,129 @@ final class _Env { _envieddatabasicCompareFaces[i] ^ _enviedkeybasicCompareFaces[i])); static const List _enviedkeybasicCompareFacesURL = [ - 3220389880, - 1896092538, - 3417329582, - 3357206126, - 441079354, - 2518376273, - 3594693806, - 3874086501, - 1406926161, - 1376676982, - 2858004954, - 3740036395, - 2372915802, - 3729233843, - 3036425821, - 4094260731, - 735548888, - 1065243742, - 2676762486, - 2506900532, - 155001808, - 2207687783, - 3288666464, - 3285691569, - 2353472176, - 1047162643, - 961443648, - 2756212231, - 2296500208, - 276303533, - 578074949, - 1168642108, - 2942379661, - 3490271822, - 384214389, - 270731729, - 3394813339, - 895915516, - 3882278717, - 1629572933, - 3416911057, - 1915184088, - 3257220882, - 818616196, - 3018470266, - 4178652202, - 197820745, - 3699620454, - 360071303, - 1575552250, - 1325150033, - 2257081226, - 349100155, - 3414562195, - 3728569996, - 1634090533, - 812808253, - 2152104178, - 278583218, - 3758430418, + 2854755713, + 1887284855, + 1632945913, + 2043352776, + 1401670511, + 1321413758, + 1358501179, + 2319315657, + 558802519, + 3435990745, + 428209181, + 3549430154, + 3921046816, + 934116203, + 2292268309, + 418459468, + 1236079019, + 3607461187, + 717710438, + 2017397595, + 790967261, + 1378226043, + 2442486882, + 4012899028, + 3036106618, + 2275089852, + 3127783148, + 3803324082, + 365135232, + 2935582689, + 533078618, + 1246951539, + 1022728134, + 1082693697, + 2117237320, + 843581020, + 469547132, + 1527001694, + 882161199, + 512357744, + 2874034311, + 2004724773, + 1074917563, + 2468682342, + 1519005631, + 1769336345, + 2360821585, + 1875392094, + 2000498564, + 3360359338, + 8254159, + 3999404370, + 803153196, + 2577956679, + 2960422859, + 3005812287, + 4027088979, + 3289099019, + 323778300, + 2014675141, ]; static const List _envieddatabasicCompareFacesURL = [ - 3220389776, - 1896092430, - 3417329626, - 3357206046, - 441079369, - 2518376299, - 3594693761, - 3874086474, - 1406926135, - 1376676887, - 2858004921, - 3740036430, - 2372915831, - 3729233879, - 3036425784, - 4094260623, - 735548861, - 1065243709, - 2676762370, - 2506900505, - 155001782, - 2207687761, - 3288666457, - 3285691523, - 2353472132, - 1047162656, - 961443705, - 2756212277, - 2296500115, - 276303513, - 578074918, - 1168642059, - 2942379683, - 3490271782, - 384214288, - 270731683, - 3394813428, - 895915415, - 3882278728, - 1629572900, - 3416911009, - 1915184040, - 3257220924, - 818616295, - 3018470165, - 4178652231, - 197820774, - 3699620357, - 360071400, - 1575552151, - 1325149985, - 2257081323, - 349100041, - 3414562294, - 3728570067, - 1634090563, - 812808284, - 2152104081, - 278583255, - 3758430369, + 2854755817, + 1887284739, + 1632945805, + 2043352760, + 1401670428, + 1321413700, + 1358501140, + 2319315686, + 558802481, + 3435990712, + 428209278, + 3549430255, + 3921046797, + 934116111, + 2292268400, + 418459448, + 1236079054, + 3607461152, + 717710354, + 2017397622, + 790967227, + 1378225997, + 2442486875, + 4012899046, + 3036106574, + 2275089807, + 3127783125, + 3803324032, + 365135331, + 2935582677, + 533078585, + 1246951492, + 1022728168, + 1082693673, + 2117237293, + 843580974, + 469547027, + 1527001653, + 882161242, + 512357649, + 2874034423, + 2004724821, + 1074917525, + 2468682245, + 1519005648, + 1769336436, + 2360821630, + 1875392061, + 2000498667, + 3360359367, + 8254143, + 3999404339, + 803153246, + 2577956642, + 2960422804, + 3005812313, + 4027088946, + 3289099112, + 323778201, + 2014675126, ]; static final String basicCompareFacesURL = String.fromCharCodes( @@ -477,91 +543,91 @@ final class _Env { _enviedkeybasicCompareFacesURL[i])); static const List _enviedkeyaccountSIDTwillo = [ - 2934490457, - 3936142346, - 881081269, - 1663353371, - 921098405, - 4272650692, - 321567310, - 1386434013, - 163841393, - 3889058183, - 137435408, - 4232722058, - 868241344, - 73821594, - 1530947120, - 2076743619, - 4167846303, - 4193048880, - 522420519, - 2015502862, - 1500940268, - 2086238974, - 3838402101, - 3109767109, - 1200865270, - 3819869314, - 686415089, - 262105312, - 1510999968, - 3754501979, - 2384065386, - 1622954290, - 2430377995, - 3917284516, - 3696201508, - 1616091150, - 4120537433, - 261073639, - 2271794810, - 964848725, - 1988507286, + 456932435, + 2394750284, + 4284181365, + 3031678563, + 317926429, + 795284051, + 1239229608, + 3318462614, + 2466998260, + 2588715560, + 343407178, + 3169471995, + 2183907407, + 882711255, + 405145478, + 3363213383, + 2516552357, + 1555439561, + 2937131364, + 370795761, + 1214940587, + 1718892463, + 1547436541, + 4257171120, + 157772679, + 4064158261, + 272246761, + 2228064589, + 2398808887, + 2887476963, + 431763950, + 3302452238, + 2710243705, + 4227149070, + 3254488084, + 3117709212, + 42590298, + 2445946994, + 3175762607, + 1938889012, + 1843269736, ]; static const List _envieddataaccountSIDTwillo = [ - 2934490376, - 3936142412, - 881081293, - 1663353387, - 921098452, - 4272650685, - 321567354, - 1386434024, - 163841351, - 3889058285, - 137435493, - 4232722144, - 868241395, - 73821602, - 1530947075, - 2076743597, - 4167846310, - 4193048904, - 522420562, - 2015502967, - 1500940254, - 2086238927, - 3838402060, - 3109767153, - 1200865159, - 3819869364, - 686415043, - 262105305, - 1511000017, - 3754501994, - 2384065292, - 1622954328, - 2430378043, - 3917284573, - 3696201491, - 1616091222, - 4120537387, - 261073599, - 2271794710, - 964848663, - 1988507386, + 456932354, + 2394750218, + 4284181261, + 3031678547, + 317926508, + 795284010, + 1239229596, + 3318462627, + 2466998210, + 2588715586, + 343407167, + 3169471889, + 2183907452, + 882711279, + 405145525, + 3363213353, + 2516552348, + 1555439537, + 2937131281, + 370795656, + 1214940569, + 1718892446, + 1547436484, + 4257171076, + 157772790, + 4064158211, + 272246747, + 2228064628, + 2398808902, + 2887476946, + 431763848, + 3302452324, + 2710243657, + 4227149175, + 3254488099, + 3117709252, + 42590248, + 2445946922, + 3175762627, + 1938889078, + 1843269636, ]; static final String accountSIDTwillo = String.fromCharCodes( @@ -573,325 +639,325 @@ final class _Env { _envieddataaccountSIDTwillo[i] ^ _enviedkeyaccountSIDTwillo[i])); static const List _enviedkeyserverAPI = [ - 1640356061, - 1109713156, - 2676970884, - 2982808124, - 1196683320, - 399162653, - 2690719682, - 561644024, - 3698357235, - 1971775398, - 1362089888, - 4098281206, - 486435093, - 585479448, - 3818661702, - 2914085612, - 2833995326, - 2692526444, - 742619015, - 3883726605, - 159594704, - 2309127406, - 3071231165, - 3378547787, - 3529813488, - 32472595, - 2216397977, - 4065490337, - 512551596, - 1762705486, - 1312444727, - 4004186931, - 1195867106, - 1348768429, - 2659874408, - 3475793726, - 713263331, - 4053902124, - 758986971, - 3922301125, - 112346051, - 2139879761, - 3257242346, - 3783957319, - 4081680390, - 1145172966, - 536303801, - 2395235213, - 2439144280, - 4194487110, - 738798915, - 714005630, - 2227714079, - 490748580, - 3967642326, - 1335235689, - 3716697848, - 3469220326, - 2049368821, - 1222309652, - 396757610, - 2968901244, - 3259975456, - 911418890, - 1511077843, - 2132052817, - 2163537371, - 2156825771, - 125152325, - 1561751260, - 1215688927, - 2337973320, - 3930935933, - 3511774723, - 1393568631, - 2897632439, - 2748168494, - 1456172952, - 3811164034, - 2754770638, - 3017984324, - 775114840, - 868207674, - 3891231838, - 401111215, - 3564618284, - 3968379529, - 642347579, - 1486887337, - 2340292518, - 2747818257, - 3203274707, - 2116091974, - 3431377939, - 3119843715, - 782479150, - 2682645724, - 541595749, - 1473082883, - 3224408816, - 2484627503, - 735549272, - 708450675, - 3539721658, - 4199367853, - 3417820545, - 3923134626, - 3216841440, - 1932051787, - 3967046873, - 2641958581, - 812947720, - 3256507827, - 2572765859, - 3748554398, - 1401083577, - 3309283985, - 2574584580, - 3546476886, - 953866243, - 2030531099, - 2826460289, - 3466363490, - 1508488521, - 1201071975, - 4112225860, - 401188585, - 3688992142, - 1824033041, - 1930822798, - 1676220458, - 2359239267, - 3753171603, - 1244067415, - 4092764634, - 4087602641, - 3996943514, - 571326231, - 579542552, - 855778328, - 1093105414, - 3867656545, - 3362611777, - 4176204033, - 2521927795, - 2975541729, - 586837626, - 1908427057, - 2733255700, - 1747354993, - 2588114028, - 726159856, - 1382633340, - 2516901742, - 4034529237, - 1689757631, - 3013787146, - 3644603595, + 1005134932, + 1560489340, + 4098840392, + 3030460720, + 3622847797, + 3846771692, + 582467599, + 880769766, + 2494391371, + 1289393858, + 126950013, + 2845165886, + 537516254, + 1707623060, + 4276394812, + 4256457332, + 874583387, + 1269844682, + 2063301980, + 2668594661, + 3885892954, + 1857040947, + 1850528889, + 2713517713, + 63446137, + 2754029620, + 1046857764, + 3399318423, + 3486594721, + 161127469, + 4235234329, + 2773344728, + 3452287862, + 2595057183, + 2390888428, + 3529759810, + 2409404352, + 509567013, + 2214372144, + 3302492367, + 2363324569, + 1487963109, + 3490085523, + 2081606030, + 2543724561, + 1426083832, + 3306409158, + 3270791487, + 2763579931, + 2633299306, + 346044323, + 2206980053, + 1572988721, + 946909255, + 20944117, + 707333999, + 1961159663, + 1551183522, + 1851873301, + 2877009979, + 894026350, + 2348593380, + 2828334770, + 2840953455, + 732772067, + 2817706016, + 712188444, + 1193775064, + 2230730747, + 103849368, + 2218587188, + 3380734951, + 1215869333, + 1093833403, + 4030587557, + 3939409569, + 2607471171, + 3949623346, + 248554892, + 3901557738, + 1465905942, + 2949209671, + 3815908740, + 2219007948, + 1450938377, + 645332705, + 463508631, + 48953837, + 3488584863, + 1958069811, + 1049855973, + 2166736869, + 2081577687, + 2634302530, + 406655778, + 4161775880, + 3104853321, + 718983767, + 1688636005, + 1534543340, + 3209664154, + 1857359472, + 1196964155, + 1267022738, + 2130001398, + 3131624573, + 1085585504, + 1706787164, + 1564622450, + 2683276590, + 2261265490, + 3891141, + 884631201, + 786167737, + 1563906890, + 3758398083, + 1243568143, + 3106479883, + 2336449031, + 3438787255, + 1012646549, + 1846736197, + 1926956562, + 3802351611, + 1129166102, + 1669918550, + 3772043211, + 2066098146, + 946610675, + 4082556517, + 2182235821, + 3819764613, + 1428211119, + 2368092505, + 1661020050, + 4225190333, + 2910928672, + 1401246065, + 1521236075, + 2816980718, + 3781380495, + 1086765682, + 2119495451, + 1494680386, + 2279679799, + 1317236686, + 546596578, + 3055309067, + 3782330829, + 3155996227, + 3297779951, + 642054514, + 3188931893, + 1812913869, + 4100157596, + 3151517500, + 2129116786, + 412520874, ]; static const List _envieddataserverAPI = [ - 1640355980, - 1109713237, - 2676970965, - 2982808173, - 1196683351, - 399162751, - 2690719633, - 561643914, - 3698357121, - 1971775456, - 1362089929, - 4098281164, - 486435140, - 585479502, - 3818661655, - 2914085588, - 2833995273, - 2692526356, - 742619090, - 3883726650, - 159594666, - 2309127321, - 3071231230, - 3378547773, - 3529813405, - 32472649, - 2216398051, - 4065490427, - 512551624, - 1762705455, - 1312444751, - 4004186950, - 1195867057, - 1348768415, - 2659874318, - 3475793676, - 713263312, - 4053902197, - 758986991, - 3922301096, - 112346041, - 2139879782, - 3257242279, - 3783957309, - 4081680511, - 1145172905, - 536303811, - 2395235327, - 2439144288, - 4194487081, - 738798887, - 714005580, - 2227714173, - 490748630, - 3967642336, - 1335235618, - 3716697761, - 3469220255, - 2049368720, - 1222309714, - 396757515, - 2968901160, - 3259975542, - 911418950, - 1511077780, - 2132052834, - 2163537296, - 2156825752, - 125152301, - 1561751204, - 1215688938, - 2337973266, - 3930935836, - 3511774806, - 1393568526, - 2897632463, - 2748168473, - 1456173053, - 3811164123, - 2754770616, - 3017984261, - 775114753, - 868207690, - 3891231775, - 401111289, - 3564618312, - 3968379586, - 642347600, - 1486887300, - 2340292500, - 2747818281, - 3203274725, - 2116091912, - 3431377991, - 3119843793, - 782479175, - 2682645743, - 541595679, - 1473082992, - 3224408777, - 2484627526, - 735549195, - 708450620, - 3539721684, - 4199367925, - 3417820661, - 3923134714, - 3216841394, - 1932051714, - 3967046817, - 2641958598, - 812947839, - 3256507860, - 2572765840, - 3748554453, - 1401083612, - 3309284082, - 2574584646, - 3546476859, - 953866352, - 2030531191, - 2826460338, - 3466363444, - 1508488497, - 1201071917, - 4112225917, - 401188510, - 3688992193, - 1824033084, - 1930822904, - 1676220515, - 2359239187, - 3753171684, - 1244067362, - 4092764654, - 4087602561, - 3996943596, - 571326240, - 579542652, - 855778419, - 1093105486, - 3867656458, - 3362611737, - 4176204143, - 2521927706, - 2975541652, - 586837506, - 1908427132, - 2733255751, - 1747354933, - 2588113931, - 726159783, - 1382633252, - 2516901660, - 4034529165, - 1689757651, - 3013787208, - 3644603559, + 1005134853, + 1560489261, + 4098840345, + 3030460769, + 3622847834, + 3846771598, + 582467676, + 880769684, + 2494391353, + 1289393796, + 126949908, + 2845165828, + 537516175, + 1707623106, + 4276394861, + 4256457292, + 874583404, + 1269844658, + 2063301897, + 2668594642, + 3885892896, + 1857040964, + 1850528826, + 2713517799, + 63446036, + 2754029678, + 1046857822, + 3399318477, + 3486594757, + 161127500, + 4235234401, + 2773344685, + 3452287781, + 2595057197, + 2390888330, + 3529759856, + 2409404403, + 509567100, + 2214372100, + 3302492322, + 2363324643, + 1487963090, + 3490085598, + 2081606132, + 2543724648, + 1426083767, + 3306409148, + 3270791501, + 2763579939, + 2633299205, + 346044359, + 2206980071, + 1572988755, + 946909237, + 20944067, + 707333924, + 1961159606, + 1551183579, + 1851873392, + 2877010045, + 894026255, + 2348593328, + 2828334820, + 2840953379, + 732772004, + 2817706003, + 712188503, + 1193775083, + 2230730643, + 103849440, + 2218587137, + 3380734909, + 1215869428, + 1093833454, + 4030587612, + 3939409625, + 2607471220, + 3949623383, + 248554965, + 3901557660, + 1465906007, + 2949209630, + 3815908852, + 2219007885, + 1450938463, + 645332613, + 463508700, + 48953734, + 3488584882, + 1958069761, + 1049855965, + 2166736851, + 2081577625, + 2634302486, + 406655856, + 4161775969, + 3104853370, + 718983725, + 1688635926, + 1534543317, + 3209664243, + 1857359395, + 1196964212, + 1267022844, + 2130001326, + 3131624457, + 1085585464, + 1706787086, + 1564622395, + 2683276630, + 2261265441, + 3891122, + 884631238, + 786167690, + 1563906817, + 3758398182, + 1243568236, + 3106479945, + 2336449130, + 3438787268, + 1012646649, + 1846736246, + 1926956612, + 3802351491, + 1129166172, + 1669918575, + 3772043196, + 2066098093, + 946610654, + 4082556435, + 2182235876, + 3819764725, + 1428211160, + 2368092460, + 1661020070, + 4225190381, + 2910928726, + 1401246022, + 1521235983, + 2816980613, + 3781380551, + 1086765593, + 2119495491, + 1494680364, + 2279679838, + 1317236667, + 546596506, + 3055309126, + 3782330782, + 3155996167, + 3297779848, + 642054437, + 3188931949, + 1812913855, + 4100157636, + 3151517520, + 2129116720, + 412520902, ]; static final String serverAPI = String.fromCharCodes(List.generate( @@ -901,87 +967,87 @@ final class _Env { ).map((int i) => _envieddataserverAPI[i] ^ _enviedkeyserverAPI[i])); static const List _enviedkeymapAPIKEY = [ - 3080424818, - 2739058472, - 3527425257, - 4028529921, - 1883553841, - 1686420418, - 489737912, - 1701158226, - 2467593300, - 3324064773, - 365079787, - 2661728615, - 2797847661, - 2685221719, - 411361949, - 2671840178, - 12215258, - 2982665395, - 3589247556, - 80296077, - 1358410178, - 3014948061, - 2896599606, - 3486123033, - 2777191306, - 1549359348, - 2947230529, - 4267926550, - 879333647, - 4285596424, - 1014258202, - 940770413, - 1440464234, - 620322144, - 599361912, - 4026766772, - 3024895214, - 1093526381, - 3971290375, + 3749163921, + 953395003, + 1767412285, + 1335284542, + 3448058466, + 1612945338, + 3586552591, + 2090171087, + 3526723784, + 836102880, + 3996902529, + 3990240209, + 472852632, + 1536052374, + 4113097178, + 3105161968, + 4028683875, + 2889449955, + 2444023830, + 399488591, + 1959492832, + 1605946444, + 1099868321, + 3868069690, + 719352684, + 2370553143, + 3313461066, + 3190231335, + 823295380, + 2453023293, + 3525029148, + 186365312, + 161938621, + 1082257920, + 3631684521, + 3802551583, + 1759892110, + 2198567973, + 349203251, ]; static const List _envieddatamapAPIKEY = [ - 3080424755, - 2739058529, - 3527425171, - 4028530016, - 1883553890, - 1686420411, - 489737977, - 1701158146, - 2467593234, - 3324064855, - 365079732, - 2661728575, - 2797847567, - 2685221637, - 411362003, - 2671840130, - 12215170, - 2982665449, - 3589247601, - 80296132, - 1358410168, - 3014948078, - 2896599671, - 3486123072, - 2777191374, - 1549359262, - 2947230479, - 4267926607, - 879333703, - 4285596495, - 1014258256, - 940770346, - 1440464216, - 620322067, - 599361866, - 4026766821, - 3024895161, - 1093526298, - 3971290442, + 3749163984, + 953395058, + 1767412295, + 1335284575, + 3448058417, + 1612945347, + 3586552654, + 2090171039, + 3526723726, + 836102834, + 3996902622, + 3990240137, + 472852730, + 1536052420, + 4113097108, + 3105161920, + 4028683835, + 2889449913, + 2444023843, + 399488518, + 1959492762, + 1605946495, + 1099868384, + 3868069731, + 719352616, + 2370553181, + 3313460996, + 3190231422, + 823295452, + 2453023354, + 3525029206, + 186365383, + 161938575, + 1082258035, + 3631684507, + 3802551630, + 1759892185, + 2198568018, + 349203326, ]; static final String mapAPIKEY = String.fromCharCodes(List.generate( @@ -991,71 +1057,71 @@ final class _Env { ).map((int i) => _envieddatamapAPIKEY[i] ^ _enviedkeymapAPIKEY[i])); static const List _enviedkeytwilloRecoveryCode = [ - 2045483171, - 1182855780, - 789386213, - 2002339966, - 1656705048, - 1862766833, - 4101318183, - 2476323453, - 2245393184, - 1936324598, - 2108788169, - 2271316230, - 1418427378, - 4094204263, - 58396875, - 1445429874, - 1494352246, - 3012324438, - 203234924, - 397956565, - 1514286967, - 1622482287, - 3599184681, - 980425767, - 3151431159, - 2063433465, - 908361499, - 4225441140, - 1469950094, - 3208438559, - 2343271325, + 1133150946, + 3731109025, + 38905816, + 718416682, + 72532071, + 2888096027, + 2392597488, + 3046514139, + 3282646159, + 3833127298, + 1941254446, + 577842838, + 2655477355, + 2625792459, + 135049165, + 3192772188, + 117259137, + 3454722240, + 4196590134, + 2442365517, + 1899915297, + 208044477, + 3437713724, + 234660955, + 496784642, + 109839164, + 3392287722, + 147447155, + 3541038333, + 2366194776, + 1852630248, ]; static const List _envieddatatwilloRecoveryCode = [ - 2045483232, - 1182855717, - 789386160, - 2002339913, - 1656705057, - 1862766773, - 4101318255, - 2476323373, - 2245393256, - 1936324551, - 2108788107, - 2271316332, - 1418427319, - 4094204254, - 58396827, - 1445429799, - 1494352190, - 3012324450, - 203234857, - 397956481, - 1514286895, - 1622482235, - 3599184762, - 980425855, - 3151431085, - 2063433377, - 908361577, - 4225441068, - 1469950178, - 3208438621, - 2343271409, + 1133150881, + 3731109088, + 38905741, + 718416669, + 72532062, + 2888096095, + 2392597432, + 3046514059, + 3282646215, + 3833127347, + 1941254508, + 577842940, + 2655477294, + 2625792498, + 135049117, + 3192772105, + 117259209, + 3454722292, + 4196590195, + 2442365465, + 1899915385, + 208044521, + 3437713775, + 234660867, + 496784728, + 109839204, + 3392287640, + 147447083, + 3541038225, + 2366194714, + 1852630148, ]; static final String twilloRecoveryCode = String.fromCharCodes( @@ -1067,87 +1133,87 @@ final class _Env { _envieddatatwilloRecoveryCode[i] ^ _enviedkeytwilloRecoveryCode[i])); static const List _enviedkeyauthTokenTwillo = [ - 3482227581, - 931939927, - 1043129482, - 3651497893, - 532948387, - 2286803814, - 4189381494, - 2810745320, - 3305770584, - 2455427241, - 895508588, - 2922817994, - 715264306, - 1709934147, - 3600880978, - 4274898682, - 2817920337, - 2978402175, - 2746255354, - 3739040319, - 2762965271, - 1667025470, - 3382353026, - 1539265897, - 355746883, - 3336334498, - 3174964404, - 2584604919, - 4169347029, - 2269664299, - 2940650629, - 1088566567, - 839701275, - 1983247534, - 3984233019, - 1145706096, - 192818443, - 2770233437, - 2346198292, + 3004859271, + 1630336233, + 3841355683, + 1769616699, + 3998463394, + 49387018, + 2915330775, + 3804652580, + 1045733655, + 1076268615, + 1608894417, + 2841246974, + 3747506980, + 3426803056, + 1523200528, + 3748784460, + 796952965, + 1370470654, + 3007103367, + 2385290238, + 2449012063, + 3891828260, + 2489280733, + 141990754, + 126631019, + 1307652811, + 1680208544, + 4200085184, + 1697029813, + 3638779335, + 1513478808, + 1409532047, + 2856634519, + 340029293, + 1729269177, + 1238906, + 3864127424, + 1348589490, + 2394020807, ]; static const List _envieddataauthTokenTwillo = [ - 3482227530, - 931939943, - 1043129599, - 3651497884, - 532948379, - 2286803724, - 4189381379, - 2810745304, - 3305770602, - 2455427224, - 895508568, - 2922817957, - 715264330, - 1709934139, - 3600880998, - 4274898571, - 2817920353, - 2978402058, - 2746255309, - 3739040267, - 2762965287, - 1667025420, - 3382353082, - 1539265820, - 355746931, - 3336334480, - 3174964357, - 2584604802, - 4169347041, - 2269664346, - 2940650736, - 1088566545, - 839701294, - 1983247606, - 3984233033, - 1145706024, - 192818535, - 2770233375, - 2346198392, + 3004859312, + 1630336217, + 3841355734, + 1769616642, + 3998463386, + 49387104, + 2915330722, + 3804652564, + 1045733669, + 1076268662, + 1608894437, + 2841246865, + 3747507036, + 3426802952, + 1523200548, + 3748784445, + 796953013, + 1370470539, + 3007103408, + 2385290186, + 2449012079, + 3891828246, + 2489280741, + 141990679, + 126631003, + 1307652857, + 1680208529, + 4200085173, + 1697029761, + 3638779318, + 1513478893, + 1409532089, + 2856634530, + 340029237, + 1729269195, + 1238818, + 3864127404, + 1348589552, + 2394020779, ]; static final String authTokenTwillo = String.fromCharCodes(List.generate( @@ -1158,125 +1224,125 @@ final class _Env { (int i) => _envieddataauthTokenTwillo[i] ^ _enviedkeyauthTokenTwillo[i])); static const List _enviedkeychatGPTkey = [ - 2771437346, - 520392228, - 3663326768, - 1645768977, - 1163429156, - 1332493464, - 3598252631, - 363261562, - 2321683879, - 663590875, - 1656338901, - 3309075479, - 3744732575, - 2782197588, - 3478826385, - 34811558, - 316875771, - 2013774969, - 2910176781, - 3146637031, - 1743630880, - 2608270501, - 507919069, - 4269764979, - 4163537191, - 151793743, - 202848436, - 289901185, - 927058643, - 1770573204, - 2777887954, - 3308649974, - 1276086820, - 2836951186, - 2198314295, - 655629671, - 1738057797, - 698775614, - 777256559, - 374793617, - 1221262936, - 3207140318, - 3036584754, - 3677920304, - 1426187892, - 2064482478, - 513295986, - 3751814446, - 1434605073, - 3443454051, - 2241274417, - 536759710, - 4098711781, - 920085498, - 252649970, - 3968748446, - 3641155398, - 2485992921, + 2416394455, + 4207646224, + 451364318, + 1751148387, + 1793170101, + 1153808688, + 1665181598, + 1363057585, + 1281958942, + 2953267701, + 4291609122, + 391939345, + 1466698506, + 975043567, + 4173943065, + 471680351, + 3246510249, + 581988585, + 1269569301, + 1277693123, + 2160496280, + 3830403710, + 290192447, + 3572517057, + 3104592059, + 2711691034, + 3210420648, + 3898634406, + 1200117556, + 1471855331, + 3358235973, + 1601937940, + 340262766, + 3100764827, + 4067273536, + 220494496, + 1500709417, + 2848265704, + 568523249, + 1188867965, + 3977104338, + 2962910239, + 3670669575, + 3953903669, + 2546517718, + 915920601, + 544906495, + 1612949771, + 2854107484, + 1376715240, + 2583633032, + 1319706655, + 3182599914, + 3320970745, + 410565205, + 3075796443, + 163409080, + 3480793232, ]; static const List _envieddatachatGPTkey = [ - 2771437400, - 520392259, - 3663326749, - 1645768997, - 1163429223, - 1332493482, - 3598252641, - 363261451, - 2321683859, - 663590792, - 1656338828, - 3309075568, - 3744732637, - 2782197535, - 3478826432, - 34811587, - 316875699, - 2013774883, - 2910176841, - 3146636950, - 1743630923, - 2608270578, - 507919026, - 4269764868, - 4163537252, - 151793782, - 202848492, - 289901299, - 927058603, - 1770573299, - 2777887879, - 3308649907, - 1276086850, - 2836951239, - 2198314318, - 655629662, - 1738057743, - 698775660, - 777256472, - 374793635, - 1221262890, - 3207140275, - 3036584708, - 3677920353, - 1426187846, - 2064482511, - 513295894, - 3751814476, - 1434605090, - 3443453960, - 2241274459, - 536759785, - 4098711741, - 920085384, - 252649898, - 3968748530, - 3641155332, - 2485992885, + 2416394413, + 4207646327, + 451364339, + 1751148375, + 1793170166, + 1153808642, + 1665181608, + 1363057600, + 1281958954, + 2953267622, + 4291609211, + 391939446, + 1466698568, + 975043492, + 4173943112, + 471680314, + 3246510305, + 581988531, + 1269569361, + 1277693106, + 2160496371, + 3830403625, + 290192464, + 3572517046, + 3104592120, + 2711691043, + 3210420720, + 3898634452, + 1200117580, + 1471855236, + 3358235920, + 1601938001, + 340262664, + 3100764878, + 4067273529, + 220494489, + 1500709475, + 2848265658, + 568523142, + 1188867919, + 3977104288, + 2962910322, + 3670669617, + 3953903716, + 2546517732, + 915920568, + 544906395, + 1612949865, + 2854107503, + 1376715139, + 2583633122, + 1319706728, + 3182599858, + 3320970635, + 410565133, + 3075796407, + 163409146, + 3480793340, ]; static final String chatGPTkey = String.fromCharCodes(List.generate( @@ -1286,133 +1352,133 @@ final class _Env { ).map((int i) => _envieddatachatGPTkey[i] ^ _enviedkeychatGPTkey[i])); static const List _enviedkeytransactionCloude = [ - 3552601392, - 1577423137, - 1785973818, - 743603516, - 3124269689, - 797794403, - 3058739250, - 3584792697, - 424230157, - 1756658327, - 2429369724, - 2675777515, - 960621346, - 1612616501, - 4008522179, - 991039700, - 797221697, - 2678498985, - 1146920791, - 1564426831, - 678469585, - 2146709224, - 4013109938, - 3896340821, - 2778997782, - 116284095, - 208397719, - 2722575295, - 2531240064, - 939941651, - 3760064637, - 3321328165, - 2819773733, - 817815798, - 39775565, - 2811546729, - 2091663403, - 2910821863, - 3500288704, - 2679091248, - 4146668875, - 3796689044, - 1212250069, - 24258362, - 4183962457, - 3238301856, - 1092442450, - 1020843765, - 708779034, - 413156191, - 1529829900, - 686962193, - 1999810608, - 3514217656, - 2125725207, - 1851375082, - 2170030285, - 4120904511, - 2399566823, - 4149333102, - 2673228079, - 3375827762, + 104972405, + 1826297693, + 1459287221, + 2154736453, + 80360576, + 2436225760, + 2045457249, + 2827179769, + 3354072433, + 874378647, + 2367037019, + 1780947382, + 483302838, + 3449149135, + 2783798126, + 4044438444, + 3064643569, + 3842384737, + 1383312024, + 831531354, + 1177680776, + 3893212288, + 1801194511, + 381662534, + 942547124, + 2928750028, + 2252940323, + 2187821390, + 3563626471, + 3842762355, + 3673460491, + 3738513897, + 1139544793, + 1090285057, + 667621217, + 1964282435, + 3595612715, + 2022421282, + 540769717, + 964920402, + 231828114, + 3507064611, + 3682138932, + 3821608737, + 4141658340, + 1083072149, + 329704437, + 867123082, + 3726618878, + 3953403850, + 4155108828, + 4203201177, + 802280593, + 868805140, + 873221332, + 3789877016, + 3430503764, + 1597757757, + 3197502627, + 690312420, + 4212028519, + 2494727343, ]; static const List _envieddatatransactionCloude = [ - 3552601441, - 1577423177, - 1785973849, - 743603531, - 3124269580, - 797794314, - 3058739294, - 3584792598, - 424230240, - 1756658406, - 2429369631, - 2675777412, - 960621387, - 1612616535, - 4008522233, - 991039621, - 797221655, - 2678499046, - 1146920712, - 1564426757, - 678469535, - 2146709169, - 4013110007, - 3896340753, - 2778997796, - 116284135, - 208397760, - 2722575358, - 2531240114, - 939941669, - 3760064548, - 3321328253, - 2819773806, - 817815733, - 39775615, - 2811546685, - 2091663483, - 2910821853, - 3500288665, - 2679091323, - 4146668922, - 3796689104, - 1212249987, - 24258418, - 4183962479, - 3238301939, - 1092442392, - 1020843703, - 708779049, - 413156206, - 1529829954, - 686962210, - 1999810656, - 3514217725, - 2125725222, - 1851375039, - 2170030229, - 4120904525, - 2399566783, - 4149332994, - 2673228141, - 3375827806, + 104972324, + 1826297653, + 1459287254, + 2154736434, + 80360693, + 2436225673, + 2045457165, + 2827179670, + 3354072348, + 874378726, + 2367036984, + 1780947417, + 483302879, + 3449149101, + 2783798100, + 4044438525, + 3064643495, + 3842384686, + 1383312071, + 831531280, + 1177680838, + 3893212377, + 1801194570, + 381662466, + 942547078, + 2928749972, + 2252940404, + 2187821327, + 3563626453, + 3842762309, + 3673460562, + 3738513841, + 1139544722, + 1090285122, + 667621203, + 1964282391, + 3595612795, + 2022421272, + 540769772, + 964920345, + 231828131, + 3507064679, + 3682138978, + 3821608809, + 4141658322, + 1083072198, + 329704383, + 867123144, + 3726618829, + 3953403899, + 4155108754, + 4203201194, + 802280641, + 868805201, + 873221349, + 3789877069, + 3430503692, + 1597757775, + 3197502715, + 690312328, + 4212028453, + 2494727363, ]; static final String transactionCloude = String.fromCharCodes( @@ -1424,85 +1490,85 @@ final class _Env { _envieddatatransactionCloude[i] ^ _enviedkeytransactionCloude[i])); static const List _enviedkeyvisionApi = [ - 2905951827, - 80587575, - 1281388165, - 3950684786, - 4289409921, - 2184820693, - 1571740250, - 3805891557, - 713434862, - 3590025133, - 4097230101, - 1465389943, - 2350497015, - 3922930164, - 524989925, - 4247347078, - 3753788024, - 1019255416, - 1766417757, - 1764121344, - 2949306634, - 1793124845, - 1161986031, - 2487865711, - 1349627846, - 489421602, - 1966851008, - 1647734264, - 88157652, - 1286154285, - 2617793521, - 4115278648, - 817289242, - 2107847429, - 3283281346, - 920896462, - 56255101, - 2646939498, + 1741302926, + 1369682343, + 821460980, + 1051830513, + 2919862686, + 3438453063, + 2671715371, + 1452398431, + 1336412474, + 3657165648, + 4283685939, + 4029139929, + 3503597038, + 2673397830, + 3390940393, + 569888216, + 3542870280, + 650562825, + 1059491019, + 3166341603, + 1126887244, + 3216717204, + 3884902752, + 2900860871, + 4168811805, + 903186961, + 2848149758, + 379201999, + 122429332, + 2546905713, + 2114317373, + 1283138610, + 1903992201, + 3445320823, + 1813353356, + 2328465643, + 1003900043, + 4243089385, ]; static const List _envieddatavisionApi = [ - 2905951840, - 80587591, - 1281388228, - 3950684734, - 4289410034, - 2184820644, - 1571740169, - 3805891510, - 713434807, - 3590025209, - 4097230179, - 1465389837, - 2350496903, - 3922930114, - 524989916, - 4247347159, - 3753787981, - 1019255358, - 1766417680, - 1764121417, - 2949306733, - 1793124751, - 1161985941, - 2487865605, - 1349627777, - 489421588, - 1966850970, - 1647734217, - 88157614, - 1286154310, - 2617793413, - 4115278706, - 817289282, - 2107847543, - 3283281306, - 920896418, - 56255039, - 2646939398, + 1741302973, + 1369682391, + 821460917, + 1051830461, + 2919862765, + 3438453046, + 2671715448, + 1452398348, + 1336412515, + 3657165572, + 4283685957, + 4029139875, + 3503596958, + 2673397872, + 3390940368, + 569888137, + 3542870333, + 650562895, + 1059490950, + 3166341546, + 1126887211, + 3216717302, + 3884902682, + 2900860845, + 4168811866, + 903186983, + 2848149668, + 379202046, + 122429422, + 2546905626, + 2114317385, + 1283138680, + 1903992273, + 3445320709, + 1813353428, + 2328465543, + 1003900105, + 4243089285, ]; static final String visionApi = String.fromCharCodes(List.generate( @@ -1512,237 +1578,237 @@ final class _Env { ).map((int i) => _envieddatavisionApi[i] ^ _enviedkeyvisionApi[i])); static const List _enviedkeysecretKey = [ - 1897247392, - 217578396, - 3604932159, - 1134659259, - 2897406193, - 1488184280, - 4049259204, - 3875891087, - 3010322606, - 37206943, - 953252848, - 1379133342, - 4253178350, - 4032636035, - 997746907, - 3853132720, - 3724927095, - 1073703566, - 1231405363, - 416538930, - 434334881, - 2442654294, - 783465678, - 1765149931, - 1822551630, - 595423032, - 2686979343, - 2427909507, - 2842125004, - 4281459489, - 1212190931, - 241073308, - 3813032922, - 2046681584, - 2780216544, - 3968784326, - 237838622, - 2861620158, - 689234707, - 1176807043, - 2544911948, - 1550170605, - 256897034, - 2296414562, - 991104958, - 3608833136, - 2299076404, - 81353917, - 994449091, - 1238016198, - 3287199912, - 1461535664, - 2331982794, - 2067282912, - 2863702517, - 2997467372, - 288549004, - 3377079802, - 2963986104, - 1673763312, - 2727115833, - 1565853359, - 4157125833, - 205582348, - 1565404605, - 693909204, - 2916827892, - 2906500658, - 2990833311, - 3317096916, - 2084150430, - 2145739880, - 3015638685, - 2798791833, - 3682972144, - 3487457382, - 1089095481, - 3553867414, - 1181926649, - 323585577, - 3471049767, - 4201783155, - 3077850870, - 920422474, - 2631484402, - 3142364886, - 2789472380, - 3256834822, - 3892541713, - 1623565600, - 1675505490, - 2620698177, - 3673524076, - 2080955389, - 1065100826, - 733588683, - 3421102604, - 3124094348, - 2926088386, - 2572020662, - 3629847241, - 3210685751, - 3777869452, - 2312883476, - 4021833219, - 4154438405, - 3802083340, - 1330722458, - 510261681, - 1877461401, - 2507918858, - 3905113533, - 1049690152, - 679185187, + 1141020931, + 4267025674, + 4080510329, + 4150193399, + 2735093354, + 2621290546, + 121037130, + 3182499520, + 818851975, + 469936007, + 2115327889, + 3058940838, + 2303856919, + 1837160568, + 1754593014, + 1445378773, + 575790508, + 3840279630, + 2104659296, + 1290599553, + 2587385639, + 1800703398, + 1562167481, + 3438116986, + 803603244, + 2406819927, + 469443319, + 3817514513, + 1375887914, + 122246261, + 3179534519, + 2446521295, + 138681580, + 2494762507, + 1345361567, + 1858074002, + 4258654412, + 3010221531, + 1796789789, + 3675966273, + 542493077, + 4165940924, + 1020673035, + 2189687906, + 2929998292, + 2012995766, + 1802789896, + 2691195296, + 1937468946, + 2305103148, + 933237897, + 1882678240, + 3929609532, + 4291342037, + 1577648787, + 2526825721, + 587279634, + 2799956502, + 307942410, + 952671055, + 1624133810, + 325853708, + 320167898, + 875912567, + 2524487693, + 2707590551, + 1551395039, + 2926330290, + 3743988078, + 1078384430, + 2355316195, + 954674149, + 2049893036, + 784714057, + 1784490847, + 715470827, + 3346326563, + 3402263239, + 1022904766, + 1889951930, + 1058766175, + 2213488602, + 2834727563, + 4186039233, + 3668805305, + 439543737, + 2834247050, + 794214482, + 3844351555, + 102255751, + 1241146538, + 3233700865, + 236138198, + 846644522, + 113955816, + 2251084795, + 1813250914, + 1159343978, + 2321032496, + 1280320472, + 334502594, + 1333082781, + 1326844431, + 3182190462, + 2200524624, + 136656519, + 1602398972, + 137148346, + 3001505398, + 4130939216, + 408751774, + 485906922, + 3052774372, + 3189555175, ]; static const List _envieddatasecretKey = [ - 1897247450, - 217578491, - 3604932192, - 1134659273, - 2897406110, - 1488184232, - 4049259182, - 3875891152, - 3010322587, - 37206952, - 953252793, - 1379133431, - 4253178264, - 4032636085, - 997746859, - 3853132797, - 3724927025, - 1073703629, - 1231405425, - 416538996, - 434334928, - 2442654309, - 783465613, - 1765149913, - 1822551584, - 595422990, - 2686979398, - 2427909595, - 2842124960, - 4281459532, - 1212190905, - 241073381, - 3813032881, - 2046681472, - 2780216472, - 3968784258, - 237838707, - 2861620201, - 689234730, - 1176807088, - 2544911903, - 1550170554, - 256897081, - 2296414484, - 991104968, - 3608833064, - 2299076444, - 81353867, - 994449147, - 1238016147, - 3287199977, - 1461535625, - 2331982750, - 2067282901, - 2863702451, - 2997467299, - 288549086, - 3377079726, - 2963986159, - 1673763223, - 2727115886, - 1565853404, - 4157125789, - 205582399, - 1565404554, - 693909127, - 2916827776, - 2906500729, - 2990833388, - 3317096859, - 2084150478, - 2145739788, - 3015638762, - 2798791901, - 3682972052, - 3487457301, - 1089095488, - 3553867438, - 1181926536, - 323585659, - 3471049758, - 4201783040, - 3077850756, - 920422407, - 2631484327, - 3142364858, - 2789472265, - 3256834919, - 3892541817, - 1623565651, - 1675505505, - 2620698159, - 3673524028, - 2080955317, - 1065100908, - 733588652, - 3421102670, - 3124094445, - 2926088433, - 2572020613, - 3629847229, - 3210685808, - 3777869543, - 2312883501, - 4021833267, - 4154438515, - 3802083418, - 1330722479, - 510261737, - 1877461483, - 2507918930, - 3905113553, - 1049690218, - 679185231, + 1141021049, + 4267025773, + 4080510246, + 4150193285, + 2735093253, + 2621290562, + 121037088, + 3182499487, + 818852018, + 469936048, + 2115327960, + 3058940879, + 2303856993, + 1837160526, + 1754592902, + 1445378712, + 575790570, + 3840279565, + 2104659234, + 1290599623, + 2587385686, + 1800703381, + 1562167546, + 3438116936, + 803603266, + 2406819937, + 469443262, + 3817514569, + 1375887942, + 122246168, + 3179534557, + 2446521270, + 138681479, + 2494762619, + 1345361639, + 1858074070, + 4258654369, + 3010221452, + 1796789796, + 3675966322, + 542493126, + 4165940971, + 1020673080, + 2189687828, + 2929998242, + 2012995822, + 1802789984, + 2691195286, + 1937468970, + 2305103225, + 933237960, + 1882678233, + 3929609576, + 4291342048, + 1577648853, + 2526825654, + 587279680, + 2799956546, + 307942493, + 952671016, + 1624133861, + 325853823, + 320167822, + 875912516, + 2524487738, + 2707590596, + 1551394987, + 2926330361, + 3743987997, + 1078384481, + 2355316147, + 954674049, + 2049893083, + 784713997, + 1784490811, + 715470744, + 3346326618, + 3402263295, + 1022904783, + 1889951976, + 1058766182, + 2213488553, + 2834727673, + 4186039180, + 3668805356, + 439543765, + 2834247167, + 794214451, + 3844351531, + 102255860, + 1241146521, + 3233700975, + 236138118, + 846644578, + 113955742, + 2251084700, + 1813250848, + 1159343883, + 2321032451, + 1280320491, + 334502582, + 1333082842, + 1326844516, + 3182190407, + 2200524640, + 136656625, + 1602398890, + 137148303, + 3001505326, + 4130939170, + 408751814, + 485906822, + 3052774310, + 3189555083, ]; static final String secretKey = String.fromCharCodes(List.generate( @@ -1752,237 +1818,237 @@ final class _Env { ).map((int i) => _envieddatasecretKey[i] ^ _enviedkeysecretKey[i])); static const List _enviedkeystripePublishableKe = [ - 3015344029, - 1902300912, - 3231276264, - 2899582852, - 3414751774, - 3048820708, - 2938359758, - 788704318, - 4294796360, - 2325760221, - 668283857, - 636763806, - 3864077179, - 3133314794, - 4089620169, - 3406632403, - 3280472031, - 2409112535, - 2544678424, - 1665203319, - 3128827340, - 1399406648, - 3946815802, - 2616613898, - 3466566726, - 2373013996, - 4281236182, - 2468083411, - 2884403903, - 1530695097, - 805787659, - 3042168792, - 3182098175, - 3184387801, - 3301549835, - 790709842, - 2870468675, - 395809535, - 2003672118, - 1126578281, - 1757181511, - 4138109188, - 1865840234, - 1887816887, - 2277201416, - 1049779176, - 1521258483, - 3215554434, - 2764388761, - 3673527134, - 3998906571, - 2749969736, - 2878206854, - 2506898070, - 176673685, - 3294114699, - 2214264080, - 2548204183, - 1871676311, - 2391839696, - 706643988, - 1928371761, - 2725799243, - 1288130685, - 3866430893, - 2983353615, - 1513235401, - 59545031, - 2930203308, - 4261877461, - 3267739874, - 4086881993, - 1081823367, - 2336735749, - 1548494954, - 592296762, - 3720331609, - 384751393, - 459098903, - 512549943, - 892921978, - 2126169168, - 2417982449, - 1964779244, - 3698771298, - 1469035931, - 279639423, - 1150759396, - 1870780507, - 1117929296, - 1985551080, - 1481129344, - 2535738267, - 2431004158, - 864860520, - 279233338, - 3841579015, - 2521511723, - 1271814377, - 2716214256, - 3336718305, - 820289748, - 3131475527, - 3571228207, - 1405139317, - 3227740614, - 3127259714, - 2211824789, - 190660135, - 679540510, - 2132032086, - 645665395, - 2706343520, - 3146400746, + 522377571, + 3586475766, + 214647848, + 4260387696, + 1480565215, + 2034798845, + 3257184644, + 3677546420, + 1222361711, + 3931206542, + 2888965958, + 1081912544, + 3645972815, + 721896297, + 517171822, + 3263412450, + 2131739306, + 3542146847, + 2804799966, + 3529817658, + 802955369, + 1028389670, + 3709968761, + 4230601249, + 4025978127, + 3183765040, + 514239170, + 405727722, + 3537447942, + 1645564231, + 3236193640, + 3270009752, + 154344868, + 3845029725, + 283645841, + 932692489, + 3188766486, + 3474565049, + 1091482645, + 2874146240, + 4211666752, + 3661032656, + 3351107700, + 2531946592, + 441843426, + 1606292894, + 2153941705, + 2779307135, + 3881234199, + 2120857597, + 3955270584, + 6976714, + 4264745703, + 1018483930, + 410676241, + 2125059658, + 2654578488, + 562805931, + 671686985, + 1216456480, + 1262913864, + 3691394124, + 2029626739, + 4290790191, + 238782982, + 2037510266, + 2605350452, + 981979835, + 1117897157, + 3261423589, + 1199292718, + 2418840055, + 741648520, + 822117799, + 1576123977, + 1042959218, + 4072937953, + 2081781771, + 1278205876, + 1112230724, + 3897639333, + 2042168521, + 2334228216, + 2373653516, + 907006966, + 2953570838, + 620578486, + 2760867898, + 2368016403, + 1290159490, + 2377847843, + 3526243939, + 941606553, + 857858869, + 150291495, + 1892368746, + 3071409859, + 2807649317, + 4178467864, + 87102769, + 218118127, + 1055792551, + 3893635599, + 3984574453, + 1918429883, + 4235079178, + 3529433099, + 1551586769, + 617287190, + 2073851490, + 1271399111, + 3390936087, + 3064868668, + 4007077552, ]; static const List _envieddatastripePublishableKe = [ - 3015344107, - 1902300823, - 3231276215, - 2899582964, - 3414751852, - 3048820619, - 2938359742, - 788704340, - 4294796311, - 2325760232, - 668283878, - 636763863, - 3864077074, - 3133314716, - 4089620223, - 3406632350, - 3280471961, - 2409112468, - 2544678490, - 1665203249, - 3128827325, - 1399406603, - 3946815865, - 2616613944, - 3466566696, - 2373013978, - 4281236157, - 2468083357, - 2884403957, - 1530695127, - 805787729, - 3042168730, - 3182098054, - 3184387727, - 3301549885, - 790709820, - 2870468662, - 395809467, - 2003672130, - 1126578225, - 1757181474, - 4138109245, - 1865840163, - 1887816925, - 2277201485, - 1049779128, - 1521258428, - 3215554532, - 2764388849, - 3673527091, - 3998906555, - 2749969676, - 2878206962, - 2506898113, - 176673784, - 3294114815, - 2214264099, - 2548204250, - 1871676379, - 2391839618, - 706644004, - 1928371798, - 2725799194, - 1288130573, - 3866430916, - 2983353671, - 1513235370, - 59544982, - 2930203329, - 4261877396, - 3267739812, - 4086881924, - 1081823442, - 2336735829, - 1548494872, - 592296800, - 3720331578, - 384751378, - 459098950, - 512549982, - 892921913, - 2126169108, - 2417982363, - 1964779156, - 3698771232, - 1469035969, - 279639347, - 1150759302, - 1870780451, - 1117929236, - 1985551019, - 1481129395, - 2535738366, - 2431004056, - 864860432, - 279233389, - 3841579135, - 2521511761, - 1271814362, - 2716214211, - 3336718211, - 820289667, - 3131475471, - 3571228190, - 1405139247, - 3227740577, - 3127259696, - 2211824870, - 190660223, - 679540588, - 2132032014, - 645665311, - 2706343458, - 3146400646, + 522377493, + 3586475665, + 214647927, + 4260387584, + 1480565165, + 2034798738, + 3257184756, + 3677546462, + 1222361648, + 3931206587, + 2888966001, + 1081912489, + 3645972774, + 721896223, + 517171800, + 3263412399, + 2131739372, + 3542146908, + 2804799900, + 3529817724, + 802955288, + 1028389653, + 3709968698, + 4230601235, + 4025978209, + 3183764998, + 514239145, + 405727652, + 3537448012, + 1645564201, + 3236193586, + 3270009818, + 154344925, + 3845029643, + 283645863, + 932692583, + 3188766563, + 3474565117, + 1091482721, + 2874146200, + 4211666725, + 3661032681, + 3351107645, + 2531946506, + 441843367, + 1606292942, + 2153941638, + 2779307033, + 3881234303, + 2120857488, + 3955270600, + 6976654, + 4264745619, + 1018483853, + 410676348, + 2125059646, + 2654578443, + 562805990, + 671686917, + 1216456562, + 1262913912, + 3691394091, + 2029626658, + 4290790239, + 238783087, + 2037510194, + 2605350487, + 981979882, + 1117897128, + 3261423524, + 1199292776, + 2418839994, + 741648605, + 822117879, + 1576123963, + 1042959144, + 4072937858, + 2081781816, + 1278205925, + 1112230701, + 3897639398, + 2042168461, + 2334228114, + 2373653620, + 907006900, + 2953570892, + 620578554, + 2760867928, + 2368016491, + 1290159558, + 2377847904, + 3526243920, + 941606652, + 857858899, + 150291551, + 1892368701, + 3071409851, + 2807649375, + 4178467883, + 87102722, + 218118029, + 1055792624, + 3893635655, + 3984574404, + 1918429921, + 4235079277, + 3529433209, + 1551586722, + 617287246, + 2073851408, + 1271399071, + 3390936187, + 3064868734, + 4007077596, ]; static final String stripePublishableKe = String.fromCharCodes( @@ -1995,125 +2061,125 @@ final class _Env { _enviedkeystripePublishableKe[i])); static const List _enviedkeychatGPTkeySefer = [ - 2666721791, - 2549605422, - 2579467960, - 3604768194, - 3273638864, - 885930617, - 1987132445, - 3241854511, - 805847935, - 4126852805, - 2210634215, - 1262082129, - 1892203121, - 1711688944, - 3262797569, - 4294135985, - 3827018561, - 1771201626, - 141420954, - 2640138975, - 1935180514, - 2779250386, - 684638345, - 1626995727, - 284017270, - 2737802415, - 1879894513, - 2734217813, - 654768309, - 3886442942, - 126758245, - 1339780338, - 2443625101, - 4214921302, - 2061854895, - 2097911342, - 2193209040, - 3322993642, - 3998652548, - 4252591704, - 1140633026, - 3935180792, - 324913339, - 1202656668, - 2738325524, - 4255410946, - 2691216859, - 2746573131, - 1573515629, - 135580712, - 3948797874, - 2935580630, - 2673944223, - 1687517458, - 688039226, - 541852631, - 1068385794, - 3272172532, + 1673037440, + 642286416, + 2427723078, + 3856283685, + 2702558462, + 502698028, + 1308925645, + 4110519217, + 3244900706, + 2526327817, + 283947026, + 3300100433, + 1758744413, + 2854457770, + 754498718, + 552551968, + 481456051, + 3218700995, + 363897818, + 2947237190, + 4160485056, + 973151098, + 538045910, + 4126691572, + 3949366719, + 494437859, + 2036503363, + 56930903, + 568830745, + 2742792501, + 3747688967, + 1567979890, + 979570915, + 1923807635, + 3148734659, + 2410692055, + 1467190165, + 811065295, + 2917860115, + 1829084393, + 3189430638, + 1005026264, + 3246668815, + 3949808453, + 3275202526, + 40927270, + 1497443558, + 219654500, + 3286262768, + 916873968, + 1670811374, + 1969758230, + 4039895843, + 695594440, + 3378046203, + 2176346704, + 3370161244, + 1176674416, ]; static const List _envieddatachatGPTkeySefer = [ - 2666721669, - 2549605449, - 2579467925, - 3604768139, - 3273638841, - 885930539, - 1987132462, - 3241854534, - 805847883, - 4126852778, - 2210634120, - 1262082091, - 1892203024, - 1711688899, - 3262797656, - 4294136007, - 3827018537, - 1771201580, - 141421048, - 2640138982, - 1935180432, - 2779250312, - 684638434, - 1626995774, - 284017205, - 2737802390, - 1879894441, - 2734217767, - 654768333, - 3886442969, - 126758192, - 1339780279, - 2443625149, - 4214921274, - 2061854871, - 2097911364, - 2193208962, - 3322993592, - 3998652638, - 4252591658, - 1140632970, - 3935180690, - 324913288, - 1202656717, - 2738325617, - 4255410999, - 2691216778, - 2746573075, - 1573515581, - 135580740, - 3948797891, - 2935580544, - 2673944263, - 1687517536, - 688039266, - 541852603, - 1068385856, - 3272172440, + 1673037562, + 642286391, + 2427723115, + 3856283756, + 2702558359, + 502698110, + 1308925694, + 4110519256, + 3244900694, + 2526327910, + 283947133, + 3300100395, + 1758744380, + 2854457753, + 754498759, + 552552022, + 481456091, + 3218700981, + 363897784, + 2947237247, + 4160485042, + 973151008, + 538045885, + 4126691525, + 3949366780, + 494437850, + 2036503323, + 56930853, + 568830817, + 2742792530, + 3747689042, + 1567979831, + 979570899, + 1923807743, + 3148734715, + 2410692029, + 1467190215, + 811065245, + 2917860169, + 1829084315, + 3189430566, + 1005026226, + 3246668860, + 3949808404, + 3275202491, + 40927251, + 1497443511, + 219654460, + 3286262688, + 916873884, + 1670811295, + 1969758272, + 4039895931, + 695594426, + 3378046115, + 2176346684, + 3370161182, + 1176674332, ]; static final String chatGPTkeySefer = String.fromCharCodes(List.generate( @@ -2124,157 +2190,157 @@ final class _Env { (int i) => _envieddatachatGPTkeySefer[i] ^ _enviedkeychatGPTkeySefer[i])); static const List _enviedkeyllamaKey = [ - 3555122118, - 2326329705, - 750340608, - 574845812, - 1835686228, - 2935056413, - 2541063708, - 2772965730, - 3906373643, - 1823426502, - 3833446574, - 1697064783, - 2908303435, - 3194041791, - 2304244517, - 3664178553, - 3009453360, - 2287906884, - 157165288, - 1156046268, - 2714638844, - 3449002222, - 3067331485, - 1455287475, - 2836626630, - 370954493, - 1547293137, - 985303965, - 923698635, - 3798229340, - 1521837281, - 3300989696, - 2747825174, - 959818359, - 942817307, - 4222297750, - 928667844, - 3422055366, - 791657294, - 3980303473, - 3934614012, - 1903883342, - 839746301, - 3937922232, - 1208202864, - 531643008, - 1841527350, - 2104341419, - 3937941497, - 538909227, - 434474141, - 1290024891, - 2875325435, - 715412039, - 450789800, - 870839194, - 1707042571, - 1534702655, - 3179636662, - 1535079775, - 4214055026, - 4290924281, - 3472275138, - 2751876129, - 2866770526, - 586980005, - 3783233770, - 198668758, - 2153105586, - 2609121305, - 3577364714, - 1920635702, - 3669329714, - 653495613, + 898801240, + 1504971304, + 610599258, + 2685877070, + 569772106, + 2952551564, + 3117708714, + 4211132927, + 1702829972, + 361376821, + 3759592579, + 1690946678, + 1363142521, + 3431691375, + 1568330165, + 3132934019, + 1334146219, + 358541338, + 593388605, + 1990403983, + 836379608, + 3489346571, + 4062565303, + 1781349802, + 1054736653, + 2598203681, + 4236200078, + 328616861, + 584809377, + 2904549267, + 2991757229, + 4020896402, + 1893858047, + 1889385501, + 3267548944, + 3275262527, + 1432773723, + 427983410, + 2889261127, + 2357975630, + 2333967494, + 2755113043, + 1874941660, + 2360831478, + 1300763119, + 740900016, + 1817081921, + 782408964, + 2234157668, + 2502899996, + 1122124057, + 427939706, + 1332936578, + 3962578740, + 59229511, + 3604410282, + 374662991, + 2656400333, + 1985948246, + 1723477683, + 2184340097, + 1319273115, + 3315200900, + 4082407531, + 3108743191, + 3973337447, + 243945687, + 3363660577, + 79788779, + 1309680040, + 906862493, + 1098147194, + 1449760267, + 1383842600, ]; static const List _envieddatallamaKey = [ - 3555122068, - 2326329659, - 750340653, - 574845745, - 1835686177, - 2935056484, - 2541063795, - 2772965668, - 3906373711, - 1823426451, - 3833446616, - 1697064745, - 2908303385, - 3194041851, - 2304244583, - 3664178454, - 3009453402, - 2287906928, - 157165278, - 1156046298, - 2714638758, - 3449002149, - 3067331548, - 1455287495, - 2836626573, - 370954423, - 1547293154, - 985304043, - 923698596, - 3798229265, - 1521837273, - 3300989773, - 2747825250, - 959818304, - 942817325, - 4222297774, - 928667815, - 3422055318, - 791657259, - 3980303419, - 3934613930, - 1903883385, - 839746234, - 3937922294, - 1208202772, - 531643073, - 1841527389, - 2104341499, - 3937941421, - 538909280, - 434474233, - 1290024930, - 2875325379, - 715411976, - 450789836, - 870839287, - 1707042610, - 1534702673, - 3179636610, - 1535079736, - 4214054933, - 4290924222, - 3472275123, - 2751876200, - 2866770539, - 586980066, - 3783233683, - 198668729, - 2153105642, - 2609121387, - 3577364658, - 1920635738, - 3669329776, - 653495633, + 898801162, + 1504971386, + 610599287, + 2685877003, + 569772095, + 2952551669, + 3117708741, + 4211132857, + 1702830032, + 361376864, + 3759592693, + 1690946576, + 1363142443, + 3431691307, + 1568330231, + 3132934124, + 1334146241, + 358541358, + 593388555, + 1990404073, + 836379522, + 3489346624, + 4062565366, + 1781349854, + 1054736710, + 2598203755, + 4236200125, + 328616939, + 584809422, + 2904549342, + 2991757205, + 4020896479, + 1893857931, + 1889385514, + 3267548966, + 3275262471, + 1432773688, + 427983458, + 2889261090, + 2357975556, + 2333967568, + 2755113060, + 1874941595, + 2360831416, + 1300763019, + 740900081, + 1817081898, + 782409044, + 2234157616, + 2502900055, + 1122124157, + 427939619, + 1332936634, + 3962578811, + 59229475, + 3604410311, + 374663030, + 2656400291, + 1985948258, + 1723477716, + 2184340198, + 1319273180, + 3315201013, + 4082407458, + 3108743202, + 3973337376, + 243945646, + 3363660622, + 79788723, + 1309680090, + 906862533, + 1098147094, + 1449760329, + 1383842628, ]; static final String llamaKey = String.fromCharCodes(List.generate( @@ -2284,65 +2350,65 @@ final class _Env { ).map((int i) => _envieddatallamaKey[i] ^ _enviedkeyllamaKey[i])); static const List _enviedkeyserverPHP = [ - 1969208844, - 3685105489, - 3985860788, - 1248760260, - 2708419, - 2098370540, - 3031210828, - 3907121476, - 1991223849, - 332363801, - 2221725065, - 1090835439, - 577358101, - 1608921829, - 3192491663, - 2748071000, - 1318354055, - 3906219165, - 1311207564, - 2232900632, - 2432017873, - 2901844894, - 2566667412, - 3597503333, - 961116967, - 1137778284, - 34728661, - 3025338383, + 3552866576, + 1948327802, + 2362351083, + 1132280431, + 3753638473, + 129185768, + 38878039, + 2730132585, + 1804405100, + 2496428701, + 2051529503, + 1388322984, + 4175334444, + 236796867, + 3879314462, + 4130446670, + 95378704, + 2626854749, + 2001334618, + 1281924634, + 3447214519, + 634079959, + 1772647823, + 669227767, + 1674444698, + 2806616347, + 843221614, + 886872287, ]; static const List _envieddataserverPHP = [ - 1969208932, - 3685105445, - 3985860800, - 1248760244, - 2708400, - 2098370518, - 3031210851, - 3907121515, - 1991223880, - 332363881, - 2221725152, - 1090835393, - 577358182, - 1608921728, - 3192491753, - 2748070973, - 1318354165, - 3906219187, - 1311207648, - 2232900721, - 2432017831, - 2901844987, - 2566667451, - 3597503254, - 961116994, - 1137778186, - 34728624, - 3025338493, + 3552866680, + 1948327694, + 2362351007, + 1132280351, + 3753638458, + 129185746, + 38878072, + 2730132550, + 1804405005, + 2496428781, + 2051529590, + 1388322950, + 4175334495, + 236796838, + 3879314552, + 4130446635, + 95378786, + 2626854771, + 2001334582, + 1281924723, + 3447214529, + 634079922, + 1772647840, + 669227652, + 1674444799, + 2806616445, + 843221515, + 886872237, ]; static final String serverPHP = String.fromCharCodes(List.generate( @@ -2353,238 +2419,238 @@ final class _Env { static const List _enviedkeyanthropicAIkeySeferNewHamzaayedpython = [ - 2239590971, - 4285965516, - 3695138759, - 3637297636, - 4099748391, - 3630345505, - 1046761753, - 2316353469, - 1486285890, - 3453922576, - 1461711626, - 1540359714, - 235638062, - 1911640557, - 1341630746, - 2372710779, - 376551306, - 2450254571, - 2261154098, - 2753535277, - 2097738604, - 624429865, - 2691420767, - 1829894372, - 565583722, - 1373608420, - 2161766275, - 2813459082, - 79109545, - 2303720377, - 1409988535, - 4191969475, - 733659744, - 1002946509, - 912373302, - 3851860865, - 1591076025, - 2508500475, - 3898489201, - 2598538000, - 3318881476, - 2239996289, - 3804260000, - 657917637, - 2173392825, - 2181300644, - 1479400036, - 2432630723, - 3487553971, - 544261188, - 936764434, - 3200935935, - 1465469109, - 2178808415, - 1832701799, - 3039462395, - 3931950549, - 2399558786, - 369170024, - 4208016132, - 2006223332, - 2741602301, - 4247906530, - 2689592165, - 823096094, - 2866545522, - 779237718, - 1483928876, - 3465509816, - 3211719782, - 3456757508, - 486099864, - 35839225, - 2906336624, - 3674340640, - 2824942461, - 22847070, - 3081219473, - 3580986795, - 2608626252, - 3702753378, - 4135376, - 2719951367, - 2087574197, - 2800870656, - 206054240, - 2765639902, - 3586847345, - 1832852376, - 2909566728, - 1258389353, - 614454563, - 3210321597, - 2252175412, - 2789694340, - 905281069, - 68021922, - 4033873930, - 2347853514, - 537037329, - 2796433849, - 866713578, - 2015214550, - 743963859, - 427130879, - 580970434, - 2645097993, - 28836884, - 3412571719, - 3610627508, - 2120413846, - 965092952, - 3972526624, - 682605986, + 4138568753, + 222084930, + 567957075, + 589023236, + 95163113, + 761369467, + 678556238, + 1202699717, + 3717339232, + 3361164613, + 1896144313, + 1028007045, + 2411990607, + 1334711864, + 1425832291, + 2517678508, + 3641615793, + 2388652099, + 4290027393, + 2642334611, + 2583306837, + 42432584, + 2352267362, + 2812350954, + 2797239379, + 2609875446, + 1510186127, + 4075115807, + 2646998902, + 2838108061, + 1144829029, + 374342323, + 352155376, + 4009357707, + 3177994588, + 4009547332, + 3123641111, + 3663726467, + 2548371067, + 1956922996, + 1893294624, + 841908501, + 3137173052, + 3905908512, + 1468327344, + 3096855172, + 1624381312, + 572547505, + 670778059, + 450113829, + 3296719559, + 3122037990, + 2792033885, + 1022814607, + 2489616942, + 2555344792, + 347833474, + 1992636689, + 2426895563, + 2835726782, + 2005021329, + 57031653, + 1895090121, + 2902144801, + 539560416, + 991919183, + 3172763420, + 639548619, + 1776418438, + 3026481680, + 1895252839, + 3348676884, + 2970079910, + 1655982482, + 3129301750, + 2793274198, + 1485417788, + 1744731121, + 302824470, + 2448927063, + 939465247, + 1400548521, + 3510373693, + 2235290475, + 277137710, + 3362743317, + 4255812862, + 3835529905, + 3488252448, + 3468169540, + 3291376858, + 1383773310, + 1629107816, + 3701672366, + 1773431453, + 3939482430, + 105727499, + 837695090, + 1040742880, + 3327679371, + 2161721125, + 1451148207, + 3741799188, + 4086124554, + 727701698, + 12846766, + 2383484351, + 3944409888, + 4062632309, + 2517050448, + 1435265117, + 2384327573, + 1596179024, + 1733116819, ]; static const List _envieddataanthropicAIkeySeferNewHamzaayedpython = [ - 2239590977, - 4285965483, - 3695138794, - 3637297557, - 4099748421, - 3630345538, - 1046761780, - 2316353484, - 1486285876, - 3453922687, - 1461711673, - 1540359707, - 235638019, - 1911640475, - 1341630809, - 2372710713, - 376551335, - 2450254524, - 2261154140, - 2753535319, - 2097738537, - 624429918, - 2691420697, - 1829894314, - 565583659, - 1373608342, - 2161766348, - 2813459130, - 79109616, - 2303720405, - 1409988579, - 4191969442, - 733659664, - 1002946491, - 912373328, - 3851860969, - 1591076045, - 2508500374, - 3898489110, - 2598538085, - 3318881423, - 2239996374, - 3804260051, - 657917597, - 2173392883, - 2181300727, - 1479399983, - 2432630706, - 3487554004, - 544261147, - 936764508, - 3200935845, - 1465469158, - 2178808373, - 1832701743, - 3039462329, - 3931950476, - 2399558868, - 369169968, - 4208016201, - 2006223294, - 2741602230, - 4247906515, - 2689592092, - 823096139, - 2866545465, - 779237742, - 1483928852, - 3465509867, - 3211719689, - 3456757606, - 486099964, - 35839130, - 2906336539, - 3674340726, - 2824942413, - 22846997, - 3081219556, - 3580986875, - 2608626221, - 3702753312, - 4135352, - 2719951415, - 2087574230, - 2800870751, - 206054199, - 2765639830, - 3586847237, - 1832852447, - 2909566843, - 1258389307, - 614454636, - 3210321634, - 2252175360, - 2789694391, - 905281044, - 68022002, - 4033873992, - 2347853473, - 537037372, - 2796433884, - 866713560, - 2015214471, - 743963810, - 427130776, - 580970409, - 2645098072, - 28836933, - 3412571679, - 3610627526, - 2120413902, - 965092916, - 3972526690, - 682606030, + 4138568779, + 222084901, + 567957118, + 589023349, + 95163019, + 761369368, + 678556259, + 1202699700, + 3717339158, + 3361164586, + 1896144266, + 1028007100, + 2411990626, + 1334711886, + 1425832224, + 2517678574, + 3641615772, + 2388652052, + 4290027503, + 2642334697, + 2583306768, + 42432575, + 2352267300, + 2812350884, + 2797239314, + 2609875332, + 1510186176, + 4075115823, + 2646998831, + 2838108145, + 1144828977, + 374342354, + 352155264, + 4009357821, + 3177994554, + 4009547308, + 3123641187, + 3663726574, + 2548370972, + 1956922881, + 1893294699, + 841908546, + 3137173071, + 3905908600, + 1468327418, + 3096855255, + 1624381387, + 572547520, + 670778028, + 450113914, + 3296719497, + 3122037948, + 2792033806, + 1022814693, + 2489616998, + 2555344858, + 347833563, + 1992636743, + 2426895507, + 2835726835, + 2005021387, + 57031598, + 1895090168, + 2902144856, + 539560373, + 991919108, + 3172763428, + 639548659, + 1776418517, + 3026481791, + 1895252741, + 3348676976, + 2970079941, + 1655982585, + 3129301664, + 2793274214, + 1485417847, + 1744731012, + 302824518, + 2448927030, + 939465309, + 1400548545, + 3510373645, + 2235290376, + 277137777, + 3362743362, + 4255812790, + 3835529925, + 3488252519, + 3468169527, + 3291376776, + 1383773233, + 1629107767, + 3701672346, + 1773431470, + 3939482375, + 105727579, + 837695024, + 1040742795, + 3327679398, + 2161721152, + 1451148189, + 3741799237, + 4086124667, + 727701669, + 12846789, + 2383484398, + 3944409969, + 4062632237, + 2517050402, + 1435265029, + 2384327673, + 1596178962, + 1733116927, ]; static final String anthropicAIkeySeferNewHamzaayedpython = @@ -2597,6329 +2663,6329 @@ final class _Env { _enviedkeyanthropicAIkeySeferNewHamzaayedpython[i])); static const List _enviedkeyprivateKeyFCM = [ - 3981922267, - 3346880164, - 1795153711, - 2698012958, - 4132435316, - 3688811635, - 1179516278, - 1445266976, - 3576206516, - 3731032608, - 217747518, - 3696124548, - 2263141719, - 3717618969, - 4095666951, - 2140040103, - 127587063, - 2669691846, - 1166813122, - 1566785055, - 2169781176, - 3715844436, - 2574766125, - 1496996005, - 2733377709, - 3813532921, - 2480544916, - 2711200443, - 3506022825, - 4016297390, - 1172688224, - 1046877721, - 1802929883, - 1042164752, - 951282737, - 2844034980, - 9975762, - 4748154, - 3834383008, - 3070877504, - 3773887048, - 31536352, - 1515491087, - 2693026277, - 2651975503, - 1024310652, - 4159993797, - 514813947, - 346211919, - 475669877, - 2397955656, - 1991395847, - 1840266448, - 1462452404, - 3974103842, - 3462434715, - 509397626, - 219257392, - 390049883, - 3529471520, - 214468573, - 3453652672, - 1910343934, - 3248345121, - 688901908, - 158537972, - 1081367554, - 1144831056, - 579791402, - 3921153450, - 2935413203, - 1166676861, - 3190816652, - 1293833360, - 4248466937, - 3169479022, - 660353853, - 2842469670, - 4181906642, - 2981457359, - 148164173, - 2757244746, - 4183233319, - 3320857237, - 2421402856, - 995518725, - 2499473346, - 3030421086, - 2431452981, - 3503323105, - 3651130299, - 3305871179, - 2613582820, - 1428709013, - 1263697053, - 4062366099, - 1538722640, - 1130649655, - 2653561849, - 15230323, - 2551972092, - 2595160154, - 2022102075, - 3702440844, - 1460384480, - 3072636811, - 803630082, - 2081675564, - 214832762, - 1320690276, - 928849104, - 1963194755, - 1239656811, - 3861141955, - 1952317543, - 4009270568, - 3751818032, - 828084598, - 2046606682, - 3841830456, - 1024117130, - 1622140781, - 851018347, - 2901179357, - 1147982066, - 621086028, - 902397950, - 315404987, - 721703774, - 2682047910, - 2201577287, - 423206528, - 3083164524, - 536810114, - 2472119946, - 2424135631, - 2642835754, - 1491819727, - 4012093736, - 4290143603, - 1474727393, - 1711083045, - 277986678, - 2027034039, - 141596097, - 1912798708, - 839576629, - 2707051010, - 3231733031, - 4113749696, - 2995182189, - 3520668914, - 3347369728, - 1587370482, - 3032032412, - 4044443541, - 2251358152, - 1890087915, - 137159941, - 390058573, - 2039802469, - 318909920, - 4018099823, - 4165177100, - 1002670974, - 2250938852, - 3498130702, - 3459389476, - 3863210877, - 2986416063, - 1538245437, - 3292404863, - 2027421018, - 3252408140, - 4239211483, - 2631372546, - 1234318565, - 725089032, - 1077235471, - 2060563404, - 3991627553, - 1926869855, - 4279067974, - 1000061330, - 3868058344, - 4237763167, - 119268378, - 812800771, - 2861588729, - 2078590438, - 295926757, - 2395519663, - 2813650560, - 304734444, - 2271168912, - 1972943089, - 4164895807, - 1963853030, - 634872854, - 1135813757, - 925513981, - 842190267, - 2578819169, - 1098902754, - 4226609402, - 1315029793, - 1719013570, - 922357769, - 363855675, - 2462796564, - 4182689866, - 762698328, - 1013327059, - 2820501760, - 2352460746, - 1845169355, - 1970194130, - 2276456315, - 1536676323, - 509432962, - 3539178299, - 1664748476, - 831963303, - 1959525967, - 1811457412, - 2062538055, - 218553516, - 1481442856, - 1872997940, - 3852052600, - 2944778740, - 3091995932, - 1506369797, - 2184769374, - 469420194, - 3875176671, - 1983082641, - 156830608, - 839208351, - 343698082, - 4121301936, - 3629457187, - 1700254524, - 689767920, - 3756684328, - 3260069022, - 723702027, - 197026869, - 1476158775, - 640147787, - 3242467175, - 1231631740, - 2352884230, - 3030843748, - 1225629893, - 4018512906, - 1960274124, - 726761249, - 383837199, - 4137352616, - 402373395, - 2557391126, - 2529892381, - 3975336585, - 1258243516, - 139409959, - 2633302110, - 1372979774, - 1817975077, - 3445998652, - 60703397, - 261775031, - 4264413027, - 1076874911, - 3629284003, - 56691841, - 2772902920, - 2549778578, - 2897023902, - 314443416, - 2556475300, - 2532810996, - 2908365250, - 3039124861, - 2288454488, - 2588035315, - 1656584557, - 3238121772, - 2055860495, - 3980122022, - 4066805930, - 1841713884, - 1624272622, - 3373977367, - 3879495608, - 3111420203, - 4270547770, - 794961779, - 1527215852, - 1683813883, - 2442868742, - 2861787428, - 30022298, - 2035158296, - 3836016707, - 2830309630, - 2593433932, - 1473903968, - 1918006837, - 1758965873, - 3838393111, - 4276543062, - 2028672394, - 2982328524, - 2644432163, - 3171447640, - 3109668947, - 2279285900, - 2813610336, - 3556231578, - 126863728, - 3361961056, - 644064697, - 1400464097, - 3337005729, - 1295629820, - 3475709079, - 788576723, - 2714460693, - 1011779786, - 735176737, - 2205184000, - 2560984045, - 1791376721, - 1706558866, - 1504402526, - 1409252725, - 1583370247, - 3436434450, - 1394779303, - 3344782854, - 1326542936, - 202837034, - 1767585070, - 3598053939, - 3870190597, - 2525308903, - 3922878132, - 3345261130, - 35974734, - 88009025, - 2643558951, - 422099595, - 922802509, - 4014273156, - 2445899464, - 3830397009, - 4059813928, - 997949196, - 490526152, - 104568815, - 2200019813, - 1490665254, - 834166170, - 1612573889, - 3018054123, - 2828340332, - 797193688, - 1850063835, - 1009072026, - 1778776095, - 1169853008, - 3133255138, - 3518468738, - 3235454781, - 3424004164, - 3198971586, - 1466346705, - 990804455, - 2985664528, - 2322412841, - 3797624473, - 461499860, - 2699134584, - 3471164937, - 3451542450, - 753407706, - 243450021, - 2646197692, - 2920663707, - 1835624057, - 3529662747, - 2823859943, - 1974521902, - 1372038081, - 3795841855, - 2258314511, - 4081322782, - 2079376553, - 1349810440, - 3584271937, - 1026789111, - 2579600666, - 2761777129, - 3779722283, - 222490031, - 1358281311, - 3629320848, - 1363394400, - 3761616985, - 3482912442, - 3463122341, - 2260520948, - 3462604867, - 2112854849, - 106713855, - 835546571, - 3055010322, - 2706334832, - 4219149541, - 2323649721, - 2117406211, - 3337739548, - 2564252217, - 1864066815, - 3499118962, - 4256446057, - 427814795, - 2986028242, - 1330753526, - 2950163024, - 2076444755, - 804386169, - 2537649708, - 2111726672, - 1890911345, - 2281718949, - 1380263834, - 1347026984, - 4112888381, - 1506036804, - 1325045267, - 2664324787, - 2403182096, - 1594677073, - 400265876, - 778544787, - 2378466771, - 1983435814, - 4273276840, - 100850925, - 2328471545, - 2948444531, - 2657126963, - 3820179195, - 1053870924, - 1936709241, - 3223291659, - 162217383, - 1899809393, - 3330523129, - 485846683, - 2941428628, - 4029022001, - 1143446915, - 3622601070, - 541967854, - 2921656107, - 3185611540, - 3808221820, - 38755396, - 1063478778, - 2823129320, - 1151128400, - 2320099643, - 1793881836, - 3916651928, - 2239207923, - 114805489, - 2812828359, - 3281137340, - 3435690511, - 2447225994, - 2135471672, - 2270208634, - 1522002950, - 2471291916, - 923989421, - 3439465690, - 4120179531, - 206342215, - 3313684093, - 3168474229, - 1302409801, - 3376867731, - 4000338950, - 3552032903, - 2999233427, - 472627141, - 2103950265, - 3906389748, - 1100472036, - 2158686899, - 2776152799, - 1314274685, - 2676956660, - 185267205, - 3898859622, - 158099401, - 2116565065, - 413498835, - 128303659, - 1170360952, - 377110976, - 4058533767, - 94806833, - 1390702292, - 2470198701, - 604165455, - 1265797540, - 3794877966, - 2809735777, - 248892698, - 2520837035, - 2488361820, - 1818263725, - 4082245230, - 3511271216, - 2438651903, - 3111384534, - 196299143, - 2666311454, - 2525242050, - 16739257, - 2053349633, - 3134729987, - 1066105875, - 1360956937, - 175246027, - 3578595676, - 3465909725, - 1574260845, - 363562265, - 3942782789, - 3465844926, - 1398218648, - 3641354110, - 2112666588, - 2530899842, - 607827185, - 29748235, - 258779391, - 1818237590, - 2521301460, - 1653013094, - 2165034656, - 468622356, - 471251489, - 1033677310, - 1637958940, - 560140588, - 2439262654, - 2489476406, - 1891002746, - 1302203463, - 2698509219, - 367767764, - 3814967938, - 877251532, - 527587624, - 1998457105, - 1313841305, - 2777432693, - 4158445414, - 3105955884, - 3905457967, - 3421264667, - 3256358445, - 2247911496, - 3048444418, - 1954942624, - 3305736931, - 3154420447, - 1005608254, - 1016886872, - 3586838727, - 846005081, - 2135619981, - 4036641406, - 1885952153, - 2035424707, - 1180695664, - 774703327, - 4008526202, - 1049621549, - 3211906867, - 3252341113, - 2577071117, - 2499523877, - 2385946407, - 2051798557, - 1377061171, - 1139007959, - 2931433297, - 26982963, - 566620856, - 3990593418, - 2891348786, - 985361144, - 3349492759, - 1669250211, - 1849438310, - 215958243, - 2053618149, - 3254450603, - 3373441033, - 808264803, - 2420293120, - 3738956768, - 3030135844, - 1415649519, - 1984045310, - 170593077, - 2191242305, - 2966552220, - 2659661375, - 3135670766, - 3456270730, - 3161215244, - 2113148250, - 1748878796, - 864032655, - 1647138639, - 3149458351, - 1878429497, - 2790604930, - 1804724952, - 563250933, - 3781808488, - 2196738495, - 1297061454, - 1671610258, - 2839219664, - 54190717, - 1321160430, - 1454860780, - 2173840316, - 260448697, - 2616252837, - 1965529454, - 3262117153, - 57624293, - 2383384828, - 3958089900, - 1647811813, - 1247195842, - 3913713453, - 1830407355, - 4237860146, - 3195456369, - 2243691994, - 3466538342, - 2221302929, - 3810228874, - 581191113, - 2109526507, - 2864821491, - 226854103, - 3342940685, - 3662895456, - 2898610202, - 16647994, - 3792169428, - 2989468345, - 2034275766, - 1398459443, - 2533442200, - 662308801, - 2288542311, - 2275925043, - 3096984239, - 2517801243, - 1035651899, - 4050642982, - 3651572392, - 31201715, - 164236749, - 1181532931, - 2908427529, - 2605363232, - 421421039, - 2908707894, - 1327292708, - 950010697, - 2700789657, - 747776745, - 195005289, - 3667940660, - 1301150487, - 143697711, - 3312190461, - 3790729653, - 3960139347, - 659823607, - 1138718717, - 2025037006, - 4151138983, - 1348399036, - 4071700250, - 3809807973, - 1316603836, - 1192309846, - 1387122844, - 868870716, - 3722390529, - 1317568088, - 1087995477, - 1717499282, - 3286993133, - 1702782981, - 1259532729, - 107859979, - 4251967060, - 453409295, - 647529006, - 839106077, - 3854140514, - 2490308537, - 2730383569, - 448604222, - 2094495664, - 2882113069, - 2775497632, - 3967835897, - 2729281564, - 148462246, - 4181103969, - 2402226687, - 2653424843, - 3926326566, - 4035129264, - 250028820, - 3650515189, - 2271621666, - 2645999969, - 1193086188, - 3941118712, - 4004363215, - 813195910, - 1371147395, - 3112788896, - 3797169650, - 2613939839, - 3937421507, - 724668422, - 2878709092, - 3432806086, - 1607090647, - 2826908585, - 2464652415, - 2601849612, - 517899629, - 1495564679, - 2048130762, - 708974837, - 1700315538, - 2579278273, - 2242949441, - 3460308474, - 2388581660, - 2770301444, - 3744537010, - 296354594, - 2054159871, - 3468853396, - 1651514041, - 4062623868, - 3583825578, - 2794129787, - 1410796327, - 4156382012, - 2045715984, - 3813065125, - 3818919944, - 1665102852, - 1278187749, - 4009313486, - 202365681, - 644210391, - 1756153304, - 3866170568, - 3814335054, - 2542750461, - 3813215604, - 1136014057, - 2960011051, - 3772001340, - 586861871, - 3923860481, - 3470266176, - 1546763578, - 1902195736, - 3104501664, - 3876757106, - 2571263930, - 477981763, - 2126062045, - 269049910, - 1290930322, - 1780432887, - 3160595001, - 1417209701, - 514282708, - 1164023454, - 2686453282, - 3115969684, - 4190938705, - 3186443528, - 1676171854, - 531295233, - 289168201, - 1114096568, - 3168586807, - 613594789, - 2970263892, - 3449924641, - 2658965264, - 967110793, - 3220039966, - 4215063448, - 3507754845, - 133270418, - 2334205304, - 1831822609, - 4262324326, - 2309133978, - 3999156776, - 1791457596, - 1256641253, - 2242142937, - 2820499689, - 1229037104, - 2660992190, - 818933150, - 2759281855, - 3717480264, - 112547385, - 2956393135, - 104847229, - 2767915638, - 1000035645, - 3582285910, - 3478042508, - 908731263, - 4060768484, - 2564303962, - 1475213067, - 1339551978, - 3750107469, - 1080002507, - 2787912125, - 2645990150, - 1568173343, - 664951323, - 195563864, - 689296020, - 3577669515, - 1821670056, - 3468814666, - 1594124042, - 817555651, - 3193780319, - 3426486650, - 3320655549, - 547932373, - 1410453440, - 4223791601, - 1233467261, - 3247156510, - 2734757340, - 2515500688, - 2584433606, - 4231237972, - 2317152140, - 2365102013, - 936827045, - 3876510247, - 1680648134, - 940806234, - 986899195, - 2391799027, - 422634611, - 4216371405, - 547540254, - 1508615574, - 3364354997, - 879755265, - 3263706287, - 533120172, - 3594839962, - 3452469847, - 4055859708, - 969997918, - 4262262649, - 1470323788, - 1574987003, - 401859900, - 876195179, - 2787490928, - 1047019857, - 1456393356, - 1268268436, - 1049292964, - 1125089780, - 49962707, - 2656962752, - 3432712111, - 3828147887, - 1008783239, - 745874224, - 2762581588, - 118220858, - 3732108798, - 2127208388, - 2769688285, - 4274667124, - 2951242862, - 3366367927, - 1598191526, - 171242489, - 744919083, - 3925218218, - 67453217, - 202729256, - 1796852965, - 2981855335, - 162603179, - 468499587, - 2498928560, - 1780550188, - 4154629753, - 159800440, - 918301787, - 4009883207, - 1405353177, - 214354366, - 2158957596, - 3869560763, - 3877900345, - 1972516075, - 652141274, - 2653621912, - 2767765677, - 2033835604, - 427710650, - 3066436588, - 2951118829, - 2329045530, - 2837864355, - 369661323, - 2512052550, - 786311058, - 817972640, - 1292779617, - 1845273405, - 3767574573, - 651561825, - 4135562231, - 2180200162, - 857186603, - 3543645467, - 1098876395, - 1744194175, - 122392459, - 4006499324, - 4093925024, - 2047275191, - 1612275583, - 4243136854, - 1515517981, - 967094934, - 4124925157, - 407264543, - 3939504048, - 3065407425, - 3923876406, - 234366703, - 1267806301, - 2103627408, - 3161503390, - 548723491, - 1573785449, - 1523860531, - 3111076264, - 3089072708, - 2099939884, - 2484876526, - 847465510, - 1287516312, - 1277183311, - 3825284788, - 1286852397, - 1071051992, - 4211214318, - 1395725316, - 318332081, - 3887322410, - 3648123850, - 3980865530, - 482308962, - 1393337805, - 953623395, - 869400156, - 4267388190, - 299775582, - 4201609618, - 2407563033, - 2302119831, - 906313690, - 1287024299, - 3047468697, - 1961247671, - 3065780178, - 896060754, - 2281157850, - 43993189, - 3759084088, - 1257965245, - 1712831998, - 3118566793, - 2952627364, - 2536493746, - 2411795166, - 3620642485, - 3555288126, - 1116895003, - 1021126224, - 2579096214, - 1020206011, - 394251688, - 2996670120, - 1892934024, - 2242747375, - 2871062619, - 1033916267, - 233778482, - 902809400, - 2423438189, - 3603630150, - 3726742127, - 3963756685, - 2091120791, - 1461915017, - 846990501, - 1140814285, - 532282682, - 290246973, - 1413926828, - 2836815176, - 1545937573, - 701427906, - 6966626, - 2521894774, - 568079982, - 1507550845, - 1269329458, - 4901247, - 844581908, - 2159007946, - 3652623899, - 2311865206, - 2809893836, - 2653658256, - 559868311, - 1797422328, - 2403522753, - 1340592037, - 2909871562, - 4258339872, - 1990498549, - 1747735621, - 3443076681, - 2839280556, - 2198844498, - 2969323272, - 4067837655, - 1809216596, - 4213935470, - 3721239910, - 3110124563, - 3633212186, - 1076094919, - 3492681160, - 2990603714, - 1282671169, - 1162631115, - 2299938101, - 60794882, - 556699340, - 1151569191, - 3492507576, - 1719539772, - 3827661025, - 3541062772, - 1295482807, - 325546462, - 810664998, - 4164189336, - 2550548636, - 2227159271, - 4052323377, - 993650460, - 624459121, - 533363896, - 3136167602, - 1714985676, - 2299507097, - 3401403324, - 2596403736, - 2580829261, - 1005216985, - 3292487575, - 389098918, - 107392157, - 698445126, - 545507947, - 3517962966, - 3506980667, - 2035236867, - 334294585, - 1567596345, - 2975991597, - 69070171, - 108620321, - 366436803, - 2456257185, - 300297686, - 2562984755, - 2934600353, - 1729676095, - 4066392588, - 4085843491, - 3296227172, - 461743992, - 3702256187, - 2997712950, - 1135886928, - 2600348082, - 4141089362, - 892518763, - 3058189589, - 1934930519, - 4153963813, - 4252640070, - 4262502884, - 1253456086, - 1961772005, - 680562547, - 1185858172, - 634477470, - 2339411373, - 2164550347, - 2803986361, - 924454958, - 3134526712, - 966349044, - 1453429200, - 3082418651, - 401225340, - 3398590822, - 128059545, - 2178637220, - 1774922145, - 2255178124, - 2918720843, - 3327682118, - 2214394413, - 3099747667, - 1661934963, - 1298729940, - 1272558680, - 4053018353, - 3789054841, - 4131648492, - 1773101901, - 686931116, - 1203446822, - 3752734570, - 3235657418, - 1944359995, - 697623116, - 2039237806, - 3348886677, - 2064524550, - 3039942399, - 2701235347, - 3767389171, - 916901056, - 48586704, - 1416585585, - 766915895, - 3115924654, - 331229057, - 3134725303, - 3457203626, - 741448661, - 854943726, - 1524960663, - 1896889473, - 1713382184, - 2640180467, - 3592536672, - 1428546862, - 3838033593, - 3778145286, - 3664325196, - 542063384, - 529023530, - 2782480697, - 173628958, - 958820372, - 774948181, - 1930508149, - 1674876101, - 3703541303, - 3024990863, - 473593391, - 1202061776, - 115478649, - 3136639257, - 3545390249, - 2091581418, - 2249203496, - 2052969697, - 969919513, - 795131664, - 546537576, - 1302855139, - 2724278010, - 1751639238, - 100232685, - 3423489574, - 103164121, - 1984156496, - 3109944628, - 3809627117, - 3362560523, - 1292767560, - 1281284896, - 989446871, - 2926075433, - 1217424066, - 1358302603, - 252442244, - 3489051600, - 2648229275, - 3946622619, - 3719323549, - 1749561460, - 3345174221, - 938188329, - 693952432, - 3443621177, - 2911849161, - 1427624316, - 3678446798, - 2906392291, - 2445546358, - 1977948992, - 801684685, - 2963795578, - 3386667580, - 2100145515, - 936768644, - 1593174223, - 3875136628, - 2590738238, - 2890201689, - 216936839, - 1339115227, - 2635418504, - 119932769, - 1340581862, - 4144168265, - 3938057421, - 1168936317, - 2215987271, - 17184930, - 216656254, - 2188297819, - 2061448278, - 1202480469, - 1405677027, - 292664931, - 953177447, - 3172167786, - 2503470694, - 1562534143, - 1387761019, - 1505457387, - 592131087, - 3951980790, - 1017622389, - 2281683049, - 2074962955, - 3329400364, - 1404464966, - 3295703247, - 3486575464, - 2090288213, - 3184219425, - 761918525, - 2960208240, - 3763970129, - 833445166, - 267175176, - 572901416, - 770701708, - 2145108397, - 3628405300, - 1694398909, - 377464713, - 999531075, - 355730846, - 1936325029, - 1976818713, - 854711490, - 132862484, - 1207569661, - 392699516, - 1081009974, - 836817083, - 8548221, - 3978550238, - 1419003659, - 972930352, - 1428068551, - 4209168645, - 4197520880, - 3943327533, - 99781359, - 1496417935, - 970974623, - 1028307449, - 2504293777, - 2296530467, - 54001860, - 334118479, - 3633345056, - 3002480859, - 1813811374, - 25154938, - 301497518, - 4275021930, - 3282143123, - 1785549025, - 3598774605, - 668914748, - 3160281112, - 190382168, - 3606378643, - 3008775778, - 894795587, - 2920018267, - 992106292, - 605405246, - 1572036356, - 1611796179, - 3432918843, - 2744331545, - 1848223043, - 1152080712, - 1195579261, - 374577063, - 1687993070, - 3507249428, - 3508208098, - 24847331, - 3733363729, - 410066894, - 1140860469, - 1186346254, - 4001954564, - 1781698919, - 1473739648, - 611800377, - 2528535721, - 483659100, - 1465122916, - 1423007157, - 2160485157, - 2603441149, - 814091188, - 839018888, - 2290160479, - 709434822, - 3758915541, - 206497366, - 647739199, - 1332381676, - 3765956308, - 2329586525, - 3933383957, - 2402114313, - 2149614186, - 2027684415, - 3252300857, - 3409909559, - 2129462542, - 3413088674, - 550912561, - 1884734489, - 3454710315, - 3089136778, - 3468891815, - 450825700, - 1068267958, - 1083780482, - 1882776931, - 3387913880, - 2512854824, - 3765561147, - 2082119393, - 3191789998, - 3268009062, - 1072301092, - 989191045, - 902359821, - 2242814577, - 2285401049, - 3185723396, - 1189582677, - 1052972760, - 3007704025, - 2985550861, - 2069850031, - 3678424230, - 1801617804, - 246137952, - 1713777329, - 4040290028, - 1552898325, - 787558002, - 2622943985, - 3295504759, - 3744612268, - 3526116115, - 3352769670, - 3910684858, - 4186388391, - 3972654099, - 2209684028, - 3906598359, - 1607122378, - 4076456035, - 3754124346, - 2634876984, - 4104847148, - 2656001877, - 2198100150, - 3683620463, - 646937365, - 364412410, - 2895405383, - 3041104998, - 2380266516, - 4262451672, - 1818177963, - 3391440962, - 2968709759, - 3349770446, - 1689905488, - 2452371329, - 776949993, - 1046308568, - 1592843043, - 3356487496, - 543456261, - 4019266966, - 3413881002, - 2162344782, - 2906465773, - 604490828, - 2482347082, - 1465834774, - 3590369453, - 4006089194, - 2221173365, - 1680871970, - 2374564446, - 140760082, - 935674497, - 1201104267, - 388802414, - 3253154925, - 3608163578, - 375711410, - 2065707519, - 136847632, - 3867470770, - 802096470, - 3359615282, - 2988900115, - 445520923, - 2627882076, - 1277600524, - 1248782998, - 4211777827, - 1753939330, - 4078827803, - 2202860817, - 1375887292, - 1336540211, - 4107127315, - 3240966349, - 1025999202, - 2217540088, - 635654532, - 3012341919, - 3048508995, - 762060967, - 3937951865, - 757818969, - 286528768, - 2504250232, - 4291469257, - 793464992, - 1934262619, - 3603733483, - 4264651163, - 450041391, - 3683285142, - 3943679854, - 4184673313, - 3112966325, - 2999093658, - 839336362, - 1252897003, - 1520818631, - 1996403225, - 4076122542, - 2679158812, - 1234736508, - 3277957203, - 2521119640, - 477707976, - 2764279211, - 1725521666, - 189237909, - 2649848915, - 1921924037, - 3323989921, - 3497554286, - 3667891284, - 363810963, - 4123651570, - 654290819, - 3828886729, - 1074566868, - 3529808189, - 2376273563, - 3188405429, - 1340442687, - 23366406, - 177240564, - 1418661962, - 2772522930, - 3329973409, - 2499441159, - 2436920191, - 1677149960, - 2838258055, - 3248073812, - 1936894453, - 195979059, - 3336629797, - 2225225170, - 2241276337, - 2103330645, - 867316452, - 1005790753, - 1435458802, - 2518696166, - 1500391368, - 2957570303, - 1399704578, - 1635394098, - 1448662176, - 2140705131, - 2354872919, - 478054843, - 3956581489, - 2386494806, - 3659886269, - 1810497191, - 988357215, - 1183625291, - 3308188174, - 3864913942, - 2139265271, - 3106141222, - 4095094433, - 3908751236, - 1219514047, - 3934434965, - 4198330208, - 2716119872, - 671526211, - 1442746803, - 2980086740, - 1779948513, - 3104658113, - 3039535623, - 2864235814, - 1361080987, - 3301975174, - 2301937357, - 64212135, - 964827543, - 4062021037, - 463814621, - 2591002756, - 3034306082, - 1346952501, - 3616259860, - 3529562482, - 1407376597, - 1300938740, - 1831428582, - 1377054435, - 3494483672, - 747322418, - 216966075, - 3109940556, - 528951892, - 1669013946, - 101428898, - 2355473724, - 1271448741, - 296701196, - 268703684, - 3772961050, - 1364096728, - 3595360865, - 3834654553, - 245756443, - 1180671740, - 3059654943, - 1665841768, - 4037643718, - 1968685557, - 4003118184, - 1863308575, - 3388905795, - 4159463682, - 4075930734, - 3935485977, - 2840325196, - 18372373, - 922566769, - 3339869542, - 2322470696, - 2065294323, - 4265824665, - 429328623, - 2074833176, - 2599110428, - 369418755, - 3008438360, - 2290841335, - 2261453736, - 3219343943, - 3835916767, - 3330072959, - 1011610580, - 4028138814, - 2334037773, - 1160961029, - 3783760768, - 4129099873, - 3347763150, - 1542597051, - 2667694442, - 1899324151, - 4271283002, - 446119623, - 1742983365, - 1490047239, - 3496881753, - 1609204301, - 1618233515, - 1446119000, - 3059663608, - 2392848378, - 2197177325, - 4202324901, - 830381063, - 3172287722, - 2284794326, - 60048900, - 776939959, - 126368974, - 3335316819, - 1617224393, - 1887735511, - 1166521134, - 2051868140, - 204477306, - 2610832872, - 1270236240, - 2858895850, - 2259287284, - 562086299, - 192678059, - 206934821, - 2586951764, - 915075707, - 1531503316, - 2422154594, - 52428376, - 3158676538, - 3151131838, - 136530178, - 1767843381, - 272791523, - 3828859539, - 1225138780, - 163687578, - 3525118767, - 2535968292, - 1924379759, - 283228679, - 4163469278, - 3564332123, - 2796953513, - 3876635710, - 2631269364, - 435019183, - 3612086791, - 3922297413, - 2481322453, - 2240232544, - 264330780, - 665379959, - 121343678, - 3341464509, - 1276481199, - 890467429, - 2406267587, - 2548172695, - 1555519814, - 2624817395, - 2649640796, - 2008390449, - 3369404831, - 3318100743, - 4221083470, - 876058616, - 1611683006, - 3782414599, - 927777533, - 88074728, - 1295423020, - 4122276637, - 3546635539, - 1290911081, - 1656784269, - 1878676170, - 994393576, - 2611964223, - 3332196548, - 613467902, - 4227931359, - 628818529, - 810178161, - 4187267699, - 3258744658, - 1124346511, - 2242608640, - 1767743482, - 3960871523, - 3694411777, - 406925992, - 881968096, - 1110666459, - 2373577443, - 1816382591, - 3578792728, - 3059987639, - 1362889683, - 3276050168, - 85597507, - 3955182174, - 4190965891, - 210511918, - 182308576, - 2970087759, - 681329371, - 217312980, - 3140854762, - 4199572746, - 2423266063, - 611338769, - 188684580, - 387654590, - 4208113818, - 938495350, - 245698597, - 2592260023, - 4067163389, - 519701232, - 1490532487, - 3677927206, - 4258482897, - 3236806699, - 873090090, - 1615040827, - 2684458234, - 1214354773, - 3808440772, - 2406008897, - 3692493684, - 1219698021, - 2285892732, - 100870239, - 3388557694, - 2876509474, - 4244766036, - 1017137303, - 3662418363, - 4236747031, - 837030258, - 3878772982, - 442432038, - 2350568934, - 1377998825, - 580739222, - 3664426791, - 4221279257, - 1015619765, - 2788249033, - 760252448, - 3392519986, - 2585360459, - 140810994, - 2492079986, - 1783515715, - 3751207537, - 1323412349, - 3653658228, - 1639014390, - 887227437, - 2465063999, - 3023598050, - 899721999, - 2706288461, - 1998284994, - 2926476684, - 2950171951, - 3726696418, - 2404322839, - 1986985524, - 1863053884, - 4292239636, - 1500243302, - 2477397933, - 1886915427, - 314868964, - 285534586, - 238835825, - 2091996952, - 1712504420, - 2535782508, - 1059481110, - 1551368040, - 2569309671, - 164825657, - 4197566927, - 3007996126, - 734721058, - 1075862705, - 1190607268, - 3085176441, - 2647730498, - 276950343, - 4188313105, - 2644079974, - 4268419917, - 2118105026, - 2838182688, - 631686803, - 4049268539, - 1213849470, - 395500138, - 411451934, - 3921892282, - 1428122457, - 3020360876, - 3699851865, - 2119420288, - 1032914964, - 911509731, - 379170880, - 1931756704, - 2671028788, - 2596306016, - 524457794, - 2484367349, - 3969243850, - 2002483571, - 3535862375, - 4168823533, - 4122856451, - 299191759, - 4043906425, - 3530247727, - 3073040529, - 2219836774, - 1533630956, - 833955906, - 3525350270, - 1111680406, - 3599551747, - 479339881, - 4188026512, - 3947101254, - 3309992798, - 4150344220, - 1712302370, - 971968818, - 694304365, - 4189216881, - 650392319, - 2475725098, - 1112484136, - 4067521904, - 1457755905, - 1198460893, - 1448917178, - 644122900, - 1977075084, - 2680431451, - 2297523520, - 758780515, - 2362536300, - 69290656, - 3355651761, - 2497463743, - 3637278887, - 817056130, - 1618493112, - 3238323433, - 2576549056, - 4134473132, - 3941966948, - 2468389063, - 1989550897, - 939185386, - 154995128, - 1050055369, - 603118285, - 3385201060, - 1906746855, - 2510736699, - 1496731888, - 3576997171, - 1620074729, - 1769919715, - 3212241340, - 2437369248, - 2845004790, - 773974130, - 2057140996, - 3506691775, - 1774264184, - 835045581, - 2654816329, - 1511846742, - 1592372647, - 3063102621, - 1560480041, - 3994960219, - 776324840, - 3819796405, - 898988054, - 37164886, - 1744208957, - 1089382268, - 3694627279, - 732493848, - 763581161, - 2631056576, - 176492401, - 121625068, - 3815059576, - 3075385388, - 156121283, - 3028625738, - 4214465957, - 2335965573, - 2130896323, - 3930208688, - 3555403758, - 3702865408, - 3804078404, - 3050737015, - 3869289500, - 2102279238, - 3206425564, - 267786674, - 3483225181, - 522554066, - 1984826377, - 3217768675, - 3838297681, - 3405536830, - 2966997290, - 2902635987, - 2810651413, - 2195519628, - 4153919901, - 3765936067, - 2391008749, - 415766520, - 3494083625, - 278039327, - 2195922196, - 3358034354, - 3985136516, - 3706836578, - 319317736, - 1266735130, - 2648410921, - 3052965412, - 3860521011, - 1335678359, - 898803331, - 2771426421, - 1100294522, - 837103821, - 1822780985, - 2468563755, - 2652326421, - 1237920298, - 3888314916, - 3703270860, - 2334954603, - 425709934, - 2923195992, - 3781553449, - 2481380543, - 2836201016, - 4163743535, - 1856271603, - 2514914508, - 2659740260, - 994689858, - 1754129618, - 2572270590, - 933071645, - 3238911999, - 2140596713, - 2324809752, - 2447233203, - 3944524421, - 1464590078, - 1783469000, - 1426484321, - 2831036589, - 669953366, - 2467395920, - 1346745980, - 28384445, - 520057418, - 2605156850, - 3547641409, - 3968632424, - 3586137739, - 1829248051, - 2877202614, - 3505134519, - 972761614, - 669880595, - 2736668144, - 1806406509, - 3613308662, - 3957011320, - 2148405042, - 4260751373, - 2998225764, - 2338191417, - 216214311, - 4183131842, - 374916770, - 2884617637, - 3296738313, - 2074837802, - 2384235525, - 3030717299, - 1950687364, - 967763152, - 4071323425, - 3730628665, - 2438950262, - 1779914536, - 3291569086, - 472167725, - 3873972613, - 3746688797, - 3288172204, - 1586007980, - 20146338, - 1356698351, - 1241784843, - 896604961, - 3504660206, - 1230568383, - 2418737211, - 859280986, - 4002301551, - 2466760899, - 834105300, - 3254854935, - 3968072035, - 4123415185, - 1521003012, - 2749958854, - 546877746, - 1779121879, - 918664132, - 323508823, - 2959053448, - 2234275917, - 391098903, - 1525191579, - 3014675918, - 840072995, - 2289738701, - 2626990321, - 2617163154, - 1509589808, - 1658571668, - 3968660169, - 2750932260, - 965382996, - 3744578228, - 63238035, - 1420213592, - 3547158354, - 659688910, - 1687362099, - 3671914349, - 4088721928, - 3129154106, - 2800628877, - 2056370684, - 655539975, - 419330280, - 3477754689, - 118810946, - 3783215365, - 3617854189, - 2773406401, - 3398689733, - 137446820, - 3445441799, - 1377751978, - 102773037, - 1428576770, - 2126861245, - 282024741, - 137965589, - 799908344, - 2747012104, - 2588842363, - 4079593756, - 1884796543, - 2089878612, - 287438339, - 3042459863, - 284155932, - 2194328115, - 2537630306, - 1115213219, - 1000033464, - 2054992093, - 4288536304, - 3809982624, - 3143688791, - 912790566, - 2690711345, - 3282737653, - 1757552999, - 1662483077, - 2906945953, - 2589432623, - 3764809490, - 3954618988, - 2997904974, - 378410069, - 2557433647, - 2315034770, - 3168371160, - 1074613766, - 3685021410, - 2666944827, - 667360663, - 392246967, - 1963080188, - 241189265, - 2383220761, - 273454907, - 2699152184, - 1178758157, - 3686978840, - 3588348145, - 475514317, - 1401569826, - 2822156887, - 762344545, - 1302677667, - 1336163318, - 1574429551, - 2438801135, - 3464343896, - 2773171189, - 800437699, - 1988558003, - 3139930905, - 2680545570, - 2517347943, - 381423179, - 3749204260, - 171704860, - 4110583218, - 4082557273, - 4117643380, - 1581712905, - 1478575901, - 3213409901, - 3570398352, - 199363079, - 74998555, - 1497479943, - 1588902876, - 2182716719, - 2044279883, - 2530715703, - 3631828968, - 3028359884, - 3296477376, - 3712890896, - 695166934, - 1681668003, - 2116068226, - 541304037, - 98394202, - 3675545685, - 4167724997, - 3036031502, - 2203689807, - 1365103938, - 128733408, - 2267978318, - 2423691132, - 421730666, - 1133375234, - 1488361108, - 921779152, - 2401667467, - 103926862, - 3304404831, - 1435097980, - 104836849, - 2621606137, - 1212957977, - 2886318207, - 125706266, - 3458107665, - 1923375261, - 1974177236, - 1379184180, - 151282983, - 1974411369, - 3532138619, - 3129889958, - 493207527, - 3855901858, - 385431276, - 593699702, - 2003604409, - 1273493811, - 2534089971, - 3801017906, - 1391378085, - 4052598651, - 1493885902, - 2547139905, - 55775436, - 3393276795, - 3022286616, - 3556257664, - 4073739116, - 3010324767, - 253360888, - 1769675772, - 4198702121, - 3004501477, - 934221424, - 2043508004, - 3285425452, - 1261525474, - 1643528612, - 20940993, - 2937444680, - 2920811264, - 3721095898, - 3980255034, - 4082099408, - 2207357862, - 2397279872, - 3133632760, - 3858259552, - 2205386511, - 3119367492, - 1226554158, - 1383031641, - 418493382, - 3495739874, - 3765302976, - 1618904343, - 247540440, - 234268054, - 2441127976, - 2008348696, - 965985008, - 2881602208, - 2608102572, - 2300847298, - 3891718328, - 1421948532, - 3557204540, - 612553099, - 4060595604, - 46753905, - 4050163030, - 1338654393, - 3060241350, - 2974986367, - 2158728507, - 1980012169, - 3427060753, - 4039506524, - 3687711034, - 2625388079, - 122917121, - 65262698, - 1710153628, - 1062178361, - 1192911960, - 966332899, - 2929033306, - 4175997354, - 1820552253, - 3990059547, - 2738720271, - 1415735718, - 1747006761, - 3680962181, - 2550782379, - 1472091423, - 2408227799, - 659637802, - 1330226412, - 3165519077, - 2780611778, - 3779279565, - 3640745234, - 3531581475, - 617584432, - 2625316884, - 2964566706, - 2366391302, - 373228380, - 3957914941, - 1258771570, - 1731935386, - 810067853, - 2605132230, - 1840584526, - 4079026280, - 4094595934, - 829301828, - 565188535, - 1263030328, - 3726343709, - 918653609, - 472976186, - 4286770678, - 4036012713, - 3176300636, - 1107071055, - 4144843767, - 25492387, - 2207649473, - 3633977206, - 2147514011, - 1269991804, - 2683965332, - 2520639290, - 3086660701, - 617169089, - 3432492182, - 3710673013, - 3409402171, - 119439193, - 3963100264, - 3342998344, - 3693521218, - 1853335090, - 2389605173, - 2872784534, - 2317685497, - 3978855008, - 3380967185, - 4286235106, - 1349107887, - 1969512946, - 4208086384, - 581163680, - 1082760276, - 738048149, - 1202565836, - 565233836, - 3445288438, - 3039896757, - 2880462532, - 2474618502, - 1513484970, - 2142309827, - 683739786, - 378146314, - 604326336, - 2048166945, - 2597099465, - 4072040928, - 1755442912, - 2907595471, - 3467550247, - 250062411, - 56058659, - 1145710430, - 3039069266, - 1308673499, - 1714524332, - 581730636, - 2761367602, - 626014209, - 137071723, - 470268169, - 1437302565, - 2321627678, - 22353324, - 1332773196, - 2159532693, - 2158846549, - 2373532920, - 1862594758, - 597810181, - 2340972393, - 3639427680, - 1007863726, - 695031015, - 3011496685, - 270375245, - 506179337, - 2465725881, - 3586616321, - 2004336553, - 2540593185, - 3053313031, - 242205498, - 1129472966, - 2423477468, - 2905078526, - 1273830817, - 3684442631, - 1606743285, - 1856404782, - 997845114, - 3493020767, - 3764183853, - 1210713014, - 775445948, - 2693348766, - 1544199630, - 4134758035, - 2289181747, - 2575820169, - 4039240109, - 1927565147, - 2469436912, - 1147407391, - 88721923, - 4251027520, - 3943603462, - 3343041971, - 4136117809, - 1408968141, - 2011730488, - 1115400373, - 91805372, - 3797413206, - 3231843795, - 254866824, - 50349007, - 3008475015, - 4096823174, - 806995258, - 579015943, - 224913096, - 3452629520, - 3935452085, - 2158823338, - 443232881, - 27590479, - 1626003822, - 1659214304, - 3730751302, - 3304817506, - 2126464135, - 468094930, - 2004841432, - 4244266140, - 3191633824, - 621908160, - 386502852, - 3160550258, - 1846013927, - 3929062191, - 1752552051, - 2020989873, - 3733195436, - 3332803725, - 568035617, - 677499606, - 887350608, - 1910824007, - 1074653741, - 2669527119, - 223941937, - 3638297443, - 3976028795, - 2153246105, - 3107649842, - 2225817714, - 365559155, - 2590904030, - 4267229876, - 565109877, - 1465231259, - 1031473198, - 1393103679, - 3065248506, - 874527522, - 4007089971, - 1754535268, - 468826683, - 3193473935, - 2427827574, - 3093649186, - 3340523571, - 538785348, - 540707700, - 1138431154, - 390508157, - 2231744390, - 3431900480, - 2267895757, - 2586775989, - 458121248, - 4151047812, - 1794590573, - 2207519661, - 757298974, - 2917271667, - 2795562736, - 2743741950, - 1960281059, - 662426606, - 3129250965, - 3284489932, - 2860828788, - 1665561948, - 243380839, - 1919574353, - 2539834343, - 806470139, - 1347773492, - 2588536919, - 1735157985, - 2984222111, - 3613443080, - 2161200608, - 1139265850, - 428233632, - 3310537846, - 130112194, - 1688164293, - 1800051811, - 302537682, - 2956495410, - 1641858969, - 47106965, - 2547135390, - 3629305305, - 2304666287, - 2953885888, - 4274433428, - 3596400556, - 979899549, - 1408111459, - 2891516324, - 3148158119, - 2198724778, - 3377935353, - 3741107315, - 3692011630, - 589770277, - 1491910405, - 3070679829, - 96783510, - 1097094619, - 718459500, - 1566463826, - 2251827641, - 615019390, - 3547997086, - 208891287, - 3237297588, - 3017013236, - 1351182280, - 3220242913, - 1869677811, - 2552355320, - 2314224780, - 3646448874, - 827517512, - 286583337, - 2545551719, - 1652513053, - 2288536154, - 1104922602, - 1453694093, - 3747222644, - 3724572717, - 208872394, - 1298083238, - 2440775102, - 490732304, - 2579371915, - 773048215, - 3117989783, - 3093360535, - 2944738318, - 3420927430, - 610089208, - 3465176615, - 2026748828, - 893684011, - 1051908807, - 1631920906, - 3068536747, - 2517988544, - 1237193659, - 1186253152, - 3445268041, - 1527128786, - 52389220, - 2272891464, - 4216412620, - 162836167, - 285766635, - 1450011436, - 2529126016, - 2774138045, - 363705219, - 1046202415, - 2342962149, - 3660787015, - 1475962515, - 470852383, - 718191623, - 616824944, - 76199769, - 1858153084, - 4018570557, - 3978103333, - 2630348151, - 3609233416, - 3189344676, - 2518740437, - 3931673556, - 1974037890, - 704660142, - 3939759348, - 28317872, - 155880254, - 98267636, - 2179068948, - 1621791453, - 3883686984, - 3889013516, - 3901334336, - 595696159, - 2056195890, - 1766401857, - 3894355691, - 374485730, - 3627058903, - 2345537254, - 774497373, - 2739386696, - 638042079, - 2714586118, - 3681906223, - 3586849544, - 2279548262, - 2388695512, - 2729026734, - 3921872400, - 2742643461, - 3256049952, - 3524792600, - 900652213, - 4027843861, - 1664123083, - 1693946252, - 1091032590, - 3229605224, - 3138471550, - 4076063174, - 1921014104, - 703457779, - 3778215220, - 2874553038, - 1977925517, - 3474710342, - 1397524212, - 1639376229, - 1365339851, - 1396788617, - 4170383328, - 2374091134, - 917644633, - 923930639, - 335414448, - 2894224058, - 2132047519, - 2139834936, - 893152735, - 3658071140, - 1808034705, - 3992989164, - 541814435, - 2467639229, - 4252046851, - 2221776534, - 4010357500, - 3280876403, - 2195433727, - 605914204, - 3580984099, - 1849716223, - 1379095517, - 1444911428, - 1727601518, - 1107293130, - 1360518977, - 3882144643, - 2304676230, - 3161709399, - 4202670478, - 1726836178, - 1352003285, - 1211530781, - 1428143088, - 233742193, - 254065653, - 3778834578, - 2960826705, - 3846707957, - 78125029, - 3035610061, - 4248789487, - 1988353744, - 1488294606, - 2658401089, - 826190398, - 982579256, - 2611299281, - 607386235, - 383744519, - 741541202, - 685070477, - 839618654, - 168365378, - 3600193469, - 3516963641, - 3847439358, - 59984353, - 3531750373, - 4110124515, - 1832015278, - 1109782359, - 224715782, - 1368486037, - 2896735063, - 1631277466, - 2122909243, - 1329181006, - 3883429858, - 2709763262, - 1485532168, - 1454163675, - 3877647488, - 1314197277, - 2191792338, - 1547290735, - 2767848648, - 3165457718, - 2615232542, - 3554360174, - 3461892329, - 437444556, - 2530137891, - 2811265260, - 1462499085, - 344905327, - 3209896916, - 2633921064, - 1629316811, - 1898327023, - 1699291966, - 3173676731, - 2413271340, - 2308589503, - 3010504633, - 2318476076, - 4283542148, - 3136680443, - 1274070160, - 3634534492, - 1621178692, - 2720726637, - 2557726718, - 1593800678, - 3618016582, - 4222420563, - 1427771361, - 2709604096, - 3380881481, - 3429159678, - 1651149672, - 851806684, - 1924253026, - 3042327229, - 2621745272, - 31459648, - 1789941349, - 2699969840, - 4089263817, - 309554307, - 2416205374, - 668142405, - 1028045075, - 2577874596, - 3966935454, - 4013816966, - 952209266, - 2464801694, - 1951540504, - 270149487, - 3537443337, - 1700303154, - 1525434601, - 2016801699, - 1016066231, - 788950326, - 3301786090, - 867188914, - 591182740, - 4147481744, - 1636209111, - 2870738335, - 1379570713, - 1718211426, - 2080443576, - 3117953119, - 787459719, - 454627901, - 2241519126, - 1690518058, - 1687083774, - 721125501, - 177924835, - 596380000, - 3547974950, - 3551038049, - 193705970, - 3903775738, - 2791266941, - 2946582806, - 3677605584, - 4114537422, - 517706327, - 2851515209, - 3606961145, - 3140861945, - 2004897753, - 2934409336, - 2266808973, - 1728851303, - 2963852036, - 3726868429, - 2346475915, - 3284094460, - 2603029281, - 1910866618, - 2201562964, - 922269736, - 3490564305, - 1223267941, - 781137632, - 1409009696, - 1481644162, - 638868514, - 1299363950, - 184622510, - 2140815555, - 972229383, - 3463817591, - 337587666, - 1588378885, - 2458859056, - 734138965, - 829580768, - 1807474494, - 1339021242, - 2949169736, - 2696891033, - 3696602735, - 1454748247, - 829820702, - 3565850641, - 1581233899, - 3083125002, - 1038667443, - 3614790955, - 2537209861, - 429330569, - 3337980755, - 3093601805, - 4279291223, - 1931300006, - 3549963871, - 3073864229, - 3313723218, - 1045894152, - 3527208247, - 3955141082, - 1168948257, - 2252748292, - 1419859777, - 1697615867, - 1861852649, - 2965412203, - 2785614098, - 2019081017, - 3865163652, - 1715960207, - 538250598, - 3777321576, - 2012459609, - 2954119511, - 2929968610, - 3887420692, - 3803424535, - 3695819128, - 3864966792, - 2146529039, - 88966253, - 3171364951, - 3564359251, - 2710751340, - 3483003590, - 2389828882, - 3033472152, - 4212945213, - 3200039359, - 2723039622, - 1234116552, - 1847511641, - 1554459825, - 490403919, - 2702426108, - 1360638138, - 3767662101, - 978930427, - 1673983808, - 2622724125, - 1465277160, - 3276263209, - 104027869, - 1275307505, - 3713601516, - 1892013036, - 2561897658, - 666977991, - 263458610, - 1205359270, - 3825584429, - 1772594848, - 983170947, - 1967517594, - 2312744096, - 1934059502, - 237802706, - 3413186660, - 3980764592, - 4157606336, - 3321271480, - 2228423201, - 2951588029, - 3216481751, - 4263810151, - 3695527411, - 3201086913, - 3465621801, - 3115371457, - 596190060, - 2778927014, - 1192881408, - 4070672649, - 1695932166, - 2461613458, - 3114294227, - 1035068802, - 1219869074, - 1567081138, - 3182031525, - 996055838, - 2184037038, - 1613272955, - 4138419359, - 3574859140, - 2772736437, - 3058734518, - 879110565, - 1620863568, - 451271198, - 1423497993, - 2260885020, - 2287937560, - 2182652781, - 1959408511, - 3417993986, - 2762728750, - 3723683050, - 3620972185, - 4004350356, - 3852922831, - 4042483635, - 817590845, - 4008434170, - 4150679218, - 1818473315, - 2274061975, - 1287134641, - 2606537046, - 2900163666, - 764327589, - 3380352217, - 663960686, - 1574962534, - 908720832, - 732411607, - 3092799659, - 89050124, - 2612418305, - 1167021814, - 2703900926, - 196466092, - 4100558315, - 422322205, - 553572451, - 3812332461, - 2709890514, - 1048889592, - 2536724688, - 1892819687, - 1492915362, - 4123276265, - 656277319, - 1950735096, - 2209777574, - 3597582923, - 207740613, - 1242405110, - 2794288428, - 2384281671, - 789332028, - 2113081093, - 4033156773, - 3430572653, - 2514642758, - 3849776233, - 3999536558, - 2183668968, - 1797714154, - 1574723005, - 291326548, - 1162829322, - 2833518095, - 312882022, - 3489561023, - 311193931, - 226320155, - 1285113365, - 1105912286, - 188068592, - 3599336506, - 2095448637, - 2645627254, - 3743399066, - 2671665149, - 4239787521, - 132154696, - 3481420823, - 3573468233, - 4187070124, - 2530155508, - 2924766285, - 3143247770, - 3915372328, - 1180529678, - 3971354205, - 602939736, - 1999356640, - 874227868, - 3051951819, - 1059212591, - 2567771075, - 3659557483, - 2849657868, - 2790113113, - 3534643290, - 3382123624, - 4227034778, - 3266187526, + 589510970, + 1323998495, + 176851027, + 1551255100, + 397738850, + 911500238, + 2737091527, + 708980051, + 3994760831, + 3303700682, + 888569156, + 289778144, + 1768937714, + 1996145717, + 3840916818, + 1501832691, + 1936487990, + 2944326300, + 3871460848, + 2746191075, + 2366037753, + 3260886753, + 3296565666, + 349591973, + 1396175032, + 3080033954, + 2398883030, + 3949466403, + 3378685587, + 3195545710, + 365676136, + 197147035, + 2389375401, + 4146490038, + 1979426616, + 1476646428, + 3924163679, + 1238855916, + 1880485209, + 1818526322, + 3438894061, + 1419717566, + 3337932728, + 488209636, + 2538814721, + 1376649369, + 2966036193, + 2636818228, + 2473945819, + 1243743887, + 1333722351, + 1378848062, + 3401063698, + 1934211731, + 3201016272, + 1126062460, + 3227145040, + 2683131481, + 2661254493, + 2911453530, + 3789526810, + 2043164387, + 796844649, + 2093739388, + 3983503398, + 2906976258, + 322110376, + 1954595057, + 1011026963, + 2977775757, + 315889052, + 3101075752, + 3280515219, + 1720531759, + 2451434871, + 128374508, + 3550487656, + 3565976498, + 1210376341, + 57874744, + 3277710806, + 1234230096, + 3673887664, + 1284609895, + 1382134614, + 546595283, + 1333446522, + 1200201824, + 405234331, + 2873729750, + 4196873241, + 2469332652, + 31268733, + 2000566797, + 2863079457, + 1916394369, + 4061015711, + 1801731, + 1602869332, + 3872221784, + 2229661926, + 476638170, + 2885047515, + 3904841022, + 2398848448, + 3362927814, + 900826188, + 583893152, + 809803309, + 783205366, + 1232027011, + 642619883, + 291325610, + 2394595726, + 2083935013, + 441843663, + 3794227412, + 1202087031, + 1608534267, + 3007131968, + 338805673, + 1037358800, + 840481771, + 1477436877, + 3935784839, + 4034282256, + 1683212189, + 1082988566, + 863916003, + 402521186, + 2585215224, + 1184986766, + 2339888681, + 3248831789, + 1327189732, + 1824861994, + 2781708213, + 2514970651, + 744659000, + 1609630070, + 124253669, + 1802674847, + 836390102, + 817098875, + 525539629, + 2493519145, + 579659934, + 257006946, + 3821235469, + 3544658163, + 3349581169, + 1140776216, + 1732186404, + 2653732246, + 2511018359, + 772717925, + 3203167836, + 1918239877, + 2377626998, + 1895572715, + 2337741007, + 3165625027, + 3165169364, + 3916395290, + 1579432721, + 3273935601, + 831366274, + 1544919879, + 1357891583, + 2528107809, + 3984972543, + 1837805628, + 2655614052, + 278077258, + 3125585591, + 4242824029, + 2137097702, + 1362770141, + 3090519589, + 3542246396, + 2267914376, + 832654081, + 152735734, + 3007818970, + 1425167007, + 3714717860, + 1051882702, + 535736694, + 1094103322, + 3490517343, + 1957250784, + 4253454013, + 2178064991, + 1347056279, + 1325621645, + 3261978310, + 2296494821, + 1270875229, + 3085006795, + 2916172684, + 3332466953, + 3886507540, + 2154714022, + 2875062767, + 3077420176, + 3718741151, + 4069134400, + 2080712677, + 533646373, + 1494115259, + 2364174129, + 2727978903, + 3062137147, + 3726496668, + 3615246455, + 3086334563, + 2635806566, + 4070476148, + 4217497383, + 2785524604, + 1454301713, + 2242779066, + 839119679, + 1643111753, + 3384973756, + 1163654251, + 3118297991, + 543844477, + 4232234231, + 674505456, + 3698352894, + 2216806375, + 2486477552, + 3555566336, + 2011337427, + 1346436797, + 2947356558, + 3181592718, + 3965165134, + 1335350205, + 988042470, + 2124837620, + 1295962701, + 1522323110, + 1637981374, + 2686006701, + 713136333, + 3260483901, + 989480593, + 321644116, + 267440611, + 2369524101, + 2139322365, + 2935019289, + 486650023, + 231245891, + 2714228994, + 67591365, + 2380817258, + 2081839381, + 2313368627, + 1485151563, + 653563050, + 1082971612, + 2267410275, + 651519860, + 454536328, + 2315934750, + 2420623973, + 375642378, + 2182955550, + 296208613, + 564661310, + 3961785461, + 3678215070, + 3153379541, + 1971824091, + 1536441524, + 3573140313, + 3000952863, + 1455167830, + 3309756666, + 1001326205, + 4016740122, + 2189037247, + 467730712, + 1536025956, + 1186723233, + 4262779360, + 113642116, + 912800923, + 2242370329, + 4100901358, + 225415208, + 1907470664, + 2691952618, + 4097915267, + 4106718559, + 1248713041, + 2570330622, + 2861469798, + 681401008, + 631603154, + 1643272433, + 2126934219, + 1391106058, + 1235457205, + 3714312277, + 859041825, + 3523755095, + 2066936876, + 3916072659, + 3758707634, + 3263960239, + 2041189508, + 3159326937, + 983812181, + 2269627422, + 1436127295, + 4235963961, + 3039314641, + 3751559205, + 3727491912, + 225434986, + 380882532, + 685233271, + 12498412, + 3611229940, + 4171128498, + 336638792, + 1272706849, + 3677602200, + 1945754310, + 1219264669, + 1481610115, + 2894749578, + 198454895, + 3770857707, + 1422302045, + 2981610148, + 3113375368, + 401958252, + 3332112199, + 2276137948, + 3289232016, + 3012553435, + 1432418544, + 664621975, + 3560437657, + 819110772, + 3028090815, + 2770831094, + 2533511998, + 2421331763, + 1334424157, + 1823651182, + 1934026927, + 2730732499, + 102398509, + 2458389504, + 4229009847, + 3763461737, + 2432594508, + 2742929659, + 2051723239, + 1577603395, + 1700089495, + 1122718116, + 3670881871, + 1248983772, + 175063174, + 472181504, + 2768438094, + 3091408454, + 4165497612, + 3255851976, + 3174319069, + 2654976129, + 4018660933, + 3310175755, + 543450947, + 61658, + 257876038, + 64319925, + 656565863, + 1323114467, + 3120030596, + 904098398, + 243360434, + 471841393, + 2070742657, + 2189327930, + 1310594552, + 1338071644, + 589521062, + 1363383040, + 2498152117, + 2681609306, + 3085567299, + 4067132292, + 3152526482, + 3888080003, + 4074826103, + 3516587102, + 1761961541, + 1922096694, + 4128048823, + 1635191948, + 2808163681, + 3059860611, + 3441731112, + 2780145560, + 3724070767, + 239301579, + 1656331963, + 3787767878, + 3091037105, + 2939423301, + 4188959498, + 3076095599, + 2776994927, + 3808274241, + 4271663968, + 2228685435, + 3023382778, + 87128799, + 3971101087, + 2951388021, + 815524302, + 1112949658, + 3425555644, + 1772873279, + 267122059, + 3502384508, + 2295263421, + 472908799, + 2632354599, + 2019041056, + 527372116, + 798709789, + 4013916333, + 3759694763, + 1440103747, + 51657606, + 2987526294, + 840305279, + 3043172441, + 1687940543, + 3643447917, + 2973901651, + 2191179658, + 2260332401, + 491961335, + 3634008968, + 31113624, + 834679593, + 1301301142, + 3274761738, + 3751016419, + 3214831350, + 3082788741, + 362247, + 529352187, + 3492444042, + 1280565967, + 2242683529, + 2888564444, + 1803244130, + 3435927067, + 1640753159, + 1898537179, + 3228053778, + 1954206094, + 1540456850, + 248273364, + 1325644712, + 695538645, + 4090026346, + 2274294298, + 2768151390, + 3042025492, + 4269179133, + 3806211342, + 889507951, + 3370546678, + 4096188940, + 2354537213, + 3441793124, + 3203113969, + 3457565506, + 1002278869, + 4152750914, + 3294354108, + 1041991379, + 94798856, + 25722796, + 1546525275, + 2686561750, + 2192563862, + 2621775579, + 2373996418, + 1905310029, + 2214703899, + 2399149371, + 1342545748, + 1185127375, + 288977926, + 1832198850, + 2281434444, + 2737976911, + 614579492, + 3174170846, + 2662962575, + 4163972510, + 3612044273, + 922880552, + 450642186, + 2423406687, + 4156757832, + 2294690409, + 1036538798, + 2666284105, + 240963217, + 606309049, + 683429236, + 1508006389, + 3660632001, + 200640335, + 1582774774, + 1816197300, + 1418551367, + 3544638987, + 387253329, + 2296414452, + 3164444484, + 3335301295, + 1347845828, + 103975637, + 353339457, + 2139146923, + 1254057413, + 540580904, + 221842680, + 1699742840, + 3085492530, + 3117593370, + 3076459163, + 66368280, + 1667989919, + 3042891198, + 3374433660, + 1577596031, + 1518774674, + 3758243720, + 2716119961, + 1471476853, + 2784493744, + 3719462950, + 4237860873, + 243005393, + 803541407, + 1622842474, + 4017105065, + 3282758351, + 2180699529, + 2447225540, + 1628975792, + 3236748355, + 2439493243, + 961318765, + 953497865, + 906897835, + 355062543, + 2843738183, + 4180013865, + 3007690697, + 3038340004, + 2033038495, + 1354994783, + 2425515978, + 736106281, + 3089270884, + 3528514645, + 2663787017, + 1419187996, + 1691117049, + 138082149, + 3459389521, + 2444776422, + 4187210569, + 3615446272, + 2843925404, + 3424484357, + 655655903, + 594221174, + 3515424309, + 3758056376, + 3281136547, + 3930205849, + 4187796479, + 3295721849, + 2206646923, + 104100519, + 652243666, + 3134733359, + 4076881858, + 2771590126, + 3162413833, + 176138717, + 3281037276, + 2300762471, + 1095451758, + 3748256302, + 1541232535, + 1383396764, + 1647384261, + 1602072092, + 77393336, + 2691558206, + 2027445565, + 4104901400, + 1864704831, + 1325350314, + 520716916, + 144290568, + 1087055137, + 666343885, + 494251288, + 2801070214, + 1956499095, + 3474664631, + 3738017554, + 537394183, + 708484713, + 2621188479, + 2437414965, + 2749040283, + 3705659611, + 1564587596, + 2544884860, + 2361479956, + 2642898469, + 4006956758, + 903272237, + 3181366950, + 2268617563, + 3037337570, + 3122746964, + 266276960, + 834872189, + 1653746464, + 3048207564, + 3102639512, + 2110664933, + 557715469, + 2562643412, + 3469866698, + 671343823, + 624738744, + 892301721, + 246335086, + 1480140873, + 31509591, + 3816545199, + 1013980440, + 4007882745, + 822580588, + 2981532131, + 2079641032, + 2375536301, + 2817643035, + 1415256342, + 3287243858, + 504639792, + 2206656785, + 1937728499, + 3918637504, + 3680796966, + 533621359, + 2974466934, + 255732426, + 2156060489, + 3593850426, + 1454027038, + 3427804141, + 2557443399, + 165245859, + 2154672178, + 2211909619, + 3703679581, + 1308185239, + 54229574, + 2229468484, + 2652730651, + 3367287439, + 1928368813, + 1238395033, + 2584334940, + 618288719, + 636082697, + 2419544642, + 2366144864, + 782231482, + 3247134076, + 2247378249, + 3189371452, + 752767218, + 332518050, + 2943208049, + 4047399113, + 270684759, + 4202557980, + 2956905827, + 2093921180, + 2722155275, + 1537413814, + 3696294407, + 3907259105, + 394476825, + 873554126, + 85687257, + 1054481830, + 3952738938, + 2454856867, + 1006918767, + 87263547, + 2523338480, + 787794445, + 1702085248, + 568556439, + 3301349335, + 928651693, + 606880747, + 4021341356, + 1143778765, + 1320053458, + 4199542896, + 3545237112, + 2431061362, + 3425269671, + 2107121171, + 480279154, + 1816750096, + 3608397375, + 3151874520, + 500471867, + 1080424602, + 1520818827, + 1520313229, + 3384770685, + 3387423047, + 3145859196, + 1830541705, + 591143027, + 3733972608, + 3475112804, + 1878822399, + 1272266848, + 2083179099, + 1638395054, + 2268927473, + 3240721436, + 1632193649, + 2128929310, + 308186170, + 4128090400, + 3003138378, + 990485205, + 1717726089, + 2797816427, + 2736389106, + 1252272158, + 3344205688, + 1622328346, + 3345479671, + 1626316771, + 726543281, + 2358436728, + 1216513429, + 430748569, + 2798104788, + 1061340371, + 3348277491, + 797978369, + 4082635324, + 2990078555, + 3780148244, + 3553076202, + 414250002, + 910908825, + 1635019161, + 3696436634, + 3072215420, + 3788207623, + 34479397, + 2565147863, + 2915857185, + 446470200, + 2353291714, + 1813137688, + 1595111072, + 4000215490, + 1134859855, + 1683803030, + 4110852416, + 271242921, + 909618672, + 2933619925, + 3692509540, + 2320463352, + 2710465770, + 2550792716, + 2137955528, + 3701881172, + 1236155071, + 3348182160, + 2152631747, + 3614017399, + 2617865623, + 4198234193, + 1915006184, + 766360082, + 1058299274, + 2570978308, + 1891758034, + 883393814, + 82620053, + 2426741774, + 555375671, + 3985272035, + 476520061, + 303632627, + 3009747578, + 2335133660, + 2327712194, + 1211089530, + 2727413731, + 2184930112, + 3930414404, + 1782868053, + 3914815245, + 2284867307, + 1384188701, + 3515331360, + 2027404046, + 1812693419, + 1223274016, + 2327946298, + 770080175, + 1906775469, + 1537275902, + 647704019, + 458542807, + 1028382745, + 3202191757, + 2823123896, + 1556402350, + 195014673, + 1042565041, + 404659264, + 1468535239, + 1108977985, + 1552975811, + 2113646714, + 2648601023, + 488251269, + 3743207852, + 1957437707, + 1395522122, + 27668661, + 3543192519, + 63006340, + 905449237, + 2606519481, + 164744904, + 816313033, + 3152211986, + 3483956690, + 1822833380, + 754633704, + 4049306471, + 3202904042, + 2540150351, + 3992710468, + 2638528499, + 975313461, + 16947542, + 1268649637, + 1055173328, + 3602481952, + 4287981630, + 4118198795, + 3554520624, + 935392343, + 2875878257, + 657692454, + 2903299143, + 1817422354, + 3369070528, + 1396415157, + 731757887, + 54412594, + 3375043157, + 1849341748, + 2561328806, + 348804904, + 2103970870, + 1745474738, + 1906712304, + 2991800163, + 837022395, + 1865515632, + 1168787834, + 408360190, + 226761880, + 2161703382, + 1061326994, + 2096860120, + 3495365614, + 212250484, + 2663090157, + 3937837638, + 2896517086, + 1690045585, + 3425004690, + 2761272707, + 2057762513, + 618728094, + 3273145735, + 3273491204, + 1798433538, + 2028323939, + 2271624530, + 3626585524, + 3762225654, + 432567336, + 4182989347, + 826508489, + 729003260, + 2292930960, + 1849067238, + 3201521677, + 2354543027, + 1903699277, + 458172854, + 3099872919, + 2973215737, + 2627299613, + 392481595, + 1876678635, + 2415089221, + 2589311882, + 734369483, + 1380882068, + 3035902754, + 4193755808, + 992025040, + 3704321355, + 1224456633, + 440068848, + 257894027, + 22312974, + 3736996118, + 546298605, + 2360876678, + 172411743, + 1786101239, + 2989603836, + 3740056098, + 89059043, + 505890352, + 2924254231, + 1826934042, + 915435888, + 641497285, + 1265259756, + 393231937, + 2783756019, + 2237689340, + 2001000164, + 3213769036, + 2894008859, + 2260329271, + 3719902194, + 2831693006, + 2980887753, + 1782904378, + 4145331936, + 3089843590, + 1225841589, + 4227074578, + 378492114, + 476482482, + 879016078, + 2497518568, + 6404446, + 1019570624, + 1190642495, + 358782591, + 618068251, + 1566307584, + 1538176946, + 2178025680, + 637989982, + 2667374346, + 1700155510, + 808834983, + 1056226592, + 3875640206, + 873207955, + 2280700229, + 3076687793, + 3400679489, + 4109796290, + 1545115161, + 2307281421, + 988798317, + 2750892600, + 1917884513, + 1805578263, + 544845895, + 2944863189, + 3380787724, + 1308614343, + 1701183596, + 382967395, + 1140220654, + 1261313743, + 393032983, + 769916906, + 2465240484, + 3118952054, + 2205202321, + 1626534383, + 2806956938, + 3393689901, + 2749513595, + 2002676905, + 658316870, + 596096108, + 1771370042, + 1420644807, + 4225507947, + 661016470, + 1198045612, + 3217781763, + 1590172215, + 885844536, + 1072021849, + 2518039828, + 1198076989, + 4194650867, + 3310277379, + 3574098973, + 147391920, + 2820364908, + 3495521345, + 1622035479, + 401037328, + 4144282538, + 685867171, + 147788364, + 2734293548, + 850588461, + 4005210370, + 304766089, + 3686918132, + 4082689386, + 747073320, + 1953493766, + 1713032604, + 468891222, + 1663992916, + 887527089, + 3349320927, + 2342884189, + 1587950919, + 3614373107, + 84091027, + 784322011, + 2594506097, + 3182543106, + 3421310027, + 2738756516, + 1447031096, + 3536363764, + 3174094538, + 1714453504, + 1912525575, + 3019905635, + 2355159462, + 3659541285, + 3315775291, + 3069239086, + 563546323, + 2715278569, + 3329837262, + 2774232075, + 581296210, + 3169247540, + 3875748499, + 2574388346, + 942422940, + 2538027490, + 1800723232, + 2866248292, + 683679656, + 2763073671, + 1103680768, + 3299181665, + 31894348, + 87525858, + 2458599358, + 930491955, + 736917124, + 3857363220, + 1152962568, + 617771179, + 1941492647, + 609395826, + 2856461184, + 3521812990, + 2773618216, + 3152889991, + 1351714131, + 149245989, + 181523718, + 715600516, + 3538019092, + 2897169430, + 1509154388, + 1162829827, + 1837399271, + 351742923, + 2845669304, + 2233785130, + 4130375921, + 4233378438, + 3430129029, + 3970192690, + 2910176062, + 1313300756, + 1493454997, + 3604393381, + 3664326473, + 3579537629, + 3019714258, + 1313832623, + 3462380280, + 1570783172, + 3052532963, + 500712340, + 551674744, + 1691198797, + 1007646139, + 2061855958, + 3918896846, + 2349532217, + 2704669643, + 2462700200, + 1463755187, + 2644951031, + 1049047384, + 1362356795, + 2334718026, + 3419349434, + 2966090842, + 112078216, + 1865737314, + 875865198, + 2211084158, + 1086193328, + 2659437179, + 910056074, + 3237044714, + 1430855232, + 1007484969, + 1499130600, + 3996654787, + 3753211228, + 2728300127, + 1319358048, + 3605326440, + 2026829440, + 4005681313, + 2514350014, + 3618720971, + 2217961948, + 2643886120, + 1109165707, + 1357361917, + 3585870869, + 3975058244, + 1572488796, + 3676823008, + 3470094201, + 2872546225, + 3920835406, + 3992675783, + 1156174027, + 3140381092, + 2608121047, + 3058624155, + 2934998069, + 1759196965, + 4067500916, + 1991472626, + 3216619691, + 4098769599, + 588951713, + 3245777749, + 328730364, + 4126839681, + 1792154873, + 2422719474, + 2367088035, + 1310551741, + 1128033721, + 2150996276, + 1581828975, + 645831829, + 813503457, + 3782478553, + 3649932994, + 565493008, + 1237117989, + 1406104413, + 3520255107, + 2338045602, + 3916991046, + 4119017913, + 2958534024, + 3954739116, + 3054230077, + 2089357111, + 2722855650, + 2156538875, + 3623928975, + 328004962, + 1829806979, + 3680050410, + 3349856728, + 204276030, + 1314306494, + 3453817559, + 1440201957, + 2581060525, + 774227086, + 203891280, + 2032606986, + 1417439893, + 96835846, + 3079591025, + 41398510, + 2370311794, + 1552067640, + 4238548553, + 2918547787, + 391361244, + 3128388937, + 917817877, + 3109899736, + 1193398111, + 3994520336, + 3302673874, + 3782873339, + 345550479, + 682307291, + 2438073360, + 2182612000, + 136911609, + 3024578829, + 1464426766, + 1239236169, + 406241719, + 1535531405, + 2249614820, + 3967341651, + 3885490058, + 833285326, + 104357454, + 2328553955, + 82630145, + 3082197131, + 2629109725, + 4085385077, + 1995605292, + 1739322451, + 1857299281, + 1894106091, + 3916707902, + 3993176173, + 4217211762, + 439008959, + 600329550, + 818825754, + 1530207975, + 2238991688, + 960664779, + 3238916603, + 1055058350, + 1940929455, + 1547247554, + 262617941, + 3600373476, + 416132026, + 993368759, + 2220762413, + 2852293841, + 1401214863, + 3029911071, + 1135574851, + 788507775, + 4164163886, + 929053590, + 3881226173, + 1607866966, + 1395847479, + 3583865283, + 1312324692, + 3904671527, + 2853328653, + 1662356337, + 3423291458, + 3668912436, + 703598365, + 2734575634, + 904651833, + 1980080977, + 2814690629, + 1678408372, + 3044565028, + 22124286, + 3835552664, + 1106202935, + 589445083, + 2002996321, + 4035213816, + 2754553947, + 196817661, + 3486306750, + 2267106733, + 1709355984, + 560969423, + 1517733460, + 3855497140, + 2801556340, + 2806825827, + 2967296788, + 473298803, + 1395091012, + 622672642, + 753358551, + 4219187485, + 948513982, + 2514732523, + 2988203347, + 860398870, + 2353708558, + 3661475772, + 4230893692, + 161043738, + 2756794330, + 1450970908, + 420462594, + 881773228, + 56514774, + 1907948897, + 1673406495, + 4171299645, + 2132255999, + 3809708706, + 3431489286, + 919982798, + 709011670, + 1081067199, + 4201636608, + 122269038, + 1258523141, + 181516679, + 1775120507, + 4238218441, + 3558361945, + 3658796380, + 4184496803, + 3478503704, + 4235749148, + 717242277, + 3766020122, + 2600264467, + 4174475018, + 316626662, + 1240878743, + 3078415811, + 572831387, + 2927378236, + 1244736273, + 1975048403, + 314206284, + 1914441224, + 1028117221, + 3574470736, + 2449819628, + 1631424205, + 4224123394, + 1387213920, + 3791010853, + 304120444, + 262280588, + 625045400, + 3195066831, + 2057833987, + 1703506758, + 1976092793, + 979500326, + 512193020, + 3063384663, + 2963708510, + 547588036, + 3049595940, + 3725320001, + 3916537618, + 3889955026, + 1506842990, + 2641879782, + 225436563, + 2535851186, + 3245888294, + 1994911865, + 1796904087, + 962458107, + 1438229843, + 1347717789, + 183138165, + 3661538237, + 3506250210, + 2093502661, + 48215994, + 2293601061, + 3771797701, + 4270309536, + 652000030, + 3884933335, + 4280498577, + 3771682694, + 2572898690, + 2071886109, + 1949013267, + 643211610, + 1021077545, + 1116964597, + 3507381253, + 1055668749, + 1504005409, + 2274252350, + 1231648753, + 2829518306, + 2220376773, + 69824327, + 772847414, + 3740221247, + 3624723289, + 2962455328, + 131199905, + 3495559133, + 1226338141, + 3441459539, + 2708809389, + 3231899936, + 2278904859, + 588773924, + 874836819, + 1905354747, + 786284287, + 166884127, + 1252924058, + 1663292082, + 2963163944, + 1806980723, + 3316352187, + 1806328942, + 2467852058, + 3859711752, + 3080417860, + 3981112232, + 4193085633, + 4165431902, + 2813861506, + 1945379748, + 3407760529, + 3778035981, + 2492778913, + 2517891821, + 1323110150, + 3093972115, + 4217083848, + 2614216226, + 1141562316, + 2557122568, + 2014813599, + 303833910, + 1783656083, + 3159216809, + 1388168740, + 392633788, + 2627901482, + 558935529, + 3140407472, + 2597831840, + 3616663126, + 1339844291, + 2035526563, + 4016101620, + 2110605774, + 871445600, + 2526693095, + 742264744, + 1742440448, + 1836544215, + 807275609, + 3538472680, + 2663262041, + 1982268095, + 2930866209, + 303755377, + 1018210394, + 2587693616, + 739580871, + 2419846858, + 913923280, + 3230906163, + 157123293, + 2552733540, + 1168370807, + 3201727121, + 284650482, + 3742141477, + 530697199, + 2663944551, + 1700576440, + 1772649389, + 3291728809, + 966261607, + 2605032729, + 1902267898, + 658607716, + 421242108, + 23072538, + 3770528788, + 689666739, + 1561495485, + 3942664529, + 1767495272, + 1218870892, + 2866584929, + 2949439933, + 2072458596, + 2796927051, + 4065368968, + 4209619768, + 2849755127, + 733612533, + 595027785, + 2220774604, + 1932330361, + 3556230370, + 1678901321, + 1779213666, + 2071683051, + 1326913129, + 3699383882, + 2812019033, + 3374222860, + 1872559238, + 857768639, + 2681244723, + 3026287524, + 3505509213, + 3259193275, + 3201374879, + 972066410, + 2536605408, + 1625988082, + 4100621349, + 3830470421, + 20566907, + 2367134850, + 1517490710, + 2764556404, + 2908501331, + 3793534428, + 3282361253, + 449374153, + 1517642003, + 654707337, + 1814855953, + 3000000990, + 3267184107, + 2877080482, + 387333527, + 2346755280, + 3951362959, + 2252743198, + 3655559769, + 2047592419, + 3666868457, + 596515358, + 1898850093, + 2619271451, + 432924948, + 406316277, + 3523450207, + 2631707103, + 3104941800, + 1697027111, + 841759719, + 2366283620, + 3320135835, + 1264429240, + 2298543558, + 2811005353, + 3763306014, + 1665312736, + 1219354498, + 3412895319, + 3343735879, + 3182259583, + 2245868492, + 651097240, + 3410529101, + 653153401, + 3187177042, + 805257777, + 3391701023, + 2173991519, + 2764816354, + 3738297083, + 3338249951, + 605174599, + 3447153298, + 2268552461, + 264710236, + 4291187518, + 1248822947, + 1207711803, + 3143689773, + 2120173086, + 1258024386, + 1675669148, + 3944266076, + 3770500210, + 519345158, + 4055969249, + 834847959, + 1523345273, + 2281508419, + 4279945710, + 2256251712, + 2723118906, + 949172489, + 3556653509, + 2204978651, + 2207845272, + 3133121782, + 2938649262, + 1054902655, + 3917906197, + 147812442, + 1590837576, + 1046907258, + 3127957074, + 306554455, + 109358972, + 1957906795, + 10768826, + 2123982763, + 2967261105, + 1591729359, + 1336828548, + 506774965, + 1047427165, + 1037772748, + 3619622504, + 155858022, + 952278271, + 3278643492, + 3225668899, + 3319584688, + 3252897181, + 2181583888, + 1289827804, + 28957372, + 4273878984, + 89664495, + 2492447578, + 398829821, + 494949490, + 2277738352, + 2554005742, + 1519166941, + 2957097382, + 1954972521, + 487387151, + 1232404941, + 1650316531, + 4110337470, + 845353124, + 785405497, + 1646209586, + 15877749, + 3448987439, + 734462387, + 2195390972, + 919642075, + 2955779591, + 702970477, + 3697074056, + 50426274, + 898227958, + 1755036673, + 1910263162, + 2013661310, + 3127844575, + 1853025464, + 2110523832, + 1231234120, + 3892427567, + 1935442332, + 3022751576, + 1985092492, + 2158135710, + 106593183, + 1360514793, + 298362780, + 2058814314, + 1523861399, + 520755225, + 685291107, + 3102826108, + 3549157157, + 3786620024, + 1826280610, + 3631202419, + 3303616201, + 684122101, + 2286439339, + 2125936501, + 2615781446, + 2418283027, + 2738037446, + 1877719402, + 987776849, + 360257720, + 2337725525, + 446615630, + 466757814, + 2541832891, + 2615550350, + 2654609671, + 1361101261, + 3071843094, + 3909891138, + 190222801, + 639699721, + 1024499563, + 2556417947, + 373717939, + 285013433, + 1212167730, + 955227338, + 1299200886, + 113072682, + 567001773, + 945836127, + 3766327328, + 3845800444, + 650637636, + 1006321127, + 540715098, + 1172818744, + 3094499655, + 2871696874, + 2229381738, + 1797948602, + 1568646875, + 1879237494, + 1901737513, + 1178465513, + 2441781528, + 1955727748, + 1602886393, + 830096769, + 4287316935, + 4117789393, + 1764761105, + 1510703150, + 888373874, + 664414303, + 736079463, + 2609555377, + 2973266570, + 2885918245, + 2323361608, + 2208429469, + 1218893888, + 2824695392, + 817620773, + 3061189442, + 929156957, + 2123907247, + 669473357, + 1790257927, + 1207062332, + 3024361152, + 652174046, + 76417401, + 1310445291, + 352503087, + 934222995, + 1621562874, + 3476300946, + 4122868070, + 3046150560, + 4073415876, + 1707347927, + 2800425317, + 2402774749, + 601634370, + 3498639461, + 2649634251, + 3487473796, + 55699024, + 162575137, + 2189462615, + 3472080627, + 3281238142, + 3270065881, + 4110089000, + 1690905601, + 502197524, + 1750228491, + 961423964, + 3128374279, + 1553464502, + 1829292678, + 1235862765, + 3103786199, + 1639206940, + 2997914869, + 3003377608, + 4142043898, + 1747646189, + 1130398955, + 1588783261, + 3034393415, + 845935005, + 1772557365, + 285117179, + 3599356502, + 951748811, + 167401816, + 2232533673, + 2617234967, + 1419932968, + 1167682149, + 975352234, + 2763495694, + 3197752271, + 595823830, + 1588578278, + 2386248794, + 909278656, + 2101377703, + 2230465015, + 2658465810, + 1856737400, + 1938906067, + 3208196807, + 4021819101, + 3059209277, + 3318207999, + 360746369, + 3917621249, + 3236100968, + 296789212, + 2249842992, + 3929462743, + 2575677595, + 549690622, + 2324183286, + 2053744245, + 300456244, + 4030910227, + 1531031245, + 1199942611, + 3368273307, + 3903749323, + 4019027122, + 3053922298, + 3313275547, + 2394355988, + 3651202722, + 1488615493, + 994226677, + 126516137, + 559229795, + 3475663475, + 3304525633, + 1192299247, + 2150786505, + 3670764778, + 907141519, + 4086631695, + 355798397, + 1152147355, + 1879318382, + 2972628956, + 2959490070, + 3844206001, + 3244219916, + 793806280, + 2722706154, + 1515673486, + 4051536979, + 3751106171, + 787433371, + 2843441917, + 3001752017, + 2498082244, + 2950098174, + 868210399, + 3008876275, + 3736120945, + 4129124291, + 3791295388, + 1225908363, + 2807908843, + 2322359598, + 4078221518, + 4205546087, + 1524741360, + 4181623484, + 1930648505, + 4221287427, + 3931404436, + 2667616968, + 3203700481, + 1300442593, + 3268750370, + 4181328070, + 2382233868, + 1208237089, + 992465275, + 1914341727, + 3941390017, + 633721323, + 1211212794, + 3124771829, + 935302196, + 2213884160, + 225187464, + 335369019, + 2291182901, + 1082819945, + 3797596848, + 785926550, + 3994512182, + 645756893, + 2536452534, + 2535773441, + 19422321, + 1534623224, + 1919597196, + 3647824768, + 3220254646, + 2092674692, + 2933366658, + 3232783539, + 1463788534, + 4129792376, + 1347917161, + 616337551, + 971517558, + 3751117533, + 3634717281, + 1015431336, + 322536052, + 916956036, + 10857027, + 3938098947, + 806269996, + 2697631853, + 4162389214, + 690999256, + 2029299267, + 2979638139, + 3141717545, + 2762710271, + 321539485, + 2307214637, + 3479818728, + 489385675, + 3520573746, + 4052845159, + 1242052269, + 1119832802, + 284811621, + 915100737, + 409154645, + 2339193143, + 1955213026, + 321649725, + 3473291310, + 2528076476, + 1598615301, + 2366233483, + 3437529135, + 1172475973, + 168593729, + 3768821186, + 1577379386, + 846618240, + 3914646939, + 3481908462, + 303923048, + 661610222, + 1146463624, + 947347698, + 573098625, + 783396285, + 310215094, + 1977049799, + 1995193438, + 1958422533, + 2826249109, + 2557291895, + 950748836, + 395966547, + 3860839880, + 80399321, + 3897710439, + 725605989, + 3336520762, + 2201987032, + 2028982905, + 4117998114, + 2029461649, + 475649525, + 2465581513, + 2090661836, + 3535920052, + 1440181137, + 2436642741, + 1094214706, + 298503352, + 3027964197, + 2912046756, + 3012909864, + 215072721, + 3343986871, + 4255017029, + 3031591993, + 1966271828, + 1637051752, + 2789186457, + 4034680347, + 2900190375, + 977762186, + 1492081198, + 1117859656, + 1755776345, + 1024800663, + 788188070, + 1792230521, + 3652473550, + 1189966356, + 2393621797, + 937195201, + 490467783, + 644462655, + 930506234, + 1181373083, + 474095790, + 124252498, + 1652553961, + 3191483107, + 2538473963, + 3954782148, + 429825199, + 3574446148, + 741675770, + 3983455075, + 103396045, + 640016805, + 1757341535, + 1270267817, + 2887377925, + 3374766268, + 3909627404, + 3818126462, + 4233499950, + 3202206687, + 2670375804, + 4279538782, + 1566167898, + 935143356, + 3717651129, + 1232649688, + 1541731651, + 3924509632, + 1811318227, + 2317138045, + 1224825071, + 2201280290, + 325909807, + 1326922573, + 3919590484, + 286162193, + 1907635231, + 3393818450, + 3955224282, + 190157807, + 2757057647, + 1922656534, + 1845878337, + 2179708154, + 1429679770, + 4088461255, + 3560749422, + 675620490, + 1553544279, + 2350633196, + 863210006, + 3281660437, + 1358542803, + 2872542705, + 1740564139, + 2468224981, + 4058529728, + 3659873364, + 2610994531, + 1542385777, + 2017845358, + 1791629514, + 3590586223, + 2870590524, + 1459774044, + 2721673246, + 501610151, + 1359461018, + 3927361662, + 2785222758, + 2317916056, + 567024951, + 427231191, + 2778345120, + 479080369, + 3172969703, + 2936135855, + 1193710701, + 2656276225, + 880168748, + 675137845, + 3189626372, + 3465066230, + 3590177660, + 366736035, + 1657775715, + 2630118471, + 3342133163, + 904886865, + 1689196749, + 2685802451, + 3208201786, + 1184802669, + 1609897659, + 1917577126, + 3683439795, + 2730568710, + 1837974509, + 3975279530, + 3531848452, + 3098263538, + 689132706, + 1810247082, + 3974088450, + 2161673793, + 3885678513, + 2464350154, + 4285239191, + 1640710546, + 42170851, + 2692693200, + 2943081751, + 2656421656, + 584224241, + 4276486238, + 1950338098, + 324817711, + 3346079751, + 690459118, + 679246037, + 1996679258, + 2967149760, + 766071505, + 1417014727, + 4099262330, + 1592833865, + 2330778508, + 2143195865, + 473762017, + 3134982340, + 1768296858, + 1945561439, + 3139216732, + 3386946131, + 3781908821, + 3993637444, + 2267412140, + 3543596333, + 3275512998, + 343385587, + 818740474, + 1236420752, + 4194217535, + 2340632699, + 3252608479, + 3880458840, + 933826954, + 93856003, + 352662718, + 1745782103, + 3859654510, + 2534560962, + 2542617968, + 3994687696, + 3084213167, + 3325797821, + 806264219, + 2787148881, + 1768489883, + 2393439046, + 4116519766, + 4222953566, + 1540051338, + 4194428858, + 1452915663, + 167773778, + 2082123233, + 2094812020, + 1887409909, + 1162655390, + 2825034560, + 1247808758, + 3158400712, + 3717520632, + 1879291050, + 2658015404, + 1518866134, + 2185728048, + 1487639175, + 3481767248, + 377910014, + 3734723027, + 3865880445, + 1735305658, + 3713504513, + 3132247514, + 2863292055, + 2180225743, + 3898417300, + 3045930447, + 2791861526, + 1045217052, + 674566151, + 888905680, + 651294073, + 3315988228, + 926625507, + 2908128598, + 177197779, + 1847612557, + 828559145, + 4239611977, + 4001973704, + 1847386160, + 1744489124, + 2922546055, + 909174414, + 44554434, + 188383855, + 974679972, + 4288576748, + 1064602186, + 2279863759, + 1218831334, + 623534196, + 219236083, + 63933782, + 3283800549, + 1234970049, + 2948584573, + 2415808733, + 3815162556, + 2839463375, + 2692935733, + 107001639, + 2680781328, + 2852086318, + 3509486863, + 2314756376, + 1647781629, + 625031852, + 101533661, + 2813360360, + 3362463028, + 3690168785, + 1543840477, + 3866615038, + 100977787, + 3224692541, + 3587716945, + 719158630, + 3213760234, + 2267688934, + 1441518838, + 3366693669, + 2548869666, + 531908748, + 2337564811, + 2824158723, + 3169848842, + 1227008332, + 2333581455, + 187965202, + 3366360161, + 2314970481, + 2576780768, + 2377332394, + 2814051660, + 2201444562, + 2002863793, + 1788827187, + 2277254017, + 612334030, + 1687580580, + 652292579, + 3495939639, + 115192845, + 850157650, + 2649115605, + 2678932407, + 3421560740, + 1476965463, + 3864108901, + 1782032630, + 3044795072, + 805504792, + 143825280, + 961777618, + 3635031549, + 1701285733, + 953286817, + 3233529251, + 1860747559, + 3756863377, + 4108876085, + 2208855334, + 4005207313, + 900400860, + 1915532138, + 1684465777, + 319113414, + 4040903323, + 3759509617, + 4203775089, + 1096838946, + 1348786508, + 2204513234, + 1005485709, + 1315093781, + 2278279183, + 1598385100, + 2127679690, + 1829010384, + 2131890044, + 2907075157, + 2890255569, + 3324859759, + 1855046239, + 118912092, + 948184862, + 3964956420, + 1478027186, + 2825110023, + 1389450110, + 1687228580, + 3289118538, + 2913305163, + 259944603, + 943409016, + 1655114960, + 315198934, + 769313190, + 2031831311, + 1936990921, + 2557307702, + 4049060769, + 1261705442, + 1690095542, + 3488156236, + 2325058438, + 4280618745, + 3787923316, + 4235475404, + 3422644011, + 1351439696, + 4010137166, + 1275314825, + 2756556397, + 1215878865, + 3564222680, + 2603036554, + 3389921199, + 2303801597, + 2539532970, + 1987127156, + 636962900, + 3451101783, + 3660371031, + 3933825293, + 811975579, + 3211258031, + 1758497400, + 631092889, + 1477942840, + 3780342636, + 1394468521, + 3884013575, + 2210783335, + 4284047654, + 2954793713, + 4057802430, + 3875411177, + 4173101083, + 2374868803, + 1138961050, + 4017496637, + 1748121183, + 324398887, + 3388413348, + 1421451938, + 2003520381, + 1938421530, + 502843124, + 4092269239, + 3124906482, + 1312677696, + 3963884729, + 3078964447, + 1415486080, + 1780460978, + 897543310, + 2531474031, + 3018614311, + 1082815208, + 4001984226, + 498150541, + 1620378540, + 1216275450, + 2346327432, + 1720984176, + 1603311912, + 3964902601, + 3490550605, + 3531834915, + 3789815369, + 2891277963, + 353012763, + 4210071225, + 3985612145, + 146549502, + 546083811, + 2665789951, + 4170752803, + 2789229246, + 2928540608, + 574353496, + 1213296472, + 3025553540, + 2897419852, + 3193639884, + 3807290715, + 2136142445, + 39898071, + 1043183091, + 96570739, + 313256240, + 2585059307, + 2949800163, + 529046774, + 2948064745, + 2703653319, + 14715738, + 3540100494, + 2652446874, + 3592494624, + 2325281458, + 3090026358, + 2942030534, + 3968648344, + 2503924286, + 2281103951, + 2660427215, + 1118473308, + 1509239743, + 2916996689, + 1498829336, + 2051980650, + 250189500, + 3665182847, + 2909572056, + 2294626799, + 2944239671, + 483810593, + 3703858315, + 2849742082, + 99441016, + 711375742, + 3240712598, + 865658184, + 3792964812, + 1140491868, + 1251010177, + 3972777526, + 149040753, + 3855208345, + 1713592847, + 3642530481, + 3295259653, + 136750657, + 1141650279, + 2553821246, + 2566573684, + 215217559, + 2521251338, + 2461194406, + 277826220, + 2998894768, + 3856313489, + 532725356, + 725275576, + 4121938655, + 2701056102, + 1739249689, + 4116099840, + 546955007, + 2671031117, + 3563388598, + 2077602378, + 354965497, + 3921478345, + 2200137986, + 2437363015, + 4233937353, + 561597003, + 2541518544, + 4282970946, + 932070842, + 2088114091, + 49855870, + 3540598667, + 715968716, + 1669139560, + 3450921870, + 2093995449, + 2528122527, + 356900920, + 3561549779, + 3860645517, + 4278347546, + 3783282227, + 2307265707, + 3473752392, + 1425883068, + 3219964004, + 1871354297, + 1006991116, + 2780202822, + 408451822, + 3518660676, + 2577965225, + 3776366684, + 2153658933, + 3064676948, + 1472411737, + 3381444470, + 3471573965, + 683224623, + 297910656, + 1948251983, + 1074723305, + 1042462198, + 2565100401, + 3959558175, + 3498781989, + 1245136278, + 1108074258, + 3567181355, + 1470821042, + 2517217283, + 3573560259, + 872355438, + 3641166826, + 4202604347, + 2863743155, + 1057862159, + 1168505979, + 2333146481, + 2470305939, + 3050274050, + 3706189012, + 1028326579, + 790821605, + 2353647910, + 3373651886, + 2717862286, + 3998954681, + 3724768117, + 2358682029, + 903774653, + 1086586914, + 2947052435, + 504148349, + 3005589428, + 130885927, + 2413604176, + 151980166, + 1646237598, + 2651453845, + 1702301255, + 3312733948, + 1419466000, + 2041837946, + 845829392, + 3184621221, + 236708413, + 1251305612, + 3440133196, + 2698248849, + 752241622, + 3906730995, + 3704663981, + 492234719, + 118829586, + 755123524, + 1226340719, + 360667370, + 3870699370, + 2670210093, + 3790151436, + 3398951130, + 3871562708, + 2885299864, + 1163048740, + 1581139373, + 2060136304, + 3845596774, + 721716464, + 2415917285, + 277894360, + 646770305, + 4241803781, + 2447148003, + 1830681955, + 1453659315, + 990668802, + 782328237, + 4050323278, + 893916928, + 2105619553, + 175326153, + 3554983436, + 3795672837, + 1732262111, + 4286295173, + 255546894, + 101929352, + 1541699912, + 3542672967, + 3031964460, + 143176522, + 906673350, + 1848847981, + 3701458351, + 1427035169, + 535233943, + 3249784825, + 525907029, + 1677057436, + 2778637652, + 689646306, + 3093619410, + 1818164057, + 3263377090, + 3879936799, + 3872931380, + 2002981405, + 2392535763, + 311442967, + 4061383355, + 2455913343, + 2779048380, + 2057044556, + 246641653, + 2044634612, + 2544006144, + 2072255224, + 1762484549, + 1138624066, + 2262591849, + 549047967, + 1952213166, + 698152302, + 1384636327, + 2500587810, + 1114201108, + 2982983695, + 95202967, + 3436368360, + 3575909170, + 1988847387, + 900944206, + 2255494299, + 3497488797, + 1619002053, + 325384725, + 3852263129, + 2344454977, + 3683328158, + 1827261482, + 593467843, + 2780478905, + 2216479461, + 3425383121, + 2641892713, + 3903857461, + 646603900, + 3776413773, + 3231496073, + 2942430253, + 65150708, + 881406575, + 2882663974, + 3535986466, + 3678450708, + 2875897637, + 1799977984, + 2411338889, + 3561758145, + 782528753, + 1730147935, + 2528914440, + 1031394643, + 2173121898, + 189974677, + 1998905787, + 280188602, + 777006633, + 1423232314, + 541680030, + 3128059334, + 3607239863, + 836602129, + 3476859569, + 3578125358, + 3285983526, + 3269548815, + 1279748133, + 2334574351, + 3583416038, + 3353380374, + 3242338712, + 2325055872, + 2213015758, + 1788639857, + 958443264, + 3288231515, + 3244677766, + 492970933, + 3256559073, + 2314347699, + 1219940993, + 1006715248, + 3227681237, + 219262279, + 1936802420, + 3218238327, + 627237382, + 1900767799, + 342345778, + 1705769943, + 909994719, + 619654408, + 2425216068, + 212600451, + 3241568358, + 1266085212, + 1162371253, + 4294386999, + 1956725719, + 618869866, + 2881089305, + 948530626, + 3125525668, + 2623958800, + 3568527850, + 1828490087, + 1980242457, + 575194314, + 938093406, + 1694864488, + 1287826537, + 3314079285, + 531223177, + 1052129742, + 2623869501, + 72624735, + 3328309869, + 3730915604, + 1279936399, + 2149352237, + 2003971505, + 3806533116, + 1986061339, + 2761213719, + 2370685428, + 1521139781, + 2415964715, + 3465699132, + 2432144346, + 3030156770, + 2410927907, + 3237540670, + 3947761694, + 3495355452, + 1285234356, + 1790600310, + 3476142310, + 3491190399, + 973333385, + 1518394637, + 1117018969, + 2468687092, + 1240195001, + 137882307, + 157102370, + 3716968878, + 2428714132, + 543934818, + 166077569, + 489052577, + 1279721120, + 2153200267, + 3461044741, + 63947007, + 1365096423, + 2552893457, + 794896936, + 2335377198, + 671099848, + 1145195262, + 687339917, + 1550491760, + 2712888142, + 3573805987, + 1447244349, + 1517794858, + 3389046906, + 859355436, + 1056295617, + 3890870695, + 3066687733, + 1093093685, + 1080163542, + 2437620862, + 2710775107, + 4157562242, + 1501189385, + 2130533310, + 548114685, + 2596641543, + 3541729911, + 2037170616, + 951924855, + 2767812243, + 4092501102, + 64679071, + 1501356211, + 1688581096, + 1283840175, + 2937652585, + 4266308184, + 936909608, + 2730859739, + 1413643927, + 2267196735, + 610630861, + 417635607, + 2676607048, + 261283976, + 3697882106, + 3345745776, + 343489525, + 3810344967, + 3646045539, + 620871032, + 3749083275, + 4078308233, + 2765664826, + 1399839325, + 3996169245, + 1834429330, + 3523079076, + 3295894660, + 2983009336, + 566180094, + 1053238172, + 1893428609, + 2890017161, + 3392869969, + 3105727028, + 550579610, + 1667665626, + 3233665697, + 3843433741, + 2103147303, + 2000835642, + 863932205, + 806294971, + 2223040494, + 4288347553, + 25114166, + 2154413666, + 3847716663, + 1067391063, + 4027778095, + 4056024100, + 1781823571, + 1010635671, + 1775748916, + 1567552418, + 236193158, + 1434184842, + 3062415137, + 3748555967, + 130495918, + 2939903737, + 1666752135, + 1066079473, + 1836450041, + 2195830766, + 3066331871, + 1897175848, + 2066200793, + 1973030902, + 294293942, + 98782476, + 4171791288, + 2208092380, + 2192004222, + 2531215288, + 1140349132, + 2776662488, + 1070173135, + 990721743, + 4183076799, + 2402194898, + 2760059247, + 658432559, + 3039901877, + 2830977616, + 1258192194, + 660194621, + 3722290197, + 1178933807, + 1459226644, + 3524102385, + 608197491, + 2178567582, + 3865121923, + 3803055127, + 3366268954, + 690378779, + 1164465237, + 3106017890, + 1047217222, + 3636325764, + 2378086629, + 1515916553, + 330457022, + 1094384971, + 2588259970, + 875067225, + 3482598832, + 496182656, + 286444983, + 2809317013, + 1777706198, + 4006769276, + 1079383453, + 2881585376, + 4178878456, + 878246549, + 1100855806, + 2110896445, + 2092027254, + 570896793, + 3913905077, + 49760882, + 2429561358, + 2268836641, + 3506046312, + 2859849789, + 893590837, + 3687412966, + 2406418824, + 2041532294, + 3316860356, + 2432632690, + 659382815, + 50227060, + 851367642, + 1108280398, + 3374139603, + 170587798, + 393365888, + 3046748957, + 1115479686, + 3925029882, + 978009075, + 2025902863, + 3918745573, + 2481300025, + 951836959, + 4044134583, + 4146137580, + 691481102, + 230022273, + 54751467, + 1895877792, + 261978311, + 2167645146, + 1570701103, + 3044599542, + 1065958391, + 3642959896, + 411777366, + 2225324140, + 2464820991, + 1315183199, + 1513631572, + 2353509971, + 1998383760, + 706743093, + 2348303877, + 1547200290, + 2968469338, + 4039179170, + 4191948899, + 1763233743, + 833029357, + 3841460041, + 2142617731, + 2521113966, + 159237756, + 544757874, + 1083580534, + 3964056939, + 1590767642, + 3978432310, + 3835200251, + 813428684, + 23505149, + 2758482039, + 3598792833, + 212206400, + 2530199368, + 3839157450, + 1048871428, + 742601913, + 4149697457, + 566913053, + 2102453554, + 4264989198, + 3861808126, + 1956969322, + 2389700883, + 1154472998, + 851631117, + 1538857433, + 1807411768, + 3042015944, + 3901545602, + 3589121080, + 1282964494, + 2857849724, + 2929889574, + 3020590266, + 3587195553, + 1326046040, + 1986820969, + 1134786778, + 385604928, + 4266813263, + 2751475720, + 4086822997, + 1877876572, + 223830137, + 4189367025, + 3916126104, + 3675859677, + 4094469636, + 423319294, + 285547696, + 2939210694, + 2961027438, + 2928063716, + 1304577777, + 707971290, + 3235182878, + 621361630, + 2156904139, + 3635704940, + 406006015, + 1053905679, + 1526470900, + 178754388, + 4022623628, + 4045068608, + 2973963397, + 2605716753, + 3617255123, + 4245369039, + 3381788432, + 4119953143, + 288636607, + 2919552068, + 2642572652, + 4171623330, + 2094329539, + 4155362544, + 3967558779, + 3848066047, + 2560015109, + 1817744073, + 3588670966, + 1777801410, + 1993928022, + 3456262014, ]; static const List _envieddataprivateKeyFCM = [ - 3981922188, - 3346880254, - 1795153788, - 2698013014, - 4132435203, - 3688811583, - 1179516195, - 1445267054, - 3576206589, - 3731032591, - 217747529, - 3696124648, - 2263141678, - 3717619029, - 4095667026, - 2140040158, - 127587006, - 2669691804, - 1166813066, - 1566785094, - 2169781214, - 3715844475, - 2574766173, - 1496996034, - 2733377762, - 3813532822, - 2480544930, - 2711200497, - 3506022899, - 4016297438, - 1172688140, - 1046877773, - 1802929802, - 1042164833, - 951282810, - 2844035055, - 9975776, - 4748082, - 3834383082, - 3070877485, - 3773887037, - 31536307, - 1515491141, - 2693026254, - 2651975485, - 1024310600, - 4159993740, - 514813826, - 346211880, - 475669775, - 2397955687, - 1991395920, - 1840266491, - 1462452356, - 3974103825, - 3462434798, - 509397564, - 219257440, - 390049821, - 3529471603, - 214468585, - 3453652649, - 1910343858, - 3248345175, - 688901920, - 158537909, - 1081367627, - 1144831013, - 579791472, - 3921153439, - 2935413240, - 1166676746, - 3190816714, - 1293833426, - 4248466877, - 3169478971, - 660353796, - 2842469697, - 4181906612, - 2981457405, - 148164217, - 2757244794, - 4183233345, - 3320857330, - 2421402754, - 995518829, - 2499473320, - 3030421012, - 2431453010, - 3503323024, - 3651130250, - 3305871145, - 2613582739, - 1428709116, - 1263697098, - 4062366119, - 1538722564, - 1130649669, - 2653561749, - 15230247, - 2551971988, - 2595160174, - 2022102114, - 3702440932, - 1460384421, - 3072636927, - 803630154, - 2081675590, - 214832659, - 1320690228, - 928849028, - 1963194817, - 1239656744, - 3861141930, - 1952317442, - 4009270596, - 3751818055, - 828084543, - 2046606649, - 3841830497, - 1024117196, - 1622140703, - 851018243, - 2901179311, - 1147981982, - 621085960, - 902397898, - 315404995, - 721703698, - 2682047986, - 2201577231, - 423206609, - 3083164463, - 536810170, - 2472120044, - 2424135594, - 2642835833, - 1491819669, - 4012093789, - 4290143529, - 1474727381, - 1711083089, - 277986629, - 2027034048, - 141596059, - 1912798653, - 839576678, - 2707051088, - 3231733057, - 4113749681, - 2995182087, - 3520668807, - 3347369801, - 1587370379, - 3032032489, - 4044443552, - 2251358192, - 1890087826, - 137160045, - 390058506, - 2039802448, - 318909864, - 4018099801, - 4165177144, - 1002670892, - 2250938765, - 3498130792, - 3459389510, - 3863210809, - 2986416010, - 1538245464, - 3292404761, - 2027420976, - 3252408118, - 4239211422, - 2631372596, - 1234318510, - 725089090, - 1077235532, - 2060563365, - 3991627607, - 1926869815, - 4279067919, - 1000061410, - 3868058288, - 4237763132, - 119268433, - 812800822, - 2861588626, - 2078590423, - 295926673, - 2395519644, - 2813650610, - 304734336, - 2271168989, - 1972943007, - 4164895827, - 1963852970, - 634872925, - 1135813639, - 925513901, - 842190288, - 2578819122, - 1098902675, - 4226609325, - 1315029779, - 1719013560, - 922357863, - 363855736, - 2462796620, - 4182689811, - 762698288, - 1013326977, - 2820501838, - 2352460677, - 1845169306, - 1970194071, - 2276456247, - 1536676296, - 509433073, - 3539178362, - 1664748496, - 831963339, - 1959525922, - 1811457493, - 2062537993, - 218553564, - 1481442912, - 1872997986, - 3852052481, - 2944778691, - 3091995984, - 1506369860, - 2184769337, - 469420240, - 3875176679, - 1983082659, - 156830633, - 839208405, - 343698126, - 4121301893, - 3629457250, - 1700254547, - 689767861, - 3756684381, - 3260069078, - 723702118, - 197026924, - 1476158802, - 640147758, - 3242467108, - 1231631664, - 2352884297, - 3030843693, - 1225629887, - 4018512988, - 1960274169, - 726761294, - 383837250, - 4137352652, - 402373467, - 2557391206, - 2529892428, - 3975336654, - 1258243576, - 139410019, - 2633302047, - 1372979807, - 1817975138, - 3445998615, - 60703431, - 261775064, - 4264413018, - 1076874950, - 3629284039, - 56691936, - 2772902972, - 2549778684, - 2897023917, - 314443467, - 2556475285, - 2532810938, - 2908365210, - 3039124787, - 2288454425, - 2588035204, - 1656584504, - 3238121759, - 2055860583, - 3980122014, - 4066805983, - 1841713803, - 1624272541, - 3373977423, - 3879495641, - 3111420266, - 4270547826, - 794961696, - 1527215837, - 1683813782, - 2442868845, - 2861787459, - 30022392, - 2035158316, - 3836016762, - 2830309589, - 2593433899, - 1473903924, - 1918006911, - 1758965792, - 3838393179, - 4276543024, - 2028672482, - 2982328510, - 2644432219, - 3171447612, - 3109668921, - 2279285950, - 2813610250, - 3556231637, - 126863672, - 3361960994, - 644064651, - 1400464041, - 3337005760, - 1295629737, - 3475709142, - 788576740, - 2714460764, - 1011779763, - 735176792, - 2205184112, - 2560983995, - 1791376649, - 1706558918, - 1504402458, - 1409252608, - 1583370306, - 3436434504, - 1394779357, - 3344782943, - 1326542890, - 202837107, - 1767585117, - 3598053916, - 3870190638, - 2525308830, - 3922878207, - 3345261176, - 35974662, - 88009015, - 2643558986, - 422099661, - 922802465, - 4014273248, - 2445899495, - 3830396951, - 4059813977, - 997949304, - 490526207, - 104568705, - 2200019713, - 1490665329, - 834166251, - 1612573860, - 3018054021, - 2828340234, - 797193652, - 1850063855, - 1009072075, - 1778776170, - 1169853030, - 3133255113, - 3518468848, - 3235454738, - 3424004110, - 3198971543, - 1466346644, - 990804399, - 2985664632, - 2322412872, - 3797624542, - 461499801, - 2699134526, - 3471164999, - 3451542489, - 753407667, - 243450086, - 2646197716, - 2920663789, - 1835623949, - 3529662797, - 2823859887, - 1974521924, - 1372038029, - 3795841911, - 2258314571, - 4081322833, - 2079376619, - 1349810559, - 3584271990, - 1026789037, - 2579600744, - 2761777053, - 3779722310, - 222490010, - 1358281268, - 3629320916, - 1363394330, - 3761616942, - 3482912456, - 3463122387, - 2260520845, - 3462604833, - 2112854786, - 106713769, - 835546513, - 3055010369, - 2706334722, - 4219149503, - 2323649784, - 2117406324, - 3337739606, - 2564252239, - 1864066698, - 3499118870, - 4256446013, - 427814844, - 2986028215, - 1330753452, - 2950163002, - 2076444673, - 804386069, - 2537649781, - 2111726626, - 1890911253, - 2281718984, - 1380263848, - 1347027035, - 4112888342, - 1506036786, - 1325045286, - 2664324834, - 2403182116, - 1594677030, - 400265922, - 778544882, - 2378466730, - 1983435876, - 4273276891, - 100850817, - 2328471483, - 2948444452, - 2657126915, - 3820179145, - 1053870855, - 1936709165, - 3223291684, - 162217457, - 1899809283, - 3330523041, - 485846737, - 2941428711, - 4029022020, - 1143446995, - 3622600996, - 541967781, - 2921656159, - 3185611613, - 3808221771, - 38755368, - 1063478728, - 2823129218, - 1151128344, - 2320099649, - 1793881765, - 3916651982, - 2239207877, - 114805436, - 2812828407, - 3281137354, - 3435690594, - 2447226055, - 2135471712, - 2270208559, - 1522003006, - 2471292030, - 923989441, - 3439465659, - 4120179491, - 206342261, - 3313683994, - 3168474150, - 1302409759, - 3376867839, - 4000339007, - 3552032989, - 2999233483, - 472627197, - 2103950292, - 3906389688, - 1100471964, - 2158686928, - 2776152718, - 1314274576, - 2676956611, - 185267308, - 3898859569, - 158099371, - 2116564997, - 413498794, - 128303740, - 1170360864, - 377111024, - 4058533844, - 94806789, - 1390702268, - 2470198724, - 604165431, - 1265797578, - 3794878057, - 2809735702, - 248892713, - 2520837093, - 2488361847, - 1818263751, - 4082245209, - 3511271239, - 2438651795, - 3111384482, - 196299206, - 2666311526, - 2525242011, - 16739286, - 2053349733, - 3134730085, - 1066105976, - 1360957002, - 175245999, - 3578595606, - 3465909687, - 1574260829, - 363562331, - 3942782753, - 3465844955, - 1398218704, - 3641354062, - 2112666502, - 2530899905, - 607827122, - 29748288, - 258779283, - 1818237684, - 2521301397, - 1653013032, - 2165034707, - 468622399, - 471251533, - 1033677231, - 1637959034, - 560140569, - 2439262678, - 2489476479, - 1891002624, - 1302203437, - 2698509256, - 367767703, - 3814967989, - 877251486, - 527587659, - 1998457154, - 1313841402, - 2777432647, - 4158445342, - 3105955966, - 3905457985, - 3421264726, - 3256358467, - 2247911545, - 3048444527, - 1954942659, - 3305736858, - 3154420398, - 1005608299, - 1016886836, - 3586838668, - 846005097, - 2135620047, - 4036641303, - 1885952247, - 2035424682, - 1180695587, - 774703288, - 4008526136, - 1049621630, - 3211906906, - 3252340993, - 2577071177, - 2499523862, - 2385946477, - 2051798649, - 1377061187, - 1139007888, - 2931433321, - 26983014, - 566620908, - 3990593487, - 2891348843, - 985361069, - 3349492770, - 1669250253, - 1849438208, - 215958199, - 2053618099, - 3254450639, - 3373441134, - 808264720, - 2420293240, - 3738956747, - 3030135874, - 1415649420, - 1984045192, - 170593119, - 2191242276, - 2966552233, - 2659661435, - 3135670658, - 3456270821, - 3161215331, - 2113148268, - 1748878774, - 864032749, - 1647138595, - 3149458404, - 1878429531, - 2790605003, - 1804724878, - 563250847, - 3781808397, - 2196738439, - 1297061432, - 1671610362, - 2839219685, - 54190640, - 1321160381, - 1454860714, - 2173840342, - 260448756, - 2616252823, - 1965529367, - 3262117203, - 57624273, - 2383384722, - 3958089955, - 1647811733, - 1247195808, - 3913713532, - 1830407374, - 4237860107, - 3195456324, - 2243691948, - 3466538281, - 2221302982, - 3810228901, - 581191075, - 2109526456, - 2864821418, - 226854018, - 3342940775, - 3662895373, - 2898610216, - 16648045, - 3792169363, - 2989468361, - 2034275782, - 1398459504, - 2533442293, - 662308785, - 2288542245, - 2275925093, - 3096984278, - 2517801292, - 1035651938, - 4050643009, - 3651572420, - 31201731, - 164236793, - 1181532994, - 2908427621, - 2605363278, - 421420952, - 2908707954, - 1327292778, - 950010639, - 2700789717, - 747776729, - 195005272, - 3667940676, - 1301150500, - 143697733, - 3312190348, - 3790729630, - 3960139362, - 659823534, - 1138718612, - 2025036982, - 4151139063, - 1348399080, - 4071700288, - 3809807887, - 1316603858, - 1192309798, - 1387122856, - 868870782, - 3722390636, - 1317568108, - 1087995405, - 1717499349, - 3286993028, - 1702783042, - 1259532784, - 107860062, - 4251967034, - 453409378, - 647529028, - 839106143, - 3854140423, - 2490308602, - 2730383584, - 448604166, - 2094495731, - 2882113148, - 2775497621, - 3967835850, - 2729281646, - 148462273, - 4181103946, - 2402226590, - 2653424796, - 3926326608, - 4035129333, - 250028835, - 3650515104, - 2271621710, - 2645999918, - 1193086113, - 3941118603, - 4004363168, - 813196015, - 1371147505, - 3112788935, - 3797169575, - 2613939790, - 3937421466, - 724668461, - 2878709008, - 3432806023, - 1607090607, - 2826908627, - 2464652317, - 2601849716, - 517899610, - 1495564723, - 2048130738, - 708974721, - 1700315595, - 2579278247, - 2242949414, - 3460308404, - 2388581750, - 2770301541, - 3744537028, - 296354651, - 2054159803, - 3468853439, - 1651514110, - 4062623752, - 3583825663, - 2794129708, - 1410796364, - 4156382067, - 2045716042, - 3813065205, - 3818920060, - 1665102927, - 1278187702, - 4009313434, - 202365588, - 644210309, - 1756153331, - 3866170616, - 3814335035, - 2542750399, - 3813215494, - 1136013967, - 2960011135, - 3772001369, - 586861895, - 3923860551, - 3470266123, - 1546763528, - 1902195756, - 3104501745, - 3876757003, - 2571263946, - 477981715, - 2126062056, - 269049977, - 1290930374, - 1780432836, - 3160595037, - 1417209655, - 514282678, - 1164023519, - 2686453333, - 3115969734, - 4190938631, - 3186443622, - 1676171819, - 531295352, - 289168154, - 1114096636, - 3168586877, - 613594858, - 2970263844, - 3449924674, - 2658965313, - 967110856, - 3220039975, - 4215063520, - 3507754767, - 133270519, - 2334205217, - 1831822689, - 4262324268, - 2309134077, - 3999156807, - 1791457643, - 1256641239, - 2242142944, - 2820499630, - 1229037130, - 2660992240, - 818933202, - 2759281905, - 3717480198, - 112547414, - 2956393194, - 104847146, - 2767915613, - 1000035595, - 3582285923, - 3478042564, - 908731190, - 4060768405, - 2564303875, - 1475213146, - 1339551965, - 3750107418, - 1080002464, - 2787912171, - 2645990252, - 1568173359, - 664951361, - 195563881, - 689296034, - 3577669586, - 1821670119, - 3468814631, - 1594124139, - 817555692, - 3193780232, - 3426486546, - 3320655599, - 547932385, - 1410453389, - 4223791522, - 1233467189, - 3247156553, - 2734757292, - 2515500767, - 2584433579, - 4231237925, - 2317152244, - 2365102059, - 936827108, - 3876510334, - 1680648073, - 940806185, - 986899132, - 2391798915, - 422634537, - 4216371386, - 547540263, - 1508615623, - 3364355035, - 879755346, - 3263706333, - 533120245, - 3594839989, - 3452469780, - 4055859642, - 969997840, - 4262262593, - 1470323769, - 1574986928, - 401859924, - 876195122, - 2787490848, - 1047019794, - 1456393400, - 1268268486, - 1049293027, - 1125089723, - 49962653, - 2656962696, - 3432712130, - 3828147908, - 1008783282, - 745874291, - 2762581508, - 118220810, - 3732108684, - 2127208336, - 2769688211, - 4274667061, - 2951242846, - 3366367940, - 1598191583, - 171242379, - 744919145, - 3925218297, - 67453201, - 202729328, - 1796852917, - 2981855265, - 162603224, - 468499657, - 2498928520, - 1780550234, - 4154629649, - 159800351, - 918301713, - 4009883178, - 1405353115, - 214354316, - 2158957675, - 3869560785, - 3877900396, - 1972515992, - 652141294, - 2653621934, - 2767765732, - 2033835536, - 427710690, - 3066436569, - 2951118745, - 2329045596, - 2837864401, - 369661422, - 2512052501, - 786311077, - 817972689, - 1292779605, - 1845273436, - 3767574613, - 651561746, - 4135562168, - 2180200113, - 857186643, - 3543645505, - 1098876326, - 1744194088, - 122392536, - 4006499245, - 4093925068, - 2047275237, - 1612275511, - 4243136821, - 1515518053, - 967094981, - 4124925057, - 407264616, - 3939504118, - 3065407383, - 3923876471, - 234366602, - 1267806253, - 2103627474, - 3161503447, - 548723525, - 1573785350, - 1523860596, - 3111076351, - 3089072652, - 2099939967, - 2484876475, - 847465547, - 1287516381, - 1277183359, - 3825284807, - 1286852437, - 1071051944, - 4211214237, - 1395725438, - 318332058, - 3887322447, - 3648123837, - 3980865465, - 482308870, - 1393337748, - 953623319, - 869400070, - 4267388268, - 299775497, - 4201609675, - 2407563100, - 2302119847, - 906313648, - 1287024348, - 3047468764, - 1961247686, - 3065780155, - 896060678, - 2281157811, - 43993134, - 3759084138, - 1257965196, - 1712831923, - 3118566845, - 2952627404, - 2536493762, - 2411795120, - 3620642444, - 3555288174, - 1116895018, - 1021126205, - 2579096287, - 1020205963, - 394251755, - 2996670176, - 1892934138, - 2242747270, - 2871062637, - 1033916190, - 233778528, - 902809453, - 2423438132, - 3603630196, - 3726742054, - 3963756768, - 2091120815, - 1461915071, - 846990542, - 1140814264, - 532282751, - 290247034, - 1413926893, - 2836815229, - 1545937634, - 701427847, - 6966619, - 2521894691, - 568079964, - 1507550789, - 1269329413, - 4901133, - 844581979, - 2159007935, - 3652623993, - 2311865120, - 2809893775, - 2653658358, - 559868372, - 1797422291, - 2403522696, - 1340592093, - 2909871519, - 4258339860, - 1990498435, - 1747735562, - 3443076647, - 2839280610, - 2198844475, - 2969323320, - 4067837666, - 1809216562, - 4213935392, - 3721239890, - 3110124671, - 3633212240, - 1076094898, - 3492681148, - 2990603686, - 1282671129, - 1162631073, - 2299938114, - 60794983, - 556699268, - 1151569257, - 3492507535, - 1719539824, - 3827661008, - 3541062702, - 1295482877, - 325546474, - 810665070, - 4164189352, - 2550548701, - 2227159188, - 4052323447, - 993650554, - 624459010, - 533363840, - 3136167651, - 1714985727, - 2299507153, - 3401403375, - 2596403792, - 2580829190, - 1005216955, - 3292487673, - 389098899, - 107392208, - 698445074, - 545507873, - 3517962883, - 3506980695, - 2035236933, - 334294539, - 1567596363, - 2975991617, - 69070131, - 108620399, - 366436780, - 2456257228, - 300297627, - 2562984799, - 2934600429, - 1729676149, - 4066392674, - 4085843569, - 3296227094, - 461743932, - 3702256193, - 2997713007, - 1135886905, - 2600348129, - 4141089304, - 892518749, - 3058189666, - 1934930462, - 4153963847, - 4252640004, - 4262502844, - 1253456044, - 1961771953, - 680562507, - 1185858068, - 634477484, - 2339411358, - 2164550300, - 2803986401, - 924455038, - 3134526645, - 966348986, - 1453429154, - 3082418575, - 401225239, - 3398590724, - 128059633, - 2178637212, - 1774922230, - 2255178215, - 2918720795, - 3327682099, - 2214394442, - 3099747606, - 1661934883, - 1298729894, - 1272558632, - 4053018305, - 3789054773, - 4131648440, - 1773101876, - 686931174, - 1203446895, - 3752734552, - 3235657405, - 1944360014, - 697623102, - 2039237867, - 3348886781, - 2064524654, - 3039942319, - 2701235418, - 3767389087, - 916901041, - 48586650, - 1416585478, - 766915953, - 3115924685, - 331229169, - 3134725341, - 3457203708, - 741448579, - 854943645, - 1524960723, - 1896889580, - 1713382254, - 2640180408, - 3592536589, - 1428546938, - 3838033608, - 3778145355, - 3664325161, - 542063487, - 529023584, - 2782480714, - 173629044, - 958820397, - 774948118, - 1930508109, - 1674876078, - 3703541375, - 3024990950, - 473593431, - 1202061697, - 115478614, - 3136639346, - 3545390288, - 2091581374, - 2249203480, - 2052969632, - 969919597, - 795131713, - 546537563, - 1302855058, - 2724277934, - 1751639184, - 100232597, - 3423489601, - 103164049, - 1984156416, - 3109944603, - 3809627092, - 3362560613, - 1292767536, - 1281284953, - 989446818, - 2926075470, - 1217424046, - 1358302685, - 252442366, - 3489051572, - 2648229374, - 3946622689, - 3719323628, - 1749561368, - 3345174159, - 938188313, - 693952393, - 3443621184, - 2911849094, - 1427624214, - 3678446744, - 2906392205, - 2445546247, - 1977949039, - 801684661, - 2963795503, - 3386667543, - 2100145413, - 936768746, - 1593174171, - 3875136524, - 2590738188, - 2890201611, - 216936927, - 1339115234, - 2635418552, - 119932717, - 1340581782, - 4144168239, - 3938057468, - 1168936260, - 2215987317, - 17184998, - 216656204, - 2188297832, - 2061448228, - 1202480390, - 1405676949, - 292664855, - 953177361, - 3172167692, - 2503470625, - 1562534091, - 1387760951, - 1505457322, - 592131196, - 3951980740, - 1017622275, - 2281682949, - 2074963044, - 3329400423, - 1404464938, - 3295703205, - 3486575395, - 2090288146, - 3184219409, - 761918532, - 2960208185, - 3763970070, - 833445184, - 267175292, - 572901486, - 770701766, - 2145108431, - 3628405341, - 1694398934, - 377464778, - 999531056, - 355730920, - 1936325012, - 1976818811, - 854711443, - 132862578, - 1207569573, - 392699403, - 1081010007, - 836817039, - 8548126, - 3978550150, - 1419003753, - 972930310, - 1428068521, - 4209168748, - 4197520795, - 3943327582, - 99781339, - 1496418041, - 970974632, - 1028307344, - 2504293859, - 2296530528, - 54001838, - 334118403, - 3633345114, - 3002480798, - 1813811418, - 25154819, - 301497575, - 4275021870, - 3282143209, - 1785548939, - 3598774548, - 668914781, - 3160281209, - 190382091, - 3606378713, - 3008775681, - 894795635, - 2920018236, - 992106311, - 605405192, - 1572036413, - 1611796135, - 3432918850, - 2744331628, - 1848223022, - 1152080655, - 1195579213, - 374577093, - 1687992973, - 3507249443, - 3508208035, - 24847241, - 3733363803, - 410066863, - 1140860417, - 1186346319, - 4001954674, - 1781698837, - 1473739716, - 611800397, - 2528535791, - 483659071, - 1465122828, - 1423007227, - 2160485143, - 2603441040, - 814091149, - 839018968, - 2290160391, - 709434753, - 3758915475, - 206497337, - 647739248, - 1332381604, - 3765956247, - 2329586541, - 3933384048, - 2402114381, - 2149614119, - 2027684430, - 3252300895, - 3409909622, - 2129462592, - 3413088705, - 550912515, - 1884734543, - 3454710353, - 3089136894, - 3468891844, - 450825661, - 1068267994, - 1083780548, - 1882776870, - 3387913941, - 2512854880, - 3765561099, - 2082119335, - 3191790046, - 3268009033, - 1072301170, - 989191158, - 902359876, - 2242814468, - 2285401008, - 3185723472, - 1189582618, - 1052972683, - 3007703952, - 2985550900, - 2069850107, - 3678424277, - 1801617902, - 246137944, - 1713777350, - 4040289926, - 1552898375, - 787557918, - 2622943875, - 3295504658, - 3744612315, - 3526116130, - 3352769717, - 3910684927, - 4186388438, - 3972654148, - 2209684073, - 3906598287, - 1607122308, - 4076456023, - 3754124290, - 2634877003, - 4104847198, - 2656001795, - 2198100222, - 3683620366, - 646937427, - 364412316, - 2895405374, - 3041104958, - 2380266561, - 4262451611, - 1818177993, - 3391440913, - 2968709647, - 3349770411, - 1689905461, - 2452371437, - 776949895, - 1046308521, - 1592843104, - 3356487469, - 543456311, - 4019266983, - 3413881071, - 2162344761, - 2906465706, - 604490755, - 2482347066, - 1465834864, - 3590369482, - 4006089115, - 2221173266, - 1680872055, - 2374564413, - 140760167, - 935674542, - 1201104318, - 388802361, - 3253154825, - 3608163470, - 375711467, - 2065707447, - 136847675, - 3867470807, - 802096481, - 3359615348, - 2988900131, - 445520961, - 2627882095, - 1277600628, - 1248783074, - 4211777909, - 1753939380, - 4078827895, - 2202860875, - 1375887346, - 1336540226, - 4107127365, - 3240966394, - 1025999119, - 2217540015, - 635654621, - 3012341994, - 3048508986, - 762061022, - 3937951775, - 757818976, - 286528835, - 2504250177, - 4291469209, - 793465046, - 1934262578, - 3603733421, - 4264651251, - 450041375, - 3683285196, - 3943679787, - 4184673378, - 3112966398, - 2999093698, - 839336387, - 1252896925, - 1520818592, - 1996403247, - 4076122584, - 2679158894, - 1234736428, - 3277957223, - 2521119720, - 477707961, - 2764279279, - 1725521745, - 189237987, - 2649848870, - 1921924016, - 3323989910, - 3497554263, - 3667891214, - 363811064, - 4123651488, - 654290867, - 3828886696, - 1074566784, - 3529808219, - 2376273583, - 3188405382, - 1340442737, - 23366486, - 177240450, - 1418661901, - 2772522976, - 3329973480, - 2499441230, - 2436920109, - 1677150014, - 2838258127, - 3248073782, - 1936894367, - 195979079, - 3336629774, - 2225225119, - 2241276354, - 2103330620, - 867316439, - 1005790818, - 1435458745, - 2518696085, - 1500391322, - 2957570195, - 1399704654, - 1635394112, - 1448662254, - 2140705107, - 2354872868, - 478054856, - 3956581405, - 2386494766, - 3659886331, - 1810497217, - 988357149, - 1183625343, - 3308188244, - 3864913999, - 2139265159, - 3106141303, - 4095094466, - 3908751299, - 1219514066, - 3934435025, - 4198330136, - 2716119828, - 671526183, - 1442746755, - 2980086690, - 1779948439, - 3104658095, - 3039535718, - 2864235860, - 1361081085, - 3301975283, - 2301937405, - 64212162, - 964827629, - 4062021079, - 463814632, - 2591002819, - 3034306167, - 1346952449, - 3616259925, - 3529562410, - 1407376532, - 1300938695, - 1831428515, - 1377054337, - 3494483692, - 747322432, - 216966114, - 3109940520, - 528951861, - 1669013973, - 101428960, - 2355473679, - 1271448808, - 296701278, - 268703676, - 3772961132, - 1364096698, - 3595360819, - 3834654495, - 245756468, - 1180671694, - 3059654993, - 1665841701, - 4037643682, - 1968685444, - 4003118090, - 1863308596, - 3388905742, - 4159463735, - 4075930631, - 3935486025, - 2840325144, - 18372419, - 922566678, - 3339869492, - 2322470770, - 2065294276, - 4265824751, - 429328514, - 2074833244, - 2599110511, - 369418826, - 3008438327, - 2290841232, - 2261453789, - 3219343987, - 3835916688, - 3330072907, - 1011610559, - 4028138841, - 2334037885, - 1160961116, - 3783760846, - 4129099787, - 3347763102, - 1542597118, - 2667694424, - 1899324085, - 4271282956, - 446119665, - 1742983316, - 1490047357, - 3496881782, - 1609204238, - 1618233545, - 1446118922, - 3059663537, - 2392848332, - 2197177262, - 4202324988, - 830381121, - 3172287659, - 2284794296, - 60048962, - 776939908, - 126368955, - 3335316768, - 1617224322, - 1887735485, - 1166521152, - 2051868066, - 204477206, - 2610832849, - 1270236219, - 2858895839, - 2259287190, - 562086365, - 192678119, - 206934813, - 2586951728, - 915075661, - 1531503276, - 2422154569, - 52428317, - 3158676597, - 3151131876, - 136530275, - 1767843437, - 272791438, - 3828859553, - 1225138750, - 163687616, - 3525118791, - 2535968361, - 1924379683, - 283228722, - 4163469205, - 3564332148, - 2796953478, - 3876635722, - 2631269302, - 435019165, - 3612086867, - 3922297398, - 2481322386, - 2240232460, - 264330793, - 665379893, - 121343689, - 3341464458, - 1276481244, - 890467371, - 2406267556, - 2548172784, - 1555519749, - 2624817350, - 2649640810, - 2008390522, - 3369404910, - 3318100808, - 4221083403, - 876058551, - 1611683033, - 3782414641, - 927777450, - 88074630, - 1295423080, - 4122276692, - 3546635644, - 1290910992, - 1656784313, - 1878676100, - 994393490, - 2611964229, - 3332196493, - 613467795, - 4227931323, - 628818521, - 810178104, - 4187267638, - 3258744627, - 1124346594, - 2242608757, - 1767743392, - 3960871431, - 3694411882, - 406926017, - 881968001, - 1110666426, - 2373577393, - 1816382483, - 3578792736, - 3059987612, - 1362889724, - 3276050088, - 85597552, - 3955182099, - 4190966009, - 210511877, - 182308482, - 2970087804, - 681329385, - 217312993, - 3140854657, - 4199572816, - 2423266165, - 611338832, - 188684622, - 387654540, - 4208113919, - 938495321, - 245698576, - 2592260049, - 4067163288, - 519701160, - 1490532584, - 3677927251, - 4258482849, - 3236806675, - 873090172, - 1615040788, - 2684458162, - 1214354785, - 3808440737, - 2406008869, - 3692493629, - 1219697942, - 2285892661, - 100870168, - 3388557595, - 2876509547, - 4244766014, - 1017137375, - 3662418421, - 4236747106, - 837030183, - 3878772957, - 442432073, - 2350568850, - 1377998755, - 580739246, - 3664426859, - 4221279304, - 1015619724, - 2788248972, - 760252494, - 3392520063, - 2585360397, - 140810933, - 2492079891, - 1783515673, - 3751207447, - 1323412246, - 3653658141, - 1639014292, - 887227458, - 2465064055, - 3023598037, - 899722089, - 2706288424, - 1998284933, - 2926476733, - 2950172024, - 3726696397, - 2404322937, - 1986985484, - 1863053903, - 4292239694, - 1500243239, - 2477397953, - 1886915350, - 314868887, - 285534487, - 238835718, - 2091997051, - 1712504340, - 2535782409, - 1059481183, - 1551367995, - 2569309609, - 164825691, - 4197566908, - 3007996085, - 734721121, - 1075862748, - 1190607349, - 3085176370, - 2647730445, - 276950387, - 4188313125, - 2644079881, - 4268419844, - 2118105082, - 2838182759, - 631686819, - 4049268588, - 1213849385, - 395500072, - 411452014, - 3921892342, - 1428122391, - 3020360899, - 3699851885, - 2119420335, - 1032914977, - 911509677, - 379170830, - 1931756689, - 2671028834, - 2596306004, - 524457754, - 2484367232, - 3969243802, - 2002483508, - 3535862321, - 4168823426, - 4122856522, - 299191719, - 4043906305, - 3530247806, - 3073040578, - 2219836713, - 1533630862, - 833955854, - 3525350202, - 1111680468, - 3599551819, - 479339782, - 4188026562, - 3947101234, - 3309992746, - 4150344305, - 1712302447, - 971968892, - 694304293, - 4189216769, - 650392268, - 2475725134, - 1112484223, - 4067521798, - 1457755946, - 1198460815, - 1448917123, - 644122951, - 1977075137, - 2680431395, - 2297523471, - 758780438, - 2362536223, - 69290711, - 3355651817, - 2497463781, - 3637278974, - 817056241, - 1618493172, - 3238323388, - 2576549002, - 4134473192, - 3941966929, - 2468389041, - 1989550973, - 939185326, - 154995083, - 1050055328, - 603118324, - 3385201150, - 1906746781, - 2510736761, - 1496731781, - 3576997247, - 1620074651, - 1769919649, - 3212241368, - 2437369289, - 2845004733, - 773974037, - 2057141058, - 3506691796, - 1774264143, - 835045567, - 2654816287, - 1511846672, - 1592372689, - 3063102665, - 1560480091, - 3994960161, - 776324825, - 3819796470, - 898988127, - 37164863, - 1744209023, - 1089382200, - 3694627204, - 732493949, - 763581103, - 2631056564, - 176492295, - 121624993, - 3815059473, - 3075385449, - 156121253, - 3028625679, - 4214466001, - 2335965654, - 2130896272, - 3930208737, - 3555403653, - 3702865481, - 3804078449, - 3050736921, - 3869289586, - 2102279214, - 3206425581, - 267786710, - 3483225109, - 522553985, - 1984826481, - 3217768625, - 3838297603, - 3405536892, - 2966997336, - 2902635966, - 2810651474, - 2195519725, - 4153919922, - 3765936022, - 2391008672, - 415766461, - 3494083590, - 278039419, - 2195922263, - 3358034390, - 3985136598, - 3706836517, - 319317636, - 1266735212, - 2648411005, - 3052965502, - 3860521030, - 1335678431, - 898803396, - 2771426331, - 1100294411, - 837103846, - 1822781033, - 2468563788, - 2652326495, - 1237920364, - 3888314952, - 3703270820, - 2334954536, - 425709917, - 2923195959, - 3781553520, - 2481380595, - 2836201082, - 4163743559, - 1856271548, - 2514914438, - 2659740167, - 994689845, - 1754129636, - 2572270539, - 933071740, - 3238911884, - 2140596641, - 2324809811, - 2447233246, - 3944524476, - 1464590026, - 1783468988, - 1426484230, - 2831036641, - 669953331, - 2467395863, - 1346745881, - 28384490, - 520057360, - 2605156811, - 3547641364, - 3968632337, - 3586137855, - 1829248118, - 2877202640, - 3505134530, - 972761720, - 669880678, - 2736668092, - 1806406495, - 3613308561, - 3957011249, - 2148405107, - 4260751448, - 2998225713, - 2338191432, - 216214347, - 4183131890, - 374916817, - 2884617705, - 3296738403, - 2074837837, - 2384235627, - 3030717220, - 1950687430, - 967763135, - 4071323483, - 3730628609, - 2438950210, - 1779914608, - 3291569149, - 472167750, - 3873972683, - 3746688843, - 3288172257, - 1586008060, - 20146320, - 1356698249, - 1241784905, - 896604945, - 3504660141, - 1230568406, - 2418737165, - 859280916, - 4002301486, - 2466760865, - 834105222, - 3254855025, - 3968071974, - 4123415200, - 1521003134, - 2749958796, - 546877786, - 1779121903, - 918664084, - 323508737, - 2959053504, - 2234275880, - 391098989, - 1525191645, - 3014675896, - 840073045, - 2289738632, - 2626990270, - 2617163262, - 1509589768, - 1658571743, - 3968660159, - 2750932338, - 965382975, - 3744578296, - 63238114, - 1420213534, - 3547158310, - 659688884, - 1687362145, - 3671914268, - 4088722031, - 3129154158, - 2800628987, - 2056370583, - 655540043, - 419330238, - 3477754734, - 118810913, - 3783215471, - 3617854122, - 2773406457, - 3398689703, - 137446866, - 3445441869, - 1377752025, - 102773113, - 1428576867, - 2126861301, - 282024782, - 137965689, - 799908253, - 2747012194, - 2588842274, - 4079593773, - 1884796491, - 2089878589, - 287438453, - 3042459900, - 284156012, - 2194328180, - 2537630290, - 1115213252, - 1000033505, - 2054992007, - 4288536260, - 3809982695, - 3143688764, - 912790607, - 2690711376, - 3282737600, - 1757552909, - 1662483187, - 2906946034, - 2589432661, - 3764809557, - 3954618893, - 2997905021, - 378410012, - 2557433717, - 2315034839, - 3168371113, - 1074613870, - 3685021357, - 2666944892, - 667360674, - 392247007, - 1963080100, - 241189372, - 2383220828, - 273454969, - 2699152244, - 1178758254, - 3686978906, - 3588348050, - 475514283, - 1401569874, - 2822156896, - 762344480, - 1302677715, - 1336163239, - 1574429530, - 2438801066, - 3464343842, - 2773171098, - 800437683, - 1988558023, - 3139930912, - 2680545639, - 2517347885, - 381423133, - 3749204297, - 171704872, - 4110583193, - 4082557234, - 4117643302, - 1581712990, - 1478575912, - 3213409795, - 3570398407, - 199363141, - 74998573, - 1497480030, - 1588902796, - 2182716742, - 2044279866, - 2530715733, - 3631828882, - 3028359850, - 3296477370, - 3712890920, - 695166871, - 1681668033, - 2116068277, - 541304010, - 98394159, - 3675545603, - 4167725043, - 3036031561, - 2203689734, - 1365103893, - 128733363, - 2267978244, - 2423691027, - 421730605, - 1133375285, - 1488361202, - 921779168, - 2401667552, - 103926809, - 3304404846, - 1435097879, - 104836756, - 2621606060, - 1212958061, - 2886318131, - 125706275, - 3458107714, - 1923375310, - 1974177254, - 1379184218, - 151282965, - 1974411302, - 3532138499, - 3129890017, - 493207508, - 3855901937, - 385431260, - 593699630, - 2003604462, - 1273493881, - 2534089857, - 3801017963, - 1391378122, - 4052598581, - 1493885943, - 2547139892, - 55775400, - 3393276717, - 3022286702, - 3556257769, - 4073739050, - 3010324859, - 253360788, - 1769675721, - 4198702190, - 3004501396, - 934221364, - 2043508053, - 3285425528, - 1261525380, - 1643528647, - 20941045, - 2937444647, - 2920811364, - 3721095811, - 3980254979, - 4082099366, - 2207357842, - 2397279974, - 3133632668, - 3858259510, - 2205386556, - 3119367462, - 1226554211, - 1383031614, - 418493331, - 3495739858, - 3765303024, - 1618904366, - 247540363, - 234268079, - 2441128017, - 2008348718, - 965984916, - 2881602286, - 2608102654, - 2300847274, - 3891718353, - 1421948487, - 3557204590, - 612553182, - 4060595648, - 46753808, - 4050162968, - 1338654448, - 3060241317, - 2974986277, - 2158728563, - 1980012232, - 3427060807, - 4039506494, - 3687711103, - 2625388131, - 122917169, - 65262652, - 1710153668, - 1062178371, - 1192911872, - 966332844, - 2929033267, - 4175997317, - 1820552271, - 3990059567, - 2738720326, - 1415735781, - 1747006787, - 3680962248, - 2550782445, - 1472091463, - 2408227745, - 659637885, - 1330226362, - 3165519011, - 2780611834, - 3779279541, - 3640745291, - 3531581467, - 617584482, - 2625316976, - 2964566776, - 2366391382, - 373228345, - 3957914969, - 1258771463, - 1731935395, - 810067909, - 2605132175, - 1840584492, - 4079026219, - 4094595850, - 829301813, - 565188508, - 1263030380, - 3726343757, - 918653651, - 472976245, - 4286770577, - 4036012761, - 3176300564, - 1107071008, - 4144843702, - 25492461, - 2207649467, - 3633977115, - 2147514019, - 1269991726, - 2683965438, - 2520639319, - 3086660719, - 617169064, - 3432492192, - 3710672959, - 3409402126, - 119439117, - 3963100196, - 3342998301, - 3693521188, - 1853335107, - 2389605201, - 2872784581, - 2317685454, - 3978854958, - 3380967256, - 4286235050, - 1349107910, - 1969512853, - 4208086344, - 581163757, - 1082760289, - 738048249, - 1202565794, - 565233861, - 3445288398, - 3039896709, - 2880462484, - 2474618602, - 1513485029, - 2142309807, - 683739876, - 378146407, - 604326311, - 2048166999, - 2597099427, - 4072040838, - 1755442901, - 2907595452, - 3467550225, - 250062363, - 56058708, - 1145710399, - 3039069222, - 1308673449, - 1714524366, - 581730562, - 2761367556, - 626014288, - 137071648, - 470268228, - 1437302621, - 2321627765, - 22353300, - 1332773166, - 2159532786, - 2158846563, - 2373532852, - 1862594729, - 597810252, - 2340972379, - 3639427609, - 1007863785, - 695030942, - 3011496664, - 270375172, - 506179402, - 2465725939, - 3586616372, - 2004336589, - 2540593231, - 3053313124, - 242205516, - 1129472933, - 2423477390, - 2905078481, - 1273830886, - 3684442720, - 1606743201, - 1856404822, - 997845042, - 3493020698, - 3764183901, - 1210713036, - 775445903, - 2693348863, - 1544199589, - 4134758141, - 2289181799, - 2575820269, - 4039240160, - 1927565098, - 2469436858, - 1147407442, - 88722021, - 4251027513, - 3943603541, - 3343042023, - 4136117766, - 1408968078, - 2011730517, - 1115400444, - 91805388, - 3797413122, - 3231843740, - 254866909, - 50348931, - 3008475074, - 4096823241, - 806995214, - 579016061, - 224913061, - 3452629625, - 3935452158, - 2158823384, - 443232806, - 27590422, - 1626003736, - 1659214230, - 3730751274, - 3304817447, - 2126464234, - 468094899, - 2004841401, - 4244266212, - 3191633815, - 621908138, - 386502901, - 3160550164, - 1846013869, - 3929062208, - 1752551945, - 2020989829, - 3733195509, - 3332803772, - 568035707, - 677499620, - 887350633, - 1910823965, - 1074653760, - 2669527160, - 223941914, - 3638297358, - 3976028732, - 2153246112, - 3107649886, - 2225817653, - 365559041, - 2590903965, - 4267229921, - 565109787, - 1465231336, - 1031473275, - 1393103622, - 3065248441, - 874527608, - 4007090012, - 1754535205, - 468826697, - 3193473952, - 2427827474, - 3093649161, - 3340523605, - 538785320, - 540707646, - 1138431196, - 390508078, - 2231744465, - 3431900471, - 2267895721, - 2586776002, - 458121288, - 4151047880, - 1794590530, - 2207519743, - 757299014, - 2917271579, - 2795562629, - 2743741909, - 1960280979, - 662426508, - 3129251070, - 3284489896, - 2860828673, - 1665561966, - 243380736, - 1919574277, - 2539834250, - 806470044, - 1347773453, - 2588536886, - 1735157907, - 2984222123, - 3613443173, - 2161200535, - 1139265877, - 428233703, - 3310537775, - 130112178, - 1688164348, - 1800051748, - 302537661, - 2956495443, - 1641859068, - 47107059, - 2547135481, - 3629305242, - 2304666342, - 2953885877, - 4274433508, - 3596400581, - 979899601, - 1408111447, - 2891516400, - 3148158100, - 2198724832, - 3377935260, - 3741107224, - 3692011552, - 589770358, - 1491910442, - 3070679896, - 96783584, - 1097094582, - 718459446, - 1566463764, - 2251827675, - 615019287, - 3547997145, - 208891375, - 3237297624, - 3017013184, - 1351182236, - 3220242871, - 1869677733, - 2552355223, - 2314224878, - 3646448768, - 827517565, - 286583396, - 2545551636, - 1652513092, - 2288536082, - 1104922507, - 1453694202, - 3747222584, - 3724572766, - 208872447, - 1298083301, - 2440775047, - 490732369, - 2579372015, - 773048301, - 3117989885, - 3093360594, - 2944738427, - 3420927373, - 610089166, - 3465176652, - 2026748904, - 893684058, - 1051908742, - 1631921016, - 3068536731, - 2517988527, - 1237193610, - 1186253081, - 3445268010, - 1527128720, - 52389139, - 2272891438, - 4216412582, - 162836209, - 285766621, - 1450011463, - 2529126133, - 2774138060, - 363705296, - 1046202433, - 2342962096, - 3660787056, - 1475962584, - 470852430, - 718191714, - 616824852, - 76199732, - 1858152976, - 4018570617, - 3978103382, - 2630348100, - 3609233488, - 3189344713, - 2518740409, - 3931673493, - 1974038003, - 704660170, - 3939759283, - 28317915, - 155880200, - 98267554, - 2179068966, - 1621791391, - 3883686925, - 3889013631, - 3901334391, - 595696176, - 2056195920, - 1766401898, - 3894355593, - 374485636, - 3627058850, - 2345537203, - 774497303, - 2739386687, - 638042094, - 2714586176, - 3681906252, - 3586849617, - 2279548160, - 2388695521, - 2729026787, - 3921872454, - 2742643549, - 3256050029, - 3524792649, - 900652251, - 4027843931, - 1664123130, - 1693946364, - 1091032684, - 3229605164, - 3138471477, - 4076063116, - 1921014030, - 703457671, - 3778215254, - 2874553061, - 1977925591, - 3474710324, - 1397524114, - 1639376206, - 1365339786, - 1396788688, - 4170383281, - 2374091079, - 917644604, - 923930747, - 335414501, - 2894224106, - 2132047599, - 2139834955, - 893152688, - 3658071072, - 1808034793, - 3992989059, - 541814478, - 2467639183, - 4252046925, - 2221776604, - 4010357422, - 3280876308, - 2195433621, - 605914166, - 3580984135, - 1849716108, - 1379095441, - 1444911407, - 1727601442, - 1107293059, - 1360518929, - 3882144763, - 2304676291, - 3161709325, - 4202670520, - 1726836122, - 1352003231, - 1211530831, - 1428143025, - 233742132, - 254065558, - 3778834684, - 2960826649, - 3846707853, - 78125009, - 3035610100, - 4248789418, - 1988353666, - 1488294629, - 2658401083, - 826190428, - 982579292, - 2611299229, - 607386192, - 383744560, - 741541151, - 685070534, - 839618609, - 168365358, - 3600193535, - 3516963691, - 3847439236, - 59984269, - 3531750322, - 4110124503, - 1832015299, - 1109782285, - 224715854, - 1368486105, - 2896734990, - 1631277553, - 2122909256, - 1329180973, - 3883429764, - 2709763270, - 1485532223, - 1454163641, - 3877647601, - 1314197322, - 2191792264, - 1547290652, - 2767848576, - 3165457667, - 2615232590, - 3554360090, - 3461892227, - 437444488, - 2530137939, - 2811265237, - 1462499144, - 344905227, - 3209896933, - 2633921104, - 1629316777, - 1898326951, - 1699291982, - 3173676758, - 2413271387, - 2308589561, - 3010504667, - 2318476122, - 4283542195, - 3136680355, - 1274070214, - 3634534510, - 1621178665, - 2720726580, - 2557726616, - 1593800629, - 3618016530, - 4222420581, - 1427771311, - 2709604213, - 3380881521, - 3429159578, - 1651149604, - 851806597, - 1924252937, - 3042327186, - 2621745230, - 31459639, - 1789941262, - 2699969865, - 4089263763, - 309554426, - 2416205404, - 668142387, - 1028045099, - 2577874636, - 3966935504, - 4013817059, - 952209219, - 2464801737, - 1951540594, - 270149440, - 3537443389, - 1700303197, - 1525434562, - 2016801738, - 1016066298, - 788950372, - 3301785988, - 867188989, - 591182823, - 4147481811, - 1636209026, - 2870738430, - 1379570794, - 1718211382, - 2080443521, - 3117953048, - 787459788, - 454627963, - 2241519140, - 1690518095, - 1687083652, - 721125394, - 177924742, - 596379914, - 3547974935, - 3551038003, - 193705890, - 3903775616, - 2791266867, - 2946582821, - 3677605527, - 4114537380, - 517706278, - 2851515163, - 3606961097, - 3140861854, - 2004897727, - 2934409226, - 2266809059, - 1728851203, - 2963852138, - 3726868473, - 2346475963, - 3284094362, - 2603029369, - 1910866684, - 2201562938, - 922269724, - 3490564244, - 1223267927, - 781137550, - 1409009688, - 1481644234, - 638868594, - 1299363926, - 184622589, - 2140815496, - 972229474, - 3463817524, - 337587642, - 1588378988, - 2458859134, - 734138931, - 829580747, - 1807474453, - 1339021298, - 2949169677, - 2696891107, - 3696602637, - 1454748205, - 829820794, - 3565850664, - 1581233802, - 3083125053, - 1038667479, - 3614790977, - 2537209949, - 429330636, - 3337980768, - 3093601877, - 4279291192, - 1931300040, - 3549963879, - 3073864202, - 3313723184, - 1045894249, - 3527208306, - 3955141051, - 1168948341, - 2252748369, - 1419859715, - 1697615792, - 1861852595, - 2965412158, - 2785614205, - 2019081072, - 3865163742, - 1715960246, - 538250537, - 3777321518, - 2012459552, - 2954119463, - 2929968567, - 3887420735, - 3803424578, - 3695819037, - 3864966887, - 2146529087, - 88966190, - 3171364893, - 3564359203, - 2710751269, - 3483003647, - 2389828945, - 3033472226, - 4212945272, - 3200039382, - 2723039734, - 1234116526, - 1847511553, - 1554459841, - 490403964, - 2702426000, - 1360638205, - 3767662172, - 978930326, - 1673983766, - 2622724213, - 1465277083, - 3276263245, - 104027788, - 1275307451, - 3713601502, - 1892012973, - 2561897677, - 666977941, - 263458652, - 1205359359, - 3825584411, - 1772594920, - 983171048, - 1967517634, - 2312744179, - 1934059481, - 237802726, - 3413186583, - 3980764628, - 4157606392, - 3321271436, - 2228423185, - 2951588085, - 3216481710, - 4263810110, - 3695527305, - 3201086853, - 3465621870, - 3115371405, - 596190044, - 2778927076, - 1192881464, - 4070672740, - 1695932240, - 2461613540, - 3114294196, - 1035068883, - 1219869157, - 1567081195, - 3182031599, - 996055887, - 2184037079, - 1613272888, - 4138419380, - 3574859260, - 2772736509, - 3058734564, - 879110600, - 1620863518, - 451271243, - 1423498063, - 2260885075, - 2287937569, - 2182652696, - 1959408408, - 3417994095, - 2762728774, - 3723682981, - 3620972276, - 4004350412, - 3852922782, - 4042483673, - 817590891, - 4008434068, - 4150679257, - 1818473264, - 2274062019, - 1287134600, - 2606536974, - 2900163619, - 764327663, - 3380352169, - 663960579, - 1574962505, - 908720822, - 732411552, - 3092799743, - 89050189, - 2612418392, - 1167021764, - 2703900870, - 196466159, - 4100558276, - 422322268, - 553572367, - 3812332444, - 2709890491, - 1048889523, - 2536724669, - 1892819626, - 1492915400, - 4123276207, - 656277302, - 1950735023, - 2209777636, - 3597582857, - 207740555, - 1242405021, - 2794288469, - 2384281621, - 789332086, - 2113081185, - 4033156755, - 3430572545, - 2514642706, - 3849776156, - 3999536605, - 2183668944, - 1797714141, - 1574723027, - 291326525, - 1162829392, - 2833518205, - 312881997, - 3489561035, - 311193915, - 226320225, - 1285113431, - 1105912206, - 188068540, - 3599336557, - 2095448587, - 2645627174, - 3743399104, - 2671665081, - 4239787616, - 132154633, - 3481420916, - 3573468186, - 4187070105, - 2530155413, - 2924766233, - 3143247818, - 3915372411, - 1180529697, - 3971354169, - 602939694, - 1999356624, - 874227885, - 3051951772, - 1059212570, - 2567771044, - 3659557415, - 2849657961, - 2790113052, - 3534643250, - 3382123561, - 4227034791, - 3266187579, + 589511021, + 1323998533, + 176850944, + 1551255156, + 397738773, + 911500162, + 2737091474, + 708979997, + 3994760758, + 3303700709, + 888569139, + 289778060, + 1768937611, + 1996145785, + 3840916743, + 1501832586, + 1936488063, + 2944326342, + 3871460792, + 2746191034, + 2366037663, + 3260886734, + 3296565714, + 349592002, + 1396175095, + 3080033997, + 2398883040, + 3949466473, + 3378685641, + 3195545630, + 365676036, + 197147087, + 2389375480, + 4146490055, + 1979426675, + 1476646487, + 3924163693, + 1238855844, + 1880485139, + 1818526239, + 3438893976, + 1419717613, + 3337932786, + 488209615, + 2538814835, + 1376649389, + 2966036136, + 2636818253, + 2473945788, + 1243743989, + 1333722304, + 1378848105, + 3401063737, + 1934211747, + 3201016291, + 1126062345, + 3227144982, + 2683131401, + 2661254427, + 2911453449, + 3789526830, + 2043164298, + 796844581, + 2093739274, + 3983503378, + 2906976323, + 322110433, + 1954594948, + 1011027017, + 2977775800, + 315889079, + 3101075807, + 3280515285, + 1720531821, + 2451434803, + 128374457, + 3550487633, + 3565976533, + 1210376435, + 57874698, + 3277710818, + 1234230112, + 3673887702, + 1284609792, + 1382134588, + 546595259, + 1333446416, + 1200201770, + 405234428, + 2873729703, + 4196873256, + 2469332686, + 31268618, + 2000566884, + 2863079542, + 1916394421, + 4061015755, + 1801841, + 1602869304, + 3872221708, + 2229661838, + 476638190, + 2885047426, + 3904841046, + 2398848389, + 3362927794, + 900826116, + 583893194, + 809803332, + 783205286, + 1232027095, + 642619817, + 291325673, + 2394595815, + 2083935040, + 441843619, + 3794227363, + 1202086974, + 1608534168, + 3007131929, + 338805743, + 1037358754, + 840481667, + 1477436863, + 3935784939, + 4034282324, + 1683212201, + 1082988654, + 863915951, + 402521142, + 2585215152, + 1184986847, + 2339888746, + 3248831765, + 1327189634, + 1824862031, + 2781708262, + 2514970689, + 744659021, + 1609629996, + 124253649, + 1802674923, + 836390117, + 817098764, + 525539703, + 2493519200, + 579659981, + 257006896, + 3821235563, + 3544658050, + 3349581083, + 1140776301, + 1732186477, + 2653732335, + 2511018242, + 772717904, + 3203167844, + 1918239996, + 2377626910, + 1895572652, + 2337741050, + 3165624971, + 3165169378, + 3916395310, + 1579432771, + 3273935512, + 831366372, + 1544919845, + 1357891515, + 2528107796, + 3984972442, + 1837805658, + 2655613966, + 278077232, + 3125585650, + 4242824043, + 2137097645, + 1362770071, + 3090519654, + 3542246293, + 2267914494, + 832654185, + 152735679, + 3007818922, + 1425167047, + 3714717895, + 1051882629, + 535736643, + 1094103409, + 3490517358, + 1957250708, + 4253453966, + 2178065005, + 1347056379, + 1325621696, + 3261978280, + 2296494729, + 1270875153, + 3085006720, + 2916172790, + 3332467033, + 3886507647, + 2154714101, + 2875062686, + 3077420231, + 3718741165, + 4069134394, + 2080712587, + 533646438, + 1494115299, + 2364174184, + 2727979007, + 3062137193, + 3726496722, + 3615246392, + 3086334514, + 2635806499, + 4070476088, + 4217497356, + 2785524495, + 1454301776, + 2242779094, + 839119699, + 1643111716, + 3384973805, + 1163654181, + 3118298103, + 543844405, + 4232234145, + 674505353, + 3698352841, + 2216806315, + 2486477489, + 3555566439, + 2011337377, + 1346436741, + 2947356604, + 3181592759, + 3965165060, + 1335350225, + 988042451, + 2124837557, + 1295962658, + 1522323171, + 1637981387, + 2686006757, + 713136288, + 3260483940, + 989480692, + 321644081, + 267440544, + 2369524169, + 2139322290, + 2935019344, + 486650077, + 231245845, + 2714229047, + 67591338, + 2380817191, + 2081839473, + 2313368699, + 1485151547, + 653563131, + 1082971547, + 2267410215, + 651519792, + 454536393, + 2315934847, + 2420623906, + 375642401, + 2182955644, + 296208522, + 564661255, + 3961785388, + 3678215162, + 3153379508, + 1971824111, + 1536441562, + 3573140330, + 3000952908, + 1455167847, + 3309756596, + 1001326117, + 4016740180, + 2189037310, + 467730799, + 1536025905, + 1186723218, + 4262779272, + 113642172, + 912801006, + 2242370382, + 4100901277, + 225415280, + 1907470633, + 2691952555, + 4097915339, + 4106718476, + 1248713056, + 2570330515, + 2861469709, + 681401047, + 631603120, + 1643272389, + 2126934258, + 1391106081, + 1235457234, + 3714312193, + 859041899, + 3523755014, + 2066936928, + 3916072629, + 3758707674, + 3263960285, + 2041189628, + 3159326909, + 983812159, + 2269627436, + 1436127317, + 4235964022, + 3039314585, + 3751559271, + 3727491962, + 225434914, + 380882437, + 685233186, + 12498349, + 3611229891, + 4171128571, + 336638769, + 1272706904, + 3677602280, + 1945754256, + 1219264709, + 1481610199, + 2894749646, + 198454810, + 3770857646, + 1422301959, + 2981610206, + 3113375441, + 401958174, + 3332112158, + 2276137903, + 3289232063, + 3012553456, + 1432418441, + 664622044, + 3560437675, + 819110716, + 3028090825, + 2770831003, + 2533512056, + 2421331807, + 1334424121, + 1823651137, + 1934026985, + 2730732450, + 102398553, + 2458389559, + 4229009881, + 3763461645, + 2432594459, + 2742929546, + 2051723138, + 1577603373, + 1700089585, + 1122718152, + 3670881915, + 1248983693, + 175063283, + 472181558, + 2768438117, + 3091408436, + 4165497635, + 3255851906, + 3174318984, + 2654976196, + 4018660877, + 3310175843, + 543450914, + 61597, + 257875979, + 64319987, + 656565801, + 1323114376, + 3120030701, + 904098333, + 243360474, + 471841287, + 2070742773, + 2189327980, + 1310594480, + 1338071606, + 589521130, + 1363383112, + 2498152177, + 2681609237, + 3085567233, + 4067132403, + 3152526501, + 3888080089, + 4074825989, + 3516587050, + 1761961512, + 1922096643, + 4128048860, + 1635192008, + 2808163611, + 3059860724, + 3441731162, + 2780145646, + 3724070678, + 239301545, + 1656332024, + 3787767824, + 3091037163, + 2939423254, + 4188959608, + 3076095541, + 2776994862, + 3808274230, + 4271663914, + 2228685325, + 3023382671, + 87128763, + 3971101131, + 2951387970, + 815524267, + 1112949696, + 3425555670, + 1772873325, + 267122151, + 3502384421, + 2295263439, + 472908699, + 2632354634, + 2019041042, + 527372071, + 798709814, + 4013916379, + 3759694750, + 1440103698, + 51657650, + 2987526369, + 840305193, + 3043172408, + 1687940550, + 3643447855, + 2973901600, + 2191179750, + 2260332339, + 491961248, + 3634009016, + 31113642, + 834679650, + 1301301186, + 3274761765, + 3751016373, + 3214831236, + 3082788829, + 362317, + 529352072, + 3492444159, + 1280565919, + 2242683587, + 2888564375, + 1803244054, + 3435927122, + 1640753200, + 1898537143, + 3228053792, + 1954206180, + 1540456922, + 248273326, + 1325644769, + 695538563, + 4090026332, + 2274294359, + 2768151406, + 3042025570, + 4269179024, + 3806211395, + 889507895, + 3370546595, + 4096188980, + 2354537103, + 3441793032, + 3203113872, + 3457565482, + 1002278887, + 4152750885, + 3294354159, + 1041991301, + 94798948, + 25722773, + 1546525185, + 2686561678, + 2192563886, + 2621775542, + 2373996494, + 1905310005, + 2214703992, + 2399149418, + 1342545721, + 1185127416, + 288978031, + 1832198805, + 2281434414, + 2737976835, + 614579549, + 3174170761, + 2662962647, + 4163972526, + 3612044194, + 922880540, + 450642274, + 2423406646, + 4156757808, + 2294690311, + 1036538825, + 2666284094, + 240963234, + 606309111, + 683429215, + 1508006303, + 3660632054, + 200640312, + 1582774682, + 1816197312, + 1418551302, + 3544639091, + 387253256, + 2296414363, + 3164444448, + 3335301321, + 1347845807, + 103975574, + 353339429, + 2139146977, + 1254057391, + 540580888, + 221842618, + 1699742748, + 3085492567, + 3117593426, + 3076459179, + 66368322, + 1667989980, + 3042891261, + 3374433591, + 1577595923, + 1518774768, + 3758243785, + 2716120023, + 1471476742, + 2784493723, + 3719462986, + 4237860952, + 243005367, + 803541418, + 1622842370, + 4017105120, + 3282758325, + 2180699619, + 2447225519, + 1628975859, + 3236748404, + 2439493161, + 961318670, + 953497946, + 906897864, + 355062589, + 2843738175, + 4180013947, + 3007690663, + 3038340073, + 2033038577, + 1354994798, + 2425515943, + 736106314, + 3089270813, + 3528514596, + 2663787100, + 1419188080, + 1691116978, + 138082133, + 3459389459, + 2444776335, + 4187210535, + 3615446377, + 2843925455, + 3424484450, + 655655837, + 594221093, + 3515424348, + 3758056384, + 3281136615, + 3930205866, + 4187796405, + 3295721757, + 2206647035, + 104100576, + 652243690, + 3134733434, + 4076881814, + 2771590059, + 3162413904, + 176138632, + 3281037289, + 2300762377, + 1095451656, + 3748256378, + 1541232577, + 1383396856, + 1647384226, + 1602072175, + 77393344, + 2691558165, + 2027445595, + 4104901499, + 1864704841, + 1325350336, + 520716817, + 144290621, + 1087055205, + 666343841, + 494251383, + 2801070313, + 1956499105, + 3474664653, + 3738017648, + 537394283, + 708484642, + 2621188381, + 2437415036, + 2749040333, + 3705659569, + 1564587561, + 2544884804, + 2361480034, + 2642898509, + 4006956771, + 903272288, + 3181367029, + 2268617501, + 3037337480, + 3122746905, + 266276946, + 834872068, + 1653746514, + 3048207608, + 3102639606, + 2110664874, + 557715581, + 2562643382, + 3469866651, + 671343802, + 624738689, + 892301740, + 246335000, + 1480140806, + 31509504, + 3816545152, + 1013980530, + 4007882666, + 822580533, + 2981532086, + 2079640994, + 2375536320, + 2817643049, + 1415256385, + 3287243797, + 504639808, + 2206656865, + 1937728432, + 3918637485, + 3680797014, + 533621293, + 2974466848, + 255732403, + 2156060446, + 3593850467, + 1454027129, + 3427804033, + 2557443383, + 165245847, + 2154672243, + 2211909535, + 3703679539, + 1308185312, + 54229506, + 2229468426, + 2652730717, + 3367287491, + 1928368797, + 1238395048, + 2584334892, + 618288764, + 636082787, + 2419544627, + 2366144843, + 782231435, + 3247133989, + 2247378208, + 3189371460, + 752767138, + 332518134, + 2943207979, + 4047399075, + 270684729, + 4202558060, + 2956905815, + 2093921246, + 2722155366, + 1537413762, + 3696294495, + 3907259046, + 394476912, + 873554057, + 85687184, + 1054481907, + 3952738836, + 2454856910, + 1006918661, + 87263609, + 2523338389, + 787794510, + 1702085297, + 568556463, + 3301349268, + 928651772, + 606880734, + 4021341343, + 1143778751, + 1320053429, + 4199542875, + 3545237017, + 2431061285, + 3425269713, + 2107121238, + 480279109, + 1816750149, + 3608397395, + 3151874455, + 500471926, + 1080424681, + 1520818916, + 1520313316, + 3384770575, + 3387423008, + 3145859113, + 1830541752, + 591142954, + 3733972651, + 3475112720, + 1878822334, + 1272266776, + 2083179041, + 1638395084, + 2268927369, + 3240721451, + 1632193605, + 2128929382, + 308186190, + 4128090489, + 3003138348, + 990485170, + 1717726151, + 2797816321, + 2736389011, + 1252272232, + 3344205569, + 1622328414, + 3345479644, + 1626316708, + 726543301, + 2358436653, + 1216513474, + 430748658, + 2798104731, + 1061340297, + 3348277411, + 797978485, + 4082635383, + 2990078472, + 3780148288, + 3553076111, + 414250048, + 910908850, + 1635019177, + 3696436719, + 3072215358, + 3788207733, + 34479427, + 2565147779, + 2915857220, + 446470224, + 2353291652, + 1813137747, + 1595111058, + 4000215542, + 1134859806, + 1683803119, + 4110852400, + 271243001, + 909618629, + 2933619866, + 3692509488, + 2320463307, + 2710465678, + 2550792798, + 2137955498, + 3701881109, + 1236155080, + 3348182210, + 2152631701, + 3614017305, + 2617865714, + 4198234152, + 1915006139, + 766360150, + 1058299328, + 2570978379, + 1891757986, + 883393909, + 82620100, + 2426741839, + 555375630, + 3985271963, + 476519983, + 303632534, + 3009747491, + 2335133612, + 2327712136, + 1211089437, + 2727413644, + 2184930071, + 3930414454, + 1782868076, + 3914815306, + 2284867217, + 1384188755, + 3515331436, + 2027404096, + 1812693477, + 1223274063, + 2327946367, + 770080248, + 1906775430, + 1537275848, + 647704038, + 458542751, + 1028382800, + 3202191868, + 2823123937, + 1556402431, + 195014694, + 1042565094, + 404659243, + 1468535185, + 1108977963, + 1552975859, + 2113646624, + 2648600974, + 488251315, + 3743207925, + 1957437764, + 1395522087, + 27668692, + 3543192552, + 63006419, + 905449341, + 2606519531, + 164744956, + 816312964, + 3152212033, + 3483956634, + 1822833331, + 754633624, + 4049306408, + 3202903943, + 2540150334, + 3992710460, + 2638528421, + 975313524, + 16947471, + 1268649706, + 1055173283, + 3602482023, + 4287981646, + 4118198865, + 3554520647, + 935392366, + 2875878176, + 657692488, + 2903299092, + 1817422432, + 3369070489, + 1396415130, + 731757948, + 54412660, + 3375043099, + 1849341708, + 2561328851, + 348804963, + 2103970910, + 1745474795, + 1906712224, + 2991800096, + 837022351, + 1865515554, + 1168787773, + 408360113, + 226761942, + 2161703326, + 1061327103, + 2096860083, + 3495365595, + 212250423, + 2663090109, + 3937837686, + 2896517036, + 1690045637, + 3425004764, + 2761272770, + 2057762529, + 618728173, + 3273145854, + 3273491318, + 1798433600, + 2028323888, + 2271624546, + 3626585580, + 3762225574, + 432567406, + 4182989392, + 826508419, + 729003204, + 2292931046, + 1849067150, + 3201521770, + 2354543097, + 1903699232, + 458172916, + 3099872933, + 2973215630, + 2627299703, + 392481646, + 1876678552, + 2415089265, + 2589311932, + 734369410, + 1380882128, + 3035902842, + 4193755797, + 992024996, + 3704321293, + 1224456651, + 440068757, + 257894104, + 22313017, + 3736996199, + 546298585, + 2360876775, + 172411687, + 1786101124, + 2989603763, + 3740056177, + 89058971, + 505890410, + 2924254298, + 1826934093, + 915435811, + 641497236, + 1265259648, + 393231891, + 2783755963, + 2237689247, + 2001000092, + 3213768991, + 2894008959, + 2260329280, + 3719902132, + 2831692952, + 2980887688, + 1782904415, + 4145331856, + 3089843652, + 1225841660, + 4227074676, + 378492093, + 476482549, + 879016153, + 2497518496, + 6404365, + 1019570581, + 1190642514, + 358782522, + 618068267, + 1566307699, + 1538176970, + 2178025632, + 637989933, + 2667374448, + 1700155485, + 808835010, + 1056226647, + 3875640269, + 873208055, + 2280700188, + 3076687813, + 3400679451, + 4109796272, + 1545115214, + 2307281492, + 988798248, + 2750892552, + 1917884427, + 1805578336, + 544845826, + 2944863140, + 3380787813, + 1308614291, + 1701183493, + 382967336, + 1140220604, + 1261313790, + 393033050, + 769916894, + 2465240524, + 3118951942, + 2205202431, + 1626534358, + 2806957018, + 3393689884, + 2749513494, + 2002676960, + 658316918, + 596096047, + 1771370098, + 1420644789, + 4225507842, + 661016480, + 1198045657, + 3217781841, + 1590172258, + 885844577, + 1072021867, + 2518039901, + 1198077008, + 4194650827, + 3310277429, + 3574099062, + 147391941, + 2820364841, + 3495521286, + 1622035542, + 401037349, + 4144282605, + 685867238, + 147788405, + 2734293625, + 850588447, + 4005210426, + 304766142, + 3686918022, + 4082689317, + 747073373, + 1953493860, + 1713032650, + 468891157, + 1663992882, + 887527154, + 3349320948, + 2342884116, + 1587950911, + 3614373030, + 84091047, + 784321965, + 2594506046, + 3182543212, + 3421309957, + 2738756557, + 1447031048, + 3536363713, + 3174094508, + 1714453582, + 1912525619, + 3019905551, + 2355159532, + 3659541328, + 3315775311, + 3069239114, + 563546251, + 2715278467, + 3329837241, + 2774232174, + 581296154, + 3169247610, + 3875748516, + 2574388278, + 942422957, + 2538027448, + 1800723306, + 2866248272, + 683679712, + 2763073719, + 1103680833, + 3299181586, + 31894282, + 87525764, + 2458599373, + 930491915, + 736917205, + 3857363239, + 1152962624, + 617771256, + 1941492719, + 609395769, + 2856461282, + 3521812880, + 2773618205, + 3152890058, + 1351714055, + 149246063, + 181523795, + 715600616, + 3538019154, + 2897169444, + 1509154342, + 1162829935, + 1837399183, + 351742853, + 2845669335, + 2233785159, + 4130375868, + 4233378538, + 3430129097, + 3970192760, + 2910176080, + 1313300806, + 1493455079, + 3604393441, + 3664326451, + 3579537540, + 3019714235, + 1313832700, + 3462380210, + 1570783218, + 3052532884, + 500712413, + 551674650, + 1691198735, + 1007646179, + 2061855916, + 3918896794, + 2349532161, + 2704669603, + 2462700186, + 1463755136, + 2644950944, + 1049047296, + 1362356843, + 2334717959, + 3419349492, + 2966090792, + 112078300, + 1865737225, + 875865100, + 2211084054, + 1086193288, + 2659437100, + 910056161, + 3237044666, + 1430855221, + 1007485006, + 1499130541, + 3996654739, + 3753211182, + 2728300079, + 1319358032, + 3605326372, + 2026829524, + 4005681368, + 2514350068, + 3618720898, + 2217961966, + 2643886175, + 1109165822, + 1357361807, + 3585870928, + 3975058220, + 1572488756, + 3676822960, + 3470094128, + 2872546269, + 3920835391, + 3992675725, + 1156174012, + 3140381154, + 2608121012, + 3058624235, + 2934998111, + 1759197043, + 4067500834, + 1991472513, + 3216619759, + 4098769618, + 588951783, + 3245777694, + 328730257, + 4126839765, + 1792154760, + 2422719423, + 2367088070, + 1310551770, + 1128033779, + 2150996295, + 1581828869, + 645831852, + 813503394, + 3782478561, + 3649932969, + 565493080, + 1237118028, + 1406104357, + 3520255186, + 2338045581, + 3916991021, + 4119017920, + 2958534108, + 3954739100, + 3054230140, + 2089357123, + 2722855603, + 2156538824, + 3623929086, + 328004918, + 1829807061, + 3680050322, + 3349856703, + 204276086, + 1314306542, + 3453817592, + 1440201948, + 2581060547, + 774227190, + 203891241, + 2032607103, + 1417439986, + 96835946, + 3079590951, + 41398420, + 2370311702, + 1552067677, + 4238548531, + 2918547770, + 391361200, + 3128388875, + 917817893, + 3109899745, + 1193398054, + 3994520415, + 3302673848, + 3782873261, + 345550561, + 682307242, + 2438073407, + 2182612056, + 136911532, + 3024578854, + 1464426848, + 1239236135, + 406241763, + 1535531509, + 2249614806, + 3967341569, + 3885490130, + 833285367, + 104357502, + 2328553903, + 82630257, + 3082197229, + 2629109740, + 4085385036, + 1995605278, + 1739322391, + 1857299299, + 1894106072, + 3916707916, + 3993176126, + 4217211652, + 439008971, + 600329528, + 818825852, + 1530207904, + 2238991740, + 960664711, + 3238916538, + 1055058397, + 1940929437, + 1547247540, + 262617913, + 3600373387, + 416132081, + 993368795, + 2220762439, + 2852293786, + 1401214920, + 3029911087, + 1135574842, + 788507702, + 4164163945, + 929053688, + 3881226185, + 1607866896, + 1395847549, + 3583865249, + 1312324669, + 3904671564, + 2853328718, + 1662356226, + 3423291444, + 3668912389, + 703598463, + 2734575683, + 904651871, + 1980080905, + 2814690610, + 1678408405, + 3044565008, + 22124189, + 3835552704, + 1106202965, + 589445101, + 2002996239, + 4035213713, + 2754553904, + 196817550, + 3486306698, + 2267106779, + 1709356007, + 560969382, + 1517733414, + 3855497207, + 2801556254, + 2806825775, + 2967296878, + 473298742, + 1395090992, + 622672763, + 753358494, + 4219187545, + 948513988, + 2514732417, + 2988203274, + 860398967, + 2353708655, + 3661475823, + 4230893622, + 161043833, + 2756794346, + 1450971003, + 420462705, + 881773210, + 56514799, + 1907948821, + 1673406566, + 4171299656, + 2132255890, + 3809708773, + 3431489334, + 919982764, + 709011637, + 1081067144, + 4201636673, + 122268932, + 1258523215, + 181516774, + 1775120463, + 4238218376, + 3558361903, + 3658796334, + 4184496871, + 3478503788, + 4235749210, + 717242310, + 3766020210, + 2600264541, + 4174475064, + 316626571, + 1240878766, + 3078415763, + 572831427, + 2927378299, + 1244736343, + 1975048380, + 314206211, + 1914441280, + 1028117158, + 3574470752, + 2449819529, + 1631424137, + 4224123471, + 1387213841, + 3791010883, + 304120381, + 262280642, + 625045499, + 3195066877, + 2057834069, + 1703506748, + 1976092685, + 979500357, + 512192933, + 3063384635, + 2963708440, + 547587969, + 3049596009, + 3725319945, + 3916537634, + 3889954964, + 1506842910, + 2641879753, + 225436613, + 2535851201, + 3245888367, + 1994911756, + 1796904190, + 962458031, + 1438229788, + 1347717838, + 183138108, + 3661538180, + 3506250166, + 2093502646, + 48216024, + 2293601053, + 3771797682, + 4270309578, + 652000076, + 3884933307, + 4280498659, + 3771682787, + 2572898805, + 2071886124, + 1949013280, + 643211551, + 1021077592, + 1116964514, + 3507381328, + 1055668821, + 1504005487, + 2274252298, + 1231648713, + 2829518225, + 2220376759, + 69824273, + 772847486, + 3740221278, + 3624723231, + 2962455366, + 131199960, + 3495559045, + 1226338056, + 3441459472, + 2708809423, + 3231900019, + 2278904939, + 588773953, + 874836790, + 1905354647, + 786284177, + 166884206, + 1252924121, + 1663292119, + 2963163930, + 1806980674, + 3316352254, + 1806328857, + 2467852125, + 3859711815, + 3080417844, + 3981112270, + 4193085606, + 4165431855, + 2813861605, + 1945379825, + 3407760626, + 3778036088, + 2492778894, + 2517891800, + 1323110225, + 3093972215, + 4217083836, + 2614216315, + 1141562244, + 2557122595, + 2014813690, + 303833857, + 1783656149, + 3159216793, + 1388168830, + 392633743, + 2627901522, + 558935453, + 3140407526, + 2597831830, + 3616663098, + 1339844249, + 2035526637, + 4016101509, + 2110605720, + 871445591, + 2526693002, + 742264831, + 1742440537, + 1836544162, + 807275552, + 3538472593, + 2663262015, + 1982268038, + 2930866274, + 303755336, + 1018210314, + 2587693638, + 739580846, + 2419846796, + 913923256, + 3230906115, + 157123207, + 2552733473, + 1168370740, + 3201727194, + 284650410, + 3742141516, + 530697113, + 2663944448, + 1700576398, + 1772649435, + 3291728859, + 966261559, + 2605032749, + 1902267786, + 658607637, + 421242040, + 23072585, + 3770528866, + 689666758, + 1561495496, + 3942664550, + 1767495249, + 1218870838, + 2866584842, + 2949439983, + 2072458580, + 2796927018, + 4065369052, + 4209619806, + 2849755075, + 733612486, + 595027719, + 2220774556, + 1932330255, + 3556230309, + 1678901275, + 1779213611, + 2071682978, + 1326913083, + 3699383932, + 2812018961, + 3374222958, + 1872559340, + 857768651, + 2681244696, + 3026287593, + 3505509166, + 3259193298, + 3201374892, + 972066345, + 2536605355, + 1625987969, + 4100621431, + 3830470521, + 20566839, + 2367134960, + 1517490776, + 2764556364, + 2908501280, + 3793534383, + 3282361289, + 449374129, + 1517642069, + 654707439, + 1814856019, + 3000001002, + 3267184049, + 2877080571, + 387333607, + 2346755201, + 3951363052, + 2252743257, + 3655559732, + 2047592359, + 3666868369, + 596515402, + 1898850121, + 2619271467, + 432925026, + 406316163, + 3523450161, + 2631707070, + 3104941722, + 1697027137, + 841759634, + 2366283604, + 3320135934, + 1264429250, + 2298543548, + 2811005340, + 3763306073, + 1665312693, + 1219354550, + 3412895254, + 3343735839, + 3182259518, + 2245868543, + 651097309, + 3410529071, + 653153357, + 3187176992, + 805257832, + 3391701115, + 2173991486, + 2764816269, + 3738297017, + 3338249964, + 605174538, + 3447153344, + 2268552565, + 264710186, + 4291187548, + 1248823025, + 1207711869, + 3143689730, + 2120173100, + 1258024332, + 1675669201, + 3944266040, + 3770500099, + 519345252, + 4055969226, + 834847898, + 1523345228, + 2281508394, + 4279945662, + 2256251668, + 2723118956, + 949172590, + 3556653463, + 2204978561, + 2207845295, + 3133121664, + 2938649283, + 1054902587, + 3917906278, + 147812371, + 1590837543, + 1046907165, + 3127957031, + 306554467, + 109358899, + 1957906783, + 10768849, + 2123982796, + 2967261121, + 1591729302, + 1336828618, + 506775007, + 1047427085, + 1037772681, + 3619622490, + 155857956, + 952278217, + 3278643474, + 3225668978, + 3319584714, + 3252897202, + 2181583955, + 1289827774, + 28957422, + 4273878913, + 89664473, + 2492447513, + 398829732, + 494949428, + 2277738289, + 2554005632, + 1519166875, + 2957097365, + 1954972444, + 487387260, + 1232404870, + 1650316441, + 4110337488, + 845353194, + 785405525, + 1646209547, + 15877662, + 3448987418, + 734462417, + 2195390906, + 919642007, + 2955779647, + 702970377, + 3697074110, + 50426330, + 898227933, + 1755036740, + 1910263093, + 2013661220, + 3127844542, + 1853025504, + 2110523861, + 1231234170, + 3892427597, + 1935442374, + 3022751536, + 1985092545, + 2158135762, + 106593194, + 1360514722, + 298362803, + 2058814277, + 1523861475, + 520755291, + 685291089, + 3102826024, + 3549157206, + 3786619967, + 1826280654, + 3631202374, + 3303616139, + 684121986, + 2286439324, + 2125936390, + 2615781384, + 2418283124, + 2738037409, + 1877719337, + 987776868, + 360257678, + 2337725470, + 446615615, + 466757881, + 2541832958, + 2615550401, + 2654609760, + 1361101307, + 3071843137, + 3909891116, + 190222741, + 639699776, + 1024499460, + 2556418018, + 373717895, + 285013495, + 1212167752, + 955227312, + 1299200831, + 113072711, + 567001801, + 945836135, + 3766327401, + 3845800377, + 650637605, + 1006321034, + 540715055, + 1172818786, + 3094499619, + 2871696769, + 2229381635, + 1797948635, + 1568646842, + 1879237412, + 1901737541, + 1178465489, + 2441781555, + 1955727787, + 1602886313, + 830096818, + 4287316874, + 4117789355, + 1764761146, + 1510703180, + 888373825, + 664414317, + 736079442, + 2609555418, + 2973266640, + 2885918303, + 2323361545, + 2208429559, + 1218893938, + 2824695301, + 817620746, + 3061189495, + 929156923, + 2123907274, + 669473301, + 1790258024, + 1207062345, + 3024361136, + 652174054, + 76417327, + 1310445252, + 352503143, + 934223015, + 1621562783, + 3476301046, + 4122868015, + 3046150611, + 4073415821, + 1707347856, + 2800425216, + 2402774676, + 601634344, + 3498639405, + 2649634181, + 3487473905, + 55698949, + 162575114, + 2189462584, + 3472080519, + 3281238068, + 3270065889, + 4110089060, + 1690905680, + 502197549, + 1750228558, + 961423922, + 3128374346, + 1553464560, + 1829292737, + 1235862668, + 3103786125, + 1639207034, + 2997914782, + 3003377569, + 4142043800, + 1747646082, + 1130398883, + 1588783274, + 3034393377, + 845935096, + 1772557426, + 285117130, + 3599356417, + 951748836, + 167401782, + 2232533649, + 2617235044, + 1419933042, + 1167682084, + 975352262, + 2763495803, + 3197752252, + 595823803, + 1588578193, + 2386248761, + 909278640, + 2101377730, + 2230464958, + 2658465857, + 1856737334, + 1938906033, + 3208196788, + 4021819062, + 3059209342, + 3318207890, + 360746448, + 3917621322, + 3236100903, + 296789224, + 2249842948, + 3929462712, + 2575677650, + 549690566, + 2324183217, + 2053744197, + 300456291, + 4030910276, + 1531031183, + 1199942563, + 3368273367, + 3903749253, + 4019027165, + 3053922254, + 3313275572, + 2394356001, + 3651202796, + 1488615435, + 994226628, + 126516223, + 559229783, + 3475663403, + 3304525620, + 1192299199, + 2150786446, + 3670764732, + 907141600, + 4086631750, + 355798293, + 1152147427, + 1879318335, + 2972628879, + 2959490137, + 3844206035, + 3244219968, + 793806220, + 2722706088, + 1515673542, + 4051536956, + 3751106089, + 787433455, + 2843441801, + 3001751996, + 2498082185, + 2950098096, + 868210327, + 3008876163, + 3736120898, + 4129124263, + 3791295435, + 1225908477, + 2807908800, + 2322359676, + 4078221559, + 4205546036, + 1524741309, + 4181623492, + 1930648566, + 4221287542, + 3931404519, + 2667616959, + 3203700569, + 1300442555, + 3268750459, + 4181328053, + 2382233920, + 1208237172, + 992465201, + 1914341659, + 3941390068, + 633721245, + 1211212726, + 3124771761, + 935302151, + 2213884265, + 225187505, + 335369057, + 2291182927, + 1082819883, + 3797596869, + 785926618, + 3994512196, + 645756831, + 2536452562, + 2535773544, + 19422266, + 1534623135, + 1919597258, + 3647824875, + 3220254593, + 2092674806, + 2933366740, + 3232783605, + 1463788416, + 4129792300, + 1347917083, + 616337653, + 971517511, + 3751117470, + 3634717224, + 1015431361, + 322535990, + 916956096, + 10856968, + 3938099046, + 806270058, + 2697631769, + 4162389160, + 690999189, + 2029299242, + 2979638078, + 3141717583, + 2762710202, + 321539561, + 2307214718, + 3479818683, + 489385626, + 3520573785, + 4052845102, + 1242052248, + 1119832716, + 284811531, + 915100713, + 409154660, + 2339193171, + 1955212970, + 321649774, + 3473291350, + 2528076526, + 1598615383, + 2366233545, + 3437529181, + 1172475944, + 168593670, + 3768821155, + 1577379349, + 846618325, + 3914646998, + 3481908395, + 303923015, + 661610122, + 1146463691, + 947347606, + 573098707, + 783396346, + 310215130, + 1977049777, + 1995193354, + 1958422623, + 2826249184, + 2557291839, + 950748899, + 395966525, + 3860839865, + 80399346, + 3897710391, + 725605890, + 3336520816, + 2201986974, + 2028982805, + 4117998154, + 2029461714, + 475649478, + 2465581478, + 2090661781, + 3535920120, + 1440181203, + 2436642781, + 1094214781, + 298503410, + 3027964230, + 2912046803, + 3012909854, + 215072740, + 3343986902, + 4255017014, + 3031592049, + 1966271775, + 1637051653, + 2789186464, + 4034680367, + 2900190419, + 977762285, + 1492081250, + 1117859629, + 1755776286, + 1024800754, + 788188145, + 1792230435, + 3652473591, + 1189966401, + 2393621852, + 937195189, + 490467714, + 644462681, + 930506127, + 1181373165, + 474095835, + 124252446, + 1652553947, + 3191483012, + 2538473890, + 3954782085, + 429825274, + 3574446097, + 741675659, + 3983454991, + 103396093, + 640016854, + 1757341459, + 1270267843, + 2887378018, + 3374766290, + 3909627483, + 3818126396, + 4233499969, + 3202206629, + 2670375748, + 4279538794, + 1566167810, + 935143423, + 3717651154, + 1232649622, + 1541731605, + 3924509581, + 1811318147, + 2317137999, + 1224824969, + 2201280352, + 325909791, + 1326922510, + 3919590461, + 286162215, + 1907635281, + 3393818387, + 3955224248, + 190157757, + 2757057545, + 1922656595, + 1845878384, + 2179708032, + 1429679824, + 4088461231, + 3560749398, + 675620570, + 1553544193, + 2350633124, + 863210099, + 3281660527, + 1358542741, + 2872542599, + 1740564189, + 2468224912, + 4058529679, + 3659873336, + 2610994523, + 1542385722, + 2017845272, + 1791629468, + 3590586116, + 2870590576, + 1459773997, + 2721673304, + 501610195, + 1359461088, + 3927361580, + 2785222679, + 2317916159, + 567024995, + 427231137, + 2778345163, + 479080445, + 3172969649, + 2936135808, + 1193710606, + 2656276331, + 880168811, + 675137805, + 3189626470, + 3465066112, + 3590177590, + 366736080, + 1657775671, + 2630118438, + 3342133219, + 904886842, + 1689196705, + 2685802422, + 3208201808, + 1184802612, + 1609897610, + 1917577106, + 3683439834, + 2730568816, + 1837974470, + 3975279578, + 3531848515, + 3098263490, + 689132741, + 1810247155, + 3974088536, + 2161673845, + 3885678582, + 2464350113, + 4285239294, + 1640710643, + 42170838, + 2692693178, + 2943081825, + 2656421707, + 584224139, + 4276486169, + 1950338131, + 324817692, + 3346079822, + 690459060, + 679245968, + 1996679211, + 2967149736, + 766071454, + 1417014656, + 4099262287, + 1592833825, + 2330778580, + 2143195828, + 473761956, + 3134982278, + 1768296918, + 1945561404, + 3139216670, + 3386946096, + 3781908787, + 3993637428, + 2267412123, + 3543596396, + 3275513046, + 343385506, + 818740431, + 1236420821, + 4194217541, + 2340632596, + 3252608431, + 3880458796, + 933826995, + 93856070, + 352662772, + 1745782017, + 3859654403, + 2534561014, + 2542617947, + 3994687675, + 3084213245, + 3325797866, + 806264238, + 2787148863, + 1768489932, + 2393438980, + 4116519776, + 4222953479, + 1540051418, + 4194428883, + 1452915646, + 167773744, + 2082123163, + 2094811922, + 1887409807, + 1162655398, + 2825034497, + 1247808660, + 3158400767, + 3717520599, + 1879291103, + 2658015482, + 1518866144, + 2185728119, + 1487639246, + 3481767175, + 377909933, + 3734722969, + 3865880338, + 1735305725, + 3713504566, + 3132247484, + 2863292071, + 2180225700, + 3898417347, + 3045930494, + 2791861629, + 1045217145, + 674566226, + 888905636, + 651294005, + 3315988285, + 926625456, + 2908128517, + 177197793, + 1847612643, + 828559131, + 4239611910, + 4001973680, + 1847386231, + 1744489111, + 2922546132, + 909174462, + 44554394, + 188383800, + 974680046, + 4288576670, + 1064602131, + 2279863712, + 1218831272, + 623534157, + 219235974, + 63933746, + 3283800499, + 1234970039, + 2948584468, + 2415808667, + 3815162584, + 2839463331, + 2692935680, + 107001696, + 2680781409, + 2852086378, + 3509486974, + 2314756428, + 1647781531, + 625031887, + 101533673, + 2813360263, + 3362463056, + 3690168712, + 1543840484, + 3866614920, + 100977743, + 3224692571, + 3587716917, + 719158576, + 3213760217, + 2267688836, + 1441518779, + 3366693698, + 2548869751, + 531908796, + 2337564859, + 2824158778, + 3169848921, + 1227008373, + 2333581558, + 187965220, + 3366360069, + 2314970431, + 2576780722, + 2377332418, + 2814051621, + 2201444577, + 2002863843, + 1788827238, + 2277254101, + 612333999, + 1687580650, + 652292522, + 3495939668, + 115192919, + 850157594, + 2649115540, + 2678932449, + 3421560774, + 1476965394, + 3864108841, + 1782032582, + 3044795030, + 805504832, + 143825402, + 961777546, + 3635031474, + 1701285644, + 953286798, + 3233529297, + 1860747539, + 3756863448, + 4108876150, + 2208855372, + 4005207388, + 900400794, + 1915532082, + 1684465671, + 319113361, + 4040903373, + 3759509559, + 4203775049, + 1096839002, + 1348786453, + 2204513258, + 1005485791, + 1315093873, + 2278279237, + 1598385052, + 2127679663, + 1829010356, + 2131889929, + 2907075180, + 2890255513, + 3324859686, + 1855046205, + 118912031, + 948184906, + 3964956533, + 1478027161, + 2825110099, + 1389450030, + 1687228638, + 3289118469, + 2913305132, + 259944683, + 943408944, + 1655114943, + 315198871, + 769313256, + 2031831413, + 1936990884, + 2557307662, + 4049060851, + 1261705352, + 1690095579, + 3488156286, + 2325058543, + 4280618703, + 3787923262, + 4235475449, + 3422644095, + 1351439644, + 4010137115, + 1275314927, + 2756556316, + 1215878837, + 3564222603, + 2603036605, + 3389921249, + 2303801524, + 2539533026, + 1987127069, + 636962867, + 3451101807, + 3660370970, + 3933825336, + 811975671, + 3211258049, + 1758497297, + 631092897, + 1477942792, + 3780342588, + 1394468549, + 3884013640, + 2210783243, + 4284047688, + 2954793628, + 4057802457, + 3875411103, + 4173101169, + 2374868773, + 1138961071, + 4017496654, + 1748121193, + 324398967, + 3388413395, + 1421451971, + 2003520265, + 1938421608, + 502843030, + 4092269305, + 3124906436, + 1312677649, + 3963884786, + 3078964370, + 1415486200, + 1780461017, + 897543350, + 2531473933, + 3018614336, + 1082815198, + 4001984174, + 498150626, + 1620378597, + 1216275400, + 2346327537, + 1720984119, + 1603311953, + 3964902652, + 3490550532, + 3531834976, + 3789815299, + 2891278014, + 353012863, + 4210071255, + 3985612050, + 146549384, + 546083712, + 2665789869, + 4170752780, + 2789229305, + 2928540583, + 574353420, + 1213296416, + 3025553612, + 2897419785, + 3193639868, + 3807290657, + 2136142430, + 39898038, + 1043183000, + 96570653, + 313256292, + 2585059215, + 2949800110, + 529046663, + 2948064675, + 2703653258, + 14715708, + 3540100599, + 2652446921, + 3592494708, + 2325281413, + 3090026293, + 2942030507, + 3968648401, + 2503924302, + 2281103899, + 2660427136, + 1118473225, + 1509239795, + 2916996628, + 1498829399, + 2051980638, + 250189510, + 3665182738, + 2909572017, + 2294626724, + 2944239685, + 483810678, + 3703858386, + 2849742196, + 99440910, + 711375634, + 3240712659, + 865658149, + 3792964781, + 1140491837, + 1251010297, + 3972777473, + 149040667, + 3855208360, + 1713592937, + 3642530555, + 3295259754, + 136750651, + 1141650259, + 2553821287, + 2566573637, + 215217613, + 2521251384, + 2461194399, + 277826294, + 2998894813, + 3856313510, + 532725319, + 725275605, + 4121938584, + 2701056095, + 1739249781, + 4116099911, + 546954893, + 2671031054, + 3563388643, + 2077602340, + 354965386, + 3921478300, + 2200138043, + 2437362948, + 4233937299, + 561596964, + 2541518481, + 4282970928, + 932070805, + 2088114127, + 49855829, + 3540598765, + 715968672, + 1669139490, + 3450921952, + 2093995498, + 2528122568, + 356900943, + 3561549751, + 3860645626, + 4278347634, + 3783282303, + 2307265668, + 3473752346, + 1425883108, + 3219963916, + 1871354316, + 1006991143, + 2780202806, + 408451724, + 3518660655, + 2577965261, + 3776366633, + 2153658887, + 3064676915, + 1472411661, + 3381444379, + 3471573930, + 683224598, + 297910753, + 1948251965, + 1074723293, + 1042462107, + 2565100294, + 3959558256, + 3498782050, + 1245136335, + 1108074338, + 3567181330, + 1470821109, + 2517217388, + 3573560226, + 872355339, + 3641166732, + 4202604380, + 2863743216, + 1057862214, + 1168505870, + 2333146369, + 2470306042, + 3050274126, + 3706189024, + 1028326631, + 790821590, + 2353647980, + 3373651915, + 2717862373, + 3998954743, + 3724768038, + 2358681986, + 903774704, + 1086586964, + 2947052542, + 504148263, + 3005589490, + 130885957, + 2413604153, + 151980225, + 1646237670, + 2651453945, + 1702301299, + 3312733864, + 1419466054, + 2041837868, + 845829503, + 3184621255, + 236708439, + 1251305657, + 3440133121, + 2698248930, + 752241551, + 3906730939, + 3704664012, + 492234664, + 118829662, + 755123511, + 1226340698, + 360667305, + 3870699347, + 2670210156, + 3790151528, + 3398951072, + 3871562686, + 2885299933, + 1163048785, + 1581139430, + 2060136262, + 3845596685, + 721716356, + 2415917204, + 277894297, + 646770419, + 4241803829, + 2447147916, + 1830681938, + 1453659338, + 990668897, + 782328303, + 4050323257, + 893917030, + 2105619467, + 175326207, + 3554983482, + 3795672942, + 1732262058, + 4286295284, + 255546973, + 101929446, + 1541699869, + 3542673008, + 3031964519, + 143176475, + 906673315, + 1848847881, + 3701458370, + 1427035213, + 535234003, + 3249784714, + 525907046, + 1677057476, + 2778637625, + 689646222, + 3093619347, + 1818164008, + 3263377062, + 3879936856, + 3872931423, + 2002981419, + 2392535685, + 311442981, + 4061383417, + 2455913274, + 2779048399, + 2057044603, + 246641626, + 2044634518, + 2544006187, + 2072255130, + 1762484515, + 1138624055, + 2262591804, + 549048021, + 1952213209, + 698152287, + 1384636385, + 2500587841, + 1114201165, + 2982983785, + 95202990, + 3436368293, + 3575909220, + 1988847427, + 900944131, + 2255494346, + 3497488883, + 1619001995, + 325384740, + 3852263081, + 2344454947, + 3683328218, + 1827261537, + 593467785, + 2780478959, + 2216479377, + 3425383091, + 2641892674, + 3903857519, + 646603790, + 3776413739, + 3231496098, + 2942430316, + 65150637, + 881406526, + 2882663967, + 3535986503, + 3678450784, + 2875897712, + 1799978064, + 2411339001, + 3561758130, + 782528670, + 1730147867, + 2528914544, + 1031394620, + 2173121799, + 189974695, + 1998905845, + 280188656, + 777006715, + 1423232349, + 541680116, + 3128059308, + 3607239891, + 836602210, + 3476859645, + 3578125381, + 3285983594, + 3269548870, + 1279748213, + 2334574455, + 3583415971, + 3353380428, + 3242338734, + 2325055944, + 2213015684, + 1788639779, + 958443329, + 3288231454, + 3244677861, + 492970971, + 3256559017, + 2314347723, + 1219941045, + 1006715209, + 3227681168, + 219262229, + 1936802399, + 3218238221, + 627237476, + 1900767827, + 342345854, + 1705769980, + 909994728, + 619654469, + 2425216015, + 212600556, + 3241568266, + 1266085150, + 1162371303, + 4294387021, + 1956725691, + 618869821, + 2881089325, + 948530607, + 3125525758, + 2623958872, + 3568527782, + 1828490046, + 1980242546, + 575194297, + 938093373, + 1694864398, + 1287826449, + 3314079234, + 531223275, + 1052129727, + 2623869546, + 72624645, + 3328309790, + 3730915676, + 1279936442, + 2149352317, + 2003971525, + 3806533014, + 1986061407, + 2761213799, + 2370685389, + 1521139712, + 2415964751, + 3465699085, + 2432144290, + 3030156672, + 2410927979, + 3237540686, + 3947761779, + 3495355467, + 1285234418, + 1790600212, + 3476142224, + 3491190344, + 973333457, + 1518394715, + 1117018987, + 2468687001, + 1240195040, + 137882277, + 157102449, + 3716968954, + 2428714146, + 543934764, + 166077684, + 489052569, + 1279721156, + 2153200327, + 3461044828, + 63946900, + 1365096392, + 2552893479, + 794896991, + 2335377221, + 671099825, + 1145195172, + 687340020, + 1550491666, + 2712888120, + 3573805979, + 1447244373, + 1517794916, + 3389046815, + 859355421, + 1056295574, + 3890870733, + 3066687706, + 1093093633, + 1080163513, + 2437620821, + 2710775082, + 4157562319, + 1501189467, + 2130533328, + 548114610, + 2596641652, + 3541729844, + 2037170669, + 951924758, + 2767812320, + 4092501050, + 64679078, + 1501356276, + 1688581027, + 1283840233, + 2937652571, + 4266308157, + 936909650, + 2730859700, + 1413644018, + 2267196757, + 610630908, + 417635653, + 2676607000, + 261284082, + 3697882036, + 3345745731, + 343489458, + 3810345069, + 3646045458, + 620870954, + 3749083323, + 4078308334, + 2765664860, + 1399839279, + 3996169331, + 1834429430, + 3523079114, + 3295894704, + 2983009288, + 566179992, + 1053238212, + 1893428679, + 2890017255, + 3392869989, + 3105727089, + 550579624, + 1667665588, + 3233665689, + 3843433797, + 2103147383, + 2000835586, + 863932286, + 806295024, + 2223040395, + 4288347618, + 25114206, + 2154413579, + 3847716729, + 1067391025, + 4027778052, + 4056024079, + 1781823515, + 1010635730, + 1775748942, + 1567552448, + 236193276, + 1434184942, + 3062415128, + 3748555998, + 130495897, + 2939903645, + 1666752237, + 1066079401, + 1836449980, + 2195830749, + 3066331783, + 1897175879, + 2066200759, + 1973030862, + 294293913, + 98782574, + 4171791321, + 2208092313, + 2192004127, + 2531215340, + 1140349081, + 2776662426, + 1070173060, + 990721685, + 4183076842, + 2402194877, + 2760059174, + 658432629, + 3039901836, + 2830977567, + 1258192132, + 660194628, + 3722290277, + 1178933882, + 1459226687, + 3524102308, + 608197398, + 2178567665, + 3865121971, + 3803055188, + 3366269008, + 690378859, + 1164465180, + 3106017883, + 1047217157, + 3636325886, + 2378086560, + 1515916640, + 330457038, + 1094384941, + 2588260058, + 875067177, + 3482598787, + 496182764, + 286445040, + 2809317084, + 1777706171, + 4006769194, + 1079383541, + 2881585299, + 4178878364, + 878246596, + 1100855732, + 2110896399, + 2092027191, + 570896878, + 3913905127, + 49760796, + 2429561431, + 2268836631, + 3506046240, + 2859849814, + 893590893, + 3687412917, + 2406418879, + 2041532338, + 3316860343, + 2432632598, + 659382823, + 50227008, + 851367658, + 1108280326, + 3374139562, + 170587855, + 393366010, + 3046749017, + 1115479745, + 3925029814, + 978009027, + 2025902925, + 3918745565, + 2481300052, + 951837001, + 4044134593, + 4146137483, + 691481183, + 230022390, + 54751410, + 1895877866, + 261978262, + 2167645091, + 1570701164, + 3044599517, + 1065958287, + 3642959952, + 411777284, + 2225324033, + 2464820913, + 1315183114, + 1513631506, + 2353509916, + 1998383785, + 706743104, + 2348303970, + 1547200335, + 2968469298, + 4039179245, + 4191948814, + 1763233687, + 833029308, + 3841460003, + 2142617813, + 2521113856, + 159237655, + 544757793, + 1083580450, + 3964056914, + 1590767682, + 3978432327, + 3835200177, + 813428668, + 23505040, + 2758482008, + 3598792951, + 212206391, + 2530199324, + 3839157387, + 1048871517, + 742601867, + 4149697417, + 566913118, + 2102453533, + 4264989263, + 3861808018, + 1956969307, + 2389700986, + 1154473069, + 851631200, + 1538857364, + 1807411794, + 3042015886, + 3901545715, + 3589121135, + 1282964556, + 2857849662, + 2929889640, + 3020590289, + 3587195608, + 1326045962, + 1986820899, + 1134786750, + 385604982, + 4266813219, + 2751475804, + 4086822944, + 1877876527, + 223830081, + 4189366982, + 3916126198, + 3675859636, + 4094469726, + 423319180, + 285547675, + 2939210674, + 2961027358, + 2928063646, + 1304577715, + 707971210, + 3235182930, + 621361545, + 2156904189, + 3635704892, + 406005925, + 1053905739, + 1526470805, + 178754325, + 4022623727, + 4045068563, + 2973963440, + 2605716848, + 3617255047, + 4245368991, + 3381788483, + 4119953112, + 288636635, + 2919552050, + 2642572636, + 4171623315, + 2094329492, + 4155362501, + 3967558684, + 3848065971, + 2560015200, + 1817744012, + 3588670878, + 1777801347, + 1993928043, + 3456261955, ]; static final String privateKeyFCM = String.fromCharCodes(List.generate( @@ -8929,77 +8995,77 @@ final class _Env { ).map((int i) => _envieddataprivateKeyFCM[i] ^ _enviedkeyprivateKeyFCM[i])); static const List _enviedkeyseferAlexandriaServer = [ - 561626930, - 633083736, - 2361828362, - 1447543854, - 3920215751, - 3977052305, - 56439383, - 2924005955, - 2887064304, - 1234943430, - 194442153, - 3626141888, - 1509369656, - 1650057872, - 3519117786, - 3274533490, - 491826437, - 533770710, - 4141862644, - 4187012171, - 2430062877, - 2907455038, - 1742678927, - 2296049884, - 1760389566, - 1221398232, - 935680774, - 1351136606, - 718685809, - 2123102396, - 4254062591, - 2907141589, - 4271154045, - 1848462991, + 2654150368, + 652312410, + 3033059659, + 1610504043, + 3377493226, + 3230467198, + 539631457, + 3912676855, + 2173833701, + 4034158291, + 2214053461, + 3701371445, + 2684579137, + 515623541, + 2408717463, + 3669221601, + 997304084, + 1173473874, + 3132018834, + 1267973792, + 1326338115, + 2296599442, + 2509993205, + 3301306439, + 3897714319, + 2288591951, + 2972732752, + 938780309, + 2104384141, + 2703089493, + 2549088233, + 1686241929, + 4033207894, + 3325589798, ]; static const List _envieddataseferAlexandriaServer = [ - 561626970, - 633083692, - 2361828478, - 1447543902, - 3920215732, - 3977052331, - 56439416, - 2924005996, - 2887064195, - 1234943395, - 194442191, - 3626141861, - 1509369674, - 1650057969, - 3519117750, - 3274533399, - 491826557, - 533770679, - 4141862554, - 4187012143, - 2430062959, - 2907455063, - 1742679022, - 2296049906, - 1760389581, - 1221398193, - 935680882, - 1351136571, - 718685790, - 2123102415, - 4254062490, - 2907141555, - 4271153944, - 1848463101, + 2654150280, + 652312366, + 3033059647, + 1610503963, + 3377493145, + 3230467140, + 539631438, + 3912676824, + 2173833622, + 4034158262, + 2214053427, + 3701371472, + 2684579123, + 515623444, + 2408717563, + 3669221508, + 997304172, + 1173473843, + 3132018940, + 1267973828, + 1326338097, + 2296599547, + 2509993108, + 3301306473, + 3897714428, + 2288591910, + 2972732708, + 938780400, + 2104384162, + 2703089446, + 2549088140, + 1686242031, + 4033207859, + 3325589844, ]; static final String seferAlexandriaServer = String.fromCharCodes( @@ -9012,61 +9078,61 @@ final class _Env { _enviedkeyseferAlexandriaServer[i])); static const List _enviedkeyseferPaymentServer = [ - 3057656239, - 657535477, - 109621120, - 438746630, - 2825183251, - 1295398530, - 1159685965, - 2235676796, - 2867770059, - 4192319583, - 1581885764, - 1046887200, - 2012669934, - 1054936259, - 1432678649, - 2561003603, - 3003461548, - 3565878351, - 1242339361, - 2750710250, - 3431261302, - 110269137, - 3725624909, - 386615130, - 2112858611, - 2458073767, + 1776774567, + 2149067662, + 1809830410, + 2789725058, + 1775776365, + 2073422508, + 2202800920, + 1272175257, + 1581809136, + 3259550986, + 992951527, + 1020140755, + 2421472244, + 2812917427, + 339058327, + 202161431, + 1680544989, + 1316334847, + 433030682, + 3784352865, + 4264062086, + 1038507241, + 2355747859, + 1059753186, + 828934416, + 2301641593, ]; static const List _envieddataseferPaymentServer = [ - 3057656263, - 657535361, - 109621236, - 438746742, - 2825183328, - 1295398584, - 1159685986, - 2235676755, - 2867770040, - 4192319546, - 1581885730, - 1046887237, - 2012669852, - 1054936243, - 1432678542, - 2561003645, - 3003461599, - 3565878311, - 1242339406, - 2750710170, - 3431261273, - 110269090, - 3725624872, - 386615100, - 2112858518, - 2458073813, + 1776774607, + 2149067770, + 1809830526, + 2789725170, + 1775776286, + 2073422486, + 2202800951, + 1272175286, + 1581809027, + 3259551087, + 992951425, + 1020140726, + 2421472134, + 2812917443, + 339058400, + 202161465, + 1680544942, + 1316334743, + 433030773, + 3784352785, + 4264062121, + 1038507162, + 2355747958, + 1059753092, + 828934517, + 2301641483, ]; static final String seferPaymentServer = String.fromCharCodes( @@ -9078,95 +9144,95 @@ final class _Env { _envieddataseferPaymentServer[i] ^ _enviedkeyseferPaymentServer[i])); static const List _enviedkeyseferCairoServer = [ - 554285807, - 2520419867, - 109597109, - 2517074580, - 1748622146, - 1589310422, - 1962910500, - 1388616353, - 1591217629, - 901955760, - 3647228425, - 3325878060, - 3617317456, - 4039807145, - 3547658771, - 4241136334, - 382653640, - 2515548320, - 2900913398, - 762008712, - 483463271, - 2574305905, - 1510034298, - 2817818771, - 3080340389, - 634186800, - 1446616883, - 422397129, - 3810006153, - 3945475093, - 1466889275, - 786246728, - 1668712427, - 127266347, - 3101393660, - 4048505087, - 365218980, - 1149306274, - 1502064665, - 4151910079, - 2284298730, - 127151816, - 876052815, + 3037014515, + 3401018697, + 2521685488, + 2057073068, + 1319223786, + 1841552061, + 1493063679, + 3267255035, + 1082012524, + 2186402324, + 3254694991, + 1804139814, + 2490908, + 2578890551, + 1716850823, + 1298390919, + 3584414356, + 944610289, + 3728858927, + 2399884436, + 4021688822, + 2674818517, + 989142193, + 4293538974, + 2444833988, + 2342983077, + 1039840713, + 67394236, + 3106635908, + 1577319871, + 915423197, + 3673301939, + 2530094775, + 742686136, + 2085734280, + 1195359313, + 3551368912, + 2833392755, + 2355936383, + 1524261146, + 2711713960, + 2786895804, + 3763350038, ]; static const List _envieddataseferCairoServer = [ - 554285703, - 2520419951, - 109597121, - 2517074660, - 1748622129, - 1589310444, - 1962910475, - 1388616334, - 1591217582, - 901955797, - 3647228539, - 3325878106, - 3617317429, - 4039807195, - 3547658813, - 4241136317, - 382653613, - 2515548358, - 2900913299, - 762008826, - 483463241, - 2574305821, - 1510034195, - 2817818853, - 3080340416, - 634186783, - 1446616896, - 422397100, - 3810006255, - 3945475184, - 1466889289, - 786246758, - 1668712328, - 127266375, - 3101393557, - 4048504988, - 365219023, - 1149306253, - 1502064746, - 4151910106, - 2284298636, - 127151789, - 876052797, + 3037014427, + 3401018685, + 2521685380, + 2057073116, + 1319223705, + 1841552007, + 1493063632, + 3267254996, + 1082012447, + 2186402417, + 3254694973, + 1804139856, + 2491001, + 2578890565, + 1716850857, + 1298391028, + 3584414449, + 944610199, + 3728858954, + 2399884518, + 4021688792, + 2674818489, + 989142232, + 4293539048, + 2444833953, + 2342983050, + 1039840698, + 67394265, + 3106636002, + 1577319898, + 915423151, + 3673301917, + 2530094804, + 742686164, + 2085734369, + 1195359282, + 3551368891, + 2833392732, + 2355936268, + 1524261247, + 2711713998, + 2786895833, + 3763350116, ]; static final String seferCairoServer = String.fromCharCodes( @@ -9178,69 +9244,69 @@ final class _Env { _envieddataseferCairoServer[i] ^ _enviedkeyseferCairoServer[i])); static const List _enviedkeyseferGizaServer = [ - 3118946899, - 1712833733, - 4188235609, - 599113098, - 3109348574, - 792973267, - 1258395345, - 587037447, - 4003887963, - 2803488395, - 2456328506, - 717990898, - 396142477, - 1454720050, - 4048815160, - 3557424875, - 2374665328, - 1079536468, - 3505169905, - 3184301160, - 1741109435, - 2836056620, - 3309697657, - 3934656961, - 3247607243, - 1499599720, - 3066487767, - 2683167529, - 1777938433, - 3705455265, + 563807450, + 2957092207, + 1807568779, + 720103747, + 2111426609, + 3058635739, + 2743279385, + 1105116588, + 4171114341, + 185600609, + 2740539057, + 653512961, + 244459511, + 736132106, + 3516614822, + 172380685, + 3554504015, + 3311002153, + 2032618354, + 356718593, + 678332684, + 3534826055, + 3016886933, + 4005242305, + 1857977275, + 1277270964, + 3630546863, + 1025138140, + 4198144210, + 2935184133, ]; static const List _envieddataseferGizaServer = [ - 3118946875, - 1712833713, - 4188235565, - 599113210, - 3109348525, - 792973289, - 1258395390, - 587037480, - 4003887932, - 2803488482, - 2456328512, - 717990803, - 396142590, - 1454720087, - 4048815198, - 3557424782, - 2374665218, - 1079536506, - 3505169822, - 3184301062, - 1741109463, - 2836056645, - 3309697559, - 3934656932, - 3247607268, - 1499599643, - 3066487730, - 2683167567, - 1777938532, - 3705455315, + 563807410, + 2957092123, + 1807568895, + 720103731, + 2111426626, + 3058635745, + 2743279414, + 1105116547, + 4171114242, + 185600520, + 2740539083, + 653513056, + 244459396, + 736132207, + 3516614848, + 172380776, + 3554503997, + 3311002119, + 2032618269, + 356718703, + 678332768, + 3534826030, + 3016887035, + 4005242276, + 1857977236, + 1277270983, + 3630546890, + 1025138106, + 4198144183, + 2935184247, ]; static final String seferGizaServer = String.fromCharCodes(List.generate( @@ -9251,125 +9317,125 @@ final class _Env { (int i) => _envieddataseferGizaServer[i] ^ _enviedkeyseferGizaServer[i])); static const List _enviedkeychatGPTkeySeferNew = [ - 524609778, - 1506255114, - 3951712514, - 1694351305, - 1839008247, - 3483857671, - 245629162, - 1769242533, - 3720116699, - 1862455741, - 3294813994, - 1911310292, - 3068955121, - 1450475183, - 358062003, - 1252996373, - 2313134052, - 3185760878, - 4235680692, - 2538405834, - 1389689947, - 2770096344, - 541499838, - 1492773931, - 1622963918, - 337157103, - 2266628558, - 2643161654, - 2578526648, - 776056941, - 913803905, - 395949184, - 1740835306, - 2320829415, - 1921378933, - 938497366, - 2545855153, - 1966896741, - 2309836703, - 4250329085, - 2394004957, - 1406782031, - 982524590, - 1405107857, - 2597439697, - 1423242745, - 861048046, - 2350869074, - 313537846, - 3642066576, - 3487739670, - 1404558371, - 3688027685, - 3676472816, - 70939572, - 2915157867, - 3191591920, - 803835132, + 2942027772, + 1467737596, + 24904215, + 4060452451, + 3926690586, + 1925768892, + 1329086755, + 1672615337, + 711689142, + 1019802605, + 723553255, + 226192337, + 3947509260, + 3600215425, + 3895628094, + 1317840637, + 2785260870, + 3242362388, + 3541650300, + 4065825499, + 1144481481, + 3293810059, + 4160722696, + 3109374342, + 326065697, + 2194188025, + 3999877283, + 2345374912, + 2221483605, + 3844049753, + 2702603544, + 1846890885, + 1695611418, + 2255738782, + 726863915, + 3763551667, + 192253223, + 3756181334, + 2765669049, + 719943936, + 4033539025, + 1931930950, + 2215699355, + 3406115282, + 3217359826, + 3573335111, + 3670649820, + 2781870398, + 565904096, + 3619395967, + 2287478331, + 3882763918, + 1372486294, + 719195308, + 3606632676, + 3674593970, + 4020513241, + 3217251709, ]; static const List _envieddatachatGPTkeySeferNew = [ - 524609672, - 1506255213, - 3951712559, - 1694351251, - 1839008195, - 3483857768, - 245629099, - 1769242607, - 3720116664, - 1862455804, - 3294814072, - 1911310235, - 3068955030, - 1450475233, - 358062059, - 1252996479, - 2313133955, - 3185760796, - 4235680753, - 2538405763, - 1389689870, - 2770096352, - 541499864, - 1492773984, - 1622963853, - 337157078, - 2266628502, - 2643161668, - 2578526656, - 776056842, - 913803988, - 395949253, - 1740835294, - 2320829366, - 1921378817, - 938497316, - 2545855171, - 1966896649, - 2309836782, - 4250329036, - 2394004900, - 1406781990, - 982524635, - 1405107945, - 2597439713, - 1423242643, - 861047970, - 2350869089, - 313537874, - 3642066649, - 3487739714, - 1404558448, - 3688027773, - 3676472706, - 70939628, - 2915157767, - 3191591858, - 803835024, + 2942027654, + 1467737499, + 24904250, + 4060452409, + 3926690606, + 1925768915, + 1329086818, + 1672615395, + 711689173, + 1019802540, + 723553205, + 226192286, + 3947509355, + 3600215503, + 3895628134, + 1317840535, + 2785260833, + 3242362470, + 3541650233, + 4065825426, + 1144481436, + 3293810099, + 4160722798, + 3109374413, + 326065762, + 2194187968, + 3999877371, + 2345374898, + 2221483565, + 3844049726, + 2702603597, + 1846890944, + 1695611438, + 2255738831, + 726863967, + 3763551681, + 192253269, + 3756181306, + 2765669064, + 719943985, + 4033538984, + 1931930927, + 2215699438, + 3406115242, + 3217359842, + 3573335085, + 3670649744, + 2781870349, + 565904004, + 3619395894, + 2287478383, + 3882763997, + 1372486350, + 719195358, + 3606632636, + 3674594014, + 4020513179, + 3217251601, ]; static final String chatGPTkeySeferNew = String.fromCharCodes( @@ -9381,103 +9447,103 @@ final class _Env { _envieddatachatGPTkeySeferNew[i] ^ _enviedkeychatGPTkeySeferNew[i])); static const List _enviedkeycohere = [ - 3711539293, - 4179110757, - 3130863424, - 2960119040, - 2122625981, - 3820047552, - 652029293, - 4205876489, - 1018002557, - 3268656047, - 4054153249, - 3736768279, - 1660469661, - 518561934, - 3645184133, - 2404489058, - 175727548, - 738686967, - 525251142, - 2845503261, - 416254488, - 1941563430, - 2660301817, - 3655308782, - 3258399601, - 1297901408, - 3704861065, - 2420328274, - 4212767748, - 2471409060, - 510684855, - 3897265290, - 1890967453, - 3949010443, - 1810318671, - 1053079416, - 3414768212, - 3441931396, - 2546433339, - 1616935716, - 911576240, - 1876146680, - 4206294986, - 82871504, - 636793252, - 1709251168, - 3653675524, + 2014105176, + 1971179719, + 3476881594, + 3441576985, + 2048220273, + 1570562316, + 3748027562, + 3424948666, + 815449160, + 2261320933, + 450774753, + 3588038017, + 2370228601, + 1060029870, + 2829514980, + 3157226137, + 4201379634, + 2525313817, + 278386330, + 2038112881, + 170404028, + 2061802370, + 2409270447, + 1590516832, + 4260931604, + 318189294, + 2738755256, + 3489213281, + 195896715, + 1163781687, + 2527380875, + 2047412146, + 2729129036, + 1190196101, + 2356328596, + 854562155, + 1641396000, + 621333714, + 572079763, + 2826304618, + 2470698874, + 2754563601, + 1806221711, + 3176547718, + 2276879310, + 2626390559, + 1160402306, ]; static const List _envieddatacohere = [ - 3711539228, - 4179110672, - 3130863404, - 2960119159, - 2122626009, - 3820047608, - 652029204, - 4205876540, - 1018002478, - 3268656127, - 4054153334, - 3736768376, - 1660469742, - 518561982, - 3645184237, - 2404489000, - 175727572, - 738686875, - 525251073, - 2845503277, - 416254572, - 1941563465, - 2660301740, - 3655308680, - 3258399561, - 1297901319, - 3704861126, - 2420328250, - 4212767825, - 2471409137, - 510684869, - 3897265402, - 1890967547, - 3949010494, - 1810318622, - 1053079370, - 3414768128, - 3441931476, - 2546433366, - 1616935794, - 911576311, - 1876146592, - 4206294968, - 82871432, - 636793288, - 1709251106, - 3653675624, + 2014105113, + 1971179698, + 3476881622, + 3441577070, + 2048220181, + 1570562356, + 3748027603, + 3424948623, + 815449115, + 2261320885, + 450774710, + 3588038126, + 2370228490, + 1060029854, + 2829514892, + 3157226195, + 4201379674, + 2525313909, + 278386397, + 2038112833, + 170404040, + 2061802477, + 2409270522, + 1590516742, + 4260931628, + 318189193, + 2738755319, + 3489213193, + 195896798, + 1163781730, + 2527380985, + 2047412162, + 2729129002, + 1190196144, + 2356328645, + 854562137, + 1641396084, + 621333634, + 572079870, + 2826304572, + 2470698813, + 2754563657, + 1806221821, + 3176547806, + 2276879266, + 2626390621, + 1160402414, ]; static final String cohere = String.fromCharCodes(List.generate( @@ -9487,239 +9553,239 @@ final class _Env { ).map((int i) => _envieddatacohere[i] ^ _enviedkeycohere[i])); static const List _enviedkeyclaudeAiAPI = [ - 4214176629, - 1124638299, - 2619089107, - 1163611692, - 992094328, - 1653463158, - 404137156, - 2307152983, - 4144951281, - 299318335, - 934124021, - 1540305935, - 928421081, - 138086963, - 3167661776, - 1372811540, - 2261648682, - 2885259996, - 1799144723, - 3418493097, - 2389110802, - 2920233976, - 461024631, - 1752528300, - 3565458959, - 4095183340, - 2011007996, - 2726474493, - 305117885, - 762213518, - 2758430717, - 253479114, - 2603590907, - 1779760738, - 2906738701, - 4158441589, - 1229764385, - 798641777, - 1539096011, - 2989341773, - 3454218987, - 1822602079, - 932125700, - 947203612, - 3655438005, - 2447484736, - 2956534335, - 1076145364, - 2247366951, - 423924790, - 1480298822, - 1410357868, - 2744154990, - 1247629533, - 1775582016, - 454725042, - 1801490831, - 3579628558, - 1631065418, - 2465428321, - 3842850690, - 3133403313, - 3724182006, - 4080090221, - 1410035498, - 2171194230, - 106772809, - 2347956017, - 2657386897, - 3121396559, - 4279527128, - 2270046571, - 1730331616, - 4261065335, - 3186987742, - 3773357116, - 3849071379, - 3891297185, - 831998274, - 2341938365, - 3284125826, - 3277664265, - 4041004498, - 2327667910, - 2958647319, - 1020377745, - 1862857570, - 2737445225, - 2191919935, - 3580771524, - 2375606747, - 3097462976, - 3930099097, - 864947971, - 1073786313, - 3471588950, - 1391122894, - 1703809459, - 250205428, - 1750130551, - 4293188922, - 2386528221, - 3933658081, - 3186790479, - 2897706107, - 3287658006, - 1255252420, - 3569289577, - 672671881, - 3536109751, - 995759990, - 3515423137, - 1044370531, - 3466374959, - 4006211974, + 1976242300, + 2350860989, + 1948314595, + 901315685, + 2339033292, + 2360048022, + 3691158975, + 3674412142, + 2764946898, + 2183733768, + 4205748210, + 4011660736, + 312266345, + 2179067019, + 3591834986, + 1473488632, + 4141202701, + 2951700058, + 2025090710, + 2398865999, + 664501351, + 4190210615, + 1369532414, + 2942519646, + 1866759815, + 3679207556, + 637856172, + 4103589815, + 1362170158, + 1079976629, + 2013728745, + 3270521476, + 1291022480, + 355507478, + 2327588614, + 541057350, + 327271091, + 3259735263, + 3784713752, + 1723145924, + 1977372990, + 3309938444, + 83433960, + 1725118304, + 3003399073, + 3039187811, + 2226055004, + 2496658507, + 3672859933, + 1730906420, + 1948015722, + 1167701313, + 3813529681, + 1526372744, + 1237202131, + 3345691353, + 713251286, + 1794304080, + 3003020039, + 2578381984, + 720138540, + 3266418362, + 1345249225, + 1376117345, + 3887941391, + 1055208597, + 3284952823, + 4240595295, + 645506069, + 948439128, + 2801264061, + 2416846720, + 1043860477, + 3671807396, + 2926456821, + 1816175864, + 420960802, + 2273641446, + 1902996984, + 1109150420, + 797899585, + 3780404361, + 1940999941, + 1142672174, + 1448475072, + 2118083302, + 410131060, + 3512277805, + 656473126, + 2858145578, + 500386356, + 794216106, + 81742423, + 654115046, + 3841530927, + 1637487100, + 1775591497, + 718264352, + 1366125446, + 2139467799, + 1308528586, + 3577255479, + 3819768787, + 3973168182, + 469581459, + 2694673816, + 3893292905, + 3241284847, + 1060207043, + 2679424359, + 1620011386, + 1679076475, + 3092502735, + 476085106, + 3600159506, ]; static const List _envieddataclaudeAiAPI = [ - 4214176527, - 1124638268, - 2619089150, - 1163611741, - 992094234, - 1653463061, - 404137193, - 2307152934, - 4144951175, - 299318352, - 934123974, - 1540305974, - 928421045, - 138086942, - 3167661736, - 1372811587, - 2261648741, - 2885259940, - 1799144794, - 3418493166, - 2389110885, - 2920233903, - 461024547, - 1752528355, - 3565459061, - 4095183279, - 2011007930, - 2726474431, - 305117907, - 762213575, - 2758430628, - 253479065, - 2603590832, - 1779760681, - 2906738789, - 4158441491, - 1229764440, - 798641675, - 1539095956, - 2989341702, - 3454218941, - 1822602014, - 932125810, - 947203694, - 3655438077, - 2447484781, - 2956534281, - 1076145291, - 2247366931, - 423924844, - 1480298755, - 1410357798, - 2744154914, - 1247629547, - 1775582072, - 454725109, - 1801490896, - 3579628639, - 1631065352, - 2465428265, - 3842850736, - 3133403271, - 3724181913, - 4080090120, - 1410035582, - 2171194169, - 106772740, - 2347956092, - 2657387006, - 3121396510, - 4279527085, - 2270046476, - 1730331609, - 4261065276, - 3186987691, - 3773357171, - 3849071481, - 3891297227, - 831998217, - 2341938414, - 3284125906, - 3277664342, - 4041004435, - 2327667954, - 2958647364, - 1020377762, - 1862857521, - 2737445180, - 2191919995, - 3580771496, - 2375606713, - 3097462968, - 3930099147, - 864948026, - 1073786285, - 3471588899, - 1391122840, - 1703809481, - 250205339, - 1750130470, - 4293188887, - 2386528144, - 3933657994, - 3186790423, - 2897706020, - 3287658051, - 1255252373, - 3569289528, - 672671960, - 3536109807, - 995759876, - 3515423225, - 1044370447, - 3466375021, - 4006212074, + 1976242182, + 2350861018, + 1948314574, + 901315604, + 2339033262, + 2360048117, + 3691158930, + 3674412063, + 2764946852, + 2183733863, + 4205748161, + 4011660793, + 312266245, + 2179067046, + 3591834898, + 1473488559, + 4141202754, + 2951700002, + 2025090783, + 2398865928, + 664501264, + 4190210656, + 1369532330, + 2942519569, + 1866759933, + 3679207623, + 637856234, + 4103589877, + 1362170176, + 1079976700, + 2013728688, + 3270521559, + 1291022555, + 355507549, + 2327588718, + 541057312, + 327271114, + 3259735205, + 3784713799, + 1723145871, + 1977373032, + 3309938509, + 83433886, + 1725118226, + 3003399145, + 3039187790, + 2226055018, + 2496658452, + 3672859945, + 1730906478, + 1948015663, + 1167701259, + 3813529629, + 1526372798, + 1237202155, + 3345691294, + 713251209, + 1794304001, + 3003020101, + 2578382056, + 720138526, + 3266418316, + 1345249190, + 1376117252, + 3887941467, + 1055208666, + 3284952762, + 4240595218, + 645506170, + 948439049, + 2801264072, + 2416846823, + 1043860420, + 3671807471, + 2926456704, + 1816175799, + 420960840, + 2273641356, + 1902996915, + 1109150343, + 797899537, + 3780404438, + 1941000004, + 1142672154, + 1448475027, + 2118083285, + 410130983, + 3512277880, + 656473186, + 2858145606, + 500386390, + 794216146, + 81742341, + 654115039, + 3841530955, + 1637486985, + 1775591455, + 718264410, + 1366125545, + 2139467846, + 1308528615, + 3577255546, + 3819768760, + 3973168238, + 469581516, + 2694673869, + 3893292856, + 3241284798, + 1060206994, + 2679424319, + 1620011272, + 1679076387, + 3092502691, + 476085040, + 3600159614, ]; static final String claudeAiAPI = String.fromCharCodes(List.generate( @@ -9729,183 +9795,183 @@ final class _Env { ).map((int i) => _envieddataclaudeAiAPI[i] ^ _enviedkeyclaudeAiAPI[i])); static const List _enviedkeypayPalClientId = [ - 3964014192, - 328188734, - 3257917027, - 2981524744, - 762854651, - 1278558590, - 1661686812, - 895551114, - 3658160604, - 667899397, - 2615598432, - 462222434, - 727405441, - 1476120821, - 2647811886, - 423093032, - 2993338011, - 3614899073, - 2340119251, - 3382347015, - 427437223, - 3792647783, - 3921607588, - 3512761770, - 756769182, - 1603520082, - 3515462204, - 232329925, - 2410859774, - 2460361885, - 820845086, - 4183500369, - 1931262151, - 1689992696, - 120545701, - 3879827173, - 1602543592, - 2969825002, - 61485072, - 3202981946, - 1897507982, - 2652734676, - 540379785, - 149357530, - 4027904299, - 2118640306, - 4265962279, - 1539190296, - 3268313462, - 1830550448, - 1442658137, - 1019852816, - 1010645669, - 1870250713, - 2044570364, - 303096386, - 128904340, - 3176115966, - 1276339843, - 3734426547, - 309957214, - 2899021254, - 4937236, - 2273386592, - 4103933378, - 4095644960, - 1299370727, - 3423053014, - 2037087516, - 981965453, - 3817839937, - 3513283066, - 3550082144, - 1079634613, - 167744721, - 1383127324, - 398219827, - 3256593277, - 3441359548, - 553036197, - 1871961202, - 3081272338, - 2000847044, - 3135285297, - 536392156, - 1633610110, - 1169847617, + 2476786781, + 4014693165, + 3016597110, + 3521329147, + 917866109, + 998982029, + 2820406004, + 4154706307, + 2151387119, + 698043501, + 3670396520, + 3642289396, + 2778097778, + 119585277, + 123745559, + 1190472330, + 3762317744, + 1488801400, + 3137260930, + 1542744309, + 1005665600, + 1956779357, + 2183688589, + 3194451229, + 3263325754, + 2510490090, + 3370290877, + 3415607274, + 186881535, + 40849698, + 1026476553, + 3889126068, + 1041768698, + 1247903786, + 1017853683, + 3435707830, + 2500060887, + 2445195193, + 4092570895, + 3751351038, + 104730130, + 261292034, + 1515131265, + 3995354676, + 2795885149, + 3203165557, + 3591935360, + 993015290, + 2022651398, + 1347855195, + 935063536, + 2812247529, + 2993499764, + 200161191, + 2516170372, + 1750346702, + 162833907, + 2892925394, + 1115128014, + 1758309517, + 3028295932, + 296344024, + 1211151468, + 1899114679, + 1519592972, + 330264452, + 1746180507, + 3165975966, + 2097529050, + 4033089560, + 1696835036, + 1224468976, + 472892137, + 255141035, + 41688744, + 1876886146, + 710716550, + 1395003612, + 3285813446, + 28950399, + 3402765696, + 1480958771, + 3397946180, + 3319594768, + 520101544, + 3085615752, + 722474734, ]; static const List _envieddatapayPalClientId = [ - 3964014113, - 328188799, - 3257916975, - 2981524849, - 762854550, - 1278558482, - 1661686906, - 895551172, - 3658160533, - 667899440, - 2615598388, - 462222360, - 727405557, - 1476120769, - 2647811933, - 423092997, - 2993338082, - 3614899186, - 2340119228, - 3382347133, - 427437201, - 3792647697, - 3921607648, - 3512761758, - 756769217, - 1603520060, - 3515462221, - 232329885, - 2410859726, - 2460361934, - 820845131, - 4183500325, - 1931262124, - 1689992635, - 120545786, - 3879827092, - 1602543537, - 2969824956, - 61485117, - 3202981999, - 1897508073, - 2652734655, - 540379836, - 149357501, - 4027904330, - 2118640383, - 4265962360, - 1539190304, - 3268313388, - 1830550429, - 1442658098, - 1019852919, - 1010645649, - 1870250645, - 2044570313, - 303096433, - 128904447, - 3176115910, - 1276339926, - 3734426566, - 309957158, - 2899021209, - 4937248, - 2273386506, - 4103933319, - 4095645047, - 1299370687, - 3423052946, - 2037087607, - 981965507, - 3817839921, - 3513282978, - 3550082087, - 1079634662, - 167744646, - 1383127372, - 398219843, - 3256593204, - 3441359558, - 553036257, - 1871961140, - 3081272394, - 2000847030, - 3135285353, - 536392112, - 1633610044, - 1169847597, + 2476786700, + 4014693228, + 3016597050, + 3521329026, + 917866000, + 998982113, + 2820405906, + 4154706381, + 2151387046, + 698043480, + 3670396476, + 3642289294, + 2778097670, + 119585225, + 123745636, + 1190472359, + 3762317769, + 1488801291, + 3137261037, + 1542744207, + 1005665654, + 1956779307, + 2183688649, + 3194451241, + 3263325797, + 2510489988, + 3370290892, + 3415607218, + 186881487, + 40849777, + 1026476636, + 3889126080, + 1041768593, + 1247903849, + 1017853612, + 3435707847, + 2500060814, + 2445195247, + 4092570914, + 3751350955, + 104730229, + 261292137, + 1515131316, + 3995354707, + 2795885116, + 3203165496, + 3591935455, + 993015234, + 2022651484, + 1347855222, + 935063451, + 2812247438, + 2993499712, + 200161259, + 2516170417, + 1750346749, + 162833816, + 2892925418, + 1115127963, + 1758309624, + 3028295812, + 296343943, + 1211151448, + 1899114717, + 1519593033, + 330264531, + 1746180547, + 3165976026, + 2097529009, + 4033089622, + 1696834988, + 1224468904, + 472892078, + 255141112, + 41688831, + 1876886226, + 710716662, + 1395003541, + 3285813436, + 28950331, + 3402765766, + 1480958827, + 3397946166, + 3319594824, + 520101572, + 3085615818, + 722474626, ]; static final String payPalClientId = String.fromCharCodes(List.generate( @@ -9915,181 +9981,181 @@ final class _Env { ).map((int i) => _envieddatapayPalClientId[i] ^ _enviedkeypayPalClientId[i])); static const List _enviedkeypayPalSecret = [ - 715208699, - 1261465271, - 996598473, - 2478052279, - 310595984, - 2720144039, - 1222666862, - 1737960009, - 1327584488, - 2592973739, - 2996394985, - 1421742627, - 1995798153, - 2825846452, - 2156655438, - 2273550156, - 269635613, - 3923388057, - 3343844740, - 1995132694, - 398583486, - 3882255302, - 2943192425, - 3774776326, - 1373436436, - 3710933937, - 4144917625, - 3822097863, - 2166662208, - 2911530014, - 2689032097, - 708369246, - 1107873132, - 2229621984, - 2562011064, - 4230198198, - 3772901992, - 40779790, - 1010882163, - 2689693377, - 1090903845, - 2724700338, - 2599493679, - 3026550268, - 2362691949, - 2830309503, - 1598854625, - 2777978578, - 4229328334, - 3764251393, - 2312746858, - 1843437368, - 1030656526, - 188717711, - 1484094219, - 3725653090, - 2694512916, - 651913169, - 6389417, - 2939466111, - 1605509358, - 481546583, - 3874331467, - 1129734256, - 497233076, - 1949853791, - 3370723743, - 2975592290, - 1413242222, - 556588420, - 1975577321, - 310810944, - 217365406, - 4261566681, - 3063855803, - 3984859365, - 441697722, - 4061772989, - 2250337636, - 2718952207, - 3214026095, - 2160181562, - 993668501, - 3221559055, - 2224265074, - 2719932205, + 3679868868, + 4230330265, + 3731340233, + 3596721338, + 2442502922, + 4232120925, + 2060828479, + 2808619715, + 2177100380, + 450425303, + 3170153494, + 2803706414, + 1798490761, + 1312454280, + 4113883695, + 1067605777, + 564224026, + 2801860216, + 857771083, + 2790393231, + 2171610767, + 4238876910, + 1155706091, + 2650496878, + 3325833725, + 3239465520, + 1738337104, + 2670980668, + 825388214, + 3388222342, + 1670678356, + 2611839979, + 1795020979, + 2378247172, + 2401357470, + 98620229, + 4160519300, + 3569011304, + 3241721136, + 2426239793, + 575189599, + 1521175128, + 3727620202, + 3714504822, + 1798413547, + 4020419410, + 951369407, + 4055425019, + 2294318042, + 1226646307, + 875691666, + 2265405758, + 329573838, + 3106858063, + 3643758242, + 1916070058, + 3242595505, + 1045180999, + 1787644947, + 534134737, + 802648100, + 3069762536, + 283443821, + 4056372299, + 1078338267, + 1334682567, + 621454632, + 2274587818, + 1545122753, + 2002995202, + 1002065343, + 394535479, + 2159446929, + 1448170518, + 2416868506, + 2088985569, + 2163377888, + 291200360, + 1564012364, + 1533087127, + 3803261918, + 1469347809, + 309529701, + 2900761794, + 3899263893, + 3129339814, ]; static const List _envieddatapayPalSecret = [ - 715208625, - 1261465333, - 996598408, - 2478052342, - 310596070, - 2720144086, - 1222666788, - 1737959960, - 1327584431, - 2592973822, - 2996394906, - 1421742696, - 1995798221, - 2825846404, - 2156655380, - 2273550118, - 269635701, - 3923388077, - 3343844815, - 1995132796, - 398583515, - 3882255269, - 2943192339, - 3774776446, - 1373436530, - 3710934003, - 4144917567, - 3822097855, - 2166662253, - 2911530029, - 2689032089, - 708369165, - 1107873032, - 2229621900, - 2562011098, - 4230198271, - 3772901947, - 40779835, - 1010882117, - 2689693335, - 1090903927, - 2724700415, - 2599493655, - 3026550194, - 2362691881, - 2830309401, - 1598854532, - 2777978596, - 4229328291, - 3764251499, - 2312746791, - 1843437405, - 1030656596, - 188717765, - 1484094307, - 3725653036, - 2694512984, - 651913115, - 6389452, - 2939466004, - 1605509339, - 481546511, - 3874331436, - 1129734177, - 497233143, - 1949853742, - 3370723796, - 2975592225, - 1413242150, - 556588528, - 1975577275, - 310810918, - 217365416, - 4261566612, - 3063855825, - 3984859319, - 441697731, - 4061772944, - 2250337538, - 2718952247, - 3214026039, - 2160181576, - 993668557, - 3221559139, - 2224265008, - 2719932225, + 3679868814, + 4230330331, + 3731340168, + 3596721403, + 2442503036, + 4232120876, + 2060828533, + 2808619666, + 2177100315, + 450425218, + 3170153573, + 2803706469, + 1798490829, + 1312454328, + 4113883765, + 1067605883, + 564224114, + 2801860172, + 857771008, + 2790393317, + 2171610858, + 4238876813, + 1155706001, + 2650496790, + 3325833627, + 3239465586, + 1738337046, + 2670980676, + 825388187, + 3388222389, + 1670678380, + 2611839928, + 1795021015, + 2378247272, + 2401357564, + 98620172, + 4160519383, + 3569011293, + 3241721094, + 2426239847, + 575189517, + 1521175061, + 3727620178, + 3714504760, + 1798413487, + 4020419380, + 951369434, + 4055424973, + 2294318007, + 1226646345, + 875691743, + 2265405787, + 329573780, + 3106857989, + 3643758282, + 1916070116, + 3242595581, + 1045180941, + 1787645046, + 534134714, + 802648081, + 3069762480, + 283443722, + 4056372250, + 1078338200, + 1334682550, + 621454691, + 2274587881, + 1545122697, + 2002995318, + 1002065389, + 394535505, + 2159446951, + 1448170587, + 2416868592, + 2088985523, + 2163377817, + 291200325, + 1564012330, + 1533087151, + 3803261830, + 1469347731, + 309529661, + 2900761774, + 3899263959, + 3129339850, ]; static final String payPalSecret = String.fromCharCodes(List.generate( @@ -10099,101 +10165,101 @@ final class _Env { ).map((int i) => _envieddatapayPalSecret[i] ^ _enviedkeypayPalSecret[i])); static const List _enviedkeygeminiApi = [ - 897972057, - 3451866454, - 498583348, - 4232329306, - 746850959, - 2080038489, - 2981238258, - 2239809128, - 3452607695, - 4110806216, - 681493908, - 3964436933, - 525233958, - 3061353075, - 1246732706, - 3959080873, - 1758700133, - 3044791945, - 2430431056, - 3044887698, - 1033900895, - 331508253, - 2471939397, - 3918243840, - 2529846383, - 3844772569, - 1036254075, - 1872953211, - 3670441247, - 3249352087, - 879919608, - 3751924622, - 4136608280, - 1707172270, - 2398871554, - 1688096575, - 3758666320, - 4013790547, - 2652210672, - 3933941563, - 3009434839, - 1160634384, - 2822833044, - 1691539047, - 865047485, - 348233834, + 946723327, + 309686077, + 1019769419, + 810956790, + 3898244439, + 3081730684, + 3320601090, + 1741158444, + 2095666836, + 4253754882, + 1473996156, + 3730223337, + 744153826, + 2706606134, + 2802882217, + 974714029, + 2670398152, + 3488256992, + 2185769990, + 1247165256, + 963059836, + 2257048206, + 3849835851, + 921884482, + 3381723660, + 2953464770, + 3237496349, + 367321660, + 3978447150, + 2622825839, + 4269044634, + 551421524, + 2061487504, + 3556026697, + 3239683487, + 2637149925, + 1933281223, + 206017631, + 2024544384, + 2556741302, + 1038103247, + 3782334349, + 83678693, + 3568395937, + 2902583269, + 1875942636, ]; static const List _envieddatageminiApi = [ - 897971976, - 3451866393, - 498583385, - 4232329259, - 746851029, - 2080038442, - 2981238179, - 2239809073, - 3452607650, - 4110806264, - 681493932, - 3964436915, - 525233994, - 3061353020, - 1246732755, - 3959080899, - 1758700076, - 3044791998, - 2430431035, - 3044887806, - 1033900809, - 331508311, - 2471939363, - 3918243958, - 2529846335, - 3844772589, - 1036253996, - 1872953145, - 3670441305, - 3249352146, - 879919511, - 3751924715, - 4136608373, - 1707172292, - 2398871653, - 1688096582, - 3758666339, - 4013790570, - 2652210630, - 3933941586, - 3009434767, - 1160634466, - 2822833100, - 1691538955, - 865047551, - 348233734, + 946723246, + 309686130, + 1019769382, + 810956679, + 3898244365, + 3081730575, + 3320601171, + 1741158517, + 2095666937, + 4253754930, + 1473996100, + 3730223263, + 744153742, + 2706606201, + 2802882264, + 974714055, + 2670398081, + 3488256983, + 2185770093, + 1247165220, + 963059754, + 2257048260, + 3849835821, + 921884468, + 3381723740, + 2953464822, + 3237496394, + 367321726, + 3978447208, + 2622825770, + 4269044725, + 551421489, + 2061487613, + 3556026659, + 3239683576, + 2637149852, + 1933281268, + 206017638, + 2024544438, + 2556741343, + 1038103191, + 3782334463, + 83678653, + 3568395981, + 2902583207, + 1875942528, ]; static final String geminiApi = String.fromCharCodes(List.generate( @@ -10203,101 +10269,101 @@ final class _Env { ).map((int i) => _envieddatageminiApi[i] ^ _enviedkeygeminiApi[i])); static const List _enviedkeygeminiApiMasa = [ - 1068867104, - 789257086, - 2374344205, - 435412262, - 3147772022, - 1418727241, - 3478566266, - 260647262, - 1581763645, - 4236797141, - 1188141620, - 3886173370, - 146107725, - 2771412392, - 58681471, - 1211448302, - 1196653291, - 2982162803, - 2595440940, - 4038610731, - 4160079213, - 2738477577, - 3385793863, - 1602812657, - 2015749603, - 229017089, - 3804968053, - 962800061, - 3024940641, - 1212539540, - 1360148835, - 1408053521, - 3429000386, - 649946, - 2087677916, - 3383687339, - 3251681117, - 299934732, - 1422286964, - 866458004, - 1010537299, - 137700404, - 850882077, - 2135461630, - 3085155084, - 783334757, + 192192107, + 1332470588, + 486570927, + 1793012577, + 3850691592, + 1283550055, + 733294112, + 303982693, + 3660699771, + 605725619, + 1523964095, + 890716742, + 845787167, + 3786106691, + 3771038632, + 1212784769, + 2295890622, + 2923901151, + 372307924, + 797895158, + 72071507, + 2567081554, + 616796441, + 3898205818, + 2403483824, + 3495366850, + 1564059516, + 3875704500, + 286364606, + 1903938315, + 3076095114, + 1480543516, + 3609941373, + 2601963854, + 2591778684, + 337564517, + 2782218863, + 3384292359, + 2139221735, + 854884682, + 522036826, + 2365053644, + 3696587941, + 1589103048, + 1430021317, + 911669587, ]; static const List _envieddatageminiApiMasa = [ - 1068867185, - 789257009, - 2374344288, - 435412311, - 3147771948, - 1418727226, - 3478566187, - 260647191, - 1581763661, - 4236797105, - 1188141689, - 3886173326, - 146107663, - 2771412474, - 58681356, - 1211448229, - 1196653190, - 2982162706, - 2595441000, - 4038610785, - 4160079138, - 2738477657, - 3385793904, - 1602812565, - 2015749561, - 229017201, - 3804968000, - 962800016, - 3024940546, - 1212539554, - 1360148781, - 1408053574, - 3429000356, - 649913, - 2087677876, - 3383687324, - 3251681037, - 299934797, - 1422286872, - 866458053, - 1010537227, - 137700422, - 850882117, - 2135461522, - 3085155150, - 783334665, + 192192058, + 1332470643, + 486570946, + 1793012496, + 3850691666, + 1283549972, + 733294193, + 303982636, + 3660699659, + 605725655, + 1523964146, + 890716786, + 845787229, + 3786106641, + 3771038683, + 1212784842, + 2295890643, + 2923901118, + 372307856, + 797895100, + 72071452, + 2567081474, + 616796462, + 3898205726, + 2403483882, + 3495366834, + 1564059465, + 3875704473, + 286364637, + 1903938365, + 3076095172, + 1480543563, + 3609941275, + 2601963821, + 2591778580, + 337564498, + 2782218815, + 3384292422, + 2139221643, + 854884635, + 522036738, + 2365053630, + 3696588029, + 1589103012, + 1430021255, + 911669567, ]; static final String geminiApiMasa = String.fromCharCodes(List.generate( @@ -10307,87 +10373,87 @@ final class _Env { ).map((int i) => _envieddatageminiApiMasa[i] ^ _enviedkeygeminiApiMasa[i])); static const List _enviedkeyagoraAppId = [ - 2081958950, - 3344593607, - 1531753513, - 2899020569, - 869569789, - 3295793548, - 3082998270, - 1277945613, - 1162903749, - 3972314168, - 2730389472, - 2677575780, - 3810492656, - 542461687, - 2742222978, - 3348808301, - 2181751558, - 1577905018, - 1917907079, - 364195670, - 425739494, - 823877058, - 456543235, - 3687427185, - 3045999446, - 3072327834, - 294249014, - 3900947542, - 3761384921, - 3382746976, - 2311171750, - 3912269023, - 1002146462, - 2802304975, - 3672302120, - 2454273928, - 1301961603, - 2322647617, - 2106877078, + 2574000284, + 656142299, + 3586154678, + 543351328, + 967765405, + 2900149675, + 97184039, + 3788854222, + 3600725441, + 2749153498, + 1689536204, + 1097064774, + 3351205091, + 3428084667, + 3270673249, + 3365310137, + 3996306068, + 3861901703, + 476717600, + 4052607519, + 187551657, + 3543455146, + 1528929436, + 3773307748, + 4012526234, + 2750964947, + 1738978991, + 3031770431, + 1415657877, + 2498493431, + 3334871059, + 495917381, + 1501702692, + 3166594245, + 3174529007, + 339994790, + 544275537, + 1395276684, + 1425823463, ]; static const List _envieddataagoraAppId = [ - 2081958929, - 3344593654, - 1531753489, - 2899020577, - 869569741, - 3295793642, - 3082998220, - 1277945703, - 1162903795, - 3972314123, - 2730389462, - 2677575691, - 3810492613, - 542461639, - 2742223035, - 3348808199, - 2181751604, - 1577904974, - 1917907198, - 364195683, - 425739476, - 823877115, - 456543287, - 3687427141, - 3045999470, - 3072327850, - 294249039, - 3900947557, - 3761384937, - 3382746901, - 2311171742, - 3912269035, - 1002146470, - 2802304919, - 3672302170, - 2454274000, - 1301961711, - 2322647555, - 2106877178, + 2574000299, + 656142314, + 3586154638, + 543351320, + 967765421, + 2900149709, + 97184021, + 3788854180, + 3600725495, + 2749153513, + 1689536250, + 1097064745, + 3351205078, + 3428084619, + 3270673240, + 3365310163, + 3996306086, + 3861901747, + 476717657, + 4052607530, + 187551643, + 3543455123, + 1528929448, + 3773307728, + 4012526242, + 2750964963, + 1738979030, + 3031770380, + 1415657893, + 2498493314, + 3334871083, + 495917425, + 1501702684, + 3166594205, + 3174528925, + 339994878, + 544275517, + 1395276750, + 1425823371, ]; static final String agoraAppId = String.fromCharCodes(List.generate( @@ -10397,89 +10463,89 @@ final class _Env { ).map((int i) => _envieddataagoraAppId[i] ^ _enviedkeyagoraAppId[i])); static const List _enviedkeyagoraAppCertificate = [ - 1231343090, - 1126238149, - 2870548765, - 2368799538, - 2481968720, - 811443040, - 3018369170, - 4249215140, - 1068794062, - 1747859621, - 1256909121, - 514271897, - 2763397915, - 2035587145, - 156033108, - 1681890820, - 1886740530, - 1884712524, - 224080234, - 3924776020, - 1905483324, - 450048921, - 1945734337, - 1950078510, - 1350520675, - 965205544, - 261890511, - 1757528176, - 2969984316, - 2637097007, - 819491548, - 3063824946, - 786426118, - 1168115103, - 1869856400, - 396491045, - 3188443334, - 3766826677, - 3664921460, - 3067285639, + 2747481220, + 3248115095, + 1515394224, + 4078506219, + 3489222251, + 3440482103, + 4007632268, + 3706000627, + 1764213956, + 976642986, + 3058362642, + 1434520794, + 2417053802, + 2629168397, + 1640697280, + 3913076297, + 392059644, + 1393184090, + 3249459517, + 666795503, + 4204586178, + 389625446, + 430987858, + 3032651353, + 2511150507, + 3927144955, + 3051400642, + 570155389, + 974582377, + 161114738, + 2857665926, + 87022798, + 2060917783, + 1169014335, + 2167766261, + 3704888452, + 733973351, + 2450280885, + 3014833615, + 3148355083, ]; static const List _envieddataagoraAppCertificate = [ - 1231343000, - 1126238196, - 2870548778, - 2368799555, - 2481968745, - 811443028, - 3018369190, - 4249215185, - 1068794106, - 1747859612, - 1256909170, - 514271904, - 2763397931, - 2035587107, - 156033084, - 1681890933, - 1886740485, - 1884712569, - 224080210, - 3924775969, - 1905483277, - 450048943, - 1945734389, - 1950078487, - 1350520663, - 965205532, - 261890551, - 1757528065, - 2969984270, - 2637097046, - 819491562, - 3063824970, - 786426208, - 1168115178, - 1869856456, - 396491095, - 3188443294, - 3766826713, - 3664921398, - 3067285739, + 2747481326, + 3248115110, + 1515394183, + 4078506138, + 3489222226, + 3440482051, + 4007632312, + 3706000518, + 1764214000, + 976642963, + 3058362657, + 1434520803, + 2417053786, + 2629168487, + 1640697256, + 3913076280, + 392059595, + 1393184111, + 3249459461, + 666795418, + 4204586227, + 389625424, + 430987878, + 3032651360, + 2511150495, + 3927144911, + 3051400698, + 570155276, + 974582363, + 161114635, + 2857665968, + 87022774, + 2060917873, + 1169014346, + 2167766189, + 3704888566, + 733973311, + 2450280921, + 3014833549, + 3148355175, ]; static final String agoraAppCertificate = String.fromCharCodes( @@ -10492,183 +10558,183 @@ final class _Env { _enviedkeyagoraAppCertificate[i])); static const List _enviedkeypayPalClientIdLive = [ - 3340953550, - 1570613616, - 3376132438, - 3269724962, - 3804064268, - 857198706, - 2655838304, - 1658530168, - 487036806, - 262438804, - 4209989150, - 231395561, - 2176104869, - 1523997140, - 2510136932, - 2266877306, - 967569581, - 2672444331, - 443322639, - 286613773, - 1656343185, - 2990159011, - 1185149430, - 1099513061, - 2427627413, - 3234351421, - 2378746608, - 3403941308, - 1482230507, - 1093780579, - 781517395, - 1980014253, - 4076106219, - 2265857702, - 3609569037, - 3930502253, - 438896637, - 3540942576, - 2974158627, - 2795685385, - 3956621788, - 1872323052, - 1290224853, - 161517149, - 3847812425, - 3059579803, - 3837252468, - 2561740666, - 3611012111, - 2995567970, - 2224419204, - 2512441842, - 2150558508, - 1252443279, - 1087154235, - 3619101299, - 412198367, - 2313075308, - 1455100416, - 1003205434, - 3446126585, - 3741444825, - 1094255308, - 2226626400, - 194099588, - 3360225415, - 2665093331, - 3251398805, - 3832188177, - 2864838568, - 274314879, - 4288895515, - 1095258347, - 2672193899, - 928261495, - 3489122279, - 1491289826, - 3106670330, - 3212433909, - 1505616325, - 590729829, - 4068093960, - 2764605618, - 3754850393, - 502512782, - 1917766414, - 1760183411, + 406733137, + 732595604, + 1507635706, + 1504380916, + 1787158654, + 2800455390, + 2732003059, + 3031157151, + 2669929136, + 3265016780, + 1056908558, + 3261172254, + 890628290, + 2286003341, + 3181140045, + 3190643593, + 4261979814, + 1575145434, + 3355157049, + 3836469070, + 2362058675, + 1985321101, + 502978218, + 1518404056, + 3934439578, + 2142613367, + 2956519144, + 637534234, + 353140822, + 2693390994, + 1203603962, + 101049220, + 1275997981, + 2471453544, + 548707912, + 1997550666, + 4192482427, + 3478530455, + 3935112212, + 2017438135, + 3634300988, + 3277115605, + 2172250595, + 1177084817, + 104384484, + 543342304, + 1665414410, + 715620109, + 754357783, + 1750303565, + 2409898373, + 189877380, + 2201432329, + 1312582802, + 997899176, + 2028392287, + 1916273807, + 1844169398, + 3165738646, + 3567895268, + 3990770437, + 2071147828, + 60780098, + 3921752062, + 215688211, + 1224775293, + 438430679, + 2465326536, + 1058619968, + 3577653443, + 2412718428, + 4098785521, + 381440221, + 969635345, + 140890094, + 3425638292, + 1083223210, + 1024072241, + 3037980476, + 1063266605, + 2314520560, + 3660199718, + 1224266137, + 1835503181, + 1407614465, + 1108130629, + 3527319131, ]; static const List _envieddatapayPalClientIdLive = [ - 3340953503, - 1570613546, - 3376132368, - 3269725001, - 3804064358, - 857198643, - 2655838223, - 1658530082, - 487036896, - 262438867, - 4209989226, - 231395463, - 2176104898, - 1523997082, - 2510136855, - 2266877215, - 967569631, - 2672444359, - 443322723, - 286613819, - 1656343267, - 2990158992, - 1185149333, - 1099512998, - 2427627424, - 3234351371, - 2378746536, - 3403941328, - 1482230490, - 1093780496, - 781517317, - 1980014305, - 4076106170, - 2265857741, - 3609569123, - 3930502232, - 438896537, - 3540942525, - 2974158657, - 2795685488, - 3956621753, - 1872322958, - 1290224829, - 161517095, - 3847812355, - 3059579842, - 3837252417, - 2561740611, - 3611012170, - 2995567923, - 2224419255, - 2512441754, - 2150558550, - 1252443320, - 1087154274, - 3619101195, - 412198334, - 2313075241, - 1455100529, - 1003205503, - 3446126525, - 3741444736, - 1094255260, - 2226626356, - 194099665, - 3360225473, - 2665093296, - 3251398852, - 3832188230, - 2864838617, - 274314761, - 4288895614, - 1095258299, - 2672193802, - 928261414, - 3489122258, - 1491289783, - 3106670256, - 3212433855, - 1505616275, - 590729783, - 4068094032, - 2764605632, - 3754850305, - 502512866, - 1917766476, - 1760183327, + 406733056, + 732595662, + 1507635644, + 1504380831, + 1787158548, + 2800455327, + 2732002972, + 3031157189, + 2669929174, + 3265016715, + 1056908666, + 3261172336, + 890628261, + 2286003395, + 3181140030, + 3190643692, + 4261979860, + 1575145398, + 3355157077, + 3836469112, + 2362058689, + 1985321150, + 502978249, + 1518403995, + 3934439599, + 2142613313, + 2956519088, + 637534326, + 353140839, + 2693391073, + 1203603884, + 101049288, + 1275998028, + 2471453443, + 548707878, + 1997550719, + 4192482335, + 3478530522, + 3935112310, + 2017438158, + 3634301017, + 3277115575, + 2172250507, + 1177084907, + 104384430, + 543342265, + 1665414463, + 715620148, + 754357842, + 1750303516, + 2409898422, + 189877484, + 2201432435, + 1312582821, + 997899249, + 2028392231, + 1916273902, + 1844169459, + 3165738727, + 3567895201, + 3990770497, + 2071147885, + 60780050, + 3921751978, + 215688262, + 1224775227, + 438430644, + 2465326489, + 1058619927, + 3577653426, + 2412718378, + 4098785428, + 381440141, + 969635440, + 140890047, + 3425638305, + 1083223295, + 1024072315, + 3037980534, + 1063266683, + 2314520482, + 3660199806, + 1224266219, + 1835503125, + 1407614573, + 1108130567, + 3527319095, ]; static final String payPalClientIdLive = String.fromCharCodes( @@ -10680,185 +10746,185 @@ final class _Env { _envieddatapayPalClientIdLive[i] ^ _enviedkeypayPalClientIdLive[i])); static const List _enviedkeypayPalSecretLive = [ - 4150202229, - 252730445, - 624717246, - 2264233849, - 2078209126, - 2839093202, - 4269014238, - 599368642, - 873227692, - 2101045030, - 1865908070, - 3124842957, - 851226307, - 3701206028, - 988261854, - 5749222, - 585700967, - 1471622276, - 688943072, - 2605584979, - 3302215221, - 3363138126, - 101067790, - 3391859525, - 683814021, - 2163047615, - 88102227, - 2642479401, - 3395766116, - 2130428901, - 1574877883, - 3517483116, - 4064510891, - 550006229, - 446412299, - 1992849641, - 3206218430, - 3866766348, - 1448477647, - 2408276277, - 2559414744, - 394116727, - 1513483786, - 3065814798, - 3528477663, - 2130023271, - 2237902818, - 2992738881, - 4087784278, - 1409606614, - 2673538539, - 1045314284, - 3172715952, - 1158308776, - 3010695706, - 1018070396, - 2235041561, - 983125766, - 170008713, - 2229027887, - 122619291, - 1906748419, - 1124606812, - 1915461031, - 2892250470, - 384380014, - 539695177, - 1783704777, - 1568626503, - 2978814249, - 3682305140, - 3144081257, - 1099627880, - 1933264226, - 4028856113, - 527740201, - 2294419107, - 2281561033, - 3704438190, - 635533350, - 4214429808, - 1335829969, - 3956191903, - 1658306042, - 2761099708, - 135803759, - 2838960500, - 452339821, + 2065169935, + 3719449836, + 1703089757, + 1866660692, + 2376103069, + 1505973478, + 3593680751, + 697494622, + 433081113, + 921299376, + 3363671781, + 2518840536, + 2314974993, + 1861195093, + 1882231544, + 353562852, + 4075496535, + 2033844145, + 2179084238, + 1935810733, + 2693083059, + 231437197, + 1287306104, + 3491005767, + 1214589, + 952513297, + 1164703402, + 2149359020, + 1533102974, + 1237670704, + 1652456380, + 1045214314, + 758954409, + 459199405, + 695000307, + 12058161, + 2082765752, + 3136368635, + 1396477940, + 3891639226, + 1417856079, + 1736571595, + 3651460389, + 3249766091, + 1918285521, + 1449030166, + 1671944441, + 3351251275, + 1643419318, + 3304923008, + 775031813, + 1051381965, + 1714409443, + 861220215, + 1324748945, + 3381825670, + 1400058646, + 1254396047, + 772437761, + 2278599098, + 2793896685, + 647639575, + 1451228584, + 1739107703, + 3308567695, + 1669383746, + 951861375, + 4018950921, + 3903539689, + 3183213832, + 3289094315, + 4066164478, + 4093711787, + 1296958281, + 2139189533, + 2735471502, + 1106935396, + 3968492842, + 1793314587, + 2655294183, + 3307369136, + 694182040, + 428656863, + 4120169015, + 1062420681, + 3674678050, + 2767797972, + 1140562976, ]; static const List _envieddatapayPalSecretLive = [ - 4150202175, - 252730396, - 624717306, - 2264233784, - 2078209074, - 2839093155, - 4269014197, - 599368617, - 873227714, - 2101045090, - 1865907968, - 3124842916, - 851226245, - 3701206140, - 988261787, - 5749159, - 585700905, - 1471622322, - 688943056, - 2605584920, - 3302215287, - 3363138170, - 101067902, - 3391859458, - 683814133, - 2163047675, - 88102194, - 2642479459, - 3395766030, - 2130428828, - 1574877898, - 3517483054, - 4064510954, - 550006193, - 446412338, - 1992849539, - 3206218438, - 3866766401, - 1448477581, - 2408276325, - 2559414696, - 394116621, - 1513483869, - 3065814875, - 3528477678, - 2130023223, - 2237902803, - 2992738858, - 4087784293, - 1409606558, - 2673538522, - 1045314182, - 3172716010, - 1158308800, - 3010695755, - 1018070294, - 2235041655, - 983125809, - 170008762, - 2229027946, - 122619347, - 1906748528, - 1124606743, - 1915461110, - 2892250376, - 384379919, - 539695230, - 1783704829, - 1568626455, - 2978814225, - 3682305028, - 3144081232, - 1099627856, - 1933264138, - 4028856150, - 527740262, - 2294419149, - 2281560964, - 3704438223, - 635533425, - 4214429728, - 1335829894, - 3956191943, - 1658305928, - 2761099748, - 135803651, - 2838960438, - 452339713, + 2065169989, + 3719449789, + 1703089689, + 1866660629, + 2376103113, + 1505973399, + 3593680644, + 697494581, + 433081207, + 921299444, + 3363671683, + 2518840497, + 2314975063, + 1861195045, + 1882231485, + 353562789, + 4075496473, + 2033844103, + 2179084286, + 1935810790, + 2693083121, + 231437241, + 1287305992, + 3491005696, + 1214477, + 952513365, + 1164703435, + 2149359078, + 1533102868, + 1237670729, + 1652456397, + 1045214248, + 758954472, + 459199433, + 695000266, + 12058203, + 2082765760, + 3136368566, + 1396477878, + 3891639274, + 1417856063, + 1736571569, + 3651460466, + 3249766046, + 1918285536, + 1449030214, + 1671944392, + 3351251232, + 1643419269, + 3304923080, + 775031860, + 1051381927, + 1714409401, + 861220127, + 1324748992, + 3381825772, + 1400058744, + 1254396088, + 772437810, + 2278599167, + 2793896613, + 647639652, + 1451228643, + 1739107622, + 3308567777, + 1669383715, + 951861320, + 4018950973, + 3903539641, + 3183213872, + 3289094363, + 4066164423, + 4093711763, + 1296958241, + 2139189626, + 2735471553, + 1106935306, + 3968492903, + 1793314682, + 2655294128, + 3307369184, + 694182095, + 428656775, + 4120169029, + 1062420625, + 3674678094, + 2767797910, + 1140563020, ]; static final String payPalSecretLive = String.fromCharCodes( @@ -10870,35 +10936,35 @@ final class _Env { _envieddatapayPalSecretLive[i] ^ _enviedkeypayPalSecretLive[i])); static const List _enviedkeyintegrationIdPayMob = [ - 2711867375, - 4094106772, - 66776679, - 2172809628, - 1407400692, - 2483490736, - 2796837216, - 414182399, - 1030457165, - 2912663149, - 1122981724, - 4233525351, - 2783465375, + 403123281, + 1416993611, + 74636485, + 3269059815, + 686463205, + 1680258723, + 2414989573, + 4270405194, + 690893993, + 4028761213, + 2721151161, + 1780754503, + 4236316898, ]; static const List _envieddataintegrationIdPayMob = [ - 2711867359, - 4094106790, - 66776660, - 2172809643, - 1407400642, - 2483490691, - 2796837200, - 414182311, - 1030457151, - 2912663093, - 1122981680, - 4233525285, - 2783465459, + 403123297, + 1416993657, + 74636534, + 3269059792, + 686463187, + 1680258704, + 2414989621, + 4270405138, + 690894043, + 4028761125, + 2721151189, + 1780754437, + 4236316814, ]; static final String integrationIdPayMob = String.fromCharCodes( @@ -10911,53 +10977,53 @@ final class _Env { _enviedkeyintegrationIdPayMob[i])); static const List _enviedkeypasswordPayMob = [ - 3476055420, - 948855401, - 990058547, - 1518961812, - 1986635851, - 1630811721, - 581655628, - 842276458, - 4065253996, - 485180379, - 1152419252, - 3216056255, - 4265257470, - 1371595368, - 1059014342, - 2584071750, - 1033576381, - 3613177506, - 3004037069, - 580262902, - 2164109007, - 508249427, + 2566196124, + 2737175834, + 1785583464, + 2127936169, + 1195547893, + 605911846, + 1747316626, + 2238950848, + 1477389888, + 3009148422, + 1444812081, + 2999459466, + 2549965730, + 503793446, + 1650956144, + 2186141559, + 2104105133, + 3516462278, + 1764834458, + 3041119797, + 732180261, + 2590269731, ]; static const List _envieddatapasswordPayMob = [ - 3476055323, - 948855337, - 990058589, - 1518961919, - 1986635791, - 1630811771, - 581655663, - 842276435, - 4065253973, - 485180336, - 1152419221, - 3216056279, - 4265257402, - 1371595319, - 1059014376, - 2584071729, - 1033576421, - 3613177552, - 3004037013, - 580262810, - 2164108941, - 508249407, + 2566196219, + 2737175898, + 1785583366, + 2127936194, + 1195547825, + 605911828, + 1747316657, + 2238950905, + 1477389945, + 3009148525, + 1444812048, + 2999459554, + 2549965798, + 503793529, + 1650956126, + 2186141440, + 2104105205, + 3516462260, + 1764834498, + 3041119833, + 732180327, + 2590269775, ]; static final String passwordPayMob = String.fromCharCodes(List.generate( @@ -10967,43 +11033,43 @@ final class _Env { ).map((int i) => _envieddatapasswordPayMob[i] ^ _enviedkeypasswordPayMob[i])); static const List _enviedkeyusernamePayMob = [ - 2647974768, - 444760733, - 1962118316, - 2567217974, - 2222725922, - 3887608995, - 186704756, - 942365873, - 1496646118, - 3918720892, - 563872343, - 3403095027, - 131129821, - 3430657630, - 3618174847, - 2808387742, - 3979711925, + 3027336137, + 1724348066, + 2676728483, + 4218558312, + 1967229934, + 1403912092, + 243083852, + 4048170333, + 4234291448, + 1221670855, + 2461832957, + 738607993, + 4162174076, + 1125475270, + 3131674333, + 2163050435, + 3509125333, ]; static const List _envieddatausernamePayMob = [ - 2647974723, - 444760746, - 1962118303, - 2567217927, - 2222725915, - 3887608978, - 186704708, - 942365829, - 1496646102, - 3918720841, - 563872357, - 3403094955, - 131129775, - 3430657542, - 3618174739, - 2808387804, - 3979711961, + 3027336186, + 1724348053, + 2676728464, + 4218558297, + 1967229911, + 1403912109, + 243083900, + 4048170345, + 4234291400, + 1221670898, + 2461832911, + 738607905, + 4162173966, + 1125475230, + 3131674289, + 2163050369, + 3509125305, ]; static final String usernamePayMob = String.fromCharCodes(List.generate( @@ -11013,581 +11079,581 @@ final class _Env { ).map((int i) => _envieddatausernamePayMob[i] ^ _enviedkeyusernamePayMob[i])); static const List _enviedkeypayMobApikey = [ - 828685855, - 2003922353, - 1610524957, - 4020268132, - 3029320301, - 584416750, - 2097617338, - 2656430581, - 590232852, - 411175381, - 2899928614, - 3545462265, - 398848759, - 3348930362, - 1472599123, - 1335140841, - 2989526414, - 936641119, - 2881931450, - 3001913719, - 909318898, - 2115369230, - 58318947, - 3841630227, - 3101810139, - 1598758, - 1900929996, - 2547280721, - 1963966862, - 3348701991, - 1280746724, - 2079631576, - 3353966872, - 3122043968, - 948737010, - 3025891157, - 14633219, - 3749442806, - 3474128764, - 1770506318, - 561336108, - 3279706293, - 3057286896, - 2739927905, - 1214847882, - 3649614550, - 3740147523, - 429130980, - 800539962, - 1747326730, - 2986155220, - 3784059346, - 931468589, - 2556053843, - 1695051336, - 565210774, - 2394664459, - 319319323, - 532947566, - 1327263302, - 796153436, - 1807485744, - 2112147427, - 3609764870, - 2163526008, - 1397560652, - 1019521171, - 2717159956, - 1208318514, - 1614487024, - 2461914970, - 1259364295, - 179599338, - 387280946, - 3969139758, - 1555658809, - 2802707971, - 993407505, - 3844859198, - 682022744, - 1533108341, - 2577239428, - 233497412, - 4090899249, - 3120113155, - 995754974, - 2343578281, - 3874502625, - 1412892991, - 611304529, - 2148220573, - 2651370412, - 567578478, - 4015976190, - 3165504079, - 1049204820, - 1442698986, - 1891280188, - 3352600844, - 2846403957, - 3585683118, - 2551850467, - 3787313460, - 3656015350, - 3284691117, - 1608015952, - 515538285, - 2189782421, - 1391466821, - 2636603430, - 2468609204, - 1060073234, - 1648367099, - 1488429510, - 3551372073, - 4052925145, - 3440751312, - 2136986439, - 141138320, - 2639332937, - 867271229, - 2617488662, - 4222703897, - 3774688720, - 1962912687, - 2580829534, - 3100515184, - 3915324865, - 1073675234, - 3728754394, - 1369413785, - 3562245245, - 3541049993, - 345953852, - 1162168206, - 501629054, - 420299065, - 1915220170, - 4159574324, - 3781839444, - 1680872649, - 1765587112, - 3379185887, - 143625190, - 4166574612, - 256377419, - 3227231865, - 1545512228, - 3772671166, - 1367331674, - 4005379183, - 370879497, - 1396342076, - 1513799130, - 4106479151, - 4181310729, - 3150025761, - 1697297906, - 1132732618, - 4244491943, - 970445420, - 2332386069, - 2189073928, - 2336129536, - 721945876, - 2169869880, - 329898563, - 495162007, - 987261115, - 1676356396, - 1552712735, - 1446907690, - 2547715963, - 3887587915, - 4158817816, - 269531085, - 4287544153, - 3525028879, - 352653816, - 1502259184, - 4036295807, - 3171019519, - 1010900901, - 984710380, - 2005768193, - 1770210088, - 2571690960, - 3396710989, - 963943056, - 3101385388, - 2022568759, - 1209292012, - 1300298396, - 265335891, - 991904992, - 639380949, - 1431991600, - 1387608946, - 549994549, - 2702939610, - 3273679600, - 2105182200, - 1135393101, - 3850554599, - 1074156032, - 4157592924, - 2040967898, - 2200552052, - 900600526, - 1431239582, - 3450853379, - 424812604, - 748566252, - 2935151763, - 1639671366, - 2873892173, - 2657758459, - 543176646, - 2503086081, - 1015282077, - 1574915115, - 1886678515, - 3855981337, - 144435161, - 2220902159, - 444189079, - 3033281155, - 236107366, - 3474077884, - 3302603211, - 2529422655, - 3026277571, - 1583628386, - 1457810148, - 3115490443, - 2160904624, - 1741384831, - 3244563283, - 2971731245, - 2570668609, - 415852065, - 2421463038, - 3122969308, - 3284084600, - 3734895695, - 4255840663, - 3822252728, - 4028017442, - 2984043013, - 2718820681, - 2536154764, - 1678332092, - 1273993299, - 3130509886, - 3456560267, - 1974690290, - 2611477637, - 1878515626, - 2610704538, - 3744175569, - 2078175211, - 1387603814, - 983914748, - 2294272, - 2262161637, - 1228506799, - 3575299528, - 4073732059, - 3877691167, - 3458866392, - 2427088183, - 2099442580, - 1984032360, - 3879635047, - 3815391587, - 126738788, - 2410697558, - 3287972020, - 569488390, - 346969100, - 2635009835, - 3894746345, - 3052633828, - 2319804539, - 1949108754, - 2466211944, + 3650559441, + 56278679, + 1614641346, + 3136102569, + 1888449402, + 4219089974, + 1465972101, + 816949667, + 925531178, + 4187793775, + 3524043379, + 2311635813, + 1888855490, + 2311395957, + 2724862478, + 2194668618, + 3803179854, + 3251886376, + 601889492, + 508791790, + 2157366330, + 2066997288, + 3046058472, + 3373809186, + 692038456, + 2063093298, + 2822204471, + 3973314522, + 3038215939, + 2373177468, + 914092240, + 2147051966, + 3541663212, + 618063764, + 2460161238, + 2522194747, + 1266203242, + 3908037885, + 3190899930, + 3678214525, + 1604077782, + 587513475, + 178411957, + 1209626231, + 671109655, + 3973740706, + 4115382694, + 153777548, + 2847070374, + 2644260611, + 915621603, + 1465623372, + 443471641, + 1558457064, + 876482341, + 2879072506, + 4122361447, + 2951617849, + 1595289043, + 4286817578, + 488052203, + 458633786, + 3709090781, + 91919790, + 2683525645, + 4182501613, + 3972748168, + 3494520544, + 3375009582, + 3955862281, + 833999117, + 1944647824, + 1142988945, + 4104240217, + 978286361, + 351570891, + 1930129713, + 1159204599, + 4154497950, + 1746596874, + 4284083675, + 309317724, + 1654540369, + 1335640249, + 729830766, + 636593264, + 2289494721, + 4214856477, + 4061733114, + 4115096844, + 3279833089, + 2225905176, + 572674087, + 3457534930, + 4019548582, + 3533468564, + 2901141567, + 2570927748, + 4185382050, + 2851221920, + 1918652583, + 3109771131, + 278746991, + 1436102579, + 1548348316, + 1955992652, + 1832273448, + 42273136, + 3375770480, + 1432482680, + 2598491561, + 3074692446, + 3094807867, + 3040875539, + 3100396231, + 4000955545, + 1774225399, + 4159397679, + 1240484752, + 945729212, + 2835270849, + 1384342587, + 1364103212, + 3772144818, + 4254754010, + 1715872712, + 1099038088, + 2962838932, + 2489674116, + 943896895, + 2051424841, + 1114582912, + 3572570172, + 4122052631, + 2129464115, + 3409615614, + 1157216590, + 245540799, + 4265066093, + 2286715661, + 128394086, + 3691606734, + 1979921631, + 3406222936, + 3262409731, + 2201090071, + 2740517766, + 2825925961, + 1694386693, + 1306014075, + 2308290653, + 1528586294, + 3073241048, + 2378094310, + 1361976574, + 1033632120, + 3489043993, + 2925699946, + 612512514, + 1027581900, + 1399047181, + 2670717767, + 1676835292, + 3784443018, + 242170375, + 2101468779, + 3433455724, + 822369481, + 3758282654, + 2193361853, + 1587134926, + 2315603379, + 2437320440, + 1510144974, + 3230986633, + 1656035155, + 865597756, + 3391593104, + 4023507404, + 894359758, + 4185405787, + 663369797, + 3399223634, + 3702051909, + 3243438878, + 3414555440, + 559498211, + 610296130, + 3585482523, + 1837536688, + 3674218959, + 3324441652, + 1529910633, + 3557201925, + 2054066443, + 3262894811, + 1594723460, + 1805914235, + 1098127899, + 877246204, + 3794418065, + 3947127728, + 2882272841, + 3464957768, + 3762198999, + 758915577, + 2517867512, + 200520925, + 1402594569, + 3077199177, + 2068374170, + 3588456833, + 3949097048, + 410121890, + 2420937484, + 598343390, + 3902161469, + 2657892967, + 3830127347, + 1204642703, + 760467009, + 688377066, + 4065695490, + 3372241933, + 491260748, + 2951455612, + 1136033579, + 3492254402, + 758023232, + 1391031318, + 3401456400, + 1413515948, + 3017720600, + 1536647744, + 2987278693, + 1579203359, + 4010821414, + 355061963, + 2942679292, + 1851131873, + 4004141611, + 2350128206, + 2488249083, + 3619820610, + 1141496322, + 2540972848, + 191499976, + 3578543682, + 641116208, + 3620595172, + 3755886267, + 4269264401, + 1314653737, + 1430357873, + 3871818937, + 3896155004, + 1551135457, + 3591022835, + 3379279041, + 464675801, + 24687462, + 1677598156, + 181272503, + 2061283279, + 1082374878, + 4152007066, + 281923380, + 1768895651, + 4050792870, + 3908801307, + 3375362014, + 2311140239, + 3189536952, + 1796889892, + 2688822885, + 685589308, + 304697428, + 1197986653, + 1057766761, + 3144446340, + 2063195656, + 2071279429, + 1805235848, + 1530177658, + 1732914613, + 3734158393, ]; static const List _envieddatapayMobApikey = [ - 828685906, - 2003922421, - 1610525039, - 4020268067, - 3029320220, - 584416677, - 2097617407, - 2656430498, - 590232903, - 411175396, - 2899928660, - 3545462191, - 398848646, - 3348930386, - 1472599097, - 1335140750, - 2989526505, - 936641047, - 2881931468, - 3001913650, - 909318818, - 2115369290, - 58318869, - 3841630275, - 3101810097, - 1598828, - 1900930043, - 2547280679, - 1963966932, - 3348702051, - 1280746662, - 2079631517, - 3353966944, - 3122043954, - 948736957, - 3025891170, - 14633296, - 3749442757, - 3474128702, - 1770506251, - 561336174, - 3279706322, - 3057286786, - 2739927821, - 1214847980, - 3649614467, - 3740147508, - 429130928, - 800540027, - 1747326777, - 2986155197, - 3784059367, - 931468671, - 2556053821, - 1695051288, - 565210787, - 2394664529, - 319319413, - 532947480, - 1327263273, - 796153360, - 1807485699, - 2112147374, - 3609764916, - 2163525931, - 1397560693, - 1019521249, - 2717160017, - 1208318576, - 1614486935, - 2461914920, - 1259364267, - 179599268, - 387280998, - 3969139786, - 1555658844, - 2802708091, - 993407577, - 3844859147, - 682022696, - 1533108257, - 2577239508, - 233497378, - 4090899206, - 3120113229, - 995754900, - 2343578331, - 3874502551, - 1412892998, - 611304544, - 2148220655, - 2651370441, - 567578420, - 4015976116, - 3165504057, - 1049204837, - 1442698942, - 1891280210, - 3352600891, - 2846403855, - 3585683144, - 2551850452, - 3787313474, - 3656015266, - 3284691172, - 1608015892, - 515538196, - 2189782498, - 1391466799, - 2636603502, - 2468609235, - 1060073251, - 1648367032, - 1488429553, - 3551372133, - 4052925116, - 3440751273, - 2136986484, - 141138344, - 2639332865, - 867271273, - 2617488722, - 4222703968, - 3774688670, - 1962912750, - 2580829549, - 3100515078, - 3915324918, - 1073675190, - 3728754314, - 1369413887, - 3562245145, - 3541050097, - 345953910, - 1162168316, - 501628959, - 420299073, - 1915220219, - 4159574342, - 3781839395, - 1680872601, - 1765587141, - 3379185807, - 143625106, - 4166574681, - 256377345, - 3227231744, - 1545512286, - 3772671183, - 1367331601, - 4005379114, - 370879568, - 1396342118, - 1513799103, - 4106479176, - 4181310817, - 3150025808, - 1697297857, - 1132732551, - 4244491986, - 970445344, - 2332386112, - 2189074042, - 2336129606, - 721945948, - 2169869835, - 329898498, - 495162022, - 987261178, - 1676356427, - 1552712791, - 1446907721, - 2547715891, - 3887587962, - 4158817837, - 269531022, - 4287544067, - 3525028918, - 352653741, - 1502259089, - 4036295717, - 3171019435, - 1010900969, - 984710307, - 2005768313, - 1770210118, - 2571690919, - 3396711037, - 963943122, - 3101385464, - 2022568787, - 1209291926, - 1300298452, - 265335835, - 991904914, - 639380887, - 1431991665, - 1387608832, - 549994588, - 2702939561, - 3273679530, - 2105182109, - 1135393087, - 3850554546, - 1074156109, - 4157592841, - 2040967823, - 2200551950, - 900600468, - 1431239599, - 3450853441, - 424812626, - 748566190, - 2935151862, - 1639671299, - 2873892132, - 2657758353, - 543176590, - 2503086199, - 1015282131, - 1574915137, - 1886678442, - 3855981397, - 144435127, - 2220902236, - 444189094, - 3033281217, - 236107315, - 3474077941, - 3302603144, - 2529422706, - 3026277547, - 1583628337, - 1457810057, - 3115490523, - 2160904664, - 1741384766, - 3244563298, - 2971731224, - 2570668584, - 415852103, - 2421462966, - 3122969253, - 3284084526, - 3734895678, - 4255840732, - 3822252797, - 4028017519, - 2984043085, - 2718820638, - 2536154869, - 1678332151, - 1273993247, - 3130509916, - 3456560370, - 1974690183, - 2611477708, - 1878515706, - 2610704620, - 3744175538, - 2078175139, - 1387603807, - 983914665, - 2294373, - 2262161577, - 1228506780, - 3575299518, - 4073731969, - 3877691238, - 3458866332, - 2427088209, - 2099442601, - 1984032267, - 3879634961, - 3815391488, - 126738748, - 2410697508, - 3287972076, - 569488490, - 346969166, - 2635009863, - 3894746251, - 3052633734, - 2319804441, - 1949108848, - 2466211850, + 3650559388, + 56278739, + 1614641328, + 3136102638, + 1888449291, + 4219090045, + 1465972160, + 816949748, + 925531257, + 4187793758, + 3524043265, + 2311635763, + 1888855475, + 2311395869, + 2724862564, + 2194668589, + 3803179817, + 3251886432, + 601889442, + 508791723, + 2157366378, + 2066997356, + 3046058398, + 3373809266, + 692038482, + 2063093368, + 2822204416, + 3973314476, + 3038216025, + 2373177400, + 914092178, + 2147052027, + 3541663124, + 618063846, + 2460161177, + 2522194700, + 1266203193, + 3908037838, + 3190899864, + 3678214456, + 1604077716, + 587513572, + 178411975, + 1209626139, + 671109745, + 3973740791, + 4115382737, + 153777624, + 2847070439, + 2644260656, + 915621514, + 1465623417, + 443471691, + 1558456966, + 876482421, + 2879072463, + 4122361405, + 2951617879, + 1595288997, + 4286817605, + 488052135, + 458633737, + 3709090704, + 91919772, + 2683525726, + 4182501588, + 3972748282, + 3494520485, + 3375009644, + 3955862382, + 833999231, + 1944647932, + 1142989023, + 4104240141, + 978286461, + 351570862, + 1930129737, + 1159204543, + 4154497963, + 1746596986, + 4284083599, + 309317644, + 1654540343, + 1335640206, + 729830688, + 636593210, + 2289494707, + 4214856555, + 4061732995, + 4115096893, + 3279833203, + 2225905277, + 572674173, + 3457534872, + 4019548624, + 3533468581, + 2901141611, + 2570927850, + 4185382037, + 2851221978, + 1918652609, + 3109771084, + 278746905, + 1436102631, + 1548348373, + 1955992584, + 1832273489, + 42273031, + 3375770394, + 1432482608, + 2598491598, + 3074692463, + 3094807928, + 3040875556, + 3100396171, + 4000955644, + 1774225294, + 4159397660, + 1240484776, + 945729268, + 2835270805, + 1384342655, + 1364103253, + 3772144892, + 4254753947, + 1715872763, + 1099038206, + 2962838947, + 2489674192, + 943896943, + 2051424815, + 1114583012, + 3572570180, + 4122052701, + 2129464129, + 3409615519, + 1157216566, + 245540750, + 4265066015, + 2286715770, + 128394038, + 3691606691, + 1979921551, + 3406222892, + 3262409806, + 2201090141, + 2740517887, + 2825925939, + 1694386804, + 1306014000, + 2308290584, + 1528586351, + 3073240962, + 2378094211, + 1361976473, + 1033632016, + 3489044072, + 2925699929, + 612512591, + 1027581881, + 1399047233, + 2670717714, + 1676835246, + 3784443084, + 242170447, + 2101468760, + 3433455661, + 822369528, + 3758282719, + 2193361882, + 1587134854, + 2315603408, + 2437320368, + 1510145023, + 3230986684, + 1656035088, + 865597798, + 3391593129, + 4023507353, + 894359727, + 4185405697, + 663369745, + 3399223582, + 3702051850, + 3243438950, + 3414555486, + 559498132, + 610296178, + 3585482585, + 1837536740, + 3674218923, + 3324441678, + 1529910561, + 3557201997, + 2054066553, + 3262894745, + 1594723525, + 1805914121, + 1098127986, + 877246095, + 3794418123, + 3947127765, + 2882272827, + 3464957725, + 3762198938, + 758915500, + 2517867437, + 200520871, + 1402594643, + 3077199224, + 2068374232, + 3588456943, + 3949096986, + 410121927, + 2420937545, + 598343351, + 3902161495, + 2657892911, + 3830127237, + 1204642753, + 760466987, + 688377011, + 4065695566, + 3372242019, + 491260703, + 2951455565, + 1136033641, + 3492254359, + 758023177, + 1391031381, + 3401456477, + 1413515972, + 3017720651, + 1536647725, + 2987278645, + 1579203447, + 4010821479, + 355062010, + 2942679241, + 1851131784, + 4004141645, + 2350128134, + 2488248962, + 3619820564, + 1141496435, + 2540972923, + 191499917, + 3578543631, + 641116280, + 3620595123, + 3755886274, + 4269264474, + 1314653797, + 1430357779, + 3871818944, + 3896154889, + 1551135400, + 3591022755, + 3379279031, + 464675770, + 24687406, + 1677598197, + 181272546, + 2061283242, + 1082374802, + 4152007081, + 281923394, + 1768895737, + 4050792927, + 3908801375, + 3375361976, + 2311140274, + 3189536987, + 1796889938, + 2688822790, + 685589348, + 304697382, + 1197986565, + 1057766661, + 3144446406, + 2063195748, + 2071279399, + 1805235946, + 1530177560, + 1732914647, + 3734158427, ]; static final String payMobApikey = String.fromCharCodes(List.generate( @@ -11597,35 +11663,35 @@ final class _Env { ).map((int i) => _envieddatapayMobApikey[i] ^ _enviedkeypayMobApikey[i])); static const List _enviedkeyintegrationIdPayMobWallet = [ - 3751071568, - 3933800217, - 3327767708, - 2603223096, - 3226788798, - 2152717269, - 3488079092, - 849365887, - 4102793661, - 2200028242, - 3289603366, - 1701593398, - 1751264534, + 165724468, + 3189223646, + 3860883267, + 3487849293, + 78354825, + 748311981, + 847163589, + 3357485714, + 1385098585, + 3754333090, + 4249884128, + 1582496634, + 50198670, ]; static const List _envieddataintegrationIdPayMobWallet = [ - 3751071584, - 3933800235, - 3327767723, - 2603223055, - 3226788745, - 2152717286, - 3488079053, - 849365799, - 4102793679, - 2200028170, - 3289603402, - 1701593460, - 1751264634, + 165724420, + 3189223660, + 3860883316, + 3487849338, + 78354878, + 748311966, + 847163644, + 3357485770, + 1385098539, + 3754333178, + 4249884044, + 1582496568, + 50198754, ]; static final String integrationIdPayMobWallet = String.fromCharCodes( @@ -11638,41 +11704,41 @@ final class _Env { _enviedkeyintegrationIdPayMobWallet[i])); static const List _enviedkeysmsPasswordEgypt = [ - 2964652601, - 661394472, - 4103522417, - 1801911188, - 2218174362, - 415053497, - 2738166764, - 765909451, - 405014297, - 2439444423, - 3974108013, - 1883547923, - 2491987381, - 3793733862, - 3078233468, - 2849878358, + 4130082779, + 164465689, + 1870012007, + 3890830190, + 4021949658, + 3207049403, + 2069723395, + 2675963890, + 927334321, + 2605073993, + 3539813742, + 1734188970, + 4222876400, + 2225566307, + 1052629522, + 591451665, ]; static const List _envieddatasmsPasswordEgypt = [ - 2964652659, - 661394433, - 4103522343, - 1801911292, - 2218174375, - 415053512, - 2738166670, - 765909476, - 405014361, - 2439444362, - 3974107957, - 1883548001, - 2491987437, - 3793733770, - 3078233406, - 2849878330, + 4130082705, + 164465712, + 1870011953, + 3890830086, + 4021949671, + 3207049418, + 2069723489, + 2675963869, + 927334385, + 2605073924, + 3539813686, + 1734189016, + 4222876328, + 2225566223, + 1052629584, + 591451773, ]; static final String smsPasswordEgypt = String.fromCharCodes( @@ -11684,73 +11750,73 @@ final class _Env { _envieddatasmsPasswordEgypt[i] ^ _enviedkeysmsPasswordEgypt[i])); static const List _enviedkeyocpApimSubscriptionKey = [ - 1680613404, - 766984278, - 489575845, - 4184529926, - 1083542025, - 2774869789, - 2842389196, - 382068769, - 2082818229, - 1293781006, - 1948330559, - 2730833372, - 623113212, - 2632476463, - 2126610411, - 2716605945, - 3632004881, - 3803177136, - 525648801, - 3759637161, - 1618570024, - 4220960602, - 1995238230, - 3630408850, - 1180468595, - 292798063, - 1954541046, - 3490607301, - 1054257593, - 2301544482, - 1422895000, - 3432042072, + 3789412053, + 898415255, + 16632501, + 1595917661, + 1486505274, + 1939229942, + 1667540166, + 3821269237, + 526316501, + 3791199833, + 3345545514, + 2995541928, + 2583723291, + 1017559894, + 3810102961, + 248930782, + 698552515, + 2921366578, + 3839503376, + 1609537954, + 2032550249, + 1092205868, + 1274461276, + 1430223969, + 1895403036, + 1995059159, + 3247543597, + 2425393435, + 3251006391, + 3170802404, + 1515881195, + 4103025542, ]; static const List _envieddataocpApimSubscriptionKey = [ - 1680613420, - 766984240, - 489575824, - 4184530018, - 1083542120, - 2774869886, - 2842389167, - 382068802, - 2082818257, - 1293781100, - 1948330588, - 2730833337, - 623113160, - 2632476446, - 2126610392, - 2716605896, - 3632004979, - 3803177089, - 525648832, - 3759637148, - 1618570062, - 4220960611, - 1995238243, - 3630408864, - 1180468554, - 292798038, - 1954540992, - 3490607350, - 1054257545, - 2301544464, - 1422895101, - 3432042091, + 3789412069, + 898415345, + 16632448, + 1595917625, + 1486505307, + 1939229845, + 1667540133, + 3821269142, + 526316465, + 3791199803, + 3345545545, + 2995541965, + 2583723311, + 1017559911, + 3810102914, + 248930799, + 698552481, + 2921366531, + 3839503473, + 1609537943, + 2032550159, + 1092205845, + 1274461289, + 1430223955, + 1895403045, + 1995059182, + 3247543579, + 2425393448, + 3251006343, + 3170802390, + 1515881102, + 4103025589, ]; static final String ocpApimSubscriptionKey = String.fromCharCodes( @@ -11763,135 +11829,135 @@ final class _Env { _enviedkeyocpApimSubscriptionKey[i])); static const List _enviedkeychatGPTkeySeferNew4 = [ - 165946952, - 2519274331, - 1711285420, - 1361145579, - 2380979994, - 3780095409, - 3040402589, - 1501335247, - 1544015156, - 1776405554, - 3482217997, - 1223473272, - 3953006632, - 3986682735, - 2615350534, - 3465778657, - 4036685621, - 3227709941, - 3728734684, - 1585693318, - 769867411, - 2387100925, - 3913016003, - 2189494387, - 2810125591, - 3688154746, - 3779108683, - 2432158751, - 3867671973, - 1348640224, - 3635346110, - 3778218683, - 1049974663, - 1157936066, - 3963405148, - 611839680, - 2960325913, - 1180667318, - 188557971, - 1613283441, - 3915082576, - 312029694, - 3405987139, - 750305674, - 286506941, - 600133805, - 708734631, - 3064918952, - 919297550, - 1097290694, - 3165042777, - 537250103, - 2942587704, - 2424548847, - 3345432998, - 1874121802, - 353612717, - 542705171, - 2596302736, - 2850310258, - 2691267156, - 1970156388, - 2668786355, + 2268981463, + 3120845575, + 842954021, + 2074312820, + 2938100633, + 908585527, + 1361133034, + 3070160289, + 560628761, + 1343513186, + 1557565448, + 1895780730, + 1796564771, + 3214181905, + 3466716898, + 1232292684, + 550790600, + 3561743766, + 3114674691, + 687000374, + 3498856179, + 3451813631, + 2287877159, + 894978702, + 2258064189, + 1098146682, + 3375064435, + 2677636870, + 3534020294, + 2641925876, + 2915394264, + 984695859, + 194850954, + 3968724700, + 2339472770, + 440199167, + 2385637425, + 4038142586, + 2905429116, + 1488933586, + 772311316, + 2641741703, + 1444825202, + 3466174283, + 2145013784, + 4041760688, + 3645693709, + 2145430425, + 2745389644, + 2975985932, + 2212824339, + 3526358426, + 4115380594, + 4014254098, + 3751605424, + 3427555106, + 2864261476, + 2558839634, + 1048233342, + 3719517429, + 830258350, + 1217819826, + 2680776797, ]; static const List _envieddatachatGPTkeySeferNew4 = [ - 165946930, - 2519274300, - 1711285377, - 1361145501, - 2380980086, - 3780095448, - 3040402680, - 1501335266, - 1544015110, - 1776405598, - 3482218044, - 1223473186, - 3953006660, - 3986682655, - 2615350654, - 3465778568, - 4036685656, - 3227709881, - 3728734614, - 1585693360, - 769867492, - 2387100844, - 3913015948, - 2189494277, - 2810125685, - 3688154648, - 3779108735, - 2432158795, - 3867672011, - 1348640163, - 3635346055, - 3778218723, - 1049974773, - 1157936058, - 3963405115, - 611839637, - 2960325980, - 1180667343, - 188558021, - 1613283360, - 3915082521, - 312029579, - 3405987189, - 750305758, - 286506996, - 600133865, - 708734611, - 3064919001, - 919297630, - 1097290738, - 3165042719, - 537250146, - 2942587757, - 2424548766, - 3345433033, - 1874121753, - 353612696, - 542705227, - 2596302818, - 2850310186, - 2691267128, - 1970156326, - 2668786399, + 2268981421, + 3120845664, + 842953992, + 2074312706, + 2938100725, + 908585566, + 1361132943, + 3070160268, + 560628779, + 1343513102, + 1557565497, + 1895780640, + 1796564815, + 3214181985, + 3466716826, + 1232292645, + 550790565, + 3561743834, + 3114674761, + 687000320, + 3498856068, + 3451813550, + 2287877224, + 894978808, + 2258064223, + 1098146584, + 3375064391, + 2677636946, + 3534020264, + 2641925815, + 2915394273, + 984695915, + 194851064, + 3968724644, + 2339472869, + 440199082, + 2385637492, + 4038142467, + 2905429034, + 1488933507, + 772311389, + 2641741810, + 1444825156, + 3466174239, + 2145013841, + 4041760756, + 3645693753, + 2145430504, + 2745389596, + 2975985976, + 2212824405, + 3526358479, + 4115380519, + 4014254179, + 3751605471, + 3427555185, + 2864261457, + 2558839562, + 1048233228, + 3719517357, + 830258370, + 1217819888, + 2680776753, ]; static final String chatGPTkeySeferNew4 = String.fromCharCodes( @@ -11904,239 +11970,239 @@ final class _Env { _enviedkeychatGPTkeySeferNew4[i])); static const List _enviedkeyanthropicAIkeySeferNew = [ - 1390788784, - 2899333933, - 2601017452, - 583956846, - 3110859152, - 193944522, - 951522168, - 1238163245, - 2618464762, - 3456466756, - 2362895605, - 2392646809, - 1447972066, - 1256291038, - 2920427097, - 1750471581, - 1975295559, - 2468637305, - 1648601760, - 289576623, - 2213687885, - 1815967478, - 178013466, - 2788059547, - 365457058, - 3266752649, - 2540305940, - 1940060148, - 3706825815, - 2164572557, - 2305628851, - 703739885, - 4055255283, - 1950391799, - 1146632371, - 3224019945, - 2341516270, - 3381071414, - 2572375663, - 4138541842, - 689066929, - 3282840646, - 566677748, - 1887412751, - 519910471, - 1089100679, - 3824974340, - 427911784, - 3944412672, - 3700666201, - 1149706331, - 1359925046, - 4040017590, - 894323584, - 2254132999, - 2967896879, - 538439848, - 278878499, - 614393047, - 4202890985, - 156481971, - 1649184035, - 508351254, - 2105159426, - 879175573, - 2488976392, - 3587723789, - 2773795641, - 2908862306, - 390299385, - 4154118259, - 1688160337, - 2322984466, - 4223202135, - 2939324335, - 2707297582, - 3764943743, - 3688611620, - 1321505108, - 358717938, - 671761162, - 1399845294, - 2987873839, - 2252061806, - 2129319815, - 1451107509, - 1128177468, - 4219469215, - 2740115944, - 2533695196, - 2958741446, - 1563390906, - 2248533402, - 553421148, - 2994863918, - 2326073237, - 2418385593, - 3370448551, - 2027834607, - 3366697397, - 2278908194, - 1784228985, - 3785959825, - 3382170346, - 1921601241, - 3292065984, - 2880865390, - 3234799239, - 1573280306, - 1139986144, - 2636040870, - 1654065515, - 3919623519, - 578173425, - 1524095618, + 4112187027, + 1687434677, + 1638782753, + 2982765291, + 1277745159, + 166816541, + 1579163226, + 4107086380, + 3483509449, + 2527621918, + 3741571032, + 982443473, + 1234769647, + 2503164177, + 355640204, + 145000526, + 2193603654, + 2019213611, + 286165351, + 178813185, + 1502529300, + 1187633095, + 812547437, + 1871300097, + 2994190248, + 1751009882, + 3135551912, + 3321475451, + 37516943, + 28347790, + 4209627327, + 467462681, + 769575723, + 900726024, + 880491506, + 3146551635, + 3575021019, + 2724106185, + 679354819, + 3259551947, + 119705319, + 21283703, + 3046635389, + 1225742416, + 1019602508, + 1698283639, + 1550623238, + 1794337649, + 3014322571, + 3359794308, + 2657286513, + 1976050843, + 1122124317, + 2565547458, + 4071498137, + 1992917492, + 3985416338, + 719089975, + 2599462745, + 3461730310, + 3645142657, + 190239628, + 1326034441, + 3899692730, + 1081285424, + 1109844003, + 166525247, + 778407569, + 578096680, + 1614576040, + 3750015323, + 3299972627, + 1884394967, + 2384866145, + 1251071253, + 1349573141, + 3857638796, + 2932894962, + 1802976849, + 4230351393, + 3693516671, + 2565425313, + 2282297315, + 3243670159, + 1350933148, + 905389853, + 3089740239, + 2817643912, + 941653203, + 2399241780, + 1378960355, + 3736727734, + 3704314784, + 3114266666, + 2608933239, + 3674688206, + 3094686207, + 358606954, + 2878992676, + 181224747, + 3511154533, + 1519628647, + 427071758, + 2706617247, + 3908994095, + 1167027596, + 362684507, + 2083351537, + 1990749518, + 714660695, + 1485070497, + 804118491, + 2998997767, + 1277148286, + 4159459024, ]; static const List _envieddataanthropicAIkeySeferNew = [ - 1390788810, - 2899333962, - 2601017409, - 583956767, - 3110859250, - 193944489, - 951522133, - 1238163292, - 2618464652, - 3456466731, - 2362895558, - 2392646816, - 1447972047, - 1256290995, - 2920427063, - 1750471593, - 1975295505, - 2468637213, - 1648601837, - 289576702, - 2213687928, - 1815967384, - 178013551, - 2788059601, - 365457095, - 3266752704, - 2540305997, - 1940060060, - 3706825754, - 2164572611, - 2305628807, - 703739837, - 4055255223, - 1950391726, - 1146632385, - 3224019934, - 2341516191, - 3381071449, - 2572375575, - 4138541857, - 689066908, - 3282840626, - 566677702, - 1887412838, - 519910518, - 1089100747, - 3824974444, - 427911775, - 3944412769, - 3700666135, - 1149706255, - 1359925106, - 4040017616, - 894323673, - 2254133057, - 2967896834, - 538439919, - 278878533, - 614393071, - 4202890910, - 156482011, - 1649184118, - 508351324, - 2105159512, - 879175638, - 2488976507, - 3587723833, - 2773795598, - 2908862247, - 390299292, - 4154118166, - 1688160317, - 2322984537, - 4223202105, - 2939324311, - 2707297649, - 3764943658, - 3688611655, - 1321505081, - 358717863, - 671761223, - 1399845315, - 2987873862, - 2252061757, - 2129319883, - 1451107540, - 1128177498, - 4219469231, - 2740115901, - 2533695126, - 2958741409, - 1563390858, - 2248533470, - 553421098, - 2994863995, - 2326073337, - 2418385640, - 3370448597, - 2027834539, - 3366697409, - 2278908175, - 1784228942, - 3785959847, - 3382170281, - 1921601163, - 3292065970, - 2880865285, - 3234799318, - 1573280355, - 1139986104, - 2636040916, - 1654065459, - 3919623475, - 578173363, - 1524095726, + 4112187113, + 1687434706, + 1638782732, + 2982765210, + 1277745253, + 166816638, + 1579163255, + 4107086429, + 3483509439, + 2527622001, + 3741571051, + 982443496, + 1234769602, + 2503164284, + 355640290, + 145000570, + 2193603600, + 2019213647, + 286165290, + 178813264, + 1502529313, + 1187633065, + 812547352, + 1871300171, + 2994190285, + 1751009811, + 3135551985, + 3321475347, + 37516994, + 28347840, + 4209627275, + 467462729, + 769575791, + 900726097, + 880491392, + 3146551652, + 3575020970, + 2724106150, + 679354811, + 3259551992, + 119705290, + 21283587, + 3046635343, + 1225742393, + 1019602557, + 1698283579, + 1550623342, + 1794337606, + 3014322666, + 3359794378, + 2657286437, + 1976050911, + 1122124411, + 2565547419, + 4071498207, + 1992917465, + 3985416405, + 719090001, + 2599462753, + 3461730417, + 3645142761, + 190239705, + 1326034499, + 3899692768, + 1081285491, + 1109844048, + 166525195, + 778407590, + 578096749, + 1614576077, + 3750015294, + 3299972735, + 1884394908, + 2384866063, + 1251071277, + 1349573194, + 3857638873, + 2932894865, + 1802976828, + 4230351476, + 3693516594, + 2565425356, + 2282297226, + 3243670236, + 1350933200, + 905389948, + 3089740201, + 2817643960, + 941653126, + 2399241854, + 1378960260, + 3736727686, + 3704314852, + 3114266716, + 2608933154, + 3674688162, + 3094686126, + 358606872, + 2878992736, + 181224799, + 3511154504, + 1519628624, + 427071800, + 2706617308, + 3908994173, + 1167027710, + 362684464, + 2083351456, + 1990749471, + 714660623, + 1485070547, + 804118403, + 2998997867, + 1277148220, + 4159459004, ]; static final String anthropicAIkeySeferNew = String.fromCharCodes( @@ -12149,135 +12215,135 @@ final class _Env { _enviedkeyanthropicAIkeySeferNew[i])); static const List _enviedkeyllama3Key = [ - 3303025890, - 3040127445, - 159804670, - 3638428578, - 2485542120, - 3962641454, - 274247243, - 3629970635, - 3234635792, - 2115979750, - 923341190, - 3294121335, - 3806401870, - 2817630500, - 4261607353, - 990462919, - 2333653192, - 4244395593, - 159390286, - 2585700164, - 3692206516, - 3873181795, - 3445980531, - 2163279259, - 455617944, - 1572817148, - 3630998964, - 3691408189, - 3389804023, - 3521084222, - 2836418047, - 4223664654, - 2858292901, - 656160633, - 3309801784, - 1291082685, - 2478661609, - 371653079, - 267632023, - 1722212424, - 3278786486, - 1940105508, - 243864795, - 850041693, - 3528862299, - 3967016145, - 855965655, - 427497014, - 3032641752, - 411531135, - 2222697726, - 198475334, - 3216809596, - 2987641478, - 493693562, - 2376918683, - 2111796947, - 2192882037, - 1188439978, - 930517079, - 2340764567, - 1769421478, - 3217307146, + 843382224, + 317198561, + 3335257702, + 2579144974, + 1395292439, + 1827048393, + 1794744950, + 1190780592, + 1460846332, + 4292010087, + 1734492625, + 2351377861, + 3898631543, + 2232591854, + 1914577120, + 55166059, + 2653293676, + 776854485, + 3760392225, + 2602322657, + 2094155298, + 1181636702, + 1595306301, + 1047076065, + 1258601490, + 842751215, + 2750812253, + 1018641171, + 2055101289, + 4231706300, + 3153604677, + 1086740578, + 2452968472, + 272588687, + 21507914, + 2413540212, + 2728371317, + 3443698122, + 2225205841, + 1573794299, + 72985121, + 4135940157, + 4150490658, + 3770661150, + 3794836056, + 2665014056, + 703183693, + 511939797, + 4005379142, + 2570501000, + 781195420, + 2483404237, + 380977778, + 942737279, + 3599035819, + 885135169, + 1104214356, + 2028887480, + 4020279347, + 3661727944, + 3118060870, + 3480432797, + 1177205772, ]; static const List _envieddatallama3Key = [ - 3303025801, - 3040127407, - 159804569, - 3638428669, - 2485542045, - 3962641530, - 274247187, - 3629970610, - 3234635811, - 2115979651, - 923341247, - 3294121267, - 3806401804, - 2817630534, - 4261607418, - 990462870, - 2333653241, - 4244395535, - 159390240, - 2585700105, - 3692206579, - 3873181710, - 3445980427, - 2163279298, - 455618031, - 1572817064, - 3630999039, - 3691408196, - 3389803908, - 3521084230, - 2836417990, - 4223664731, - 2858292982, - 656160584, - 3309801818, - 1291082696, - 2478661531, - 371653039, - 267632093, - 1722212386, - 3278786434, - 1940105538, - 243864733, - 850041642, - 3528862228, - 3967016123, - 855965618, - 427496962, - 3032641684, - 411531045, - 2222697660, - 198475283, - 3216809530, - 2987641549, - 493693488, - 2376918728, - 2111796962, - 2192881965, - 1188440024, - 930517007, - 2340764667, - 1769421540, - 3217307238, + 843382203, + 317198491, + 3335257601, + 2579145041, + 1395292514, + 1827048349, + 1794744878, + 1190780617, + 1460846287, + 4292009986, + 1734492648, + 2351377793, + 3898631477, + 2232591756, + 1914577059, + 55166010, + 2653293661, + 776854419, + 3760392271, + 2602322604, + 2094155365, + 1181636659, + 1595306309, + 1047076024, + 1258601573, + 842751163, + 2750812182, + 1018641258, + 2055101210, + 4231706308, + 3153604732, + 1086740535, + 2452968523, + 272588734, + 21507880, + 2413540097, + 2728371207, + 3443698098, + 2225205787, + 1573794193, + 72985109, + 4135940187, + 4150490724, + 3770661225, + 3794835991, + 2665014082, + 703183656, + 511939809, + 4005379082, + 2570501074, + 781195486, + 2483404184, + 380977716, + 942737204, + 3599035873, + 885135122, + 1104214373, + 2028887520, + 4020279361, + 3661727888, + 3118060842, + 3480432863, + 1177205856, ]; static final String llama3Key = String.fromCharCodes(List.generate( @@ -12287,73 +12353,73 @@ final class _Env { ).map((int i) => _envieddatallama3Key[i] ^ _enviedkeyllama3Key[i])); static const List _enviedkeypayMobOutPassword = [ - 691888625, - 3418568462, - 3667328651, - 3120661808, - 3394738650, - 516854079, - 4156982005, - 2562517432, - 2242685936, - 1982999215, - 955894797, - 508403475, - 388170670, - 1154547106, - 2087642196, - 2350753856, - 2501567039, - 2096072246, - 3678900752, - 212267875, - 161654232, - 2850135153, - 3346306461, - 2248978659, - 189152548, - 3328740901, - 550684179, - 4015886188, - 3643074951, - 2340386410, - 3533334677, - 3289964604, + 3640465282, + 3758733440, + 2221221424, + 2869976102, + 1576236821, + 3264171324, + 492528501, + 2848369266, + 2334999299, + 2065473552, + 3302682291, + 2704171362, + 3235669974, + 1316683713, + 1740286297, + 2444113119, + 171935055, + 1427915811, + 3369113896, + 1048085327, + 146175075, + 2238282975, + 3158511327, + 3240349032, + 4106949715, + 3068708837, + 3020980205, + 3108408227, + 110707273, + 2055080945, + 178304286, + 3954697962, ]; static const List _envieddatapayMobOutPassword = [ - 691888565, - 3418568508, - 3667328753, - 3120661882, - 3394738588, - 516854087, - 4156981918, - 2562517501, - 2242685907, - 1982999267, - 955894851, - 508403576, - 388170653, - 1154547156, - 2087642158, - 2350753907, - 2501566983, - 2096072268, - 3678900770, - 212267783, - 161654145, - 2850135049, - 3346306541, - 2248978605, - 189152578, - 3328740978, - 550684235, - 4015886110, - 3643075039, - 2340386310, - 3533334743, - 3289964624, + 3640465350, + 3758733490, + 2221221450, + 2869976172, + 1576236883, + 3264171332, + 492528414, + 2848369207, + 2334999328, + 2065473628, + 3302682365, + 2704171273, + 3235669989, + 1316683703, + 1740286243, + 2444113132, + 171935095, + 1427915865, + 3369113882, + 1048085291, + 146175034, + 2238282919, + 3158511279, + 3240348966, + 4106949685, + 3068708786, + 3020980149, + 3108408273, + 110707217, + 2055080861, + 178304348, + 3954697862, ]; static final String payMobOutPassword = String.fromCharCodes( @@ -12365,57 +12431,57 @@ final class _Env { _envieddatapayMobOutPassword[i] ^ _enviedkeypayMobOutPassword[i])); static const List _enviedkeypayMobOutUserName = [ - 2722035514, - 758760241, - 3666170111, - 848922883, - 2404908817, - 3220605697, - 4045166960, - 2962281252, - 4053803990, - 1833278131, - 1428760222, - 1119616996, - 2649111811, - 3893320771, - 2133081586, - 3983757096, - 2987459343, - 2007545360, - 1656443894, - 1098117283, - 2501420758, - 3444268112, - 1948142210, - 1554282014, + 438096092, + 186755415, + 3388495033, + 3345031444, + 2487492499, + 4199360080, + 1144963354, + 2572476356, + 2477618265, + 495045829, + 1269831664, + 1092343097, + 4027099385, + 3506410491, + 3172097360, + 3135047258, + 1151486149, + 3885207609, + 3971726722, + 2162812343, + 2783503921, + 3243204995, + 985355945, + 88769436, ]; static const List _envieddatapayMobOutUserName = [ - 2722035520, - 758760283, - 3666169994, - 848922985, - 2404908925, - 3220605790, - 4045166849, - 2962281298, - 4053803961, - 1833278188, - 1428760312, - 1119616915, - 2649111912, - 3893320745, - 2133081492, - 3983757135, - 2987459429, - 2007545468, - 1656443822, - 1098117329, - 2501420686, - 3444268092, - 1948142272, - 1554282098, + 438096038, + 186755389, + 3388495052, + 3345031550, + 2487492607, + 4199360015, + 1144963435, + 2572476338, + 2477618230, + 495045786, + 1269831574, + 1092343118, + 4027099282, + 3506410385, + 3172097334, + 3135047229, + 1151486127, + 3885207637, + 3971726810, + 2162812357, + 2783503977, + 3243205103, + 985356011, + 88769520, ]; static final String payMobOutUserName = String.fromCharCodes( @@ -12426,9 +12492,9 @@ final class _Env { ).map((int i) => _envieddatapayMobOutUserName[i] ^ _enviedkeypayMobOutUserName[i])); - static const List _enviedkeyA = [2728777574]; + static const List _enviedkeyA = [542636626]; - static const List _envieddataA = [2728777527]; + static const List _envieddataA = [542636547]; static final String A = String.fromCharCodes(List.generate( _envieddataA.length, @@ -12436,9 +12502,9 @@ final class _Env { growable: false, ).map((int i) => _envieddataA[i] ^ _enviedkeyA[i])); - static const List _enviedkeyB = [253296250]; + static const List _enviedkeyB = [2596830498]; - static const List _envieddataB = [253296162]; + static const List _envieddataB = [2596830586]; static final String B = String.fromCharCodes(List.generate( _envieddataB.length, @@ -12446,9 +12512,9 @@ final class _Env { growable: false, ).map((int i) => _envieddataB[i] ^ _enviedkeyB[i])); - static const List _enviedkeyC = [520289948]; + static const List _enviedkeyC = [2644966900]; - static const List _envieddataC = [520290010]; + static const List _envieddataC = [2644966834]; static final String C = String.fromCharCodes(List.generate( _envieddataC.length, @@ -12456,9 +12522,9 @@ final class _Env { growable: false, ).map((int i) => _envieddataC[i] ^ _enviedkeyC[i])); - static const List _enviedkeyD = [1839925402]; + static const List _enviedkeyD = [699250703]; - static const List _envieddataD = [1839925443]; + static const List _envieddataD = [699250774]; static final String D = String.fromCharCodes(List.generate( _envieddataD.length, @@ -12466,9 +12532,9 @@ final class _Env { growable: false, ).map((int i) => _envieddataD[i] ^ _enviedkeyD[i])); - static const List _enviedkeyE = [1455985570]; + static const List _enviedkeyE = [73060734]; - static const List _envieddataE = [1455985640]; + static const List _envieddataE = [73060660]; static final String E = String.fromCharCodes(List.generate( _envieddataE.length, @@ -12476,9 +12542,9 @@ final class _Env { growable: false, ).map((int i) => _envieddataE[i] ^ _enviedkeyE[i])); - static const List _enviedkeyF = [1047134101]; + static const List _enviedkeyF = [3338533546]; - static const List _envieddataF = [1047134144]; + static const List _envieddataF = [3338533631]; static final String F = String.fromCharCodes(List.generate( _envieddataF.length, @@ -12486,9 +12552,9 @@ final class _Env { growable: false, ).map((int i) => _envieddataF[i] ^ _enviedkeyF[i])); - static const List _enviedkeyG = [3892417735]; + static const List _enviedkeyG = [3456804568]; - static const List _envieddataG = [3892417676]; + static const List _envieddataG = [3456804499]; static final String G = String.fromCharCodes(List.generate( _envieddataG.length, @@ -12496,9 +12562,9 @@ final class _Env { growable: false, ).map((int i) => _envieddataG[i] ^ _enviedkeyG[i])); - static const List _enviedkeyH = [865934818]; + static const List _enviedkeyH = [2028158175]; - static const List _envieddataH = [865934773]; + static const List _envieddataH = [2028158088]; static final String H = String.fromCharCodes(List.generate( _envieddataH.length, @@ -12506,9 +12572,9 @@ final class _Env { growable: false, ).map((int i) => _envieddataH[i] ^ _enviedkeyH[i])); - static const List _enviedkeyI = [3782801626]; + static const List _enviedkeyI = [555678811]; - static const List _envieddataI = [3782801557]; + static const List _envieddataI = [555678740]; static final String I = String.fromCharCodes(List.generate( _envieddataI.length, @@ -12516,9 +12582,9 @@ final class _Env { growable: false, ).map((int i) => _envieddataI[i] ^ _enviedkeyI[i])); - static const List _enviedkeyJ = [860165277]; + static const List _enviedkeyJ = [1235702729]; - static const List _envieddataJ = [860165336]; + static const List _envieddataJ = [1235702668]; static final String J = String.fromCharCodes(List.generate( _envieddataJ.length, @@ -12526,9 +12592,9 @@ final class _Env { growable: false, ).map((int i) => _envieddataJ[i] ^ _enviedkeyJ[i])); - static const List _enviedkeyK = [3780868384]; + static const List _enviedkeyK = [636648884]; - static const List _envieddataK = [3780868455]; + static const List _envieddataK = [636648947]; static final String K = String.fromCharCodes(List.generate( _envieddataK.length, @@ -12536,9 +12602,9 @@ final class _Env { growable: false, ).map((int i) => _envieddataK[i] ^ _enviedkeyK[i])); - static const List _enviedkeyL = [1982378567]; + static const List _enviedkeyL = [609647016]; - static const List _envieddataL = [1982378517]; + static const List _envieddataL = [609647098]; static final String L = String.fromCharCodes(List.generate( _envieddataL.length, @@ -12546,9 +12612,9 @@ final class _Env { growable: false, ).map((int i) => _envieddataL[i] ^ _enviedkeyL[i])); - static const List _enviedkeyM = [1120129024]; + static const List _enviedkeyM = [1668777736]; - static const List _envieddataM = [1120129102]; + static const List _envieddataM = [1668777798]; static final String M = String.fromCharCodes(List.generate( _envieddataM.length, @@ -12556,9 +12622,9 @@ final class _Env { growable: false, ).map((int i) => _envieddataM[i] ^ _enviedkeyM[i])); - static const List _enviedkeyN = [3577342690]; + static const List _enviedkeyN = [534725874]; - static const List _envieddataN = [3577342624]; + static const List _envieddataN = [534725808]; static final String N = String.fromCharCodes(List.generate( _envieddataN.length, @@ -12566,9 +12632,9 @@ final class _Env { growable: false, ).map((int i) => _envieddataN[i] ^ _enviedkeyN[i])); - static const List _enviedkeyO = [3807693943]; + static const List _enviedkeyO = [429462609]; - static const List _envieddataO = [3807693886]; + static const List _envieddataO = [429462552]; static final String O = String.fromCharCodes(List.generate( _envieddataO.length, @@ -12576,9 +12642,9 @@ final class _Env { growable: false, ).map((int i) => _envieddataO[i] ^ _enviedkeyO[i])); - static const List _enviedkeyP = [3355353777]; + static const List _enviedkeyP = [954665354]; - static const List _envieddataP = [3355353831]; + static const List _envieddataP = [954665436]; static final String P = String.fromCharCodes(List.generate( _envieddataP.length, @@ -12586,9 +12652,9 @@ final class _Env { growable: false, ).map((int i) => _envieddataP[i] ^ _enviedkeyP[i])); - static const List _enviedkeyQ = [2038250624]; + static const List _enviedkeyQ = [3835481222]; - static const List _envieddataQ = [2038250689]; + static const List _envieddataQ = [3835481287]; static final String Q = String.fromCharCodes(List.generate( _envieddataQ.length, @@ -12596,9 +12662,9 @@ final class _Env { growable: false, ).map((int i) => _envieddataQ[i] ^ _enviedkeyQ[i])); - static const List _enviedkeyR = [4026835158]; + static const List _enviedkeyR = [3860386050]; - static const List _envieddataR = [4026835098]; + static const List _envieddataR = [3860386126]; static final String R = String.fromCharCodes(List.generate( _envieddataR.length, @@ -12606,9 +12672,9 @@ final class _Env { growable: false, ).map((int i) => _envieddataR[i] ^ _enviedkeyR[i])); - static const List _enviedkeyS = [3309984485]; + static const List _enviedkeyS = [4181875672]; - static const List _envieddataS = [3309984447]; + static const List _envieddataS = [4181875586]; static final String S = String.fromCharCodes(List.generate( _envieddataS.length, @@ -12616,9 +12682,9 @@ final class _Env { growable: false, ).map((int i) => _envieddataS[i] ^ _enviedkeyS[i])); - static const List _enviedkeyT = [2410998883]; + static const List _enviedkeyT = [1080140203]; - static const List _envieddataT = [2410998816]; + static const List _envieddataT = [1080140264]; static final String T = String.fromCharCodes(List.generate( _envieddataT.length, @@ -12626,9 +12692,9 @@ final class _Env { growable: false, ).map((int i) => _envieddataT[i] ^ _enviedkeyT[i])); - static const List _enviedkeyU = [4123622442]; + static const List _enviedkeyU = [3743872674]; - static const List _envieddataU = [4123622498]; + static const List _envieddataU = [3743872746]; static final String U = String.fromCharCodes(List.generate( _envieddataU.length, @@ -12636,9 +12702,9 @@ final class _Env { growable: false, ).map((int i) => _envieddataU[i] ^ _enviedkeyU[i])); - static const List _enviedkeyV = [2664631239]; + static const List _enviedkeyV = [1388123451]; - static const List _envieddataV = [2664631191]; + static const List _envieddataV = [1388123499]; static final String V = String.fromCharCodes(List.generate( _envieddataV.length, @@ -12646,9 +12712,9 @@ final class _Env { growable: false, ).map((int i) => _envieddataV[i] ^ _enviedkeyV[i])); - static const List _enviedkeyW = [3105440214]; + static const List _enviedkeyW = [2936742330]; - static const List _envieddataW = [3105440130]; + static const List _envieddataW = [2936742382]; static final String W = String.fromCharCodes(List.generate( _envieddataW.length, @@ -12656,9 +12722,9 @@ final class _Env { growable: false, ).map((int i) => _envieddataW[i] ^ _enviedkeyW[i])); - static const List _enviedkeyX = [2305594320]; + static const List _enviedkeyX = [3093927473]; - static const List _envieddataX = [2305594260]; + static const List _envieddataX = [3093927541]; static final String X = String.fromCharCodes(List.generate( _envieddataX.length, @@ -12666,9 +12732,9 @@ final class _Env { growable: false, ).map((int i) => _envieddataX[i] ^ _enviedkeyX[i])); - static const List _enviedkeyY = [2266378590]; + static const List _enviedkeyY = [1763572433]; - static const List _envieddataY = [2266378509]; + static const List _envieddataY = [1763572354]; static final String Y = String.fromCharCodes(List.generate( _envieddataY.length, @@ -12676,9 +12742,9 @@ final class _Env { growable: false, ).map((int i) => _envieddataY[i] ^ _enviedkeyY[i])); - static const List _enviedkeyZ = [4281016674]; + static const List _enviedkeyZ = [1259829020]; - static const List _envieddataZ = [4281016623]; + static const List _envieddataZ = [1259829073]; static final String Z = String.fromCharCodes(List.generate( _envieddataZ.length, @@ -12686,9 +12752,9 @@ final class _Env { growable: false, ).map((int i) => _envieddataZ[i] ^ _enviedkeyZ[i])); - static const List _enviedkeya = [3819752563]; + static const List _enviedkeya = [3641218189]; - static const List _envieddataa = [3819752450]; + static const List _envieddataa = [3641218300]; static final String a = String.fromCharCodes(List.generate( _envieddataa.length, @@ -12696,9 +12762,9 @@ final class _Env { growable: false, ).map((int i) => _envieddataa[i] ^ _enviedkeya[i])); - static const List _enviedkeyb = [3279865818]; + static const List _enviedkeyb = [2092817231]; - static const List _envieddatab = [3279865762]; + static const List _envieddatab = [2092817207]; static final String b = String.fromCharCodes(List.generate( _envieddatab.length, @@ -12706,9 +12772,9 @@ final class _Env { growable: false, ).map((int i) => _envieddatab[i] ^ _enviedkeyb[i])); - static const List _enviedkeyc = [2702050004]; + static const List _enviedkeyc = [3132456457]; - static const List _envieddatac = [2702049970]; + static const List _envieddatac = [3132456559]; static final String c = String.fromCharCodes(List.generate( _envieddatac.length, @@ -12716,9 +12782,9 @@ final class _Env { growable: false, ).map((int i) => _envieddatac[i] ^ _enviedkeyc[i])); - static const List _enviedkeyd = [3730998599]; + static const List _enviedkeyd = [421432080]; - static const List _envieddatad = [3730998590]; + static const List _envieddatad = [421432169]; static final String d = String.fromCharCodes(List.generate( _envieddatad.length, @@ -12726,9 +12792,9 @@ final class _Env { growable: false, ).map((int i) => _envieddatad[i] ^ _enviedkeyd[i])); - static const List _enviedkeye = [3826033034]; + static const List _enviedkeye = [1489877303]; - static const List _envieddatae = [3826033120]; + static const List _envieddatae = [1489877341]; static final String e = String.fromCharCodes(List.generate( _envieddatae.length, @@ -12736,9 +12802,9 @@ final class _Env { growable: false, ).map((int i) => _envieddatae[i] ^ _enviedkeye[i])); - static const List _enviedkeyf = [1881927301]; + static const List _enviedkeyf = [2440412795]; - static const List _envieddataf = [1881927408]; + static const List _envieddataf = [2440412686]; static final String f = String.fromCharCodes(List.generate( _envieddataf.length, @@ -12746,9 +12812,9 @@ final class _Env { growable: false, ).map((int i) => _envieddataf[i] ^ _enviedkeyf[i])); - static const List _enviedkeyg = [1156001031]; + static const List _enviedkeyg = [2025482325]; - static const List _envieddatag = [1156001132]; + static const List _envieddatag = [2025482302]; static final String g = String.fromCharCodes(List.generate( _envieddatag.length, @@ -12756,9 +12822,9 @@ final class _Env { growable: false, ).map((int i) => _envieddatag[i] ^ _enviedkeyg[i])); - static const List _enviedkeyh = [1060697757]; + static const List _enviedkeyh = [3108980352]; - static const List _envieddatah = [1060697834]; + static const List _envieddatah = [3108980471]; static final String h = String.fromCharCodes(List.generate( _envieddatah.length, @@ -12766,9 +12832,9 @@ final class _Env { growable: false, ).map((int i) => _envieddatah[i] ^ _enviedkeyh[i])); - static const List _enviedkeyi = [1267625729]; + static const List _enviedkeyi = [3248919013]; - static const List _envieddatai = [1267625838]; + static const List _envieddatai = [3248918922]; static final String i = String.fromCharCodes(List.generate( _envieddatai.length, @@ -12776,9 +12842,9 @@ final class _Env { growable: false, ).map((int i) => _envieddatai[i] ^ _enviedkeyi[i])); - static const List _enviedkeyj = [3609401216]; + static const List _enviedkeyj = [1411398647]; - static const List _envieddataj = [3609401317]; + static const List _envieddataj = [1411398546]; static final String j = String.fromCharCodes(List.generate( _envieddataj.length, @@ -12786,9 +12852,9 @@ final class _Env { growable: false, ).map((int i) => _envieddataj[i] ^ _enviedkeyj[i])); - static const List _enviedkeyk = [3581851696]; + static const List _enviedkeyk = [1572741811]; - static const List _envieddatak = [3581851735]; + static const List _envieddatak = [1572741844]; static final String k = String.fromCharCodes(List.generate( _envieddatak.length, @@ -12796,9 +12862,9 @@ final class _Env { growable: false, ).map((int i) => _envieddatak[i] ^ _enviedkeyk[i])); - static const List _enviedkeyl = [2540206731]; + static const List _enviedkeyl = [2158313276]; - static const List _envieddatal = [2540206841]; + static const List _envieddatal = [2158313294]; static final String l = String.fromCharCodes(List.generate( _envieddatal.length, @@ -12806,9 +12872,9 @@ final class _Env { growable: false, ).map((int i) => _envieddatal[i] ^ _enviedkeyl[i])); - static const List _enviedkeym = [1113073961]; + static const List _enviedkeym = [775661303]; - static const List _envieddatam = [1113073991]; + static const List _envieddatam = [775661209]; static final String m = String.fromCharCodes(List.generate( _envieddatam.length, @@ -12816,9 +12882,9 @@ final class _Env { growable: false, ).map((int i) => _envieddatam[i] ^ _enviedkeym[i])); - static const List _enviedkeyn = [3783724403]; + static const List _enviedkeyn = [493764909]; - static const List _envieddatan = [3783724305]; + static const List _envieddatan = [493764943]; static final String n = String.fromCharCodes(List.generate( _envieddatan.length, @@ -12826,9 +12892,9 @@ final class _Env { growable: false, ).map((int i) => _envieddatan[i] ^ _enviedkeyn[i])); - static const List _enviedkeyo = [2007287074]; + static const List _enviedkeyo = [4023197701]; - static const List _envieddatao = [2007287115]; + static const List _envieddatao = [4023197804]; static final String o = String.fromCharCodes(List.generate( _envieddatao.length, @@ -12836,9 +12902,9 @@ final class _Env { growable: false, ).map((int i) => _envieddatao[i] ^ _enviedkeyo[i])); - static const List _enviedkeyp = [770064759]; + static const List _enviedkeyp = [3606196178]; - static const List _envieddatap = [770064641]; + static const List _envieddatap = [3606196132]; static final String p = String.fromCharCodes(List.generate( _envieddatap.length, @@ -12846,9 +12912,9 @@ final class _Env { growable: false, ).map((int i) => _envieddatap[i] ^ _enviedkeyp[i])); - static const List _enviedkeyq = [1035975926]; + static const List _enviedkeyq = [966457191]; - static const List _envieddataq = [1035975831]; + static const List _envieddataq = [966457094]; static final String q = String.fromCharCodes(List.generate( _envieddataq.length, @@ -12856,9 +12922,9 @@ final class _Env { growable: false, ).map((int i) => _envieddataq[i] ^ _enviedkeyq[i])); - static const List _enviedkeyr = [3575839329]; + static const List _enviedkeyr = [2717145523]; - static const List _envieddatar = [3575839245]; + static const List _envieddatar = [2717145567]; static final String r = String.fromCharCodes(List.generate( _envieddatar.length, @@ -12866,9 +12932,9 @@ final class _Env { growable: false, ).map((int i) => _envieddatar[i] ^ _enviedkeyr[i])); - static const List _enviedkeys = [708247410]; + static const List _enviedkeys = [3181705678]; - static const List _envieddatas = [708247304]; + static const List _envieddatas = [3181705652]; static final String s = String.fromCharCodes(List.generate( _envieddatas.length, @@ -12876,9 +12942,9 @@ final class _Env { growable: false, ).map((int i) => _envieddatas[i] ^ _enviedkeys[i])); - static const List _enviedkeyt = [1462885198]; + static const List _enviedkeyt = [1336058721]; - static const List _envieddatat = [1462885165]; + static const List _envieddatat = [1336058626]; static final String t = String.fromCharCodes(List.generate( _envieddatat.length, @@ -12886,9 +12952,9 @@ final class _Env { growable: false, ).map((int i) => _envieddatat[i] ^ _enviedkeyt[i])); - static const List _enviedkeyu = [3739151416]; + static const List _enviedkeyu = [1088785564]; - static const List _envieddatau = [3739151440]; + static const List _envieddatau = [1088785652]; static final String u = String.fromCharCodes(List.generate( _envieddatau.length, @@ -12896,9 +12962,9 @@ final class _Env { growable: false, ).map((int i) => _envieddatau[i] ^ _enviedkeyu[i])); - static const List _enviedkeyv = [2662581886]; + static const List _enviedkeyv = [1479032422]; - static const List _envieddatav = [2662581774]; + static const List _envieddatav = [1479032342]; static final String v = String.fromCharCodes(List.generate( _envieddatav.length, @@ -12906,9 +12972,9 @@ final class _Env { growable: false, ).map((int i) => _envieddatav[i] ^ _enviedkeyv[i])); - static const List _enviedkeyw = [3498508020]; + static const List _enviedkeyw = [1410103623]; - static const List _envieddataw = [3498507904]; + static const List _envieddataw = [1410103603]; static final String w = String.fromCharCodes(List.generate( _envieddataw.length, @@ -12916,9 +12982,9 @@ final class _Env { growable: false, ).map((int i) => _envieddataw[i] ^ _enviedkeyw[i])); - static const List _enviedkeyx = [907463890]; + static const List _enviedkeyx = [1304088790]; - static const List _envieddatax = [907463862]; + static const List _envieddatax = [1304088754]; static final String x = String.fromCharCodes(List.generate( _envieddatax.length, @@ -12926,9 +12992,9 @@ final class _Env { growable: false, ).map((int i) => _envieddatax[i] ^ _enviedkeyx[i])); - static const List _enviedkeyy = [4234849242]; + static const List _enviedkeyy = [1351336806]; - static const List _envieddatay = [4234849193]; + static const List _envieddatay = [1351336725]; static final String y = String.fromCharCodes(List.generate( _envieddatay.length, @@ -12936,9 +13002,9 @@ final class _Env { growable: false, ).map((int i) => _envieddatay[i] ^ _enviedkeyy[i])); - static const List _enviedkeyz = [993653623]; + static const List _enviedkeyz = [420947929]; - static const List _envieddataz = [993653530]; + static const List _envieddataz = [420947892]; static final String z = String.fromCharCodes(List.generate( _envieddataz.length, @@ -12947,85 +13013,85 @@ final class _Env { ).map((int i) => _envieddataz[i] ^ _enviedkeyz[i])); static const List _enviedkeykeyOfApp = [ - 737221370, - 369145243, - 1722608103, - 319218073, - 868553379, - 1243027350, - 305701998, - 2799593867, - 4161860662, - 645216568, - 2274517069, - 3991029625, - 633555885, - 3526090868, - 1017912832, - 1378969199, - 1984596014, - 3743288617, - 1050438536, - 1625963056, - 4294244547, - 4098360146, - 2396486816, - 2776509622, - 244712926, - 3076306074, - 2971868632, - 1585392295, - 2985921549, - 834885838, - 2460877066, - 4260875487, - 3855507550, - 1038313282, - 3524366194, - 3994072033, - 706315910, - 2119621937, + 2109733411, + 4065272708, + 3180171115, + 2615729543, + 2588552724, + 3438999729, + 2981587686, + 1112125767, + 3355124550, + 1551407717, + 1989181027, + 3426899292, + 1378253390, + 1181220903, + 3253218303, + 2363637934, + 3492924112, + 3674467004, + 1022913680, + 1036393177, + 1903902788, + 1344586572, + 2211491204, + 4241261953, + 1037371226, + 99525008, + 3622966885, + 239711128, + 3367919441, + 94780013, + 946646050, + 2028474840, + 2983118724, + 2106659786, + 560613136, + 3324401158, + 1256343786, + 4261788345, ]; static const List _envieddatakeyOfApp = [ - 737221272, - 369145338, - 1722608011, - 319218154, - 868553414, - 1243027424, - 305701934, - 2799593916, - 4161860608, - 645216513, - 2274517115, - 3991029517, - 633555916, - 3526090774, - 1017912942, - 1378969102, - 1984596047, - 3743288659, - 1050438637, - 1625963075, - 4294244526, - 4098360119, - 2396486856, - 2776509651, - 244712876, - 3076306175, - 2971868607, - 1585392349, - 2985921661, - 834885800, - 2460877152, - 4260875440, - 3855507462, - 1038313264, - 3524366122, - 3994071955, - 706315972, - 2119621955, + 2109733441, + 4065272805, + 3180171015, + 2615729652, + 2588552817, + 3438999751, + 2981587622, + 1112125808, + 3355124592, + 1551407708, + 1989181013, + 3426899240, + 1378253359, + 1181220933, + 3253218193, + 2363637967, + 3492924081, + 3674467014, + 1022913781, + 1036393130, + 1903902761, + 1344586537, + 2211491308, + 4241262052, + 1037371176, + 99525109, + 3622966786, + 239711202, + 3367919393, + 94779915, + 946646088, + 2028474807, + 2983118812, + 2106659768, + 560613192, + 3324401268, + 1256343720, + 4261788363, ]; static final String keyOfApp = String.fromCharCodes(List.generate( @@ -13035,53 +13101,53 @@ final class _Env { ).map((int i) => _envieddatakeyOfApp[i] ^ _enviedkeykeyOfApp[i])); static const List _enviedkeyinitializationVector = [ - 3635815207, - 453767232, - 1182787676, - 3136825516, - 3577950102, - 3014404719, - 2793409857, - 1752764365, - 3187658772, - 4016134702, - 976749, - 3514395586, - 1983825889, - 2267838664, - 3172648930, - 4191582625, - 1892578606, - 1448432109, - 3928659209, - 1151265388, - 4200269382, - 211740698, + 3616153342, + 1234324916, + 765227704, + 2588638989, + 557979068, + 1406370978, + 1458301245, + 2997376293, + 2704859731, + 2056739636, + 3313511172, + 2765489388, + 1787549756, + 3051368987, + 3656906667, + 731561107, + 840302779, + 4218856573, + 1003770013, + 2259208916, + 3150536176, + 2177073901, ]; static const List _envieddatainitializationVector = [ - 3635815254, - 453767224, - 1182787642, - 3136825557, - 3577950204, - 3014404634, - 2793409834, - 1752764346, - 3187658875, - 4016134731, - 976650, - 3514395568, - 1983825807, - 2267838634, - 3172648843, - 4191582679, - 1892578678, - 1448432031, - 3928659281, - 1151265310, - 4200269316, - 211740776, + 3616153231, + 1234324940, + 765227742, + 2588639092, + 557979094, + 1406371031, + 1458301270, + 2997376338, + 2704859708, + 2056739665, + 3313511267, + 2765489310, + 1787549778, + 3051369081, + 3656906690, + 731561189, + 840302819, + 4218856463, + 1003770053, + 2259208870, + 3150536114, + 2177073823, ]; static final String initializationVector = String.fromCharCodes( @@ -13094,53 +13160,53 @@ final class _Env { _enviedkeyinitializationVector[i])); static const List _enviedkeyemailService = [ - 3757736252, - 3530158478, - 1690974045, - 4047876702, - 3547870269, - 4237459698, - 1140595114, - 205393449, - 742714358, - 4221307462, - 2269677427, - 506590645, - 4152850886, - 389921230, - 854624428, - 3274461352, - 2803926361, - 4023450891, - 3556696491, - 4026930413, - 3090981958, - 3577906890, + 975854491, + 2947470976, + 2289723112, + 283151907, + 3726714289, + 2244184592, + 733351829, + 1768205848, + 1681957236, + 3108874245, + 1139568126, + 2735024736, + 2704816221, + 3984419708, + 727355730, + 2263923011, + 3793139494, + 3392437762, + 1152073931, + 2312490110, + 26353163, + 328760237, ]; static const List _envieddataemailService = [ - 3757736271, - 3530158571, - 1690974011, - 4047876667, - 3547870287, - 4237459585, - 1140595151, - 205393499, - 742714240, - 4221307439, - 2269677328, - 506590672, - 4152850822, - 389921193, - 854624449, - 3274461385, - 2803926320, - 4023450983, - 3556696453, - 4026930318, - 3090981929, - 3577906855, + 975854568, + 2947471077, + 2289723022, + 283151942, + 3726714307, + 2244184675, + 733351920, + 1768205930, + 1681957122, + 3108874348, + 1139568029, + 2735024645, + 2704816157, + 3984419611, + 727355711, + 2263922978, + 3793139535, + 3392437870, + 1152073957, + 2312490013, + 26353252, + 328760256, ]; static final String emailService = String.fromCharCodes(List.generate( @@ -13150,135 +13216,135 @@ final class _Env { ).map((int i) => _envieddataemailService[i] ^ _enviedkeyemailService[i])); static const List _enviedkeysss_encryptionSalt = [ - 1002437411, - 1276596604, - 3686199103, - 3942226461, - 1476043512, - 3342451630, - 3109239762, - 1188176467, - 148259435, - 1479660765, - 998215119, - 3964599801, - 3253374012, - 447604137, - 3347121049, - 1946668561, - 1357464645, - 2710667364, - 470836777, - 3907619736, - 2060266349, - 636597406, - 4142349334, - 2604926716, - 142934911, - 2025191727, - 3482668585, - 2025098431, - 2744045050, - 2949710863, - 4130944691, - 3787627019, - 399942557, - 1923329033, - 3028447935, - 1087236179, - 3289537550, - 2381295466, - 1293468443, - 968018163, - 2821762394, - 3298370204, - 4247843360, - 823955713, - 3568230274, - 2300037345, - 1309323818, - 2885137547, - 981224663, - 736049254, - 1977988263, - 3414144505, - 331044559, - 1722930122, - 2229941005, - 4096792598, - 3915006122, - 1916175725, - 1187133702, - 686591299, - 1270170285, - 662310015, - 915441541, + 1519183173, + 3350107844, + 1282330233, + 3521294272, + 693190537, + 1030272519, + 3460445718, + 640653060, + 2574214062, + 187640275, + 2785147919, + 1058237669, + 1707125299, + 400767572, + 729216579, + 1555355690, + 3646818427, + 3331849364, + 1726927412, + 812452633, + 2522660830, + 3701662228, + 1234180961, + 2324501507, + 3805189340, + 2448427429, + 1959309195, + 962278704, + 217962453, + 3294496384, + 3384851927, + 25420943, + 4105286313, + 2868422693, + 2384230314, + 3953278441, + 3125132598, + 2200605504, + 3333622184, + 2984779563, + 3010526212, + 2155306553, + 2768847780, + 320270368, + 28839809, + 2223617327, + 646086920, + 2095462841, + 644897195, + 1132862536, + 2256280000, + 1599064275, + 354500194, + 92829515, + 1740222147, + 3650778127, + 2389774502, + 3109060761, + 1131299478, + 1088562775, + 3612711203, + 3437301132, + 746625117, ]; static const List _envieddatasss_encryptionSalt = [ - 1002437465, - 1276596507, - 3686199058, - 3942226539, - 1476043411, - 3342451650, - 3109239739, - 1188176438, - 148259398, - 1479660783, - 998215075, - 3964599752, - 3253374054, - 447604165, - 3347121129, - 1946668649, - 1357464620, - 2710667304, - 470836835, - 3907619758, - 2060266266, - 636597455, - 4142349401, - 2604926602, - 142934813, - 2025191757, - 3482668573, - 2025098475, - 2744044948, - 2949710924, - 4130944650, - 3787627091, - 399942639, - 1923329137, - 3028447960, - 1087236102, - 3289537611, - 2381295379, - 1293468493, - 968018082, - 2821762323, - 3298370281, - 4247843350, - 823955797, - 3568230347, - 2300037285, - 1309323806, - 2885137658, - 981224583, - 736049234, - 1977988321, - 3414144428, - 331044506, - 1722930107, - 2229941090, - 4096792645, - 3915006111, - 1916175669, - 1187133812, - 686591259, - 1270170305, - 662309949, - 915441641, + 1519183167, + 3350107811, + 1282330196, + 3521294262, + 693190626, + 1030272619, + 3460445823, + 640653153, + 2574214019, + 187640289, + 2785148003, + 1058237652, + 1707125353, + 400767544, + 729216563, + 1555355730, + 3646818322, + 3331849432, + 1726927486, + 812452655, + 2522660777, + 3701662277, + 1234180910, + 2324501621, + 3805189310, + 2448427463, + 1959309247, + 962278756, + 217962427, + 3294496451, + 3384851950, + 25421015, + 4105286363, + 2868422749, + 2384230349, + 3953278396, + 3125132659, + 2200605497, + 3333622270, + 2984779642, + 3010526285, + 2155306572, + 2768847762, + 320270452, + 28839880, + 2223617387, + 646086972, + 2095462856, + 644897275, + 1132862588, + 2256279942, + 1599064198, + 354500151, + 92829498, + 1740222124, + 3650778204, + 2389774483, + 3109060801, + 1131299556, + 1088562703, + 3612711247, + 3437301198, + 746625073, ]; static final String sss_encryptionSalt = String.fromCharCodes( @@ -13290,73 +13356,73 @@ final class _Env { _envieddatasss_encryptionSalt[i] ^ _enviedkeysss_encryptionSalt[i])); static const List _enviedkeysss_pass = [ - 2747931136, - 2869758478, - 2901687250, - 3674333311, - 2077515912, - 1676896265, - 2820997702, - 2878017126, - 1352680310, - 388738787, - 292462729, - 2947139344, - 3697171721, - 2639866237, - 1006707417, - 3915118699, - 2148369991, - 333802985, - 460129875, - 1288609461, - 2055047045, - 568974885, - 2329885766, - 921811783, - 1672294058, - 1493692829, - 722682121, - 707970428, - 1166456072, - 3944730669, - 48488915, - 2985822875, + 3865703878, + 1851968517, + 1772290745, + 1971561729, + 1196593385, + 3111149423, + 2469198566, + 701371499, + 2019714711, + 4040933535, + 275439759, + 1320043078, + 4068200971, + 1298959801, + 2248523887, + 168219730, + 3264411399, + 3615715021, + 2706095985, + 3007047176, + 2129887018, + 2976765127, + 3293924465, + 4275061370, + 2968038704, + 1508122571, + 2827192242, + 3165212251, + 3439504231, + 2330375399, + 196757856, + 936409364, ]; static const List _envieddatasss_pass = [ - 2747931255, - 2869758591, - 2901687228, - 3674333202, - 2077516025, - 1676896376, - 2820997685, - 2878017036, - 1352680207, - 388738709, - 292462846, - 2947139430, - 3697171763, - 2639866131, - 1006707368, - 3915118617, - 2148369962, - 333802928, - 460129817, - 1288609509, - 2055047109, - 568974868, - 2329885809, - 921811828, - 1672294045, - 1493692837, - 722682193, - 707970318, - 1166456144, - 3944730689, - 48488849, - 2985822967, + 3865703857, + 1851968628, + 1772290775, + 1971561836, + 1196593304, + 3111149342, + 2469198485, + 701371393, + 2019714798, + 4040933609, + 275439864, + 1320043056, + 4068201009, + 1298959831, + 2248523806, + 168219680, + 3264411498, + 3615714964, + 2706095931, + 3007047256, + 2129887082, + 2976765174, + 3293924422, + 4275061321, + 2968038663, + 1508122611, + 2827192298, + 3165212201, + 3439504191, + 2330375307, + 196757794, + 936409464, ]; static final String sss_pass = String.fromCharCodes(List.generate( @@ -13366,21 +13432,21 @@ final class _Env { ).map((int i) => _envieddatasss_pass[i] ^ _enviedkeysss_pass[i])); static const List _enviedkeyaddd = [ - 1898037812, - 672528233, - 2411052927, - 446276678, - 1096083963, - 3735439123, + 103743231, + 1651712580, + 3787002226, + 1668911437, + 3340099680, + 1954702736, ]; static const List _envieddataaddd = [ - 1898037878, - 672528133, - 2411052861, - 446276650, - 1096083893, - 3735439231, + 103743165, + 1651712552, + 3787002160, + 1668911393, + 3340099630, + 1954702844, ]; static final String addd = String.fromCharCodes(List.generate( @@ -13390,35 +13456,35 @@ final class _Env { ).map((int i) => _envieddataaddd[i] ^ _enviedkeyaddd[i])); static const List _enviedkeypassnpassenger = [ - 4267335078, - 4204657130, - 1281084306, - 1822032932, - 3175750404, - 1137513229, - 1624757084, - 3717224503, - 603175625, - 3573758605, - 1137882763, - 1718864519, - 2367410150, + 1667939497, + 3030532290, + 512235273, + 1246739739, + 1322556395, + 3812185560, + 207798604, + 725503233, + 953949412, + 51208264, + 635023425, + 3955769699, + 3590245687, ]; static const List _envieddatapassnpassenger = [ - 4267335118, - 4204657032, - 1281084405, - 1822032966, - 3175750509, - 1137513337, - 1624757054, - 3717224559, - 603175611, - 3573758677, - 1137882873, - 1718864581, - 2367410068, + 1667939521, + 3030532256, + 512235374, + 1246739833, + 1322556290, + 3812185516, + 207798574, + 725503321, + 953949334, + 51208208, + 635023411, + 3955769633, + 3590245701, ]; static final String passnpassenger = String.fromCharCodes(List.generate( @@ -13428,15 +13494,15 @@ final class _Env { ).map((int i) => _envieddatapassnpassenger[i] ^ _enviedkeypassnpassenger[i])); static const List _enviedkeynewId = [ - 1708961613, - 3143686563, - 3680995221, + 4159278390, + 2770117670, + 1198028629, ]; static const List _envieddatanewId = [ - 1708961571, - 3143686598, - 3680995298, + 4159278424, + 2770117699, + 1198028578, ]; static final String newId = String.fromCharCodes(List.generate( @@ -13446,33 +13512,33 @@ final class _Env { ).map((int i) => _envieddatanewId[i] ^ _enviedkeynewId[i])); static const List _enviedkeyallowed = [ - 2888874493, - 1093801966, - 3320064253, - 1979931149, - 3388111246, - 2089115130, - 301467299, - 1358596359, - 1608776289, - 4172621919, - 3279148932, - 3240447191, + 4023085610, + 2924250902, + 3166904704, + 2376980933, + 3213104559, + 814164845, + 2313024996, + 654720117, + 3926211393, + 1160205279, + 63955773, + 370711532, ]; static const List _envieddataallowed = [ - 2888874409, - 1093801884, - 3320064148, - 1979931261, - 3388111348, - 2089115070, - 301467345, - 1358596462, - 1608776215, - 4172621882, - 3279149046, - 3240447213, + 4023085694, + 2924250980, + 3166904809, + 2376980917, + 3213104597, + 814164777, + 2313024918, + 654720028, + 3926211383, + 1160205242, + 63955791, + 370711510, ]; static final String allowed = String.fromCharCodes(List.generate( @@ -13482,33 +13548,33 @@ final class _Env { ).map((int i) => _envieddataallowed[i] ^ _enviedkeyallowed[i])); static const List _enviedkeyallowedWallet = [ - 3853938684, - 1152968613, - 3956190127, - 2953498893, - 1848046511, - 577904594, - 4200141909, - 3520148177, - 1954672960, - 3846864451, - 1165090405, - 819178616, + 1927624979, + 1845017790, + 4231102437, + 1325126951, + 989812008, + 2556314514, + 2491921000, + 3384009027, + 2444271481, + 2408042274, + 3526762830, + 2026929828, ]; static const List _envieddataallowedWallet = [ - 3853938600, - 1152968663, - 3956190150, - 2953499005, - 1848046549, - 577904517, - 4200141876, - 3520148157, - 1954672940, - 3846864422, - 1165090321, - 819178562, + 1927625031, + 1845017804, + 4231102348, + 1325126999, + 989812050, + 2556314565, + 2491920905, + 3384009007, + 2444271381, + 2408042311, + 3526762810, + 2026929822, ]; static final String allowedWallet = String.fromCharCodes(List.generate( diff --git a/lib/main.dart b/lib/main.dart index 6bddc31..3006e39 100755 --- a/lib/main.dart +++ b/lib/main.dart @@ -35,6 +35,7 @@ import 'print.dart'; import 'splash_screen_page.dart'; import 'views/home/Captin/orderCaptin/order_request_page.dart'; import 'views/home/Captin/driver_map_page.dart'; +import 'controller/profile/setting_controller.dart'; final box = GetStorage(); const storage = FlutterSecureStorage(); @@ -315,10 +316,15 @@ class _MyAppState extends State with WidgetsBindingObserver { Future _initApp() async { try { - if (!Get.isRegistered()) + if (!Get.isRegistered()) { Get.put(NotificationController()); - if (!Get.isRegistered()) + } + if (!Get.isRegistered()) { Get.put(FirebaseMessagesController()).getToken(); + } + if (!Get.isRegistered()) { + Get.put(SettingController()); + } await FirebaseMessaging.instance.requestPermission(); await NotificationController().initNotifications(); @@ -433,12 +439,15 @@ class _MyAppState extends State with WidgetsBindingObserver { print("📥 Server Response: $res"); - if (Get.isDialogOpen == true) Get.back(); + // إغلاق أي ديالوج مفتوح باستخدام المفتاح العالمي لضمان الموثوقية + if (Get.isDialogOpen == true) { + navigatorKey.currentState?.pop(); + } bool isFailure = false; - if (res is Map && res['status'] == 'failure') + if (res is Map && res['status'] == 'failure') { isFailure = true; - else if (res == 'failure') isFailure = true; + } else if (res == 'failure') isFailure = true; if (isFailure) { Get.defaultDialog( @@ -465,7 +474,9 @@ class _MyAppState extends State with WidgetsBindingObserver { Get.offAll(() => PassengerLocationMapPage(), arguments: rideArgs); } catch (e) { - if (Get.isDialogOpen == true) Get.back(); + if (Get.isDialogOpen == true) { + navigatorKey.currentState?.pop(); + } print("❌ Error in accept process: $e"); Get.snackbar("خطأ", "حدث خطأ غير متوقع"); } @@ -511,13 +522,18 @@ class _MyAppState extends State with WidgetsBindingObserver { @override Widget build(BuildContext context) { final LocaleController localController = Get.put(LocaleController()); + final SettingController settingController = Get.put(SettingController()); + return GetMaterialApp( navigatorKey: navigatorKey, title: AppInformation.appName, translations: MyTranslation(), debugShowCheckedModeBanner: false, locale: localController.language, - theme: localController.appTheme, + theme: localController.lightTheme, + darkTheme: localController.darkTheme, + themeMode: settingController.isDarkMode ? ThemeMode.dark : ThemeMode.light, + initialRoute: '/', getPages: [ GetPage(name: '/', page: () => SplashScreen()), @@ -529,3 +545,4 @@ class _MyAppState extends State with WidgetsBindingObserver { ); } } + diff --git a/lib/models/model/order_data.dart b/lib/models/model/order_data.dart index 62ea9d9..512b5f6 100755 --- a/lib/models/model/order_data.dart +++ b/lib/models/model/order_data.dart @@ -1,5 +1,7 @@ // lib/models/model/order_data.dart +import 'package:get/get.dart'; + class OrderData { final String customerName; final String customerToken; @@ -122,17 +124,17 @@ class OrderData { static String _getRideType(String type) { switch (type) { case 'Comfort': - return '‏كمفورت ❄️'; + return 'Comfort ❄️'.tr; case 'Lady': - return '‏ليدي 👩'; + return 'Lady 👩'.tr; case 'Speed': - return '‏‏‏سبيد 🔻'; + return 'Speed 🔻'.tr; case 'Mashwari': - return '‏مشواري'; + return 'Mashwari'.tr; case 'Rayeh Gai': - return 'رايح جاي'; + return 'Rayeh Gai'.tr; default: - return type; + return type.tr; } } diff --git a/lib/print.dart b/lib/print.dart index a3d59f6..63efb2d 100755 --- a/lib/print.dart +++ b/lib/print.dart @@ -4,7 +4,7 @@ class Log { Log._(); static void print(String value, {StackTrace? stackTrace}) { - developer.log(value, name: 'LOG', stackTrace: stackTrace); + // developer.log(value, name: 'LOG', stackTrace: stackTrace); } static Object? inspect(Object? object) { diff --git a/lib/services/offline_map_service.dart b/lib/services/offline_map_service.dart new file mode 100644 index 0000000..d13d88a --- /dev/null +++ b/lib/services/offline_map_service.dart @@ -0,0 +1,119 @@ +import 'dart:io'; + +import 'package:get/get.dart'; +import 'package:intaleq_maps/intaleq_maps.dart'; +import 'dart:math' as math; +import '../main.dart'; +import '../print.dart'; + +class OfflineMapService { + static final OfflineMapService instance = OfflineMapService._(); + OfflineMapService._(); + + final _offlineRegionName = "UserRegion"; + bool _isDownloading = false; + LatLng? _lastDownloadedCenter; + + /// Calculate bounding box for a given center and radius in km + LatLngBounds _calculateBounds(LatLng center, double radiusKm) { + const double earthRadius = 6371.0; + + // Latitude degrees per km + double latDelta = (radiusKm / earthRadius) * (180 / math.pi); + // Longitude degrees per km at given latitude + double lngDelta = (radiusKm / earthRadius) * + (180 / math.pi) / + math.cos(center.latitude * math.pi / 180); + + return LatLngBounds( + southwest: + LatLng(center.latitude - latDelta, center.longitude - lngDelta), + northeast: + LatLng(center.latitude + latDelta, center.longitude + lngDelta), + ); + } + + /// Downloads a specified radius around a coordinate + Future downloadRegion(LatLng center, + {double radiusKm = 10.0, + double minZoom = 6.0, + double maxZoom = 15.0}) async { + if (_isDownloading) return; + + // Avoid re-downloading if the user hasn't moved significantly (e.g. > 5km) + if (_lastDownloadedCenter != null) { + double distance = _calculateDistance(center, _lastDownloadedCenter!); + if (distance < 5.0) return; // skip if close to previously downloaded + } + + _isDownloading = true; + + try { + final bounds = _calculateBounds(center, radiusKm); + + // Select style based on current theme + final String styleStr = + Get.isDarkMode ? "assets/style_dark.json" : "assets/style.json"; + + // iOS native crash guard: MLNTilePyramidOfflineRegion does not support relative asset URLs. + // We skip native offline registration on iOS if using local assets to ensure stability. + if (Platform.isIOS && !styleStr.startsWith('http')) { + Log.print( + "ℹ️ Skipping native offline registration on iOS for asset-based style to prevent crash."); + return; + } + + final regionDefinition = OfflineRegionDefinition( + bounds: bounds, + mapStyleUrl: styleStr, + minZoom: minZoom, + maxZoom: maxZoom, + ); + + // We'll update the last downloaded center immediately + _lastDownloadedCenter = center; + + // MapLibre standard API for offline downloads + await downloadOfflineRegion(regionDefinition, metadata: { + 'name': '$_offlineRegionName-${center.latitude}-${center.longitude}', + 'downloadDate': DateTime.now().toIso8601String(), + }); + + // Reassurance log for the user + Log.print("📍 Map Ready: Service is utilizing local tile cache."); + Log.print( + "✅ Offline Map Cached for Region: $center (radius: ${radiusKm}km, style: $styleStr)"); + } catch (e) { + Log.print("⚠️ Offline Map Download Failed: $e"); + } finally { + _isDownloading = false; + } + } + + /// Helper to calculate distance in km + double _calculateDistance(LatLng p1, LatLng p2) { + var p = 0.017453292519943295; + var c = math.cos; + var a = 0.5 - + c((p2.latitude - p1.latitude) * p) / 2 + + c(p1.latitude * p) * + c(p2.latitude * p) * + (1 - c((p2.longitude - p1.longitude) * p)) / + 2; + return 12742 * math.asin(math.sqrt(a)); + } + + /// Clears all offline map regions and tiles from local storage + Future clearCache() async { + try { + Log.print("♻️ Purging MapLibre Offline Cache..."); + final List regions = await getListOfRegions(); + for (var region in regions) { + await deleteOfflineRegion(region.id); + } + Log.print("✅ Map cache cleared successfully. ${regions.length} regions removed."); + } catch (e) { + Log.print("⚠️ Failed to clear map cache: $e"); + } + } +} diff --git a/lib/translations_ar.json b/lib/translations_ar.json index 7c3a703..6c5a788 100644 --- a/lib/translations_ar.json +++ b/lib/translations_ar.json @@ -749,5 +749,58 @@ "My Profile": "", "Female": "", "Update Available": "", - "Recorded Trips for Safety": "" + "Recorded Trips for Safety": "", + "Available Balance": "الرصيد المتاح", + "Available Balance Ar": "Available Balance", + "Last updated:": "آخر تحديث:", + "Just now": "الآن", + "Add Balance": "شحن الرصيد", + "Withdraw": "سحب", + "Transfer": "تحويل", + "History": "السجل", + "Earnings Summary": "ملخص الأرباح", + "Wallet Details": "تفاصيل المحفظة", + "Progress:": "التقدم:", + "Claim Reward": "الحصول على المكافأة", + "Today": "اليوم", + "Yesterday": "أمس", + "This Week": "هذا الأسبوع", + "Trip Payment": "دفع رحلة", + "Total Earnings": "إجمالي الأرباح", + "Total Trips": "إجمالي الرحلات", + "Commission": "العمولة", + "Net Profit": "صافي الربح", + "Cash Earnings": "أرباح نقداً", + "Card Earnings": "أرباح البطاقة", + "Pending": "قيد الانتظار", + "View All": "عرض الكل", + "Last updated: before 2 min": "آخر تحديث: قبل دقيقتين", + "PTS": "نقطة", + "E-Cash payment gateway": "بوابة دفع E-Cash", + "Syriatel Cash": "سيريتل كاش", + "Pay using Syriatel mobile wallet": "الدفع عبر محفظة سيريتل", + "Sham Cash": "شام كاش", + "Pay using Sham Cash wallet": "الدفع عبر محفظة شام كاش", + "Confirm payment with biometrics": "تأكيد الدفع بالبصمة", + "Wallet Phone Number": "رقم هاتف المحفظة", + "Confirm": "تأكيد", + "Buy Points Packages": "باقات شحن الرصيد", + "Select Payment Method": "اختر طريقة الدفع", + "You are buying": "أنت تقوم بشراء", + "Points": "ل.س", + "for": "بـ", + "Use Touch ID or Face ID to confirm payment": "استخدم بصمة الإصبع أو الوجه لتأكيد الدفع", + "Your Budget less than needed": "رصيدك أقل من المطلوب", + "Pay from my budget": "الدفع من الرصيد المتاح", + "Select how you want to charge your account": "اختر طريقة شحن حسابك", + "Pay": "دفع", + "Cancel": "إلغاء", + "from 7:00am to 10:00am": "من 7:00 صباحاً حتى 10:00 صباحاً", + "from 3:00pm to 6:00 pm": "من 3:00 مساءً حتى 6:00 مساءً", + "Morning Promo": "عرض الصباح", + "Afternoon Promo": "عرض بعد الظهر", + "Recharge Balance": "شحن الرصيد", + "Recharge Balance Packages": "باقات شحن الرصيد", + "Price:": "السعر:", + "Amount to charge:": "المبلغ المطلوب شحنه:" } \ No newline at end of file diff --git a/lib/translations_en.json b/lib/translations_en.json index 7c3a703..ef679d5 100644 --- a/lib/translations_en.json +++ b/lib/translations_en.json @@ -749,5 +749,58 @@ "My Profile": "", "Female": "", "Update Available": "", - "Recorded Trips for Safety": "" + "Recorded Trips for Safety": "", + "Available Balance": "Available Balance", + "Available Balance Ar": "الرصيد المتاح", + "Last updated:": "Last updated:", + "Just now": "Just now", + "Add Balance": "Add Balance", + "Withdraw": "Withdraw", + "Transfer": "Transfer", + "History": "History", + "Earnings Summary": "Earnings Summary", + "Wallet Details": "Wallet Details", + "Progress:": "Progress:", + "Claim Reward": "Claim Reward", + "Today": "Today", + "Yesterday": "Yesterday", + "This Week": "This Week", + "Trip Payment": "Trip Payment", + "Total Earnings": "Total Earnings", + "Total Trips": "Total Trips", + "Commission": "Commission", + "Net Profit": "Net Profit", + "Cash Earnings": "Cash Earnings", + "Card Earnings": "Card Earnings", + "Pending": "Pending", + "View All": "View All", + "Last updated: before 2 min": "Last updated: before 2 min", + "PTS": "PTS", + "E-Cash payment gateway": "E-Cash payment gateway", + "Syriatel Cash": "Syriatel Cash", + "Pay using Syriatel mobile wallet": "Pay using Syriatel mobile wallet", + "Sham Cash": "Sham Cash", + "Pay using Sham Cash wallet": "Pay using Sham Cash wallet", + "Confirm payment with biometrics": "Confirm payment with biometrics", + "Wallet Phone Number": "Wallet Phone Number", + "Confirm": "Confirm", + "Buy Points Packages": "Recharge Balance Packages", + "Select Payment Method": "Select Payment Method", + "You are buying": "You are buying", + "Points": "SYP", + "for": "for", + "Use Touch ID or Face ID to confirm payment": "Use Touch ID or Face ID to confirm payment", + "Your Budget less than needed": "Your Budget less than needed", + "Pay from my budget": "Pay from my budget", + "Select how you want to charge your account": "Select how you want to charge your account", + "Pay": "Pay", + "Cancel": "Cancel", + "from 7:00am to 10:00am": "from 7:00am to 10:00am", + "from 3:00pm to 6:00 pm": "from 3:00pm to 6:00 pm", + "Morning Promo": "Morning Promo", + "Afternoon Promo": "Afternoon Promo", + "Recharge Balance": "Recharge Balance", + "Recharge Balance Packages": "Recharge Balance Packages", + "Price:": "Price:", + "Amount to charge:": "Amount to charge:" } \ No newline at end of file diff --git a/lib/views/Rate/rate_passenger.dart b/lib/views/Rate/rate_passenger.dart index 4ab7cfa..481db67 100755 --- a/lib/views/Rate/rate_passenger.dart +++ b/lib/views/Rate/rate_passenger.dart @@ -21,13 +21,11 @@ class RatePassenger extends StatelessWidget { @override Widget build(BuildContext context) { return Scaffold( - backgroundColor: Colors.grey[50], + backgroundColor: Theme.of(context).scaffoldBackgroundColor, appBar: AppBar( - title: Text('Trip Completed'.tr, - style: const TextStyle(color: Colors.black)), + title: Text('Trip Completed'.tr), centerTitle: true, automaticallyImplyLeading: false, - backgroundColor: Colors.white, elevation: 0, ), body: GetBuilder( @@ -156,23 +154,23 @@ class RatePassenger extends StatelessWidget { Widget _buildWalletSection(BuildContext context, RateController controller) { return Container( decoration: BoxDecoration( - color: Colors.white, + color: Theme.of(context).cardColor, borderRadius: BorderRadius.circular(16), - border: Border.all(color: Colors.grey.shade200), + border: Border.all(color: Theme.of(context).dividerColor), ), child: Padding( padding: const EdgeInsets.all(20.0), child: AnimatedSwitcher( duration: const Duration(milliseconds: 300), child: controller.ispassengerWantWalletFromDriver - ? _buildAmountInput(controller) - : _buildWalletQuery(controller), + ? _buildAmountInput(context, controller) + : _buildWalletQuery(context, controller), ), ), ); } - Widget _buildWalletQuery(RateController controller) { + Widget _buildWalletQuery(BuildContext context, RateController controller) { return Column( key: const ValueKey('walletQuery'), children: [ @@ -181,11 +179,11 @@ class RatePassenger extends StatelessWidget { Container( padding: const EdgeInsets.all(10), decoration: BoxDecoration( - color: Colors.orange.withOpacity(0.1), + color: Colors.amber.withOpacity(0.1), shape: BoxShape.circle, ), - child: const Icon(Icons.account_balance_wallet, - color: Colors.orange), + child: + const Icon(Icons.account_balance_wallet, color: Colors.amber), ), const SizedBox(width: 15), Expanded( @@ -206,8 +204,8 @@ class RatePassenger extends StatelessWidget { child: OutlinedButton( onPressed: () {}, // Optional logic style: OutlinedButton.styleFrom( - foregroundColor: Colors.grey, - side: BorderSide(color: Colors.grey.shade300), + foregroundColor: Theme.of(context).hintColor, + side: BorderSide(color: Theme.of(context).dividerColor), padding: const EdgeInsets.symmetric(vertical: 12), shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(10)), @@ -235,14 +233,17 @@ class RatePassenger extends StatelessWidget { ); } - Widget _buildAmountInput(RateController controller) { + Widget _buildAmountInput(BuildContext context, RateController controller) { return Column( key: const ValueKey('amountInput'), crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( "Enter Amount Paid".tr, - style: const TextStyle(fontSize: 16, fontWeight: FontWeight.bold), + style: Theme.of(context) + .textTheme + .titleMedium + ?.copyWith(fontWeight: FontWeight.bold), ), const SizedBox(height: 12), Form( @@ -279,11 +280,12 @@ class RatePassenger extends StatelessWidget { Text( 'Rate Passenger'.tr, style: TextStyle( - color: Colors.grey[600], + color: Theme.of(context).hintColor, fontSize: 14, fontWeight: FontWeight.w500, ), ), + const SizedBox(height: 12), RatingBar.builder( initialRating: 0, @@ -306,19 +308,20 @@ class RatePassenger extends StatelessWidget { TextField( controller: controller.comment, maxLines: 2, + style: Theme.of(context).textTheme.bodyLarge, decoration: InputDecoration( hintText: 'Any comments about the passenger?'.tr, filled: true, - fillColor: Colors.white, + fillColor: Theme.of(context).cardColor, contentPadding: const EdgeInsets.symmetric(horizontal: 16, vertical: 12), border: OutlineInputBorder( borderRadius: BorderRadius.circular(12), - borderSide: BorderSide.none, + borderSide: BorderSide(color: Theme.of(context).dividerColor), ), enabledBorder: OutlineInputBorder( borderRadius: BorderRadius.circular(12), - borderSide: BorderSide(color: Colors.grey.shade200), + borderSide: BorderSide(color: Theme.of(context).dividerColor), ), ), ), diff --git a/lib/views/auth/captin/camera_widgets/camera_lisence_page.dart b/lib/views/auth/captin/camera_widgets/camera_lisence_page.dart index ca0d3c8..91c636b 100755 --- a/lib/views/auth/captin/camera_widgets/camera_lisence_page.dart +++ b/lib/views/auth/captin/camera_widgets/camera_lisence_page.dart @@ -1,83 +1,83 @@ -import 'package:camera/camera.dart'; -import 'package:flutter/material.dart'; -import 'package:get/get.dart'; -import 'package:sefer_driver/views/widgets/elevated_btn.dart'; +// import 'package:camera/camera.dart'; +// import 'package:flutter/material.dart'; +// import 'package:get/get.dart'; +// import 'package:sefer_driver/views/widgets/elevated_btn.dart'; -import '../../../../constant/colors.dart'; -import '../../../../constant/style.dart'; -import '../../../../controller/functions/camer_controller.dart'; -import '../../../../controller/functions/ocr_controller.dart'; -import '../../../widgets/my_scafold.dart'; +// import '../../../../constant/colors.dart'; +// import '../../../../constant/style.dart'; +// import '../../../../controller/functions/camer_controller.dart'; +// import '../../../../controller/functions/ocr_controller.dart'; +// import '../../../widgets/my_scafold.dart'; -class CameraLisencePage extends StatelessWidget { - CameraLisencePage.CameraLicensePage({super.key}); - final CameraClassController cameraClassController = - Get.put(CameraClassController()); +// class CameraLisencePage extends StatelessWidget { +// CameraLisencePage.CameraLicensePage({super.key}); +// final CameraClassController cameraClassController = +// Get.put(CameraClassController()); - @override - Widget build(BuildContext context) { - return MyScafolld( - title: 'Scan Driver License'.tr, - body: [ - Column(children: [ - Text( - 'Please put your licence in these border'.tr, - style: AppStyle.title.copyWith(color: AppColor.greenColor), - ), - Padding( - padding: const EdgeInsets.symmetric(vertical: 8, horizontal: 12), - child: GetBuilder( - builder: (cameraClassController) => - cameraClassController.isCameraInitialized - ? Stack( - children: [ - Container( - decoration: AppStyle.boxDecoration, - child: CameraPreview( - cameraClassController.cameraController, - ), - ), - Positioned( - top: Get.height * .1, - right: 5, - left: 5, - child: Container( - height: Get.width * 3 / 4, - width: Get.width * .9, - decoration: BoxDecoration( - // color: AppColor.blueColor, - border: Border.all( - color: AppColor.yellowColor, width: 2), - ), - ), - ), - ], - ) - : Container( - decoration: AppStyle.boxDecoration, - height: Get.width * 3 / 4, - width: Get.width, - child: Center( - child: Text( - 'Camera not initialized yet', - style: AppStyle.title, - ), - ), - ), - ), - ), - const SizedBox( - height: 20, - ), - MyElevatedButton( - title: 'Take Image'.tr, - onPressed: () { - ScanDocumentsByApi().scanDocumentsByApi(); - }, - ) - ]), - ], - isleading: true, - ); - } -} +// @override +// Widget build(BuildContext context) { +// return MyScafolld( +// title: 'Scan Driver License'.tr, +// body: [ +// Column(children: [ +// Text( +// 'Please put your licence in these border'.tr, +// style: AppStyle.title.copyWith(color: AppColor.greenColor), +// ), +// Padding( +// padding: const EdgeInsets.symmetric(vertical: 8, horizontal: 12), +// child: GetBuilder( +// builder: (cameraClassController) => +// cameraClassController.isCameraInitialized +// ? Stack( +// children: [ +// Container( +// decoration: AppStyle.boxDecoration, +// child: CameraPreview( +// cameraClassController.cameraController, +// ), +// ), +// Positioned( +// top: Get.height * .1, +// right: 5, +// left: 5, +// child: Container( +// height: Get.width * 3 / 4, +// width: Get.width * .9, +// decoration: BoxDecoration( +// // color: AppColor.blueColor, +// border: Border.all( +// color: AppColor.yellowColor, width: 2), +// ), +// ), +// ), +// ], +// ) +// : Container( +// decoration: AppStyle.boxDecoration, +// height: Get.width * 3 / 4, +// width: Get.width, +// child: Center( +// child: Text( +// 'Camera not initialized yet', +// style: AppStyle.title, +// ), +// ), +// ), +// ), +// ), +// const SizedBox( +// height: 20, +// ), +// MyElevatedButton( +// title: 'Take Image'.tr, +// onPressed: () { +// ScanDocumentsByApi().scanDocumentsByApi(); +// }, +// ) +// ]), +// ], +// isleading: true, +// ); +// } +// } diff --git a/lib/views/auth/captin/login_captin.dart b/lib/views/auth/captin/login_captin.dart index 3fd8e94..21be57b 100755 --- a/lib/views/auth/captin/login_captin.dart +++ b/lib/views/auth/captin/login_captin.dart @@ -61,7 +61,7 @@ class _LoginCaptinState extends State with WidgetsBindingObserver { return GetBuilder( builder: (controller) { return Scaffold( - backgroundColor: AppColor.secondaryColor, + backgroundColor: Theme.of(context).scaffoldBackgroundColor, body: SafeArea( child: Center( child: _buildBodyContent(context, controller), @@ -72,6 +72,7 @@ class _LoginCaptinState extends State with WidgetsBindingObserver { ); } + Widget _buildBodyContent( BuildContext context, LoginDriverController controller) { // 1. صفحة الموافقة على الشروط @@ -130,17 +131,22 @@ class _LoginCaptinState extends State with WidgetsBindingObserver { Expanded( child: Container( decoration: BoxDecoration( - border: Border.all(color: Colors.grey.shade300), + border: Border.all(color: Theme.of(context).dividerColor), borderRadius: BorderRadius.circular(8), + color: Theme.of(context).cardColor.withOpacity(0.5), ), child: SingleChildScrollView( padding: const EdgeInsets.all(12), - child: HtmlWidget(box.read(BoxName.lang).toString() == 'ar' - ? AppInformation.privacyPolicyArabic - : AppInformation.privacyPolicy), + child: HtmlWidget( + box.read(BoxName.lang).toString() == 'ar' + ? AppInformation.privacyPolicyArabic + : AppInformation.privacyPolicy, + textStyle: TextStyle(color: Theme.of(context).textTheme.bodyLarge?.color), + ), ), ), ), + CheckboxListTile( title: Text('I Agree'.tr, style: AppStyle.title), value: controller.isAgreeTerms, @@ -324,14 +330,15 @@ class _LoginCaptinState extends State with WidgetsBindingObserver { const SizedBox(height: 24), Row( children: [ - const Expanded(child: Divider()), + Expanded(child: Divider(color: Theme.of(context).dividerColor)), Padding( padding: const EdgeInsets.symmetric(horizontal: 8.0), child: Text('Or'.tr, style: AppStyle.subtitle), ), - const Expanded(child: Divider()), + Expanded(child: Divider(color: Theme.of(context).dividerColor)), ], ), + const SizedBox(height: 24), MyElevatedButton( title: 'Create Account with Email'.tr, @@ -457,19 +464,29 @@ class _LoginCaptinState extends State with WidgetsBindingObserver { validator: validator, obscureText: obscureText, keyboardType: keyboardType, + style: Theme.of(context).textTheme.bodyLarge, decoration: InputDecoration( labelText: labelText, + labelStyle: TextStyle(color: Theme.of(context).hintColor), hintText: hintText, + hintStyle: TextStyle(color: Theme.of(context).hintColor.withOpacity(0.5)), prefixIcon: Icon(prefixIcon, color: AppColor.primaryColor), suffixIcon: suffixIcon, - border: OutlineInputBorder(borderRadius: BorderRadius.circular(12.0)), + border: OutlineInputBorder( + borderRadius: BorderRadius.circular(12.0), + borderSide: BorderSide(color: Theme.of(context).dividerColor), + ), + enabledBorder: OutlineInputBorder( + borderRadius: BorderRadius.circular(12.0), + borderSide: BorderSide(color: Theme.of(context).dividerColor), + ), focusedBorder: OutlineInputBorder( borderRadius: BorderRadius.circular(12.0), - borderSide: - const BorderSide(color: AppColor.primaryColor, width: 2.0), + borderSide: const BorderSide(color: AppColor.primaryColor, width: 2.0), ), ), ); + } Widget _buildSocialButton({ diff --git a/lib/views/auth/register_page.dart b/lib/views/auth/register_page.dart index 0ddfe0f..426ebc0 100755 --- a/lib/views/auth/register_page.dart +++ b/lib/views/auth/register_page.dart @@ -23,10 +23,10 @@ class RegisterPage extends StatelessWidget { padding: const EdgeInsets.all(16.0), child: SingleChildScrollView( child: Container( - decoration: const BoxDecoration( + decoration: BoxDecoration( boxShadow: [ BoxShadow( - offset: Offset(3, 3), + offset: const Offset(3, 3), color: AppColor.accentColor, blurRadius: 3) ], @@ -45,7 +45,7 @@ class RegisterPage extends StatelessWidget { controller: controller.firstNameController, decoration: InputDecoration( focusedBorder: OutlineInputBorder( - borderSide: const BorderSide( + borderSide: BorderSide( color: AppColor.primaryColor, width: 2.0, ), @@ -54,7 +54,7 @@ class RegisterPage extends StatelessWidget { fillColor: AppColor.accentColor, hoverColor: AppColor.accentColor, focusColor: AppColor.accentColor, - border: const OutlineInputBorder( + border: OutlineInputBorder( borderRadius: BorderRadius.all( Radius.circular(12))), labelText: 'First name'.tr, @@ -75,7 +75,7 @@ class RegisterPage extends StatelessWidget { controller: controller.lastNameController, decoration: InputDecoration( focusedBorder: OutlineInputBorder( - borderSide: const BorderSide( + borderSide: BorderSide( color: AppColor.primaryColor, width: 2.0, ), @@ -83,7 +83,7 @@ class RegisterPage extends StatelessWidget { ), focusColor: AppColor.accentColor, fillColor: AppColor.accentColor, - border: const OutlineInputBorder( + border: OutlineInputBorder( borderRadius: BorderRadius.all( Radius.circular(12))), labelText: 'Last name'.tr, @@ -116,7 +116,7 @@ class RegisterPage extends StatelessWidget { fillColor: AppColor.accentColor, hoverColor: AppColor.accentColor, focusColor: AppColor.accentColor, - border: const OutlineInputBorder( + border: OutlineInputBorder( borderRadius: BorderRadius.all(Radius.circular(12))), labelText: 'Email'.tr, @@ -149,7 +149,7 @@ class RegisterPage extends StatelessWidget { fillColor: AppColor.accentColor, hoverColor: AppColor.accentColor, focusColor: AppColor.accentColor, - border: const OutlineInputBorder( + border: OutlineInputBorder( borderRadius: BorderRadius.all(Radius.circular(12))), labelText: 'Password'.tr, @@ -188,7 +188,7 @@ class RegisterPage extends StatelessWidget { ), focusColor: AppColor.accentColor, fillColor: AppColor.accentColor, - border: const OutlineInputBorder( + border: OutlineInputBorder( borderRadius: BorderRadius.all( Radius.circular(12))), labelText: 'Phone'.tr, @@ -217,7 +217,7 @@ class RegisterPage extends StatelessWidget { ), focusColor: AppColor.accentColor, fillColor: AppColor.accentColor, - border: const OutlineInputBorder( + border: OutlineInputBorder( borderRadius: BorderRadius.all( Radius.circular(12))), labelText: 'City'.tr, diff --git a/lib/views/home/Captin/About Us/settings_captain.dart b/lib/views/home/Captin/About Us/settings_captain.dart index 6bff296..e6d99d6 100755 --- a/lib/views/home/Captin/About Us/settings_captain.dart +++ b/lib/views/home/Captin/About Us/settings_captain.dart @@ -59,6 +59,14 @@ class SettingsCaptain extends StatelessWidget { _buildSectionHeader('App Preferences'.tr, context), _buildSettingsCard( children: [ + _buildSwitchTile( + icon: Icons.dark_mode_outlined, + title: 'App Dark Mode'.tr, + subtitle: 'Switch between light and dark themes'.tr, + controller: settingsController, + valueGetter: (ctrl) => (ctrl).isDarkMode, + onChanged: (ctrl) => (ctrl).toggleAppTheme(), + ), _buildSwitchTile( icon: Icons.map_outlined, color: AppColor.redColor, @@ -68,6 +76,15 @@ class SettingsCaptain extends StatelessWidget { valueGetter: (ctrl) => (ctrl).isGoogleMapsEnabled, onChanged: (ctrl) => (ctrl).onChangMapApp(), ), + _buildSwitchTile( + icon: Icons.map_outlined, + title: 'Map Dark Mode'.tr, + subtitle: 'Switch between light and dark map styles'.tr, + controller: settingsController, + valueGetter: (ctrl) => (ctrl).isMapDarkMode, + onChanged: (ctrl) => (ctrl).toggleMapTheme(), + ), + _buildSwitchTile( icon: Icons.vibration, title: 'Vibration'.tr, diff --git a/lib/views/home/Captin/assurance_health_page.dart b/lib/views/home/Captin/assurance_health_page.dart index 09c9816..201d2d3 100755 --- a/lib/views/home/Captin/assurance_health_page.dart +++ b/lib/views/home/Captin/assurance_health_page.dart @@ -1,6 +1,3 @@ -import 'package:sefer_driver/constant/box_name.dart'; -import 'package:sefer_driver/main.dart'; -import 'package:sefer_driver/views/widgets/error_snakbar.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; @@ -9,208 +6,171 @@ import '../../../controller/home/captin/help/assurance_controller.dart'; import 'package:flutter/cupertino.dart'; +import '../../widgets/my_scafold.dart'; + class AssuranceHealthPage extends StatelessWidget { AssuranceHealthPage({super.key}); - AssuranceHealthController assuranceHealthController = + final AssuranceHealthController assuranceHealthController = Get.put(AssuranceHealthController()); @override Widget build(BuildContext context) { - return CupertinoPageScaffold( - navigationBar: CupertinoNavigationBar( - middle: Text("Health Insurance".tr), - ), - child: SafeArea( - child: Padding( - padding: const EdgeInsets.all(8.0), - child: GetBuilder( - builder: (assuranceHealthController) { - return Column( - children: [ - Text( - "When you complete 500 trips, you will be eligible for exclusive health insurance offers." - .tr, - textAlign: TextAlign.center, - style: CupertinoTheme.of(context).textTheme.navTitleTextStyle, - ), - const SizedBox(height: 10), - Row( - mainAxisAlignment: MainAxisAlignment.spaceAround, - children: [ - CupertinoButton.filled( - child: Text("Show My Trip Count".tr), - onPressed: () async { - assuranceHealthController.getTripCountByCaptain(); - }, + final theme = Theme.of(context); + return MyScafolld( + title: "Health Insurance".tr, + isleading: true, + body: [ + GetBuilder( + builder: (controller) { + return SingleChildScrollView( + padding: const EdgeInsets.all(20.0), + child: Column( + crossAxisAlignment: CrossAxisAlignment.stretch, + children: [ + Text( + "When you complete 500 trips, you will be eligible for exclusive health insurance offers." + .tr, + textAlign: TextAlign.center, + style: theme.textTheme.titleMedium?.copyWith( + color: + theme.textTheme.bodyMedium?.color?.withOpacity(0.8), + height: 1.5, ), - _buildTripCountAvatar( - assuranceHealthController.tripCount['count'] == null - ? '0' - : assuranceHealthController.tripCount['count'] - .toString(), - ), - ], - ), - const SizedBox(height: 10), - Container( - decoration: BoxDecoration( - color: CupertinoColors.systemGrey6, - borderRadius: BorderRadius.circular(10), ), - child: Padding( - padding: const EdgeInsets.all(14), + const SizedBox(height: 24), + Card( + elevation: 4, + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(16)), + child: Padding( + padding: const EdgeInsets.all(16.0), + child: Row( + children: [ + Expanded( + child: ElevatedButton( + onPressed: () => + controller.getTripCountByCaptain(), + style: ElevatedButton.styleFrom( + backgroundColor: AppColor.primaryColor, + foregroundColor: Colors.white, + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(12)), + padding: + const EdgeInsets.symmetric(vertical: 12), + ), + child: Text("Show My Trip Count".tr), + ), + ), + const SizedBox(width: 16), + _buildTripCountAvatar( + controller.tripCount['count'] == null + ? '0' + : controller.tripCount['count'].toString(), + ), + ], + ), + ), + ), + const SizedBox(height: 24), + Container( + padding: const EdgeInsets.all(18), + decoration: BoxDecoration( + color: theme.colorScheme.surfaceVariant.withOpacity(0.5), + borderRadius: BorderRadius.circular(12), + border: Border.all(color: theme.dividerColor), + ), child: Text( "We have partnered with health insurance providers to offer you special health coverage. Complete 500 trips and receive a 20% discount on health insurance premiums." .tr, - style: CupertinoTheme.of(context) - .textTheme - .textStyle - .copyWith(fontWeight: FontWeight.w600), + style: theme.textTheme.bodyLarge + ?.copyWith(fontWeight: FontWeight.w500), textAlign: TextAlign.center, ), ), - ), - const SizedBox(height: 10), - CupertinoButton.filled( - disabledColor: AppColor.blueColor, - padding: - const EdgeInsets.symmetric(horizontal: 20, vertical: 15), - borderRadius: BorderRadius.circular(12), - child: Text( - "Would you like to proceed with health insurance?".tr, - style: const TextStyle( - fontSize: 16, fontWeight: FontWeight.bold), + const SizedBox(height: 32), + ElevatedButton( + onPressed: () => _showInsuranceDialog(context, controller), + style: ElevatedButton.styleFrom( + backgroundColor: AppColor.primaryColor, + foregroundColor: Colors.white, + padding: const EdgeInsets.symmetric(vertical: 16), + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(12)), + ), + child: Text( + "Would you like to proceed with health insurance?".tr, + style: const TextStyle(fontWeight: FontWeight.bold), + textAlign: TextAlign.center, + ), ), - onPressed: () async { - // Show confirmation dialog before proceeding - showCupertinoDialog( - context: context, - builder: (BuildContext context) { - // Variable to store the health insurance provider chosen by the driver - TextEditingController providerController = - TextEditingController(); - - return CupertinoAlertDialog( - title: Text( - "Confirmation".tr, - style: const TextStyle( - fontWeight: FontWeight.bold, fontSize: 18), - ), - content: Column( - children: [ - Text( - "Would you like to proceed with health insurance?" - .tr, - style: const TextStyle(fontSize: 14), - ), - const SizedBox(height: 20), - CupertinoTextField( - controller: providerController, - placeholder: - "Do you have a disease for a long time?".tr, - padding: const EdgeInsets.all(12), - decoration: BoxDecoration( - border: Border.all( - color: CupertinoColors.systemGrey, - width: 1), - borderRadius: BorderRadius.circular(8), - ), - ), - ], - ), - actions: [ - CupertinoDialogAction( - isDefaultAction: true, - child: Text( - "Yes".tr, - style: const TextStyle( - color: CupertinoColors.activeBlue), - ), - onPressed: () async { - // Ensure the provider name is not empty - if (providerController.text.isNotEmpty) { - // Call the function to insert data into the database - await assuranceHealthController - .addDriverHealthAssurance( - healthInsuranceProvider: - providerController.text, - ); - - // Close the dialog and navigate to a success screen or show a snackbar - Navigator.of(context).pop(); - } else { - // Show an alert if the provider name is empty - showCupertinoDialog( - context: context, - builder: (_) => CupertinoAlertDialog( - title: Text("Error".tr), - content: Text( - "Do you have a disease for a long time?" - .tr), - actions: [ - CupertinoDialogAction( - child: Text("OK".tr), - onPressed: () => - Navigator.of(context).pop(), - ), - ], - ), - ); - } - }, - ), - CupertinoDialogAction( - child: Text( - "No".tr, - style: const TextStyle( - color: CupertinoColors.destructiveRed), - ), - onPressed: () { - Navigator.of(context) - .pop(); // Just close the dialog - // Optionally show feedback if the driver opts out - // Get.snackbar( - // "Opted out".tr, - // "You have chosen not to proceed with health insurance." - // .tr, - // backgroundColor: - // CupertinoColors.systemGrey); - mySnackeBarError( - "You have chosen not to proceed with health insurance." - .tr); - }, - ), - ], - ); - }, - ); - }, - ), - ], + ], + ), ); - }), + }, ), + ], + ); + } + + void _showInsuranceDialog( + BuildContext context, AssuranceHealthController controller) { + final TextEditingController providerController = TextEditingController(); + Get.dialog( + AlertDialog( + title: Text("Confirmation".tr), + content: Column( + mainAxisSize: MainAxisSize.min, + children: [ + Text("Would you like to proceed with health insurance?".tr), + const SizedBox(height: 16), + TextField( + controller: providerController, + decoration: InputDecoration( + hintText: "Do you have a disease for a long time?".tr, + border: + OutlineInputBorder(borderRadius: BorderRadius.circular(12)), + ), + ), + ], + ), + actions: [ + TextButton( + onPressed: () => Get.back(), + child: Text("No".tr, style: const TextStyle(color: Colors.red)), + ), + ElevatedButton( + onPressed: () async { + if (providerController.text.isNotEmpty) { + await controller.addDriverHealthAssurance( + healthInsuranceProvider: providerController.text, + ); + Get.back(); + } else { + Get.snackbar("Error".tr, + "Please provide details about any long-term diseases.".tr); + } + }, + child: Text("Yes".tr), + ), + ], ), ); } Widget _buildTripCountAvatar(String count) { return Container( - width: 80, - height: 80, + width: 70, + height: 70, decoration: BoxDecoration( shape: BoxShape.circle, - gradient: const RadialGradient( - colors: [ - Color(0xFF42A5F5), - Color(0xFF1976D2), - ], // Health theme colors - center: Alignment.center, - radius: 0.8, + gradient: const LinearGradient( + colors: [Color(0xFF42A5F5), Color(0xFF1976D2)], + begin: Alignment.topLeft, + end: Alignment.bottomRight, ), boxShadow: [ BoxShadow( - color: CupertinoColors.black.withOpacity(0.2), + color: Colors.black.withOpacity(0.1), blurRadius: 8, offset: const Offset(0, 4), ), @@ -220,9 +180,9 @@ class AssuranceHealthPage extends StatelessWidget { child: Text( count, style: const TextStyle( - fontSize: 22, + fontSize: 20, fontWeight: FontWeight.bold, - color: CupertinoColors.white, + color: Colors.white, ), ), ), diff --git a/lib/views/home/Captin/bottom_bar.dart b/lib/views/home/Captin/bottom_bar.dart index 266dcf8..9a64313 100755 --- a/lib/views/home/Captin/bottom_bar.dart +++ b/lib/views/home/Captin/bottom_bar.dart @@ -31,40 +31,32 @@ class HomeScreen extends StatelessWidget { ], )), bottomNavigationBar: Obx(() => BottomNavigationBar( - backgroundColor: Colors.greenAccent, + backgroundColor: Theme.of(context).cardColor, currentIndex: controller.currentIndex.value, onTap: controller.changePage, + selectedItemColor: AppColor.primaryColor, + unselectedItemColor: Theme.of(context).hintColor, + type: BottomNavigationBarType.fixed, items: [ BottomNavigationBarItem( - icon: const Icon( - Icons.home, - color: AppColor.primaryColor, - ), + icon: const Icon(Icons.home), label: 'Home'.tr, ), BottomNavigationBarItem( - icon: const Icon( - Icons.person, - color: AppColor.primaryColor, - ), + icon: const Icon(Icons.person), label: 'Profile'.tr, ), BottomNavigationBarItem( - icon: const Icon( - Icons.bar_chart, - color: AppColor.primaryColor, - ), + icon: const Icon(Icons.bar_chart), label: 'Statistics'.tr, ), BottomNavigationBarItem( - icon: const Icon( - Icons.account_balance_wallet, - color: AppColor.primaryColor, - ), + icon: const Icon(Icons.account_balance_wallet), label: 'Wallet'.tr, ), ], )), + ); } } diff --git a/lib/views/home/Captin/camer_widget.dart b/lib/views/home/Captin/camer_widget.dart index 86ac571..32c22ff 100755 --- a/lib/views/home/Captin/camer_widget.dart +++ b/lib/views/home/Captin/camer_widget.dart @@ -1,303 +1,302 @@ -import 'package:camera/camera.dart'; -import 'package:flutter/material.dart'; -import 'package:get/get.dart'; -import 'package:sefer_driver/constant/colors.dart'; -import 'package:sefer_driver/constant/style.dart'; -import 'package:sefer_driver/controller/functions/camer_controller.dart'; -import 'package:sefer_driver/views/widgets/elevated_btn.dart'; -import 'package:sefer_driver/views/widgets/my_scafold.dart'; +// import 'package:flutter/material.dart'; +// import 'package:get/get.dart'; +// import 'package:sefer_driver/constant/colors.dart'; +// import 'package:sefer_driver/constant/style.dart'; +// import 'package:sefer_driver/controller/functions/camer_controller.dart'; +// import 'package:sefer_driver/views/widgets/elevated_btn.dart'; +// import 'package:sefer_driver/views/widgets/my_scafold.dart'; -class CameraWidgetCardId extends StatelessWidget { - final CameraClassController cameraClassController = - Get.put(CameraClassController()); +// class CameraWidgetCardId extends StatelessWidget { +// final CameraClassController cameraClassController = +// Get.put(CameraClassController()); - CameraWidgetCardId({super.key}); +// CameraWidgetCardId({super.key}); - @override - Widget build(BuildContext context) { - return MyScafolld( - title: 'Scan Id'.tr, - body: [ - Column( - children: [ - Padding( - padding: - const EdgeInsets.symmetric(vertical: 8, horizontal: 12), - child: GetBuilder( - builder: (cameraClassController) => - cameraClassController.isCameraInitialized - ? Stack( - children: [ - Container( - decoration: AppStyle.boxDecoration, - child: FittedBox( - fit: BoxFit.fitWidth, - child: SizedBox( - width: Get.width * .9, - height: Get.width * - .9, // Set the desired aspect ratio here - child: CameraPreview( - cameraClassController.cameraController, - ), - ), - ), - ), - Positioned( - top: 72, - child: Container( - width: 230, - height: 25, - decoration: BoxDecoration( - // color: AppColor.blueColor, - border: Border.all( - color: AppColor.yellowColor, - width: 2), - ), - ), - ), - Positioned( - top: 60, - right: 5, - child: Container( - width: 230, - height: 25, - decoration: BoxDecoration( - // color: AppColor.blueColor, - border: Border.all( - color: AppColor.blueColor, width: 2), - ), - ), - ), - Positioned( - top: 156, - right: 5, - child: Container( - width: 140, - height: 20, - decoration: BoxDecoration( - // color: AppColor.blueColor, - border: Border.all( - color: AppColor.blueColor, width: 2), - ), - ), - ), - Positioned( - top: 175, - right: 5, - child: Container( - width: 140, - height: 15, - decoration: BoxDecoration( - // color: AppColor.blueColor, - border: Border.all( - color: AppColor.blueColor, width: 2), - ), - ), - ), - Positioned( - top: 191, - right: 5, - child: Container( - width: 140, - height: 15, - decoration: BoxDecoration( - // color: AppColor.blueColor, - border: Border.all( - color: AppColor.blueColor, width: 2), - ), - ), - ), - Positioned( - top: 207, - right: 5, - child: Container( - width: 140, - height: 15, - decoration: BoxDecoration( - // color: AppColor.blueColor, - border: Border.all( - color: AppColor.blueColor, width: 2), - ), - ), - ), - Positioned( - top: 225, - right: 5, - child: Container( - width: 140, - height: 15, - decoration: BoxDecoration( - // color: AppColor.blueColor, - border: Border.all( - color: AppColor.blueColor, width: 2), - ), - ), - ), - Positioned( - top: 115, - left: 25, - child: Container( - width: 120, - height: 110, - decoration: BoxDecoration( - // color: AppColor.blueColor, - border: Border.all( - color: AppColor.blueColor, width: 2), - ), - ), - ), - ], - ) - : Container( - decoration: AppStyle.boxDecoration, - height: Get.width * 3 / 4, - width: Get.width, - child: Center( - child: Text( - 'Camera not initilaized yet'.tr, - style: AppStyle.title, - ), - ), - ), - ), - ), - Row( - mainAxisAlignment: MainAxisAlignment.spaceAround, - children: [ - MyElevatedButton( - title: 'Scan ID MklGoogle'.tr, onPressed: () {}), - // cameraClassController.takePictureAndMLGoogleScan()), - MyElevatedButton( - title: 'Scan ID Tesseract'.tr, onPressed: () {}), - ], - ), - MyElevatedButton( - title: 'Scan ID Api'.tr, - onPressed: () => cameraClassController.extractCardId()), - GetBuilder( - builder: (cameraClassController) => Expanded( - child: - Text(cameraClassController.scannedText.toString()))) - ], - ) - ], - isleading: true); - } -} +// @override +// Widget build(BuildContext context) { +// return MyScafolld( +// title: 'Scan Id'.tr, +// body: [ +// Column( +// children: [ +// Padding( +// padding: +// const EdgeInsets.symmetric(vertical: 8, horizontal: 12), +// child: GetBuilder( +// builder: (cameraClassController) => +// cameraClassController.isCameraInitialized +// ? Stack( +// children: [ +// Container( +// decoration: AppStyle.boxDecoration, +// child: FittedBox( +// fit: BoxFit.fitWidth, +// child: SizedBox( +// width: Get.width * .9, +// height: Get.width * +// .9, // Set the desired aspect ratio here +// child: CameraPreview( +// cameraClassController.cameraController, +// ), +// ), +// ), +// ), +// Positioned( +// top: 72, +// child: Container( +// width: 230, +// height: 25, +// decoration: BoxDecoration( +// // color: AppColor.blueColor, +// border: Border.all( +// color: AppColor.yellowColor, +// width: 2), +// ), +// ), +// ), +// Positioned( +// top: 60, +// right: 5, +// child: Container( +// width: 230, +// height: 25, +// decoration: BoxDecoration( +// // color: AppColor.blueColor, +// border: Border.all( +// color: AppColor.blueColor, width: 2), +// ), +// ), +// ), +// Positioned( +// top: 156, +// right: 5, +// child: Container( +// width: 140, +// height: 20, +// decoration: BoxDecoration( +// // color: AppColor.blueColor, +// border: Border.all( +// color: AppColor.blueColor, width: 2), +// ), +// ), +// ), +// Positioned( +// top: 175, +// right: 5, +// child: Container( +// width: 140, +// height: 15, +// decoration: BoxDecoration( +// // color: AppColor.blueColor, +// border: Border.all( +// color: AppColor.blueColor, width: 2), +// ), +// ), +// ), +// Positioned( +// top: 191, +// right: 5, +// child: Container( +// width: 140, +// height: 15, +// decoration: BoxDecoration( +// // color: AppColor.blueColor, +// border: Border.all( +// color: AppColor.blueColor, width: 2), +// ), +// ), +// ), +// Positioned( +// top: 207, +// right: 5, +// child: Container( +// width: 140, +// height: 15, +// decoration: BoxDecoration( +// // color: AppColor.blueColor, +// border: Border.all( +// color: AppColor.blueColor, width: 2), +// ), +// ), +// ), +// Positioned( +// top: 225, +// right: 5, +// child: Container( +// width: 140, +// height: 15, +// decoration: BoxDecoration( +// // color: AppColor.blueColor, +// border: Border.all( +// color: AppColor.blueColor, width: 2), +// ), +// ), +// ), +// Positioned( +// top: 115, +// left: 25, +// child: Container( +// width: 120, +// height: 110, +// decoration: BoxDecoration( +// // color: AppColor.blueColor, +// border: Border.all( +// color: AppColor.blueColor, width: 2), +// ), +// ), +// ), +// ], +// ) +// : Container( +// decoration: AppStyle.boxDecoration, +// height: Get.width * 3 / 4, +// width: Get.width, +// child: Center( +// child: Text( +// 'Camera not initilaized yet'.tr, +// style: AppStyle.title, +// ), +// ), +// ), +// ), +// ), +// Row( +// mainAxisAlignment: MainAxisAlignment.spaceAround, +// children: [ +// MyElevatedButton( +// title: 'Scan ID MklGoogle'.tr, onPressed: () {}), +// // cameraClassController.takePictureAndMLGoogleScan()), +// MyElevatedButton( +// title: 'Scan ID Tesseract'.tr, onPressed: () {}), +// ], +// ), +// MyElevatedButton( +// title: 'Scan ID Api'.tr, +// onPressed: () => cameraClassController.extractCardId()), +// GetBuilder( +// builder: (cameraClassController) => Expanded( +// child: +// Text(cameraClassController.scannedText.toString()))) +// ], +// ) +// ], +// isleading: true); +// } +// } -class CameraWidgetPassPort extends StatelessWidget { - final CameraClassController cameraClassController = - Get.put(CameraClassController()); +// class CameraWidgetPassPort extends StatelessWidget { +// final CameraClassController cameraClassController = +// Get.put(CameraClassController()); - CameraWidgetPassPort({super.key}); +// CameraWidgetPassPort({super.key}); - @override - Widget build(BuildContext context) { - return MyScafolld( - title: 'Scan Id'.tr, - body: [ - Column( - children: [ - Padding( - padding: - const EdgeInsets.symmetric(vertical: 8, horizontal: 12), - child: GetBuilder( - builder: (cameraClassController) => - cameraClassController.isCameraInitialized - ? Stack( - children: [ - Container( - decoration: AppStyle.boxDecoration, - child: FittedBox( - fit: BoxFit.fitWidth, - child: SizedBox( - width: Get.width * .9, - height: Get.width * - .9, // Set the desired aspect ratio here - child: CameraPreview( - cameraClassController.cameraController, - ), - ), - ), - ), - Positioned( - top: 35, - left: 35, - width: Get.width * .77, - height: - 17, //left":95.0,"top":134.0,"width":2909.0,"height":175.0 - child: Container( - // width: 230, - // height: 25, - decoration: BoxDecoration( - // color: AppColor.blueColor, - border: Border.all( - color: AppColor.yellowColor, - width: 2), - ), - ), - ), - Positioned( - top: 60, - right: 25, - width: 90, - height: 25, - child: Container( - decoration: BoxDecoration( - // color: AppColor.blueColor, - border: Border.all( - color: AppColor.blueColor, width: 2), - ), - ), - ), - Positioned( - top: 110, - right: 90, - child: Container( - width: 140, - height: 20, - decoration: BoxDecoration( - // color: AppColor.blueColor, - border: Border.all( - color: AppColor.blueColor, width: 2), - ), - ), - ), - ], - ) - : Container( - decoration: AppStyle.boxDecoration, - height: Get.width * 3 / 4, - width: Get.width, - child: Center( - child: Text( - 'Camera not initilaized yet', - style: AppStyle.title, - ), - ), - ), - ), - ), - Row( - mainAxisAlignment: MainAxisAlignment.spaceAround, - children: [ - MyElevatedButton( - title: 'Scan ID MklGoogle'.tr, onPressed: () => {}), - // cameraClassController.takePictureAndMLGoogleScan()), - MyElevatedButton( - title: 'Scan ID Tesseract'.tr, onPressed: () {}), - ], - ), - MyElevatedButton( - title: 'Scan ID Api'.tr, - onPressed: () => cameraClassController.extractCardId()), - GetBuilder( - builder: (cameraClassController) => Expanded( - child: - Text(cameraClassController.scannedText.toString()))) - ], - ) - ], - isleading: true); - } -} +// @override +// Widget build(BuildContext context) { +// return MyScafolld( +// title: 'Scan Id'.tr, +// body: [ +// Column( +// children: [ +// Padding( +// padding: +// const EdgeInsets.symmetric(vertical: 8, horizontal: 12), +// child: GetBuilder( +// builder: (cameraClassController) => +// cameraClassController.isCameraInitialized +// ? Stack( +// children: [ +// Container( +// decoration: AppStyle.boxDecoration, +// child: FittedBox( +// fit: BoxFit.fitWidth, +// child: SizedBox( +// width: Get.width * .9, +// height: Get.width * +// .9, // Set the desired aspect ratio here +// child: CameraPreview( +// cameraClassController.cameraController, +// ), +// ), +// ), +// ), +// Positioned( +// top: 35, +// left: 35, +// width: Get.width * .77, +// height: +// 17, //left":95.0,"top":134.0,"width":2909.0,"height":175.0 +// child: Container( +// // width: 230, +// // height: 25, +// decoration: BoxDecoration( +// // color: AppColor.blueColor, +// border: Border.all( +// color: AppColor.yellowColor, +// width: 2), +// ), +// ), +// ), +// Positioned( +// top: 60, +// right: 25, +// width: 90, +// height: 25, +// child: Container( +// decoration: BoxDecoration( +// // color: AppColor.blueColor, +// border: Border.all( +// color: AppColor.blueColor, width: 2), +// ), +// ), +// ), +// Positioned( +// top: 110, +// right: 90, +// child: Container( +// width: 140, +// height: 20, +// decoration: BoxDecoration( +// // color: AppColor.blueColor, +// border: Border.all( +// color: AppColor.blueColor, width: 2), +// ), +// ), +// ), +// ], +// ) +// : Container( +// decoration: AppStyle.boxDecoration, +// height: Get.width * 3 / 4, +// width: Get.width, +// child: Center( +// child: Text( +// 'Camera not initilaized yet', +// style: AppStyle.title, +// ), +// ), +// ), +// ), +// ), +// Row( +// mainAxisAlignment: MainAxisAlignment.spaceAround, +// children: [ +// MyElevatedButton( +// title: 'Scan ID MklGoogle'.tr, onPressed: () => {}), +// // cameraClassController.takePictureAndMLGoogleScan()), +// MyElevatedButton( +// title: 'Scan ID Tesseract'.tr, onPressed: () {}), +// ], +// ), +// MyElevatedButton( +// title: 'Scan ID Api'.tr, +// onPressed: () => cameraClassController.extractCardId()), +// GetBuilder( +// builder: (cameraClassController) => Expanded( +// child: +// Text(cameraClassController.scannedText.toString()))) +// ], +// ) +// ], +// isleading: true); +// } +// } diff --git a/lib/views/home/Captin/driver_map_page.dart b/lib/views/home/Captin/driver_map_page.dart index e9bbd72..a859a74 100755 --- a/lib/views/home/Captin/driver_map_page.dart +++ b/lib/views/home/Captin/driver_map_page.dart @@ -152,9 +152,11 @@ class InstructionsOfRoads extends StatelessWidget { if (controller.currentInstruction.isEmpty) return const SizedBox(); return TweenAnimationBuilder( + tween: Tween(begin: 0.0, end: 1.0), duration: const Duration(milliseconds: 500), builder: (context, value, child) { + final theme = Theme.of(context); return Transform.translate( offset: Offset(0, 50 * (1 - value)), // حركة انزلاق child: Opacity( @@ -163,16 +165,15 @@ class InstructionsOfRoads extends StatelessWidget { padding: const EdgeInsets.symmetric( horizontal: 16, vertical: 12), decoration: BoxDecoration( - color: const Color(0xFF1F1F1F) - .withOpacity(0.95), // خلفية داكنة + color: theme.cardColor.withOpacity(0.95), // Adaptive background borderRadius: BorderRadius.circular(16), boxShadow: [ BoxShadow( - color: Colors.black.withOpacity(0.4), + color: Colors.black.withOpacity(0.2), blurRadius: 15, offset: const Offset(0, 5)), ], - border: Border.all(color: Colors.white.withOpacity(0.1)), + border: Border.all(color: theme.dividerColor.withOpacity(0.1)), ), child: Row( children: [ @@ -187,7 +188,6 @@ class InstructionsOfRoads extends StatelessWidget { color: Colors.white, size: 24), ), const SizedBox(width: 14), - // نص التعليمات Expanded( child: Column( @@ -195,18 +195,15 @@ class InstructionsOfRoads extends StatelessWidget { children: [ Text( "NEXT STEP".tr, - style: TextStyle( - color: Colors.grey.shade500, - fontSize: 10, + style: theme.textTheme.labelSmall?.copyWith( + color: theme.hintColor, fontWeight: FontWeight.bold, letterSpacing: 1.2), ), const SizedBox(height: 2), Text( controller.currentInstruction, - style: const TextStyle( - color: Colors.white, - fontSize: 16, + style: theme.textTheme.titleMedium?.copyWith( fontWeight: FontWeight.w600, height: 1.2), maxLines: 2, @@ -216,6 +213,7 @@ class InstructionsOfRoads extends StatelessWidget { ), ), + // فاصل عمودي Container( width: 1, @@ -278,12 +276,13 @@ class CancelWidget extends StatelessWidget { filter: ImageFilter.blur(sigmaX: 10, sigmaY: 10), child: Container( decoration: BoxDecoration( - color: Colors.white.withOpacity(0.9), + color: Theme.of(context).cardColor.withOpacity(0.9), borderRadius: BorderRadius.circular(30), boxShadow: [ - BoxShadow(color: Colors.black.withOpacity(0.1), blurRadius: 8) + BoxShadow(color: Theme.of(context).shadowColor.withOpacity(0.1), blurRadius: 8) ], ), + child: Material( color: Colors.transparent, child: InkWell( @@ -379,16 +378,17 @@ class PricesWindow extends StatelessWidget { width: Get.width * 0.85, padding: const EdgeInsets.all(30), decoration: BoxDecoration( - color: Colors.white, + color: Theme.of(context).cardColor, borderRadius: BorderRadius.circular(24), boxShadow: [ BoxShadow( - color: Colors.black.withOpacity(0.2), + color: Theme.of(context).shadowColor.withOpacity(0.2), blurRadius: 20, spreadRadius: 5, ), ], ), + child: Column( mainAxisSize: MainAxisSize.min, children: [ @@ -411,11 +411,12 @@ class PricesWindow extends StatelessWidget { Text( '${controller.totalCost} ${'\$'.tr}', style: AppStyle.headTitle2.copyWith( - color: Colors.black87, + color: Theme.of(context).textTheme.bodyLarge?.color, fontSize: 42, fontWeight: FontWeight.w900, ), ), + const SizedBox(height: 30), SizedBox( width: double.infinity, diff --git a/lib/views/home/Captin/history/history_captain.dart b/lib/views/home/Captin/history/history_captain.dart index 87ee127..e8b3a8e 100755 --- a/lib/views/home/Captin/history/history_captain.dart +++ b/lib/views/home/Captin/history/history_captain.dart @@ -1,7 +1,8 @@ import 'package:flutter/material.dart'; import 'package:get/get.dart'; +import 'package:intl/intl.dart'; import 'package:flutter_staggered_animations/flutter_staggered_animations.dart'; - +import '../../../../constant/finance_design_system.dart'; import '../../../../controller/auth/captin/history_captain.dart'; import 'package:sefer_driver/views/widgets/mydialoug.dart'; @@ -13,74 +14,159 @@ class HistoryCaptain extends StatelessWidget { Get.put(HistoryCaptainController()); return Scaffold( - backgroundColor: Colors.grey[100], // A softer background color - appBar: AppBar( - title: Text('Ride History'.tr), - backgroundColor: Colors.white, - foregroundColor: Colors.black, - elevation: 1, - ), + backgroundColor: Colors.white, body: GetBuilder( builder: (controller) { if (controller.isloading) { - return const Center(child: CircularProgressIndicator()); - } - - if (controller.historyData['message'].isEmpty) { - return Center( - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Icon(Icons.history_toggle_off, - size: 80, color: Colors.grey[400]), - const SizedBox(height: 16), - Text( - 'No Rides Yet'.tr, - style: Theme.of(context) - .textTheme - .headlineSmall - ?.copyWith(color: Colors.grey[600]), - ), - ], - ), + return const Center( + child: CircularProgressIndicator( + color: FinanceDesignSystem.primaryDark), ); } - // 动画: Wrap ListView with AnimationLimiter for staggered animations - return AnimationLimiter( - child: ListView.builder( - padding: const EdgeInsets.all(16.0), - itemCount: controller.historyData['message'].length, - itemBuilder: (BuildContext context, int index) { - var trip = controller.historyData['message'][index]; + final List trips = controller.historyData['message'] ?? []; - // 动画: Apply animation to each list item - return AnimationConfiguration.staggeredList( - position: index, - duration: const Duration(milliseconds: 375), - child: SlideAnimation( - verticalOffset: 50.0, - child: FadeInAnimation( - child: _AnimatedHistoryCard( - trip: trip, - onTap: () { - // Your original logic is preserved here - if (trip['status'] != 'Cancel') { - controller.getHistoryDetails(trip['order_id']); - } else { - MyDialog().getDialog( - 'This Trip Was Cancelled'.tr, - 'This Trip Was Cancelled'.tr, - () => Get.back(), - ); - } - }, - ), + return CustomScrollView( + physics: const BouncingScrollPhysics(), + slivers: [ + // 1. Custom App Bar + SliverAppBar( + expandedHeight: 180, + pinned: true, + stretch: true, + backgroundColor: FinanceDesignSystem.primaryDark, + flexibleSpace: FlexibleSpaceBar( + centerTitle: true, + title: Text( + 'Ride History'.tr, + style: const TextStyle( + color: Colors.white, + fontWeight: FontWeight.bold, + fontSize: 18, ), ), - ); - }, - ), + background: Stack( + fit: StackFit.expand, + children: [ + Container( + decoration: const BoxDecoration( + gradient: FinanceDesignSystem.balanceGradient, + ), + ), + Positioned( + right: -50, + top: -20, + child: Icon( + Icons.history_rounded, + size: 200, + color: Colors.white.withOpacity(0.05), + ), + ), + Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + const SizedBox(height: 40), + Text( + trips.length.toString(), + style: const TextStyle( + color: Colors.white, + fontSize: 40, + fontWeight: FontWeight.w900, + ), + ), + Text( + 'Total Rides'.tr, + style: TextStyle( + color: Colors.white.withOpacity(0.7), + fontSize: 14, + fontWeight: FontWeight.w500, + ), + ), + ], + ), + ], + ), + ), + ), + + // 2. Trips List + if (trips.isEmpty) + SliverFillRemaining( + child: Center( + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Container( + padding: const EdgeInsets.all(32), + decoration: BoxDecoration( + color: Colors.grey.shade50, + shape: BoxShape.circle, + ), + child: Icon( + Icons.history_toggle_off_rounded, + size: 64, + color: Colors.grey.shade300, + ), + ), + const SizedBox(height: 24), + Text( + 'No Rides Yet'.tr, + style: TextStyle( + fontSize: 18, + fontWeight: FontWeight.bold, + color: Colors.grey.shade600, + ), + ), + const SizedBox(height: 8), + Text( + 'Your completed trips will appear here'.tr, + style: TextStyle( + fontSize: 14, + color: Colors.grey.shade400, + ), + ), + ], + ), + ), + ) + else + SliverPadding( + padding: const EdgeInsets.fromLTRB(16, 24, 16, 40), + sliver: SliverList( + delegate: SliverChildBuilderDelegate( + (context, index) { + final trip = trips[index]; + return AnimationConfiguration.staggeredList( + position: index, + duration: const Duration(milliseconds: 375), + child: SlideAnimation( + verticalOffset: 50.0, + child: FadeInAnimation( + child: _TripHistoryCard( + trip: trip, + onTap: () { + if (trip['status'] != 'Cancel' && + trip['status'] != 'CancelByPassenger') { + controller + .getHistoryDetails(trip['order_id']); + } else { + MyDialog().getDialog( + 'This Trip Was Cancelled'.tr, + 'This Trip Was Cancelled'.tr, + () => Get.back(), + ); + } + }, + ), + ), + ), + ); + }, + childCount: trips.length, + ), + ), + ), + ], ); }, ), @@ -88,97 +174,159 @@ class HistoryCaptain extends StatelessWidget { } } -// 动画: A new stateful widget to handle the tap animation -class _AnimatedHistoryCard extends StatefulWidget { - final Map trip; +class _TripHistoryCard extends StatelessWidget { + final Map trip; final VoidCallback onTap; - const _AnimatedHistoryCard({required this.trip, required this.onTap}); + const _TripHistoryCard({required this.trip, required this.onTap}); - @override - __AnimatedHistoryCardState createState() => __AnimatedHistoryCardState(); -} - -class __AnimatedHistoryCardState extends State<_AnimatedHistoryCard> - with SingleTickerProviderStateMixin { - late AnimationController _controller; - late Animation _scaleAnimation; - - @override - void initState() { - super.initState(); - _controller = AnimationController( - vsync: this, - duration: const Duration(milliseconds: 150), - ); - _scaleAnimation = Tween(begin: 1.0, end: 0.95).animate( - CurvedAnimation(parent: _controller, curve: Curves.easeInOut), - ); - } - - @override - void dispose() { - _controller.dispose(); - super.dispose(); - } - - void _onTapDown(TapDownDetails details) { - _controller.forward(); - } - - void _onTapUp(TapUpDetails details) { - _controller.reverse(); - widget.onTap(); - } - - void _onTapCancel() { - _controller.reverse(); + String _formatDateToSyria(String? dateStr) { + if (dateStr == null) return ''; + try { + // Parse GMT date + DateTime date = DateTime.parse(dateStr); + // Add 3 hours for Syria (GMT+3) + DateTime syriaDate = date.add(const Duration(hours: 3)); + // Format to readable string + return DateFormat('yyyy-MM-dd HH:mm').format(syriaDate); + } catch (e) { + return dateStr; + } } @override Widget build(BuildContext context) { - return GestureDetector( - onTapDown: _onTapDown, - onTapUp: _onTapUp, - onTapCancel: _onTapCancel, - child: ScaleTransition( - scale: _scaleAnimation, - child: Card( - elevation: 4, - shadowColor: Colors.black.withOpacity(0.1), - margin: const EdgeInsets.only(bottom: 16.0), - shape: - RoundedRectangleBorder(borderRadius: BorderRadius.circular(12)), + return Container( + margin: const EdgeInsets.only(bottom: 20), + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.circular(FinanceDesignSystem.cardRadius), + boxShadow: [ + BoxShadow( + color: Colors.black.withOpacity(0.04), + blurRadius: 15, + offset: const Offset(0, 8), + ), + ], + ), + child: Material( + color: Colors.transparent, + child: InkWell( + onTap: onTap, + borderRadius: BorderRadius.circular(FinanceDesignSystem.cardRadius), child: Padding( - padding: const EdgeInsets.all(16.0), - child: Row( + padding: const EdgeInsets.all(20), + child: Column( children: [ - Icon(Icons.receipt_long, - color: Theme.of(context).primaryColor, size: 40), - const SizedBox(width: 16), - Expanded( - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text( - '${'OrderId'.tr}: ${widget.trip['order_id']}', - style: - Theme.of(context).textTheme.titleMedium?.copyWith( - fontWeight: FontWeight.bold, - ), - ), - const SizedBox(height: 4), - Text( - widget.trip['created_at'], - style: Theme.of(context).textTheme.bodySmall?.copyWith( - color: Colors.grey[600], + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Row( + children: [ + Container( + padding: const EdgeInsets.all(10), + decoration: BoxDecoration( + color: FinanceDesignSystem.primaryDark + .withOpacity(0.05), + borderRadius: BorderRadius.circular(12), + ), + child: const Icon( + Icons.receipt_long_rounded, + color: FinanceDesignSystem.primaryDark, + size: 20, + ), + ), + const SizedBox(width: 12), + Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + '${'OrderId'.tr} #${trip['order_id']}', + style: const TextStyle( + fontWeight: FontWeight.bold, + fontSize: 15, + color: FinanceDesignSystem.primaryDark, + ), ), - ), - ], - ), + Text( + _formatDateToSyria(trip['created_at']), + style: TextStyle( + fontSize: 11, + color: Colors.grey.shade500, + ), + ), + ], + ), + ], + ), + _buildStatusChip(trip['status']), + ], + ), + const SizedBox(height: 20), + const Divider(height: 1), + const SizedBox(height: 20), + Row( + children: [ + Column( + children: [ + const Icon(Icons.circle, + size: 12, color: FinanceDesignSystem.accentBlue), + Container( + width: 2, + height: 20, + color: Colors.grey.shade200, + ), + const Icon(Icons.location_on_rounded, + size: 14, color: FinanceDesignSystem.dangerRed), + ], + ), + const SizedBox(width: 16), + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + trip['start_name'] ?? 'Pickup Location'.tr, + maxLines: 1, + overflow: TextOverflow.ellipsis, + style: TextStyle( + fontSize: 13, + color: Colors.grey.shade700, + fontWeight: FontWeight.w500, + ), + ), + const SizedBox(height: 12), + Text( + trip['end_name'] ?? 'Destination Location'.tr, + maxLines: 1, + overflow: TextOverflow.ellipsis, + style: TextStyle( + fontSize: 13, + color: Colors.grey.shade700, + fontWeight: FontWeight.w500, + ), + ), + ], + ), + ), + if (trip['price'] != null) + Column( + crossAxisAlignment: CrossAxisAlignment.end, + children: [ + Text( + '${trip['price']} ${'SYP'.tr}', + style: const TextStyle( + fontWeight: FontWeight.w900, + fontSize: 16, + color: FinanceDesignSystem.primaryDark, + ), + ), + const Icon(Icons.arrow_forward_ios_rounded, + size: 12, color: Colors.grey), + ], + ), + ], ), - const SizedBox(width: 16), - _buildStatusChip(widget.trip['status']), ], ), ), @@ -186,46 +334,78 @@ class __AnimatedHistoryCardState extends State<_AnimatedHistoryCard> ), ); } -} -// 🎨 A separate function for the status chip, slightly restyled for Material -Widget _buildStatusChip(String status) { - Color chipColor; - Color textColor; - String statusText = status; - IconData iconData; + Widget _buildStatusChip(String? status) { + Color color; + IconData icon; + String label = status ?? 'Unknown'; + List gradientColors; - switch (status) { - case 'Apply': - chipColor = Colors.green.shade50; - textColor = Colors.green.shade800; - iconData = Icons.check_circle; - break; - case 'Refused': - chipColor = Colors.red.shade50; - textColor = Colors.red.shade800; - iconData = Icons.cancel; - break; - case 'Cancel': - chipColor = Colors.orange.shade50; - textColor = Colors.orange.shade800; - iconData = Icons.info; - statusText = 'Cancelled'; - break; - default: - chipColor = Colors.grey.shade200; - textColor = Colors.grey.shade800; - iconData = Icons.hourglass_empty; + switch (status) { + case 'Apply': + color = FinanceDesignSystem.successGreen; + icon = Icons.check_circle_rounded; + label = 'Completed'.tr; + gradientColors = [color.withOpacity(0.2), color.withOpacity(0.05)]; + break; + case 'Refused': + color = FinanceDesignSystem.dangerRed; + icon = Icons.cancel_rounded; + label = 'Refused'.tr; + gradientColors = [color.withOpacity(0.2), color.withOpacity(0.05)]; + break; + case 'Cancel': + color = Colors.orange; + icon = Icons.info_rounded; + label = 'Cancelled'.tr; + gradientColors = [color.withOpacity(0.2), color.withOpacity(0.05)]; + break; + case 'CancelByPassenger': + color = const Color(0xFF6B4EFF); + icon = Icons.person_off_rounded; + label = 'Cancelled by Passenger'.tr; + gradientColors = [color.withOpacity(0.2), color.withOpacity(0.05)]; + break; + default: + color = Colors.grey; + icon = Icons.help_rounded; + gradientColors = [color.withOpacity(0.2), color.withOpacity(0.05)]; + } + + return Container( + padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 6), + decoration: BoxDecoration( + gradient: LinearGradient( + colors: gradientColors, + begin: Alignment.topLeft, + end: Alignment.bottomRight, + ), + borderRadius: BorderRadius.circular(20), + border: Border.all(color: color.withOpacity(0.3), width: 1), + boxShadow: [ + BoxShadow( + color: color.withOpacity(0.1), + blurRadius: 4, + offset: const Offset(0, 2), + ), + ], + ), + child: Row( + mainAxisSize: MainAxisSize.min, + children: [ + Icon(icon, size: 14, color: color), + const SizedBox(width: 6), + Text( + label, + style: TextStyle( + color: color, + fontSize: 11, + fontWeight: FontWeight.w800, + letterSpacing: 0.3, + ), + ), + ], + ), + ); } - - return Chip( - avatar: Icon(iconData, color: textColor, size: 16), - label: Text( - statusText.tr, - style: TextStyle(color: textColor, fontWeight: FontWeight.w600), - ), - backgroundColor: chipColor, - padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 4), - side: BorderSide.none, - ); } diff --git a/lib/views/home/Captin/history/history_details_page.dart b/lib/views/home/Captin/history/history_details_page.dart index 50982ca..53964bf 100755 --- a/lib/views/home/Captin/history/history_details_page.dart +++ b/lib/views/home/Captin/history/history_details_page.dart @@ -1,6 +1,7 @@ import 'package:flutter/material.dart'; import 'package:get/get.dart'; -import 'package:google_maps_flutter/google_maps_flutter.dart'; +import 'package:intaleq_maps/intaleq_maps.dart'; +import 'package:sefer_driver/constant/api_key.dart'; import 'package:flutter_staggered_animations/flutter_staggered_animations.dart'; import 'package:sefer_driver/controller/auth/captin/history_captain.dart'; @@ -168,7 +169,7 @@ class _HistoryDetailsPageState extends State { return Card( elevation: 4, - shadowColor: Colors.black.withOpacity(0.1), + shadowColor: Colors.black.withValues(alpha: 0.1), shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(12)), clipBehavior: Clip.antiAlias, // Ensures the map respects the border radius @@ -176,7 +177,8 @@ class _HistoryDetailsPageState extends State { children: [ SizedBox( height: 250, - child: GoogleMap( + child: IntaleqMap( + apiKey: AK.mapAPIKEY, initialCameraPosition: initialCameraPosition, markers: markers, polylines: { @@ -188,7 +190,7 @@ class _HistoryDetailsPageState extends State { width: 5, ), }, - onMapCreated: (GoogleMapController mapController) { + onMapCreated: (IntaleqMapController mapController) { // Animate camera to fit the route if (startLocation != null && endLocation != null) { LatLngBounds bounds = LatLngBounds( @@ -210,7 +212,7 @@ class _HistoryDetailsPageState extends State { ), ); mapController.animateCamera( - CameraUpdate.newLatLngBounds(bounds, 60.0)); + CameraUpdate.newLatLngBounds(bounds, left: 60, top: 60, right: 60, bottom: 60)); } }, ), @@ -252,7 +254,7 @@ class _DetailCard extends StatelessWidget { Widget build(BuildContext context) { return Card( elevation: 2, - shadowColor: Colors.black.withOpacity(0.05), + shadowColor: Colors.black.withValues(alpha: 0.05), margin: const EdgeInsets.only(bottom: 16.0), shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(12)), child: Padding( diff --git a/lib/views/home/Captin/home_captain/help_captain.dart b/lib/views/home/Captin/home_captain/help_captain.dart index 98a1ef8..27d2b15 100755 --- a/lib/views/home/Captin/home_captain/help_captain.dart +++ b/lib/views/home/Captin/home_captain/help_captain.dart @@ -5,7 +5,9 @@ import 'package:sefer_driver/views/home/Captin/home_captain/help_details_replay_ import 'package:flutter/cupertino.dart'; +import '../../../../constant/colors.dart'; import '../../../../controller/functions/encrypt_decrypt.dart'; +import '../../../widgets/my_scafold.dart'; class HelpCaptain extends StatelessWidget { HelpCaptain({super.key}); @@ -13,162 +15,158 @@ class HelpCaptain extends StatelessWidget { @override Widget build(BuildContext context) { Get.put(HelpController()); - return CupertinoPageScaffold( - navigationBar: CupertinoNavigationBar( - middle: Text( - 'Helping Page'.tr, - style: const TextStyle(fontWeight: FontWeight.bold), - ), - leading: CupertinoButton( - padding: EdgeInsets.zero, - onPressed: () => Navigator.pop(context), - child: const Icon(CupertinoIcons.back), - ), - ), - child: SafeArea( - child: Padding( - padding: const EdgeInsets.all( - 20.0), // Increased padding around the content - child: ListView( - // crossAxisAlignment: - // CrossAxisAlignment.stretch, // Stretch children to full width + final theme = Theme.of(context); + + return MyScafolld( + title: 'Helping Page'.tr, + isleading: true, + body: [ + SingleChildScrollView( + padding: const EdgeInsets.all(20.0), + child: Column( + crossAxisAlignment: CrossAxisAlignment.stretch, children: [ Container( - padding: - const EdgeInsets.all(18.0), // Slightly increased padding + padding: const EdgeInsets.all(18.0), decoration: BoxDecoration( - color: - CupertinoTheme.of(context).brightness == Brightness.light - ? CupertinoColors.systemGrey6 - : CupertinoColors.darkBackgroundGray, - borderRadius: - BorderRadius.circular(15.0), // More rounded corners + color: theme.colorScheme.surfaceVariant.withOpacity(0.5), + borderRadius: BorderRadius.circular(15.0), + border: Border.all(color: theme.dividerColor), ), child: Text( 'If you need any help or have questions, this is the right place to do that. You are welcome!' .tr, - style: - CupertinoTheme.of(context).textTheme.textStyle.copyWith( - fontSize: 16, // Slightly larger font size - color: CupertinoColors.label.resolveFrom( - context), // Ensure text color adapts to theme - ), + style: theme.textTheme.bodyLarge, textAlign: TextAlign.center, ), ), - const SizedBox(height: 20), - CupertinoFormSection.insetGrouped( - // Using CupertinoFormSection for better styling - header: Text('Submit Your Question'.tr), - margin: EdgeInsets.zero, - children: [ - GetBuilder( - builder: (helpController) => Form( - key: helpController.formKey, - child: CupertinoTextFormFieldRow( + const SizedBox(height: 24), + Text( + 'Submit Your Question'.tr, + style: theme.textTheme.titleMedium + ?.copyWith(fontWeight: FontWeight.bold), + ), + const SizedBox(height: 12), + GetBuilder( + builder: (helpController) => Form( + key: helpController.formKey, + child: Column( + children: [ + TextFormField( controller: helpController.helpQuestionController, - placeholder: 'Enter your Question here'.tr, - autovalidateMode: AutovalidateMode.onUserInteraction, + decoration: InputDecoration( + hintText: 'Enter your Question here'.tr, + prefixIcon: + const Icon(Icons.question_answer_outlined), + border: OutlineInputBorder( + borderRadius: BorderRadius.circular(12)), + ), + maxLines: 3, validator: (value) { if (value == null || value.isEmpty) { return 'Please enter your question'.tr; } return null; }, - prefix: const Icon(CupertinoIcons - .question_circle), // Added a prefix icon ), - ), - ), - Padding( - padding: const EdgeInsets.symmetric( - horizontal: 16.0, vertical: 10.0), - child: GetBuilder( - builder: (helpController) => helpController.isLoading - ? const CupertinoActivityIndicator() - : CupertinoButton.filled( - onPressed: () { - if (helpController.formKey.currentState! - .validate()) { - helpController.addHelpQuestion(); - helpController.helpQuestionController - .clear(); // Clear the text field - } - }, - child: Text('Submit Question'.tr), - ), - ), - ), - ], - ), - const SizedBox(height: 20), - Text( - 'Your Questions'.tr, - style: CupertinoTheme.of(context) - .textTheme - .navTitleTextStyle - .copyWith( - fontWeight: FontWeight.bold, - ), - ), - const SizedBox(height: 10), - Expanded( - child: GetBuilder( - builder: (helpController) => - CupertinoListSection.insetGrouped( - margin: EdgeInsets.zero, - children: helpController.helpQuestionDate['message'] != null - ? List.generate( - helpController.helpQuestionDate['message'].length, - (index) { - var list = helpController - .helpQuestionDate['message'][index]; - return CupertinoListTile( - title: Text( - EncryptionHelper.instance - .decryptData(list['helpQuestion']), - overflow: TextOverflow.ellipsis, - ), - trailing: Row( - mainAxisSize: MainAxisSize.min, - children: [ - Text( - list['datecreated'], - style: CupertinoTheme.of(context) - .textTheme - .tabLabelTextStyle, - ), - const Icon(CupertinoIcons.chevron_forward), - ], - ), - onTap: () { - helpController.getIndex( - int.parse(EncryptionHelper.instance - .decryptData(list['id'])), - EncryptionHelper.instance - .decryptData(list['helpQuestion'])); - helpController - .getHelpRepley(list['id'].toString()); - Get.to(() => const HelpDetailsReplayPage()); + const SizedBox(height: 16), + helpController.isLoading + ? const Center(child: CircularProgressIndicator()) + : SizedBox( + width: double.infinity, + child: ElevatedButton( + onPressed: () { + if (helpController.formKey.currentState! + .validate()) { + helpController.addHelpQuestion(); + helpController.helpQuestionController + .clear(); + } }, - ); - }, - ) - : [ - Center( - child: Text('No questions asked yet.'.tr), + style: ElevatedButton.styleFrom( + backgroundColor: AppColor.primaryColor, + foregroundColor: Colors.white, + padding: + const EdgeInsets.symmetric(vertical: 14), + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(12)), + ), + child: Text('Submit Question'.tr), + ), ), - ], + ], ), ), ), + const SizedBox(height: 32), + Text( + 'Your Questions'.tr, + style: theme.textTheme.titleMedium + ?.copyWith(fontWeight: FontWeight.bold), + ), + const SizedBox(height: 12), + GetBuilder( + builder: (helpController) { + final questions = helpController.helpQuestionDate['message']; + if (questions == null || questions.isEmpty) { + return Center( + child: Padding( + padding: const EdgeInsets.all(20.0), + child: Text('No questions asked yet.'.tr), + ), + ); + } + return ListView.separated( + shrinkWrap: true, + physics: const NeverScrollableScrollPhysics(), + itemCount: questions.length, + separatorBuilder: (context, index) => + const SizedBox(height: 12), + itemBuilder: (context, index) { + var list = questions[index]; + return Card( + elevation: 0, + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(12), + side: BorderSide(color: theme.dividerColor), + ), + child: ListTile( + title: Text( + EncryptionHelper.instance + .decryptData(list['helpQuestion']), + style: const TextStyle(fontWeight: FontWeight.w500), + maxLines: 2, + overflow: TextOverflow.ellipsis, + ), + subtitle: Text( + list['datecreated'], + style: theme.textTheme.bodySmall, + ), + trailing: + const Icon(Icons.arrow_forward_ios, size: 16), + onTap: () { + helpController.getIndex( + int.parse(EncryptionHelper.instance + .decryptData(list['id'])), + EncryptionHelper.instance + .decryptData(list['helpQuestion'])); + helpController.getHelpRepley(list['id'].toString()); + Get.to(() => const HelpDetailsReplayPage()); + }, + ), + ); + }, + ); + }, + ), ], ), ), - ), + ], ); } } + // class HelpCaptain extends StatelessWidget { // HelpCaptain({super.key}); diff --git a/lib/views/home/Captin/home_captain/help_details_replay_page.dart b/lib/views/home/Captin/home_captain/help_details_replay_page.dart index f640b00..d2adbe6 100755 --- a/lib/views/home/Captin/home_captain/help_details_replay_page.dart +++ b/lib/views/home/Captin/home_captain/help_details_replay_page.dart @@ -19,65 +19,90 @@ class HelpDetailsReplayPage extends StatelessWidget { body: [ helpController.isLoading ? const MyCircularProgressIndicator() - : Column( - children: [ - Padding( - padding: const EdgeInsets.symmetric(horizontal: 10), - child: Row( - mainAxisAlignment: MainAxisAlignment.start, - children: [ - Card( - elevation: 3, - child: Container( - width: Get.width * .66, - color: Colors.transparent, - child: Padding( - padding: const EdgeInsets.all(8.0), - child: Text( - helpController.qustion, - style: AppStyle.title, - ), - ), - ), - ), - ]), - ), - Row( - mainAxisAlignment: MainAxisAlignment.end, - children: [ - Card( - elevation: 3, - child: Container( - color: Colors.transparent, - width: Get.width * .66, - child: Padding( - padding: const EdgeInsets.all(8.0), - child: helpController.status == - 'not yet' || - EncryptionHelper.instance - .decryptData(helpController - .helpQuestionRepleyDate[ - 'message']['replay']) - .toString() == - 'not yet' - ? Text( - 'No Response yet.'.tr, - style: AppStyle.title, - ) - : Text( - EncryptionHelper.instance - .decryptData(helpController - .helpQuestionRepleyDate[ - 'message']['replay']) - .toString(), - style: AppStyle.title, - ), - ), + : Padding( + padding: const EdgeInsets.all(16.0), + child: Column( + children: [ + // Question Bubble (Aligned to Start/End based on locale, usually start for sender) + Align( + alignment: AlignmentDirectional.centerStart, + child: Container( + constraints: BoxConstraints(maxWidth: Get.width * 0.75), + padding: const EdgeInsets.all(12), + decoration: BoxDecoration( + color: Theme.of(context).colorScheme.primaryContainer, + borderRadius: const BorderRadius.only( + topRight: Radius.circular(16), + bottomLeft: Radius.circular(16), + bottomRight: Radius.circular(16), ), ), - ]), - ], + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + 'Your Question'.tr, + style: Theme.of(context).textTheme.labelSmall?.copyWith( + color: Theme.of(context).colorScheme.primary, + fontWeight: FontWeight.bold, + ), + ), + const SizedBox(height: 4), + Text( + helpController.qustion, + style: Theme.of(context).textTheme.bodyLarge, + ), + ], + ), + ), + ), + const SizedBox(height: 24), + // Reply Bubble (Aligned to opposite side) + Align( + alignment: AlignmentDirectional.centerEnd, + child: Container( + constraints: BoxConstraints(maxWidth: Get.width * 0.75), + padding: const EdgeInsets.all(12), + decoration: BoxDecoration( + color: Theme.of(context).colorScheme.secondaryContainer, + borderRadius: const BorderRadius.only( + topLeft: Radius.circular(16), + bottomLeft: Radius.circular(16), + bottomRight: Radius.circular(16), + ), + ), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + 'Support Reply'.tr, + style: Theme.of(context).textTheme.labelSmall?.copyWith( + color: Theme.of(context).colorScheme.secondary, + fontWeight: FontWeight.bold, + ), + ), + const SizedBox(height: 4), + Builder(builder: (context) { + final replayData = helpController.helpQuestionRepleyDate['message']; + final isNoReply = helpController.status == 'not yet' || + replayData == null || + EncryptionHelper.instance.decryptData(replayData['replay']).toString() == 'not yet'; + + return Text( + isNoReply + ? 'No Response yet.'.tr + : EncryptionHelper.instance.decryptData(replayData['replay']).toString(), + style: Theme.of(context).textTheme.bodyLarge, + ); + }), + ], + ), + ), + ), + ], + ), ) + ], isleading: true, )); diff --git a/lib/views/home/Captin/home_captain/home_captin.dart b/lib/views/home/Captin/home_captain/home_captin.dart index 2898e1a..db98e9f 100755 --- a/lib/views/home/Captin/home_captain/home_captin.dart +++ b/lib/views/home/Captin/home_captain/home_captin.dart @@ -1,11 +1,8 @@ import 'dart:io'; -import 'dart:ui'; import 'package:bubble_head/bubble.dart'; -// import 'package:google_maps_flutter/google_maps_flutter.dart'; -// import 'package:flutter_map/flutter_map.dart'; -import 'package:google_maps_flutter/google_maps_flutter.dart'; -// import 'package:latlong2/latlong.dart' as latlng; // لإحداثيات العرض +import 'package:intaleq_maps/intaleq_maps.dart'; +import 'package:sefer_driver/constant/api_key.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:get/get.dart'; @@ -23,16 +20,58 @@ import '../../../../controller/functions/overlay_permisssion.dart'; import '../../../../controller/functions/package_info.dart'; import '../../../../controller/home/captin/home_captain_controller.dart'; import '../../../../controller/home/captin/map_driver_controller.dart'; +import '../../../../controller/home/navigation/navigation_view.dart'; +import '../../../../controller/profile/setting_controller.dart'; +import '../../../../env/env.dart'; import '../../../../main.dart'; import '../../../notification/available_rides_page.dart'; -import '../../../widgets/circle_container.dart'; import '../driver_map_page.dart'; import 'widget/connect.dart'; import 'widget/left_menu_map_captain.dart'; -// ================================================================== -// Redesigned Main Widget (V3) -// ================================================================== +// ───────────────────────────────────────────── +// Design Tokens (Responsive to Theme) +// ───────────────────────────────────────────── +class _Token { + static Color surface(BuildContext context) => + Theme.of(context).brightness == Brightness.dark + ? const Color(0xFF1A1A2E) + : Colors.white; + + static Color surfaceCard(BuildContext context) => + Theme.of(context).brightness == Brightness.dark + ? const Color(0xFF16213E) + : const Color(0xFFF8F9FA); + + static const Color accent = Color(0xFFF0A500); + static Color accentSoft(BuildContext context) => + const Color(0xFFF0A500).withOpacity(0.12); + static const Color danger = Color(0xFFE53935); + static const Color success = Color(0xFF2ECC71); + static const Color info = Color(0xFF3498DB); + + static Color border(BuildContext context) => + Theme.of(context).brightness == Brightness.dark + ? const Color(0xFF2A2A4A) + : Colors.grey.withOpacity(0.2); + + static Color text(BuildContext context) => + Theme.of(context).brightness == Brightness.dark + ? Colors.white + : const Color(0xFF2D3436); + + static Color textDim(BuildContext context) => + Theme.of(context).brightness == Brightness.dark + ? Colors.white38 + : Colors.black45; + + static const double radius = 16.0; + static const double radiusSm = 10.0; +} + +// ───────────────────────────────────────────── +// Root Widget +// ───────────────────────────────────────────── class HomeCaptain extends StatelessWidget { HomeCaptain({super.key}); @@ -43,33 +82,27 @@ class HomeCaptain extends StatelessWidget { @override Widget build(BuildContext context) { - // Initial calls remain the same. - // Get.put(HomeCaptainController()); - WidgetsBinding.instance.addPostFrameCallback((_) async { - print("🔥 HomeCaptain postFrameCallback started"); // Debug await closeOverlayIfFound(); await checkForUpdate(context); await getPermissionOverlay(); await showDriverGiftClaim(context); await checkForAppliedRide(context); - print("✅ postFrameCallback completed"); }); - // The stack is now even simpler. + return Scaffold( + extendBodyBehindAppBar: true, + backgroundColor: _Token.surface(context), appBar: const _HomeAppBar(), drawer: AppDrawer(), body: SafeArea( + top: false, child: Stack( children: [ - // 1. The Map View is the base layer. const _MapView(), - - // 2. The new floating "Status Pod" at the bottom. - const _StatusPodOverlay(), - FloatingActionButtons(), - // This widget from the original code remains. leftMainMenuCaptainIcons(), + const _BottomStatusBar(), + const _FloatingControls(), ], ), ), @@ -77,687 +110,561 @@ class HomeCaptain extends StatelessWidget { } } -// ================================================================== -// Redesigned Helper Widgets (V3) -// ================================================================== - -/// 1. The AppBar now contains the map actions in a PopupMenuButton. +// ───────────────────────────────────────────── +// AppBar — no blur, solid gradient +// ───────────────────────────────────────────── class _HomeAppBar extends StatelessWidget implements PreferredSizeWidget { const _HomeAppBar(); + @override + Size get preferredSize => const Size.fromHeight(kToolbarHeight); + @override Widget build(BuildContext context) { - final homeCaptainController = Get.find(); + final ctrl = Get.find(); + return AppBar( - backgroundColor: Colors.white, - elevation: 1, - shadowColor: Colors.black.withOpacity(0.1), - title: Row( - children: [ - Image.asset( - 'assets/images/logo.gif', - height: 35, - ), - const SizedBox(width: 10), - Text( - AppInformation.appName.split(' ')[0].toString().tr, - style: AppStyle.title.copyWith( - fontSize: 24, - fontWeight: FontWeight.bold, - color: AppColor.blueColor, + backgroundColor: _Token.surface(context), + elevation: 0, + systemOverlayStyle: SystemUiOverlayStyle.light, + titleSpacing: 0, + // ── Logo + App Name ────────────────────── + title: Padding( + padding: const EdgeInsets.only(left: 4), + child: Row( + children: [ + _LogoBadge(), + const SizedBox(width: 10), + Text( + AppInformation.appName.split(' ')[0].tr, + style: const TextStyle( + color: _Token.accent, + fontSize: 20, + fontWeight: FontWeight.w800, + letterSpacing: 0.8, + ), ), - ), - ], + ], + ), ), actions: [ - // Refuse count indicator - Padding( - padding: const EdgeInsets.only(right: 8.0), - child: Center( - child: MyCircleContainer( - child: Text( - homeCaptainController.countRefuse.toString(), - style: AppStyle.title.copyWith(fontWeight: FontWeight.bold), - ), - ), - ), - ), - // The new PopupMenuButton for all map and ride actions. - Container( - margin: const EdgeInsets.symmetric(horizontal: 4), - decoration: BoxDecoration( - color: Colors.white, - borderRadius: BorderRadius.circular(12), - boxShadow: [ - BoxShadow( - color: Colors.grey.withOpacity(0.1), - spreadRadius: 1, - blurRadius: 4, - ), - ], - ), - child: Row( - children: [ - _MapControlButton( - iconColor: Colors.blue, - icon: Icons.satellite_alt, - tooltip: 'Change Map Type'.tr, - onPressed: homeCaptainController.changeMapType, - ), - // _MapControlButton( - // iconColor: Colors.blue, - // icon: Icons.streetview_sharp, - // tooltip: 'Toggle Traffic'.tr, - // onPressed: homeCaptainController.changeMapTraffic, - // ), - GetBuilder( - builder: (controller) { - return _MapControlButton( - // تغيير الأيقونة واللون بناءً على الحالة - icon: Icons.local_fire_department, - iconColor: controller.isHeatmapVisible - ? Colors.orange - : Colors.grey, - tooltip: 'Show Heatmap'.tr, - onPressed: controller.toggleHeatmap, - ); - }, - ), - _MapControlButton( - iconColor: Colors.blue, - icon: Icons.my_location, // Changed for clarity - tooltip: 'Center on Me'.tr, - onPressed: () { - if (homeCaptainController.mapHomeCaptainController != null) { - homeCaptainController.mapHomeCaptainController! - .animateCamera(CameraUpdate.newLatLngZoom( - Get.find().myLocation, - 17.5, - )); - } - }, - ), - ], + // ── Refuse Counter ─────────────────── + GetBuilder( + builder: (c) => _PillBadge( + icon: Icons.block_rounded, + label: c.countRefuse.toString(), + color: _Token.danger, ), ), + const SizedBox(width: 6), + // ── Map Controls Row ───────────────── + _AppBarControls(ctrl: ctrl), + const SizedBox(width: 8), ], ); } - - PopupMenuItem _buildPopupMenuItem({ - required String value, - IconData? icon, - Widget? iconWidget, - required String text, - Color? iconColor, - }) { - return PopupMenuItem( - value: value, - child: Row( - children: [ - iconWidget ?? Icon(icon, color: iconColor ?? Colors.grey.shade600), - const SizedBox(width: 16), - Text(text), - ], - ), - ); - } - - @override - Size get preferredSize => const Size.fromHeight(kToolbarHeight); } -/// 2. The Map View is unchanged functionally. +class _LogoBadge extends StatelessWidget { + @override + Widget build(BuildContext context) => Container( + width: 36, + height: 36, + decoration: BoxDecoration( + color: _Token.surfaceCard(context), + shape: BoxShape.circle, + border: Border.all(color: _Token.accent, width: 1.5), + ), + child: ClipOval( + child: Image.asset('assets/images/logo.gif', fit: BoxFit.cover), + ), + ); +} + +class _PillBadge extends StatelessWidget { + final IconData icon; + final String label; + final Color color; + const _PillBadge( + {required this.icon, required this.label, required this.color}); + + @override + Widget build(BuildContext context) => Container( + padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 4), + decoration: BoxDecoration( + color: color.withOpacity(0.12), + borderRadius: BorderRadius.circular(20), + border: Border.all(color: color.withOpacity(0.35)), + ), + child: Row( + mainAxisSize: MainAxisSize.min, + children: [ + Icon(icon, color: color, size: 13), + const SizedBox(width: 4), + Text( + label, + style: TextStyle( + color: color, fontWeight: FontWeight.bold, fontSize: 13), + ), + ], + ), + ); +} + +class _AppBarControls extends StatelessWidget { + final HomeCaptainController ctrl; + const _AppBarControls({required this.ctrl}); + + @override + Widget build(BuildContext context) => Container( + padding: const EdgeInsets.symmetric(horizontal: 4, vertical: 4), + decoration: BoxDecoration( + color: _Token.surfaceCard(context), + borderRadius: BorderRadius.circular(_Token.radiusSm), + border: Border.all(color: _Token.border(context)), + ), + child: Row( + mainAxisSize: MainAxisSize.min, + children: [ + // Navigation + _IconBtn( + icon: Icons.map_rounded, + color: _Token.success, + tooltip: 'Navigation'.tr, + onTap: () => Get.to(() => const NavigationView()), + ), + // Heatmap + GetBuilder( + builder: (c) => _IconBtn( + icon: Icons.local_fire_department_rounded, + color: + c.isHeatmapVisible ? Colors.orange : Colors.grey.shade600, + tooltip: 'Heatmap'.tr, + onTap: c.toggleHeatmap, + ), + ), + // Center on me + _IconBtn( + icon: Icons.my_location_rounded, + color: _Token.accent, + tooltip: 'My Location'.tr, + onTap: () { + ctrl.mapHomeCaptainController?.animateCamera( + CameraUpdate.newLatLngZoom( + Get.find().myLocation, + 17.5, + ), + ); + }, + ), + ], + ), + ); +} + +class _IconBtn extends StatelessWidget { + final IconData icon; + final Color color; + final String tooltip; + final VoidCallback onTap; + const _IconBtn( + {required this.icon, + required this.color, + required this.tooltip, + required this.onTap}); + + @override + Widget build(BuildContext context) => Tooltip( + message: tooltip, + child: InkWell( + onTap: onTap, + borderRadius: BorderRadius.circular(8), + child: Padding( + padding: const EdgeInsets.symmetric(horizontal: 9, vertical: 6), + child: Icon(icon, color: color, size: 20), + ), + ), + ); +} + +// ───────────────────────────────────────────── +// Map View +// ───────────────────────────────────────────── class _MapView extends StatelessWidget { const _MapView(); @override Widget build(BuildContext context) { - // جلب الكونترولر الرئيسي - final homeController = Get.find(); - return GetBuilder( - builder: (controller) { - if (controller.isLoading) { - return const MyCircularProgressIndicator(); - } + builder: (ctrl) { + if (ctrl.isLoading) return const MyCircularProgressIndicator(); + final s = Get.find(); - // --- هذا هو التعديل --- - // هذا الـ Builder يستمع إلى تحديثات الموقع return GetBuilder( - builder: (locationController) { - // if (homeController.mapHomeCaptainController != null && - // homeController.isActive) { - // homeController.mapHomeCaptainController!.animateCamera( - // CameraUpdate.newCameraPosition( - // CameraPosition( - // target: locationController.myLocation, // الموقع الجديد - // zoom: 17.5, // تقريب لمتابعة السائق - // tilt: 50.0, // زاوية رؤية 3D - // bearing: locationController.heading, // اتجاه السيارة - // ), - // ), - // ); - // } - // --- نهاية الكود الجديد --- - - // إرجاع الخريطة - return GoogleMap( - padding: const EdgeInsets.only(bottom: 110, top: 300), - fortyFiveDegreeImageryEnabled: true, - onMapCreated: controller.onMapCreated, - // onCameraMove: controller.onCameraMove, - minMaxZoomPreference: const MinMaxZoomPreference(6, 18), - initialCameraPosition: CameraPosition( - target: locationController.myLocation, - zoom: 15, - ), - // --- تم حذف onCameraMove الخاطئ --- - // === إضافة الطبقة الحرارية هنا === - polygons: controller.heatmapPolygons, - - // = - markers: { - Marker( - markerId: MarkerId('MyLocation'.tr), - position: locationController.myLocation, // يتم تحديثه من هنا - rotation: locationController.heading, // يتم تحديثه من هنا - flat: true, - anchor: const Offset(0.5, 0.5), - icon: controller.carIcon, - ) - }, - mapType: controller.mapType ? MapType.satellite : MapType.terrain, - myLocationButtonEnabled: false, - myLocationEnabled: false, - trafficEnabled: controller.mapTrafficON, - buildingsEnabled: false, - mapToolbarEnabled: false, - compassEnabled: false, - zoomControlsEnabled: false, - ); - // --- الكود الجديد --- - -// // تحويل الإحداثيات من جوجل (إذا كنت لا تزال تستخدمها) إلى latlong2 -// final latlng.LatLng currentCarPosition = latlng.LatLng( -// locationController.myLocation.latitude, -// locationController.myLocation.longitude); - -// return FlutterMap( -// // 1. تمرير الـ Controller الذي أنشأناه في الخطوة 2 -// mapController: homeController.mapController, - -// options: MapOptions( -// // 2. هذا بديل initialCameraPosition -// initialCenter: currentCarPosition, -// initialZoom: 15, -// // هذا بديل padding -// // (ملاحظة: flutter_map لا يدعم padding مباشرة، قد تحتاج لتعديل الواجهة -// // أو استخدام خاصية nonRotatedChildren لبدائل أخرى) - -// // هذا بديل minMaxZoomPreference -// minZoom: 12, -// maxZoom: 16, onMapReady: homeController.onMapReady, -// ), - -// // 3. الخرائط في flutter_map عبارة عن "طبقات" (Layers) -// children: [ -// // --- الطبقة الأولى: الخريطة الأساسية (OSM) --- -// TileLayer( -// urlTemplate: 'https://tile.openstreetmap.org/{z}/{x}/{y}.png', -// userAgentPackageName: -// 'com.your.app.name', // هام: ضع اسم تطبيقك هنا -// ), - -// // --- (اختياري) طبقة القمر الصناعي بناءً على MapType --- -// if (controller.mapType) // إذا كنت لا تزال تستخدم mapType -// // TileLayer( -// // // ملاحظة: هذا الرابط يحتاج مفتاح API من MapTiler أو مزود آخر -// // urlTemplate: -// // 'https://api.maptiler.com/maps/satellite/{z}/{x}/{y}.jpg?key=YOUR_API_KEY', -// // userAgentPackageName: 'com.your.app.name', -// // ), - -// // --- الطبقة الثانية: أيقونة السيارة (Marker) --- -// MarkerLayer( -// markers: [ -// Marker( -// point: currentCarPosition, // الإحداثيات -// width: 80, -// height: 80, -// child: Transform.rotate( -// // 4. هذا بديل rotation -// angle: locationController.heading * -// (3.1415926535 / 180), // تحويل من درجات إلى راديان -// // 5. هذا بديل carIcon (أصبح أسهل!) -// child: Image.asset( -// 'assets/images/car.png', // نفس المسار الذي استخدمته من قبل -// width: 30, // الحجم الذي حددته في addCustomCarIcon -// height: 35, -// ), -// ), -// ), -// ], -// ), -// ], -// ); - }, + builder: (loc) => IntaleqMap( + apiKey: Env.mapSaasKey, + onMapCreated: ctrl.onMapCreated, + minMaxZoomPreference: const MinMaxZoomPreference(6, 18), + initialCameraPosition: CameraPosition( + target: (loc.myLocation.latitude == 0 || + loc.myLocation.latitude.isNaN) + ? ctrl.myLocation + : loc.myLocation, + zoom: 15, + ), + mapType: + s.isMapDarkMode ? IntaleqMapType.normal : IntaleqMapType.light, + polygons: ctrl.heatmapPolygons, + markers: { + Marker( + markerId: MarkerId('MyLocation'.tr), + position: loc.myLocation, + rotation: loc.heading, + flat: true, + anchor: const Offset(0.5, 0.5), + icon: ctrl.carIcon, + ) + }, + myLocationButtonEnabled: false, + myLocationEnabled: false, + compassEnabled: false, + zoomControlsEnabled: false, + ), ); }, ); } } -/// 3. The floating "Status Pod" at the bottom of the screen. -class _StatusPodOverlay extends StatelessWidget { - const _StatusPodOverlay(); - - void _showDetailsDialog( - BuildContext context, HomeCaptainController controller) { - Get.dialog( - _DriverDetailsDialog(controller), // تمرير الكنترولر هنا - barrierColor: Colors.black.withOpacity(0.3), - ); - } +// ───────────────────────────────────────────── +// Bottom Status Bar — no blur, solid card +// ───────────────────────────────────────────── +class _BottomStatusBar extends StatelessWidget { + const _BottomStatusBar(); @override Widget build(BuildContext context) { - final homeCaptainController = Get.find(); return Positioned( - bottom: 16, - left: 16, - right: 16, + bottom: 12, + left: 12, + right: 12, child: GestureDetector( - onTap: () => _showDetailsDialog(context, homeCaptainController), - child: ClipRRect( - borderRadius: BorderRadius.circular(24), - child: BackdropFilter( - filter: ImageFilter.blur(sigmaX: 10, sigmaY: 10), - child: Container( - padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 8), - decoration: BoxDecoration( - color: Colors.white.withOpacity(0.85), - borderRadius: BorderRadius.circular(24), - border: Border.all(color: Colors.white.withOpacity(0.5)), - boxShadow: [ - BoxShadow( - color: Colors.black.withOpacity(0.1), - blurRadius: 20, - spreadRadius: -5, - ) - ], + onTap: () => _showDetailsSheet(context), + child: Container( + padding: const EdgeInsets.symmetric(horizontal: 14, vertical: 10), + decoration: BoxDecoration( + color: _Token.surfaceCard(context), + borderRadius: BorderRadius.circular(_Token.radius), + border: Border.all(color: _Token.border(context)), + boxShadow: [ + BoxShadow( + color: Colors.black.withOpacity(0.35), + blurRadius: 16, + offset: const Offset(0, 4), + ) + ], + ), + child: Row( + children: [ + // Online toggle + const ConnectWidget(), + const Spacer(), + // Ride count + GetBuilder( + builder: (c) => _StatChip( + icon: Icons.directions_car_rounded, + value: c.countRideToday, + label: 'Rides'.tr, + color: _Token.info, + ), ), - child: Row( - children: [ - const ConnectWidget(), - const Spacer(), - _buildQuickStat( - icon: Icons.directions_car_rounded, - value: homeCaptainController.countRideToday, - label: 'Rides'.tr, - color: AppColor.blueColor, - ), - const SizedBox(width: 16), - _buildQuickStat( - icon: Entypo.wallet, - value: homeCaptainController.totalMoneyToday.toString(), - label: 'Today'.tr, - color: AppColor.greenColor, - ), - const SizedBox(width: 8), - ], + const SizedBox(width: 14), + // Today earnings + GetBuilder( + builder: (c) => _StatChip( + icon: Entypo.wallet, + value: c.totalMoneyToday.toString(), + label: 'Today'.tr, + color: _Token.success, + ), ), - ), + // Chevron hint + const SizedBox(width: 8), + const Icon(Icons.keyboard_arrow_up_rounded, + color: Colors.grey, size: 18), + ], ), ), ), ); } - Widget _buildQuickStat( - {required IconData icon, - required String value, - required String label, - required Color color}) { - return Column( - mainAxisSize: MainAxisSize.min, - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - Row( - children: [ - Icon(icon, color: color, size: 20), - const SizedBox(width: 4), - Text(value, - style: AppStyle.title - .copyWith(fontSize: 16, fontWeight: FontWeight.bold)), - ], - ), - Text(label, - style: AppStyle.title - .copyWith(fontSize: 12, color: Colors.grey.shade700)), - ], + void _showDetailsSheet(BuildContext context) { + final ctrl = Get.find(); + showModalBottomSheet( + context: context, + backgroundColor: Colors.transparent, + builder: (_) => _DetailsSheet(ctrl), ); } } -/// 4. The Dialog that shows detailed driver stats. -class _DriverDetailsDialog extends StatelessWidget { - // 1. إضافة متغير للكنترولر - final HomeCaptainController controller; - - // 2. تحديث البناء لاستقباله - const _DriverDetailsDialog(this.controller); +class _StatChip extends StatelessWidget { + final IconData icon; + final String value; + final String label; + final Color color; + const _StatChip( + {required this.icon, + required this.value, + required this.label, + required this.color}); @override - Widget build(BuildContext context) { - // 3. حذف السطر الذي يسبب الخطأ: final homeCaptainController = Get.find... - - return BackdropFilter( - filter: ImageFilter.blur(sigmaX: 5, sigmaY: 5), - child: AlertDialog( - backgroundColor: Colors.white.withOpacity(0.95), - shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(20)), - titlePadding: const EdgeInsets.only(top: 20), - title: Center( - child: Text( - 'Your Activity'.tr, - style: AppStyle.title - .copyWith(fontSize: 20, fontWeight: FontWeight.bold), - ), - ), - content: SingleChildScrollView( - child: Column( - mainAxisSize: MainAxisSize.min, - crossAxisAlignment: CrossAxisAlignment.start, + Widget build(BuildContext context) => Column( + mainAxisSize: MainAxisSize.min, + children: [ + Row( children: [ - const Divider(height: 20), - _buildStatRow( - icon: Entypo.wallet, - color: AppColor.greenColor, - label: 'Today'.tr, - // استخدام المتغير controller الذي تم تمريره - value: controller.totalMoneyToday.toString(), - ), - const SizedBox(height: 12), - _buildStatRow( - icon: Entypo.wallet, - color: AppColor.yellowColor, - label: AppInformation.appName, - value: controller.totalMoneyInSEFER.toString(), - ), - const Divider(height: 24), - _buildDurationRow( - icon: Icons.timer_outlined, - label: 'Active Duration:'.tr, - value: controller.stringActiveDuration, - color: AppColor.greenColor, - ), - const SizedBox(height: 12), - _buildDurationRow( - icon: Icons.access_time, - label: 'Total Connection Duration:'.tr, - value: controller.totalDurationToday, - color: AppColor.accentColor, - ), - const Divider(height: 24), - _buildStatRow( - icon: Icons.star_border_rounded, - color: AppColor.blueColor, - label: 'Total Points'.tr, - value: controller.totalPoints.toString(), + Icon(icon, color: color, size: 16), + const SizedBox(width: 4), + Text( + value, + style: TextStyle( + color: Colors.white, + fontWeight: FontWeight.bold, + fontSize: 15), ), ], ), - ), - actions: [ - TextButton( - onPressed: () => Get.back(), - child: Text('Close'.tr, - style: AppStyle.title.copyWith( - color: AppColor.blueColor, fontWeight: FontWeight.bold)), - ) + Text(label, + style: const TextStyle(color: Colors.white38, fontSize: 11)), + ], + ); +} + +// ───────────────────────────────────────────── +// Details Bottom Sheet — replaces AlertDialog +// ───────────────────────────────────────────── +class _DetailsSheet extends StatelessWidget { + final HomeCaptainController ctrl; + const _DetailsSheet(this.ctrl); + + @override + Widget build(BuildContext context) { + return Container( + decoration: BoxDecoration( + color: _Token.surfaceCard(context), + borderRadius: BorderRadius.circular(24), + ), + padding: const EdgeInsets.fromLTRB(20, 12, 20, 28), + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + // Drag handle + Container( + width: 36, + height: 4, + decoration: BoxDecoration( + color: _Token.border(context), + borderRadius: BorderRadius.circular(2)), + ), + const SizedBox(height: 16), + Text( + 'Your Activity'.tr, + style: TextStyle( + color: _Token.text(context), + fontSize: 18, + fontWeight: FontWeight.bold), + ), + const SizedBox(height: 16), + Divider(color: _Token.border(context), height: 1), + const SizedBox(height: 16), + _SheetRow( + icon: Entypo.wallet, + color: _Token.success, + label: 'Today'.tr, + value: ctrl.totalMoneyToday.toString(), + ), + const SizedBox(height: 12), + _SheetRow( + icon: Entypo.wallet, + color: _Token.accent, + label: AppInformation.appName, + value: ctrl.totalMoneyInSEFER.toString(), + ), + const SizedBox(height: 12), + Divider(color: _Token.border(context), height: 1), + const SizedBox(height: 12), + _SheetRow( + icon: Icons.timer_outlined, + color: _Token.success, + label: 'Active Duration'.tr, + value: ctrl.stringActiveDuration, + ), + const SizedBox(height: 12), + _SheetRow( + icon: Icons.access_time_rounded, + color: _Token.info, + label: 'Total Connection'.tr, + value: ctrl.totalDurationToday, + ), + const SizedBox(height: 12), + Divider(color: _Token.border(context), height: 1), + const SizedBox(height: 12), + _SheetRow( + icon: Icons.star_rounded, + color: _Token.accent, + label: 'Total Points'.tr, + value: ctrl.totalPoints.toString(), + ), + const SizedBox(height: 20), + SizedBox( + width: double.infinity, + child: TextButton( + onPressed: () => Get.back(), + style: TextButton.styleFrom( + backgroundColor: _Token.accentSoft(context), + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(_Token.radiusSm)), + padding: const EdgeInsets.symmetric(vertical: 12), + ), + child: Text('Close'.tr, + style: const TextStyle( + color: _Token.accent, fontWeight: FontWeight.bold)), + ), + ), ], ), ); } - - // ... بقية الدوال المساعدة (_buildStatRow, _buildDurationRow) تبقى كما هي ... - Widget _buildStatRow( - {required IconData icon, - required Color color, - required String label, - required String value}) { - return Row( - children: [ - Icon(icon, color: color, size: 22), - const SizedBox(width: 12), - Text('$label:', style: AppStyle.title), - const Spacer(), - Text( - value, - style: AppStyle.title.copyWith( - color: color, fontWeight: FontWeight.bold, fontSize: 18), - ), - ], - ); - } - - Widget _buildDurationRow( - {required IconData icon, - required String label, - required String value, - required Color color}) { - return Row( - children: [ - Icon(icon, color: color, size: 20), - const SizedBox(width: 12), - Text(label, style: AppStyle.title), - const Spacer(), - Text( - value, - style: AppStyle.title.copyWith( - fontWeight: FontWeight.bold, color: color, fontSize: 16), - ), - ], - ); - } } -class _MapControlButton extends StatelessWidget { +class _SheetRow extends StatelessWidget { final IconData icon; - final VoidCallback onPressed; - final String tooltip; + final Color color; + final String label; + final String value; + const _SheetRow( + {required this.icon, + required this.color, + required this.label, + required this.value}); - const _MapControlButton({ - required this.icon, - required this.onPressed, - required this.tooltip, - required MaterialColor iconColor, - }); + @override + Widget build(BuildContext context) => Row( + children: [ + Icon(icon, color: color, size: 20), + const SizedBox(width: 12), + Text(label, + style: TextStyle(color: _Token.textDim(context), fontSize: 14)), + const Spacer(), + Text(value, + style: TextStyle( + color: color, fontSize: 16, fontWeight: FontWeight.bold)), + ], + ); +} + +// ───────────────────────────────────────────── +// Floating Action Buttons (right side) +// ───────────────────────────────────────────── +class _FloatingControls extends StatelessWidget { + const _FloatingControls({super.key}); @override Widget build(BuildContext context) { - return Tooltip( - message: tooltip, - child: Material( - color: Colors.transparent, - child: InkWell( - borderRadius: BorderRadius.circular(12), - onTap: onPressed, - child: Container( - padding: const EdgeInsets.all(8), - child: Icon( - icon, - size: 24, - color: AppColor.blueColor, + return Positioned( + bottom: 88, + right: 12, + child: GetBuilder( + builder: (ctrl) => Column( + children: [ + // Bubble/overlay mode (Android only) + if (Platform.isAndroid) ...[ + _Fab( + onTap: () => + Bubble().startBubbleHead(sendAppToBackground: true), + tooltip: 'Overlay'.tr, + child: Image.asset('assets/images/logo1.png', + width: 26, height: 26), + ), + const SizedBox(height: 10), + ], + // Available rides + _Fab( + onTap: () => Get.to(() => const AvailableRidesPage()), + icon: Icons.list_alt_rounded, + color: AppColor.primaryColor, + tooltip: 'Available Rides'.tr, ), - ), + // Continue active ride + if (box.read(BoxName.rideStatus) == 'Applied' || + box.read(BoxName.rideStatus) == 'Begin') ...[ + const SizedBox(height: 10), + _Fab( + onTap: () { + if (box.read(BoxName.rideStatus) == 'Applied') { + Get.to(() => PassengerLocationMapPage(), + arguments: box.read(BoxName.rideArguments)); + Get.put(MapDriverController()) + .changeRideToBeginToPassenger(); + } else { + Get.to(() => PassengerLocationMapPage(), + arguments: box.read(BoxName.rideArguments)); + Get.put(MapDriverController()).startRideFromStartApp(); + } + }, + icon: Icons.navigation_rounded, + color: _Token.info, + tooltip: 'Continue Ride'.tr, + ), + ], + ], ), ), ); } } -class FloatingActionButtons extends StatelessWidget { - const FloatingActionButtons(); +class _Fab extends StatelessWidget { + final VoidCallback onTap; + final IconData? icon; + final Widget? child; + final Color? color; + final String? tooltip; + const _Fab( + {required this.onTap, this.icon, this.child, this.color, this.tooltip}); @override - Widget build(BuildContext context) { - // نفس الكود الأصلي للأزرار - return Positioned( - bottom: Get.height * .2, - right: 6, - child: - GetBuilder(builder: (homeCaptainController) { - return Column( - children: [ - Platform.isAndroid - ? AnimatedContainer( - duration: const Duration(microseconds: 200), - width: homeCaptainController.widthMapTypeAndTraffic, - decoration: BoxDecoration( - border: Border.all(color: AppColor.blueColor), - color: AppColor.secondaryColor, - borderRadius: BorderRadius.circular(15)), - child: IconButton( - onPressed: () async { - Bubble().startBubbleHead(sendAppToBackground: true); - }, - icon: Image.asset( - 'assets/images/logo1.png', - fit: BoxFit.cover, - width: 35, - height: 35, - ), - ), - ) - : const SizedBox(), - const SizedBox( - height: 5, - ), - AnimatedContainer( - duration: const Duration(microseconds: 200), - width: homeCaptainController.widthMapTypeAndTraffic, - decoration: BoxDecoration( - border: Border.all(color: AppColor.blueColor), - color: AppColor.secondaryColor, - borderRadius: BorderRadius.circular(15)), - child: IconButton( - onPressed: () { - Get.to(() => const AvailableRidesPage()); - }, - icon: const Icon( - Icons.train_sharp, - size: 29, - color: AppColor.blueColor, - ), + Widget build(BuildContext context) => Tooltip( + message: tooltip ?? '', + child: Material( + color: color ?? _Token.surfaceCard(context), + shape: const CircleBorder(), + elevation: 6, + shadowColor: (color ?? Colors.black).withOpacity(0.4), + child: InkWell( + onTap: onTap, + customBorder: const CircleBorder(), + child: SizedBox( + width: 52, + height: 52, + child: Center( + child: child ?? + Icon(icon, + color: color != null ? Colors.white : _Token.accent, + size: 24), ), ), - const SizedBox( - height: 5, - ), - // هذا الكود يوضع داخل الـ Stack في ملف الواجهة (HomeCaptain View) - - box.read(BoxName.rideStatus) == 'Applied' || - box.read(BoxName.rideStatus) == 'Begin' - ? Positioned( - bottom: Get.height * .2, - // جعلنا الزر يظهر في المنتصف أو يمتد ليكون واضحاً جداً - right: 20, - left: 20, - child: Center( - child: AnimatedContainer( - duration: const Duration( - milliseconds: - 200), // تم تصحيح microseconds إلى milliseconds لحركة أنعم - // أزلنا العرض الثابت homeCaptainController.widthMapTypeAndTraffic لكي يتسع للنص - // width: homeCaptainController.widthMapTypeAndTraffic, - decoration: BoxDecoration( - border: Border.all( - color: AppColor.blueColor, - width: 2), // تعريض الإطار قليلاً - color: AppColor.secondaryColor, // لون الخلفية - borderRadius: BorderRadius.circular( - 30), // تدوير الحواف ليشبه الأزرار الحديثة - boxShadow: [ - BoxShadow( - color: Colors.black.withOpacity(0.2), - blurRadius: 8, - offset: const Offset(0, 4), - ) - ]), - child: Material( - color: Colors.transparent, - child: InkWell( - borderRadius: BorderRadius.circular(30), - onLongPress: () { - // وظيفة الحذف عند الضغط الطويل (للطوارئ) - box.write(BoxName.rideStatus, 'delete'); - homeCaptainController.update(); - }, - onTap: () { - // نفس منطقك الأصلي للانتقال - if (box.read(BoxName.rideStatus) == 'Applied') { - Get.to(() => PassengerLocationMapPage(), - arguments: box.read(BoxName.rideArguments)); - Get.put(MapDriverController()) - .changeRideToBeginToPassenger(); - } else { - Get.to(() => PassengerLocationMapPage(), - arguments: box.read(BoxName.rideArguments)); - Get.put(MapDriverController()) - .startRideFromStartApp(); - } - }, - child: Padding( - padding: const EdgeInsets.symmetric( - horizontal: 20, vertical: 12), - child: Row( - mainAxisSize: - MainAxisSize.min, // حجم الزر على قد المحتوى - mainAxisAlignment: MainAxisAlignment.center, - children: [ - const Icon( - Icons - .directions_car_filled_rounded, // تغيير الأيقونة لسيارة أو اتجاهات لتكون معبرة أكثر - size: 24, - color: AppColor.blueColor, - ), - const SizedBox( - width: 10), // مسافة بين الأيقونة والنص - Text( - "متابعة الرحلة", // النص الواضح للسائق - style: const TextStyle( - color: AppColor.blueColor, - fontSize: 16, - fontWeight: FontWeight.bold, - fontFamily: - 'Cairo', // تأكد من نوع الخط المستخدم عندك - ), - ), - if (box.read(BoxName.rideStatus) == - 'Begin') ...[ - const SizedBox(width: 5), - // إضافة مؤشر صغير (نقطة حمراء) إذا كانت الرحلة قد بدأت بالفعل (اختياري) - const Icon(Icons.circle, - size: 8, color: Colors.green) - ] - ], - ), - ), - ), - ), - ), - ), - ) - : const SizedBox() - ], - ); - }), - ); - } + ), + ), + ); } +// ───────────────────────────────────────────── +// Helper +// ───────────────────────────────────────────── Future checkForAppliedRide(BuildContext context) async { checkForPendingOrderFromServer(); } diff --git a/lib/views/home/Captin/home_captain/osm_view_map.dart b/lib/views/home/Captin/home_captain/osm_view_map.dart index 22d7e97..d1a59c7 100644 --- a/lib/views/home/Captin/home_captain/osm_view_map.dart +++ b/lib/views/home/Captin/home_captain/osm_view_map.dart @@ -1,83 +1,50 @@ import 'package:flutter/material.dart'; -import 'package:flutter_map/flutter_map.dart'; import 'package:get/get.dart'; -import 'package:latlong2/latlong.dart'; +import 'package:intaleq_maps/intaleq_maps.dart'; +import '../../../../constant/api_key.dart'; import '../../../../controller/functions/location_controller.dart'; import '../../../../controller/home/captin/home_captain_controller.dart'; -// هذه ويدجت بديلة للـ _MapView في الكود الخاص بك -// V3 - MapView Replacement using flutter_map class OsmMapView extends StatelessWidget { const OsmMapView({super.key}); @override Widget build(BuildContext context) { - // افترض أنك تحصل على الموقع والاتجاه بنفس الطريقة من الكونترولر final LocationController locationController = Get.find(); final HomeCaptainController homeCaptainController = Get.find(); - // يمكنك استخدام GetBuilder لمراقبة التغييرات في الموقع return Obx(() { final LatLng currentLocation = LatLng( locationController.myLocation.latitude, locationController.myLocation.longitude); final double currentHeading = locationController.heading; - return FlutterMap( - // يمكنك ربط هذا بـ MapController الخاص بـ flutter_map - // mapController: homeCaptainController.flutterMapController, - options: MapOptions( - initialCenter: currentLocation, - initialZoom: 15, - maxZoom: 18, - minZoom: 6, - // تدوير الخريطة (اختياري) - initialRotation: currentHeading, + return IntaleqMap( + apiKey: AK.mapSaasKey, + initialCameraPosition: CameraPosition( + target: currentLocation, + zoom: 15, + bearing: currentHeading, ), - children: [ - // 1. طبقة الخريطة الأساسية (Tiles) - // هذا هو الرابط لخرائط OSM الأساسية - TileLayer( - urlTemplate: 'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', - subdomains: ['a', 'b', 'c'], - userAgentPackageName: - 'com.example.app', // استبدل باسم الباكج الخاص بك - - // لاستخدام الخرائط الأوفلاين (بعد إعداد flutter_map_tile_caching) - // tileProvider: CachedTileProvider(), - ), - - // 2. طبقة العلامات (Markers) - MarkerLayer( - markers: [ - Marker( - width: 80.0, - height: 80.0, - point: currentLocation, - child: Transform.rotate( - angle: currentHeading * - (3.1415926535 / 180), // تحويل من درجات إلى راديان - child: Image.asset( - 'assets/images/car_icon.png', // تأكد أن لديك أيقونة السيارة - // يمكنك استخدام نفس الـ carIcon من الكونترولر - // icon: homeCaptainController.carIcon, (ملاحظة: flutter_map تستخدم ويدجت) - ), - ), - ), - ], - ), - - // يمكنك إضافة طبقات أخرى هنا (مثل الخطوط Polylines أو المضلعات Polygons) - ], + markers: { + Marker( + markerId: const MarkerId('myLocation'), + position: currentLocation, + rotation: currentHeading, + icon: homeCaptainController.carIcon, + anchor: const Offset(0.5, 0.5), + flat: true, + zIndex: 2, + ) + }, + onMapCreated: (IntaleqMapController controller) { + // You can assign this controller if needed + }, ); }); } } -// ملاحظة: ستحتاج إلى تعديل بسيط في HomeCaptainController -// لإنشاء MapController الخاص بـ flutter_map بدلاً من GoogleMapController -// import 'package:flutter_map/flutter_map.dart'; -// MapController flutterMapController = MapController(); diff --git a/lib/views/home/Captin/home_captain/widget/connect.dart b/lib/views/home/Captin/home_captain/widget/connect.dart index 3233881..11f90b4 100755 --- a/lib/views/home/Captin/home_captain/widget/connect.dart +++ b/lib/views/home/Captin/home_captain/widget/connect.dart @@ -5,7 +5,6 @@ import 'package:get/get.dart'; import 'package:sefer_driver/controller/home/payment/captain_wallet_controller.dart'; import '../../../../../constant/style.dart'; -import '../../../../../controller/functions/encrypt_decrypt.dart'; import '../../../../widgets/elevated_btn.dart'; import '../../../../../controller/home/captin/home_captain_controller.dart'; @@ -91,45 +90,56 @@ class ConnectWidget extends StatelessWidget { : Container( decoration: BoxDecoration( gradient: LinearGradient( + begin: Alignment.topLeft, + end: Alignment.bottomRight, colors: homeCaptainController.isActive - ? [Colors.green.shade400, Colors.green.shade700] - : [Colors.grey.shade400, Colors.grey.shade700], + ? [const Color(0xFF00C853), const Color(0xFF00E676)] + : [Colors.grey.shade600, Colors.grey.shade400], ), - borderRadius: BorderRadius.circular(12), + borderRadius: BorderRadius.circular(20), boxShadow: [ BoxShadow( - color: homeCaptainController.isActive - ? Colors.green.withOpacity(0.3) - : Colors.grey.withOpacity(0.3), - spreadRadius: 1, - blurRadius: 8, - offset: const Offset(0, 2), + color: (homeCaptainController.isActive + ? const Color(0xFF00C853) + : Colors.grey) + .withOpacity(0.4), + spreadRadius: 0, + blurRadius: 15, + offset: const Offset(0, 5), ), ], ), child: CupertinoButton( onPressed: homeCaptainController.onButtonSelected, padding: const EdgeInsets.symmetric( - horizontal: 24, vertical: 12), + horizontal: 20, vertical: 10), child: Row( mainAxisSize: MainAxisSize.min, children: [ - Icon( - homeCaptainController.isActive - ? CupertinoIcons.check_mark_circled_solid - : CupertinoIcons.circle, - color: Colors.white, - size: 24, + Container( + padding: const EdgeInsets.all(4), + decoration: BoxDecoration( + color: Colors.white.withOpacity(0.2), + shape: BoxShape.circle, + ), + child: Icon( + homeCaptainController.isActive + ? Icons.power_settings_new_rounded + : Icons.power_off_rounded, + color: Colors.white, + size: 20, + ), ), - const SizedBox(width: 8), + const SizedBox(width: 10), Text( homeCaptainController.isActive - ? 'Connected'.tr - : 'Not Connected'.tr, + ? 'Online'.tr + : 'Offline'.tr, style: const TextStyle( color: Colors.white, fontSize: 16, - fontWeight: FontWeight.w600, + fontWeight: FontWeight.bold, + letterSpacing: 0.5, ), ), ], diff --git a/lib/views/home/Captin/home_captain/widget/left_menu_map_captain.dart b/lib/views/home/Captin/home_captain/widget/left_menu_map_captain.dart index d78a971..42146ba 100755 --- a/lib/views/home/Captin/home_captain/widget/left_menu_map_captain.dart +++ b/lib/views/home/Captin/home_captain/widget/left_menu_map_captain.dart @@ -2,7 +2,6 @@ import 'package:flutter_overlay_window/flutter_overlay_window.dart'; import 'package:sefer_driver/constant/box_name.dart'; import 'package:sefer_driver/controller/firebase/local_notification.dart'; import 'package:sefer_driver/main.dart'; -import 'package:sefer_driver/views/auth/captin/otp_page.dart'; import 'package:sefer_driver/views/home/Captin/driver_map_page.dart'; import 'package:sefer_driver/views/home/Captin/orderCaptin/vip_order_page.dart'; import 'package:flutter/material.dart'; @@ -13,7 +12,6 @@ import 'package:sefer_driver/views/widgets/mydialoug.dart'; import '../../../../../constant/colors.dart'; import '../../../../../constant/links.dart'; -import '../../../../../controller/firebase/firbase_messge.dart'; import '../../../../../controller/firebase/notification_service.dart'; import '../../../../../controller/functions/crud.dart'; import '../../../../../controller/home/captin/order_request_controller.dart'; @@ -21,319 +19,279 @@ import '../../../../../controller/home/navigation/navigation_view.dart'; import '../../../../../print.dart'; import '../../../../Rate/ride_calculate_driver.dart'; +// ───────────────────────────────────────────── +// Design Tokens (Responsive) +// ───────────────────────────────────────────── +class _T { + static Color surface(BuildContext context) => + Theme.of(context).brightness == Brightness.dark + ? const Color(0xFF16213E) + : Colors.white; + + static const Color accent = Color(0xFFF0A500); + static const Color blue = Color(0xFF3498DB); + + static Color border(BuildContext context) => + Theme.of(context).brightness == Brightness.dark + ? const Color(0xFF2A2A4A) + : Colors.grey.withOpacity(0.2); + + static const double radius = 14.0; +} + +// ───────────────────────────────────────────── +// Left Side Menu +// ───────────────────────────────────────────── + +/// Returns the vertical icon column anchored to the left-center of the map. GetBuilder leftMainMenuCaptainIcons() { - final firebaseMessagesController = - Get.isRegistered() - ? Get.find() - : Get.put(FirebaseMessagesController()); return GetBuilder( - builder: (controller) => Positioned( - bottom: Get.height * .2, - left: 6, - child: Column( - children: [ - AnimatedContainer( - duration: const Duration(microseconds: 200), - width: controller.widthMapTypeAndTraffic, - decoration: BoxDecoration( - color: AppColor.secondaryColor, - border: Border.all(color: AppColor.blueColor), - borderRadius: BorderRadius.circular(15)), - child: Builder(builder: (context) { - return IconButton( - onPressed: () async { - await checkForPendingOrderFromServer(); - box.read(BoxName.rideArgumentsFromBackground) != 'failure' - ? Get.to(() => PassengerLocationMapPage(), - arguments: - box.read(BoxName.rideArgumentsFromBackground)) - : MyDialog().getDialog( - 'Ride info'.tr, - 'you dont have accepted ride'.tr, - () { - Get.back(); - }, - ); - // 'box.read(BoxName.rideArgumentsFromBackground): ${box.read(BoxName.rideArgumentsFromBackground)}'); - }, - icon: Icon( - Icons.directions_car_rounded, - size: 29, - color: - box.read(BoxName.rideArgumentsFromBackground) == 'failure' - ? AppColor.redColor - : AppColor.greenColor, - ), - ); - }), - ), - - const SizedBox( - height: 5, - ), - AnimatedContainer( - duration: const Duration(microseconds: 200), - width: controller.widthMapTypeAndTraffic, - decoration: BoxDecoration( - color: AppColor.secondaryColor, - border: Border.all(color: AppColor.blueColor), - borderRadius: BorderRadius.circular(15)), - child: IconButton( - onLongPress: () { - box.write(BoxName.statusDriverLocation, 'off'); - }, - onPressed: () { - // NotificationController1() - // .showNotification('Sefer Driver'.tr, ''.tr, '', ''); - final now = DateTime.now(); - DateTime? lastRequestTime = - box.read(BoxName.lastTimeStaticThrottle); - - if (lastRequestTime == null || - now.difference(lastRequestTime).inMinutes >= 2) { - // Update the last request time to now - lastRequestTime = now; - box.write(BoxName.lastTimeStaticThrottle, lastRequestTime); - // Navigate to the RideCalculateDriver page - Get.to(() => RideCalculateDriver()); - } else { - // Optionally show a message or handle the throttling case - final minutesLeft = - 2 - now.difference(lastRequestTime).inMinutes; - // Get.snackbar( - // '${'Please wait'.tr} $minutesLeft ${"minutes before trying again.".tr}', - // ''); - NotificationController().showNotification( - 'Intaleq Driver'.tr, - '${'Please wait'.tr} $minutesLeft ${"minutes before trying again.".tr}', - 'ding', - ''); - } - }, - icon: const Icon( - FontAwesome5.chart_bar, - size: 29, - color: AppColor.blueColor, + builder: (ctrl) => Positioned( + // Place just above the bottom status bar + bottom: 100, + left: 10, + child: Builder(builder: (context) { + return Container( + decoration: BoxDecoration( + color: _T.surface(context), + borderRadius: BorderRadius.circular(_T.radius), + border: Border.all(color: _T.border(context)), + boxShadow: [ + BoxShadow( + color: Colors.black.withOpacity(0.3), + blurRadius: 10, + offset: const Offset(2, 4), ), - ), + ], ), - - const SizedBox( - height: 5, - ), - // Platform.isAndroid - // ? - int.parse(box.read(BoxName.carYear).toString()) > 2023 - ? AnimatedContainer( - duration: const Duration(microseconds: 200), - width: controller.widthMapTypeAndTraffic, - decoration: BoxDecoration( - color: AppColor.secondaryColor, - border: Border.all(color: AppColor.blueColor), - borderRadius: BorderRadius.circular(15)), - child: Builder(builder: (context) { - return IconButton( - onPressed: () async { - // mySnakeBarError('ad'); - Get.to(() => const VipOrderPage()); - }, - icon: const Icon( - Octicons.watch, - size: 29, - color: AppColor.blueColor, - ), + padding: const EdgeInsets.symmetric(vertical: 6), + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + // ── 1. Active Ride shortcut ────────── + _MenuIcon( + icon: Icons.directions_car_rounded, + color: + box.read(BoxName.rideArgumentsFromBackground) == 'failure' + ? Colors.red.shade400 + : Colors.green.shade400, + tooltip: 'Active Ride'.tr, + onTap: () async { + await checkForPendingOrderFromServer(); + if (box.read(BoxName.rideArgumentsFromBackground) != 'failure') { + Get.to( + () => PassengerLocationMapPage(), + arguments: box.read(BoxName.rideArgumentsFromBackground), ); - }), - ) - : const SizedBox(), - // const SizedBox( - // height: 5, - // ), - - AnimatedContainer( - duration: const Duration(microseconds: 200), - width: controller.widthMapTypeAndTraffic, - decoration: BoxDecoration( - color: AppColor.secondaryColor, - border: Border.all(color: AppColor.blueColor), - borderRadius: BorderRadius.circular(15)), - child: Builder(builder: (context) { - return IconButton( - onPressed: () async { - box.remove(BoxName.agreeTerms); - Get.to(() => const NavigationView()); - - // box.write(BoxName.statusDriverLocation, 'off'); + } else { + MyDialog().getDialog( + 'Ride info'.tr, + 'you dont have accepted ride'.tr, + () => Get.back(), + ); + } }, - icon: const Icon( - FontAwesome5.map, - size: 29, - color: AppColor.blueColor, - ), - ); - }), - ), - // AnimatedContainer( - // duration: const Duration(microseconds: 200), - // width: controller.widthMapTypeAndTraffic, - // decoration: BoxDecoration( - // color: AppColor.secondaryColor, - // border: Border.all(color: AppColor.blueColor), - // borderRadius: BorderRadius.circular(15)), - // child: Builder(builder: (context) { - // return IconButton( - // onPressed: () async { - // NotificationService.sendNotification( - // target: 'service', // الإرسال لجميع المشتركين في "service" - // title: 'طلب خدمة جديد', - // body: 'تم استلام طلب خدمة جديد. الرجاء مراجعة التفاصيل.', - // isTopic: true, - // category: 'new_service_request', // فئة توضح نوع الإشعار - // ); - // }, - // icon: const Icon( - // FontAwesome5.grin_tears, - // size: 29, - // color: AppColor.blueColor, - // ), - // ); - // }), - // ), + ), - const SizedBox( - height: 5, + _Divider(context), + + // ── 2. Earnings Chart ──────────────── + _MenuIcon( + icon: FontAwesome5.chart_bar, + color: _T.blue, + tooltip: 'Earnings'.tr, + onTap: () { + final now = DateTime.now(); + DateTime? lastTime = box.read(BoxName.lastTimeStaticThrottle); + + if (lastTime == null || + now.difference(lastTime).inMinutes >= 2) { + box.write(BoxName.lastTimeStaticThrottle, now); + Get.to(() => RideCalculateDriver()); + } else { + final left = 2 - now.difference(lastTime).inMinutes; + NotificationController().showNotification( + 'Intaleq Driver'.tr, + '${'Please wait'.tr} $left ${"minutes before trying again.".tr}', + 'ding', + '', + ); + } + }, + onLongPress: () => + box.write(BoxName.statusDriverLocation, 'off'), + ), + + // ── 3. VIP Orders (2023+ cars only) ── + if (int.tryParse(box.read(BoxName.carYear).toString()) != null && + int.parse(box.read(BoxName.carYear).toString()) > 2023) ...[ + _Divider(context), + _MenuIcon( + icon: Octicons.watch, + color: _T.accent, + tooltip: 'VIP Orders'.tr, + onTap: () => Get.to(() => const VipOrderPage()), + ), + ], + ], ), - ], - ), + ); + }), ), ); } +// ───────────────────────────────────────────── +// Reusable sub-widgets +// ───────────────────────────────────────────── + +class _MenuIcon extends StatelessWidget { + final IconData icon; + final Color color; + final String tooltip; + final VoidCallback onTap; + final VoidCallback? onLongPress; + + const _MenuIcon({ + required this.icon, + required this.color, + required this.tooltip, + required this.onTap, + this.onLongPress, + }); + + @override + Widget build(BuildContext context) => Tooltip( + message: tooltip, + child: InkWell( + onTap: onTap, + onLongPress: onLongPress, + borderRadius: BorderRadius.circular(10), + child: Padding( + padding: const EdgeInsets.symmetric(horizontal: 10, vertical: 10), + child: Icon(icon, color: color, size: 26), + ), + ), + ); +} + +/// Thin separator between icons +class _Divider extends StatelessWidget { + final BuildContext context; + const _Divider(this.context); + + @override + Widget build(BuildContext context) => Container( + height: 1, + width: 32, + margin: const EdgeInsets.symmetric(horizontal: 6), + color: _T.border(this.context), + ); +} + +// ───────────────────────────────────────────── +// Server Helpers (unchanged logic) +// ───────────────────────────────────────────── + Future checkForPendingOrderFromServer() async { - bool _isProcessingOrder = false; - if (_isProcessingOrder) return; + bool isProcessing = false; + if (isProcessing) return; final driverId = box.read(BoxName.driverID)?.toString(); - if (driverId == null) return; // Can't check without a driver ID + if (driverId == null) return; - _isProcessingOrder = true; // Lock + isProcessing = true; try { - // You need to create this CRUD method var response = await CRUD().post( link: AppLink.getArgumentAfterAppliedFromBackground, payload: {'driver_id': driverId}, ); - Log.print('response: ${response}'); + Log.print('response: $response'); - // Assuming the server returns order data if found, or 'failure'/'none' if not if (response['status'] == 'success') { - final Map orderInfoFromServer = response['message']; - final Map rideArguments = - _transformServerDataToAppArguments(orderInfoFromServer); - // 2. Build the new arguments map, matching your Flutter structure + final Map orderInfo = response['message']; + final Map rideArgs = + _transformServerDataToAppArguments(orderInfo); -///////////// - final customerToken = (response)['message']['token_passenger']; - final orderId = (response)['message']['ride_id'].toString(); - box.write(BoxName.rideArgumentsFromBackground, rideArguments); + final customerToken = response['message']['token_passenger']; + final orderId = response['message']['ride_id'].toString(); + + box.write(BoxName.rideArgumentsFromBackground, rideArgs); box.write(BoxName.statusDriverLocation, 'on'); box.write(BoxName.rideStatus, 'Apply'); Get.put(OrderRequestController()).changeApplied(); - // MyDialog().getDialog(orderId.toString(), customerToken, () {}); - // Now proceed with the UI flow - // _sendAcceptanceNotification(customerToken, orderId.toString()); - // await _bringAppToForegroundAndNavigate(orderId); - Get.to(() => PassengerLocationMapPage(), - arguments: box.read(BoxName.rideArgumentsFromBackground)); + Get.to( + () => PassengerLocationMapPage(), + arguments: box.read(BoxName.rideArgumentsFromBackground), + ); } else { box.write(BoxName.rideArgumentsFromBackground, 'failure'); } - } catch (e) { + } catch (_) { + // silent } finally { - _isProcessingOrder = false; // Release lock + isProcessing = false; } } Map _transformServerDataToAppArguments( - Map serverData) { - // Helper function to safely get and convert values to String - String _getString(String key, [String defaultValue = 'unknown']) { - // serverData[key] might be an int, double, or string. .toString() handles all. - // If it's null, use the default value. - return serverData[key]?.toString() ?? defaultValue; - } + Map d) { + String s(String key, [String def = 'unknown']) => d[key]?.toString() ?? def; return { - 'passengerLocation': _getString('passenger_location'), - 'passengerDestination': _getString('passenger_destination'), - 'Duration': _getString('duration'), - 'totalCost': _getString('total_cost'), - 'Distance': _getString('distance'), - 'name': _getString('name'), - 'phone': _getString('phone'), - 'email': _getString('email'), - 'tokenPassenger': _getString('token_passenger'), - 'direction': _getString('direction_url'), - 'DurationToPassenger': _getString('duration_to_passenger'), - 'rideId': _getString('ride_id'), - 'passengerId': _getString('passenger_id'), - 'driverId': _getString('driver_id'), - 'durationOfRideValue': _getString('duration_of_ride'), - 'paymentAmount': _getString('payment_amount'), - 'paymentMethod': _getString('payment_method'), - 'passengerWalletBurc': _getString('passenger_wallet_burc'), - 'timeOfOrder': _getString('time_of_order'), - 'totalPassenger': _getString('total_passenger'), - 'carType': _getString('car_type'), - 'kazan': _getString('kazan'), - 'startNameLocation': _getString('start_name_location'), - 'endNameLocation': _getString('end_name_location'), - - // --- Special Handling --- - - // Steps (handle null values by providing an empty string) - 'step0': _getString('step0'), - 'step1': _getString('step1'), - 'step2': _getString('step2'), - 'step3': _getString('step3'), - 'step4': _getString('step4'), - - // Boolean conversion (1/0 from server to 'true'/'false' string for the app) - 'WalletChecked': (serverData['wallet_checked'] == 1).toString(), - - // Logic-based conversion for isHaveSteps - // Your app's `rideArguments` expects 'startEnd', so we provide that if has_steps is 1. - // You might need to adjust this logic if 'haveSteps' is also a possibility. - 'isHaveSteps': (serverData['has_steps'] == 1) - ? 'startEnd' - : 'noSteps', // Providing a default + 'passengerLocation': s('passenger_location'), + 'passengerDestination': s('passenger_destination'), + 'Duration': s('duration'), + 'totalCost': s('total_cost'), + 'Distance': s('distance'), + 'name': s('name'), + 'phone': s('phone'), + 'email': s('email'), + 'tokenPassenger': s('token_passenger'), + 'direction': s('direction_url'), + 'DurationToPassenger': s('duration_to_passenger'), + 'rideId': s('ride_id'), + 'passengerId': s('passenger_id'), + 'driverId': s('driver_id'), + 'durationOfRideValue': s('duration_of_ride'), + 'paymentAmount': s('payment_amount'), + 'paymentMethod': s('payment_method'), + 'passengerWalletBurc': s('passenger_wallet_burc'), + 'timeOfOrder': s('time_of_order'), + 'totalPassenger': s('total_passenger'), + 'carType': s('car_type'), + 'kazan': s('kazan'), + 'startNameLocation': s('start_name_location'), + 'endNameLocation': s('end_name_location'), + 'step0': s('step0'), + 'step1': s('step1'), + 'step2': s('step2'), + 'step3': s('step3'), + 'step4': s('step4'), + 'WalletChecked': (d['wallet_checked'] == 1).toString(), + 'isHaveSteps': (d['has_steps'] == 1) ? 'startEnd' : 'noSteps', }; } -void _sendAcceptanceNotification(String? customerToken, rideId) { - try { - if (customerToken == null) return; +void _sendAcceptanceNotification(String? customerToken, dynamic rideId) { + if (customerToken == null || customerToken.isEmpty) return; - List bodyToPassenger = [ - box.read(BoxName.driverID).toString(), - box.read(BoxName.nameDriver).toString(), - box.read(BoxName.tokenDriver).toString(), - rideId.toString() - ]; + List body = [ + box.read(BoxName.driverID).toString(), + box.read(BoxName.nameDriver).toString(), + box.read(BoxName.tokenDriver).toString(), + rideId.toString(), + ]; - // Safely check for customer token - final String? token = customerToken; - if (token != null && token.isNotEmpty) { - NotificationService.sendNotification( - target: token.toString(), - title: 'Accepted Ride'.tr, - body: 'your ride is Accepted'.tr, - isTopic: false, // Important: this is a token - tone: 'start', - driverList: bodyToPassenger, category: 'Accepted Ride', - ); - } else {} - } catch (e) {} + NotificationService.sendNotification( + target: customerToken, + title: 'Accepted Ride'.tr, + body: 'your ride is Accepted'.tr, + isTopic: false, + tone: 'start', + driverList: body, + category: 'Accepted Ride', + ); } diff --git a/lib/views/home/Captin/home_captain/widget/zones_controller.dart b/lib/views/home/Captin/home_captain/widget/zones_controller.dart index c531147..7b6565a 100755 --- a/lib/views/home/Captin/home_captain/widget/zones_controller.dart +++ b/lib/views/home/Captin/home_captain/widget/zones_controller.dart @@ -2,7 +2,7 @@ import 'dart:convert'; import 'dart:math'; import 'package:get/get.dart'; -import 'package:google_maps_flutter/google_maps_flutter.dart'; +import 'package:intaleq_maps/intaleq_maps.dart'; class ZonesController extends GetxController { Map> generateZoneMap( diff --git a/lib/views/home/Captin/maintain_center_page.dart b/lib/views/home/Captin/maintain_center_page.dart index 7640ccf..ef76fb4 100755 --- a/lib/views/home/Captin/maintain_center_page.dart +++ b/lib/views/home/Captin/maintain_center_page.dart @@ -132,10 +132,11 @@ class MaintainCenterPage extends StatelessWidget { "When you complete 600 trips, you will be eligible to receive offers for maintenance of your car." .tr, style: Theme.of(context).textTheme.titleMedium!.copyWith( - color: Colors.grey[700], + color: Theme.of(context).textTheme.bodyMedium?.color?.withOpacity(0.8), height: 1.4, ), ), + const SizedBox(height: 20), // Trip Count Section in a Card @@ -192,10 +193,11 @@ class MaintainCenterPage extends StatelessWidget { .textTheme .bodyMedium! .copyWith( - color: Colors.grey[800], + color: Theme.of(context).textTheme.bodyMedium?.color?.withOpacity(0.9), height: 1.5, ), ), + ], ), ), diff --git a/lib/views/home/Captin/mapDriverWidgets/google_driver_map_page.dart b/lib/views/home/Captin/mapDriverWidgets/google_driver_map_page.dart index b6c60e0..96290f9 100755 --- a/lib/views/home/Captin/mapDriverWidgets/google_driver_map_page.dart +++ b/lib/views/home/Captin/mapDriverWidgets/google_driver_map_page.dart @@ -1,6 +1,7 @@ import 'package:flutter/material.dart'; import 'package:get/get.dart'; -import 'package:google_maps_flutter/google_maps_flutter.dart'; +import 'package:intaleq_maps/intaleq_maps.dart'; +import 'package:sefer_driver/constant/api_key.dart'; import '../../../../controller/functions/location_controller.dart'; import '../../../../controller/home/captin/map_driver_controller.dart'; @@ -21,76 +22,24 @@ class GoogleDriverMap extends StatelessWidget { final double mapPaddingBottom = MediaQuery.of(context).size.height * 0.3; return GetBuilder( - builder: (controller) => GoogleMap( + builder: (controller) => IntaleqMap( + apiKey: AK.mapAPIKEY, onMapCreated: (mapController) { controller.onMapCreated(mapController); - // New: تطبيق الـ padding بعد إنشاء الخريطة مباشرة - mapController.setMapStyle('[]'); // يمكنك إضافة تصميم مخصص للخريطة هنا - // يمكنك استخدام CameraUpdate.scrollBy لتحريك الكاميرا إذا رغبت بذلك: - // controller.mapController!.animateCamera(CameraUpdate.scrollBy(0, mapPaddingBottom)); }, - // New: إضافة padding لتحريك مركز الخريطة للأعلى، مما يجعل أيقونة السائق تظهر في الأسفل - - zoomControlsEnabled: false, // Changed: تم إخفاء أزرار الزوم الافتراضية + zoomControlsEnabled: false, initialCameraPosition: CameraPosition( target: locationController.myLocation, zoom: 17, - bearing: locationController.heading, // استخدام اتجاه السائق - tilt: 60, // زاوية ميل + bearing: locationController.heading, + tilt: 60, ), - onCameraMove: (position) { - CameraPosition( - target: locationController.myLocation, - zoom: 17.5, - tilt: 50.0, - bearing: locationController.heading, - ); - }, - padding: EdgeInsets.only(bottom: 50, top: Get.height * 0.7), - minMaxZoomPreference: const MinMaxZoomPreference(8, 18), - myLocationEnabled: false, // Changed: تم الاعتماد على ماركر مخصص + // padding: EdgeInsets.only(bottom: 50, top: Get.height * 0.7), + // minMaxZoomPreference: const MinMaxZoomPreference(8, 18), + myLocationEnabled: false, myLocationButtonEnabled: true, compassEnabled: true, - mapType: MapType.terrain, - trafficEnabled: true, // Changed: تفعيل عرض حركة المرور - buildingsEnabled: true, - polylines: { - // Polyline( - // zIndex: 2, - - // polylineId: const PolylineId('route1'), - // points: controller.polylineCoordinates, - // color: const Color.fromARGB(255, 163, 81, 246), - // width: 6, // Changed: زيادة عرض الخط - // startCap: Cap.roundCap, - // endCap: Cap.roundCap, - // ), - // Polyline( - // zIndex: 2, - - // polylineId: const PolylineId('route'), - // points: controller.polylineCoordinatesDestination, - // color: const Color.fromARGB(255, 10, 29, 126), - // width: 6, // Changed: زيادة عرض الخط - // startCap: Cap.roundCap, - // endCap: Cap.roundCap, - // ), - Polyline( - polylineId: const PolylineId('upcoming_route'), - points: controller.upcomingPathPoints, - color: Colors.blue, // أو أي لون آخر تختاره للمسار - width: 8, - zIndex: 2, - ), - // 2. الخط المقطوع (تحت) - Polyline( - polylineId: const PolylineId('traveled_route'), - points: controller.traveledPathPoints, - color: Colors.grey.withOpacity(0.8), - width: 7, - zIndex: 1, - ), - }, + polylines: controller.polyLines.toSet(), markers: { Marker( markerId: MarkerId('MyLocation'.tr), diff --git a/lib/views/home/Captin/mapDriverWidgets/google_map_app.dart b/lib/views/home/Captin/mapDriverWidgets/google_map_app.dart index de76013..e36ec66 100755 --- a/lib/views/home/Captin/mapDriverWidgets/google_map_app.dart +++ b/lib/views/home/Captin/mapDriverWidgets/google_map_app.dart @@ -48,7 +48,7 @@ class GoogleMapApp extends StatelessWidget { border: Border.all( color: AppColor.blueColor.withOpacity(0.2), width: 1), ), - child: const Icon( + child: Icon( MaterialCommunityIcons.google_maps, size: 28, color: AppColor.secondaryColor, diff --git a/lib/views/home/Captin/orderCaptin/marker_generator.dart b/lib/views/home/Captin/orderCaptin/marker_generator.dart index d752287..74e204a 100644 --- a/lib/views/home/Captin/orderCaptin/marker_generator.dart +++ b/lib/views/home/Captin/orderCaptin/marker_generator.dart @@ -1,11 +1,11 @@ import 'dart:ui' as ui; import 'package:flutter/material.dart'; -import 'package:google_maps_flutter/google_maps_flutter.dart'; +import 'package:intaleq_maps/intaleq_maps.dart'; import 'package:flutter/services.dart'; class MarkerGenerator { // دالة لرسم ماركر يحتوي على نص (للوقت والمسافة) - static Future createCustomMarkerBitmap({ + static Future createCustomMarkerBitmap({ required String title, required String subtitle, required Color color, @@ -19,15 +19,15 @@ class MarkerGenerator { const double height = 110.0; const double circleRadius = 25.0; - // 1. رسم المربع (Info Box) + // 1. رسم المربع (Info Box) مع تدرج لوني بسيط final Paint paint = Paint()..color = color; final RRect rRect = RRect.fromRectAndRadius( - const Rect.fromLTWH(0, 0, width, 60), - const Radius.circular(15), + const Rect.fromLTWH(0, 0, width, 65), + const Radius.circular(20), // زوايا أكثر استدارة لشكل عصري ); - // ظل خفيف - canvas.drawShadow(Path()..addRRect(rRect), Colors.black, 5.0, true); + // ظل أقوى لمظهر بارز (Premium Feel) + canvas.drawShadow(Path()..addRRect(rRect), Colors.black54, 10.0, true); canvas.drawRRect(rRect, paint); // 2. رسم مثلث صغير أسفل المربع (Arrow Tail) @@ -96,11 +96,11 @@ class MarkerGenerator { ); final ByteData? data = await image.toByteData(format: ui.ImageByteFormat.png); - return BitmapDescriptor.fromBytes(data!.buffer.asUint8List()); + return InlqBitmap.fromBytes(data!.buffer.asUint8List()); } // دالة خاصة لرسم ماركر السائق (دائرة وخلفها سهم) - static Future createDriverMarker() async { + static Future createDriverMarker() async { final ui.PictureRecorder pictureRecorder = ui.PictureRecorder(); final Canvas canvas = Canvas(pictureRecorder); const double size = 100.0; @@ -137,6 +137,6 @@ class MarkerGenerator { .toImage(size.toInt(), size.toInt()); final ByteData? data = await image.toByteData(format: ui.ImageByteFormat.png); - return BitmapDescriptor.fromBytes(data!.buffer.asUint8List()); + return InlqBitmap.fromBytes(data!.buffer.asUint8List()); } } diff --git a/lib/views/home/Captin/orderCaptin/order_request_page.dart b/lib/views/home/Captin/orderCaptin/order_request_page.dart index ea30450..2c47c2e 100755 --- a/lib/views/home/Captin/orderCaptin/order_request_page.dart +++ b/lib/views/home/Captin/orderCaptin/order_request_page.dart @@ -1,6 +1,7 @@ import 'package:flutter/material.dart'; import 'package:get/get.dart'; -import 'package:google_maps_flutter/google_maps_flutter.dart'; +import 'package:intaleq_maps/intaleq_maps.dart'; +import 'package:sefer_driver/constant/api_key.dart'; import 'package:sefer_driver/constant/colors.dart'; import 'package:sefer_driver/controller/home/captin/order_request_controller.dart'; @@ -63,20 +64,21 @@ class OrderRequestPage extends StatelessWidget { // 1. الخارطة Positioned.fill( bottom: 300, - child: GoogleMap( - mapType: MapType.normal, + child: IntaleqMap( + apiKey: AK.mapAPIKEY, initialCameraPosition: CameraPosition( target: LatLng( controller.latPassenger, controller.lngPassenger), zoom: 13.0, ), markers: controller.markers, + mapType: Get.isDarkMode + ? IntaleqMapType.normal + : IntaleqMapType.light, polylines: controller.polylines, zoomControlsEnabled: false, myLocationButtonEnabled: false, compassEnabled: false, - padding: const EdgeInsets.only( - top: 80, bottom: 20, left: 20, right: 20), onMapCreated: (c) { controller.onMapCreated(c); controller.update(); @@ -124,15 +126,16 @@ class OrderRequestPage extends StatelessWidget { alignment: Alignment.bottomCenter, child: Container( height: 360, - decoration: const BoxDecoration( - color: Colors.white, - borderRadius: BorderRadius.only( + decoration: BoxDecoration( + color: Theme.of(context).cardColor, + borderRadius: const BorderRadius.only( topLeft: Radius.circular(25), topRight: Radius.circular(25), ), boxShadow: [ BoxShadow( - color: Colors.black12, + color: + Theme.of(context).shadowColor.withOpacity(0.1), blurRadius: 20, spreadRadius: 5) ], @@ -146,8 +149,9 @@ class OrderRequestPage extends StatelessWidget { width: 40, height: 4, decoration: BoxDecoration( - color: Colors.grey[300], + color: Theme.of(context).dividerColor, borderRadius: BorderRadius.circular(2)))), + const SizedBox(height: 15), // الصف الأول: الراكب والسعر @@ -156,11 +160,14 @@ class OrderRequestPage extends StatelessWidget { children: [ Row( children: [ - const CircleAvatar( + CircleAvatar( radius: 24, - backgroundColor: Color(0xFFF5F5F5), + backgroundColor: Theme.of(context) + .colorScheme + .surfaceVariant, child: Icon(Icons.person, - color: Colors.grey, size: 28), + color: Theme.of(context).hintColor, + size: 28), ), const SizedBox(width: 10), Column( @@ -233,27 +240,45 @@ class OrderRequestPage extends StatelessWidget { padding: const EdgeInsets.symmetric( vertical: 10, horizontal: 10), decoration: BoxDecoration( - color: const Color(0xFFF8F9FA), + color: Theme.of(context) + .colorScheme + .surfaceVariant + .withOpacity(0.5), borderRadius: BorderRadius.circular(12), - border: Border.all(color: Colors.grey.shade200), + border: Border.all( + color: Theme.of(context).dividerColor), ), child: Row( mainAxisAlignment: MainAxisAlignment.spaceAround, children: [ _buildInfoItem( - carIcon, carTypeLabel, carTypeColor), + context, carIcon, carTypeLabel, carTypeColor), Container( height: 20, width: 1, - color: Colors.grey.shade300), - _buildInfoItem(Icons.route, - controller.totalTripDistance, Colors.black87), + color: Theme.of(context).dividerColor), + _buildInfoItem( + context, + Icons.route, + controller.totalTripDistance, + Theme.of(context) + .textTheme + .bodyLarge + ?.color ?? + Colors.black87), Container( height: 20, width: 1, - color: Colors.grey.shade300), - _buildInfoItem(Icons.access_time_filled, - controller.totalTripDuration, Colors.black87), + color: Theme.of(context).dividerColor), + _buildInfoItem( + context, + Icons.access_time_filled, + controller.totalTripDuration, + Theme.of(context) + .textTheme + .bodyLarge + ?.color ?? + Colors.black87), ], ), ), @@ -397,7 +422,8 @@ class OrderRequestPage extends StatelessWidget { ); } - Widget _buildInfoItem(IconData icon, String text, Color color) { + Widget _buildInfoItem( + BuildContext context, IconData icon, String text, Color color) { return Row( mainAxisSize: MainAxisSize.min, children: [ diff --git a/lib/views/home/Captin/orderCaptin/order_speed_request.dart b/lib/views/home/Captin/orderCaptin/order_speed_request.dart index c2e6bf3..904daba 100755 --- a/lib/views/home/Captin/orderCaptin/order_speed_request.dart +++ b/lib/views/home/Captin/orderCaptin/order_speed_request.dart @@ -2,7 +2,7 @@ // import 'package:flutter/material.dart'; // import 'package:get/get.dart'; -// import 'package:google_maps_flutter/google_maps_flutter.dart'; +// import 'package:intaleq_maps/intaleq_maps.dart'; // import 'package:sefer_driver/controller/home/captin/home_captain_controller.dart'; // import 'package:sefer_driver/constant/box_name.dart'; diff --git a/lib/views/home/Captin/orderCaptin/test_order_page.dart b/lib/views/home/Captin/orderCaptin/test_order_page.dart index 3157bac..82f4a65 100755 --- a/lib/views/home/Captin/orderCaptin/test_order_page.dart +++ b/lib/views/home/Captin/orderCaptin/test_order_page.dart @@ -1,7 +1,8 @@ import 'dart:convert'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; -import 'package:google_maps_flutter/google_maps_flutter.dart'; +import 'package:intaleq_maps/intaleq_maps.dart'; +import 'package:sefer_driver/constant/api_key.dart'; import 'dart:math' as math; import '../../../../constant/colors.dart'; @@ -60,7 +61,8 @@ class _OrderRequestPageTestState extends State { children: [ SizedBox( height: Get.height * .33, - child: Obx(() => GoogleMap( + child: Obx(() => IntaleqMap( + apiKey: AK.mapAPIKEY, initialCameraPosition: CameraPosition( zoom: 12, target: @@ -69,13 +71,13 @@ class _OrderRequestPageTestState extends State { cameraTargetBounds: CameraTargetBounds( _orderRequestController.mapBounds.value), myLocationButtonEnabled: true, - trafficEnabled: false, - buildingsEnabled: false, - mapToolbarEnabled: true, + // trafficEnabled: false, + // buildingsEnabled: false, + // mapToolbarEnabled: true, myLocationEnabled: true, markers: _orderRequestController.markers.value, polylines: _orderRequestController.polylines.value, - onMapCreated: (GoogleMapController controller) { + onMapCreated: (IntaleqMapController controller) { _orderRequestController.mapController.value = controller; }, @@ -104,11 +106,11 @@ class OrderRequestController extends GetxController { Rx> markers = Rx>({}); Rx> polylines = Rx>({}); - Rx mapController = Rx(null); + Rx mapController = Rx(null); // Icons for start and end markers - late BitmapDescriptor startIcon; - late BitmapDescriptor endIcon; + late InlqBitmap startIcon; + late InlqBitmap endIcon; // Coordinates for passenger location and destination Rx passengerLocation = Rx(null); @@ -123,12 +125,8 @@ class OrderRequestController extends GetxController { void _initializeMarkerIcons() async { // Load custom marker icons - startIcon = await BitmapDescriptor.fromAssetImage( - const ImageConfiguration(size: Size(48, 48)), - 'assets/start_marker.png'); - - endIcon = await BitmapDescriptor.fromAssetImage( - const ImageConfiguration(size: Size(48, 48)), 'assets/end_marker.png'); + startIcon = InlqBitmap.fromAsset('assets/start_marker.png'); + endIcon = InlqBitmap.fromAsset('assets/end_marker.png'); } void parseCoordinates(List myList) { @@ -184,10 +182,10 @@ class OrderRequestController extends GetxController { polylines.value = { Polyline( zIndex: 1, - consumeTapEvents: true, + // consumeTapEvents: true, geodesic: true, - endCap: Cap.buttCap, - startCap: Cap.buttCap, + // endCap: Cap.buttCap, + // startCap: Cap.buttCap, visible: true, polylineId: const PolylineId('routeOrder'), points: [passengerLocation.value!, passengerDestination.value!], diff --git a/lib/views/home/my_wallet/payment_history_driver_page.dart b/lib/views/home/my_wallet/payment_history_driver_page.dart index b92aeac..632497a 100755 --- a/lib/views/home/my_wallet/payment_history_driver_page.dart +++ b/lib/views/home/my_wallet/payment_history_driver_page.dart @@ -2,30 +2,35 @@ import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:flutter_staggered_animations/flutter_staggered_animations.dart'; import 'package:sefer_driver/constant/colors.dart'; -import 'package:sefer_driver/constant/style.dart'; // Assuming this has your text styles -import 'package:sefer_driver/views/widgets/mycircular.dart'; // Assuming this is your loading widget - +import 'package:sefer_driver/constant/style.dart'; +import 'package:sefer_driver/constant/finance_design_system.dart'; +import 'package:sefer_driver/views/widgets/mycircular.dart'; import '../../../controller/payment/driver_payment_controller.dart'; +import 'widgets/transaction_preview_item.dart'; class PaymentHistoryDriverPage extends StatelessWidget { const PaymentHistoryDriverPage({super.key}); @override Widget build(BuildContext context) { - // Initialize your controller Get.put(DriverWalletHistoryController()); return Scaffold( + backgroundColor: FinanceDesignSystem.backgroundColor, appBar: AppBar( - title: Text('Payment History'.tr), - backgroundColor: Colors.white, - elevation: 1, + title: Text('Payment History'.tr, + style: const TextStyle(fontWeight: FontWeight.bold, color: FinanceDesignSystem.primaryDark)), + backgroundColor: Colors.transparent, + elevation: 0, + centerTitle: true, + leading: IconButton( + icon: const Icon(Icons.arrow_back_ios_new_rounded, color: FinanceDesignSystem.primaryDark, size: 20), + onPressed: () => Get.back(), + ), ), - backgroundColor: Colors.grey[100], body: GetBuilder( builder: (controller) { if (controller.isLoading) { - // Using your custom loading indicator return const Center(child: MyCircularProgressIndicator()); } @@ -34,16 +39,10 @@ class PaymentHistoryDriverPage extends StatelessWidget { child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ - Icon(Icons.account_balance_wallet_outlined, - size: 80, color: Colors.grey[400]), + Icon(Icons.history_rounded, size: 80, color: Colors.grey.shade300), const SizedBox(height: 16), - Text( - 'No transactions yet'.tr, - style: Theme.of(context) - .textTheme - .headlineSmall - ?.copyWith(color: Colors.grey[600]), - ), + Text('No transactions yet'.tr, + style: TextStyle(color: Colors.grey.shade400, fontWeight: FontWeight.bold)), ], ), ); @@ -51,18 +50,26 @@ class PaymentHistoryDriverPage extends StatelessWidget { return AnimationLimiter( child: ListView.builder( - padding: const EdgeInsets.all(16.0), + padding: const EdgeInsets.symmetric(horizontal: 20, vertical: 10), itemCount: controller.archive.length, itemBuilder: (BuildContext context, int index) { - var transaction = controller.archive[index]; - + final tx = controller.archive[index]; + final double amount = double.tryParse(tx['amount']?.toString() ?? '0') ?? 0; + return AnimationConfiguration.staggeredList( position: index, duration: const Duration(milliseconds: 375), child: SlideAnimation( verticalOffset: 50.0, child: FadeInAnimation( - child: _TransactionCard(transaction: transaction), + child: TransactionPreviewItem( + title: amount >= 0 ? 'Credit'.tr : 'Debit'.tr, + subtitle: tx['created_at'] ?? '', + amount: amount.abs().toStringAsFixed(0), + date: tx['created_at']?.split(' ')[0] ?? '', + type: amount >= 0 ? 'credit' : 'debit', + onTap: () {}, + ), ), ), ); @@ -74,71 +81,3 @@ class PaymentHistoryDriverPage extends StatelessWidget { ); } } - -// A dedicated widget for displaying a single transaction with a modern UI. -class _TransactionCard extends StatelessWidget { - final Map transaction; - - const _TransactionCard({required this.transaction}); - - @override - Widget build(BuildContext context) { - // Safely parse the amount to avoid errors - final double amount = - double.tryParse(transaction['amount']?.toString() ?? '0') ?? 0; - - final bool isCredit = amount >= 0; - - final Color indicatorColor = - isCredit ? AppColor.greenColor : AppColor.redColor; - final IconData iconData = - isCredit ? Icons.arrow_upward_rounded : Icons.arrow_downward_rounded; - final String transactionType = (isCredit ? 'Credit'.tr : 'Debit'.tr).tr; - - return Card( - elevation: 2, - shadowColor: Colors.black.withOpacity(0.05), - margin: const EdgeInsets.only(bottom: 12.0), - shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(10)), - clipBehavior: Clip.antiAlias, // Ensures the color bar is clipped neatly - child: IntrinsicHeight( - // Ensures the color bar and content have the same height - child: Row( - children: [ - // Left-side color indicator bar - Container(width: 6, color: indicatorColor), - - Expanded( - child: ListTile( - leading: Icon(iconData, color: indicatorColor, size: 30), - title: Text( - // Use .abs() to remove the negative sign from the display - '${amount.abs().toStringAsFixed(2)} ${'SYP'.tr}', - style: AppStyle.title.copyWith( - fontWeight: FontWeight.bold, - color: Colors.black87, - ), - ), - subtitle: Text( - transaction['created_at'] ?? 'No date', - style: AppStyle.title.copyWith( - fontSize: 12, - color: Colors.grey[600], - ), - ), - trailing: Text( - transactionType, - style: AppStyle.title.copyWith( - fontSize: 14, - color: indicatorColor, - fontWeight: FontWeight.w600, - ), - ), - ), - ), - ], - ), - ), - ); - } -} diff --git a/lib/views/home/my_wallet/points_captain.dart b/lib/views/home/my_wallet/points_captain.dart index 0d32d70..f8ec2c1 100755 --- a/lib/views/home/my_wallet/points_captain.dart +++ b/lib/views/home/my_wallet/points_captain.dart @@ -11,6 +11,7 @@ import 'package:sefer_driver/controller/payment/smsPaymnet/payment_services.dart import 'package:webview_flutter/webview_flutter.dart'; import '../../../constant/box_name.dart'; +import '../../../constant/finance_design_system.dart'; import '../../../constant/links.dart'; import '../../../controller/functions/crud.dart'; import '../../../controller/payment/mtn_new/mtn_payment_new_screen.dart'; @@ -21,8 +22,8 @@ import '../../widgets/my_textField.dart'; import 'ecash.dart'; class PointsCaptain extends StatelessWidget { - PaymentController paymentController = Get.put(PaymentController()); - CaptainWalletController captainWalletController = + final PaymentController paymentController = Get.put(PaymentController()); + final CaptainWalletController captainWalletController = Get.put(CaptainWalletController()); PointsCaptain({ @@ -31,263 +32,67 @@ class PointsCaptain extends StatelessWidget { required this.countPoint, required this.pricePoint, }); + final Color kolor; final String countPoint; - double pricePoint; + final double pricePoint; @override Widget build(BuildContext context) { - return InkWell( - onTap: () async { - Get.defaultDialog( - title: 'Which method you will pay'.tr, - titleStyle: AppStyle.title, - content: Column( - crossAxisAlignment: CrossAxisAlignment.center, + return Container( + margin: const EdgeInsets.only(right: 12, bottom: 4), + child: Material( + color: Colors.white, + borderRadius: BorderRadius.circular(20), + elevation: 4, + shadowColor: kolor.withOpacity(0.3), + child: InkWell( + onTap: () => _showPaymentOptions(context), + borderRadius: BorderRadius.circular(20), + child: Container( + width: 130, + padding: const EdgeInsets.all(16), + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(20), + gradient: LinearGradient( + begin: Alignment.topLeft, + end: Alignment.bottomRight, + colors: [ + kolor.withOpacity(0.05), + Colors.white, + ], + ), + border: Border.all(color: kolor.withOpacity(0.2), width: 1.5), + ), + child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ - Text( - '${'you can buy '.tr}$countPoint ${'L.S'.tr}${'by '.tr}${'$pricePoint'.tr}', - style: AppStyle.title, + Container( + padding: const EdgeInsets.all(10), + decoration: BoxDecoration( + color: kolor.withOpacity(0.1), + shape: BoxShape.circle, + ), + child: Icon(Icons.account_balance_wallet_rounded, + color: kolor, size: 24), ), - - // Add some spacing between buttons - GestureDetector( - onTap: () async { - Get.back(); - payWithEcashDriver(context, pricePoint.toString()); - }, - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Text('Pay with Debit Card'.tr), - const SizedBox(width: 10), - Icon(Icons.credit_card_sharp, - color: AppColor.blueColor, size: 70), - ], - )), - // GestureDetector( - // onTap: () async { - // Get.back(); - // Get.defaultDialog( - // barrierDismissible: false, - // title: 'Insert Wallet phone number'.tr, - // content: Form( - // key: paymentController.formKey, - // child: MyTextForm( - // controller: - // paymentController.walletphoneController, - // label: 'Insert Wallet phone number'.tr, - // hint: '963941234567', - // type: TextInputType.phone)), - // confirm: MyElevatedButton( - // title: 'OK'.tr, - // onPressed: () async { - // Get.back(); - // if (paymentController.formKey.currentState! - // .validate()) { - // box.write( - // BoxName.phoneWallet, - // paymentController - // .walletphoneController.text); - // await payWithMTNWallet( - // context, pricePoint.toString(), 'SYP'); - // } - // })); - // }, - // child: Row( - // mainAxisAlignment: MainAxisAlignment.spaceBetween, - // children: [ - // Text('Pay by MTN Wallet'.tr), - // const SizedBox(width: 10), - // Image.asset( - // 'assets/images/cashMTN.png', - // width: 70, - // height: 70, - // fit: BoxFit.fill, - // ), - // ], - // )), - - GestureDetector( - onTap: () async { - Get.back(); - Get.defaultDialog( - barrierDismissible: false, - title: 'Insert Wallet phone number'.tr, - content: Form( - key: paymentController.formKey, - child: MyTextForm( - controller: - paymentController.walletphoneController, - label: 'Insert Wallet phone number'.tr, - hint: '963991234567', - type: TextInputType.phone)), - confirm: MyElevatedButton( - title: 'OK'.tr, - onPressed: () async { - Get.back(); - if (paymentController.formKey.currentState! - .validate()) { - box.write( - BoxName.phoneWallet, - paymentController - .walletphoneController.text); - await payWithSyriaTelWallet( - context, pricePoint.toString(), 'SYP'); - } - })); - }, - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Text('Pay by Syriatel Wallet'.tr), - const SizedBox(width: 10), - Image.asset( - 'assets/images/syriatel.jpeg', - width: 70, - height: 70, - fit: BoxFit.fill, - ), - ], - )), - GestureDetector( - onTap: () async { - // التحقق بالبصمة قبل أي شيء - bool isAuthSupported = - await LocalAuthentication().isDeviceSupported(); - - if (isAuthSupported) { - bool didAuthenticate = - await LocalAuthentication().authenticate( - localizedReason: - 'استخدم بصمة الإصبع أو الوجه لتأكيد الدفع', - ); - - if (!didAuthenticate) { - print("❌ User did not authenticate with biometrics"); - return; - } - } - - // الانتقال مباشرة لإنشاء الفاتورة بعد النجاح بالبصمة - Get.to( - () => PaymentScreenSmsProvider(amount: pricePoint)); - }, - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Text('Pay by Sham Cash'.tr), - const SizedBox(width: 10), - Image.asset( - 'assets/images/shamCash.png', - width: 70, - height: 70, - fit: BoxFit.fill, - ), - ], - )), - // GestureDetector( - // onTap: () async { - // Get.back(); - // Get.defaultDialog( - // barrierDismissible: false, - // title: 'Insert Wallet phone number'.tr, - // content: Form( - // key: paymentController.formKey, - // child: MyTextForm( - // controller: - // paymentController.walletphoneController, - // label: 'Insert Wallet phone number'.tr, - // hint: '963941234567', - // type: TextInputType.phone)), - // confirm: MyElevatedButton( - // title: 'OK'.tr, - // onPressed: () async { - // Get.back(); - // if (paymentController.formKey.currentState! - // .validate()) { - // box.write( - // BoxName.phoneWallet, - // paymentController - // .walletphoneController.text); - // // await payWithSyriaTelWallet( - // // context, pricePoint.toString(), 'SYP'); - // bool isAuthSupported = - // await LocalAuthentication() - // .isDeviceSupported(); - // if (isAuthSupported) { - // bool didAuthenticate = - // await LocalAuthentication() - // .authenticate( - // localizedReason: - // 'استخدم بصمة الإصبع أو الوجه لتأكيد الدفع', - // ); - // if (!didAuthenticate) { - // if (Get.isDialogOpen ?? false) Get.back(); - // print( - // "❌ User did not authenticate with biometrics"); - // return; - // } - // } - // Get.to(() => PaymentScreenMtn( - // amount: pricePoint, - // userType: 'Driver', - // )); - // } - // })); - // }, - // child: Row( - // mainAxisAlignment: MainAxisAlignment.spaceBetween, - // children: [ - // Text('Pay by MTN Wallet'.tr), - // const SizedBox(width: 10), - // Image.asset( - // 'assets/images/cashMTN.png', - // width: 70, - // height: 70, - // fit: BoxFit.fill, - // ), - // ], - // )), - ], - )); - }, - child: Padding( - padding: const EdgeInsets.symmetric(horizontal: 3, vertical: 8), - child: Container( - width: Get.width * .22, - height: Get.width * .22, - margin: const EdgeInsets.all(4), - decoration: BoxDecoration( - gradient: LinearGradient( - colors: [ - kolor.withOpacity(0.3), - kolor, - kolor.withOpacity(0.7), - kolor, - ], - begin: Alignment.topLeft, - end: Alignment.bottomRight, - ), - border: Border.all(color: AppColor.accentColor), - borderRadius: BorderRadius.circular(12), - shape: BoxShape.rectangle, - ), - child: Center( - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceAround, - children: [ + const SizedBox(height: 10), Text( - '$countPoint ${'L.S'.tr}', - style: AppStyle.subtitle - .copyWith(color: AppColor.secondaryColor), + '$countPoint ${'SYP'.tr}', + style: const TextStyle( + fontWeight: FontWeight.w900, + fontSize: 15, + color: FinanceDesignSystem.primaryDark, + ), ), + const SizedBox(height: 4), Text( - '$pricePoint ${'L.S'.tr}', - style: - AppStyle.title.copyWith(color: AppColor.secondaryColor), - textAlign: TextAlign.center, + '${'Price:'.tr} ${pricePoint.toStringAsFixed(0)} ${'SYP'.tr}', + style: TextStyle( + fontSize: 11, + color: Colors.grey.shade600, + fontWeight: FontWeight.w600, + ), ), ], ), @@ -296,6 +101,183 @@ class PointsCaptain extends StatelessWidget { ), ); } + + void _showPaymentOptions(BuildContext context) { + Get.bottomSheet( + isScrollControlled: true, + Container( + constraints: BoxConstraints( + maxHeight: MediaQuery.of(context).size.height * 0.8, + ), + padding: const EdgeInsets.fromLTRB(24, 24, 24, 32), + decoration: const BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.vertical(top: Radius.circular(32)), + ), + child: SingleChildScrollView( + child: Column( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text("Select Payment Method".tr, + style: FinanceDesignSystem.headingStyle), + IconButton( + icon: const Icon(Icons.close_rounded, color: Colors.grey), + onPressed: () => Get.back(), + ), + ], + ), + const SizedBox(height: 8), + Text( + "${'Amount to charge:'.tr} $countPoint ${'SYP'.tr}", + style: FinanceDesignSystem.subHeadingStyle), + const SizedBox(height: 24), + _buildPaymentMethodTile( + icon: Icons.credit_card_rounded, + title: 'Debit Card'.tr, + subtitle: 'E-Cash payment gateway'.tr, + color: Colors.blue, + onTap: () { + Get.back(); + payWithEcashDriver(context, pricePoint.toString()); + }, + ), + const SizedBox(height: 16), + _buildPaymentMethodTile( + image: 'assets/images/syriatel.jpeg', + title: 'Syriatel Cash'.tr, + subtitle: 'Pay using Syriatel mobile wallet'.tr, + color: Colors.red, + onTap: () => _showPhoneInputDialog(context, 'Syriatel'), + ), + const SizedBox(height: 16), + _buildPaymentMethodTile( + image: 'assets/images/shamCash.png', + title: 'Sham Cash'.tr, + subtitle: 'Pay using Sham Cash wallet'.tr, + color: Colors.orange, + onTap: () async { + Get.back(); + bool isAuthSupported = + await LocalAuthentication().isDeviceSupported(); + if (isAuthSupported) { + bool didAuthenticate = + await LocalAuthentication().authenticate( + localizedReason: 'Confirm payment with biometrics'.tr, + ); + if (!didAuthenticate) return; + } + Get.to(() => PaymentScreenSmsProvider(amount: pricePoint)); + }, + ), + ], + ), + ), + ), + ); + } + + Widget _buildPaymentMethodTile({ + IconData? icon, + String? image, + required String title, + required String subtitle, + required Color color, + required VoidCallback onTap, + }) { + return Material( + color: Colors.grey.shade50, + borderRadius: BorderRadius.circular(20), + child: InkWell( + onTap: onTap, + borderRadius: BorderRadius.circular(20), + child: Container( + padding: const EdgeInsets.all(16), + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(20), + border: Border.all(color: Colors.grey.shade200, width: 1), + ), + child: Row( + children: [ + Container( + width: 56, + height: 56, + padding: const EdgeInsets.all(8), + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.circular(14), + boxShadow: [ + BoxShadow( + color: color.withOpacity(0.1), + blurRadius: 10, + offset: const Offset(0, 4), + ), + ], + ), + child: image != null + ? Image.asset(image, fit: BoxFit.contain) + : Icon(icon, color: color, size: 30), + ), + const SizedBox(width: 16), + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text(title, + style: const TextStyle( + fontWeight: FontWeight.bold, + fontSize: 16, + color: FinanceDesignSystem.primaryDark)), + const SizedBox(height: 2), + Text(subtitle, + style: TextStyle( + color: Colors.grey.shade600, fontSize: 12)), + ], + ), + ), + Icon(Icons.arrow_forward_ios_rounded, + size: 14, color: Colors.grey.shade400), + ], + ), + ), + ), + ); + } + + void _showPhoneInputDialog(BuildContext context, String provider) { + Get.back(); + Get.defaultDialog( + title: 'Wallet Phone Number'.tr, + content: Form( + key: paymentController.formKey, + child: MyTextForm( + controller: paymentController.walletphoneController, + label: 'Phone Number'.tr, + hint: provider == 'Syriatel' ? '963991234567' : '963941234567', + type: TextInputType.phone, + ), + ), + confirm: MyElevatedButton( + title: 'Confirm'.tr, + onPressed: () async { + if (paymentController.formKey.currentState!.validate()) { + Get.back(); + box.write(BoxName.phoneWallet, + paymentController.walletphoneController.text); + if (provider == 'Syriatel') { + await payWithSyriaTelWallet( + context, pricePoint.toString(), 'SYP'); + } else { + await payWithMTNWallet(context, pricePoint.toString(), 'SYP'); + } + } + }, + ), + ); + } } class PaymentScreen extends StatefulWidget { diff --git a/lib/views/home/my_wallet/walet_captain.dart b/lib/views/home/my_wallet/walet_captain.dart index 2c12702..25ffb6f 100755 --- a/lib/views/home/my_wallet/walet_captain.dart +++ b/lib/views/home/my_wallet/walet_captain.dart @@ -1,521 +1,370 @@ import 'package:local_auth/local_auth.dart'; -import 'package:sefer_driver/constant/links.dart'; -import 'package:sefer_driver/controller/functions/crud.dart'; -import 'package:sefer_driver/controller/functions/tts.dart'; -import 'package:sefer_driver/views/home/my_wallet/payment_history_driver_page.dart'; -import 'package:sefer_driver/views/widgets/error_snakbar.dart'; -import 'package:sefer_driver/views/widgets/mydialoug.dart'; -import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; -import 'package:sefer_driver/constant/box_name.dart'; -import 'package:sefer_driver/constant/colors.dart'; -import 'package:sefer_driver/constant/info.dart'; -import 'package:sefer_driver/constant/style.dart'; +import 'package:sefer_driver/constant/finance_design_system.dart'; import 'package:sefer_driver/controller/home/payment/captain_wallet_controller.dart'; -import 'package:sefer_driver/main.dart'; +import 'package:sefer_driver/views/widgets/mycircular.dart'; import 'package:sefer_driver/views/widgets/elevated_btn.dart'; import 'package:sefer_driver/views/widgets/my_textField.dart'; -import 'package:sefer_driver/views/widgets/mycircular.dart'; +import 'package:sefer_driver/views/widgets/mydialoug.dart'; +import 'package:sefer_driver/views/widgets/error_snakbar.dart'; +import 'package:sefer_driver/constant/box_name.dart'; +import 'package:sefer_driver/constant/links.dart'; +import 'package:sefer_driver/controller/functions/crud.dart'; +import 'package:sefer_driver/main.dart'; +import 'package:sefer_driver/views/home/my_wallet/payment_history_driver_page.dart'; +import 'package:sefer_driver/controller/payment/driver_payment_controller.dart'; -import '../../../controller/payment/driver_payment_controller.dart'; -import '../../widgets/my_scafold.dart'; -import 'card_wallet_widget.dart'; +// Import new widgets import 'points_captain.dart'; import 'transfer_budget_page.dart'; -import 'weekly_payment_page.dart'; +import 'widgets/balance_card.dart'; +import 'widgets/quick_actions.dart'; +import 'widgets/financial_summary_card.dart'; +import 'widgets/promo_gamification_card.dart'; +import 'widgets/transaction_preview_item.dart'; class WalletCaptainRefactored extends StatelessWidget { WalletCaptainRefactored({super.key}); - final CaptainWalletController captainWalletController = - Get.put(CaptainWalletController()); - - // دالة مساعدة لتحديد لون خلفية النقاط - Color _getPointsColor(String pointsStr) { - final points = double.tryParse(pointsStr) ?? 0.0; - if (points < -30000) { - return AppColor.redColor; - } else if (points < 0 && points >= -30000) { - return AppColor.yellowColor; - } else { - return AppColor.greenColor; - } - } + final CaptainWalletController controller = Get.put(CaptainWalletController()); @override Widget build(BuildContext context) { - captainWalletController.refreshCaptainWallet(); - return MyScafolld( - title: 'Driver Balance'.tr, - isleading: true, - action: IconButton( - icon: const Icon(Icons.refresh), - onPressed: () => captainWalletController.refreshCaptainWallet(), - tooltip: 'Refresh'.tr, + controller.refreshCaptainWallet(); + return Scaffold( + backgroundColor: FinanceDesignSystem.backgroundColor, + appBar: AppBar( + title: Text('Driver Balance'.tr, + style: const TextStyle( + fontWeight: FontWeight.bold, + color: FinanceDesignSystem.primaryDark)), + backgroundColor: Colors.transparent, + elevation: 0, + centerTitle: true, + leading: IconButton( + icon: const Icon(Icons.arrow_back_ios_new_rounded, + color: FinanceDesignSystem.primaryDark, size: 20), + onPressed: () => Get.back(), + ), + actions: [ + IconButton( + icon: const Icon(Icons.refresh_rounded, + color: FinanceDesignSystem.primaryDark), + onPressed: () => controller.refreshCaptainWallet(), + tooltip: 'Refresh'.tr, + ), + ], ), - body: [ - GetBuilder( - builder: (controller) { - if (controller.isLoading) { - return const MyCircularProgressIndicator(); - } - return SingleChildScrollView( - padding: const EdgeInsets.all(16.0), - child: Column( - crossAxisAlignment: CrossAxisAlignment.stretch, - children: [ - _buildTotalPointsSection(context, controller), - const SizedBox(height: 16), - const CardSeferWalletDriver(), // This can be redesigned if needed - const SizedBox(height: 16), - _buildWalletDetailsCard(context, controller), - const SizedBox(height: 24), - _buildPromoSection(controller), - const SizedBox(height: 24), - _buildNavigationButtons(), - ], - ), - ); - }, - ) - ], - ); - } - - /// القسم العلوي لعرض النقاط الإجمالية - Widget _buildTotalPointsSection( - BuildContext context, CaptainWalletController controller) { - return Card( - elevation: 4, - color: _getPointsColor(controller.totalPoints.toString()), - shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(12)), - child: InkWell( - onTap: () { - showCupertinoDialog( - context: context, - builder: (BuildContext context) => CupertinoAlertDialog( - title: Text('Info'.tr), - content: Text( - 'The 30000 points equal 30000 S.P for you \nSo go and gain your money' - .tr), - actions: [ - CupertinoDialogAction( - child: Text("OK".tr), - onPressed: () => Navigator.of(context).pop(), + body: GetBuilder( + builder: (controller) { + if (controller.isLoading) { + return const Center(child: MyCircularProgressIndicator()); + } + return SingleChildScrollView( + padding: const EdgeInsets.symmetric( + horizontal: FinanceDesignSystem.horizontalPadding, + vertical: 10), + child: Column( + crossAxisAlignment: CrossAxisAlignment.stretch, + children: [ + // 1. Header / Balance + BalanceCard( + balance: controller.totalPoints.toString(), + isNegative: + double.tryParse(controller.totalPoints.toString()) != + null && + double.parse(controller.totalPoints.toString()) < + -30000, + lastUpdated: "Just now".tr, ), + + const SizedBox( + height: FinanceDesignSystem.verticalSectionPadding), + + // 2. Quick Actions + QuickActionsGrid( + onAddBalance: () => + _showAddBalanceOptions(context, controller), + onWithdraw: () => addSyrianPaymentMethod(controller), + onTransfer: () => Get.to(() => TransferBudgetPage()), + onHistory: () async { + await Get.put(DriverWalletHistoryController()) + .getArchivePayment(); + Get.to(() => const PaymentHistoryDriverPage()); + }, + ), + + const SizedBox( + height: FinanceDesignSystem.verticalSectionPadding), + + // 3. Earnings Summary + FinancialSummaryCard( + title: 'Earnings Summary'.tr, + subtitle: 'ملخص الأرباح'.tr, + items: [ + SummaryItem( + icon: Icons.money_rounded, + label: 'Cash Earnings'.tr, + amount: controller.totalAmount, + color: FinanceDesignSystem.successGreen, + ), + SummaryItem( + icon: Icons.credit_card_rounded, + label: 'Card Earnings'.tr, + amount: controller.totalAmountVisa, + color: FinanceDesignSystem.accentBlue, + ), + ], + ), + + const SizedBox( + height: FinanceDesignSystem.verticalSectionPadding), + + // 3. Recharge Balance Packages + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text('Recharge Balance'.tr, + style: FinanceDesignSystem.headingStyle), + Icon(Icons.info_outline_rounded, + size: 18, color: Colors.grey.shade400), + ], + ), + const SizedBox(height: 12), + SizedBox( + height: 140, // Increased height for modern cards + child: ListView( + scrollDirection: Axis.horizontal, + physics: const BouncingScrollPhysics(), + children: [ + PointsCaptain( + kolor: Colors.blueGrey, + pricePoint: 100, + countPoint: '100'), + PointsCaptain( + kolor: Colors.brown, + pricePoint: 200, + countPoint: '210'), + PointsCaptain( + kolor: Colors.amber, + pricePoint: 400, + countPoint: '450'), + PointsCaptain( + kolor: Colors.orange, + pricePoint: 1000, + countPoint: '1100'), + ], + ), + ), + + const SizedBox( + height: FinanceDesignSystem.verticalSectionPadding), + + // 5. Promotions + Text('Promotions'.tr, style: FinanceDesignSystem.headingStyle), + const SizedBox(height: 12), + PromoGamificationCard( + title: 'Morning Promo'.tr, + subtitle: "from 7:00am to 10:00am".tr, + currentProgress: controller.walletDate['message']?[0] + ?['morning_count'] ?? + 0, + targetProgress: 5, + reward: "+50 SYP", + onTap: () => + controller.addDriverWalletFromPromo('Morning Promo', 50), + ), + const SizedBox(height: 16), + PromoGamificationCard( + title: 'Afternoon Promo'.tr, + subtitle: "from 3:00pm to 6:00 pm".tr, + currentProgress: controller.walletDate['message']?[0] + ?['afternoon_count'] ?? + 0, + targetProgress: 5, + reward: "+50 SYP", + onTap: () => controller.addDriverWalletFromPromo( + 'Afternoon Promo', 50), + ), + + const SizedBox( + height: FinanceDesignSystem.verticalSectionPadding), + + // 6. Transactions Preview + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text('Recent Transactions'.tr, + style: FinanceDesignSystem.headingStyle), + TextButton( + onPressed: () async { + await Get.put(DriverWalletHistoryController()) + .getArchivePayment(); + Get.to(() => const PaymentHistoryDriverPage()); + }, + child: Text('View All'.tr, + style: const TextStyle( + color: FinanceDesignSystem.accentBlue, + fontWeight: FontWeight.bold)), + ), + ], + ), + GetBuilder( + init: DriverWalletHistoryController(), + builder: (historyController) { + if (historyController.archive.isEmpty) { + return Padding( + padding: const EdgeInsets.symmetric(vertical: 20), + child: Center( + child: Text("No transactions yet".tr, + style: TextStyle(color: Colors.grey.shade400))), + ); + } + // Show only last 3 + final lastThree = + historyController.archive.take(3).toList(); + return Column( + children: lastThree.map((tx) { + final double amount = + double.tryParse(tx['amount']?.toString() ?? '0') ?? + 0; + return TransactionPreviewItem( + title: amount >= 0 ? 'Credit'.tr : 'Debit'.tr, + subtitle: tx['created_at'] ?? '', + amount: amount.abs().toStringAsFixed(0), + date: tx['created_at']?.split(' ')[0] ?? '', + type: amount >= 0 ? 'credit' : 'debit', + onTap: () {}, + ); + }).toList(), + ); + }, + ), + const SizedBox(height: 40), ], ), ); }, - child: Padding( - padding: const EdgeInsets.symmetric(vertical: 16, horizontal: 8), - child: Column( - children: [ - Text( - 'رصيد التشغيل 💎', - style: AppStyle.headTitle2.copyWith( - color: Colors.white, - fontWeight: FontWeight.bold, - ), - textAlign: TextAlign.center, - ), - const SizedBox(height: 8), - Text( - controller.totalPoints.toString(), - style: AppStyle.headTitle2.copyWith( - color: Colors.white, - fontSize: 28, - fontWeight: FontWeight.w900), - textAlign: TextAlign.center, - ), - if (double.parse(controller.totalPoints.toString()) < -30000) - Padding( - padding: const EdgeInsets.only(top: 12.0), - child: CupertinoButton( - color: Colors.white, - padding: const EdgeInsets.symmetric(horizontal: 20), - onPressed: () { - // Add your charge account logic here - }, - child: Text( - 'Charge your Account'.tr, - style: TextStyle( - color: AppColor.redColor, - fontWeight: FontWeight.bold), - ), - ), - ), - ], - ), - ), ), ); } - /// بطاقة لعرض تفاصيل المحفظة وخيارات الشراء - Widget _buildWalletDetailsCard( + void _showAddBalanceOptions( BuildContext context, CaptainWalletController controller) { - return Card( - elevation: 4, - shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(16)), - child: Padding( - padding: const EdgeInsets.all(16.0), + Get.bottomSheet( + Container( + padding: const EdgeInsets.all(24), + decoration: const BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.vertical(top: Radius.circular(24)), + ), child: Column( - crossAxisAlignment: CrossAxisAlignment.stretch, + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.start, children: [ - _BudgetInfoRow( - title: 'Total Budget from trips is '.tr, - amount: controller.totalAmount, - onTap: () { - Get.snackbar( - icon: InkWell( - onTap: () async => await Get.put(TextToSpeechController()) - .speakText( - 'This amount for all trip I get from Passengers' - .tr), - child: const Icon(Icons.headphones)), - '${'Total Amount:'.tr} ${controller.totalAmount} ${'SYP'.tr}', - 'This amount for all trip I get from Passengers'.tr, - duration: const Duration(seconds: 6), - backgroundColor: AppColor.yellowColor, - snackPosition: SnackPosition.BOTTOM, - ); - }, - ), - const Divider(height: 32), - _BudgetInfoRow( - title: 'Total Budget from trips by\nCredit card is '.tr, - amount: controller.totalAmountVisa, - onTap: () { - Get.snackbar( - icon: InkWell( - onTap: () async => await Get.find() - .speakText( - 'This amount for all trip I get from Passengers and Collected For me in' - .tr + - ' Intaleq Wallet'.tr), - child: const Icon(Icons.headphones), - ), - '${'Total Amount:'.tr} ${controller.totalAmountVisa} ${'SYP'.tr}', - 'This amount for all trip I get from Passengers and Collected For me in' - .tr + - ' ${AppInformation.appName} Wallet'.tr, - duration: const Duration(seconds: 6), - backgroundColor: AppColor.redColor, - snackPosition: SnackPosition.BOTTOM, - ); - }, - ), - const SizedBox(height: 24), - _buildBuyPointsButton(controller), - const SizedBox(height: 16), - // _buildTransferBudgetButton(controller), // Uncomment if needed - _buildPurchaseInstructions(), + Text("Add Balance".tr, style: FinanceDesignSystem.headingStyle), const SizedBox(height: 8), - _buildPointsOptions(), - ], - ), - ), - ); - } - - /// قسم العروض الترويجية - Widget _buildPromoSection(CaptainWalletController controller) { - return Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text("Today's Promo".tr, style: AppStyle.headTitle), - const SizedBox(height: 10), - _PromoProgressCard( - title: 'Morning Promo'.tr, - timePromo: 'Morning Promo', - count: (controller.walletDate['message'][0]['morning_count']), - maxCount: 5, - description: - "this is count of your all trips in the morning promo today from 7:00am to 10:00am" - .tr, - controller: controller, - ), - const SizedBox(height: 16), - _PromoProgressCard( - title: 'Afternoon Promo'.tr, - timePromo: 'Afternoon Promo', - count: (controller.walletDate['message'][0]['afternoon_count']), - maxCount: 5, - description: - "this is count of your all trips in the Afternoon promo today from 3:00pm to 6:00 pm" - .tr, - controller: controller, - ), - ], - ); - } - - /// أزرار التنقل السفلية - Widget _buildNavigationButtons() { - return Row( - children: [ - Expanded( - child: MyElevatedButton( - kolor: AppColor.blueColor, - title: 'Payment History'.tr, - onPressed: () async { - await Get.put(DriverWalletHistoryController()) - .getArchivePayment(); - Get.to(() => const PaymentHistoryDriverPage(), - transition: Transition.size); - }, - ), - ), - const SizedBox(width: 16), - Expanded( - child: MyElevatedButton( - kolor: AppColor.blueColor, - title: 'Weekly Budget'.tr, - onPressed: () async { - await Get.put(DriverWalletHistoryController()) - .getWeekllyArchivePayment(); - Get.to(() => const WeeklyPaymentPage(), - transition: Transition.size); - }, - ), - ), - ], - ); - } - - // --- حافظت على هذه الدوال كما هي لأنها تحتوي على منطق مهم --- - Widget _buildBuyPointsButton(CaptainWalletController controller) { - return MyElevatedButton( - title: 'You can buy points from your budget'.tr, - onPressed: () { - Get.defaultDialog( - title: 'Pay from my budget'.tr, - content: Form( - key: controller.formKey, - child: MyTextForm( - controller: controller.amountFromBudgetController, - label: - '${'You have in account'.tr} ${controller.totalAmountVisa}', - hint: '${'You have in account'.tr} ${controller.totalAmountVisa}', - type: TextInputType.number, - ), - ), - confirm: MyElevatedButton( - title: 'Pay'.tr, - onPressed: () async { - bool isAvailable = - await LocalAuthentication().isDeviceSupported(); - if (isAvailable) { - // Authenticate the user - bool didAuthenticate = await LocalAuthentication().authenticate( - localizedReason: - 'Use Touch ID or Face ID to confirm payment'.tr, - // options: const AuthenticationOptions( - biometricOnly: true, - sensitiveTransaction: true, - ); - if (didAuthenticate) { - if (double.parse(controller.amountFromBudgetController.text) < - double.parse(controller.totalAmountVisa)) { - await controller.payFromBudget(); - } else { - Get.back(); - - mySnackeBarError('Your Budget less than needed'.tr); - } - } else { - // Authentication failed, handle accordingly - MyDialog().getDialog('Authentication failed'.tr, ''.tr, () { - Get.back(); - }); - } - } else { - MyDialog().getDialog('Biometric Authentication'.tr, - 'You should use Touch ID or Face ID to confirm payment'.tr, - () { - Get.back(); - }); - } - }, - ), - cancel: MyElevatedButton( - title: 'Cancel'.tr, - onPressed: () { - Get.back(); - }, - ), - ); - }, - ); - } - - Widget _buildPurchaseInstructions() { - return Padding( - padding: const EdgeInsets.symmetric(vertical: 8.0), - child: Container( - padding: const EdgeInsets.all(12), - decoration: BoxDecoration( - color: AppColor.accentColor.withOpacity(0.1), - borderRadius: BorderRadius.circular(8), - border: Border.all(color: AppColor.accentColor.withOpacity(0.3)), - ), - child: Column( - children: [ - Text( - "You can purchase a budget to enable online access through the options listed below" - .tr, - textAlign: TextAlign.center, - style: AppStyle.title.copyWith(fontSize: 14), - ), - ], - ), - ), - ); - } - - Widget _buildPointsOptions() { - return SizedBox( - height: Get.height * 0.19, - child: ListView( - scrollDirection: Axis.horizontal, - children: [ - PointsCaptain( - kolor: AppColor.greyColor, pricePoint: 100, countPoint: '100'), - PointsCaptain( - kolor: AppColor.bronze, pricePoint: 200, countPoint: '210'), - PointsCaptain( - kolor: AppColor.goldenBronze, pricePoint: 400, countPoint: '450'), - PointsCaptain( - kolor: AppColor.gold, pricePoint: 1000, countPoint: '1100'), - ], - ), - ); - } -} - -/// ويدجت مُحسّن لعرض صف معلومات الرصيد -class _BudgetInfoRow extends StatelessWidget { - final String title; - final String amount; - final VoidCallback onTap; - - const _BudgetInfoRow({ - required this.title, - required this.amount, - required this.onTap, - }); - - @override - Widget build(BuildContext context) { - return InkWell( - onTap: onTap, - borderRadius: BorderRadius.circular(12), - child: Padding( - padding: const EdgeInsets.symmetric(vertical: 8.0), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Expanded( - child: Text( - title, - style: AppStyle.title.copyWith(fontSize: 16), + Text("Select how you want to charge your account".tr, + style: FinanceDesignSystem.subHeadingStyle), + const SizedBox(height: 24), + ListTile( + leading: Container( + padding: const EdgeInsets.all(10), + decoration: BoxDecoration( + color: FinanceDesignSystem.accentBlue.withOpacity(0.1), + borderRadius: BorderRadius.circular(12)), + child: const Icon(Icons.account_balance_wallet_rounded, + color: FinanceDesignSystem.accentBlue), ), + title: Text("Pay from my budget".tr), + subtitle: Text( + "${'You have in account'.tr} ${controller.totalAmountVisa}"), + onTap: () { + Get.back(); + _showPayFromBudgetDialog(controller); + }, ), - const SizedBox(width: 10), - Container( - decoration: BoxDecoration( - color: AppColor.accentColor.withOpacity(0.1), - borderRadius: BorderRadius.circular(12), - ), - padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 8), - child: Text( - '$amount ${'S.P'.tr}', - style: - const TextStyle(fontSize: 18, fontWeight: FontWeight.bold), - ), - ), - ], - ), - ), - ); - } -} - -/// ويدجت مُحسّن لعرض بطاقة العرض الترويجي -class _PromoProgressCard extends StatelessWidget { - final String title; - final String timePromo; - final int count; - final int maxCount; - final String description; - final CaptainWalletController controller; - - const _PromoProgressCard({ - required this.title, - required this.timePromo, - required this.count, - required this.maxCount, - required this.description, - required this.controller, - }); - - @override - Widget build(BuildContext context) { - return Card( - elevation: 2, - shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(12)), - clipBehavior: Clip.antiAlias, - child: InkWell( - onTap: () { - MyDialog().getDialog(title, description, () async { - if (count >= maxCount) { - controller.addDriverWalletFromPromo(timePromo, 50); - } - Get.back(); - }); - }, - child: Padding( - padding: const EdgeInsets.all(16.0), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, + const Divider(), + const SizedBox(height: 16), + Text("Recharge Balance Packages".tr, + style: FinanceDesignSystem.subHeadingStyle + .copyWith(fontWeight: FontWeight.bold)), + const SizedBox(height: 12), + SizedBox( + height: 140, + child: ListView( + scrollDirection: Axis.horizontal, + physics: const BouncingScrollPhysics(), children: [ - Text(title, - style: - AppStyle.title.copyWith(fontWeight: FontWeight.bold)), - Text( - '$count / $maxCount', - style: AppStyle.title.copyWith(color: AppColor.blueColor), - ), + PointsCaptain( + kolor: Colors.blueGrey, + pricePoint: 100, + countPoint: '100'), + PointsCaptain( + kolor: Colors.brown, pricePoint: 200, countPoint: '210'), + PointsCaptain( + kolor: Colors.amber, pricePoint: 400, countPoint: '450'), + PointsCaptain( + kolor: Colors.orange, + pricePoint: 1000, + countPoint: '1100'), ], ), - const SizedBox(height: 12), - ClipRRect( - borderRadius: BorderRadius.circular(10), - child: LinearProgressIndicator( - minHeight: 12, - value: count / maxCount, - backgroundColor: AppColor.accentColor.withOpacity(0.2), - color: count >= maxCount - ? AppColor.greenColor - : AppColor.blueColor, - ), - ), - ], - ), + ), + ], ), ), ); } + + void _showPayFromBudgetDialog(CaptainWalletController controller) { + Get.defaultDialog( + title: 'Pay from my budget'.tr, + content: Form( + key: controller.formKey, + child: MyTextForm( + controller: controller.amountFromBudgetController, + label: '${'You have in account'.tr} ${controller.totalAmountVisa}', + hint: '${'You have in account'.tr} ${controller.totalAmountVisa}', + type: TextInputType.number, + ), + ), + confirm: MyElevatedButton( + title: 'Pay'.tr, + onPressed: () async { + bool isAvailable = await LocalAuthentication().isDeviceSupported(); + if (isAvailable) { + bool didAuthenticate = await LocalAuthentication().authenticate( + localizedReason: 'Use Touch ID or Face ID to confirm payment'.tr, + biometricOnly: true, + sensitiveTransaction: true, + ); + if (didAuthenticate) { + if (double.parse(controller.amountFromBudgetController.text) < + double.parse(controller.totalAmountVisa)) { + await controller.payFromBudget(); + } else { + Get.back(); + mySnackeBarError('Your Budget less than needed'.tr); + } + } else { + MyDialog().getDialog( + 'Authentication failed'.tr, ''.tr, () => Get.back()); + } + } else { + MyDialog().getDialog( + 'Biometric Authentication'.tr, + 'You should use Touch ID or Face ID to confirm payment'.tr, + () => Get.back()); + } + }, + ), + cancel: MyElevatedButton(title: 'Cancel'.tr, onPressed: () => Get.back()), + ); + } } -// --- الدوال والويدجتس الخاصة بالدفع في سوريا تبقى كما هي --- -// This function is a placeholder for adding Syrian payment methods. -// You would implement the UI and logic for mobile wallets or other local options here. Future addSyrianPaymentMethod( CaptainWalletController captainWalletController) { return Get.defaultDialog( @@ -528,15 +377,12 @@ Future addSyrianPaymentMethod( "Insert your mobile wallet details to receive your money weekly" .tr), MyTextForm( - controller: captainWalletController - .cardBank, // Re-using for mobile number + controller: captainWalletController.cardBank, label: "Insert mobile wallet number".tr, hint: '0912 345 678', type: TextInputType.phone), - const SizedBox( - height: 10, - ), - MyDropDownSyria() // Dropdown for Syrian providers + const SizedBox(height: 10), + MyDropDownSyria() ], )), confirm: MyElevatedButton( @@ -545,7 +391,6 @@ Future addSyrianPaymentMethod( if (captainWalletController.formKeyAccount.currentState! .validate()) { Get.back(); - // Replace with your actual API endpoint and payload for Syria var res = await CRUD().post(link: AppLink.updateAccountBank, payload: { "paymentProvider": @@ -554,7 +399,6 @@ Future addSyrianPaymentMethod( captainWalletController.cardBank.text.toString(), "id": box.read(BoxName.driverID).toString() }); - print('res: $res'); if (res != 'failure') { mySnackbarSuccess('Payment details added successfully'.tr); } @@ -562,10 +406,8 @@ Future addSyrianPaymentMethod( })); } -// A new GetX controller for the Syrian payout dropdown class SyrianPayoutController extends GetxController { String dropdownValue = 'syriatel'; - void changeValue(String? newValue) { if (newValue != null) { dropdownValue = newValue; @@ -574,33 +416,25 @@ class SyrianPayoutController extends GetxController { } } -// A new Dropdown widget for Syrian mobile wallet providers class MyDropDownSyria extends StatelessWidget { const MyDropDownSyria({super.key}); - @override Widget build(BuildContext context) { Get.put(SyrianPayoutController()); + final theme = Theme.of(context); return GetBuilder(builder: (controller) { return DropdownButton( value: controller.dropdownValue, icon: const Icon(Icons.arrow_drop_down), elevation: 16, isExpanded: true, - style: const TextStyle(color: Colors.deepPurple), - underline: Container( - height: 2, - color: Colors.deepPurpleAccent, - ), - onChanged: (String? newValue) { - controller.changeValue(newValue); - }, + dropdownColor: theme.cardColor, + style: TextStyle(color: theme.textTheme.bodyLarge?.color), + underline: Container(height: 2, color: theme.primaryColor), + onChanged: (String? newValue) => controller.changeValue(newValue), items: ['syriatel', 'mtn'] .map>((String value) { - return DropdownMenuItem( - value: value, - child: Text(value.tr), - ); + return DropdownMenuItem(value: value, child: Text(value.tr)); }).toList(), ); }); diff --git a/lib/views/home/my_wallet/weekly_payment_page.dart b/lib/views/home/my_wallet/weekly_payment_page.dart index bdbac34..822ec51 100755 --- a/lib/views/home/my_wallet/weekly_payment_page.dart +++ b/lib/views/home/my_wallet/weekly_payment_page.dart @@ -2,11 +2,12 @@ import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:intl/intl.dart'; import 'package:flutter_staggered_animations/flutter_staggered_animations.dart'; - import 'package:sefer_driver/constant/colors.dart'; import 'package:sefer_driver/constant/style.dart'; +import 'package:sefer_driver/constant/finance_design_system.dart'; import 'package:sefer_driver/views/widgets/mycircular.dart'; import '../../../controller/payment/driver_payment_controller.dart'; +import 'widgets/transaction_preview_item.dart'; class WeeklyPaymentPage extends StatelessWidget { const WeeklyPaymentPage({super.key}); @@ -16,12 +17,18 @@ class WeeklyPaymentPage extends StatelessWidget { Get.put(DriverWalletHistoryController()); return Scaffold( + backgroundColor: FinanceDesignSystem.backgroundColor, appBar: AppBar( - title: Text('Weekly Summary'.tr), - backgroundColor: Colors.white, - elevation: 1, + title: Text('Weekly Summary'.tr, + style: const TextStyle(fontWeight: FontWeight.bold, color: FinanceDesignSystem.primaryDark)), + backgroundColor: Colors.transparent, + elevation: 0, + centerTitle: true, + leading: IconButton( + icon: const Icon(Icons.arrow_back_ios_new_rounded, color: FinanceDesignSystem.primaryDark, size: 20), + onPressed: () => Get.back(), + ), ), - backgroundColor: Colors.grey[100], body: GetBuilder( builder: (controller) { if (controller.isLoading) { @@ -30,45 +37,46 @@ class WeeklyPaymentPage extends StatelessWidget { return Column( children: [ - // 1. Prominent Summary Card at the top - _buildSummaryCard(controller), - - // 2. A title for the transactions list + _buildWeeklyStatsHeader(controller), + const SizedBox(height: 16), + _buildWeekSelector(), + const SizedBox(height: 16), Padding( - padding: const EdgeInsets.fromLTRB(20, 20, 20, 10), + padding: const EdgeInsets.symmetric(horizontal: 20), child: Row( children: [ - Icon(Icons.list_alt, color: Colors.grey[600]), - const SizedBox(width: 8), - Text( - 'Transactions this week'.tr, - style: Theme.of(context).textTheme.titleMedium?.copyWith( - fontWeight: FontWeight.bold, - color: Colors.grey[700], - ), - ), + Text('Transactions this week'.tr, style: FinanceDesignSystem.headingStyle), + const Spacer(), + Icon(Icons.list_rounded, color: Colors.grey.shade400, size: 20), ], ), ), - - // 3. The animated list of transactions + const SizedBox(height: 8), Expanded( child: controller.weeklyList.isEmpty ? _buildEmptyState(context) : AnimationLimiter( child: ListView.builder( - padding: const EdgeInsets.symmetric(horizontal: 16.0), + padding: const EdgeInsets.fromLTRB(16, 8, 16, 24), itemCount: controller.weeklyList.length, itemBuilder: (BuildContext context, int index) { - var transaction = controller.weeklyList[index]; + final tx = controller.weeklyList[index]; + final double amount = double.tryParse(tx['amount']?.toString() ?? '0') ?? 0; return AnimationConfiguration.staggeredList( position: index, - duration: const Duration(milliseconds: 375), + duration: const Duration(milliseconds: 250), child: SlideAnimation( - verticalOffset: 50.0, + verticalOffset: 25, child: FadeInAnimation( - child: _TransactionListItem( - transaction: transaction), + child: TransactionPreviewItem( + title: amount >= 0 ? 'Credit'.tr : 'Debit'.tr, + subtitle: tx['dateUpdated'] ?? '', + amount: amount.abs().toStringAsFixed(0), + date: tx['dateUpdated']?.split(' ')[0] ?? '', + type: amount >= 0 ? 'credit' : 'debit', + method: tx['paymentMethod'], + onTap: () {}, + ), ), ), ); @@ -83,92 +91,87 @@ class WeeklyPaymentPage extends StatelessWidget { ); } - // A widget for the top summary card. - Widget _buildSummaryCard(DriverWalletHistoryController controller) { - final String totalAmount = controller.weeklyList.isEmpty + Widget _buildWeeklyStatsHeader(DriverWalletHistoryController controller) { + final totalAmount = controller.weeklyList.isEmpty ? '0.00' : controller.weeklyList[0]['totalAmount']?.toString() ?? '0.00'; + + final double earnings = double.tryParse(totalAmount) ?? 0; + final int trips = controller.weeklyList.length; + final double commission = earnings * 0.15; // Example 15% + final double netProfit = earnings - commission; - return Card( - margin: const EdgeInsets.all(16.0), - elevation: 4, - shadowColor: AppColor.primaryColor.withOpacity(0.2), - clipBehavior: Clip.antiAlias, - shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(15)), - child: Container( - padding: const EdgeInsets.all(20.0), - decoration: BoxDecoration( - gradient: LinearGradient( - colors: [AppColor.primaryColor, AppColor.greenColor], - begin: Alignment.topLeft, - end: Alignment.bottomRight, + return Container( + margin: const EdgeInsets.all(16), + padding: const EdgeInsets.all(24), + decoration: BoxDecoration( + gradient: FinanceDesignSystem.balanceGradient, + borderRadius: BorderRadius.circular(24), + boxShadow: [ + BoxShadow( + color: FinanceDesignSystem.primaryDark.withOpacity(0.3), + blurRadius: 20, + offset: const Offset(0, 8), ), - ), - child: Row( - children: [ - const Icon(Icons.account_balance_wallet, - color: Colors.white, size: 40), - const SizedBox(width: 16), - Expanded( - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text( - 'Total Weekly Earnings'.tr, - style: AppStyle.title - .copyWith(color: Colors.white70, fontSize: 16), - ), - const SizedBox(height: 4), - Text( - '$totalAmount ${'SYP'.tr}', - style: AppStyle.number - .copyWith(color: Colors.white, fontSize: 32), - ), - ], - ), - ), - ], - ), + ], + ), + child: Column( + children: [ + Text('Total Weekly Earnings'.tr, + style: TextStyle(color: Colors.white.withOpacity(0.8), fontSize: 14)), + const SizedBox(height: 8), + Text('${earnings.toStringAsFixed(0)} SYP', + style: const TextStyle(color: Colors.white, fontSize: 36, fontWeight: FontWeight.bold)), + const SizedBox(height: 24), + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + _buildStatItem('Total Trips'.tr, trips.toString(), Icons.directions_car_rounded), + _buildStatItem('Commission'.tr, '${commission.toStringAsFixed(0)}', Icons.percent_rounded), + _buildStatItem('Net Profit'.tr, '${netProfit.toStringAsFixed(0)}', Icons.account_balance_rounded), + ], + ), + ], ), ); } - // A dedicated widget for the list item. - Widget _TransactionListItem({required Map transaction}) { - final String paymentMethod = transaction['paymentMethod'] ?? 'Unknown'; - final String amount = transaction['amount']?.toString() ?? '0'; - final DateTime? date = DateTime.tryParse(transaction['dateUpdated'] ?? ''); + Widget _buildStatItem(String label, String value, IconData icon) { + return Column( + children: [ + Container( + padding: const EdgeInsets.all(8), + decoration: BoxDecoration(color: Colors.white.withOpacity(0.1), borderRadius: BorderRadius.circular(10)), + child: Icon(icon, color: Colors.white, size: 18), + ), + const SizedBox(height: 8), + Text(value, style: const TextStyle(color: Colors.white, fontWeight: FontWeight.bold, fontSize: 14)), + Text(label, style: TextStyle(color: Colors.white.withOpacity(0.6), fontSize: 10)), + ], + ); + } - return Card( - elevation: 2, - shadowColor: Colors.black.withOpacity(0.05), - margin: const EdgeInsets.only(bottom: 12.0), - shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(10)), - child: ListTile( - leading: CircleAvatar( - backgroundColor: AppColor.primaryColor.withOpacity(0.1), - child: Icon(_getPaymentIcon(paymentMethod), - color: AppColor.primaryColor, size: 22), + Widget _buildWeekSelector() { + return Padding( + padding: const EdgeInsets.symmetric(horizontal: 16), + child: Container( + padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 4), + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.circular(16), + boxShadow: [BoxShadow(color: Colors.black.withOpacity(0.02), blurRadius: 10)], ), - title: Text( - '$amount ${'SYP'.tr}', - style: AppStyle.title.copyWith(fontWeight: FontWeight.bold), - ), - subtitle: Text( - date != null - ? DateFormat('EEEE, hh:mm a', Get.locale?.toString()) - .format(date) // e.g., Tuesday, 10:11 AM - : 'Invalid Date', - style: AppStyle.title.copyWith(fontSize: 12, color: Colors.grey[600]), - ), - trailing: Chip( - label: Text( - _getTranslatedPaymentMethod(paymentMethod), - style: const TextStyle(fontSize: 12, fontWeight: FontWeight.w600), - ), - backgroundColor: Colors.grey.shade200, - padding: const EdgeInsets.symmetric(horizontal: 6), - side: BorderSide.none, + child: Row( + children: [ + IconButton(icon: const Icon(Icons.chevron_left_rounded), onPressed: () {}), + Expanded( + child: Center( + child: Text('Dec 15 - Dec 21, 2024'.tr, + style: const TextStyle(fontWeight: FontWeight.bold, fontSize: 14, color: FinanceDesignSystem.primaryDark)), + ), + ), + IconButton(icon: const Icon(Icons.chevron_right_rounded), onPressed: () {}), + ], ), ), ); @@ -179,45 +182,11 @@ class WeeklyPaymentPage extends StatelessWidget { child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ - Icon(Icons.receipt_long_outlined, size: 80, color: Colors.grey[400]), + Icon(Icons.bar_chart_rounded, size: 64, color: Colors.grey.shade300), const SizedBox(height: 16), - Text( - 'No transactions this week'.tr, - style: Theme.of(context) - .textTheme - .headlineSmall - ?.copyWith(color: Colors.grey[600]), - ), + Text('No transactions this week'.tr, style: const TextStyle(fontWeight: FontWeight.bold, color: Colors.grey)), ], ), ); } - - // Helper to get a specific icon for each payment method. - IconData _getPaymentIcon(String paymentMethod) { - switch (paymentMethod.toLowerCase()) { - case 'visa': - return Icons.credit_card; - case 'frombudget': - return Icons.account_balance_wallet_outlined; - case 'remainder': - return Icons.receipt_long; - case 'cash': - return Icons.money; - default: - return Icons.payment; - } - } - - // Helper to get translated or formatted payment method names. - String _getTranslatedPaymentMethod(String paymentMethod) { - switch (paymentMethod) { - case 'Remainder': - return 'Remainder'.tr; - case 'fromBudget': - return 'From Budget'.tr; - default: - return paymentMethod; - } - } } diff --git a/lib/views/home/my_wallet/widgets/balance_card.dart b/lib/views/home/my_wallet/widgets/balance_card.dart new file mode 100644 index 0000000..ab43334 --- /dev/null +++ b/lib/views/home/my_wallet/widgets/balance_card.dart @@ -0,0 +1,124 @@ +import 'package:flutter/material.dart'; +import 'package:get/get.dart'; +import '../../../../constant/finance_design_system.dart'; + +class BalanceCard extends StatelessWidget { + final String balance; + final bool isNegative; + final String lastUpdated; + + const BalanceCard({ + super.key, + required this.balance, + required this.isNegative, + this.lastUpdated = "Just now", + }); + + @override + Widget build(BuildContext context) { + return Container( + width: double.infinity, + padding: const EdgeInsets.all(24), + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(FinanceDesignSystem.cardRadius), + gradient: isNegative + ? FinanceDesignSystem.dangerGradient + : FinanceDesignSystem.balanceGradient, + boxShadow: [ + BoxShadow( + color: (isNegative + ? FinanceDesignSystem.dangerRed + : FinanceDesignSystem.primaryDark) + .withOpacity(0.3), + blurRadius: 15, + offset: const Offset(0, 8), + ), + ], + ), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + "Available Balance".tr, + style: TextStyle( + color: Colors.white.withOpacity(0.8), + fontSize: 14, + fontWeight: FontWeight.w500, + ), + ), + Text( + "الرصيد المتاح".tr, + style: TextStyle( + color: Colors.white.withOpacity(0.5), + fontSize: 12, + ), + ), + ], + ), + Container( + padding: const EdgeInsets.all(8), + decoration: BoxDecoration( + color: Colors.white.withOpacity(0.2), + shape: BoxShape.circle, + ), + child: Icon( + isNegative + ? Icons.warning_rounded + : Icons.account_balance_wallet_rounded, + color: Colors.white, + size: 20, + ), + ), + ], + ), + const SizedBox(height: 20), + Row( + crossAxisAlignment: CrossAxisAlignment.baseline, + textBaseline: TextBaseline.alphabetic, + children: [ + Text( + balance, + style: FinanceDesignSystem.balanceStyle, + ), + const SizedBox(width: 8), + Text( + "SYP".tr, + style: TextStyle( + color: Colors.white.withOpacity(0.7), + fontSize: 18, + fontWeight: FontWeight.w500, + ), + ), + ], + ), + const SizedBox(height: 16), + Divider(color: Colors.white.withOpacity(0.15)), + const SizedBox(height: 8), + Row( + children: [ + Icon( + Icons.history_rounded, + color: Colors.white.withOpacity(0.5), + size: 14, + ), + const SizedBox(width: 6), + Text( + "${'Last updated:'.tr} $lastUpdated", + style: TextStyle( + color: Colors.white.withOpacity(0.5), + fontSize: 12, + ), + ), + ], + ), + ], + ), + ); + } +} diff --git a/lib/views/home/my_wallet/widgets/financial_summary_card.dart b/lib/views/home/my_wallet/widgets/financial_summary_card.dart new file mode 100644 index 0000000..a6b2cd5 --- /dev/null +++ b/lib/views/home/my_wallet/widgets/financial_summary_card.dart @@ -0,0 +1,142 @@ +import 'package:flutter/material.dart'; +import 'package:get/get.dart'; +import '../../../../constant/finance_design_system.dart'; + +class FinancialSummaryCard extends StatelessWidget { + final String title; + final String? subtitle; + final List items; + + const FinancialSummaryCard({ + super.key, + required this.title, + this.subtitle, + required this.items, + }); + + @override + Widget build(BuildContext context) { + return Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text(title, style: FinanceDesignSystem.headingStyle), + if (subtitle != null) + Text(subtitle!, style: FinanceDesignSystem.subHeadingStyle), + ], + ), + ], + ), + const SizedBox(height: 16), + Container( + padding: const EdgeInsets.all(16), + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.circular(FinanceDesignSystem.cardRadius), + boxShadow: [ + BoxShadow( + color: Colors.black.withOpacity(0.03), + blurRadius: 10, + offset: const Offset(0, 4), + ), + ], + ), + child: ListView.separated( + shrinkWrap: true, + physics: const NeverScrollableScrollPhysics(), + itemCount: items.length, + separatorBuilder: (context, index) => + Divider(color: Colors.grey.withOpacity(0.1), height: 24), + itemBuilder: (context, index) { + final item = items[index]; + return Row( + children: [ + Container( + padding: const EdgeInsets.all(10), + decoration: BoxDecoration( + color: item.color.withOpacity(0.1), + borderRadius: BorderRadius.circular(10), + ), + child: Icon(item.icon, color: item.color, size: 20), + ), + const SizedBox(width: 16), + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + item.label, + style: const TextStyle( + fontSize: 14, + fontWeight: FontWeight.w500, + color: FinanceDesignSystem.primaryDark, + ), + ), + if (item.subLabel != null) + Text( + item.subLabel!, + style: TextStyle( + fontSize: 12, + color: Colors.grey.shade500, + ), + ), + ], + ), + ), + Column( + crossAxisAlignment: CrossAxisAlignment.end, + children: [ + Text( + "${item.amount} ${'SYP'.tr}", + style: const TextStyle( + fontSize: 16, + fontWeight: FontWeight.bold, + color: FinanceDesignSystem.primaryDark, + ), + ), + if (item.trend != null) + Text( + item.trend!, + style: TextStyle( + fontSize: 11, + color: item.trendColor ?? + FinanceDesignSystem.successGreen, + fontWeight: FontWeight.w500, + ), + ), + ], + ), + ], + ); + }, + ), + ), + ], + ); + } +} + +class SummaryItem { + final IconData icon; + final String label; + final String? subLabel; + final String amount; + final Color color; + final String? trend; + final Color? trendColor; + + SummaryItem({ + required this.icon, + required this.label, + this.subLabel, + required this.amount, + required this.color, + this.trend, + this.trendColor, + }); +} diff --git a/lib/views/home/my_wallet/widgets/promo_gamification_card.dart b/lib/views/home/my_wallet/widgets/promo_gamification_card.dart new file mode 100644 index 0000000..76e48e4 --- /dev/null +++ b/lib/views/home/my_wallet/widgets/promo_gamification_card.dart @@ -0,0 +1,163 @@ +import 'package:flutter/material.dart'; +import 'package:get/get.dart'; +import '../../../../constant/finance_design_system.dart'; + +class PromoGamificationCard extends StatelessWidget { + final String title; + final String subtitle; + final int currentProgress; + final int targetProgress; + final String reward; + final VoidCallback? onTap; + + const PromoGamificationCard({ + super.key, + required this.title, + required this.subtitle, + required this.currentProgress, + required this.targetProgress, + required this.reward, + this.onTap, + }); + + @override + Widget build(BuildContext context) { + final double progress = (currentProgress / targetProgress).clamp(0.0, 1.0); + final bool isCompleted = progress >= 1.0; + + return Container( + padding: const EdgeInsets.all(20), + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.circular(FinanceDesignSystem.cardRadius), + boxShadow: [ + BoxShadow( + color: Colors.black.withOpacity(0.03), + blurRadius: 10, + offset: const Offset(0, 4), + ), + ], + ), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + title, + style: const TextStyle( + fontSize: 16, + fontWeight: FontWeight.bold, + color: FinanceDesignSystem.primaryDark, + ), + ), + Text( + subtitle, + style: TextStyle( + fontSize: 12, + color: Colors.grey.shade500, + ), + ), + ], + ), + ), + Container( + padding: + const EdgeInsets.symmetric(horizontal: 12, vertical: 6), + decoration: BoxDecoration( + color: (isCompleted + ? FinanceDesignSystem.successGreen + : FinanceDesignSystem.accentBlue) + .withOpacity(0.1), + borderRadius: BorderRadius.circular(20), + ), + child: Text( + reward, + style: TextStyle( + fontSize: 12, + fontWeight: FontWeight.bold, + color: isCompleted + ? FinanceDesignSystem.successGreen + : FinanceDesignSystem.accentBlue, + ), + ), + ), + ], + ), + const SizedBox(height: 20), + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text( + "${'Progress:'.tr} $currentProgress / $targetProgress", + style: TextStyle( + fontSize: 12, + fontWeight: FontWeight.w500, + color: Colors.grey.shade700, + ), + ), + if (isCompleted) + Icon(Icons.check_circle_rounded, + color: FinanceDesignSystem.successGreen, size: 16), + ], + ), + const SizedBox(height: 8), + Stack( + children: [ + Container( + height: 10, + width: double.infinity, + decoration: BoxDecoration( + color: Colors.grey.shade100, + borderRadius: BorderRadius.circular(5), + ), + ), + AnimatedContainer( + duration: const Duration(milliseconds: 500), + height: 10, + width: MediaQuery.of(context).size.width * + progress, // Simplified for now + decoration: BoxDecoration( + gradient: LinearGradient( + colors: isCompleted + ? [ + FinanceDesignSystem.successGreen, + Colors.lightGreenAccent + ] + : [FinanceDesignSystem.accentBlue, Colors.blueAccent], + ), + borderRadius: BorderRadius.circular(5), + ), + ), + ], + ), + if (isCompleted && onTap != null) ...[ + const SizedBox(height: 16), + SizedBox( + width: double.infinity, + child: ElevatedButton( + onPressed: onTap, + style: ElevatedButton.styleFrom( + backgroundColor: FinanceDesignSystem.successGreen, + foregroundColor: Colors.white, + shape: RoundedRectangleBorder( + borderRadius: + BorderRadius.circular(FinanceDesignSystem.buttonRadius), + ), + elevation: 0, + padding: const EdgeInsets.symmetric(vertical: 12), + ), + child: Text("Claim Reward".tr), + ), + ), + ], + ], + ), + ); + } +} diff --git a/lib/views/home/my_wallet/widgets/quick_actions.dart b/lib/views/home/my_wallet/widgets/quick_actions.dart new file mode 100644 index 0000000..d0ef713 --- /dev/null +++ b/lib/views/home/my_wallet/widgets/quick_actions.dart @@ -0,0 +1,120 @@ +import 'package:flutter/material.dart'; +import 'package:get/get.dart'; +import '../../../../constant/finance_design_system.dart'; + +class QuickActionsGrid extends StatelessWidget { + final VoidCallback onAddBalance; + final VoidCallback onWithdraw; + final VoidCallback onTransfer; + final VoidCallback onHistory; + + const QuickActionsGrid({ + super.key, + required this.onAddBalance, + required this.onWithdraw, + required this.onTransfer, + required this.onHistory, + }); + + @override + Widget build(BuildContext context) { + return GridView.count( + shrinkWrap: true, + physics: const NeverScrollableScrollPhysics(), + crossAxisCount: 2, + crossAxisSpacing: 16, + mainAxisSpacing: 16, + childAspectRatio: 1.5, + children: [ + _ActionItem( + icon: Icons.add_circle_outline_rounded, + label: "Add Balance".tr, + subLabel: "شحن", + color: FinanceDesignSystem.accentBlue, + onTap: onAddBalance, + ), + _ActionItem( + icon: Icons.file_download_outlined, + label: "Withdraw".tr, + subLabel: "سحب", + color: FinanceDesignSystem.successGreen, + onTap: onWithdraw, + ), + _ActionItem( + icon: Icons.swap_horiz_rounded, + label: "Transfer".tr, + subLabel: "تحويل", + color: Colors.orange, + onTap: onTransfer, + ), + _ActionItem( + icon: Icons.history_rounded, + label: "History".tr, + subLabel: "السجل", + color: FinanceDesignSystem.primaryDark, + onTap: onHistory, + ), + ], + ); + } +} + +class _ActionItem extends StatelessWidget { + final IconData icon; + final String label; + final String subLabel; + final Color color; + final VoidCallback onTap; + + const _ActionItem({ + required this.icon, + required this.label, + required this.subLabel, + required this.color, + required this.onTap, + }); + + @override + Widget build(BuildContext context) { + return Material( + color: Colors.white, + borderRadius: BorderRadius.circular(FinanceDesignSystem.buttonRadius), + child: InkWell( + onTap: onTap, + borderRadius: BorderRadius.circular(FinanceDesignSystem.buttonRadius), + child: Container( + padding: const EdgeInsets.all(16), + decoration: BoxDecoration( + border: Border.all(color: Colors.grey.withOpacity(0.1)), + borderRadius: + BorderRadius.circular(FinanceDesignSystem.buttonRadius), + ), + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Icon(icon, color: color, size: 24), + const SizedBox(height: 8), + Text( + label, + style: const TextStyle( + fontSize: 13, + fontWeight: FontWeight.bold, + color: FinanceDesignSystem.primaryDark, + ), + textAlign: TextAlign.center, + ), + Text( + subLabel, + style: TextStyle( + fontSize: 11, + color: Colors.grey.shade500, + ), + textAlign: TextAlign.center, + ), + ], + ), + ), + ), + ); + } +} diff --git a/lib/views/home/my_wallet/widgets/transaction_preview_item.dart b/lib/views/home/my_wallet/widgets/transaction_preview_item.dart new file mode 100644 index 0000000..55aa6a5 --- /dev/null +++ b/lib/views/home/my_wallet/widgets/transaction_preview_item.dart @@ -0,0 +1,128 @@ +import 'package:flutter/material.dart'; +import 'package:get/get.dart'; +import '../../../../constant/finance_design_system.dart'; + +class TransactionPreviewItem extends StatelessWidget { + final String title; + final String subtitle; + final String amount; + final String date; + final String type; // 'credit' or 'debit' + final String? method; + final VoidCallback? onTap; + + const TransactionPreviewItem({ + super.key, + required this.title, + required this.subtitle, + required this.amount, + required this.date, + required this.type, + this.method, + this.onTap, + }); + + @override + Widget build(BuildContext context) { + final bool isCredit = type.toLowerCase() == 'credit'; + final Color statusColor = isCredit + ? FinanceDesignSystem.successGreen + : FinanceDesignSystem.dangerRed; + + return Material( + color: Colors.transparent, + child: InkWell( + onTap: onTap, + borderRadius: BorderRadius.circular(FinanceDesignSystem.mainRadius), + child: Container( + padding: const EdgeInsets.symmetric(vertical: 12, horizontal: 4), + child: Row( + children: [ + Container( + padding: const EdgeInsets.all(12), + decoration: BoxDecoration( + color: statusColor.withOpacity(0.1), + shape: BoxShape.circle, + ), + child: Icon( + isCredit + ? Icons.arrow_downward_rounded + : Icons.arrow_upward_rounded, + color: statusColor, + size: 20, + ), + ), + const SizedBox(width: 16), + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + title, + style: const TextStyle( + fontSize: 15, + fontWeight: FontWeight.bold, + color: FinanceDesignSystem.primaryDark, + ), + ), + const SizedBox(height: 4), + Row( + children: [ + Text( + date, + style: TextStyle( + fontSize: 12, + color: Colors.grey.shade500, + ), + ), + if (method != null) ...[ + const SizedBox(width: 8), + Container( + width: 3, + height: 3, + decoration: BoxDecoration( + color: Colors.grey.shade400, + shape: BoxShape.circle, + ), + ), + const SizedBox(width: 8), + Text( + method!, + style: TextStyle( + fontSize: 12, + color: Colors.grey.shade500, + ), + ), + ], + ], + ), + ], + ), + ), + Column( + crossAxisAlignment: CrossAxisAlignment.end, + children: [ + Text( + "${isCredit ? '+' : '-'}$amount ${'SYP'.tr}", + style: TextStyle( + fontSize: 16, + fontWeight: FontWeight.bold, + color: statusColor, + ), + ), + Text( + subtitle, + style: TextStyle( + fontSize: 11, + color: Colors.grey.shade400, + ), + ), + ], + ), + ], + ), + ), + ), + ); + } +} diff --git a/lib/views/home/profile/behavior_page.dart b/lib/views/home/profile/behavior_page.dart index bcf7470..08645e3 100644 --- a/lib/views/home/profile/behavior_page.dart +++ b/lib/views/home/profile/behavior_page.dart @@ -1,6 +1,7 @@ import 'package:flutter/material.dart'; import 'package:get/get.dart'; +import '../../../constant/colors.dart'; import '../../../controller/home/captin/behavior_controller.dart'; class BehaviorPage extends StatelessWidget { @@ -12,6 +13,7 @@ class BehaviorPage extends StatelessWidget { Widget build(BuildContext context) { final controller = Get.put(DriverBehaviorController()); controller.fetchDriverBehavior(); + final theme = Theme.of(context); return Scaffold( appBar: AppBar( @@ -37,20 +39,23 @@ class BehaviorPage extends StatelessWidget { child: Column( children: [ Text("Overall Behavior Score".tr, - style: TextStyle( - fontSize: 20, fontWeight: FontWeight.bold)), + style: theme.textTheme.titleLarge + ?.copyWith(fontWeight: FontWeight.bold)), const SizedBox(height: 10), Text( "${controller.overallScore.value.toStringAsFixed(1)} / 100", - style: const TextStyle( - fontSize: 28, color: Colors.blue)), + style: TextStyle( + fontSize: 28, + fontWeight: FontWeight.bold, + color: AppColor.primaryColor)), ], ), ), ), const SizedBox(height: 20), Text("Last 10 Trips".tr, - style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold)), + style: theme.textTheme.titleMedium + ?.copyWith(fontWeight: FontWeight.bold)), const SizedBox(height: 10), ListView.builder( shrinkWrap: true, @@ -62,7 +67,7 @@ class BehaviorPage extends StatelessWidget { elevation: 3, child: ListTile( leading: CircleAvatar( - backgroundColor: Colors.blue, + backgroundColor: AppColor.primaryColor, child: Text("${index + 1}", style: const TextStyle(color: Colors.white)), ), diff --git a/lib/views/home/profile/captains_cars.dart b/lib/views/home/profile/captains_cars.dart index ce06550..f8652a6 100755 --- a/lib/views/home/profile/captains_cars.dart +++ b/lib/views/home/profile/captains_cars.dart @@ -41,50 +41,91 @@ class CaptainsCars extends StatelessWidget { itemBuilder: (context, index) { final car = controller.cars[index]; return Padding( - padding: const EdgeInsets.all(4.0), + padding: const EdgeInsets.symmetric(horizontal: 12.0, vertical: 6.0), child: Card( - color: car['isDefault'].toString() == '0' - ? AppColor.accentColor - : AppColor.blueColor, elevation: 2, + color: car['isDefault'].toString() == '1' + ? AppColor.primaryColor + : Theme.of(context).cardColor, + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(12), + side: car['isDefault'].toString() == '1' + ? BorderSide.none + : BorderSide(color: Theme.of(context).dividerColor)), child: ListTile( - leading: Icon( - Fontisto.car, - size: 50, - color: Color(int.parse(car['color_hex'] - .replaceFirst('#', '0xff'))), + contentPadding: const EdgeInsets.all(12), + leading: Container( + padding: const EdgeInsets.all(8), + decoration: BoxDecoration( + color: Colors.white12, + borderRadius: BorderRadius.circular(8), + ), + child: Icon( + Fontisto.car, + size: 32, + color: car['isDefault'].toString() == '1' + ? Colors.white + : Color(int.parse(car['color_hex'] + .replaceFirst('#', '0xff'))), + ), ), title: Text( car['make'], - style: AppStyle.title, - ), // Assuming `make` is a field in each car item - subtitle: Row( - mainAxisAlignment: - MainAxisAlignment.spaceBetween, - children: [ - Text( - car['model'], - style: AppStyle.title, - ), - Container( - decoration: BoxDecoration( - border: Border.all( - color: AppColor.blueColor)), - child: Padding( - padding: const EdgeInsets.symmetric( - horizontal: 4), - child: Text( - (car['car_plate']), - style: AppStyle.title, + style: TextStyle( + fontWeight: FontWeight.bold, + fontSize: 16, + color: car['isDefault'].toString() == '1' + ? Colors.white + : Theme.of(context).textTheme.bodyLarge?.color, + ), + ), + subtitle: Padding( + padding: const EdgeInsets.only(top: 8.0), + child: Row( + children: [ + Text( + car['model'], + style: TextStyle( + color: car['isDefault'].toString() == '1' + ? Colors.white70 + : Theme.of(context).hintColor, ), ), - ), - Text( - car['year'], - style: AppStyle.title, - ), - ], - ), // Assuming `model` is a field in each car item + const SizedBox(width: 12), + Container( + padding: const EdgeInsets.symmetric(horizontal: 6, vertical: 2), + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(4), + border: Border.all( + color: car['isDefault'].toString() == '1' + ? Colors.white54 + : AppColor.primaryColor, + ), + ), + child: Text( + car['car_plate'], + style: TextStyle( + fontSize: 12, + fontWeight: FontWeight.bold, + color: car['isDefault'].toString() == '1' + ? Colors.white + : AppColor.primaryColor, + ), + ), + ), + const Spacer(), + Text( + car['year'], + style: TextStyle( + color: car['isDefault'].toString() == '1' + ? Colors.white70 + : Theme.of(context).hintColor, + ), + ), + ], + ), + ), + // trailing: IconButton( // icon: const Icon( // Icons.delete, diff --git a/lib/views/home/profile/profile_captain.dart b/lib/views/home/profile/profile_captain.dart index fa923e8..c117770 100755 --- a/lib/views/home/profile/profile_captain.dart +++ b/lib/views/home/profile/profile_captain.dart @@ -99,29 +99,30 @@ class ProfileHeader extends StatelessWidget { @override Widget build(BuildContext context) { + final theme = Theme.of(context); return Column( children: [ CircleAvatar( radius: 50, - backgroundColor: Get.theme.primaryColor.withOpacity(0.1), - child: Icon(Icons.person, size: 60, color: Get.theme.primaryColor), + backgroundColor: theme.primaryColor.withOpacity(0.1), + child: Icon(Icons.person, size: 60, color: theme.primaryColor), ), const SizedBox(height: 12), Text( name, - style: Get.textTheme.headlineSmall + style: theme.textTheme.headlineSmall ?.copyWith(fontWeight: FontWeight.bold), ), const SizedBox(height: 8), Row( mainAxisAlignment: MainAxisAlignment.center, children: [ - Icon(Icons.star, color: Colors.amber, size: 20), + const Icon(Icons.star, color: Colors.amber, size: 20), const SizedBox(width: 4), Text( '${rating.toStringAsFixed(1)} (${'reviews'.tr} $ratingCount)', - style: Get.textTheme.titleMedium - ?.copyWith(color: Colors.grey.shade600), + style: theme.textTheme.titleMedium + ?.copyWith(color: theme.hintColor), ), ], ), @@ -130,6 +131,7 @@ class ProfileHeader extends StatelessWidget { } } + /// 2. ويدجت شبكة الأزرار class ActionsGrid extends StatelessWidget { const ActionsGrid({super.key}); @@ -187,20 +189,23 @@ void showShamCashInput() { TextEditingController(text: existingCode); Get.bottomSheet( - Container( - padding: const EdgeInsets.all(25), - decoration: const BoxDecoration( - color: Colors.white, - borderRadius: BorderRadius.vertical(top: Radius.circular(30)), - boxShadow: [ - BoxShadow( - color: Colors.black26, blurRadius: 10, offset: Offset(0, -2)) - ], - ), - child: SingleChildScrollView( - child: Column( - mainAxisSize: MainAxisSize.min, - crossAxisAlignment: CrossAxisAlignment.stretch, + Builder(builder: (context) { + final theme = Theme.of(context); + return Container( + padding: const EdgeInsets.all(25), + decoration: BoxDecoration( + color: theme.cardColor, + borderRadius: const BorderRadius.vertical(top: Radius.circular(30)), + boxShadow: [ + BoxShadow( + color: theme.shadowColor.withOpacity(0.2), blurRadius: 10, offset: const Offset(0, -2)) + ], + ), + child: SingleChildScrollView( + child: Column( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.stretch, + children: [ // --- 1. المقبض العلوي --- Center( @@ -208,12 +213,13 @@ void showShamCashInput() { height: 5, width: 50, decoration: BoxDecoration( - color: Colors.grey[300], + color: theme.dividerColor, borderRadius: BorderRadius.circular(10)), margin: const EdgeInsets.only(bottom: 20), ), ), + // --- 2. العنوان والأيقونة --- Image.asset( 'assets/images/shamCash.png', @@ -386,11 +392,13 @@ void showShamCashInput() { ], ), ), - ), - isScrollControlled: true, // ضروري لرفع النافذة عند فتح الكيبورد + ); + }), + isScrollControlled: true, ); } + /// ويدجت داخلية لزر في الشبكة class _ActionTile extends StatelessWidget { final String title; @@ -402,8 +410,9 @@ class _ActionTile extends StatelessWidget { @override Widget build(BuildContext context) { + final theme = Theme.of(context); return Material( - color: Colors.grey.shade100, + color: theme.colorScheme.surfaceVariant.withOpacity(0.5), borderRadius: BorderRadius.circular(12), child: InkWell( onTap: onTap, @@ -413,12 +422,12 @@ class _ActionTile extends StatelessWidget { child: Row( mainAxisAlignment: MainAxisAlignment.center, children: [ - Icon(icon, color: Get.theme.primaryColor, size: 20), + Icon(icon, color: theme.primaryColor, size: 20), const SizedBox(width: 8), Flexible( child: Text( title, - style: Get.textTheme.labelLarge, + style: theme.textTheme.labelLarge, textAlign: TextAlign.center, )), ], @@ -429,6 +438,7 @@ class _ActionTile extends StatelessWidget { } } + /// 3. بطاقة المعلومات الشخصية class PersonalInfoCard extends StatelessWidget { final Map data; @@ -551,19 +561,21 @@ class _InfoRow extends StatelessWidget { @override Widget build(BuildContext context) { + final theme = Theme.of(context); return Padding( padding: const EdgeInsets.symmetric(vertical: 8.0), child: Row( children: [ - Icon(icon, color: Colors.grey.shade500, size: 20), + Icon(icon, color: theme.hintColor.withOpacity(0.6), size: 20), const SizedBox(width: 16), - Text(label, style: Get.textTheme.bodyLarge), + Text(label, style: theme.textTheme.bodyLarge), const Spacer(), Flexible( child: Text( value, - style: Get.textTheme.bodyLarge?.copyWith( - color: Colors.grey.shade700, fontWeight: FontWeight.w500), + style: theme.textTheme.bodyLarge?.copyWith( + color: theme.textTheme.bodyLarge?.color?.withOpacity(0.8), + fontWeight: FontWeight.w500), textAlign: TextAlign.end, ), ), @@ -572,3 +584,4 @@ class _InfoRow extends StatelessWidget { ); } } + diff --git a/lib/views/home/profile/promos_passenger_page.dart b/lib/views/home/profile/promos_passenger_page.dart index 90b5a72..e47d2c9 100755 --- a/lib/views/home/profile/promos_passenger_page.dart +++ b/lib/views/home/profile/promos_passenger_page.dart @@ -26,77 +26,91 @@ class PromosPassengerPage extends StatelessWidget { itemBuilder: (BuildContext context, int index) { final rides = orderHistoryController.promoList[index]; return Padding( - padding: const EdgeInsets.all(8.0), - child: Container( - decoration: const BoxDecoration( - borderRadius: BorderRadius.all(Radius.circular(12)), - color: AppColor.secondaryColor, - boxShadow: [ - BoxShadow( - color: AppColor.accentColor, - offset: Offset(-3, -3), - blurRadius: 0, - spreadRadius: 0, - blurStyle: BlurStyle.outer), - BoxShadow( - color: AppColor.accentColor, - offset: Offset(3, 3), - blurRadius: 0, - spreadRadius: 0, - blurStyle: BlurStyle.outer) - ]), + padding: const EdgeInsets.symmetric( + horizontal: 16, vertical: 8), + child: Card( + elevation: 4, + shadowColor: + Theme.of(context).shadowColor.withOpacity(0.1), + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(16)), child: Padding( - padding: const EdgeInsets.all(8.0), + padding: const EdgeInsets.all(16.0), child: Column( + crossAxisAlignment: CrossAxisAlignment.stretch, children: [ Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ - Column( - crossAxisAlignment: - CrossAxisAlignment.start, - children: [ - AnimatedTextKit( - animatedTexts: [ - ScaleAnimatedText(rides['promo_code'], - textStyle: AppStyle.title), - WavyAnimatedText(rides['promo_code'], - textStyle: AppStyle.title), - FlickerAnimatedText( - rides['promo_code'], - textStyle: AppStyle.title), - WavyAnimatedText(rides['promo_code'], - textStyle: AppStyle.title), - ], - isRepeatingAnimation: true, - onTap: () {}, - ), - Text( - rides['description'], - style: AppStyle.title, - ), - ], + Expanded( + child: Column( + crossAxisAlignment: + CrossAxisAlignment.start, + children: [ + SizedBox( + height: 30, + child: AnimatedTextKit( + animatedTexts: [ + ScaleAnimatedText( + rides['promo_code'], + textStyle: Theme.of(context) + .textTheme + .titleLarge + ?.copyWith( + color: AppColor + .primaryColor, + fontWeight: + FontWeight.bold, + )), + WavyAnimatedText( + rides['promo_code'], + textStyle: Theme.of(context) + .textTheme + .titleLarge + ?.copyWith( + color: AppColor + .primaryColor, + fontWeight: + FontWeight.bold, + )), + ], + repeatForever: true, + ), + ), + const SizedBox(height: 8), + Text( + rides['description'], + style: Theme.of(context) + .textTheme + .bodyMedium, + ), + ], + ), ), Column( + crossAxisAlignment: CrossAxisAlignment.end, children: [ - Text( - rides['validity_start_date'], - style: AppStyle.title, - ), - Text( - rides['validity_end_date'], - style: AppStyle.title, - ), + _buildDateBadge(context, + rides['validity_start_date'], true), + const SizedBox(height: 4), + _buildDateBadge(context, + rides['validity_end_date'], false), ], ), ], ), + const Divider(height: 24), Text( 'Copy this Promo to use it in your Ride!'.tr, textAlign: TextAlign.center, - style: AppStyle.headTitle2 - .copyWith(color: AppColor.accentColor), + style: Theme.of(context) + .textTheme + .labelMedium + ?.copyWith( + color: Theme.of(context).hintColor, + fontStyle: FontStyle.italic, + ), ) ], ), @@ -109,4 +123,24 @@ class PromosPassengerPage extends StatelessWidget { ], ); } + + Widget _buildDateBadge(BuildContext context, String date, bool isStart) { + return Container( + padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 4), + decoration: BoxDecoration( + color: isStart + ? Colors.green.withOpacity(0.1) + : Colors.red.withOpacity(0.1), + borderRadius: BorderRadius.circular(6), + ), + child: Text( + date, + style: TextStyle( + fontSize: 11, + fontWeight: FontWeight.bold, + color: isStart ? Colors.green : Colors.red, + ), + ), + ); + } } diff --git a/lib/views/home/profile/taarif_page.dart b/lib/views/home/profile/taarif_page.dart index 124437c..9c7db31 100755 --- a/lib/views/home/profile/taarif_page.dart +++ b/lib/views/home/profile/taarif_page.dart @@ -5,6 +5,8 @@ import 'package:get/get.dart'; import 'package:sefer_driver/constant/style.dart'; import 'package:sefer_driver/views/widgets/my_scafold.dart'; +import '../../../constant/colors.dart'; + class TaarifPage extends StatelessWidget { const TaarifPage({super.key}); @@ -18,47 +20,35 @@ class TaarifPage extends StatelessWidget { // crossAxisAlignment: CrossAxisAlignment.stretch, clipBehavior: Clip.hardEdge, children: [ - Table( - defaultVerticalAlignment: TableCellVerticalAlignment.middle, - border: TableBorder.symmetric(), - textBaseline: TextBaseline.alphabetic, - children: [ - TableRow( - // decoration: AppStyle.boxDecoration, - children: [ - Text('Minimum fare'.tr, style: AppStyle.title), - box.read(BoxName.countryCode) == 'Jordan' - ? Text('1 ${'JOD'.tr}', style: AppStyle.title) - : Text('20 ${'LE'.tr}', style: AppStyle.title), - ], - ), - TableRow( - children: [ - Text('Maximum fare'.tr, style: AppStyle.title), - box.read(BoxName.countryCode) == 'Jordan' - ? Text('200 ${'JOD'.tr}', style: AppStyle.title) - : Text('15000 ${'LE'.tr}', style: AppStyle.title), - ], - ), - TableRow( - children: [ - Text('Flag-down fee'.tr, style: AppStyle.title), - box.read(BoxName.countryCode) == 'Jordan' - ? Text('0.47 ${'JOD'.tr}', style: AppStyle.title) - : Text('15 ${'LE'.tr}', style: AppStyle.title), - ], - ), - TableRow( - children: [ - box.read(BoxName.countryCode) == 'Jordan' - ? Text('0.05 ${'JOD'.tr}/min and 0.21 ${'JOD'.tr}/km', - style: AppStyle.title) - : Text('1 ${'LE'.tr}/min and 4 ${'LE'.tr}/km', - style: AppStyle.title), - Text('Including Tax'.tr, style: AppStyle.title), - ], - ), - ], + _buildTariffItem( + context, + 'Minimum fare'.tr, + box.read(BoxName.countryCode) == 'Jordan' + ? '1 ${'JOD'.tr}' + : '20 ${'LE'.tr}'), + _buildTariffItem( + context, + 'Maximum fare'.tr, + box.read(BoxName.countryCode) == 'Jordan' + ? '200 ${'JOD'.tr}' + : '15000 ${'LE'.tr}'), + _buildTariffItem( + context, + 'Flag-down fee'.tr, + box.read(BoxName.countryCode) == 'Jordan' + ? '0.47 ${'JOD'.tr}' + : '15 ${'LE'.tr}'), + _buildTariffItem( + context, + 'Rate'.tr, + box.read(BoxName.countryCode) == 'Jordan' + ? '0.05 ${'JOD'.tr}/min and 0.21 ${'JOD'.tr}/km' + : '1 ${'LE'.tr}/min and 4 ${'LE'.tr}/km'), + Padding( + padding: const EdgeInsets.symmetric(vertical: 8.0), + child: Text('Including Tax'.tr, + style: AppStyle.subtitle + .copyWith(color: Theme.of(context).hintColor)), ), const SizedBox(height: 10), Text('BookingFee'.tr, style: AppStyle.headTitle2), @@ -85,4 +75,21 @@ class TaarifPage extends StatelessWidget { ), ]); } + + Widget _buildTariffItem(BuildContext context, String label, String value) { + return Padding( + padding: const EdgeInsets.symmetric(vertical: 12.0), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Expanded( + child: Text(label, style: AppStyle.title), + ), + Text(value, + style: AppStyle.title.copyWith( + fontWeight: FontWeight.bold, color: AppColor.primaryColor)), + ], + ), + ); + } } diff --git a/lib/views/lang/languages.dart b/lib/views/lang/languages.dart index ed0954f..3532393 100755 --- a/lib/views/lang/languages.dart +++ b/lib/views/lang/languages.dart @@ -3,6 +3,7 @@ import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:sefer_driver/views/home/Captin/home_captain/home_captin.dart'; +import '../../constant/finance_design_system.dart'; import '../../controller/local/local_controller.dart'; class Language extends StatelessWidget { @@ -32,33 +33,9 @@ class Language extends StatelessWidget { physics: const BouncingScrollPhysics(), children: [ _buildLanguageButton( - 'العربية', 'ar', controller, context, '🇪🇬'), - _buildLanguageButton('العربية (الخليج)', 'ar-gulf', - controller, context, '🇸🇦'), - _buildLanguageButton('العربية (المغرب)', 'ar-ma', - controller, context, '🇲🇦'), + 'العربية', 'ar', controller, context, 'AR'), _buildLanguageButton( - 'English', 'en', controller, context, '🇺🇸'), - _buildLanguageButton( - 'Türkçe', 'tr', controller, context, '🇹🇷'), - _buildLanguageButton( - 'Français', 'fr', controller, context, '🇫🇷'), - _buildLanguageButton( - 'Italiano', 'it', controller, context, '🇮🇹'), - _buildLanguageButton( - 'Deutsch', 'de', controller, context, '🇩🇪'), - _buildLanguageButton( - 'Ελληνικά', 'el', controller, context, '🇬🇷'), - _buildLanguageButton( - 'Español', 'es', controller, context, '🇪🇸'), - _buildLanguageButton( - 'فارسی', 'fa', controller, context, '🇮🇷'), - _buildLanguageButton( - '中文', 'zh', controller, context, '🇨🇳'), - _buildLanguageButton( - 'Русский', 'ru', controller, context, '🇷🇺'), - _buildLanguageButton( - 'हिन्दी', 'hi', controller, context, '🇮🇳'), + 'English', 'en', controller, context, 'EN'), ], ), ), @@ -104,25 +81,43 @@ class Language extends StatelessWidget { Widget _buildLanguageButton(String title, String langCode, LocaleController controller, BuildContext context, String flagIcon) { return Container( + margin: const EdgeInsets.only(bottom: 12), decoration: BoxDecoration( color: CupertinoColors.white, - borderRadius: BorderRadius.circular(12), + borderRadius: BorderRadius.circular(16), boxShadow: [ BoxShadow( - color: CupertinoColors.systemGrey5.withOpacity(0.5), + color: Colors.black.withOpacity(0.03), spreadRadius: 1, - blurRadius: 3, - offset: const Offset(0, 2), + blurRadius: 10, + offset: const Offset(0, 4), ), ], ), child: ListTile( - leading: Text(flagIcon, - style: const TextStyle(fontSize: 28)), // Using flag icon as leading + contentPadding: const EdgeInsets.symmetric(horizontal: 16, vertical: 4), + leading: Container( + width: 44, + height: 44, + decoration: BoxDecoration( + color: FinanceDesignSystem.primaryDark.withOpacity(0.05), + borderRadius: BorderRadius.circular(12), + ), + alignment: Alignment.center, + child: Text( + flagIcon, + style: const TextStyle( + fontSize: 16, + fontWeight: FontWeight.bold, + color: FinanceDesignSystem.primaryDark, + ), + ), + ), title: Text( title, style: const TextStyle( - fontWeight: FontWeight.w500, + fontWeight: FontWeight.w600, + fontSize: 16, ), ), trailing: const Icon(CupertinoIcons.chevron_forward, diff --git a/lib/views/notification/available_rides_page.dart b/lib/views/notification/available_rides_page.dart index 744a9b1..920e6c8 100755 --- a/lib/views/notification/available_rides_page.dart +++ b/lib/views/notification/available_rides_page.dart @@ -2,7 +2,7 @@ import 'dart:convert'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; -import 'package:google_maps_flutter/google_maps_flutter.dart'; // لتحديد الأنواع إذا لزم +import 'package:intaleq_maps/intaleq_maps.dart'; // لتحديد الأنواع إذا لزم import '../../constant/box_name.dart'; import '../../constant/colors.dart'; @@ -114,7 +114,7 @@ class RideAvailableCard extends StatelessWidget { margin: const EdgeInsets.only(bottom: 16.0), shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(16)), elevation: 4, - shadowColor: Colors.black.withOpacity(0.1), + shadowColor: Theme.of(context).shadowColor.withOpacity(0.1), child: Padding( padding: const EdgeInsets.all(16.0), child: Column( @@ -179,7 +179,7 @@ class RideAvailableCard extends StatelessWidget { Container( height: 30, width: 1, - color: Colors.grey.shade300, + color: Theme.of(Get.context!).dividerColor, margin: const EdgeInsets.symmetric(vertical: 4), ), const Icon(Icons.location_on, color: Colors.red, size: 18), @@ -218,15 +218,17 @@ class RideAvailableCard extends StatelessWidget { ); } - Widget _infoItem(IconData icon, String text, - {Color iconColor = Colors.grey}) { - return Row( - children: [ - Icon(icon, size: 16, color: iconColor), - const SizedBox(width: 4), - Text(text, style: AppStyle.subtitle.copyWith(fontSize: 13)), - ], - ); + Widget _infoItem(IconData icon, String text, {Color? iconColor}) { + return Builder(builder: (context) { + final theme = Theme.of(context); + return Row( + children: [ + Icon(icon, size: 16, color: iconColor ?? theme.hintColor), + const SizedBox(width: 4), + Text(text, style: theme.textTheme.bodySmall?.copyWith(fontSize: 13)), + ], + ); + }); } // --------------------------------------------------------------------------- diff --git a/lib/views/widgets/circle_container.dart b/lib/views/widgets/circle_container.dart index 33ce6ec..c3ca6f8 100755 --- a/lib/views/widgets/circle_container.dart +++ b/lib/views/widgets/circle_container.dart @@ -6,65 +6,72 @@ import 'mydialoug.dart'; class MyCircleContainer extends StatelessWidget { final Widget child; - final Color backgroundColor; - final Color borderColor; + final Color? backgroundColor; + final Color? borderColor; MyCircleContainer({ - Key? key, + super.key, required this.child, - this.backgroundColor = AppColor.secondaryColor, - this.borderColor = AppColor.accentColor, - }) : super(key: key); + this.backgroundColor, + this.borderColor, + }); final controller = Get.put(CircleController()); @override Widget build(BuildContext context) { + final effectiveBorderColor = borderColor ?? AppColor.borderColor; + return GetBuilder( - builder: ((controller) => GestureDetector( - onTap: () { - controller.changeColor(); - MyDialog().getDialog( - 'Rejected Orders Count'.tr, - 'This is the total number of rejected orders per day after accepting the orders' - .tr, () { - Get.back(); - }); - }, - child: AnimatedContainer( - onEnd: () { - controller.onEnd(); + builder: ((controller) { + final effectiveBackgroundColor = backgroundColor ?? + (controller.isActive ? AppColor.accentColor : AppColor.secondaryColor); + + return GestureDetector( + onTap: () { + controller.toggleActive(); + MyDialog().getDialog( + 'Rejected Orders Count'.tr, + 'This is the total number of rejected orders per day after accepting the orders' + .tr, () { + Get.back(); + }); }, - duration: const Duration(milliseconds: 300), - width: controller.size, - height: controller.size, - decoration: BoxDecoration( - shape: BoxShape.circle, - color: controller.backgroundColor, - border: Border.all( - color: borderColor, - width: 1, + child: AnimatedContainer( + onEnd: () { + controller.resetSize(); + }, + duration: const Duration(milliseconds: 300), + width: controller.size, + height: controller.size, + decoration: BoxDecoration( + shape: BoxShape.circle, + color: effectiveBackgroundColor, + border: Border.all( + color: effectiveBorderColor, + width: 1, + ), ), + child: Center(child: child), ), - child: Center(child: child), - ), - ))); + ); + })); } } class CircleController extends GetxController { - Color backgroundColor = AppColor.secondaryColor; + bool isActive = false; double size = 40; - void changeColor() { - backgroundColor = backgroundColor == AppColor.secondaryColor - ? AppColor.accentColor - : AppColor.secondaryColor; + + void toggleActive() { + isActive = !isActive; size = 60; update(); } - void onEnd() { + void resetSize() { size = 40; update(); } } + diff --git a/lib/views/widgets/elevated_btn.dart b/lib/views/widgets/elevated_btn.dart index be60a32..4c6e143 100755 --- a/lib/views/widgets/elevated_btn.dart +++ b/lib/views/widgets/elevated_btn.dart @@ -51,8 +51,14 @@ class MyElevatedButton extends StatelessWidget { child: Text( title, textAlign: TextAlign.center, - style: AppStyle.title.copyWith(color: AppColor.secondaryColor), + style: AppStyle.title.copyWith( + color: (kolor == AppColor.primaryColor || kolor == AppColor.blueColor || kolor == AppColor.redColor || kolor == AppColor.greenColor) + ? Colors.white + : AppColor.writeColor, + fontWeight: FontWeight.bold, + ), ), + ); } } diff --git a/lib/views/widgets/error_snakbar.dart b/lib/views/widgets/error_snakbar.dart index 0a129e4..8016844 100755 --- a/lib/views/widgets/error_snakbar.dart +++ b/lib/views/widgets/error_snakbar.dart @@ -1,123 +1,292 @@ +import 'dart:ui'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:get/get.dart'; - import '../../constant/colors.dart'; -class SnackbarConfig { - static const duration = Duration(seconds: 3); - static const animationDuration = Duration(milliseconds: 300); - static const margin = EdgeInsets.symmetric(horizontal: 16, vertical: 10); - static const borderRadius = 12.0; - static const elevation = 6.0; +// ───────────────────────────────────────────────────────────────────────────── +// Snackbar variant definition +// ───────────────────────────────────────────────────────────────────────────── +enum _SnackVariant { success, error, info, warning } - static final BoxShadow shadow = BoxShadow( - color: Colors.black.withOpacity(0.1), - blurRadius: 10, - offset: const Offset(0, 2), - ); +extension _VariantProps on _SnackVariant { + Color get baseColor => switch (this) { + _SnackVariant.success => const Color(0xFF1A9E5C), + _SnackVariant.error => const Color(0xFFD93025), + _SnackVariant.info => const Color(0xFF1A73E8), + _SnackVariant.warning => const Color(0xFFF29900), + }; + + Color get surfaceColor => switch (this) { + _SnackVariant.success => const Color(0xFFF0FBF5), + _SnackVariant.error => const Color(0xFFFEF2F1), + _SnackVariant.info => const Color(0xFFF0F6FF), + _SnackVariant.warning => const Color(0xFFFFF8E6), + }; + + IconData get icon => switch (this) { + _SnackVariant.success => Icons.check_circle_rounded, + _SnackVariant.error => Icons.error_rounded, + _SnackVariant.info => Icons.info_rounded, + _SnackVariant.warning => Icons.warning_amber_rounded, + }; + + String get label => switch (this) { + _SnackVariant.success => 'Success', + _SnackVariant.error => 'Error', + _SnackVariant.info => 'Info', + _SnackVariant.warning => 'Warning', + }; + + HapticFeedbackType get haptic => switch (this) { + _SnackVariant.error => HapticFeedbackType.medium, + _SnackVariant.warning => HapticFeedbackType.medium, + _SnackVariant.success => HapticFeedbackType.light, + _SnackVariant.info => HapticFeedbackType.selection, + }; } -SnackbarController mySnackeBarError(String message) { - // Trigger error haptic feedback - HapticFeedback.mediumImpact(); +enum HapticFeedbackType { light, medium, selection } + +// ───────────────────────────────────────────────────────────────────────────── +// Core snackbar widget +// ───────────────────────────────────────────────────────────────────────────── +class _SnackContent extends StatefulWidget { + final String message; + final _SnackVariant variant; + + const _SnackContent({required this.message, required this.variant}); + + @override + State<_SnackContent> createState() => _SnackContentState(); +} + +class _SnackContentState extends State<_SnackContent> + with TickerProviderStateMixin { + late final AnimationController _ctrl; + late final Animation _scaleAnim; + late final Animation _progressAnim; + + static const Duration _displayDuration = Duration(seconds: 4); + + @override + void initState() { + super.initState(); + _ctrl = AnimationController(vsync: this, duration: _displayDuration); + + _scaleAnim = CurvedAnimation( + parent: AnimationController( + vsync: this, + duration: const Duration(milliseconds: 500), + )..forward(), + curve: Curves.elasticOut, + ); + + _progressAnim = Tween(begin: 1.0, end: 0.0).animate( + CurvedAnimation(parent: _ctrl, curve: Curves.linear), + ); + + _ctrl.forward(); + } + + @override + void dispose() { + _ctrl.dispose(); + super.dispose(); + } + + @override + Widget build(BuildContext context) { + final v = widget.variant; + final accent = v.baseColor; + final surface = v.surfaceColor; + + return Container( + margin: const EdgeInsets.symmetric(horizontal: 14, vertical: 8), + decoration: BoxDecoration( + color: surface, + borderRadius: BorderRadius.circular(18), + border: Border.all(color: accent.withOpacity(0.18), width: 1.2), + boxShadow: [ + BoxShadow( + color: accent.withOpacity(0.12), + blurRadius: 20, + spreadRadius: -2, + offset: const Offset(0, 6), + ), + BoxShadow( + color: Colors.black.withOpacity(0.06), + blurRadius: 10, + offset: const Offset(0, 2), + ), + ], + ), + child: ClipRRect( + borderRadius: BorderRadius.circular(18), + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + // ── Main row ────────────────────────────────────────────────── + Padding( + padding: const EdgeInsets.fromLTRB(14, 14, 10, 12), + child: Row( + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + // Animated icon badge + ScaleTransition( + scale: _scaleAnim, + child: Container( + width: 40, + height: 40, + decoration: BoxDecoration( + color: accent.withOpacity(0.12), + shape: BoxShape.circle, + ), + child: Icon(v.icon, color: accent, size: 22), + ), + ), + const SizedBox(width: 12), + + // Text content + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisSize: MainAxisSize.min, + children: [ + Text( + v.label.tr, + style: TextStyle( + color: accent, + fontSize: 13, + fontWeight: FontWeight.w700, + letterSpacing: 0.2, + ), + ), + const SizedBox(height: 3), + Text( + widget.message, + style: TextStyle( + color: Colors.grey[800], + fontSize: 13.5, + height: 1.4, + fontWeight: FontWeight.w400, + ), + maxLines: 2, + overflow: TextOverflow.ellipsis, + ), + ], + ), + ), + + // Close button + GestureDetector( + onTap: () { + HapticFeedback.lightImpact(); + Get.closeCurrentSnackbar(); + }, + child: Container( + width: 30, + height: 30, + margin: const EdgeInsets.only(left: 6), + decoration: BoxDecoration( + color: Colors.grey.withOpacity(0.1), + shape: BoxShape.circle, + ), + child: Icon( + Icons.close_rounded, + size: 16, + color: Colors.grey[500], + ), + ), + ), + ], + ), + ), + + // ── Thin progress strip ─────────────────────────────────────── + AnimatedBuilder( + animation: _progressAnim, + builder: (_, __) => Stack( + children: [ + // Track + Container( + height: 3, + color: accent.withOpacity(0.08), + ), + // Fill + FractionallySizedBox( + widthFactor: _progressAnim.value, + child: Container( + height: 3, + decoration: BoxDecoration( + color: accent.withOpacity(0.45), + borderRadius: const BorderRadius.only( + topRight: Radius.circular(4), + bottomRight: Radius.circular(4), + ), + ), + ), + ), + ], + ), + ), + ], + ), + ), + ); + } +} + +// ───────────────────────────────────────────────────────────────────────────── +// Internal dispatcher — single source of truth +// ───────────────────────────────────────────────────────────────────────────── +SnackbarController _show(_SnackVariant variant, String message) { + // Dismiss any existing snackbar first (no stacking) + if (Get.isSnackbarOpen) Get.closeCurrentSnackbar(); + + switch (variant.haptic) { + case HapticFeedbackType.light: + HapticFeedback.lightImpact(); + case HapticFeedbackType.medium: + HapticFeedback.mediumImpact(); + case HapticFeedbackType.selection: + HapticFeedback.selectionClick(); + } return Get.snackbar( - 'Error'.tr, - message, - backgroundColor: AppColor.redColor.withOpacity(0.95), - colorText: AppColor.secondaryColor, - icon: const Icon( - Icons.error_outline_rounded, - color: AppColor.secondaryColor, - size: 28, - ), - shouldIconPulse: true, + '', + '', snackPosition: SnackPosition.TOP, - margin: SnackbarConfig.margin, - borderRadius: SnackbarConfig.borderRadius, - duration: SnackbarConfig.duration, - animationDuration: SnackbarConfig.animationDuration, - forwardAnimationCurve: Curves.easeOutCirc, - reverseAnimationCurve: Curves.easeInCirc, - boxShadows: [SnackbarConfig.shadow], - padding: const EdgeInsets.symmetric(horizontal: 20, vertical: 12), - titleText: Text( - 'Error'.tr, - style: const TextStyle( - fontWeight: FontWeight.w700, - color: Colors.white, - fontSize: 16, - letterSpacing: 0.2, - ), - ), - messageText: Text( - message, - style: TextStyle( - color: Colors.white.withOpacity(0.95), - fontSize: 14, - height: 1.3, - ), - ), - onTap: (_) { - HapticFeedback.lightImpact(); - Get.closeCurrentSnackbar(); - }, + backgroundColor: Colors.transparent, + margin: EdgeInsets.zero, + padding: EdgeInsets.zero, + duration: const Duration(seconds: 4), + animationDuration: const Duration(milliseconds: 380), + barBlur: 0, + overlayBlur: 0, + overlayColor: Colors.transparent, isDismissible: true, - dismissDirection: DismissDirection.horizontal, - overlayBlur: 0.8, - overlayColor: Colors.black12, + dismissDirection: DismissDirection.up, + forwardAnimationCurve: Curves.easeOutCubic, + reverseAnimationCurve: Curves.easeInCubic, + snackStyle: SnackStyle.FLOATING, + userInputForm: Form( + child: _SnackContent(message: message, variant: variant), + ), ); } -SnackbarController mySnackbarSuccess(String message) { - // Trigger success haptic feedback - HapticFeedback.lightImpact(); +// ───────────────────────────────────────────────────────────────────────────── +// Public API — drop-in replacements for the old functions +// ───────────────────────────────────────────────────────────────────────────── +SnackbarController mySnackbarSuccess(String message) => + _show(_SnackVariant.success, message); - return Get.snackbar( - 'Success'.tr, - message, - backgroundColor: AppColor.greenColor.withOpacity(0.95), - colorText: AppColor.secondaryColor, - icon: const Icon( - Icons.check_circle_outline_rounded, - color: AppColor.secondaryColor, - size: 28, - ), - shouldIconPulse: true, - snackPosition: SnackPosition.TOP, - margin: SnackbarConfig.margin, - borderRadius: SnackbarConfig.borderRadius, - duration: SnackbarConfig.duration, - animationDuration: SnackbarConfig.animationDuration, - forwardAnimationCurve: Curves.easeOutCirc, - reverseAnimationCurve: Curves.easeInCirc, - boxShadows: [SnackbarConfig.shadow], - padding: const EdgeInsets.symmetric(horizontal: 20, vertical: 12), - titleText: Text( - 'Success'.tr, - style: const TextStyle( - fontWeight: FontWeight.w700, - color: Colors.white, - fontSize: 16, - letterSpacing: 0.2, - ), - ), - messageText: Text( - message, - style: TextStyle( - color: Colors.white.withOpacity(0.95), - fontSize: 14, - height: 1.3, - ), - ), - onTap: (_) { - HapticFeedback.lightImpact(); - Get.closeCurrentSnackbar(); - }, - isDismissible: true, - dismissDirection: DismissDirection.horizontal, - overlayBlur: 0.8, - overlayColor: Colors.black12, - ); -} +SnackbarController mySnackeBarError(String message) => + _show(_SnackVariant.error, message); + +SnackbarController mySnackbarInfo(String message) => + _show(_SnackVariant.info, message); + +SnackbarController mySnackbarWarning(String message) => + _show(_SnackVariant.warning, message); diff --git a/lib/views/widgets/icon_widget_menu.dart b/lib/views/widgets/icon_widget_menu.dart index 54638a2..c938948 100755 --- a/lib/views/widgets/icon_widget_menu.dart +++ b/lib/views/widgets/icon_widget_menu.dart @@ -26,18 +26,18 @@ class IconWidgetMenu extends StatelessWidget { children: [ Container( width: 50, - decoration: const BoxDecoration( + decoration: BoxDecoration( color: AppColor.secondaryColor, shape: BoxShape.circle, boxShadow: [ BoxShadow( color: AppColor.secondaryColor, - offset: Offset(-2, -2), + offset: const Offset(-2, -2), blurRadius: 0, spreadRadius: 0, blurStyle: BlurStyle.outer, ), - BoxShadow( + const BoxShadow( color: AppColor.accentColor, offset: Offset(3, 3), blurRadius: 0, diff --git a/lib/views/widgets/my_scafold.dart b/lib/views/widgets/my_scafold.dart index fe50446..a884885 100755 --- a/lib/views/widgets/my_scafold.dart +++ b/lib/views/widgets/my_scafold.dart @@ -9,29 +9,27 @@ class MyScafolld extends StatelessWidget { super.key, required this.title, required this.body, - this.action = const Icon( - Icons.clear, - color: AppColor.secondaryColor, - ), + this.action, required this.isleading, }); final String title; final List body; - final Widget action; + final Widget? action; final bool isleading; @override Widget build(BuildContext context) { + final theme = Theme.of(context); return Scaffold( - backgroundColor: AppColor.secondaryColor, + backgroundColor: theme.scaffoldBackgroundColor, appBar: AppBar( - backgroundColor: AppColor.secondaryColor, + backgroundColor: theme.appBarTheme.backgroundColor, elevation: 0, leading: isleading ? IconButton( onPressed: () { - Get.back(); + Navigator.maybePop(context); }, icon: const Icon( Icons.arrow_back_ios_new, @@ -39,12 +37,19 @@ class MyScafolld extends StatelessWidget { ), ) : const SizedBox(), - actions: [action], + actions: [ + action ?? + Icon( + Icons.clear, + color: Colors.transparent, + ) + ], title: Text( title, - style: AppStyle.title.copyWith(fontSize: 30), + style: theme.textTheme.titleLarge?.copyWith(fontSize: 24, fontWeight: FontWeight.bold), ), ), body: SafeArea(child: Stack(children: body))); } } + diff --git a/lib/views/widgets/my_textField.dart b/lib/views/widgets/my_textField.dart index 8c44911..723457e 100755 --- a/lib/views/widgets/my_textField.dart +++ b/lib/views/widgets/my_textField.dart @@ -1,4 +1,5 @@ import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:get_storage/get_storage.dart'; import 'package:sefer_driver/constant/box_name.dart'; @@ -18,6 +19,7 @@ class MyTextForm extends StatelessWidget { @override Widget build(BuildContext context) { + final theme = Theme.of(context); return Padding( padding: const EdgeInsets.only(bottom: 10), child: SizedBox( @@ -27,9 +29,7 @@ class MyTextForm extends StatelessWidget { children: [ Text( label.tr, - style: TextStyle( - color: CupertinoColors.label, - fontSize: 16, + style: theme.textTheme.bodyLarge?.copyWith( fontWeight: FontWeight.w600, ), ), @@ -40,13 +40,14 @@ class MyTextForm extends StatelessWidget { placeholder: hint.tr, padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 12), decoration: BoxDecoration( - color: CupertinoColors.systemBackground, - border: Border.all(color: CupertinoColors.systemGrey4), + color: theme.cardColor, + border: Border.all(color: theme.dividerColor), borderRadius: BorderRadius.circular(8), ), - style: const TextStyle(color: CupertinoColors.label), - placeholderStyle: - const TextStyle(color: CupertinoColors.placeholderText), + style: theme.textTheme.bodyLarge, + placeholderStyle: theme.textTheme.bodyMedium?.copyWith( + color: theme.hintColor, + ), ), const SizedBox(height: 4), ValueListenableBuilder( @@ -56,9 +57,10 @@ class MyTextForm extends StatelessWidget { return errorText != null ? Text( errorText, - style: const TextStyle( - color: CupertinoColors.destructiveRed, - fontSize: 12), + style: TextStyle( + color: theme.colorScheme.error, + fontSize: 12, + ), ) : const SizedBox.shrink(); }, diff --git a/lib/views/widgets/mydialoug.dart b/lib/views/widgets/mydialoug.dart index e6f8976..fa293a7 100755 --- a/lib/views/widgets/mydialoug.dart +++ b/lib/views/widgets/mydialoug.dart @@ -44,11 +44,9 @@ class MyDialog extends GetxController { sigmaX: DialogConfig.blurStrength, sigmaY: DialogConfig.blurStrength, ), - child: Theme( - data: ThemeData.light().copyWith( - dialogBackgroundColor: CupertinoColors.systemBackground, - ), - child: CupertinoAlertDialog( + child: Builder(builder: (context) { + final theme = Theme.of(context); + return CupertinoAlertDialog( title: Column( children: [ Text( @@ -92,7 +90,7 @@ class MyDialog extends GetxController { style: AppStyle.title.copyWith( fontSize: 16, height: 1.3, - color: Colors.black87, + color: theme.textTheme.bodyLarge?.color ?? AppColor.writeColor, ), textAlign: TextAlign.center, ), @@ -102,7 +100,7 @@ class MyDialog extends GetxController { CupertinoDialogAction( onPressed: () { HapticFeedback.lightImpact(); - Get.back(); + Navigator.of(context, rootNavigator: true).pop(); }, child: Text( 'Cancel'.tr, @@ -116,6 +114,7 @@ class MyDialog extends GetxController { CupertinoDialogAction( onPressed: () { HapticFeedback.mediumImpact(); + Navigator.of(context, rootNavigator: true).pop(); onPressed(); }, child: Text( @@ -128,10 +127,11 @@ class MyDialog extends GetxController { ), ), ], - ), - ), + ); + }), ), ), + barrierDismissible: true, barrierColor: Colors.black.withAlpha(102), // 0.4 opacity ); @@ -159,11 +159,8 @@ class MyDialogContent extends GetxController { sigmaX: DialogConfig.blurStrength, sigmaY: DialogConfig.blurStrength, ), - child: Theme( - data: ThemeData.light().copyWith( - dialogBackgroundColor: CupertinoColors.systemBackground, - ), - child: CupertinoAlertDialog( + child: Builder(builder: (context) { + return CupertinoAlertDialog( title: Column( children: [ Text( @@ -208,7 +205,7 @@ class MyDialogContent extends GetxController { CupertinoDialogAction( onPressed: () { HapticFeedback.lightImpact(); - Get.back(); + Navigator.of(context, rootNavigator: true).pop(); }, child: Text( 'Cancel', @@ -222,6 +219,7 @@ class MyDialogContent extends GetxController { CupertinoDialogAction( onPressed: () { HapticFeedback.mediumImpact(); + Navigator.of(context, rootNavigator: true).pop(); onPressed(); }, child: Text( @@ -234,10 +232,11 @@ class MyDialogContent extends GetxController { ), ), ], - ), - ), + ); + }), ), ), + barrierDismissible: true, barrierColor: Colors.black.withAlpha(102), // 0.4 opacity ); diff --git a/linux/flutter/generated_plugin_registrant.cc b/linux/flutter/generated_plugin_registrant.cc index 2221ddf..8ac2ca5 100644 --- a/linux/flutter/generated_plugin_registrant.cc +++ b/linux/flutter/generated_plugin_registrant.cc @@ -8,7 +8,6 @@ #include #include -#include #include #include @@ -19,9 +18,6 @@ void fl_register_plugins(FlPluginRegistry* registry) { g_autoptr(FlPluginRegistrar) flutter_secure_storage_linux_registrar = fl_plugin_registry_get_registrar_for_plugin(registry, "FlutterSecureStorageLinuxPlugin"); flutter_secure_storage_linux_plugin_register_with_registrar(flutter_secure_storage_linux_registrar); - g_autoptr(FlPluginRegistrar) objectbox_flutter_libs_registrar = - fl_plugin_registry_get_registrar_for_plugin(registry, "ObjectboxFlutterLibsPlugin"); - objectbox_flutter_libs_plugin_register_with_registrar(objectbox_flutter_libs_registrar); g_autoptr(FlPluginRegistrar) record_linux_registrar = fl_plugin_registry_get_registrar_for_plugin(registry, "RecordLinuxPlugin"); record_linux_plugin_register_with_registrar(record_linux_registrar); diff --git a/linux/flutter/generated_plugins.cmake b/linux/flutter/generated_plugins.cmake index e107b17..76bed44 100644 --- a/linux/flutter/generated_plugins.cmake +++ b/linux/flutter/generated_plugins.cmake @@ -5,7 +5,6 @@ list(APPEND FLUTTER_PLUGIN_LIST file_selector_linux flutter_secure_storage_linux - objectbox_flutter_libs record_linux url_launcher_linux ) diff --git a/macos/Flutter/GeneratedPluginRegistrant.swift b/macos/Flutter/GeneratedPluginRegistrant.swift index e6f28b1..55a162e 100644 --- a/macos/Flutter/GeneratedPluginRegistrant.swift +++ b/macos/Flutter/GeneratedPluginRegistrant.swift @@ -24,7 +24,6 @@ import google_sign_in_ios import just_audio import local_auth_darwin import location -import objectbox_flutter_libs import package_info_plus import record_macos import share_plus @@ -55,7 +54,6 @@ func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { JustAudioPlugin.register(with: registry.registrar(forPlugin: "JustAudioPlugin")) LocalAuthPlugin.register(with: registry.registrar(forPlugin: "LocalAuthPlugin")) LocationPlugin.register(with: registry.registrar(forPlugin: "LocationPlugin")) - ObjectboxFlutterLibsPlugin.register(with: registry.registrar(forPlugin: "ObjectboxFlutterLibsPlugin")) FPPPackageInfoPlusPlugin.register(with: registry.registrar(forPlugin: "FPPPackageInfoPlusPlugin")) RecordMacOsPlugin.register(with: registry.registrar(forPlugin: "RecordMacOsPlugin")) SharePlusMacosPlugin.register(with: registry.registrar(forPlugin: "SharePlusMacosPlugin")) diff --git a/pubspec.lock b/pubspec.lock index 1078a26..11a51be 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -184,46 +184,6 @@ packages: url: "https://pub.dev" source: hosted version: "0.0.6" - camera: - dependency: "direct main" - description: - name: camera - sha256: "034c38cb8014d29698dcae6d20276688a1bf74e6487dfeb274d70ea05d5f7777" - url: "https://pub.dev" - source: hosted - version: "0.12.0+1" - camera_android_camerax: - dependency: transitive - description: - name: camera_android_camerax - sha256: "2c178975759aac0f0ef7ce1ec698b6e2acd792127ea7f38fa79a424fbebeae7f" - url: "https://pub.dev" - source: hosted - version: "0.7.1+2" - camera_avfoundation: - dependency: transitive - description: - name: camera_avfoundation - sha256: "90e4cc3fde331581a3b2d35d83be41dbb7393af0ab857eb27b732174289cb96d" - url: "https://pub.dev" - source: hosted - version: "0.10.1" - camera_platform_interface: - dependency: transitive - description: - name: camera_platform_interface - sha256: "98cfc9357e04bad617671b4c1f78a597f25f08003089dd94050709ae54effc63" - url: "https://pub.dev" - source: hosted - version: "2.12.0" - camera_web: - dependency: transitive - description: - name: camera_web - sha256: "57f49a635c8bf249d07fb95eb693d7e4dda6796dedb3777f9127fb54847beba7" - url: "https://pub.dev" - source: hosted - version: "0.3.5+3" characters: dependency: transitive description: @@ -248,14 +208,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.13.0" - cli_util: - dependency: transitive - description: - name: cli_util - sha256: ff6785f7e9e3c38ac98b2fb035701789de90154024a75b6cb926445e83197d1c - url: "https://pub.dev" - source: hosted - version: "0.4.2" clock: dependency: transitive description: @@ -344,22 +296,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.9" - dart_earcut: - dependency: transitive - description: - name: dart_earcut - sha256: e485001bfc05dcbc437d7bfb666316182e3522d4c3f9668048e004d0eb2ce43b - url: "https://pub.dev" - source: hosted - version: "1.2.0" - dart_polylabel2: - dependency: transitive - description: - name: dart_polylabel2 - sha256: "7eeab15ce72894e4bdba6a8765712231fc81be0bd95247de4ad9966abc57adc6" - url: "https://pub.dev" - source: hosted - version: "1.0.0" dart_style: dependency: transitive description: @@ -380,10 +316,10 @@ packages: dependency: "direct main" description: name: device_info_plus - sha256: b4fed1b2835da9d670d7bed7db79ae2a94b0f5ad6312268158a9b5479abbacdd + sha256: e3fc9a65820fef83035af8ee8c09004a719d5d1d54e6de978fcb0d84bbeb241a url: "https://pub.dev" source: hosted - version: "12.4.0" + version: "11.2.2" device_info_plus_platform_interface: dependency: transitive description: @@ -584,14 +520,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.2.0" - flat_buffers: - dependency: transitive - description: - name: flat_buffers - sha256: "380bdcba5664a718bfd4ea20a45d39e13684f5318fcd8883066a55e21f37f4c3" - url: "https://pub.dev" - source: hosted - version: "23.5.26" flutter: dependency: "direct main" description: flutter @@ -781,14 +709,6 @@ packages: url: "https://pub.dev" source: hosted version: "0.6.0" - flutter_launcher_icons: - dependency: "direct main" - description: - name: flutter_launcher_icons - sha256: "10f13781741a2e3972126fae08393d3c4e01fa4cd7473326b94b72cf594195e7" - url: "https://pub.dev" - source: hosted - version: "0.14.4" flutter_lints: dependency: "direct dev" description: @@ -829,22 +749,6 @@ packages: url: "https://pub.dev" source: hosted version: "3.0.0" - flutter_map: - dependency: "direct main" - description: - name: flutter_map - sha256: "391e7dc95cc3f5190748210a69d4cfeb5d8f84dcdfa9c3235d0a9d7742ccb3f8" - url: "https://pub.dev" - source: hosted - version: "8.2.2" - flutter_map_tile_caching: - dependency: "direct main" - description: - name: flutter_map_tile_caching - sha256: "90e097223d8ab74425cf15b449a03adfa4d4c28406dc757e1c396aff0f9beba7" - url: "https://pub.dev" - source: hosted - version: "10.1.1" flutter_overlay_window: dependency: "direct main" description: @@ -1122,18 +1026,16 @@ packages: get: dependency: "direct main" description: - name: get - sha256: "5ed34a7925b85336e15d472cc4cfe7d9ebf4ab8e8b9f688585bf6b50f4c3d79a" - url: "https://pub.dev" - source: hosted - version: "4.7.3" + path: "../Intaleq/packages/get" + relative: true + source: path + version: "4.6.5" get_storage: dependency: "direct main" description: - name: get_storage - sha256: "39db1fffe779d0c22b3a744376e86febe4ade43bf65e06eab5af707dc84185a2" - url: "https://pub.dev" - source: hosted + path: "../Intaleq/packages/get_storage" + relative: true + source: path version: "2.1.1" glob: dependency: transitive @@ -1159,62 +1061,6 @@ packages: url: "https://pub.dev" source: hosted version: "0.3.3+1" - google_maps: - dependency: transitive - description: - name: google_maps - sha256: "5d410c32112d7c6eb7858d359275b2aa04778eed3e36c745aeae905fb2fa6468" - url: "https://pub.dev" - source: hosted - version: "8.2.0" - google_maps_flutter: - dependency: "direct main" - description: - name: google_maps_flutter - sha256: fc714bf8072e2c121d4277cb6dca23bbfae954b6c7b5d6dd73f1bc8d09762921 - url: "https://pub.dev" - source: hosted - version: "2.17.0" - google_maps_flutter_android: - dependency: transitive - description: - name: google_maps_flutter_android - sha256: "9c14d3d58a398d6182c2c674b17d36c16a1d64c2c60891e9acf019856319c512" - url: "https://pub.dev" - source: hosted - version: "2.19.5" - google_maps_flutter_ios: - dependency: transitive - description: - name: google_maps_flutter_ios - sha256: "5ed8d8d0f93dfa7f5039c409c500948e98e59068f8f6fcf9105bfd07e3709d7f" - url: "https://pub.dev" - source: hosted - version: "2.18.1" - google_maps_flutter_platform_interface: - dependency: transitive - description: - name: google_maps_flutter_platform_interface - sha256: ddbe34435dfb34e83fca295c6a8dcc53c3b51487e9eec3c737ce4ae605574347 - url: "https://pub.dev" - source: hosted - version: "2.15.0" - google_maps_flutter_web: - dependency: transitive - description: - name: google_maps_flutter_web - sha256: "6cefe4ef4cc61dc0dfba4c413dec4bd105cb6b9461bfbe1465ddd09f80af377d" - url: "https://pub.dev" - source: hosted - version: "0.6.2" - google_polyline_algorithm: - dependency: "direct main" - description: - name: google_polyline_algorithm - sha256: "357874f00d3f93c3ba1bf4b4d9a154aa9ee87147c068238c1e8392012b686a03" - url: "https://pub.dev" - source: hosted - version: "3.1.0" google_sign_in: dependency: "direct main" description: @@ -1328,7 +1174,7 @@ packages: source: hosted version: "4.1.2" image: - dependency: "direct main" + dependency: transitive description: name: image sha256: f9881ff4998044947ec38d098bc7c8316ae1186fa786eddffdb867b9bc94dfce @@ -1423,6 +1269,13 @@ packages: url: "https://pub.dev" source: hosted version: "0.2.2" + intaleq_maps: + dependency: "direct main" + description: + path: "../map-saas/packages/flutter-sdk" + relative: true + source: path + version: "2.2.0" internet_connection_checker: dependency: "direct main" description: @@ -1503,14 +1356,6 @@ packages: url: "https://pub.dev" source: hosted version: "2.0.1" - latlong2: - dependency: "direct main" - description: - name: latlong2 - sha256: "98227922caf49e6056f91b6c56945ea1c7b166f28ffcd5fb8e72fc0b453cc8fe" - url: "https://pub.dev" - source: hosted - version: "0.9.1" leak_tracker: dependency: transitive description: @@ -1543,14 +1388,6 @@ packages: url: "https://pub.dev" source: hosted version: "6.1.0" - lists: - dependency: transitive - description: - name: lists - sha256: "4ca5c19ae4350de036a7e996cdd1ee39c93ac0a2b840f4915459b7d0a7d4ab27" - url: "https://pub.dev" - source: hosted - version: "1.0.1" live_activities: dependency: "direct main" description: @@ -1623,14 +1460,6 @@ packages: url: "https://pub.dev" source: hosted version: "6.0.1" - logger: - dependency: transitive - description: - name: logger - sha256: "25aee487596a6257655a1e091ec2ae66bc30e7af663592cc3a27e6591e05035c" - url: "https://pub.dev" - source: hosted - version: "2.7.0" logging: dependency: transitive description: @@ -1647,6 +1476,30 @@ packages: url: "https://pub.dev" source: hosted version: "3.3.2" + maplibre_gl: + dependency: transitive + description: + name: maplibre_gl + sha256: d9773555ae4ebab94bbc3ae2176b077cfda486ec729eefe01e1613f164cb8410 + url: "https://pub.dev" + source: hosted + version: "0.25.0" + maplibre_gl_platform_interface: + dependency: transitive + description: + name: maplibre_gl_platform_interface + sha256: bd7de401dea24dd7e8a6f2fa736ddee7dbbee3e24a9027f0afdd619994702047 + url: "https://pub.dev" + source: hosted + version: "0.25.0" + maplibre_gl_web: + dependency: transitive + description: + name: maplibre_gl_web + sha256: af0e48bf96e8dd99f8b958a1953126971eb8a0527b9735441d4f24df3913f5a2 + url: "https://pub.dev" + source: hosted + version: "0.25.0" matcher: dependency: transitive description: @@ -1671,14 +1524,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.17.0" - mgrs_dart: - dependency: transitive - description: - name: mgrs_dart - sha256: fb89ae62f05fa0bb90f70c31fc870bcbcfd516c843fb554452ab3396f78586f7 - url: "https://pub.dev" - source: hosted - version: "2.0.0" mime: dependency: transitive description: @@ -1711,22 +1556,6 @@ packages: url: "https://pub.dev" source: hosted version: "0.5.0" - objectbox: - dependency: transitive - description: - name: objectbox - sha256: "3cc186749178a3556e1020c9082d0897d0f9ecbdefcc27320e65c5bc650f0e57" - url: "https://pub.dev" - source: hosted - version: "4.3.1" - objectbox_flutter_libs: - dependency: transitive - description: - name: objectbox_flutter_libs - sha256: cd754766e04229a4f51250f121813d9a3c1a74fc21cd68e48b3c6085cbcd6c85 - url: "https://pub.dev" - source: hosted - version: "4.3.1" objective_c: dependency: transitive description: @@ -1927,14 +1756,6 @@ packages: url: "https://pub.dev" source: hosted version: "6.5.0" - proj4dart: - dependency: transitive - description: - name: proj4dart - sha256: c8a659ac9b6864aa47c171e78d41bbe6f5e1d7bd790a5814249e6b68bc44324e - url: "https://pub.dev" - source: hosted - version: "2.1.0" provider: dependency: transitive description: @@ -2071,14 +1892,6 @@ packages: url: "https://pub.dev" source: hosted version: "0.28.0" - sanitize_html: - dependency: transitive - description: - name: sanitize_html - sha256: "12669c4a913688a26555323fb9cec373d8f9fbe091f2d01c40c723b33caa8989" - url: "https://pub.dev" - source: hosted - version: "2.1.0" secure_string_operations: dependency: "direct main" description: @@ -2338,14 +2151,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.4.0" - unicode: - dependency: transitive - description: - name: unicode - sha256: "0f69e46593d65245774d4f17125c6084d2c20b4e473a983f6e21b7d7762218f1" - url: "https://pub.dev" - source: hosted - version: "0.3.1" upower: dependency: transitive description: @@ -2355,7 +2160,7 @@ packages: source: hosted version: "0.7.0" url_launcher: - dependency: "direct main" + dependency: transitive description: name: url_launcher sha256: f6a7e5c4835bb4e3026a04793a4199ca2d14c739ec378fdfe23fc8075d0439f8 @@ -2614,18 +2419,10 @@ packages: dependency: transitive description: name: win32_registry - sha256: "6f1b564492d0147b330dd794fee8f512cec4977957f310f9951b5f9d83618dae" + sha256: "21ec76dfc731550fd3e2ce7a33a9ea90b828fdf19a5c3bcf556fa992cfa99852" url: "https://pub.dev" source: hosted - version: "2.1.0" - wkt_parser: - dependency: transitive - description: - name: wkt_parser - sha256: "8a555fc60de3116c00aad67891bcab20f81a958e4219cc106e3c037aa3937f13" - url: "https://pub.dev" - source: hosted - version: "2.0.0" + version: "1.1.5" xdg_directories: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index 52b1082..2996f01 100755 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -10,111 +10,87 @@ environment: dependencies: flutter: sdk: flutter - secure_string_operations: - path: ./secure_string_operations - # flutter_overlay_apps: - # path: ./flutter_overlay_apps-main + + # Local Packages bubble_head: path: ./bubble-master + get: + path: ../Intaleq/packages/get + get_storage: + path: ../Intaleq/packages/get_storage + intaleq_maps: + path: ../map-saas/packages/flutter-sdk/ + secure_string_operations: + path: ./secure_string_operations trip_overlay_plugin: path: ./trip_overlay_plugin - # flutter_overlay_window: ^0.4.4 - cupertino_icons: ^1.0.2 - firebase_messaging: ^16.1.3 - firebase_core: ^4.6.0 - flutter_local_notifications: ^21.0.0 - google_maps_flutter: ^2.10.1 - sqflite: ^2.3.0 - path: ^1.8.3 - # lottie: ^2.5.0 - intl: ^0.20.2 - google_fonts: ^8.0.2 - http: ^1.2.2 - get: ^4.6.5 - get_storage: ^2.1.1 - url_launcher: ^6.1.12 - location: ^8.0.0 - google_polyline_algorithm: ^3.1.0 - # custom_searchable_dropdown: ^2.1.1 + + # Core & UI animated_text_kit: ^4.2.2 - flutter_secure_storage: ^10.0.0 - geolocator: ^14.0.2 - flutter_paypal: ^0.2.0 - flutter_launcher_icons: ^0.14.2 #to be remove - # crypto: ^3.0.3 - encrypt: ^5.0.3 - flutter_rating_bar: ^4.0.1 - flutter_font_icons: ^2.2.5 - image_picker: ^1.0.4 - flutter_stripe: ^12.4.0 - camera: ^0.12.0+1 #to be remove - flutter_widget_from_html: ^0.17.1 - local_auth: ^3.0.1 - image: ^4.1.3 #to be remove - image_cropper: ^12.1.1 - envied: ^1.0.0 - # cached_network_image: ^3.3.0 #to be remove calendar_builder: ^0.0.6 + cupertino_icons: ^1.0.2 fl_chart: ^1.2.0 - # agora_rtc_engine: ^6.2.6 - flutter_tts: ^4.0.2 - permission_handler: ^12.0.1 - # google_generative_ai: ^0.0.1-dev - vibration: ^3.1.8 - wakelock_plus: - # background_location: ^0.13.0 - # background_location: - # git: - # url: https://github.com/dharmik-dalwadi-seaflux/background_location.git - # ref: master - - # flutter_overlay_apps: - # git: - # url: https://github.com/Hamza-Ayed/flutter_overlay_apps.git - # ref: main - record: ^6.2.0 - dio: ^5.4.3+1 - webview_flutter: ^4.9.0 - just_audio: ^0.10.5 - share_plus: ^12.0.2 - google_sign_in: ^7.2.0 - # google_mlkit_text_recognition: ^0.14.0 - sign_in_with_apple: ^7.0.1 - firebase_auth: ^6.3.0 - package_info_plus: ^9.0.1 - flutter_image_compress: ^2.3.0 - flutter_contacts: ^1.1.8 - flutter_overlay_window: ^0.5.0 - googleapis_auth: ^2.0.0 - video_player: ^2.9.2 - youtube_player_flutter: ^9.0.4 flutter_confetti: ^0.5.1 - slide_to_act: ^2.0.2 - live_activities: ^2.3.0 - quick_actions: ^1.1.0 - jwt_decoder: ^2.0.1 - jailbreak_root_detection: ^1.1.5 - device_info_plus: ^12.4.0 - flutter_web_browser: ^0.17.3 - # flutter_isolate: ^2.1.0 - # lingo_hunter: ^1.0.3 - shimmer: ^3.0.0 - flutter_svg: ^2.2.0 - lottie: ^3.3.1 + flutter_font_icons: ^2.2.5 + flutter_rating_bar: ^4.0.1 flutter_staggered_animations: ^1.1.1 + flutter_svg: ^2.2.0 + flutter_widget_from_html: ^0.17.1 + google_fonts: ^8.0.2 + lottie: ^3.3.1 + shimmer: ^3.0.0 + slide_to_act: ^2.0.2 + + # Services & Hardware battery_plus: ^7.0.0 - internet_connection_checker: ^3.0.1 connectivity_plus: ^6.1.5 - # pip_view: ^0.9.7 - flutter_map: ^8.2.2 # (استخدم أحدث إصدار دائماً) - - # مكتبة التخزين لتحميل الخرائط أوفلاين - flutter_map_tile_caching: ^10.1.1 # (استخدم أحدث إصدار) - latlong2: ^0.9.1 - socket_io_client: ^1.0.2 + device_info_plus: 11.2.2 + envied: ^1.0.0 + firebase_auth: ^6.3.0 + firebase_core: ^4.6.0 + firebase_messaging: ^16.1.3 flutter_background_service: ^5.1.0 + flutter_contacts: ^1.1.8 + flutter_local_notifications: ^21.0.0 + flutter_overlay_window: ^0.5.0 + flutter_tts: ^4.0.2 + geolocator: ^14.0.2 + google_sign_in: ^7.2.0 + googleapis_auth: ^2.0.0 + image_cropper: ^12.1.1 + image_picker: ^1.0.4 + internet_connection_checker: ^3.0.1 + jailbreak_root_detection: ^1.1.5 + just_audio: ^0.10.5 + live_activities: ^2.3.0 + local_auth: ^3.0.1 + location: ^8.0.0 + package_info_plus: ^9.0.1 + permission_handler: ^12.0.1 + quick_actions: ^1.1.0 + record: ^6.2.0 + share_plus: ^12.0.2 + sign_in_with_apple: ^7.0.1 + socket_io_client: ^1.0.2 + vibration: ^3.1.8 + video_player: ^2.9.2 + wakelock_plus: + webview_flutter: ^4.9.0 + youtube_player_flutter: ^9.0.4 - # مكتبة لتحديد النقاط على الخريطة (مثل latLng) + # Data & Network + dio: ^5.4.3+1 + encrypt: ^5.0.3 + flutter_image_compress: ^2.3.0 + flutter_paypal: ^0.2.0 + flutter_secure_storage: ^10.0.0 + flutter_stripe: ^12.4.0 + flutter_web_browser: ^0.17.3 + http: ^1.2.2 + intl: ^0.20.2 + jwt_decoder: ^2.0.1 + path: ^1.8.3 + sqflite: ^2.3.0 dev_dependencies: flutter_test: @@ -162,3 +138,5 @@ flutter: - asset: assets/fonts/digit.ttf dependency_overrides: record_platform_interface: "1.2.0" + get: + path: ../Intaleq/packages/get diff --git a/scratch/extract_keys.py b/scratch/extract_keys.py new file mode 100644 index 0000000..8230de4 --- /dev/null +++ b/scratch/extract_keys.py @@ -0,0 +1,41 @@ +import os +import re + +# Regex for .tr keys: matches 'string'.tr or "string".tr +tr_pattern = re.compile(r'[\'"]([^\'"]+)[\'"]\.tr') + +# Regex for Text widgets or other common UI strings that might be hardcoded +# This is a bit broad, but helps find things like Text("Hello") +text_pattern = re.compile(r'Text\(\s*[\'"]([^\'"]+)[\'"]') + +keys = set() + +def scan_file(filepath): + try: + with open(filepath, 'r', encoding='utf-8') as f: + content = f.read() + # Find all .tr usages + for match in tr_pattern.finditer(content): + keys.add(match.group(1)) + + # Find potential hardcoded strings in Text widgets + # (We only care about those NOT already using .tr) + # This is just for my manual review to see if I missed any + # for match in text_pattern.finditer(content): + # keys.add(match.group(1)) + except Exception as e: + pass + +def main(): + root_dir = 'lib' + for root, dirs, files in os.walk(root_dir): + for file in files: + if file.endswith('.dart'): + scan_file(os.path.join(root, file)) + + # Print all found keys + for key in sorted(keys): + print(key) + +if __name__ == "__main__": + main() diff --git a/scratch/fix_translations_syntax.py b/scratch/fix_translations_syntax.py new file mode 100644 index 0000000..84d3889 --- /dev/null +++ b/scratch/fix_translations_syntax.py @@ -0,0 +1,82 @@ +import re + +filepath = 'lib/controller/local/translations.dart' + +with open(filepath, 'r', encoding='utf-8') as f: + lines = f.readlines() + +new_lines = [] +seen_keys_en = set() +seen_keys_ar = set() +in_en = False +in_ar = False + +for line in lines: + if '"en": {' in line: + in_en = True + in_ar = False + new_lines.append(line) + continue + if '"ar": {' in line: + in_en = False + in_ar = True + new_lines.append(line) + continue + if '};' in line or ' }' in line: + if in_en or in_ar: + if ' }' in line: + in_en = False + in_ar = False + new_lines.append(line) + continue + + # Try to extract key and value using a more careful approach + # Looking for: "key": "value", + # We find the first " and the last " and the middle separator ": " + stripped = line.strip() + if stripped.startswith('"') and (stripped.endswith('",') or stripped.endswith('"')): + # Split by ": " but only once + try: + # We need to find the ": " that separates key and value + # Since keys and values can contain ": ", we look for the one surrounded by quotes + # A common pattern is "...": "..." + parts = re.split(r'":\s+"', stripped) + if len(parts) >= 2: + # Key is from index 1 to second-to-last char of first part + key = parts[0][1:] + # Value is from index 0 to last char (excluding optional comma and final quote) + val_part = parts[1] + if val_part.endswith(','): + val = val_part[:-2] + comma = ',' + else: + val = val_part[:-1] + comma = '' + + # FIX 1: Trailing backslashes + if key.endswith('\\') and not key.endswith('\\\\'): + key += '\\' + if val.endswith('\\') and not val.endswith('\\\\'): + val += '\\' + + # FIX 2: Unescaped dollar signs + key = re.sub(r'(?()); }); - test('getPlatformVersion', () async { - TripOverlayPlugin tripOverlayPlugin = TripOverlayPlugin(); - MockTripOverlayPluginPlatform fakePlatform = MockTripOverlayPluginPlatform(); - TripOverlayPluginPlatform.instance = fakePlatform; - expect(await tripOverlayPlugin.getPlatformVersion(), '42'); - }); } diff --git a/windows/flutter/generated_plugin_registrant.cc b/windows/flutter/generated_plugin_registrant.cc index 4ce4e40..c693221 100644 --- a/windows/flutter/generated_plugin_registrant.cc +++ b/windows/flutter/generated_plugin_registrant.cc @@ -16,7 +16,6 @@ #include #include #include -#include #include #include #include @@ -43,8 +42,6 @@ void RegisterPlugins(flutter::PluginRegistry* registry) { registry->GetRegistrarForPlugin("GeolocatorWindows")); LocalAuthPluginRegisterWithRegistrar( registry->GetRegistrarForPlugin("LocalAuthPlugin")); - ObjectboxFlutterLibsPluginRegisterWithRegistrar( - registry->GetRegistrarForPlugin("ObjectboxFlutterLibsPlugin")); PermissionHandlerWindowsPluginRegisterWithRegistrar( registry->GetRegistrarForPlugin("PermissionHandlerWindowsPlugin")); RecordWindowsPluginCApiRegisterWithRegistrar( diff --git a/windows/flutter/generated_plugins.cmake b/windows/flutter/generated_plugins.cmake index cae614c..457a134 100644 --- a/windows/flutter/generated_plugins.cmake +++ b/windows/flutter/generated_plugins.cmake @@ -13,7 +13,6 @@ list(APPEND FLUTTER_PLUGIN_LIST flutter_tts geolocator_windows local_auth_windows - objectbox_flutter_libs permission_handler_windows record_windows share_plus