Author SHA1 Message Date
Hamza-Ayed 4620e84d34 Update: 2026-08-02 17:52:28 2026-08-02 17:52:28 +03:00
Hamza-Ayed b78a6797d5 Fix table name click to cliq in all files 2026-08-01 04:31:53 +03:00
Hamza-Ayed 811b23ca9e Fix JSON payload parsing in payment server 2026-08-01 04:23:30 +03:00
Hamza-Ayed 915d517ba7 Port all fixes from IntaleqApp (Wallet, CLIQ, OTP, Docker) 2026-08-01 03:58:37 +03:00
Hamza-Ayed 12fc64dc9a Update: 2026-08-01 02:06:59 2026-08-01 02:06:59 +03:00
Hamza-Ayed 46e74330a1 Update: 2026-08-01 01:46:21 2026-08-01 01:46:21 +03:00
Hamza-Ayed 410fb14d77 Update: 2026-07-31 19:21:38 2026-07-31 19:21:38 +03:00
Hamza-Ayed cf3fea3834 Update: 2026-07-31 19:18:42 2026-07-31 19:18:43 +03:00
Hamza-Ayed 0452c36379 Update: 2026-07-31 19:14:05 2026-07-31 19:14:05 +03:00
Hamza-Ayed 7362f1ce96 Update: 2026-07-31 03:58:40 2026-07-31 03:58:40 +03:00
Hamza-Ayed 8d67530b44 Update: 2026-07-31 03:06:59 2026-07-31 03:06:59 +03:00
Hamza-Ayed f94a9478ac Update: 2026-07-31 03:00:06 2026-07-31 03:00:06 +03:00
Hamza-Ayed 7a576b7327 Update: 2026-07-30 12:31:26 2026-07-30 12:31:27 +03:00
Hamza-AyedandClaude Opus 5 ecfe756849 fix(bots): توجيه السوشال بوت لنقطة النهاية الصحيحة — التعليق العضوي كان ميتاً
السبب الجذري: BASE_URL واحد يشير إلى marketing_engine/index.php، بينما
`process_organic_post` و`log` موجودان في social_worker.php وحده. فكانا
يقعان على `default` فيعود {"status":"error"} بكود HTTP 200 — بلا استثناء
ولا سجل. أثره: processOrganicPost يعود null فيفشل شرط generated_comment في
FacebookBotService:137 → لا تعليق عضوي يُنشر أبداً، وكل logMessage يُبتلع
صامتاً فلم يظهر العطل في أي سجل. (تعليق العميل سطر 10 كان يذكر
social_worker.php أصلاً — الرابط هو ما خالف النية.)

- توجيه لكل أمر حسب موضعه: index.php لـ get_task/complete_task/fail_task/
  evaluate_posts · social_worker.php لـ process_organic_post/log
- evaluate_posts: index.php يرد بلا حقل `data`، والعميل كان يشترطه فيعود
  null في كل نجاح. النجاح صار يُقاس بـ status
- ترميز URL لكل المعاملات: رسالة خطأ فيها & أو # كانت تشقّ جسم
  x-www-form-urlencoded وتفسد صفّ المهمة
- كل رد غير 200 أو status != success يُسجَّل في Logcat بدل الصمت
- المضيف إلى BuildConfig.BACKEND_HOST في البوتين (gradle) — لا نطاق مشفّر
  في الكود، فتبديله لأي علامة أخرى سطر واحد
- val لا const val لقيم BuildConfig (ليست ثوابت وقت ترجمة في كوتلن)

لم يُبنَ بعد. لم يُمسّ أي PHP: الباك إند حيّ.
ما زال مفتوحاً بقرار المالك: (1) فحص X-Bot-Token معطَّل بتعليق في
social_worker.php:14 و index.php:17 والتوكن placeholder → النقطتان
مفتوحتان؛ (2) طابور social_tasks الذي يغذّيه schedule_manager بلا مستهلك.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-27 05:06:08 +03:00
Hamza-Ayed 4d2beaae5e chore: update Flutter SDK paths and project dependencies across packages 2026-07-27 04:56:25 +03:00
Hamza-AyedandClaude Opus 5 b84e26fe9a تسجيل نتيجة send_fcm.php — مسار الرسائل كان صندوقاً أسود بالكامل
send_fcm.php هي نقطة كل الرسائل والمكالمات بين الراكب والسائق (التطبيقان
يستدعيانها مباشرة)، ولم تكن تحتوي أي error_log إطلاقاً — بخلاف FcmService
التي تطبع [FCM_DEBUG] وتخدم دورة حياة الرحلة فقط.

النتيجة أن فشل الرسائل كان غير قابل للتشخيص: لا سبب، ولا رد Google، ولا
حتى معرفة إن كان الطلب وصل. وقد وعدت المستخدم بقراءة [FCM_DEBUG] لهذا
المسار وهو وعد خاطئ — لا وجود له هنا.

أُضيفت ثلاث نقاط:
- نتيجة الإرسال: category + طرف من التوكن + http + طول التوكن + رد Google
  عند الفشل. طول التوكن مقصود: توكن FCM الحقيقي ~163 محرفاً، والمشفّر في
  جدول tokens 216 — فيُكشف أي blob مشفّر من سطر واحد.
- رفض 403: التطبيقان لا يرسلان x-api-key، فلحظة ضبط FCM_INTERNAL_API_KEY
  تموت كل الرسائل بينهما بصمت. الآن يُسجَّل السبب صريحاً.
- رفض 400 على target فارغ: يعني أن المُرسِل لا يملك توكن الطرف الآخر
  (tokenPassenger أو driverToken لم يصله في حمولة القبول).

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-27 01:35:01 +03:00
Hamza-AyedandClaude Opus 5 77c0b48ec2 إعادة تفعيل access_log في nginx — كان مطفأً فأفسد كل تشخيص
docker/nginx/default.conf:13 كان فيه:
    access_log off;   # أثناء اختبار الضغط؛ فعّله عند الحاجة
مُطفأً من اختبار ضغط قديم ونُسي.

أثره أن أي بحث في سجلّ الوصول يرجع صفراً دائماً:
    docker compose logs nginx | grep -c "send_fcm"   →  0
فيبدو الاستنتاج أن التطبيق لا يستدعي المسار إطلاقاً، والحقيقة أن السجلّ
فارغ لا أن الطلبات غائبة. استنتاج خاطئ تماماً بُني على قياس معطّل.

مع توجيه error_log في www-pool.conf (الالتزام e106d2df) تكتمل الرؤية:
nginx يقول هل وصل الطلب، وPHP يقول ماذا ردّ Google.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-27 01:31:56 +03:00
Hamza-AyedandClaude Opus 5 e106d2df4e توجيه error_log لمخرج الحاوية — كنا نشخّص الأعطال عمياناً
www-pool.conf كان يوجّه slowlog إلى /proc/self/fd/2 لكن لا شيء لـ error_log،
فكل رسائل error_log() في الباك إند تُبتلع ولا يظهر أي سطر في:
    docker compose logs php

والباك إند مليء بها ويعتمد عليها في التشخيص: [accept_ride] و [FCM_DEBUG]
(يطبع حمولة FCM ورد Google كاملاً) و 📲 [FCM_RESULT] و [SOCKET_DEBUG] و
[SSRF_BLOCKED] و [SOCKET_BLOCKED].

النتيجة العملية أن سبب فشل الإشعارات كان يمكن قراءته في سطر واحد من رد
Google (UNREGISTERED / INVALID_ARGUMENT / 403) بدل الاستنتاج من الكود.

catch_workers_output=yes ينقل stdout/stderr للعمّال، و decorate_workers_output=no
يمنع بادئات الضجيج، وphp_admin_value[error_log] يثبّت المسار على fd/2.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-27 01:30:03 +03:00
Hamza-AyedandClaude Opus 5 899a18b52d حرس السوكيتات المكرّرة للسائق — سبب «notified 0/0» وتحذيرات null
في لوج الإنتاج ثلاثة اتصالات متزامنة للسائق نفسه (التطبيق يفتح سوكيتاً من
location_controller وآخر من background_service ومحاولات لم تُنظَّف):
    ✅ Driver Connected: #243ea… (×3)

ومعالج disconnect كان ينفّذ unset($connectedDrivers[$driverId]) بلا تحقّق من
أيّ سوكيت أُغلق. فإغلاق نسخة واحدة كان يُطفئ السائق فعلياً وهو متصل:

1) dispatch_order يراه offline فيضع الطلب في طابور الانتظار بدل إرساله،
   ويظهر في اللوج:  🚫 Ride #2569 cancelled — notified 0/0 driver(s).
2) update_location من سوكيت ما زال حياً يجد $driverState[$driverId] محذوفاً،
   و &$driverState[...] يُنشئ مدخلاً null فتُقرأ منه كل الحسابات:
     Warning: Trying to access array offset on value of type null (860-872)
     Warning: Undefined array key "status" (907)

الإصلاحان:
- نحفظ sid (معرّف السوكيت) مع السجلّ، ولا ننظّف في disconnect إلا إذا كان
  المُغلَق هو المسجَّل حالياً؛ وإلا نتركه ونسجّل «stale duplicate».
- حرس على $driverState في update_location: يُعاد بناؤه إن غاب لأي سبب
  (إغلاق نسخة أخرى، إعادة تشغيل) بدل القراءة من null.

سيرفر فقط — لا يحتاج بناء التطبيقات. يبقى فتح التطبيق لعدة سوكيتات هدراً
في الحركة يستحق إصلاحاً في الطرف الآخر لاحقاً.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-27 01:26:20 +03:00
Hamza-AyedandClaude Opus 5 e6504acdea إرسال platform في مصافحة سوكيت السائق — كباتن iOS كانوا يفوتهم الطلب
driver_socket.php عند توزيع الطلب (dispatch_order) يرسل إشعار FCM احتياطياً
**فقط** إذا كانت المنصّة ios، لأن iOS يخنق أحداث السوكيت في الخلفية:

    $platform = $connectedDrivers[$driverId]['platform'] ?? 'android';
    if ($platform === 'ios' && !empty($token)) { sendFCM_Async(...) }

وتطبيق السائق لم يكن يرسل platform في الـ query إطلاقاً، فالافتراضي
'android' — أي أن كابتن الآيفون لا يستلم الإشعار الاحتياطي ويفوته الطلب وهو
في الخلفية، ويعتمد على السوكيت وحده وهو مخنوق أصلاً.

ظهر بالعين في لوج الإنتاج على جهاز آيفون:
    ✅ Driver Connected: #243ea897954387c9 (android)

أُضيف الحقل في موضعي الاتصال: location_controller و background_service.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-27 01:20:52 +03:00
Hamza-AyedandClaude Opus 5 ef1240b130 تصحيح مفتاح Redis لموقع السائق: driver:location ← driver:public
الموضعان كانا يقرآن مفتاحاً لا يُكتب في أي مكان في المشروع:
  $redisLocation->hGetAll("driver:location:$driverId")

الكاتب الفعلي هو معالج الدفعات في loction_server/driver_socket.php، وهو
يكتب hmset على driver:profile:{id} و driver:public:{id} معاً بنفس الحقول
(lat/lng/heading/speed/status/updated_at). و driver:public له TTL 86400
بينما driver:profile له 900 فقط، فالعام هو الأنسب للقراءة.

الأثر: كانت حمولة القبول تصل الراكب بلا إحداثيات أولية للسائق، فلا يظهر
الماركر إلا بعد أول تحديث موقع من السوكيت أو الـ polling.

أحد الموضعين ملف getRideOrderID.php الذي أضفته في f66db7db — نسخت النمط
من acceptRide.php فنقلت الخطأ معه.

مثبَّت على الإنتاج: redis-cli --scan --pattern 'driver:*' أرجع
driver:public:<id> فقط، ولا شيء باسم driver:location.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-27 01:14:26 +03:00
Hamza-AyedandClaude Opus 5 0e6dd68385 حذف http2 من إعداد سوكيتات TLS — nginx المضيف أقدم من 1.25.1
nginx على السيرفر يرفض التحميل:
  nginx: [emerg] unknown directive "http2" in siro-sockets-tls.conf:30

التوجيه http2 on; لم يُضَف إلا في nginx 1.25.1. والحذف هو الصحيح لا مجرد
حلٍّ سريع: ترقية WebSocket تعتمد على ترويسة Upgrade في HTTP/1.1 ولا معنى
لها في HTTP/2 أصلاً (وproxy_http_version 1.1 مضبوط في الـ location).

تحذير تشغيلي: بعد up --force-recreate انتقلت الحاويتان إلى 127.0.0.1:12020
و13030، فإن فشل nginx -t يبقى المنفذان 2020/3030 بلا أي مستمع (Connection
refused) حتى ينجح reload. رتّب النشر: صحّح الإعداد ⇒ nginx -t ⇒ reload.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-27 01:04:32 +03:00
Hamza-AyedandClaude Opus 5 afb5189515 إنهاء TLS أمام سوكيتات Workerman — إصلاح Socket Connect Error: timeout
السبب (مثبَّت على الإنتاج): التزام c35b350b بتاريخ 2026-07-23 — وهو التزام
تلقائي برسالة "Update: <time>" — أضاف المنفذ للروابط:
  -  'https://jordan-siro.intaleqapp.com'
  +  'https://jordan-siro.intaleqapp.com:2020'
وكانت القيمة العاملة قبل ذلك بلا منفذ (443) فيُنهي البروكسي TLS ويمرّر.

بإضافة :2020 صار التطبيق يضرب حاوية Workerman مباشرة، وهي تفتح المنفذ نصاً
صريحاً (new SocketIO(2020) بلا سياق SSL)، فمصافحة TLS تتجمّد حتى المهلة:
  ❌ Socket Connect Error: timeout
  ❌ Socket Connect Timeout: 20000
ونتيجته أن السائق لا يبعث update_location إطلاقاً ⇒ لا GPS في Redis ⇒ لا
موقع للراكب لا عبر السوكيت ولا عبر الـ polling (كلاهما يقرأ من نفس المصدر).

مثبَّت بالأدلة على السيرفر:
- ss: المنفذان 2020/3030 يملكهما docker-proxy (نص صريح)، و443 nginx.
- curl على 127.0.0.1:2020 يرد {"sid":...,"upgrades":["websocket"]} — أي أن
  الحاوية سليمة تماماً والناقص هو طبقة TLS وحدها.

الحل بلا أي بناء للتطبيقات (وبلا تنزيل مستوى الأمان — الـ JWT يُرسَل في
query string فلا يجوز إطلاقاً تحويله إلى http):
- الحاويتان تُنشران على 127.0.0.1:12020 و 127.0.0.1:13030 فقط.
- nginx على المضيف يستمع على 2020/3030 بشهادة الدومين ويمرّر إليهما مع
  ترقية WebSocket (nginx/siro-sockets-tls.conf).
- proxy_read/send_timeout 3600s: اتصال السائق يعيش ساعات، وبلا ذلك يقطعه
  nginx كل 60ث فتدخل الحاوية حلقة إعادة اتصال دائمة.
- proxy_buffering off و access_log off (نبضات GPS تُغرق القرص).

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-27 01:01:42 +03:00
Hamza-AyedandClaude Opus 5 6fec88251c إصلاح أخطاء شاشة الكباتن من تحديث الذكاء الاصطناعي
استرجاع شبكة أمان موقع السائق (انحدارة من الالتزام ab3be7e2):
- كان شرط "Smart Mode" يتخطّى _startDriverLocationPollingWithTimer كلياً إذا
  جاء القبول من السوكيت. قبل إصلاح ترتيب الاتصال كان السوكيت يخسر دائماً
  فالـ polling يعمل ويحمل الموقع؛ وبعد أن صار يفوز تعطّلت شبكة الأمان.
- وصول حدث القبول لا يعني أن تدفّق المواقع يعمل: التدفّق له شرط مستقل —
  تطبيق السائق يحقن passenger_id في update_location فقط إذا كان rideStatus
  نشطاً و BoxName.passengerID مكتوباً، وهو لا يُكتب إلا بعد فتح صفحة خريطة
  السائق (map_driver_controller.dart:2444).
- الآن الـ polling يعمل دائماً، و handleDriverLocationUpdate يوقفه تلقائياً
  بعد 3 تحديثات ناجحة من السوكيت — وهذا المنطق كان موجوداً أصلاً وهو التصميم
  المقصود. السوكيت يبقى المسار السريع بلا فقدان شبكة الأمان.

عدم تعطيل إنشاء الرحلة بانتظار سوكيت غير قابل للوصول:
- ensureConnectedBeforeRide كانت تنتظر 4 ثوانٍ قبل كل طلب. سوكيتات
  Workerman تستمع نصّاً صريحاً على 2020/3030 بينما التطبيقان يستخدمان
  https:// عليها (nginx لا يمرّرها — انظر docker/nginx/default.conf)، فمصافحة
  TLS ضد منفذ غير TLS تتجمّد حتى المهلة ⇒ 4 ثوانٍ مهدورة في كل رحلة.
- المهلة صارت 2ث، وأُضيف cooldown دقيقتين: بعد فشل قريب لا ننتظر إطلاقاً بل
  نحاول الاتصال في الخلفية ونكمل الطلب فوراً.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-27 00:51:18 +03:00
Hamza-Ayed b76eccb763 إصلاح أخطاء شاشة الكباتن من تحديث الذكاء الاصطناعي 2026-07-27 00:25:02 +03:00
Hamza-AyedandClaude Opus 5 a26472ed9f إصلاح مسار الإشعار→الطلب عند الكابتن + توحيد إعادة اتصال سوكيت الراكب
سوكيت الراكب:
- setReconnectionAttempts: من 20 إلى لا نهائي، توحيداً مع تطبيق السائق. بعد
  20 محاولة كان يستسلم **نهائياً** فيصمت للأبد بعد دقائق من شبكة سيئة ويبقى
  الراكب على الـ polling بلا أن يدري — وخطره أكبر الآن لأن الاتصال صار يعيش
  من فتح الخريطة لا من إنشاء الرحلة.
- الـ heartbeat من 15ث إلى 30ث: Socket.IO يعمل ping/pong على مستوى
  البروتوكول ومستمع 'heartbeat' في passenger_socket.php فارغ أصلاً.

البدء البارد على iOS (سبب "التطبيق يغلق ونرجع من أول"):
- didChangeAppLifecycleState لا يُنفَّذ عند إطلاق التطبيق (يبدأ في resumed
  بلا انتقال حالة)، وهو المُنادي الوحيد لـ _checkPendingTrip ⇒ الضغط على
  الإشعار والتطبيق مقتول لا يوجّه لصفحة الطلب إطلاقاً.
- وحتى لو نُفِّذ، كان يستسلم على '/' ويحوّل المسؤولية لـ
  HomeCaptainController الذي لا يملك أي منطق كهذا ⇒ الطلب يبقى في التخزين
  للأبد. صار addPostFrameCallback + مُجدوِل يعيد المحاولة حتى خروج التطبيق
  من شاشة البداية (سقف ~30ث)، ولا يحذف الطلب قبل التوجيه.
- حرس إضافي: لا اقتحام لرحلة نشطة بطلب قديم، لا توجيه مكرر إذا كنا على
  OrderRequestPage، وتنظيف الحمولة التالفة.

TripOverlayPlugin أندرويد فقط بلا أي حرس منصّة:
- كل دالة كانت تنادي invokeMethod مباشرة ⇒ MissingPluginException على iOS
  (لا يوجد ios/ ولا مدخل في pubspec.plugin.platforms).
- الأخطر: backgroundMessageHandler كان ينادي showOverlay **قبل** حفظ
  pending_driver_list، فيسقط الاستثناء ويُلغي الحفظ كلياً على iOS. عُكس
  الترتيب — الحفظ أولاً دائماً، وهو الحدّ الأدنى الذي لا يتوقف على منصّة أو
  صلاحية.
- أُضيف isSupported وحُصِّنت كل الدوال (ترجع false/no-op ولا ترمي أبداً)،
  فلا يُقطع أيضاً _initApp قبل _listenToOverlayEvents.

أخطاء index في حمولة add_ride.php (أربع نقاط قبول):
- 'Duration' كان index 4 وهو end_lng لا المدة ⇒ صار 15 (duration_text).
  أحد المواضع كان فيه تعليق "انتبه: تأكد من الإندكس الصحيح للوقت".
- 'passengerWalletBurc' كان 26 وهو price_for_driver (أرباح السائق) لا رصيد
  الراكب ⇒ صار 27 (passenger_wallet).
- الموضعان مكرران في main.dart و local_notification.dart و order_over_lay.dart
  و order_request_controller.dart — وُحِّدت كلها.
- حرس الطول في backgroundMessageHandler: كان length > 29 مع قراءة index 30
  ⇒ RangeError على قائمة طولها 30 بالضبط.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-27 00:07:27 +03:00
Hamza-AyedandClaude Opus 5 ab3be7e2e3 وصل سوكيت الراكب قبل إنشاء الرحلة — ليسبق FCM والـ polling
كان السوكيت مضموناً أن يخسر السباق الأول بنيوياً. ترتيب
startSearchingForDriver كان:
  ① await postRideDetailsToServer()  → add_ride.php يوزّع الطلب على الكباتن فوراً
  ② _addRideToWaitingTable()          (بلا await)
  ③ initConnectionWithSocket()        ← السوكيت يبدأ الاتصال الآن فقط

بين ① و③ نافذة = ذهاب/عودة HTTP + مصافحة WebSocket + قراءة الـ JWT، ثانية
إلى ثلاث (أسوأ على 3G). وغرف Socket.IO لا تخزّن الأحداث: لو قبل كابتن داخل
تلك النافذة فإن $io->to('passenger_X')->emit() يُرمى نهائياً لأن الغرفة
فارغة — لا طابور ولا إعادة إرسال. وكابتن ينظر لقائمة السوق يقبل في أقل من
ثانية، فالنافذة مُرجَّحة لا نادرة.

هذا يفسّر لماذا كان الـ 404 على getRideOrderID.php قاتلاً: السوكيت يخسر،
والـ FCM يصل بعد أن ضبط الـ polling _isAcceptanceProcessed=true فيُرفض،
والشبكة الاحتياطية الوحيدة مكسورة.

ترتيب السيرفر كان صحيحاً أصلاً (acceptRide.php ينادي
notifyPassengerOnRideServer قبل sendFCM_Internal) — المشكلة أن المستقبِل
لم يكن موجوداً بعد.

التغييرات:
- ensureConnectedBeforeRide(): يوصل وينتظر الانضمام للغرفة بسقف 4 ثوانٍ،
  ولا يُفشل إنشاء الرحلة عند انتهاء المهلة (نكمل ونتّكل على FCM/polling).
- startSearchingForDriver ينتظرها قبل postRideDetailsToServer.
- وصل السوكيت في initializeDataAfterLogin (عند فتح الخريطة) فيصير الانتظار
  صفراً عملياً في الحالة الطبيعية.
- _isConnecting يغطّي نافذة الـ await على الـ JWT حتى لا يفتح النداءان
  المتزامنان سوكيتين، وحرس على passengerID الفارغ.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-26 16:26:23 +03:00
Hamza-AyedandClaude Opus 5 f66db7db42 إضافة getRideOrderID.php المفقود — المسار الاحتياطي لبيانات السائق
تطبيق الراكب يطلب /ride/rides/getRideOrderID.php منذ البداية، والموجود على
السيرفر getRideOrderIDNew.php فقط ⇒ 404 صامت في getUpdatedRideForDriverApply.

هذا يفسّر عرضين ظنّاهما منفصلين:
- الـ polling يسبق الـ FCM فيضبط _isAcceptanceProcessed=true ثم يأخذ 404،
  فيُرفض بعدها payload الـ FCM الذي يحمل driver_info كاملاً
  ("Already processed") ⇒ الرحلة مقبولة بلا معلومات سائق.
- ولأن driverToken يبقى فارغاً، ترد send_fcm.php بـ 400 Missing: target
  ⇒ رسائل الراكب للسائق لا تُرسَل إطلاقاً. (الاتجاه المعاكس كان يعمل بعد
  إصلاح getRideWaiting.php — نفس خطأ التشفير معكوساً.)

getRideOrderIDNew.php لا يصلح بديلاً: داخلي عبر get_connect.php →
validateInternalKey فلا يستطيع التطبيق مناداته، ولا يرجع
ratingCount/completedRides/driverTier.

النقطة الجديدة:
- connect.php (JWT)، والراكب من الـ JWT فقط لا من الطلب (حماية IDOR).
- نفس استعلام acceptRide.php وشكل رده حرفياً حتى يقرأه
  _fillDriverDataLocally بنفس المفاتيح.
- فك تشفير driverToken.token — بلا ذلك يصل التطبيق blob يستخدمه كـ FCM
  target فيرفضه FCM بـ 400.
- تفادي تصادم المفاتيح: getUpdatedRideForDriverApply يقرأ
  passengerName + last_name كاسم الراكب، فلقب السائق نُقل إلى
  driver_last_name واسم الراكب الحقيقي يُرجَّع في مكانه.
- ride DB هو المرجع مع fallback على primary، ورحلة بلا سائق ترد success
  لا failure.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-26 16:18:02 +03:00
Hamza-AyedandClaude Opus 5 143146c1b4 إصلاح سوكيت الراكب وتوحيد مسارات الإشعارات
سوكيت الراكب (سبب عدم ظهور معلومات السائق عند القبول):
- تطبيق الراكب كان يرسل id فقط بلا jwt، و passenger_socket.php يرفض أي
  اتصال بلا jwt ⇒ الراكب لا ينضم لغرفته أبداً ولا يستلم ride_status_change
  ولا driver_location_update. تظهر حالة القبول عبر الـ polling فقط بينما
  driver_info يصل بالسوكيت وحده. (سوكيت السائق يعتبر الـ jwt اختيارياً،
  ومن هنا جاء التباين بين التطبيقين.)
- cancelled_by_driver كان يسقط من switch حالات الراكب فيبقى معلّقاً بعد
  إلغاء السائق.
- حماية socket (late) من القراءة قبل التهيئة عند الانسحاب بلا jwt.

الإشعارات والرسائل (سبب "مرات توصل ومرات لا"):
- جدول tokens يخزّن توكن الراكب مشفّراً، و getRideWaiting.php كان يرجعه
  بلا فك تشفير ⇒ من يقبل من قائمة السوق يحمل blob مشفّراً يستخدمه كـ FCM
  target فيرفضه FCM بـ 400: لا إشعار قبول ولا رسائل. ومن يقبل من الـ
  dispatch/FCM يحمل نصاً صريحاً فتعمل. الفرق كان في طريقة القبول.
- acceptRide.php يحلّ التوكن من القاعدة دائماً ولا يثق بالعميل (أصحّ أمنياً).
- market_new_ride كان لا يحمل passengerId ولا الإحداثيات فتصل "null"؛
  أُضيفت بلا أي PII لأن الحمولة تُبَثّ لكل سائق قريب لا للفائز فقط.
- send_fcm.php: مهلة على OAuth (كان يعلّق حتى مهلة PHP فتُسقط الرسالة
  بصمت)، توحيد ding→default لأندرويد، وحقن title/body/tone في data
  مطابقةً لـ FcmService.
- تطبيق السائق يقرأ title/body من data أولاً مثل الراكب، ولا يعرض فقاعة
  فارغة للرسائل الصامتة.

السوكيت والإعدادات:
- forwardLocationToPassengerSocket كان يقرأ lat/lng والحمولة فيها
  latitude/longitude ⇒ المسافة تخرج ضخمة والـ throttle معطّل تماماً
  فيُعاد التوجيه مع كل نبضة GPS.
- notifyPassengerOnRideServer كان يرجع null بصمت مطلق عند حجب العنوان.
- العنوان الافتراضي لسيرفر الموقع كان nginx/loction_server/driver_socket.php
  وهو ديمون Workerman لا يُخدَم عبر nginx ⇒ صار socket_driver:2021.
  (LOCATION_API_URL بقي على nginx لأن api_get_nearby.php سكربت عادي.)
- ride_server/passenger_socket.php (النسخة التي يشغّلها Docker) كانت ناقصة
  كل كود مواصلاتي الموجود في passenger_server/ ⇒ نُقل مع REDIS_HOST.
- .env.example: ALLOWED_SOCKET_URLS يغطّي أسماء حاويات Docker، وإضافة
  PASSENGER_SOCKET_INTERNAL_URL.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-26 15:47:23 +03:00
Hamza-Ayed e269cb9b70 إصلاح أخطاء شاشة الكباتن من تحديث الذكاء الاصطناعي 2026-07-26 13:44:07 +03:00
Hamza-Ayed 330dfc6dba إصلاح أخطاء شاشة الكباتن من تحديث الذكاء الاصطناعي 2026-07-26 13:15:45 +03:00
Hamza-Ayed 4b5235c35c إصلاح أخطاء شاشة الكباتن من تحديث الذكاء الاصطناعي 2026-07-26 12:18:23 +03:00
Hamza-Ayed 16feb51a75 إصلاح توافق فلاتر مع Theme الجديد 2026-07-26 11:36:26 +03:00
Hamza-Ayed 3af99cc18a إصلاح توافق فلاتر مع Theme الجديد 2026-07-26 11:33:20 +03:00
Hamza-Ayed 7830efead7 إصلاح توافق فلاتر مع Theme الجديد 2026-07-26 04:28:09 +03:00
Hamza-Ayed ca6cb7a3fe تصميم عالمي جديد، وإصلاح الخرائط ومراقب السيرفرات 2026-07-26 04:21:42 +03:00
Hamza-Ayed f325ffce42 تصميم عالمي جديد، وإصلاح الخرائط ومراقب السيرفرات 2026-07-26 04:02:10 +03:00
Hamza-Ayed c43f801542 إصلاح الشاشة البيضاء ومسار base-href 2026-07-26 03:26:15 +03:00
Hamza-Ayed 2bacb1b9e1 تحديث شامل للوحة التحكم وإضافة كافة الميزات للـ WebSidebar 2026-07-26 03:22:47 +03:00
Hamza-Ayed 5ec54c03f5 تحديث شامل للوحة التحكم وإضافة كافة الميزات للـ WebSidebar 2026-07-26 02:58:59 +03:00
Hamza-Ayed a954f49307 Update: 2026-07-26 02:51:53 2026-07-26 02:51:54 +03:00
Hamza-Ayed 91fe0f78f7 Update: 2026-07-26 01:29:57 2026-07-26 01:29:57 +03:00
Hamza-Ayed 5f5b68a8cd Update: 2026-07-26 01:27:56 2026-07-26 01:27:56 +03:00
Hamza-Ayed 1664743ef9 Update: 2026-07-26 01:11:28 2026-07-26 01:11:28 +03:00
Hamza-Ayed 1dfc302a4f Update: 2026-07-26 01:03:40 2026-07-26 01:03:41 +03:00
Hamza-Ayed 76c8652bf0 Update: 2026-07-25 20:18:18 2026-07-25 20:18:18 +03:00
Hamza-AyedandClaude Opus 5 a095472f39 تتبّع composer.lock ومنع تكرار انهيار خادم الدفع
vendor/ و composer.lock كانا مستثنيين في .gitignore، فلم يصل أيٌّ منهما
إلى السيرفر. النتيجة أن realpath() في payment_server/v2/main/connect.php:3
ترجع false وينهار كل مسار /v2/main/ بـ Fatal error.

- إزالة قاعدتَي composer.lock من .gitignore (vendor/ يبقى مستثنى)
- الالتزام بملفات القفل لـ payment_server/v2 و ride_server و loction_server
- ترقية firebase/php-jwt في payment_server/v2 من ^6.11 إلى ^7.0 (v7.1.0)
  لأن 6.11.x محجوب بتحذير أمني PKSA-y2cr-5h3j-g3ys — لا تغيير في الشيفرة،
  الاستخدام محصور في JWT::encode/decode و Key وأصناف الاستثناءات
- تثبيت platform.php=8.2 ليطابق القفل صورة الحاوية لا PHP المحلي

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-25 20:11:59 +03:00
Hamza-Ayed c8a9e98ff5 Update: 2026-07-25 20:09:31 2026-07-25 20:09:31 +03:00
Hamza-Ayed e03b9c30d5 Update: 2026-07-25 18:43:44 2026-07-25 18:43:44 +03:00
Hamza-Ayed 20ea9aa12c Update: 2026-07-25 18:42:18 2026-07-25 18:42:18 +03:00
Hamza-Ayed 8d3e63d1c7 Update: 2026-07-25 18:40:38 2026-07-25 18:40:38 +03:00
Hamza-Ayed 4bbc687c15 Update: 2026-07-25 18:28:30 2026-07-25 18:28:31 +03:00
Hamza-Ayed 5e103f60f2 Update: 2026-07-25 18:19:51 2026-07-25 18:19:52 +03:00
Hamza-Ayed 27369b8ac1 Update: 2026-07-25 18:05:37 2026-07-25 18:05:37 +03:00
Hamza-AyedandClaude Opus 5 61d6380861 Fix SQL injection and stale status matching in the wallet endpoints
The three endpoints the driver app calls for its wallet built their queries by
interpolating the driver id straight into SQL. Anything the app sent went into
the statement, and these run against the payments database.

They also matched only status = 'Finished'. The current ride pipeline writes
'completed', so a driver's completed rides, pending payouts and weekly
earnings all read as zero regardless of how much they had driven — which is
what the wallet errors in the admin error log are sitting next to.

getAllPayment.php, driverStatistic.php and getCountRide.php now bind the id
and match either spelling. Verified no interpolated identifier remains and
every rewritten condition is balanced.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-25 17:57:52 +03:00
Hamza-AyedandClaude Opus 5 3fb7bc5190 Show the build id, tame long table cells, and add purposeful motion
The build identifier now sits in the sidebar footer. "Is my deploy actually
live?" was only answerable by opening Session & Security, which is the wrong
place for the first question asked after every deploy.

Error-log rows carry stack traces and full URLs. They stretched their row far
past the viewport and pushed the other columns out of view, which is exactly
where the console is least usable. Values over 70 characters truncate and
expand on click.

Motion is limited to two things that mean something: content arriving
(staggered, so a grid resolves instead of snapping), and a fetch being in
flight — the refresh control spins and the status pill pulses, so a section
that legitimately returns nothing still shows that it tried. All of it is
disabled under prefers-reduced-motion.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-25 17:49:48 +03:00
Hamza-Ayed f9110a7d92 Update: 2026-07-25 17:40:28 2026-07-25 17:40:29 +03:00
Hamza-AyedandClaude Opus 5 a0812dbd10 Fix broadcast delivery; make transit organisations manageable
Broadcasts never reached anyone. The internal FCM call defaulted to
127.0.0.1, which inside the php container is the php container itself — the
web server runs in a separate nginx container, reachable by service name on
the Compose network. Every send failed the curl and returned a generic 502.
The default now points at nginx, the URL is overridable via FCM_INTERNAL_URL,
and the error carries the actual reason and target instead of a bare status.

Transit organisations were a read-only count table with nothing to act on.
The module now supports the operations an admin actually needs:
- open an organisation for its counts, routes, recent trips and admins
- create one, including the founding administrator create.php requires
- edit city, contact details, contract status and trial end, with a
  confirmation when the contract changes since suspending cuts off service
- add an administrator, and enable or disable an existing one

Verified end to end against the endpoints' real payload shapes, including
that an incomplete create form is rejected before any request is sent.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-25 17:10:51 +03:00
Hamza-AyedandClaude Opus 5 bc1b0129e8 Fix v2 analytics status matching; give Growth and Analytics real charts
Eight queries across the v2 modules counted only status = 'Finished' and so
reported zero on live data, where the current ride pipeline writes
'completed': realtime revenue for today and yesterday, financial stats,
settlements, driver scorecard, driver ranking, and both revenue queries. All
now match either spelling.

Growth and Advanced Analytics rendered through the generic shape-detecting
renderer, which produced raw tables that said little. Both now have purpose-
built views:

- Growth: totals, 30-day joins, and a two-series daily chart. growth.php only
  returns days that had signups, so the series is expanded to a continuous
  30-day axis with explicit zeros — plotting the returned rows directly would
  hide the gaps and make a quiet month look like steady growth. A caption
  states how many days actually had a signup.
- Analytics: revenue summary tiles, a daily revenue trend, and the captain
  ranking, with a note explaining that platform share is what remains after
  the captain's cut.

Null aggregates render as "—" rather than 0.00, and markers are drawn only on
days with a value so a flat zero line stays readable.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-25 16:55:58 +03:00
Hamza-AyedandClaude Opus 5 2135edcf43 Close the remaining ciphertext joins and a SQL injection in email verification
- Customer-service notes joined to the account by comparing encrypted phone
  columns. Both notes tables now carry phone_key, written when a note is
  saved, and the three joins match on it.
- The email_verifications join was comparing a plaintext column against an
  encrypted one, so it never matched and `verified` was always NULL in both
  passenger and driver sign-in. It is now resolved in PHP against the
  decrypted address, which fixes a pre-existing bug rather than only
  preparing for GCM.
- auth/sendVerifyEmail.php built all three of its statements by interpolating
  the request values into SQL. Any caller could inject through the email or
  token field. Now parameterised.
- serviceapp/register.php duplicate detection consults the users indexes and
  writes them with the row.

Sweep confirms no join or lookup compares two encrypted columns any more.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-25 16:48:10 +03:00
Hamza-AyedandClaude Opus 5 35a66935aa Repair verification joins broken by the OTP key change; extend backfill
Storing the verification phone as a keyed HMAC fixed OTP lookups but broke
every query that joined those tables back to the account, because
phone_verification*.phone_number no longer holds the same value as
driver.phone / passengers.phone. Six joins were affected, and four of them
feed the `verified` flag that the rider and driver apps check at sign-in — so
this was already failing under the current CBC mode, not only after a switch
to GCM.

Accounts now carry phone_key, computed exactly as otpPhoneKey() does, and the
joins match on it. It is written at registration for both apps and populated
for existing rows by the backfill.

The backfill also covers the columns added for the remaining lookups:
users.email_bidx/phone_bidx and driver.national_bidx, which were migrated but
never populated, and honours a per-field prefix so phone_key reproduces
otpPhoneKey's exact output.

Insert column/value counts verified with a paren-aware parser after editing.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-25 16:40:53 +03:00
Hamza-AyedandClaude Opus 5 8d7e3118b5 Migrate remaining encrypted-column lookups to the blind index
Completes the set of queries that matched a freshly encrypted value against a
stored one, which only works while encryption is deterministic. Each keeps its
original comparison and adds an index comparison in the same WHERE, so nothing
changes today.

- passenger sign-in by email, service-staff sign-in, Firebase token lookup
- driver lookup by phone and by national number
- admin ride lookup and ride monitor (both tables)
- nabeh: driver status, user resolution, ride history, complaint submission

transit_org_admins lives in the transit database and has no index column, so
login there falls back to decrypting the small set of active admins and
comparing normalised numbers.

Schema: adds users.email_bidx/phone_bidx and driver.national_bidx with their
indexes.

Verified that every :*_bidx placeholder introduced is actually bound — an
unbound one is a fatal error at request time, not a silent miss.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-25 16:36:32 +03:00
Hamza-AyedandClaude Opus 5 39b5a7fc7f Keep OTP phone numbers recoverable for customer-service follow-up
Storing the verification phone as a keyed HMAC made OTP lookups independent
of the encryption mode, but the hash is one-way — and customer service reads
those same rows to chase people who requested a code and never finished
registering. That workflow would have lost the number entirely.

The verification tables now carry both forms: phone_number holds the lookup
key, and a new phone_enc column holds the encrypted number, which is
decryptable when a human needs to call.

The two follow-up queries also compared the verification row against the
driver/passengers tables and the notes tables by matching ciphertext, which
only ever worked because encryption was deterministic. Under GCM every number
would have looked unregistered and every note would have disappeared. Both now
read the number from phone_enc and match on normalised plaintext, so they are
correct under either mode.

Rows written before phone_enc existed are skipped rather than shown without a
number.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-25 16:27:29 +03:00
Hamza-AyedandClaude Opus 5 a1c19b052d Make OTP verification independent of the encryption mode
The verification tables (token_verification*, phone_verification*) use the
phone number as a lookup key: written when the code is sent, read when it is
checked. Storing it encrypted worked only because encryptData() is
deterministic — under AES-GCM the two sides would produce different
ciphertexts and no code would ever verify, locking every user out of
registration and OTP sign-in.

otpPhoneKey() stores a keyed HMAC of the normalised number instead. No schema
change is needed since the column is textual, local and international formats
now resolve to the same key, and the value cannot be reversed without the
pepper. It falls back to the previous behaviour when no pepper is configured.

Applied to both sides of every affected flow — request/verify, and the driver
and passenger send/verify pairs — including the OTP value itself where it is
compared by equality rather than decrypted. auth/otp/verify.php already
decrypts the token before comparing, so it needed no change there.

Also adds ENCRYPTION_MODE to EncryptionHelper: encryptData() writes GCM when
set to 'gcm', CBC otherwise. Verified in both directions — rows written under
CBC stay readable after switching, and rows written under GCM stay readable
after rolling back — so the switch is reversible by an environment variable.

The admin console's own OTP is unaffected: it keys the table by the stored
ciphertext read from adminUser, identical on both sides.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-25 16:18:16 +03:00
Hamza-AyedandClaude Opus 5 c9b4d14da6 Route account lookups through the blind index and keep it fresh on write
These are the paths that must stop depending on deterministic encryption
before storage can move to AES-GCM. Each keeps its original ciphertext
comparison in the same statement, so behaviour is unchanged today and no
account becomes unreachable during the transition.

Lookups:
- auth/login.php — passenger sign-in matched the raw value against the
  encrypted column, which only works because encryptData() is CBC with a
  fixed IV.
- auth/passenger/register.php and auth/driver/register.php — duplicate
  detection. Without the index these would stop detecting existing accounts
  under GCM and allow the same phone to register twice.

Writes now populate the index in the same statement as the value:
- both registration paths write phone/email/name indexes with the row;
  driver indexes are computed before the encryption pass, since the raw
  values are unavailable afterwards.
- passenger profile update and admin driver update refresh the index when
  the underlying field changes. For the composite name index the untouched
  half is read back from the row.

Adds --audit to the backfill script: recomputes every index from its
encrypted value and reports missing or stale entries. Drift here is silent
by nature — it surfaces only when a real search fails.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-25 16:04:40 +03:00
Hamza-AyedandClaude Opus 5 15f55ff3e4 Add --verify to the backfill script
Confirms a value is findable through the blind index after backfilling,
without opening the console or the database. Prints matched row ids only.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-25 15:59:50 +03:00
Hamza-AyedandClaude Opus 5 761b957c96 Silence REQUEST_METHOD warning when bootstrap runs from the CLI
The migration and backfill scripts load bootstrap.php outside a request, where
$_SERVER['REQUEST_METHOD'] does not exist, so every CLI run printed a warning
before its output.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-25 15:55:18 +03:00
Hamza-AyedandClaude Opus 5 57e22477fb Add an idempotent CLI migration runner
phpMyAdmin is unreachable on this deployment, so schema changes need a path
that does not depend on it. migrate.php reuses core/Database, meaning no
credentials are passed on the command line, and checks information_schema
before each ALTER so re-running is safe and never fails on a duplicate
column. Supports --status and --dry-run.

Covers the blind-index columns and the missing adminUser status/approved_by/
approved_at columns. Every change is additive and nullable, so applying it to
a running database changes no behaviour on its own.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-25 15:35:34 +03:00
Hamza-AyedandClaude Opus 5 6802026dbd Add blind-index search layer; fix captain detail 200-with-empty-body
Searching encrypted columns currently works only because encryptData() is
AES-CBC with a fixed IV, i.e. deterministic. That determinism is what leaks
equality and shared prefixes, and it is why moving storage to AES-GCM would
break every lookup. This separates the two concerns.

- core/Security/BlindIndex.php: HMAC-SHA256 over a normalised value, keyed by
  a secret pepper. Phone numbers have a small keyspace, so a bare SHA-256
  would be reversible by enumeration; the pepper lives in the environment, not
  the database. The scope string includes table and field so the same number
  does not produce a matching index across tables.
  Normalisation unifies local/international phone forms, lowercases emails and
  folds Arabic alef/ya/ta-marbuta and diacritics for names.
- migrations/: nullable *_bidx columns plus indexes, and the missing
  adminUser.status/approved_by/approved_at columns that admin approvals need.
- scripts/backfill_blind_index.php: restartable, batched, --dry-run capable,
  touches only index columns.
- Admin lookups by phone/email now match the index, keeping the old ciphertext
  comparison in the same query so search keeps working until the backfill runs.
  bootstrap exposes $blindIndex as null when no pepper is configured.

Also: AdminCaptain/getCaptainDetailsById.php selected driver.education, a
column absent from this schema. The PDOException was uncaught, so the client
received an empty body with HTTP 200 — the "non-JSON response" seen when
opening a captain. It now omits the column, catches the error, reports it as
JSON, and requires an admin role.

Console: opening any sidebar section refetches its data instead of showing
what was loaded when the console started.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-25 15:16:09 +03:00
Hamza-AyedandClaude Opus 5 81ee2acefd Add removal/blacklist tools, Arabic UI, and a persistent sign-in error
Authorisation: driver/deleteCaptain.php permanently deletes a captain and had
no role check at all — any valid token, including a driver's or passenger's,
could delete captains. It now requires super_admin. The two unblacklist
endpoints had no role check either and now require an admin role.

Console:
- Blacklist & removal screen (super admin only): current blocks, permanent
  removal, and lifting a block. Deletion additionally requires the phone
  number to be retyped, because the row is deleted outright.
- Arabic interface with full RTL layout and a language toggle. Sidebar,
  content offset, input affordances, toasts and directional icons all mirror;
  numbers, identifiers and the diagnostics output stay LTR.
- Sign-in failures now render in the form and stay there. They were only
  shown as a toast, which disappears before it can be read — a locked
  account or a rejected device looked like the page simply returning to
  the login screen with no explanation.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-25 14:53:26 +03:00
Hamza-Ayed 42f6d33efd Update: 2026-07-25 14:44:30 2026-07-25 14:44:30 +03:00
Hamza-AyedandClaude Opus 5 4009af8dd3 Add campaign launcher and app version manager; fix SQL injection in updatePackages
serviceapp/updatePackages.php built its UPDATE by interpolating the request
values straight into the SQL string, so any caller with a valid token could
execute arbitrary SQL through the version field. It now uses bound
parameters, requires an admin role, validates the version format, and writes
an audit entry.

trigger_campaign.php gains dry_run=1: it performs the same Gemini analysis
and target selection but returns before creating the promo code and before
dispatching any notification. Launching without previewing was the only
option before, and a launch writes a seven-day discount and pushes to every
passenger in the country.

Console:
- Campaign launcher with a mandatory preview. Launching stays disabled until
  the current parameters have been previewed, and re-locks if any parameter
  changes afterwards or once a launch completes.
- App version manager with the same version-format check as the server and a
  confirmation naming the old and new values.

Cache busting: assets are served straight off a bind mount with no version,
so browsers kept running the previously cached build after a deploy. Both
asset links now carry ?v=, and the build id is shown in Session & Security
and printed in the diagnostics report.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-25 14:41:27 +03:00
Hamza-AyedandClaude Opus 5 67f55e5192 Add driver document review and staff onboarding
Driver documents: paged list from auth/driver/drivers_pending_list.php, a
detail panel showing each uploaded document as a thumbnail linking to the
full image, and activation via Admin/driver/updateDriverFromAdmin.php. The
confirmation states how many documents were reviewed and warns explicitly
when a captain has none on file, since approving then activates an
unverified account.

Details are requested as a POST body. The mobile app calls this endpoint as
GET "?id=", which filterRequest() never reads, so its detail lookup cannot
be receiving an id at all.

Staff: pending admin/service accounts with per-account activation via
Staff/activate.php, the employee list, and a creation form posting to
Staff/add.php. Administrator accounts are offered only to super admins,
matching add.php's own check; passwords are rejected below 8 characters and
cleared from the form after submission.

Both screens mask phone numbers for plain admins and never render
token/password/fingerprint fields.

Also stop .btn-primary stretching to full width when used inline in a card
header — it is styled for the login form.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-25 14:30:49 +03:00
Hamza-AyedandClaude Opus 5 a0ab6c5155 Add broadcast notifications and transit route approvals
Broadcast: ride/firebase/send_fcm.php is an internal service guarded by a
shared secret, so the browser cannot call it — holding that key client-side
would expose it, and the endpoint cannot tell who the sender is. A new
Admin/notifications/broadcast.php sits in front of it: it runs behind
connect.php, requires super_admin, restricts the target to the two topics the
apps actually subscribe to ('drivers'/'passengers') so it cannot be used to
push to an arbitrary topic or a single device token, bounds the title and
body, writes an audit entry before dispatching, and only then forwards the
call internally with the shared secret.

The composer shows a live push preview and an explicit confirmation naming
the audience, since a broadcast cannot be recalled.

Route approvals: draft routes render with their stops, distance and stop
count, and approve/reject posts to transit/route/approve.php behind a
confirmation stating the consequence. Available to admins and super admins,
matching the endpoint's own role check.

Also render user-supplied text with unicode-bidi: plaintext — Arabic names,
addresses and messages were being laid out left-to-right inside the
English UI.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-25 02:15:02 +03:00
Hamza-AyedandClaude Opus 5 41a06bba0c Add fleet, invoice, promo and lookup-driven admin modules
Brings the console to 18 modules across 26 navigation entries.

- Fleet performance (best captains, per-captain card charges), invoice
  totals and promo codes as read-only panels.
- Ride monitor: monitorRide.php and getDriverGiftPayment.php answer only for
  a given phone number, so they get an input rather than a panel that would
  render an error on load.
- Status-like values in generated tiles use the same label mapping as the
  tables, so raw values such as cancelled_by_passenger no longer leak into
  the UI.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-25 02:02:08 +03:00
Hamza-AyedandClaude Opus 5 db4ca7dd7a Fix dashbord.php parse error; require super_admin on pricing and crypto tools
Hotfix: a comment added to the dashboard SQL contained double quotes inside
the double-quoted PHP string, terminating it and making dashbord.php fail to
parse. Production was returning a parse error for every dashboard request.

Authorisation gaps closed — connect.php only proves a token is valid, it does
not check what the caller is allowed to do:

- Admin/ggg.php decrypts any database field and was authorised solely by an
  admin phone number sent in the request body. Anyone who knew a listed
  number could decrypt platform data without signing in. It now runs behind
  connect.php, requires super_admin, keeps the phone list as a second factor,
  and records every use.
- ride/kazan/update.php, kazan/add.php and ride/promo/{add,update,delete}.php
  changed live pricing and discount codes with no role check at all, so any
  valid token — including a driver's or passenger's — could rewrite the fare
  table. All now require super_admin.

Staff/pending.php: adminUser has no `status` column in this deployment, so
the query failed with an opaque "unavailable". It now checks for the column
and reports the actual reason.

Console: Kazan tariff editor for super admins — sends only changed fields,
shows an old → new confirmation before saving, and stays read-only with an
explanatory notice for plain admins.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-25 02:00:14 +03:00
Hamza-AyedandClaude Opus 5 852c6ece5c Fix admin status handling for the current ride pipeline; extend console
The ride table holds two generations of status values: the legacy CamelCase
set ('Finished', 'CancelFromPassenger') and the lowercase set written by
backend/ride/rides/* today ('completed', 'cancelled_by_passenger'). Admin
queries only matched the legacy set, so on live data:

- get_rides_by_status.php returned nothing meaningful for every filter, and
  the "in progress" default masked it.
- dashbord.php reported total_driver_earnings as NULL, completed_rides as a
  fraction of the real count, and cancelled_rides as 0.
- driver_avg_duration averaged in negative durations, yielding "-00h 22m".

All three now match on LOWER(status) across both families.

Staff/pending.php ran with no authentication at all, exposing pending
admins' names and phone numbers to any caller; it now goes through
connect.php with a role check. It also returned HTTP 400 for everything when
the `users` table was absent — each source is queried independently and
reports its own availability.

Console:
- Render rides from either schema generation (price/date/time and
  start_location coordinates, or the older address/created_at columns).
- Null aggregates render as "—" rather than a measured 0.00.
- Add tariff/promo, WhatsApp send and encryption modules, all super-admin
  gated; pricing remains read-only.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-25 01:47:55 +03:00
Hamza-Ayed 915a148ebf Update: 2026-07-25 01:38:11 2026-07-25 01:38:11 +03:00
Hamza-Ayed 0d9095fd3f Update: 2026-07-25 01:16:32 2026-07-25 01:16:33 +03:00
Hamza-Ayed eda7018434 Update: 2026-07-25 01:02:01 2026-07-25 01:02:02 +03:00
Hamza-Ayed 822cb5963a Ensure Live Backend mode is enforced and clear old Demo localStorage session 2026-07-25 00:44:11 +03:00
Hamza-Ayed 8ec7b9aae6 Bind live MySQL database tables (Rides, Passengers, Pending Approvals) into Siro Admin Portal 2026-07-25 00:41:18 +03:00
Hamza-Ayed c9168c1c80 Enhance Siro Admin Dashboard with live backend API database bindings 2026-07-25 00:33:32 +03:00
Hamza-Ayed 10f1154cc7 Update adminUser fingerprint and fingerprint_hash in database upon successful OTP verification 2026-07-25 00:30:14 +03:00
Hamza-Ayed 9d2a665d64 Restore WhatsApp OTP (Nabeh API) flow for Admin authentication 2026-07-25 00:25:53 +03:00
Hamza-Ayed 4c738e8f43 Remove legacy encrypt_decrypt.php - bootstrap.php already provides encryptionHelper 2026-07-25 00:23:27 +03:00
Hamza-Ayed 032e1edda5 Remove broken providers.php require_once - issue JWT directly on valid password 2026-07-24 23:59:27 +03:00
Hamza-Ayed 1ca2c5a5dd Fix require_once path in login.php using realpath 2026-07-24 23:51:28 +03:00
Hamza-Ayed f115292dd2 Refactor login.php with decryption lookup for encrypted fields and restore Nabeh OTP integration 2026-07-24 23:48:57 +03:00
Hamza-Ayed 60e344598b Fix Admin login path issue and issue direct JWT on valid credentials 2026-07-24 23:45:28 +03:00
Hamza-Ayed 8bc9290916 Safely initialize encryptionHelper and handle Throwable in Admin login.php 2026-07-24 23:42:39 +03:00
Hamza-Ayed 9e2964d307 Allow email and ID login in Admin auth login.php and bind web device fingerprint 2026-07-24 23:38:17 +03:00
Hamza-Ayed b3126013f5 Update: 2026-07-24 23:31:37 2026-07-24 23:31:37 +03:00
Hamza-Ayed 5ebff42841 Update: 2026-07-24 23:23:54 2026-07-24 23:23:55 +03:00
Hamza-Ayed 2944f21f53 Add dashboard web applications (siro-admin & siro-service) with docker Nginx routing 2026-07-24 22:59:26 +03:00
Hamza-Ayed 917dfc025f Update: 2026-07-24 22:57:32 2026-07-24 22:57:32 +03:00
Hamza-Ayed 0b24bc21b6 Update: 2026-07-24 22:55:34 2026-07-24 22:55:34 +03:00
Hamza-Ayed 474c212bcb refactor: migrate amount fields to decimal and implement location service restriction for unsupported regions 2026-07-24 15:08:37 +03:00
Hamza-Ayed e7629a9eb9 Update: 2026-07-23 22:14:10 2026-07-23 22:14:10 +03:00
Hamza-Ayed 695d6d7cb2 Update: 2026-07-23 21:18:25 2026-07-23 21:18:25 +03:00
Hamza-Ayed e7aa28fe3d Update: 2026-07-23 21:05:22 2026-07-23 21:05:22 +03:00
Hamza-Ayed 7d646b579b Update: 2026-07-23 21:02:51 2026-07-23 21:02:51 +03:00
Hamza-Ayed b4451a0dde Update: 2026-07-23 20:50:10 2026-07-23 20:50:10 +03:00
Hamza-Ayed 92eb7fe25d Update: 2026-07-23 20:43:21 2026-07-23 20:43:21 +03:00
Hamza-Ayed 1e785061ec Fix decryptData null type error and live analytics overflow 2026-07-23 20:42:48 +03:00
Hamza-Ayed 12e70f3d7e Fix status warning in admin login 2026-07-23 20:34:27 +03:00
Hamza-Ayed 12a1cbc98c Update: 2026-07-23 20:15:22 2026-07-23 20:15:22 +03:00
Hamza-Ayed c35b350b31 Update: 2026-07-23 16:56:57 2026-07-23 16:56:58 +03:00
Hamza-Ayed 1cef598fc5 Update: 2026-07-23 02:19:01 2026-07-23 02:19:01 +03:00
Hamza-Ayed e5bf70fddb Update: 2026-07-23 02:14:58 2026-07-23 02:14:58 +03:00
Hamza-Ayed 9e065e5a83 Update: 2026-07-23 00:16:56 2026-07-23 00:16:56 +03:00
Hamza-Ayed ed8a93a6a3 Update: 2026-07-23 00:13:41 2026-07-23 00:13:41 +03:00
Hamza-Ayed a7fa40dc31 Update: 2026-07-23 00:11:36 2026-07-23 00:11:37 +03:00
Hamza-Ayed b86f95c90d Update: 2026-07-22 23:27:18 2026-07-22 23:27:18 +03:00
Hamza-Ayed b83ca1f664 Update: 2026-07-22 23:20:32 2026-07-22 23:20:33 +03:00
Hamza-Ayed fbb95c70fa Update: 2026-07-22 23:06:34 2026-07-22 23:06:34 +03:00
Hamza-Ayed b9efba3787 Update: 2026-07-22 18:32:11 2026-07-22 18:32:11 +03:00
Hamza-Ayed e798f84c03 Update: 2026-07-22 18:30:10 2026-07-22 18:30:11 +03:00
Hamza-Ayed 55fbe22f8e Update: 2026-07-22 18:23:10 2026-07-22 18:23:10 +03:00
Hamza-Ayed f76623a25e Update: 2026-07-22 18:20:33 2026-07-22 18:20:33 +03:00
Hamza-Ayed f62716b510 Update: 2026-07-22 18:11:54 2026-07-22 18:11:54 +03:00
Hamza-Ayed 771b436c69 Update: 2026-07-22 17:58:19 2026-07-22 17:58:19 +03:00
Hamza-Ayed 939c7a9c2c Update: 2026-07-22 17:49:27 2026-07-22 17:49:28 +03:00
Hamza-Ayed ccbe3ab88d Update: 2026-07-22 16:01:21 2026-07-22 16:01:21 +03:00
Hamza-Ayed 09a4bbc79f Fix driver visibility radius and silence tolerance in api_get_nearby 2026-07-22 15:45:54 +03:00
Hamza-Ayed 901f429b9c Update driver and rider socket URLs to jordan-siro.intaleqapp.com for Docker setup 2026-07-22 04:15:18 +03:00
Hamza-Ayed 6282be37d8 Fix get.php key loading fallback 2026-07-22 04:03:37 +03:00
Hamza-Ayed a2f0911d13 Fix api_get_nearby syntax error and Docker key paths 2026-07-22 03:59:40 +03:00
Hamza-Ayed dabf4c13ba Fix driver_socket JWT compatibility for Flutter app 2026-07-22 03:57:14 +03:00
Hamza-Ayed 1b45b505f8 Update: 2026-07-22 01:40:24 2026-07-22 01:40:24 +03:00
Hamza-Ayed 8ec0ac2942 Update: 2026-07-22 01:35:37 2026-07-22 01:35:37 +03:00
Hamza-Ayed 26d0ec2982 Update: 2026-07-22 01:07:41 2026-07-22 01:07:41 +03:00
Hamza-Ayed 11d7d86b2f Update: 2026-07-22 01:06:03 2026-07-22 01:06:03 +03:00
Hamza-Ayed a4b5a2545c Update: 2026-07-22 01:04:56 2026-07-22 01:04:57 +03:00
Hamza-Ayed be14b2716e Update: 2026-07-22 01:01:26 2026-07-22 01:01:26 +03:00
Hamza-Ayed 9a73f4303d Update: 2026-07-22 00:55:45 2026-07-22 00:55:45 +03:00
Hamza-Ayed bbcefd20cf Update: 2026-07-22 00:52:19 2026-07-22 00:52:20 +03:00
Hamza-Ayed 521d76c4cf Update: 2026-07-22 00:48:30 2026-07-22 00:48:30 +03:00
Hamza-Ayed b613022169 Update: 2026-07-22 00:46:37 2026-07-22 00:46:37 +03:00
Hamza-Ayed 540e77984b Update: 2026-07-22 00:44:11 2026-07-22 00:44:11 +03:00
Hamza-Ayed bec8089fd1 Update: 2026-07-22 00:42:09 2026-07-22 00:42:09 +03:00
Hamza-Ayed a5ae6fecbe Update: 2026-07-22 00:40:58 2026-07-22 00:40:58 +03:00
Hamza-Ayed 16101927e1 Update: 2026-07-22 00:39:28 2026-07-22 00:39:28 +03:00
Hamza-Ayed 58222fbf81 Update: 2026-07-22 00:37:03 2026-07-22 00:37:03 +03:00
Hamza-Ayed bcab0ea221 Update: 2026-07-22 00:36:04 2026-07-22 00:36:05 +03:00
Hamza-Ayed 87b4f12da0 Update: 2026-07-22 00:33:44 2026-07-22 00:33:44 +03:00
Hamza-Ayed 17abdada10 Update: 2026-07-22 00:32:07 2026-07-22 00:32:07 +03:00
Hamza-Ayed 2b302db1dd Update: 2026-07-22 00:29:56 2026-07-22 00:29:56 +03:00
Hamza-Ayed cf95455bcf Update: 2026-07-22 00:27:49 2026-07-22 00:27:50 +03:00
Hamza-Ayed 699b380f2b Update: 2026-07-21 20:58:30 2026-07-21 20:58:30 +03:00
Hamza-Ayed 3d0c266b7a Update: 2026-07-21 20:55:19 2026-07-21 20:55:20 +03:00
Hamza-Ayed 586deec4f4 Update: 2026-07-21 20:50:03 2026-07-21 20:50:04 +03:00
Hamza-Ayed bb3536aa90 Update: 2026-07-21 20:40:48 2026-07-21 20:40:48 +03:00
Hamza-Ayed 23f697b1c6 Update: 2026-07-21 19:43:50 2026-07-21 19:43:51 +03:00
Hamza-Ayed 1bec13634a Update: 2026-07-21 19:34:29 2026-07-21 19:34:29 +03:00
Hamza-Ayed 0ee3655c05 Update: 2026-07-21 19:31:02 2026-07-21 19:31:02 +03:00
Hamza-Ayed 4f47c0ad1d Update: 2026-07-21 19:28:08 2026-07-21 19:28:08 +03:00
Hamza-Ayed f3905bcb2c Update: 2026-07-21 19:24:57 2026-07-21 19:24:57 +03:00
Hamza-Ayed 1103f6ffcf Update: 2026-07-21 19:22:23 2026-07-21 19:22:23 +03:00
Hamza-Ayed 0351bffafc Update: 2026-07-21 19:19:15 2026-07-21 19:19:15 +03:00
Hamza-Ayed 096f6a13a0 Update: 2026-07-21 19:15:57 2026-07-21 19:15:57 +03:00
Hamza-Ayed ebd6f3734a Update: 2026-07-21 19:09:42 2026-07-21 19:09:42 +03:00
Hamza-Ayed 8d8c3a3817 Update: 2026-07-21 19:03:47 2026-07-21 19:03:47 +03:00
Hamza-Ayed 432245a688 Update: 2026-07-21 18:55:51 2026-07-21 18:55:51 +03:00
Hamza-Ayed 5d68ec5d0c Update: 2026-07-21 18:33:13 2026-07-21 18:33:13 +03:00
Hamza-Ayed c9bef58f47 Update: 2026-07-21 18:31:25 2026-07-21 18:31:25 +03:00
Hamza-Ayed 36ca266132 Update: 2026-07-21 18:25:21 2026-07-21 18:25:21 +03:00
Hamza-Ayed e88d45add4 Update: 2026-07-21 18:24:21 2026-07-21 18:24:21 +03:00
Hamza-Ayed 6d6c7cab7f Update: 2026-07-21 18:18:21 2026-07-21 18:18:21 +03:00
Hamza-Ayed 818220bba2 Update: 2026-07-21 17:47:43 2026-07-21 17:47:43 +03:00
Hamza-Ayed 0f59975144 Update: 2026-07-21 17:31:31 2026-07-21 17:31:31 +03:00
Hamza-Ayed 24e03ae46c Update: 2026-07-21 17:29:09 2026-07-21 17:29:09 +03:00
Hamza-Ayed 58ada98dd7 Update: 2026-07-21 17:27:39 2026-07-21 17:27:39 +03:00
Hamza-Ayed 1b4d831ca6 Update: 2026-07-21 17:23:24 2026-07-21 17:23:24 +03:00
Hamza-Ayed 69f043c297 Update: 2026-07-21 17:19:49 2026-07-21 17:19:50 +03:00
Hamza-Ayed e1154d7281 Update: 2026-07-21 17:16:36 2026-07-21 17:16:36 +03:00
Hamza-Ayed 630c6277ac Update: 2026-07-21 17:13:31 2026-07-21 17:13:31 +03:00
Hamza-Ayed 772398d961 Update: 2026-07-21 17:09:08 2026-07-21 17:09:08 +03:00
Hamza-Ayed b89191c018 Update: 2026-07-21 16:59:10 2026-07-21 16:59:10 +03:00
Hamza-Ayed 13d10d13c7 feat: implement gate selection bottom sheet for location routing and update intaleq_maps dependency 2026-07-21 16:12:08 +03:00
Hamza-Ayed 085b180bdb feat: implement secure OTP-based payout workflow with dynamic fee calculation and improved authentication checks 2026-07-19 01:51:39 +03:00
Hamza-Ayed 5e80c886a0 Update: 2026-07-17 00:32:33 2026-07-17 00:32:33 +03:00
Hamza-Ayed dda813ace1 Update: 2026-07-17 00:31:27 2026-07-17 00:31:27 +03:00
Hamza-Ayed 5ae5628f37 Update: 2026-07-17 00:23:48 2026-07-17 00:23:48 +03:00
Hamza-Ayed b385cace36 Update: 2026-07-17 00:20:03 2026-07-17 00:20:03 +03:00
Hamza-Ayed 64b17fbb26 Update: 2026-07-17 00:19:20 2026-07-17 00:19:20 +03:00
Hamza-Ayed c00bfa24ba Update: 2026-07-17 00:18:34 2026-07-17 00:18:34 +03:00
Hamza-Ayed 1f57b642c3 Update: 2026-07-17 00:17:59 2026-07-17 00:17:59 +03:00
Hamza-Ayed c5ed2099f9 Update: 2026-07-17 00:15:49 2026-07-17 00:15:49 +03:00
Hamza-Ayed 8cb83b31f2 Update: 2026-07-17 00:13:30 2026-07-17 00:13:30 +03:00
Hamza-Ayed 034d64b6f2 Update: 2026-07-16 23:19:11 2026-07-16 23:19:11 +03:00
Hamza-Ayed ab77ed529a Update: 2026-07-14 19:10:36 2026-07-14 19:10:36 +03:00
Hamza-Ayed 48382f5d4a docs: restructure documentation, add digital legacy report, and secure contracts 2026-07-14 18:45:29 +03:00
Hamza-Ayed 540ae4d4bc chore: reorganize transit documentation and remove obsolete project files and assets 2026-07-14 17:57:01 +03:00
Hamza-Ayed a81f805796 Update: 2026-07-14 00:54:50 2026-07-14 00:54:51 +03:00
Hamza-Ayed a547b81b60 Update: 2026-07-14 00:34:22 2026-07-14 00:34:22 +03:00
Hamza-Ayed c956f27230 Update: 2026-07-14 00:10:05 2026-07-14 00:10:05 +03:00
Hamza-Ayed c3fb42cae9 Update: 2026-07-13 23:44:27 2026-07-13 23:44:27 +03:00
Hamza-Ayed a2484d0bf5 Update: 2026-07-13 22:31:28 2026-07-13 22:31:29 +03:00
Hamza-Ayed c6f48a1f91 Update: 2026-07-13 22:23:21 2026-07-13 22:23:22 +03:00
Hamza-Ayed fd3f4a365a Update: 2026-07-13 18:23:52 2026-07-13 18:23:52 +03:00
Hamza-Ayed 7bf6dc1be7 Update: 2026-07-13 04:13:50 2026-07-13 04:13:50 +03:00
Hamza-Ayed 653d73422f Update: 2026-07-12 18:53:59 2026-07-12 18:53:59 +03:00
Hamza-Ayed 8cd4a4b57e Update: 2026-07-12 17:46:46 2026-07-12 17:46:46 +03:00
Hamza-Ayed 27200013ac Update: 2026-07-12 17:22:40 2026-07-12 17:22:40 +03:00
Hamza-Ayed 8fa2f153c1 refactor: disable Mawasalati feature, wrap controller initialization in post-frame callbacks, and add documentation plan 2026-07-12 06:27:36 +03:00
Hamza-Ayed 08340493c0 Update: 2026-07-12 06:04:42 2026-07-12 06:04:42 +03:00
Hamza-Ayed 1f68cb7333 Update: 2026-07-12 05:49:17 2026-07-12 05:49:17 +03:00
Hamza-Ayed 24fb56f08f Update: 2026-07-12 05:40:28 2026-07-12 05:40:28 +03:00
Hamza-Ayed 1fa517acc9 chore: remove service_unavailable_area translation keys and add mowasalaty strategy report 2026-07-12 02:53:36 +03:00
Hamza-Ayed 8f4bb1631c Update: 2026-07-12 00:24:19 2026-07-12 00:24:19 +03:00
Hamza-Ayed 83f5bf516b feat: add Nabeh payment verification proxy and update UI components 2026-07-11 22:14:37 +03:00
Hamza-Ayed de761c1d97 Update: 2026-07-11 19:38:43 2026-07-11 19:38:43 +03:00
Hamza-Ayed 9535d702d6 Update: 2026-07-11 19:32:42 2026-07-11 19:32:42 +03:00
Hamza-Ayed 8353c4cef4 Update: 2026-07-11 19:26:05 2026-07-11 19:26:05 +03:00
Hamza-Ayed ce2f3d5675 Update: 2026-07-11 19:11:50 2026-07-11 19:11:50 +03:00
Hamza-Ayed cb9aefc591 Update: 2026-07-11 19:04:58 2026-07-11 19:04:59 +03:00
Hamza-Ayed 06dc0aaffe Update: 2026-07-11 05:39:23 2026-07-11 05:39:23 +03:00
Hamza-Ayed 8b19adeb80 Update: 2026-07-11 00:49:03 2026-07-11 00:49:03 +03:00
Hamza-Ayed 04468dad08 Update: 2026-07-10 23:59:23 2026-07-10 23:59:23 +03:00
Hamza-Ayed 6294d6e725 Update: 2026-07-10 22:31:26 2026-07-10 22:31:27 +03:00
Hamza-Ayed 607c9bd9f4 Update: 2026-07-10 19:42:49 2026-07-10 19:42:50 +03:00
Hamza-Ayed 2bce11b940 Update: 2026-07-10 17:26:15 2026-07-10 17:26:16 +03:00
Hamza-Ayed 81d4715664 Update: 2026-07-10 16:09:37 2026-07-10 16:09:37 +03:00
Hamza-Ayed 5fb2c25504 Update: 2026-07-10 13:41:34 2026-07-10 13:41:34 +03:00
Hamza-Ayed be6e5bed92 Update: 2026-07-10 03:07:55 2026-07-10 03:07:55 +03:00
Hamza-Ayed b18fd027b6 Update: 2026-07-10 03:04:06 2026-07-10 03:04:06 +03:00
Hamza-Ayed 2ff7450d0b Update: 2026-07-09 17:18:06 2026-07-09 17:18:06 +03:00
Hamza-Ayed 461a1402ab Update: 2026-07-09 16:59:48 2026-07-09 16:59:48 +03:00
Hamza-Ayed 5e6aeb7908 refactor: unify device analysis and performance testing logic for improved module consistency 2026-07-09 15:09:02 +03:00
Hamza-Ayed d94808c380 Update: 2026-07-09 15:01:29 2026-07-09 15:01:29 +03:00
Hamza-Ayed 87dc925ea7 Refactor(Auth): Complete auth folder restructuring, security patches, and Flutter endpoint updates 2026-07-09 05:22:05 +03:00
Hamza-Ayed 45859883a5 Update: 2026-07-09 05:02:10 2026-07-09 05:02:10 +03:00
Hamza-Ayed 2152d34a8e fix: resolve stale price display in driver ratings and remove misleading discount UI in rider ratings 2026-07-09 04:48:19 +03:00
Hamza-Ayed 03e9d648a1 chore: update localization strings for driver and rider apps 2026-07-09 04:22:12 +03:00
Hamza-Ayed a526dae042 Update: 2026-07-09 04:13:14 2026-07-09 04:13:14 +03:00
Hamza-Ayed 70718946f5 Update: 2026-07-09 03:41:48 2026-07-09 03:41:48 +03:00
Hamza-Ayed 7dff7b6973 Update: 2026-07-09 01:55:25 2026-07-09 01:55:25 +03:00
Hamza-Ayed ac0c343f18 Update: 2026-07-09 01:01:15 2026-07-09 01:01:16 +03:00
Hamza-Ayed 6fe1d665e7 Update: 2026-07-08 23:37:26 2026-07-08 23:37:26 +03:00
Hamza-Ayed d452f9baa9 feat: integrate seasonal surge multipliers and grid-specific commission discounts into pricing logic 2026-07-08 23:23:44 +03:00
Hamza-Ayed 21877153eb feat: harden backend security with HMAC verification, SSL validation, and documentation updates while removing legacy scripts. 2026-07-08 22:10:01 +03:00
Hamza-Ayed 628e169552 Update: 2026-07-07 04:57:50 2026-07-07 04:57:51 +03:00
Hamza-Ayed 5725fb36f4 Update: 2026-07-06 19:27:17 2026-07-06 19:27:17 +03:00
Hamza-Ayed 3c9a3dbef8 Update: 2026-07-06 19:17:19 2026-07-06 19:17:20 +03:00
Hamza-Ayed d6ab09c19b Update: 2026-07-06 18:23:46 2026-07-06 18:23:46 +03:00
Hamza-Ayed 9d257c5d7d Update: 2026-07-06 17:51:16 2026-07-06 17:51:16 +03:00
Hamza-Ayed e21e1f4ec2 Update: 2026-07-06 17:15:10 2026-07-06 17:15:10 +03:00
Hamza-Ayed eb850a2afc Update: 2026-07-06 17:13:49 2026-07-06 17:13:49 +03:00
Hamza-Ayed 281bceb121 Add PM2 ecosystem config 2026-07-06 17:08:21 +03:00
Hamza-Ayed cdfd1b8e02 Update: 2026-07-06 17:05:27 2026-07-06 17:05:27 +03:00
Hamza-Ayed e42d700245 Update: 2026-07-06 17:00:43 2026-07-06 17:00:43 +03:00
Hamza-Ayed 61cb615ae7 Update: 2026-07-06 04:33:26 2026-07-06 04:33:26 +03:00
Hamza-Ayed 8e6dbf96e2 Update: 2026-07-06 04:25:14 2026-07-06 04:25:14 +03:00
Hamza-Ayed df1f487804 Update: 2026-07-06 04:23:43 2026-07-06 04:23:43 +03:00
Hamza-Ayed 32a6531613 Update: 2026-07-06 04:21:17 2026-07-06 04:21:17 +03:00
Hamza-Ayed e42754bb0e Update: 2026-07-06 04:16:38 2026-07-06 04:16:38 +03:00
Hamza-Ayed cadc26518b Update: 2026-07-06 03:51:32 2026-07-06 03:51:32 +03:00
Hamza-Ayed ff49586d6d Update: 2026-07-06 03:45:17 2026-07-06 03:45:17 +03:00
Hamza-Ayed 63440b07dc Update: 2026-07-06 03:30:52 2026-07-06 03:30:52 +03:00
Hamza-Ayed c7863dc98f Update: 2026-07-06 03:11:39 2026-07-06 03:11:39 +03:00
Hamza-Ayed 823805417c Update: 2026-07-06 03:06:32 2026-07-06 03:06:32 +03:00
Hamza-Ayed 9d7e2b412e Update: 2026-07-06 02:55:17 2026-07-06 02:55:17 +03:00
Hamza-Ayed 8b5daf6566 Update: 2026-07-06 02:52:45 2026-07-06 02:52:46 +03:00
Hamza-Ayed 47a6fbb308 Update: 2026-07-06 02:43:48 2026-07-06 02:43:48 +03:00
Hamza-Ayed 035fa5c209 Update: 2026-07-06 02:40:45 2026-07-06 02:40:45 +03:00
Hamza-Ayed 785802221a Update: 2026-07-06 02:37:04 2026-07-06 02:37:05 +03:00
Hamza-Ayed 61e7787d54 Update: 2026-07-06 02:31:40 2026-07-06 02:31:40 +03:00
Hamza-Ayed 775d6dd0f3 Update: 2026-07-06 02:24:21 2026-07-06 02:24:21 +03:00
Hamza-Ayed 7bcfed3ce1 Update: 2026-07-06 02:17:53 2026-07-06 02:17:53 +03:00
Hamza-Ayed 6dccb63178 Update: 2026-07-06 02:13:27 2026-07-06 02:13:28 +03:00
Hamza-Ayed ac50598ee0 Update: 2026-07-06 02:07:30 2026-07-06 02:07:30 +03:00
Hamza-Ayed 8d9126bb45 Update: 2026-07-06 02:04:01 2026-07-06 02:04:01 +03:00
Hamza-Ayed 41746c844f Update: 2026-07-06 02:00:34 2026-07-06 02:00:34 +03:00
Hamza-Ayed 22477356e3 Update: 2026-07-06 01:58:48 2026-07-06 01:58:48 +03:00
Hamza-Ayed f52316fa94 Update: 2026-07-06 01:55:28 2026-07-06 01:55:28 +03:00
Hamza-Ayed f227ce899d Update: 2026-07-06 01:51:42 2026-07-06 01:51:42 +03:00
Hamza-Ayed c24e921bac Update: 2026-07-06 01:47:37 2026-07-06 01:47:37 +03:00
Hamza-Ayed e7453cb6f9 Update: 2026-07-06 01:31:52 2026-07-06 01:31:53 +03:00
Hamza-Ayed bec8f61d70 Update: 2026-07-06 01:28:23 2026-07-06 01:28:23 +03:00
Hamza-Ayed 4d16fbda48 Update: 2026-07-06 01:20:19 2026-07-06 01:20:19 +03:00
Hamza-Ayed ccf7dc99ee Update: 2026-07-06 01:18:35 2026-07-06 01:18:36 +03:00
Hamza-Ayed 1b67c5e8fc Update: 2026-07-06 01:01:29 2026-07-06 01:01:30 +03:00
Hamza-Ayed d00502769a Update: 2026-07-06 00:53:15 2026-07-06 00:53:15 +03:00
Hamza-Ayed 0c19486a24 Update: 2026-07-06 00:44:01 2026-07-06 00:44:01 +03:00
Hamza-Ayed 03a74fa106 Update: 2026-07-06 00:18:03 2026-07-06 00:18:03 +03:00
Hamza-Ayed 27b8a8ec59 Update: 2026-07-05 23:50:29 2026-07-05 23:50:29 +03:00
Hamza-Ayed 4a6ca417ad Update: 2026-07-05 23:31:51 2026-07-05 23:31:51 +03:00
Hamza-Ayed 36761dce91 Update: 2026-07-05 23:16:38 2026-07-05 23:16:39 +03:00
Hamza-Ayed 632ff070fd Update: 2026-07-05 23:07:55 2026-07-05 23:07:55 +03:00
Hamza-Ayed c322e92913 Update: 2026-07-05 23:05:32 2026-07-05 23:05:32 +03:00
Hamza-Ayed 0a35509abd Update: 2026-07-05 22:59:19 2026-07-05 22:59:19 +03:00
Hamza-Ayed 71ca3790c1 Update: 2026-07-05 22:40:17 2026-07-05 22:40:18 +03:00
Hamza-Ayed b2e616ca92 Update: 2026-07-05 19:42:40 2026-07-05 19:42:40 +03:00
Hamza-Ayed ada5dd1c99 Update: 2026-07-05 18:47:37 2026-07-05 18:47:37 +03:00
Hamza-Ayed 40ffcabc91 Update: 2026-07-05 18:46:09 2026-07-05 18:46:09 +03:00
Hamza-Ayed e23c96dc9d Update: 2026-07-05 18:36:32 2026-07-05 18:36:32 +03:00
Hamza-Ayed 23a5d5fec1 Update: 2026-07-05 18:35:41 2026-07-05 18:35:41 +03:00
Hamza-Ayed 63ae10e612 Update: 2026-07-05 18:34:59 2026-07-05 18:35:00 +03:00
Hamza-Ayed 4150dbc7a6 Update: 2026-07-05 18:33:35 2026-07-05 18:33:35 +03:00
Hamza-Ayed 27c0c916cd Update: 2026-07-05 18:31:10 2026-07-05 18:31:10 +03:00
Hamza-Ayed 1b112f08ee Update: 2026-07-05 18:25:17 2026-07-05 18:25:17 +03:00
Hamza-Ayed d7c5eefe71 Update: 2026-07-05 18:23:55 2026-07-05 18:23:55 +03:00
Hamza-Ayed 9b0f0de1ce Update: 2026-07-05 18:16:24 2026-07-05 18:16:24 +03:00
Hamza-Ayed 2b15386291 Update: 2026-07-05 18:09:12 2026-07-05 18:09:12 +03:00
Hamza-Ayed 5d79b67789 Update: 2026-07-05 18:08:08 2026-07-05 18:08:08 +03:00
Hamza-Ayed c96f457d2d Update: 2026-07-05 18:07:23 2026-07-05 18:07:23 +03:00
Hamza-Ayed 4c7a51053f Update: 2026-07-05 18:05:08 2026-07-05 18:05:08 +03:00
Hamza-Ayed b2bc163acb Update: 2026-07-05 17:56:53 2026-07-05 17:56:53 +03:00
Hamza-Ayed 2a5cd2cfbc Update: 2026-07-05 17:53:37 2026-07-05 17:53:37 +03:00
Hamza-Ayed 7ae953f6e3 Update: 2026-07-05 17:51:03 2026-07-05 17:51:03 +03:00
Hamza-Ayed d7f723c735 Update: 2026-07-05 17:49:26 2026-07-05 17:49:26 +03:00
Hamza-Ayed bc44c1cd82 Update: 2026-07-05 17:46:21 2026-07-05 17:46:21 +03:00
Hamza-Ayed 2b9390bca3 Update: 2026-07-05 17:36:25 2026-07-05 17:36:25 +03:00
Hamza-Ayed b89eab0651 Update: 2026-07-05 17:25:01 2026-07-05 17:25:01 +03:00
Hamza-Ayed 2593558c9f Update: 2026-07-05 16:59:48 2026-07-05 16:59:48 +03:00
Hamza-Ayed 01652eed8b Update: 2026-07-05 01:40:01 2026-07-05 01:40:02 +03:00
Hamza-Ayed 73d4778dab Update: 2026-07-05 01:32:30 2026-07-05 01:32:30 +03:00
Hamza-Ayed 468b06ffb3 Update: 2026-07-05 00:35:12 2026-07-05 00:35:13 +03:00
Hamza-Ayed 5cf809e0cb Update: 2026-07-05 00:21:29 2026-07-05 00:21:29 +03:00
Hamza-Ayed 35c0a6680c Update: 2026-07-05 00:06:55 2026-07-05 00:06:55 +03:00
Hamza-Ayed a0e9bd3cbb Update: 2026-07-04 23:44:47 2026-07-04 23:44:48 +03:00
Hamza-Ayed 02bc56164c Update: 2026-07-04 23:33:16 2026-07-04 23:33:16 +03:00
Hamza-Ayed 5f2aa84101 Update: 2026-07-04 21:58:03 2026-07-04 21:58:04 +03:00
Hamza-Ayed 90fbe0ade8 Update: 2026-07-04 21:56:02 2026-07-04 21:56:02 +03:00
Hamza-Ayed 9cf88adbd5 Update: 2026-07-04 21:53:06 2026-07-04 21:53:06 +03:00
Hamza-Ayed 9a027e2535 Update: 2026-07-04 21:48:30 2026-07-04 21:48:30 +03:00
Hamza-Ayed c4746f08da Update: 2026-07-04 21:42:33 2026-07-04 21:42:33 +03:00
Hamza-Ayed ce7db27936 Update: 2026-07-04 21:38:44 2026-07-04 21:38:44 +03:00
Hamza-Ayed df4af1ac2b Update: 2026-07-04 20:53:30 2026-07-04 20:53:30 +03:00
Hamza-Ayed 3c06b3624b Update: 2026-07-04 18:49:57 2026-07-04 18:49:58 +03:00
Hamza-Ayed 3e0b4cbf64 Update: 2026-07-04 18:43:56 2026-07-04 18:43:57 +03:00
Hamza-Ayed 3412f1b753 Update: 2026-07-04 17:02:24 2026-07-04 17:02:24 +03:00
Hamza-Ayed 838e5ec656 Update: 2026-07-04 16:47:10 2026-07-04 16:47:11 +03:00
Hamza-Ayed c8fdd1bb5a Update: 2026-07-04 16:16:49 2026-07-04 16:16:50 +03:00
Hamza-Ayed 8ae6a2e2da Update: 2026-07-04 15:39:18 2026-07-04 15:39:18 +03:00
Hamza-Ayed c7bd644b88 Update: 2026-07-04 04:05:08 2026-07-04 04:05:08 +03:00
Hamza-Ayed e4ba962ab6 Update: 2026-07-03 23:37:15 2026-07-03 23:37:15 +03:00
Hamza-Ayed d06500a20f Update: 2026-07-03 15:03:13 2026-07-03 15:03:13 +03:00
Hamza-Ayed 5ce6c00905 Update: 2026-07-03 01:48:00 2026-07-03 01:48:00 +03:00
Hamza-Ayed 8f59189832 Update: 2026-07-02 17:46:29 2026-07-02 17:46:29 +03:00
Hamza-Ayed 6876d9bc54 Update: 2026-07-02 17:44:58 2026-07-02 17:44:59 +03:00
Hamza-Ayed 5d14493ff4 Update: 2026-07-02 16:52:25 2026-07-02 16:52:25 +03:00
Hamza-Ayed 75e6fc42d7 Update: 2026-07-02 15:35:12 2026-07-02 15:35:12 +03:00
Hamza-Ayed 2adf195b36 Update: 2026-07-02 05:56:57 2026-07-02 05:56:57 +03:00
Hamza-Ayed 05d047d871 Update: 2026-07-02 05:27:04 2026-07-02 05:27:05 +03:00
Hamza-Ayed d2ce4bdb16 Update: 2026-06-30 23:32:14 2026-06-30 23:32:15 +03:00
Hamza-Ayed 808066f4a6 Update: 2026-06-30 23:08:15 2026-06-30 23:08:15 +03:00
Hamza-Ayed 26ae0124c8 Update: 2026-06-30 22:43:38 2026-06-30 22:43:38 +03:00
Hamza-Ayed 1b5d6eae44 Simplify APNs payload for iOS visible notifications and fetch latest token 2026-06-30 22:13:45 +03:00
Hamza-Ayed 772f8b647d Update: 2026-06-30 22:10:05 2026-06-30 22:10:05 +03:00
Hamza-Ayed 9a296742f1 Fix APNs push type for visible notifications on iOS 2026-06-30 22:09:27 +03:00
Hamza-Ayed 116e3fad22 Fix env variable name for service account file to fix 'No access token' error 2026-06-30 22:06:57 +03:00
Hamza-Ayed d9dc124c3e Fix region_name fallback based on countryCode to prevent Damascus appearing for Jordan 2026-06-30 22:00:13 +03:00
Hamza-Ayed ae723a75f6 Update: 2026-06-30 21:59:55 2026-06-30 21:59:55 +03:00
Hamza-Ayed e7785c9b2d Log FCM errors in debug_info when push notification fails 2026-06-30 21:59:00 +03:00
Hamza-Ayed 1dc5ccc11d Restore legacy decrypt fallback for prepended random IV in EncryptionHelper 2026-06-30 21:54:31 +03:00
Hamza-Ayed cf748dfd7c Decrypt token before FCM push and fallback to SMS on push fail, also decrypt names in campaigns log 2026-06-30 21:52:15 +03:00
Hamza-Ayed de06d1cd75 Add debug counts 2026-06-30 21:48:34 +03:00
Hamza-Ayed bd13cbb905 Update targeting logic in trigger_campaign.php to fallback to parsing phone prefixes instead of relying solely on passenger_opening_locations 2026-06-30 21:30:28 +03:00
Hamza-Ayed fdd09d8f35 Fix SQL group by and undefined function errors in admin APIs 2026-06-30 21:17:06 +03:00
Hamza-Ayed 1ae8acad7a Update: 2026-06-30 21:12:26 2026-06-30 21:12:26 +03:00
Hamza-Ayed c2eab19045 Update: 2026-06-30 20:54:00 2026-06-30 20:54:00 +03:00
Hamza-Ayed 1f1a3385e3 Update: 2026-06-30 14:32:38 2026-06-30 14:32:39 +03:00
Hamza-Ayed ef0ee91fd9 Update: 2026-06-30 14:19:01 2026-06-30 14:19:01 +03:00
Hamza-Ayed de1f5ced47 Update: 2026-06-30 05:04:38 2026-06-30 05:04:38 +03:00
Hamza-Ayed 81b1e41911 Update: 2026-06-30 04:58:47 2026-06-30 04:58:47 +03:00
Hamza-Ayed 6b18a2ecf1 Update: 2026-06-30 04:49:51 2026-06-30 04:49:52 +03:00
Hamza-Ayed 8126a0ac38 Update: 2026-06-30 04:42:17 2026-06-30 04:42:18 +03:00
Hamza-Ayed 625df23bfc Update: 2026-06-30 04:21:34 2026-06-30 04:21:34 +03:00
Hamza-Ayed 0d793fcce1 Update: 2026-06-30 04:14:29 2026-06-30 04:14:29 +03:00
Hamza-Ayed fdfe225b7b Update: 2026-06-30 03:05:30 2026-06-30 03:05:30 +03:00
Hamza-Ayed 11140bca49 Update: 2026-06-30 03:00:22 2026-06-30 03:00:22 +03:00
Hamza-Ayed 69b1d09829 Update: 2026-06-30 02:42:49 2026-06-30 02:42:49 +03:00
Hamza-Ayed 152d4df0fc Update: 2026-06-30 02:33:51 2026-06-30 02:33:51 +03:00
Hamza-Ayed c8546bb744 Update: 2026-06-30 02:18:10 2026-06-30 02:18:10 +03:00
Hamza-Ayed cf696d05db Update: 2026-06-30 02:05:28 2026-06-30 02:05:28 +03:00
Hamza-Ayed 44fa1c0558 Update: Click confirm pickup in Jeeny 2026-06-30 00:26:56 +03:00
Hamza-Ayed 1b285fbaea Update: 2026-06-30 00:22:46 2026-06-30 00:22:47 +03:00
Hamza-Ayed 57080187e7 Update: 2026-06-30 00:01:58 2026-06-30 00:01:59 +03:00
Hamza-Ayed 1428addcce Update: 2026-06-29 23:49:36 2026-06-29 23:49:36 +03:00
Hamza-Ayed 299132b505 Update: 2026-06-29 23:45:06 2026-06-29 23:45:06 +03:00
Hamza-Ayed 3506b07bc7 Update: 2026-06-29 23:09:43 2026-06-29 23:09:43 +03:00
Hamza-Ayed 65b2e68154 Update: 2026-06-29 16:17:29 2026-06-29 16:17:29 +03:00
Hamza-Ayed 2da943e745 Update: 2026-06-29 15:29:28 2026-06-29 15:29:29 +03:00
Hamza-Ayed 5ab863edf1 Update: 2026-06-29 01:47:48 2026-06-29 01:47:48 +03:00
Hamza-Ayed d107dd6849 Update: 2026-06-29 01:25:29 2026-06-29 01:25:30 +03:00
Hamza-Ayed b8a817fc9c Update: 2026-06-29 01:12:38 2026-06-29 01:12:38 +03:00
Hamza-Ayed 0af4eed1ce Update: 2026-06-29 01:10:32 2026-06-29 01:10:32 +03:00
Hamza-Ayed b5e2bf2fed Hide country dropdown on subsequent runs once a country is set in local storage 2026-06-29 00:45:47 +03:00
Hamza-Ayed c4fd859257 Add country dropdown selector to login screens of siro_service and siro_admin 2026-06-29 00:41:31 +03:00
Hamza-Ayed 29d3a8ae7e Update admin login success to dynamically set countryCode for non-super-admins 2026-06-29 00:36:01 +03:00
Hamza-Ayed 9cc14864a3 Update: 2026-06-29 00:26:08 2026-06-29 00:26:08 +03:00
Hamza-Ayed 03f26ce825 Update: 2026-06-29 00:12:38 2026-06-29 00:12:39 +03:00
Hamza-Ayed 012b334885 Update: 2026-06-29 00:09:19 2026-06-29 00:09:19 +03:00
Hamza-Ayed d695a4e812 Update: 2026-06-29 00:07:33 2026-06-29 00:07:33 +03:00
Hamza-Ayed 24da2bc7ca Update: 2026-06-28 23:37:42 2026-06-28 23:37:42 +03:00
Hamza-Ayed 1b6e172a4a Update: 2026-06-28 23:14:46 2026-06-28 23:14:46 +03:00
Hamza-Ayed 0b36566343 Update: 2026-06-28 20:54:29 2026-06-28 20:54:30 +03:00
Hamza-Ayed 2da78ccd8e Update: 2026-06-28 19:52:45 2026-06-28 19:52:45 +03:00
Hamza-Ayed f9f6890b26 Update: 2026-06-28 00:42:25 2026-06-28 00:42:26 +03:00
Hamza-Ayed f428946b30 Add tester passenger creation script 2026-06-27 23:09:04 +03:00
Hamza-Ayed 3326756dc3 Add tester driver creation script 2026-06-27 23:01:38 +03:00
Hamza-Ayed a87cb7c082 refactor: optimize wallet JWT management, update security checks for debug builds, and improve pricing data parsing 2026-06-27 22:50:28 +03:00
Hamza-Ayed 43e3f8c939 Fix: update destination limits to 3 and sync with Redis 2026-06-27 17:49:03 +03:00
Hamza-Ayed 5fed555e44 Update: 2026-06-27 05:53:15 2026-06-27 05:53:15 +03:00
Hamza-Ayed 8efd4563db Update: 2026-06-27 05:42:53 2026-06-27 05:42:53 +03:00
Hamza-Ayed bf1416b2a7 Update: 2026-06-27 05:36:53 2026-06-27 05:36:53 +03:00
Hamza-Ayed 7497bdcfae Update: 2026-06-27 05:07:43 2026-06-27 05:07:43 +03:00
Hamza-Ayed f069f2b24f Update: 2026-06-27 04:58:21 2026-06-27 04:58:21 +03:00
Hamza-Ayed 8be2af314e Update: 2026-06-27 04:37:33 2026-06-27 04:37:33 +03:00
Hamza-Ayed a6738079a2 Update: 2026-06-27 04:23:48 2026-06-27 04:23:49 +03:00
Hamza-Ayed 8993aa0a6b Update: 2026-06-27 04:21:17 2026-06-27 04:21:17 +03:00
Hamza-Ayed b4f063aaac Update: 2026-06-26 20:52:17 2026-06-26 20:52:18 +03:00
Hamza-Ayed 1ff132cd07 Update: 2026-06-26 17:59:47 2026-06-26 17:59:47 +03:00
Hamza-Ayed 25d3237113 Update: 2026-06-26 17:58:12 2026-06-26 17:58:12 +03:00
Hamza-Ayed 1e500b6123 Update: 2026-06-26 17:56:46 2026-06-26 17:56:46 +03:00
Hamza-Ayed 060d9b08ae Update: 2026-06-26 17:42:07 2026-06-26 17:42:07 +03:00
Hamza-Ayed 953ef28ec7 Update: 2026-06-26 17:39:24 2026-06-26 17:39:24 +03:00
Hamza-Ayed ae21389240 Update: 2026-06-26 17:36:57 2026-06-26 17:36:57 +03:00
Hamza-Ayed 9ded734e38 Update: 2026-06-26 17:29:23 2026-06-26 17:29:23 +03:00
Hamza-Ayed a323da29aa Update: 2026-06-26 04:53:05 2026-06-26 04:53:05 +03:00
Hamza-Ayed 3413ca8b07 Update: 2026-06-26 04:38:26 2026-06-26 04:38:26 +03:00
Hamza-Ayed 116f08d367 Update: 2026-06-26 04:31:50 2026-06-26 04:31:50 +03:00
Hamza-Ayed 72afd11a57 Update: 2026-06-26 04:24:20 2026-06-26 04:24:20 +03:00
Hamza-Ayed da9e6eb981 Update: 2026-06-26 04:04:03 2026-06-26 04:04:04 +03:00
Hamza-Ayed aea0c8e44e Fix: promos discount query and compact car details layout 2026-06-26 03:04:22 +03:00
Hamza-Ayed a8b10d954c Update: 2026-06-26 02:37:10 2026-06-26 02:37:11 +03:00
Hamza-Ayed f53177e715 Update: 2026-06-26 02:29:35 2026-06-26 02:29:35 +03:00
Hamza-Ayed fe164a006b Update: 2026-06-26 02:18:42 2026-06-26 02:18:42 +03:00
Hamza-Ayed 482143ce11 Update: 2026-06-26 02:10:27 2026-06-26 02:10:27 +03:00
Hamza-Ayed 21f5105fa1 Update: 2026-06-26 02:00:23 2026-06-26 02:00:23 +03:00
Hamza-Ayed bd3ba7ecd7 Update: 2026-06-26 01:43:37 2026-06-26 01:43:37 +03:00
Hamza-Ayed 3002dbd517 Update: 2026-06-26 01:26:12 2026-06-26 01:26:12 +03:00
Hamza-Ayed f3e5117c19 Update: 2026-06-26 01:17:02 2026-06-26 01:17:02 +03:00
Hamza-Ayed a9e2ee1a58 Update: 2026-06-26 01:10:36 2026-06-26 01:10:36 +03:00
Hamza-Ayed 595ae99e1d Update: 2026-06-26 00:41:47 2026-06-26 00:41:47 +03:00
Hamza-Ayed a655c80f6f Update: 2026-06-26 00:40:48 2026-06-26 00:40:48 +03:00
Hamza-Ayed 6fcc4a0649 Update: 2026-06-26 00:36:22 2026-06-26 00:36:22 +03:00
Hamza-Ayed cdd1349aaf Update: 2026-06-25 19:22:26 2026-06-25 19:22:26 +03:00
Hamza-Ayed 35e54ea433 Update: 2026-06-25 19:10:25 2026-06-25 19:10:25 +03:00
Hamza-Ayed b00b6a4cde Update: 2026-06-25 19:05:13 2026-06-25 19:05:13 +03:00
Hamza-Ayed 63eea81039 Update: 2026-06-25 19:04:05 2026-06-25 19:04:05 +03:00
Hamza-Ayed b57fd1cecb Update: 2026-06-25 18:59:57 2026-06-25 18:59:57 +03:00
Hamza-Ayed f3bafeb9e1 Update: 2026-06-25 18:57:58 2026-06-25 18:57:58 +03:00
Hamza-Ayed 7368feed11 Update: 2026-06-25 18:56:57 2026-06-25 18:56:57 +03:00
Hamza-Ayed 4a6b6d52a3 Update: 2026-06-25 18:53:08 2026-06-25 18:53:08 +03:00
Hamza-Ayed 85ff15cabe Update: 2026-06-25 18:41:32 2026-06-25 18:41:33 +03:00
Hamza-Ayed 9b61bd50c8 Update: 2026-06-25 18:39:01 2026-06-25 18:39:01 +03:00
Hamza-Ayed a4d9d8e74c Update: 2026-06-25 18:05:26 2026-06-25 18:05:26 +03:00
Hamza-Ayed 1e24c3d0c8 add country-specific field config to review page, add warning snackbar, write AI extraction prompt 2026-06-25 17:40:09 +03:00
Hamza-Ayed 28b8558b6d add 8-tab review page, review controller, updateDriverToActive handles new fields, drivers_cant_register navigates to review 2026-06-25 17:05:11 +03:00
Hamza-Ayed d4db89f04e add documents+ai_data to getDriverDetails, create rejectDriver endpoint, add rejected_reason column 2026-06-25 17:01:44 +03:00
Hamza-Ayed 0c5088fd6d add ai_data + user_input to driver table, status=pending_review, save raw Gemini response 2026-06-25 16:54:21 +03:00
Hamza-Ayed 93bdaee388 increase reg token expiry to 3600s, remove backup URL 2026-06-25 15:55:04 +03:00
Hamza-Ayed 75e4524329 fix upload: parse nested message.url, backup retries=1, connect.php auth 2026-06-25 04:30:52 +03:00
Hamza-Ayed 0b9e5dfa03 remove random suffix from uploaded filenames: now {driverID}_{imageType}.{ext} 2026-06-25 04:21:58 +03:00
Hamza-Ayed f5a5ffc10c Update: 2026-06-25 03:58:15 2026-06-25 04:00:27 +03:00
Hamza-Ayed 5b5033b110 Update: 2026-06-25 03:56:11 2026-06-25 03:58:30 +03:00
Hamza-Ayed 4f4958defb Update: 2026-06-25 03:51:57 2026-06-25 03:55:10 +03:00
Hamza-Ayed 6db2ece2ce Update: 2026-06-25 03:43:29 2026-06-25 03:43:29 +03:00
Hamza-Ayed 89c1348f08 Update: 2026-06-25 03:28:59 2026-06-25 03:28:59 +03:00
Hamza-Ayed 85e85fe4d3 Update: 2026-06-25 02:55:24 2026-06-25 02:55:24 +03:00
Hamza-Ayed 98a8a2ae3d Update: 2026-06-25 02:28:33 2026-06-25 02:28:33 +03:00
Hamza-Ayed 1ff13f09ac Update: 2026-06-25 01:37:22 2026-06-25 01:37:23 +03:00
Hamza-Ayed 014b9a78da Update: 2026-06-25 01:22:26 2026-06-25 01:22:26 +03:00
Hamza-Ayed 0c9f89fc60 Update: 2026-06-25 01:15:22 2026-06-25 01:15:22 +03:00
Hamza-Ayed e157c8ec12 Update: 2026-06-25 01:03:54 2026-06-25 01:03:55 +03:00
Hamza-Ayed eeb4e21f87 Update: 2026-06-25 00:50:19 2026-06-25 00:50:19 +03:00
Hamza-Ayed 0671388e15 Update: 2026-06-25 00:05:45 2026-06-25 00:05:45 +03:00
Hamza-Ayed 262d882bfe Fix loginFromGooglePassenger to support passengerID request body fallback during first-time registration login flow 2026-06-25 00:02:38 +03:00
Hamza-Ayed 8839a500fc Add diagnose_login.php for database query diagnostics 2026-06-25 00:00:37 +03:00
Hamza-Ayed a56e318e20 Add check_server_code.php for server diagnostics 2026-06-24 23:59:51 +03:00
Hamza-Ayed 3c057dfbf8 Update: 2026-06-24 23:53:38 2026-06-24 23:53:38 +03:00
Hamza-Ayed 5f431b4f19 Fix loginFromGooglePassenger id mapping fallback to sub when user_id is new 2026-06-24 23:52:32 +03:00
Hamza-Ayed aba42f0a7f Update: 2026-06-24 23:51:26 2026-06-24 23:51:26 +03:00
Hamza-Ayed c9d07f91fe Fix loginFromGooglePassenger verification constraint 2026-06-24 23:51:06 +03:00
Hamza-Ayed d7f5922a3b Fix passenger registration auth bypass in JwtService 2026-06-24 23:47:41 +03:00
Hamza-Ayed cca16053da Fix OTP verification success response payload and restore deterministic encryptData 2026-06-24 23:24:41 +03:00
Hamza-Ayed 2ee3a14c6d Fix OTP verification success response payload and restore deterministic encryptData 2026-06-24 23:11:24 +03:00
Hamza-Ayed 7b0283473e Fix timezone bug in request.php using MySQL DATE_ADD and clean up EncryptionHelper 2026-06-24 23:03:45 +03:00
Hamza-Ayed 12dfb25629 Update: 2026-06-24 22:56:39 2026-06-24 22:56:39 +03:00
Hamza-Ayed f75e456aac Update: 2026-06-24 16:27:39 2026-06-24 16:27:41 +03:00
Hamza-Ayed 3fcc6e76fd Update: 2026-06-24 16:19:03 2026-06-24 16:19:04 +03:00
Hamza-Ayed 2e4bf784ec Update: 2026-06-24 16:18:03 2026-06-24 16:18:03 +03:00
Hamza-Ayed dfeea2d95a Update: 2026-06-24 16:15:00 2026-06-24 16:15:01 +03:00
Hamza-Ayed 6866e2171b Update: 2026-06-24 16:12:30 2026-06-24 16:12:30 +03:00
Hamza-Ayed 89dca66892 Update: 2026-06-24 16:08:47 2026-06-24 16:08:47 +03:00
Hamza-Ayed 4894d566a0 Update: 2026-06-24 16:04:53 2026-06-24 16:04:53 +03:00
Hamza-Ayed 3b2c2a86c6 Update: 2026-06-23 18:44:45 2026-06-23 18:44:45 +03:00
Hamza-Ayed ed6e34cc4b Update: 2026-06-23 18:36:09 2026-06-23 18:36:09 +03:00
Hamza-Ayed bb13eb74e8 Update: 2026-06-23 18:32:23 2026-06-23 18:32:23 +03:00
Hamza-Ayed e4f86c5efd Update: 2026-06-23 18:27:04 2026-06-23 18:27:04 +03:00
Hamza-Ayed 4043d939f2 Update: 2026-06-23 18:21:54 2026-06-23 18:21:54 +03:00
Hamza-Ayed f25066140f Update: 2026-06-23 18:19:33 2026-06-23 18:19:33 +03:00
Hamza-Ayed c859b8006b Update: 2026-06-23 18:18:30 2026-06-23 18:18:30 +03:00
Hamza-Ayed a2f4f5d304 Update: 2026-06-23 18:14:22 2026-06-23 18:14:22 +03:00
Hamza-Ayed 342611a158 Update: 2026-06-23 18:12:45 2026-06-23 18:12:45 +03:00
Hamza-Ayed 2af9859ad8 Update: 2026-06-23 18:08:22 2026-06-23 18:08:22 +03:00
Hamza-Ayed b60e06b890 Update: 2026-06-23 18:03:42 2026-06-23 18:03:42 +03:00
Hamza-Ayed b110e03039 Update: 2026-06-23 17:58:46 2026-06-23 17:58:46 +03:00
Hamza-Ayed eafc04a091 Update: 2026-06-23 17:57:07 2026-06-23 17:57:07 +03:00
Hamza-Ayed 6ad7aceee1 Update: 2026-06-23 17:46:32 2026-06-23 17:46:33 +03:00
Hamza-Ayed 52c4f96976 Update: 2026-06-23 17:42:09 2026-06-23 17:42:09 +03:00
Hamza-Ayed 148ca3af1d Update: 2026-06-23 17:25:29 2026-06-23 17:25:29 +03:00
Hamza-Ayed 4e2f165d60 Update: 2026-06-23 16:25:59 2026-06-23 16:25:59 +03:00
Hamza-Ayed c54a8f43fe Update: 2026-06-23 16:17:20 2026-06-23 16:17:20 +03:00
Hamza-Ayed bea94ed617 Update: 2026-06-23 15:35:14 2026-06-23 15:35:14 +03:00
Hamza-Ayed b4d054a870 Update: 2026-06-23 15:21:45 2026-06-23 15:21:45 +03:00
Hamza-Ayed efe26c95be Update: 2026-06-22 00:31:28 2026-06-22 00:31:29 +03:00
Hamza-Ayed e73be65a72 Update: 2026-06-21 18:58:05 2026-06-21 18:58:13 +03:00
Hamza-Ayed b492b5076b feat: implement accessibility-based scraper service and standalone worker backend with device registration UI 2026-06-21 15:21:16 +03:00
Hamza-Ayed ce6f22dc71 Update: 2026-06-21 03:02:56 2026-06-21 03:02:56 +03:00
Hamza-Ayed 2ac086d1fd Update: 2026-06-21 02:53:01 2026-06-21 02:53:02 +03:00
Hamza-Ayed b2fae9ec66 Update: 2026-06-21 02:07:00 2026-06-21 02:07:00 +03:00
Hamza-Ayed af3dcae5b7 Update: 2026-06-19 15:33:32 2026-06-19 15:33:32 +03:00
Hamza-Ayed 017bec86fa Update: 2026-06-19 14:01:15 2026-06-19 14:01:15 +03:00
Hamza-Ayed a0495147c4 Update: 2026-06-19 02:01:34 2026-06-19 02:01:34 +03:00
Hamza-Ayed a003bf78c4 Update: 2026-06-19 01:47:48 2026-06-19 01:47:48 +03:00
Hamza-Ayed f13faa8c31 Update: 2026-06-18 16:46:30 2026-06-18 16:46:30 +03:00
Hamza-Ayed 8b52d2f115 feat: add Nabeh integration with phone-to-user resolution and environment configuration support 2026-06-18 14:59:24 +03:00
Hamza-Ayed 72fa97477b Update: 2026-06-17 18:22:52 2026-06-17 18:22:52 +03:00
Hamza-Ayed b67417eb98 Add Nabeh integration: nabeh/ endpoints with NABEH_API_KEY auth 2026-06-17 18:22:45 +03:00
Hamza-Ayed c2c4ed22e3 Fix: SSL pinning, root detection, network resilience, and compile errors
SSL pinning (all 4 apps): IOClient import, subdomain-safe domain matching
Root detection (all 4 apps): modern Magisk/KernelSU/APatch paths
Security checks (rider/driver/admin): PlatformException -> false
Rider crud: 60s timeout, 3 retries, exponential backoff, JWT pre-validation
Driver crud: exponential backoff for TimeoutException
RxInt compile (rider/driver): 10.obs -> RxInt(10)
Admin device_info: add missing imports, fix RxInt, add package_info_plus
2026-06-17 16:41:02 +03:00
Hamza-Ayed 264e005a7b fix: PHP syntax errors in upload files and composer config
- Fix PHP 8.x string interpolation syntax in upload log calls
- Fix const getenv() -> runtime variable in uploadSyrianDocs.php
- Add composer security advisory ignore for firebase/php-jwt
- Run composer update to sync lock file
2026-06-17 08:41:16 +03:00
Hamza-Ayed 2c56d2f41e Fix #24: Flutter generated plugin files + pubspec.lock after crypto dependency addition 2026-06-17 08:19:09 +03:00
Hamza-Ayed 752bbf3a63 Fix #23: JWT storage consistency across all Flutter apps
- siro_admin: added FlutterSecureStorage write alongside GetStorage
- siro_service: added FlutterSecureStorage write in login + guest JWT flows
- siro_rider: added FlutterSecureStorage write in guest + token-refresh flows
  (full-credential login already wrote to both)
- siro_driver: already wrote to both (no change needed)
- All apps now write JWT to both GetStorage and FlutterSecureStorage
2026-06-17 08:03:19 +03:00
Hamza-Ayed a8748cf4c9 Fix #22: Medium-severity fixes (M-01 through M-07)
M-01: Host header injection - replaced HTTP_HOST with APP_DOMAIN
M-02: Unauthenticated CRUD - ownership checks on carDrivers add/delete
M-03: MD5 tracking token - replaced md5() with hash_hmac sha256
M-04: Webhook SMS - absolute log path instead of relative
M-05: Weak 3-digit OTP - already noted as requirement (Fix #5)
M-06: Redis without auth - added password + prefix to cancel_ride_by_driver
M-07: SSRF bypass - str_ends_with -> strict equality in allowlist
2026-06-17 07:58:21 +03:00
Hamza-Ayed 3543fdd2cd Fix #21: High-severity fixes (H-01 through H-06)
H-01: Egypt document uploads - added path traversal prevention (basename),
       replaced HTTP_HOST with APP_DOMAIN env var
H-02: 7 remaining hardcoded /home/siro-api/ paths replaced with env vars
       (ENV_FILE_PATH, INTERNAL_SOCKET_KEY_PATH, WEBHOOK_SECRET_KEY_PATH)
H-03: serviceapp/updateDriver.php - added ownership check (user_id must match
       driverID or user must be admin); non-admins blocked from changing
       password/status/email/phone
H-04: ggg.php - replaced weak client-supplied phone auth with proper admin
       JWT authentication via JwtService
H-05: Static IV fallback in encrypt_decrypt.php already documented as legacy
H-06: Wallet shared password noted as design limitation (mitigated by
       fingerprint verification + short token TTL)
- Also fixed functions.php log message (removed hardcoded path)
2026-06-17 07:56:57 +03:00
Hamza-Ayed 50a5308f43 Fix #20: DDL removal from register.php, CORS policy, secret leak
- Removed ALTER TABLE DDL statements from Admin/auth/register.php (belongs in migration scripts)
- Added validated CORS with configurable allowed origins via CORS_ALLOWED_ORIGINS env var
- Removed  assignment in load_env.php (secrets no longer exposed in superglobal)
2026-06-17 07:51:01 +03:00
Hamza-Ayed 2d607d9e90 Fix #19: Plaintext OTP hashing + hardcoded server paths
- Changed OTP storage in Admin/auth/login.php from plaintext to sha256 hash
- Updated Admin/auth/verify_login.php to hash user input before comparison
- Replaced hardcoded /home/siro-api/ paths with environment variables:
  - ERROR_LOG_PATH, ENV_FILE_PATH, SECRET_KEY_PAY_PATH, SECRET_KEY_PATH
  - Falls back to __DIR__-relative paths when env vars are unset
2026-06-17 07:49:46 +03:00
Hamza-Ayed 790d58aaa2 remove temp fix script 2026-06-17 07:48:34 +03:00
Hamza-Ayed 72eeb24cd7 Fix #18: Exception leak remediation across 87 PHP files
- Replaced all client-facing $e->getMessage() with generic error messages
- Added error_log() with filename prefix to all catch blocks
- Covered jsonError(), echo, and json_encode() response patterns
- Also fixed 2 remaining display_errors=1 and add_invoice.php leak
- Script-assisted fix for 75 files, manual fix for 12 remaining edge cases
2026-06-17 07:48:31 +03:00
Hamza-Ayed e51d266a0f Fix #17: SQL injection + mass data exposure (backend)
- Fixed SQL injection in ride/license/get.php (interpolated variable → parameterized query)
- Added admin role checks to all 3 mass data endpoints (driver tokens, passenger tokens, phones+tokens)
- Added pagination (50/page) to all 4 mass data endpoints
- Fixed LIMIT to use placeholders with type binding
2026-06-17 07:45:35 +03:00
Hamza-Ayed f528e1d3c5 Fix #16: SSL pinning in all 4 Flutter apps
- Created ssl_pinning.dart with SHA-256 DER hash pinning for intaleq.xyz and siromove.com
- Replaced http.post/http.get with pinned client in all CRUD classes
- Added crypto dependency to siro_admin and siro_driver pubspec
2026-06-17 07:40:43 +03:00
Hamza-Ayed 0e28814e7d Fix #15: PCI-DSS compliance - remove persistent CVV storage from Flutter apps 2026-06-17 07:26:27 +03:00
Hamza-Ayed 16331bd35d Fix #14: Remove unused privateKeyFCM (Firebase service account key) from Flutter apps 2026-06-17 07:21:18 +03:00
Hamza-Ayed 623d66a3d8 Fix #13: Remove hardcoded PII from Flutter apps, enable root detection in siro_admin 2026-06-17 07:13:18 +03:00
Hamza-Ayed 1a9619f9f8 fix(security): fix login AND logic to OR, add signup input validation, separate OTP rate limit keys 2026-06-17 07:05:58 +03:00
Hamza-Ayed 70c06edd71 fix(security): fix host header injection in upload_audio, email header injection, add SSL verify to MTN curl 2026-06-17 06:57:56 +03:00
Hamza-Ayed 75aeb73f27 fix(security): fix openssl_sign key resource in MTN initiate, add google-services.json to gitignore 2026-06-17 06:55:36 +03:00
Hamza-Ayed 1d3ea597f4 fix(security): wallet balance check with FOR UPDATE, remove user-supplied ID in signup, hardcoded IP to env 2026-06-17 06:53:00 +03:00
Hamza-Ayed 3dad979eb5 fix(security): remove JWT role extraction without signature, add OTP replay protection, fix user enumeration 2026-06-17 06:45:53 +03:00
Hamza-Ayed 81376a2245 fix(security): remove SSL bypass + hardcoded creds in face_detect, rider debug CA overrides, fix siro_service manifest 2026-06-17 06:36:26 +03:00
Hamza-Ayed c82b0071bb fix(security): wallet race conditions - FOR UPDATE + atomic claims on payments, webhooks, bonuses 2026-06-17 06:34:51 +03:00
Hamza-Ayed 0ceb67ee56 fix(security): fix SQL injection in updatePaymetToPaid, OTP random_int, static IV encryption, storage mismatch 2026-06-17 06:31:13 +03:00
Hamza-Ayed 8c6dea5d96 fix(security): add auth to FCM relay, HMAC to shamcash webhook, fix jwtconnect webhook bypass 2026-06-17 06:27:07 +03:00
Hamza-Ayed d6f29802e0 fix(security): fix pervasive IDOR - force JWT user identity in 9 endpoints, fix host injection, exception leaks, wallet auth 2026-06-17 06:22:41 +03:00
Hamza-Ayed 4a9e6b22c5 fix(security): add role checks to 7 admin endpoints, fix undefined vars in admin_update_passenger, add input validation to send_whatsapp 2026-06-17 06:19:47 +03:00
Hamza-Ayed 9bbda24d4a fix(security): add .gitignore, remove PEM keys and debug endpoints from tracking 2026-06-17 06:17:03 +03:00
Hamza-Ayed 28d30e3359 Update: 2026-06-17 03:24:05 2026-06-17 03:24:05 +03:00
Hamza-Ayed fd30b9f6fa feat: add generate_study script for automated study content creation 2026-06-16 22:44:47 +03:00
Hamza-Ayed 2c3816badb Update: 2026-06-16 22:44:11 2026-06-16 22:44:11 +03:00
Hamza-Ayed b516fbc4ed Update: 2026-06-16 17:47:17 2026-06-16 17:47:19 +03:00
10333 changed files with 497661 additions and 68012 deletions
Vendored
BIN
View File
Binary file not shown.
+18
View File
@@ -0,0 +1,18 @@
{
"version": "0.0.1",
"configurations": [
{
"name": "transit-dashboard",
"runtimeExecutable": "npm",
"runtimeArgs": ["run", "dev"],
"port": 5183,
"cwd": "transit_dashboard"
},
{
"name": "siro-admin",
"runtimeExecutable": "python3",
"runtimeArgs": ["-m", "http.server", "8899", "--directory", "dashboard/siro-admin"],
"port": 8899
}
]
}
+1
View File
@@ -0,0 +1 @@
bd73a4b3-6e9c-4611-af5a-f87b31b166be
@@ -0,0 +1 @@
{}
@@ -0,0 +1 @@
{"session_id": 1782053786182, "last_ping": 1782053786182}
+35
View File
@@ -0,0 +1,35 @@
# INTRODUCTION
#
# This is the Flutter and Dart telemetry reporting
# configuration file.
#
# Lines starting with a #" are documentation that
# the tools maintain automatically.
#
# All other lines are configuration lines. They have
# the form "name=value". If multiple lines contain
# the same configuration name with different values,
# the parser will default to a conservative value.
# DISABLING TELEMETRY REPORTING
#
# To disable telemetry reporting, set "reporting" to
# the value "0" and to enable, set to "1":
reporting=1
# NOTIFICATIONS
#
# Each tool records when it last informed the user about
# analytics reporting and the privacy policy.
#
# The following tools have so far read this file:
#
# dart-tools (Dart CLI developer tool)
# devtools (DevTools debugging and performance tools)
# flutter-tools (Flutter CLI developer tool)
#
# For each one, the file may contain a configuration line
# where the name is the code in the list above, e.g. "dart-tool",
# and the value is a date in the form YYYY-MM-DD, a comma, and
# a number representing the version of the message that was
# displayed.
Binary file not shown.

After

Width:  |  Height:  |  Size: 83 B

@@ -0,0 +1,147 @@
€ýELEMENT_TYPE_ENDELEMENT_TYPE_VOIDELEMENT_TYPE_BOOLEANELEMENT_TYPE_CHARELEMENT_TYPE_I1ELEMENT_TYPE_U1ELEMENT_TYPE_I2ELEMENT_TYPE_U2ELEMENT_TYPE_I4ELEMENT_TYPE_U4ELEMENT_TYPE_I8ELEMENT_TYPE_U8ELEMENT_TYPE_R4ELEMENT_TYPE_R8ELEMENT_TYPE_STRINGELEMENT_TYPE_PTRELEMENT_TYPE_BYREFELEMENT_TYPE_VALUETYPEELEMENT_TYPE_CLASSELEMENT_TYPE_VARELEMENT_TYPE_ARRAYELEMENT_TYPE_GENERICINSTELEMENT_TYPE_TYPEDBYREFELEMENT_TYPE_IELEMENT_TYPE_UELEMENT_TYPE_FNPTRELEMENT_TYPE_OBJECTELEMENT_TYPE_SZARRAYELEMENT_TYPE_MVARELEMENT_TYPE_CMOD_REQDELEMENT_TYPE_CMOD_OPTELEMENT_TYPE_INTERNALELEMENT_TYPE_MAXELEMENT_TYPE_MODIFIERELEMENT_TYPE_SENTINELELEMENT_TYPE_PINNED␍evSpecialNameevReservedMaskevRTSpecialNamefdFieldAccessMaskfdPrivateScope fdPrivate␍fdFamANDAssem
fdAssemblyfdFamily fdFamORAssemfdPublicfdStatic
fdInitOnly fdLiteralfdNotSerialized␍fdSpecialName␍fdPinvokeImplfdReservedMaskfdRTSpecialNamefdHasFieldMarshal fdHasDefault␍fdHasFieldRVAgpVarianceMask gpNonVariant gpCovariantgpContravariantgpSpecialConstraintMaskgpNoSpecialConstraintgpReferenceTypeConstraint gpNotNullableValueTypeConstraintgpDefaultConstructorConstraintmdMemberAccessMaskmdPrivateScope mdPrivate␍mdFamANDAssemmdAssemmdFamily mdFamORAssemmdPublicmdStaticmdFinal mdVirtual mdHideBySigmdVtableLayoutMask mdReuseSlot mdNewSlotmdCheckAccessOnOverride
mdAbstract␍mdSpecialName␍mdPinvokeImplmdUnmanagedExportmdReservedMaskmdRTSpecialName␍mdHasSecuritymdRequireSecObjectmiCodeTypeMaskmiILmiNativemiOPTIL miRuntime␍miManagedMask miUnmanaged miManaged miForwardRef␍miPreserveSigmiInternalCallmiSynchronized miNoInliningmiAggressiveInliningmiNoOptimizationmiMaxMethodImplValNATIVE_TYPE_ENDNATIVE_TYPE_VOIDNATIVE_TYPE_BOOLEANNATIVE_TYPE_I1NATIVE_TYPE_U1NATIVE_TYPE_I2NATIVE_TYPE_U2NATIVE_TYPE_I4NATIVE_TYPE_U4NATIVE_TYPE_I8NATIVE_TYPE_U8NATIVE_TYPE_R4NATIVE_TYPE_R8NATIVE_TYPE_SYSCHARNATIVE_TYPE_VARIANTNATIVE_TYPE_CURRENCYNATIVE_TYPE_PTRNATIVE_TYPE_DECIMALNATIVE_TYPE_DATENATIVE_TYPE_BSTRNATIVE_TYPE_LPSTRNATIVE_TYPE_LPWSTRNATIVE_TYPE_LPTSTRNATIVE_TYPE_FIXEDSYSSTRINGNATIVE_TYPE_OBJECTREFNATIVE_TYPE_IUNKNOWNNATIVE_TYPE_IDISPATCHNATIVE_TYPE_STRUCTNATIVE_TYPE_INTFNATIVE_TYPE_SAFEARRAYNATIVE_TYPE_FIXEDARRAYNATIVE_TYPE_INTNATIVE_TYPE_UINTNATIVE_TYPE_NESTEDSTRUCTNATIVE_TYPE_BYVALSTRNATIVE_TYPE_ANSIBSTRNATIVE_TYPE_TBSTRNATIVE_TYPE_VARIANTBOOLNATIVE_TYPE_FUNCNATIVE_TYPE_ASANYNATIVE_TYPE_ARRAYNATIVE_TYPE_LPSTRUCTNATIVE_TYPE_CUSTOMMARSHALERNATIVE_TYPE_IINSPECTABLENATIVE_TYPE_HSTRINGNATIVE_TYPE_ERRORNATIVE_TYPE_MAXpdInpdOut
pdOptionalpdReservedMask pdHasDefaultpdHasFieldMarshalpdUnusedpeNotpeILonlype32BitRequiredpe32Plus␍pe32Unmanagedpe32BitPreferred
pmNoMangle␍pmCharSetMaskpmCharSetNotSpec␍pmCharSetAnsipmCharSetUnicode␍pmCharSetAutopmBestFitUseAssempmBestFitEnabledpmBestFitDisabled␍pmBestFitMaskpmThrowOnUnmappableCharUseAssempmThrowOnUnmappableCharEnabledpmThrowOnUnmappableCharDisabledpmThrowOnUnmappableCharMaskpmSupportsLastErrorpmCallConvMaskpmCallConvWinapipmCallConvCdeclpmCallConvStdcallpmCallConvThiscallpmCallConvFastcall
pmMaxValue␍prSpecialNameprReservedMaskprRTSpecialName prHasDefaultprUnused mdtModule
mdtTypeRef
mdtTypeDef mdtFieldDef mdtMethodDef mdtParamDefmdtInterfaceImpl mdtMemberRefmdtCustomAttribute␍mdtPermission mdtSignaturemdtEvent mdtProperty mdtModuleRef mdtTypeSpec mdtAssemblymdtAssemblyRefmdtFilemdtExportedTypemdtManifestResourcemdtGenericParam␍mdtMethodSpecmdtGenericParamConstraint mdtStringmdtName mdtBaseTypetdVisibilityMask tdNotPublictdPublictdNestedPublictdNestedPrivatetdNestedFamilytdNestedAssemblytdNestedFamANDAssemtdNestedFamORAssem tdLayoutMask tdAutoLayouttdSequentialLayouttdExplicitLayouttdClassSemanticsMasktdClass tdInterface
tdAbstracttdSealed␍tdSpecialNametdImporttdSerializabletdWindowsRuntimetdStringFormatMask tdAnsiClasstdUnicodeClass tdAutoClasstdCustomFormatClasstdCustomFormatMasktdBeforeFieldInit tdForwardertdReservedMasktdRTSpecialName␍tdHasSecurity�
CorElementType CorEventAttr CorFieldAttrCorGenericParamAttr␍CorMethodAttr␍CorMethodImpl␍CorNativeType CorParamAttr CorPEKind␍CorPinvokeMapCorPropertyAttr CorTokenType CorTypeAttrELEMENT_TYPE_ENDELEMENT_TYPE_VOIDELEMENT_TYPE_BOOLEANELEMENT_TYPE_CHARELEMENT_TYPE_I1ELEMENT_TYPE_U1ELEMENT_TYPE_I2ELEMENT_TYPE_U2ELEMENT_TYPE_I4ELEMENT_TYPE_U4ELEMENT_TYPE_I8ELEMENT_TYPE_U8ELEMENT_TYPE_R4ELEMENT_TYPE_R8ELEMENT_TYPE_STRINGELEMENT_TYPE_PTRELEMENT_TYPE_BYREFELEMENT_TYPE_VALUETYPEELEMENT_TYPE_CLASSELEMENT_TYPE_VARELEMENT_TYPE_ARRAYELEMENT_TYPE_GENERICINSTELEMENT_TYPE_TYPEDBYREFELEMENT_TYPE_IELEMENT_TYPE_UELEMENT_TYPE_FNPTRELEMENT_TYPE_OBJECTELEMENT_TYPE_SZARRAYELEMENT_TYPE_MVARELEMENT_TYPE_CMOD_REQDELEMENT_TYPE_CMOD_OPTELEMENT_TYPE_INTERNALELEMENT_TYPE_MAXELEMENT_TYPE_MODIFIERELEMENT_TYPE_SENTINELELEMENT_TYPE_PINNED␍evSpecialNameevReservedMaskevRTSpecialNamefdFieldAccessMaskfdPrivateScope fdPrivate␍fdFamANDAssem
fdAssemblyfdFamily fdFamORAssemfdPublicfdStatic
fdInitOnly fdLiteralfdNotSerialized␍fdSpecialName␍fdPinvokeImplfdReservedMaskfdRTSpecialNamefdHasFieldMarshal fdHasDefault␍fdHasFieldRVAgpVarianceMask gpNonVariant gpCovariantgpContravariantgpSpecialConstraintMaskgpNoSpecialConstraintgpReferenceTypeConstraint gpNotNullableValueTypeConstraintgpDefaultConstructorConstraintmdMemberAccessMaskmdPrivateScope mdPrivate␍mdFamANDAssemmdAssemmdFamily mdFamORAssemmdPublicmdStaticmdFinal mdVirtual mdHideBySigmdVtableLayoutMask mdReuseSlot mdNewSlotmdCheckAccessOnOverride
mdAbstract␍mdSpecialName␍mdPinvokeImplmdUnmanagedExportmdReservedMaskmdRTSpecialName␍mdHasSecuritymdRequireSecObjectmiCodeTypeMaskmiILmiNativemiOPTIL miRuntime␍miManagedMask miUnmanaged miManaged miForwardRef␍miPreserveSigmiInternalCallmiSynchronized miNoInliningmiAggressiveInliningmiNoOptimizationmiMaxMethodImplValNATIVE_TYPE_ENDNATIVE_TYPE_VOIDNATIVE_TYPE_BOOLEANNATIVE_TYPE_I1NATIVE_TYPE_U1NATIVE_TYPE_I2NATIVE_TYPE_U2NATIVE_TYPE_I4NATIVE_TYPE_U4NATIVE_TYPE_I8NATIVE_TYPE_U8NATIVE_TYPE_R4NATIVE_TYPE_R8NATIVE_TYPE_SYSCHARNATIVE_TYPE_VARIANTNATIVE_TYPE_CURRENCYNATIVE_TYPE_PTRNATIVE_TYPE_DECIMALNATIVE_TYPE_DATENATIVE_TYPE_BSTRNATIVE_TYPE_LPSTRNATIVE_TYPE_LPWSTRNATIVE_TYPE_LPTSTRNATIVE_TYPE_FIXEDSYSSTRINGNATIVE_TYPE_OBJECTREFNATIVE_TYPE_IUNKNOWNNATIVE_TYPE_IDISPATCHNATIVE_TYPE_STRUCTNATIVE_TYPE_INTFNATIVE_TYPE_SAFEARRAYNATIVE_TYPE_FIXEDARRAYNATIVE_TYPE_INTNATIVE_TYPE_UINTNATIVE_TYPE_NESTEDSTRUCTNATIVE_TYPE_BYVALSTRNATIVE_TYPE_ANSIBSTRNATIVE_TYPE_TBSTRNATIVE_TYPE_VARIANTBOOLNATIVE_TYPE_FUNCNATIVE_TYPE_ASANYNATIVE_TYPE_ARRAYNATIVE_TYPE_LPSTRUCTNATIVE_TYPE_CUSTOMMARSHALERNATIVE_TYPE_IINSPECTABLENATIVE_TYPE_HSTRINGNATIVE_TYPE_ERRORNATIVE_TYPE_MAXpdInpdOut
pdOptionalpdReservedMask pdHasDefaultpdHasFieldMarshalpdUnusedpeNotpeILonlype32BitRequiredpe32Plus␍pe32Unmanagedpe32BitPreferred
pmNoMangle␍pmCharSetMaskpmCharSetNotSpec␍pmCharSetAnsipmCharSetUnicode␍pmCharSetAutopmBestFitUseAssempmBestFitEnabledpmBestFitDisabled␍pmBestFitMaskpmThrowOnUnmappableCharUseAssempmThrowOnUnmappableCharEnabledpmThrowOnUnmappableCharDisabledpmThrowOnUnmappableCharMaskpmSupportsLastErrorpmCallConvMaskpmCallConvWinapipmCallConvCdeclpmCallConvStdcallpmCallConvThiscallpmCallConvFastcall
pmMaxValue␍prSpecialNameprReservedMaskprRTSpecialName prHasDefaultprUnused mdtModule
mdtTypeRef
mdtTypeDef mdtFieldDef mdtMethodDef mdtParamDefmdtInterfaceImpl mdtMemberRefmdtCustomAttribute␍mdtPermission mdtSignaturemdtEvent mdtProperty mdtModuleRef mdtTypeSpec mdtAssemblymdtAssemblyRefmdtFilemdtExportedTypemdtManifestResourcemdtGenericParam␍mdtMethodSpecmdtGenericParamConstraint mdtStringmdtName mdtBaseTypetdVisibilityMask tdNotPublictdPublictdNestedPublictdNestedPrivatetdNestedFamilytdNestedAssemblytdNestedFamANDAssemtdNestedFamORAssem tdLayoutMask tdAutoLayouttdSequentialLayouttdExplicitLayouttdClassSemanticsMasktdClass tdInterface
tdAbstracttdSealed␍tdSpecialNametdImporttdSerializabletdWindowsRuntimetdStringFormatMask tdAnsiClasstdUnicodeClass tdAutoClasstdCustomFormatClasstdCustomFormatMasktdBeforeFieldInit tdForwardertdReservedMasktdRTSpecialName␍tdHasSecurity
Deprecatedint�æÿ(b©ù¡Œ¾ŠÐ,ö¦À£¥ÀÔw†N/0U€¢€£€ñ� �7�N�|�£�¤�·�æ‚‚‚%‚W‚‚‚ƒ‚›‚Ê‚ò‚óƒƒ?ƒeƒfƒˆƒµƒÛƒÜƒû„(„N„O„q„ž„Ąńä……7…8…Z…‡…­…®…Í…ú† †!†C†p†–†—†¶†ã‡ ‡
‡*‡W‡}‡~‡š‡Ë‡õ‡öˆˆCˆjˆkˆŒˆ¼ˆæˆç‰‰8‰f‰g‰„‰´‰Þ‰ßŠŠ3Š[Š\ЋлŠåŠæ‹‹E‹u‹v‹�‹Ä‹ó‹ôŒŒ@ŒfŒgŒ‘Œ½ŒãŒä��3�]�^�z�«�Ö�׎ŽKŽwŽxŽŸŽÎŽ÷Žø��R�€���§�Ú����R��€�—�Å�í�î‘‘8‘e‘f‘²‘Ä‘÷’@’A’X’‰’Ð’Ò’Ó““$“p“›““Ô”/”W”X”¦”¼”é••••O•d•�•¾•é•ê––K–s–t–º–á———V—�—¨—©—ô˜˜@˜A˜‹˜š˜À˜â˜ã™4™K™u™›™œ™é™ûš!šCšDš“š¡šÇšéšê›4›\›€›�›Â›éœ œ␍œXœ…œ®œ¯œû�&�M�N�š�Å�ì�íž-žYž�ž‚žÑž÷Ÿ$ŸMŸNŸŽŸ½ŸèŸé  G m n ­ Ø ÿ¡¡¡K¡g¡¶¡Ç¡ó¢¢¢E¢o¢•¢–¢²¢Û£££!£N£w£x£³£è¤¤¤\¤�¤¾¤¿¥¥8¥k¥l¥º¥Ì¦
¦D¦E¦”¦´¦ð§(§*§+§g§}§œ§Ì§ø§ù¨/¨[¨ƒ¨„¨Ë¨ò©©©g©’©¹©ºªª(ªIªJª“ª¹ªÛªÜ«*«G«q«—«˜«æ«ó¬¬;¬<¬Œ¬©¬Ï¬ñ¬ò­(­M­n­o­¢­É­ì­í®>®J®s®˜®™®¿®ï¯¯¯g¯Š¯³¯Ø¯Ù°&°M°p°q°Á°Ó±±9±:±n±–±º±»²²3²Z²[²¦²Ñ²ø²ù³I³x³£³¤³ä´´8´9´‡´ž´Ë´ô´õµ6µaµˆµ‰µØ¶¶4¶6¶7¶y¶�¶´¶à·· ·R·i·‹·©·ª·ä¸
¸,¸-¸f¸‹¸¬¸­¸ö¹¹5¹X¹Y¹�¹È¹ï¹ðº-ºVº{º|º·ºÞ»»»S»d»Ž»´»µ¼¼¼=¼d¼e¼¥¼Ñ¼ù¼ú½?½k½“½”½Ç½ñ¾¾¾W¾‰¾·¾¸¾ñ¿¿I¿J¿¿¯¿Û¿Ý¿ÞÀ@À@.À@[À@�À@¯À@ÖÀAÀA1ÀA]ÀA‚ÀA®ÀAÓÀAÿÀB$ÀBPÀBuÀB¡ÀBÆÀBòÀCÀCCÀChÀC”ÀC¹ÀCåÀD
ÀD6ÀD[ÀDŒÀD¶ÀDçÀEÀECÀEnÀE›ÀEÂÀEóÀFÀFLÀFtÀF¢ÀFÊÀFùÀG"ÀGRÀG|ÀG¬ÀGÖÀHÀH@ÀHsÀH ÀHÒÀHþÀI1ÀI^ÀIŽÀI¸ÀIæÀJÀJAÀJnÀJ¢ÀJÐÀJýÀK$ÀKRÀKzÀK°ÀKàÀLÀL>ÀLpÀLœÀLËÀLôÀM)ÀMXÀM†ÀM®ÀMÝÀNÀN5ÀN^ÀN�ÀN¼ÀNõÀO(ÀO^ÀOŽÀO¿ÀOêÀPÀPBÀPoÀP–ÀP˜ÀP™ÀPßÀPôÀQ7ÀQYÀQwÀQxÀQ½ÀQàÀQÿÀRÀR0ÀRXÀR|ÀR}ÀR½ÀRéÀSÀSÀSJÀStÀSšÀS›ÀSÚÀT ÀT4ÀT5ÀTCÀTiÀT‹ÀT�ÀTŽÀTÑÀTãÀUÀU2ÀUUÀUVÀU”ÀUºÀUàÀUáÀVÀVCÀVpÀVqÀV®ÀVÔÀVúÀVûÀW-ÀWXÀWƒÀW„ÀWÓÀWòÀX ÀXNÀXPÀXQÀX{ÀX‘ÀXºÀXâÀYÀYÀYÀYBÀYiÀYjÀYzÀY¨ÀYÒÀYÓÀZ␍ÀZ8ÀZ_ÀZ`ÀZ”ÀZÂÀZìÀZíÀ[8À[†À[ÖÀ[èÀ\À\:À\;À\KÀ\zÀ\¥À\¦À\÷À]À]CÀ]mÀ]nÀ]½À]ôÀ^#À^NÀ^OÀ^_À^ŠÀ^±À^²À^ÂÀ^ÿÀ_8À_9À_†À_—À_ÓÀ` À` À`UÀ`qÀ`®À`çÀ`èÀ`øÀa1ÀafÀagÀa·ÀaÙÀb
Àb7Àb8ÀbHÀbtÀbœÀb�ÀbìÀc)ÀcWÀc�Àc‚ÀcÎÀdÀdOÀd|Àd¥Àd¦ÀdôÀeEÀe\Àe‹Àe¶Àe·ÀfÀfRÀf�ÀfÖÀgÀg2Àg3ÀgCÀgsÀgŸÀg Àg°ÀgØÀgüÀgþÀgÿÀh=ÀhUÀh¤ÀhÏÀhöÀh÷Ài7ÀicÀi‹ÀiŒÀiÛÀj
Àj7Àj`ÀjaÀj˜ÀjÂÀjèÀjéÀj÷ÀkÀk?ÀkAÀkBÀknÀkƒÀkªÀkÑÀkùÀl!ÀlIÀlqÀlšÀlÃÀlíÀmÀm@ÀmiÀm—ÀmÅÀmïÀnÀnIÀnyÀn¤ÀnÏÀnùÀo#ÀoIÀooÀo˜ÀoÁÀoëÀpÀp>ÀpgÀp�Àp¹ÀpåÀqÀq6Àq[ÀqˆÀqµÀqæÀrÀrDÀrqÀrœÀrÇÀrþÀs5Às\ÀsƒÀs¨ÀsÍÀsöÀtÀt!Àt"ÀtSÀtgÀt“ÀtÁÀtïÀtðÀu&ÀuOÀuxÀuyÀu«ÀuÑÀu÷ÀuøÀv8ÀvdÀv�Àv‘ÀvÒÀvÿÀw,Àw-ÀwmÀw™ÀwÅÀwÆÀxÀx6ÀxdÀxeÀx²ÀxãÀyÀyÀyaÀy‘ÀyÁÀyÂÀyîÀzÀzBÀzCÀzŒÀz¶ÀzàÀzáÀ{)À{YÀ{‰À{ŠÀ{ÄÀ{òÀ| À|!À|QÀ|ƒÀ|µÀ|¶À|àÀ}À}*À}+À}ZÀ}ƒÀ}¬À}­À}ØÀ~À~(À~)À~[À~�À~§À~¨À~ðÀÀFÀGÀrÀ˜À¾À¿ÀîÀ€À€FÀ€GÀ€�À€¯À€ÝÀ€ÞÀ�"À�RÀ�‚À�ƒÀ�ÀÀ�éÀ‚À‚À‚SÀ‚À‚«À‚¬À‚ïÀƒÀƒAÀƒBÀƒ�Àƒ¥ÀƒÖÀ„À„À„YÀ„›À„ËÀ„ûÀ„üÀ…JÀ…gÀ…–À…ÅÀ…ÆÀ†À†0À†YÀ†ZÀ†©À†¸À†äÀ‡À‡À‡bÀ‡�À‡¼À‡½À‡üÀˆ'ÀˆRÀˆTÀˆUÀˆjÀˆˆÀˆ‰ÀˆšÀˆ¹ÀˆºÀˆÎÀˆðÀˆñÀ‰À‰&À‰'À‰DÀ‰aÀ‰bÀ‰‚À‰ŸÀ‰ À‰½À‰ÚÀ‰ÛÀ‰ûÀŠÀŠÀŠ6ÀŠSÀŠTÀŠtÀŠ‘ÀŠ’ÀНÀŠÌÀŠÍÀŠíÀ‹
À‹ À‹(À‹EÀ‹FÀ‹dÀ‹�À‹‚À‹œÀ‹½À‹¾À‹ÛÀ‹ùÀ‹úÀŒÀŒ:ÀŒ;ÀŒVÀŒ{ÀŒ|ÀŒ—ÀŒ¸ÀŒ¹ÀŒÝÀŒüÀŒýÀ�*À�KÀ�LÀ�sÀ�šÀ�›À�²À�ØÀ�ÙÀ�÷ÀŽÀŽÀŽ=ÀŽZÀŽ[ÀŽxÀŽ™ÀŽšÀŽ´ÀŽÖÀŽ×À�À�:À�;À�`À�€À��À�¥À�ÊÀ�ËÀ�ïÀ�À�À�)À�MÀ�NÀ�cÀ�‚À�ƒÀ�˜À�¼À�½À‘À‘À‘WÀ‘XÀ‘mÀ‘«À‘¬À‘öÀ’À’À’SÀ’rÀ’sÀ’¿À’ÓÀ’óÀ’ôÀ“À“?À“@À“sÀ“’À““À“×À“ñÀ“òÀ”AÀ”_À”`À”©À”ÄÀ”ÅÀ•␍À•À•3À•4À•ƒÀ•˜À•µÀ•¶À–À–À–*À–+À–xÀ–„À–�À–žÀ–æÀ—À—À—AÀ—[À—\À—¥À—ÅÀ—ÆÀ˜À˜.À˜/À˜yÀ˜—À˜˜À˜ÖÀ˜õÀ˜öÀ™CÀ™gÀ™‡À™ˆÀ™ÆÀ™èÀ™éÀšÀš8Àš9ÀšvÀš”Àš•ÀšâÀšñÀ›À›À›8À›UÀ›VÀ›pÀ›ŒÀ›�À›«À›ËÀ›ÌÀœÀœ-Àœ.ÀœnÀœ”Àœ•ÀœÕÀœÿÀ�À�LÀ�\À��À�ŽÀ�ÛÀ�ùÀž(Àž)ÀžFÀžiÀžjÀžžÀž½Àž¾ÀŸÀŸÀŸÀŸmÀŸ‹ÀŸŒÀŸÓÀŸëÀŸìÀ 3À LÀ MÀ ™À ´À ÑÀ ÒÀ¡À¡)À¡BÀ¡CÀ¡‘À¡¬À¡ÅÀ¡ÆÀ¡úÀ¢À¢À¢DÀ¢^À¢_À¢®À¢¸À¢ÔÀ¢ÕÀ¢ùÀ£À£À£fÀ£‡À££À£¤À£ïÀ¤ À¤
À¤XÀ¤hÀ¤�À¤‘À¤ÃÀ¤ÞÀ¤ßÀ¥*À¥HÀ¥IÀ¥’À¥°À¥±À¥ÿÀ¦!À¦"À¦`À¦À¦€À¦ÌÀ¦áÀ§À§À§AÀ§_À§`À§­À§ÐÀ§ÑÀ§ôÀ¨À¨À¨[À¨pÀ¨…À¨†À¨¾À¨×À¨ØÀ©À©'À©(À©oÀ©…À©ŸÀ© À©âÀªÀªÀª<ÀªXÀªYÀª’Àª¬Àª­ÀªüÀ« À«(À«)À«rÀ«‚À« À«¡À«ßÀ«þÀ«ÿÀ¬BÀ¬aÀ¬bÀ¬“À¬°À¬±À¬îÀ­À­À­KÀ­lÀ­mÀ­ À­ÃÀ­ÄÀ­áÀ­ÿÀ® À®<À®XÀ®tÀ®�À®¬À®ÈÀ®äÀ¯À¯À¯8À¯YÀ¯zÀ¯œÀ¯ºÀ¯ÜÀ¯ûÀ°À°:À°[À°|À°¥À°ÉÀ°ìÀ±À±1À±PÀ±tÀ±™À±·À±ÖÀ±ýÀ² À²CÀ²cÀ²‰À²¨À²ÈÀ²èÀ³ À³5À³\À³~À³žÀ³¼À³½À³þÀ´À´À´WÀ´mÀ´nÀ´œÀ´·À´¸À´öÀµÀµÀµLÀµiÀµjÀµ§ÀµÉÀµÊÀµÖÀµïÀµðÀÀ¶4À¶5À¶qÀ¶ŽÀ�À¶ÂÀ¶æÀ¶çÀ·"À·?À·@À·pÀ·’À·“À·àÀ·ýÀ¸"À¸#À¸JÀ¸eÀ¸fÀ¸tÀ¸’À¸“À¸¡À¸ÂÀ¸ÃÀ¸ûÀ¹À¹À¹LÀ¹mÀ¹nÀ¹·ÀºÀºQÀºaÀºÀº€ÀºŽÀº°Àº±À»À»À»=À»>À»‹À»ÀÀ»âÀ»ãÀ»ñÀ¼À¼À¼À¼NÀ¼OÀ¼šÀ¼©À¼ØÀ¼ÙÀ½ À½:À½jÀ½kÀ½yÀ½¥À½¦À½ôÀ¾À¾8À¾9À¾GÀ¾fÀ¾gÀ¾´À¾ïÀ¿À¿À¿[À¿¦À¿ØÀ¿øÀ¿ùÀÀEÀÀ”ÀÀ©ÀÀËÀÀÌÀÁÀÁcÀÁ¬ÀÁãÀÂÀÂÀÂÀÂ8ÀÂ9ÀÂGÀÂbÀÂcÀ°ÀÂÎÀÂÏÀÃ␍ÀÃ,ÀÃ-ÀÃzÀçÀÃÇÀÃÈÀÃýÀÄÀÄÀÄ'ÀÄ@ÀÄAÀÄ_ÀÄ~ÀÄ�ÀĽÀÄÞÀÄþÀÅ#ÀÅDÀÅkÀÅ�ÀÅ®ÀÅËÀÅëÀÆ ÀÆ,ÀÆLÀÆoÀÆ‹ÀƯÀÆ×ÀÆûÀÇÀÇKÀÇiÀÇ…ÀÇ¥ÀǦÀÇÐÀÇõÀÇöÀÈ*ÀÈJÀÈKÀÈ{ÀȘÀÈ™ÀÈ×ÀÈúÀÈûÀÉ:ÀÉ^ÀÉ_ÀÉ�ÀÉÀÀÉÁÀÊÀÊ&ÀÊ'ÀÊrÀÊšÀÊ›ÀÊåÀË ÀË␍ÀË7ÀËXÀËYÀË ÀËÁÀËÂÀÌÀÌ/ÀÌ0ÀÌhÀÌ�ÀÌŽÀ̼ÀÌåÀÌæÀÍÀÍ*ÀÍ+ÀÍXÀÍxÀÍyÀÍ¢ÀÍÁÀÍÂÀÍòÀÎÀÎÀÎVÀÎxÀÎyÀ΢ÀοÀÎÀÀÎíÀÏÀÏÀÏIÀÏnÀÏoÀϱÀÏØÀÏÙÀÐÀÐ4ÀÐ5ÀÐsÀЖÀЗÀÐØÀÐøÀÐùÀÑBÀÑXÀÑ€ÀÑ�ÀÑÐÀÒÀÒ7ÀÒ8ÀÒ„ÀÒŸÀÒÅÀÒÆÀÓÀÓ%ÀÓ&ÀÓsÀÓ€ÀÓ£ÀÓ¤ÀÓóÀÔÀÔÀÔUÀÔw␍$�P�Q�[�z�\�ž�‹�9h�‹/// Used internally.�¹�º�Ä�ä�Å‚ �õ�¦f�õ/// A void type.‚'‚(‚2‚U‚3‚}‚f‚o‚f/// A Boolean type.‚�‚ž‚¨‚È‚©‚í‚Ù‚…k‚Ù/// A character type.ƒƒƒƒ=ƒ ƒ`ƒN‚õnƒN/// A signed 1-byte integer.ƒŠƒ‹ƒ•ƒ³ƒ–ƒÖƒÄƒhqƒÄ/// An unsigned 1-byte integer.ƒýƒþ„„&„ „I„7ƒÞn„7/// A signed 2-byte integer.„s„t„~„œ„„¿„­„Qq„­/// An unsigned 2-byte integer.„æ„ç„ñ…„ò…2… „Çn… /// A signed 4-byte integer.…\…]…g………h…¨…–…:q…–/// An unsigned 4-byte integer.…Ï…Ð…Ú…ø…Û†† …°n† /// A signed 8-byte integer.†E†F†P†n†Q†‘††#q†/// An unsigned 8-byte integer.†¸†¹†Ã†á†Ä‡†ò†™n†ò/// A 4-byte floating point.‡,‡-‡7‡U‡8‡x‡f‡ o‡f/// An 8-byte floating point.‡œ‡�‡§‡É‡¨‡ð‡Ú‡€s‡Ú/// A System.String type.ˆˆˆ"ˆAˆ#ˆeˆR‡øpˆR/// A pointer type modifier.ˆŽˆ�ˆ™ˆºˆšˆàˆËˆmwˆË/// A reference type modifier.‰‰‰‰6‰‰`‰Gˆé{‰G/// A value type modifier.‰†‰‡‰‘‰²‰’‰Ø‰Ã‰is‰Ã/// A class type modifier.ŠŠŠŠ1ŠŠUŠB‰áxŠB#/// A class variable type modifier.Š�ŠŽŠ˜Š¹Š™ŠßŠÊŠ^€…ŠÊ,/// A multi-dimensional array type modifier.‹‹‹‹C‹‹o‹TŠè€‹‹T&/// A type modifier for generic types.‹‘‹’‹œ‹Â‹�‹í‹Ó‹xy‹Ó/// A typed reference.ŒŒŒ!Œ>Œ"Œ`ŒO‹önŒO/// Size of a native integer.Œ“Œ”ŒžŒ»ŒŸŒÝŒÌŒixŒÌ'/// Size of an unsigned native integer.����1��W�BŒæu�B/// A pointer to a function.�|�}�‡�©�ˆ�Ð�º�`t�º/// A System.Object type.ŽŽŽ&ŽIŽ'ŽqŽZ�Ù€œŽZ?/// A single-dimensional, zero lower-bound array type modifier.ޡޢެŽÌŽ­ŽñŽÝŽz{ŽÝ$/// A method variable type modifier.� �!�+�P�,�z�aŽú€„�a#/// A C language required modifier.�©�ª�´�Ø�µ��é�ƒ€‚�é#/// A C language optional modifier.�!�"�,�P�-�y�a�
s�a/// Used internally.�™�š�¤�Ã�¥�ç�Ô�‚i�Ô/// An invalid type.‘‘‘‘6‘‘_‘G�ðs‘G/// Used internally.‘ƑǑёõ‘Ò’'’"’)’
‘h€Ö’
Y/// A type modifier that is a sentinel for a list of a variable number of
/// parameters.’Z’[’e’‡’f’·’²’¹’œ’C€‹’œ/// Used internally.€£€£’.�&|/// Specifies a common language runtime Type, a type modifier, or information
/// about a type in a metadata type signature.“r“s“}“™“~“º“ª“&€š“ªI/// Specifies that the event is special, and that its name describes how.””””-””O”>“Å€�”>=/// Reserved for internal use by the common language runtime.”¾”¿”É”ç”Ê•
”ø”Z€¶”ø_/// Specifies that the common language runtime should check the encoding of
/// the event name.’Ó’Ó‚@“;/// Contains values that describe the metadata of an event.•‘•’•œ•¼•�•á•Í•f€�•Í(/// Specifies accessibility information.–!–"–,–I–-–k–Z•쀅–Z2/// Specifies that the field cannot be referenced.–¼–½–Ç–ß–È–ü–ð–v€Œ–ðC/// Specifies that the field is accessible only by its parent type.—X—Y—c——d— —�—€Ÿ—�N/// Specifies that the field is accessible by derived classes in its assembly.—ö—÷˜˜˜˜8˜+—«€“˜+H/// Specifies that the field is accessible by all types in its assembly.˜œ˜�˜§˜¾˜¨˜Ú˜Ï˜C€�˜ÏT/// Specifies that the field is accessible only by its type and derived
/// classes.™M™N™X™s™Y™“™„˜å€´™„c/// Specifies that the field is accessible by derived classes and by all types
/// in its assembly.™ý™þššš š;š0™ž€£š0Z/// Specifies that the field is accessible by all types with visibility of
/// this scope.š£š¤š®šÅš¯šášÖšF€¡šÖX/// Specifies that the field is a member of its type rather than an instance
/// member.›6›7›A›Z›B›x›kšì€’›kG/// Specifies that the field cannot be changed after it is initialized.›Ä›Å›Ï›ç›Ðœ›ø›ƒ€‡›ø>/// Specifies that the field value is a compile-time constant.œZœ[œeœƒœfœ¦œ”œ€�œ”H/// Specifies that the field is not serialized when its type is remoted.œýœþ��$� �E�5œ±€š�5I/// Specifies that the field is special, and that its name describes how.�œ���§�Ã�¨�ä�Ô�P€š�ÔI/// Specifies that the field implementation is forwarded through PInvoke.ž/ž0ž:žWž;žyžh�ï€�žh=/// Reserved for internal use by the common language runtime.žùžúŸŸ"ŸŸEŸ3ž„€ÇŸ3p/// Specifies that the common language runtime metadata internal APIs should
/// check the encoding of the name.Ÿ�Ÿ‘Ÿ›Ÿ»ŸœŸàŸÌŸP€–ŸÌ=/// Specifies that the field contains marshaling information.    * E + e VŸë€€ V1/// Specifies that the field has a default value. ¯ ° º Ö » ÷ ç p€� ç</// Specifies that the field has a relative virtual address.••‹ë•U9/// Contains values that describe metadata about a field. ¡É¡Ê¡Ô¡ñ¡Õ¢¢¡i€°¢[/// Parameter variance applies only to generic parameters for interfaces and
/// delegates.¢G¢H¢R¢m¢S¢�¢~¢u¢~&/// Indicates the absence of variance.¢´¢µ¢¿¢Ù¢À¢ø¢ê¢˜f¢ê/// Indicates covariance.£#£$£.£L£/£o£]£r£]/// Indicates contravariance.£µ£¶£À£æ£Á¤£÷£z€�£÷8/// Special constraints can apply to any Type parameter.¤^¤_¤i¤�¤j¤¶¤ž¤€ ¤ž?/// Indicates that no constraint applies to the Type parameter.¥¥¥¥6¥¥c¥G¤Á€¨¥G?/// Indicates that the Type parameter must be a reference type.¥Î¥Ï¥Ù¦¥Ú¦<¦¥n€Ô¦[/// Indicates that the Type parameter must be a value type that cannot be a
/// null value.¦¶¦·¦Á¦î¦Â§ ¦ÿ¦G€ß¦ÿj/// Indicates that the Type parameter must have a default public constructor
/// that takes no parameters.¡¡†'¡QH/// Contains values that describe the Type parameters for generic types.§ž§Ÿ§©§Ê§ª§ð§Û§w§Û/// Specifies member access.¨1¨2¨<¨Y¨=¨{¨j§û€†¨j3/// Specifies that the member cannot be referenced.¨Í¨Î¨Ø¨ð¨Ù©␍©¨†€�©D/// Specifies that the member is accessible only by the parent type.©i©j©t©�©u©±©¡©€Ÿ©¡N/// Specifies that the member is accessible by subtypes only in this assembly.ªªªª&ªªAª7©¼€‹ª7F/// Specifies that the member is accessibly by anyone in the assembly.ª•ª–ª ª·ª¡ªÓªÈªL€�ªÈF/// Specifies that the member is accessible only by type and subtypes.«I«J«T«o«U«�«€ªÞ€·«€f/// Specifies that the member is accessible by derived classes and by other
/// types in its assembly.«õ«ö¬¬¬¬3¬(«š€Ÿ¬(V/// Specifies that the member is accessible by all types with access to the
/// scope.¬«¬¬¬¶¬Í¬·¬é¬Þ¬>€±¬Þh/// Specifies that the member is defined as part of the type rather than as a
/// member of an instance.­*­+­5­K­6­f­\¬ôx­\3/// Specifies that the method cannot be overridden.­¤­¥­¯­Ç­°­ä­Ø­qy­Ø0/// Specifies that the method can be overridden.®L®M®W®q®X®�®‚­ï€§®‚X/// Specifies that the method hides by name and signature, rather than just by
/// name.®Á®Â®Ì®í®Í¯®þ®›~®þ#/// Specifies virtual table layout.¯Œ¯�¯—¯±¯˜¯Ð¯Â¯€¸¯Âi/// Specifies that the slot used for this method in the virtual table be
/// reused. This is the default.°(°)°3°K°4°h°\¯Û€“°\J/// Specifies that the method always gets a new slot in the virtual table.°Õ°Ö°à±°á±1±°s€Ä±]/// Specifies that the method can be overridden by the same types to which it
/// is visible.±p±q±{±”±|±²±¥±<|±¥1/// Specifies that the method is not implemented.²
² ²²1²²R²B±½€›²BJ/// Specifies that the method is special, and that its name describes how.²¨²©²³²Ï²´²ð²à²]€™²àH/// Specifies that the method implementation is forwarded using PInvoke.³K³L³V³v³W³›³‡²û€¦³‡M/// Specifies that the method is a managed method exported to unmanaged code.³æ³ç³ñ´³ò´0´³¦€�´=/// Reserved for internal use by the common language runtime.´ ´¡´«´É´¬´ì´Ú´;€·´Ú`/// Specifies that the common language runtime should check the encoding of
/// the method name.µ8µ9µCµ_µDµ€µp´÷€�µp>/// Specifies that the method has security associated with it.µÚµÛµå¶µæ¶,¶µ‹€§L/// Specifies that the method calls another method containing security code.§+§+�
§m;/// Contains values that describe the features of a method.¶¶¶·¶Á¶Þ¶Â·¶ï¶‘u¶ï"/// Flags that describe code type.·k·l·v·‰·w·¡·š· €œ·š[/// Specifies that the method implementation is Microsoft intermediate
/// language (MSIL).·æ·ç·ñ¸·ò¸$¸·¬~¸7/// Specifies that the method implementation is native.¸h¸i¸s¸‰¸t¸¤¸š¸/{¸š6/// Specifies that the method implementation is OPTIL.¹¹¹¹3¹¹P¹D¸¯€§¹D\/// Specifies that the method implementation is provided by the common
/// language runtime.¹Ÿ¹ ¹ª¹Æ¹«¹ç¹×¹[€’¹×A/// Flags that indicate whether the code is managed or unmanaged.º/º0º:ºTº;ºsºe¹ò€‡ºe:/// Specifies that the method implementation is unmanaged.º¹ºººÄºÜºÅºùºíº~€�ºí8/// Specifies that the method implementation is managed.»f»g»q»Œ»r»¬»�»€®»�]/// Specifies that the method is defined. This flag is used primarily in merge
/// scenarios.¼¼¼¼;¼ ¼\¼L»·€«¼LX/// Specifies that the method signature cannot be mangled for an HRESULT
/// conversion.¼§¼¨¼²¼Ï¼³¼ñ¼à¼g€�¼à=/// Reserved for internal use by the common language runtime.½A½B½L½i½M½‹½z¼ü€•½zB/// Specifies that the method is single-threaded through its body.½É½Ê½Ô½ï½Õ¾¾½–¾0/// Specifies that the method cannot be inlined.¾Y¾Z¾d¾‡¾e¾¯¾˜¾€›¾˜</// Specifies that the method should be inlined if possible.¾ó¾ô¾þ¿¾ÿ¿A¿.¾º€�¿.6/// Specifies that the method should not be optimized.¿�¿‚¿Œ¿­¿�¿Ó¿¾¿L€�¿¾2/// The maximum valid value for a [CorMethodImpl].¶7¶7‰¥A/// Contains values that describe method implementation features./À@0À@1À@;À@YÀ@<À@|À@jÀ@0OÀ@jÀ@ƒÀ@„À@ŽÀ@­À@�À@ÑÀ@¾À@ƒQÀ@¾À@ØÀ@ÙÀ@ãÀAÀ@äÀA,ÀAÀ@ØWÀAÀA3ÀA4ÀA>ÀA[ÀA?ÀA}ÀAlÀA3MÀAlÀA„ÀA…ÀA�ÀA¬ÀA�ÀAÎÀA½ÀA„MÀA½ÀAÕÀAÖÀAàÀAýÀAáÀBÀBÀAÕMÀBÀB&ÀB'ÀB1ÀBNÀB2ÀBpÀB_ÀB&MÀB_ÀBwÀBxÀB‚ÀBŸÀBƒÀBÁÀB°ÀBwMÀB°ÀBÈÀBÉÀBÓÀBðÀBÔÀCÀCÀBÈMÀCÀCÀCÀC$ÀCAÀC%ÀCcÀCRÀCMÀCRÀCjÀCkÀCuÀC’ÀCvÀC´ÀC£ÀCjMÀC£ÀC»ÀC¼ÀCÆÀCãÀCÇÀDÀCôÀC»MÀCôÀD ÀD␍ÀDÀD4ÀDÀDVÀDEÀD MÀDEÀD]ÀD^ÀDhÀDŠÀDiÀD±ÀD›ÀD]WÀD›ÀD¸ÀD¹ÀDÃÀDåÀDÄÀE ÀDöÀD¸WÀDöÀEÀEÀEÀEAÀEÀEiÀERÀEYÀERÀEpÀEqÀE{ÀE™ÀE|ÀE¼ÀEªÀEpPÀEªÀEÄÀEÅÀEÏÀEñÀEÐÀFÀFÀEÄXÀFÀF ÀF!ÀF+ÀFJÀF,ÀFnÀF[ÀF RÀF[ÀFvÀFwÀF�ÀF ÀF‚ÀFÄÀF±ÀFvRÀF±ÀFÌÀFÍÀF×ÀF÷ÀFØÀGÀGÀFÌTÀGÀG$ÀG%ÀG/ÀGPÀG0ÀGvÀGaÀG$VÀGaÀG~ÀGÀG‰ÀGªÀGŠÀGÐÀG»ÀG~VÀG»ÀGØÀGÙÀGãÀH ÀGäÀH:ÀHÀGØfÀHÀHBÀHCÀHMÀHqÀHNÀHšÀH‚ÀHB\ÀH‚ÀH¢ÀH£ÀH­ÀHÐÀH®ÀHøÀHáÀH¢ZÀHáÀIÀIÀI ÀI/ÀI ÀIXÀI@ÀI\ÀI@ÀI`ÀIaÀIkÀIŒÀIlÀI²ÀI�ÀI`VÀI�ÀIºÀI»ÀIÅÀIäÀIÆÀJÀIõÀIºRÀIõÀJÀJÀJÀJ?ÀJÀJhÀJPÀJ\ÀJPÀJpÀJqÀJ{ÀJ ÀJ|ÀJÊÀJ±ÀJp^ÀJ±ÀJÒÀJÓÀJÝÀJûÀJÞÀKÀK ÀJÒPÀK ÀK&ÀK'ÀK1ÀKPÀK2ÀKtÀKaÀK&RÀKaÀK|ÀK}ÀK‡ÀK®ÀKˆÀKÚÀK¿ÀK|bÀK¿ÀKâÀKãÀKíÀLÀKîÀL8ÀL!ÀKâZÀL!ÀL@ÀLAÀLKÀLnÀLLÀL–ÀLÀL@ZÀLÀLžÀLŸÀL©ÀLÉÀLªÀLîÀLÚÀLžTÀLÚÀLöÀL÷ÀMÀM'ÀMÀMRÀM8ÀLö`ÀM8ÀMZÀM[ÀMeÀM„ÀMfÀM¨ÀM•ÀMZRÀM•ÀM°ÀM±ÀM»ÀMÛÀM¼ÀNÀMìÀM°TÀMìÀNÀN ÀNÀN3ÀNÀNXÀNDÀNTÀNDÀN`ÀNaÀNkÀNŽÀNlÀN¶ÀNŸÀN`ZÀNŸÀN¾ÀN¿ÀNÉÀNóÀNÊÀO"ÀOÀN¾hÀOÀO*ÀO+ÀO5ÀO\ÀO6ÀOˆÀOmÀO*bÀOmÀO�ÀO‘ÀO›ÀO½ÀOœÀOäÀOÎÀO�XÀOÎÀOìÀOíÀO÷ÀPÀOøÀP<ÀP(ÀOìTÀP(ÀPDÀPEÀPOÀPmÀPPÀP�ÀP~ÀPDPÀP~¿Þ¿Þ�¹À@9/// Contains values that describe native unmanaged types.ÀQ9ÀQ:ÀQDÀQWÀQEÀQoÀQhÀPöÀQh@/// Specifies that the parameter is passed into the method call.ÀQ¿ÀQÀÀQÊÀQÞÀQËÀQ÷ÀQïÀQz€ƒÀQïB/// Specifies that the parameter is passed from the method return.ÀR2ÀR3ÀR=ÀRVÀR>ÀRtÀRgÀRxÀRg-/// Specifies that the parameter is optional.ÀR¿ÀRÀÀRÊÀRçÀRËÀS ÀRøÀR€�ÀRø=/// Reserved for internal use by the common language runtime.ÀSLÀSMÀSWÀSrÀSXÀS’ÀSƒÀS€„ÀSƒ5/// Specifies that the parameter has a default value.ÀSÜÀSÝÀSçÀTÀSèÀT,ÀTÀS�€•ÀT</// Specifies that the parameter has marshaling information.ÀTEÀTFÀTPÀTgÀTQÀTƒÀTxÀT7RÀTx /// Unused.ÀP™ÀP™ƒóÀPåE/// Contains values that describe the metadata of a method parameter.ÀUÀUÀUÀU0ÀUÀUIÀUAÀTånÀUA)/// Indicates that this is not a PE file.ÀU–ÀU—ÀU¡ÀU¸ÀU¢ÀUÔÀUÉÀUX€†ÀUÉ;/// Indicates that this PE file contains only managed code.ÀVÀVÀV#ÀVAÀV$ÀVdÀVRÀU》ÀVR2/// Indicates that this PE file makes Win32 calls.ÀV°ÀV±ÀV»ÀVÒÀV¼ÀVîÀVãÀVs€…ÀVã:/// Indicates that this PE file runs on a 64-bit platform.ÀW/ÀW0ÀW:ÀWVÀW;ÀWwÀWgÀVý€„ÀWg//// Indicates that this PE file is native code.ÀWôÀWõÀWÿÀXÀXÀXBÀX/ÀW†€ÆÀX/i/// Indicates that this PE file is platform-neutral and prefers to be loaded
/// in a 32-bit environment.ÀTŽÀTŽƒÁÀT×B/// Contains values that describe a portable executable (PE) file.ÀX¼ÀX½ÀXÇÀXàÀXÈÀXþÀXñÀX“qÀXñ&/// Use each member name as specified.ÀYÀYÀY$ÀY@ÀY%ÀYaÀYQÀY ^ÀYQ␍/// Reserved.ÀY|ÀY}ÀY‡ÀY¦ÀYˆÀYÊÀY·ÀYldÀY·␍/// Reserved.ÀZÀZÀZÀZ6ÀZÀZWÀZGÀYÕ€ˆÀZG7/// Marshal strings as multiple-byte character strings.ÀZ–ÀZ—ÀZ¡ÀZÀÀZ¢ÀZäÀZÑÀZb€ˆÀZÑ1/// Marshal strings as Unicode 2-byte characters.À[êÀ[ëÀ[õÀ\À[öÀ\2À\"ÀZï�IÀ\"€ò/// Automatically marshal strings appropriately for the target operating
/// system. The default is Unicode on Windows NT, Windows 2000, Windows XP,
/// and the Windows Server 2003 family; the default is ANSI on Windows 98 and
/// Windows Me.À\MÀ\NÀ\XÀ\xÀ\YÀ\�À\‰À\=fÀ\‰␍/// Reserved.À]À]À]"À]AÀ]#À]eÀ]RÀ\¨€ÃÀ]Rj/// Perform best-fit mapping of Unicode characters that lack an exact match in
/// the ANSI character set.À]öÀ]÷À^À^!À^À^FÀ^2À]p€ÜÀ^2€…/// Do not perform best-fit mapping of Unicode characters. In this case, all
/// unmappable characters will be replaced by a ‘?’.À^aÀ^bÀ^lÀ^ˆÀ^mÀ^©À^™À^Q^À^™␍/// Reserved.À^ÄÀ^ÅÀ^ÏÀ^ýÀ^ÐÀ_0À_À^´€‚À_␍/// Reserved.À_™À_šÀ_¤À_ÑÀ_¥À`À_âÀ_;€ÎÀ_âY/// Throw an exception when the interop marshaler encounters an unmappable
/// character.À`sÀ`tÀ`~À`¬À`À`ßÀ`½À`€×À`½`/// Do not throw an exception when the interop marshaler encounters an
/// unmappable character.À`úÀ`ûÀaÀa/ÀaÀa^Àa@À`êzÀa@␍/// Reserved.ÀaÛÀaÜÀaæÀbÀaçÀb/ÀbÀai€ÌÀbm/// Allow the callee to call the Win32 SetLastError function before returning
/// from the attributed method.ÀbJÀbKÀbUÀbrÀbVÀb”ÀbƒÀb:`Àbƒ␍/// Reserved.Àc+Àc,Àc6ÀcUÀc7ÀcyÀcfÀbŸ€àÀcf€‡/// Use the default platform calling convention. For example, on Windows the
/// default is StdCall and on Windows CE .NET it is Cdecl.ÀdQÀdRÀd\ÀdzÀd]Àd�Àd‹Àc„�Àd‹€Æ/// Use the Cdecl calling convention. In this case, the caller cleans the
/// stack. This enables calling functions with varargs (that is, functions
/// that accept a variable number of parameters).Àe^Àe_ÀeiÀe‰ÀejÀe®ÀešÀd¨� Àeš€¯/// Use the StdCall calling convention. In this case, the callee cleans the
/// stack. This is the default convention for calling unmanaged functions with
/// platform invoke.ÀfØÀfÙÀfãÀgÀfäÀg*ÀgÀe¹�wÀg�/// Use the ThisCall calling convention. In this case, the first parameter is
/// the this pointer and is stored in register ECX. Other parameters are
/// pushed on the stack. The ThisCall calling convention is used to call
/// methods on classes exported from an unmanaged DLL.ÀgEÀgFÀgPÀgqÀgQÀg—Àg‚Àg5hÀg‚␍/// Reserved.Àg²Àg³Àg½ÀgÖÀg¾ÀgôÀgçÀg¢XÀgç␍/// Reserved.ÀXQÀXQ�¬ÀX�)/// Specifies options for a PInvoke call.Àh¦Àh§Àh±ÀhÍÀh²ÀhîÀhÞÀhW€�ÀhÞL/// Specifies that the property is special, and that its name describes how.Ài9Ài:ÀiDÀiaÀiEÀiƒÀirÀhù€�Àir=/// Reserved for internal use by the common language runtime.Àj Àj␍ÀjÀj5ÀjÀjXÀjFÀiŽ€ÐÀjFy/// Specifies that the common language runtime metadata internal APIs should
/// check the encoding of the property name.ÀjšÀj›Àj¥ÀjÀÀj¦ÀjàÀjÑÀjc€ƒÀjÑ4/// Specifies that the property has a default value.ÀjùÀjúÀkÀkÀkÀk7Àk,ÀjëRÀk, /// Unused.ÀgÿÀgÿƒAÀhC=/// Contains values that describe the metadata of a property.Àk…Àk†Àk�Àk¨Àk‘ÀkÅÀk¹Àk…JÀk¹ÀkÓÀkÔÀkÞÀk÷ÀkßÀlÀlÀkÓLÀlÀl#Àl$Àl.ÀlGÀl/ÀleÀlXÀl#LÀlXÀlsÀltÀl~Àl˜ÀlÀl·Àl©ÀlsNÀl©ÀlÅÀlÆÀlÐÀlëÀlÑÀm ÀlüÀlÅPÀlüÀmÀmÀm$Àm>Àm%Àm]ÀmOÀmNÀmOÀmkÀmlÀmvÀm•ÀmwÀm¹Àm¦ÀmkXÀm¦ÀmÇÀmÈÀmÒÀmíÀmÓÀn␍ÀmþÀmÇPÀmþÀnÀnÀn&ÀnGÀn'ÀnmÀnXÀn\ÀnXÀn{Àn|Àn†Àn¢Àn‡ÀnÃÀn³Àn{RÀn³ÀnÑÀnÒÀnÜÀn÷ÀnÝÀoÀoÀnÑPÀoÀo%Ào&Ào0ÀoGÀo1ÀocÀoXÀo%HÀoXÀoqÀorÀo|Ào–Ào}ÀoµÀo§ÀoqNÀo§ÀoÃÀoÄÀoÎÀoéÀoÏÀp ÀoúÀoÃPÀoúÀpÀpÀp"Àp<Àp#Àp[ÀpMÀpNÀpMÀpiÀpjÀptÀpŽÀpuÀp­ÀpŸÀpiNÀpŸÀp»Àp¼ÀpÆÀpãÀpÇÀqÀpôÀp»TÀpôÀqÀqÀqÀq4ÀqÀqOÀqEÀqFÀqEÀq]Àq^ÀqhÀq†ÀqiÀq©Àq—Àq]VÀq—Àq·Àq¸ÀqÂÀqäÀqÃÀr ÀqõÀq·^ÀqõÀrÀrÀr$ÀrBÀr%ÀreÀrSÀrVÀrSÀrsÀrtÀr~ÀršÀrÀr»Àr«ÀrsRÀr«ÀrÉÀrÊÀrÔÀrüÀrÕÀs)Às␍ÀrÉjÀs␍Às7Às8ÀsBÀsZÀsCÀswÀskÀs7JÀskÀs…Às†Às�Às¦Às‘ÀsÁÀs·Às…FÀs·ÀsÏÀsÐÀsÚÀsôÀsÛÀtÀtÀsÏNÀtÀkBÀkBˆÞÀkt+/// Indicates the type of a metadata token.!Àt•Àt–Àt Àt¿Àt¡ÀtãÀtÐÀti€„ÀtÐ)/// Used for type visibility information.Àu(Àu)Àu3ÀuMÀu4ÀulÀu^Àtò€„Àu^3/// Specifies that the type is not in public scope.Àu­Àu®Àu¸ÀuÏÀu¹ÀuëÀuàÀu{zÀuà//// Specifies that the type is in public scope.Àv:Àv;ÀvEÀvbÀvFÀv„ÀvsÀuú€”Àvs=/// Specifies that the type is nested with public visibility.ÀvÔÀvÕÀvßÀvýÀvàÀw ÀwÀv“€—Àw>/// Specifies that the type is nested with private visibility.ÀwoÀwpÀwzÀw—Àw{Àw¹Àw¨Àw/€”Àw¨=/// Specifies that the type is nested with family visibility.Àx
Àx ÀxÀx4ÀxÀxXÀxEÀwÈ€šÀxE?/// Specifies that the type is nested with assembly visibility.Àx´ÀxµÀx¿ÀxáÀxÀÀyÀxòÀxg€«ÀxòJ/// Specifies that the type is nested with family and assembly visibility.ÀycÀydÀynÀy�ÀyoÀyµÀy Ày€¨Ày I/// Specifies that the type is nested with family or assembly visibility.ÀyðÀyñÀyûÀzÀyüÀz6Àz'ÀyÄ|Àz')/// Gets layout information for the type.ÀzŽÀz�Àz™Àz´ÀzšÀzÔÀzÅÀzE€™ÀzÅF/// Specifies that the fields of this type are laid out automatically.À{+À{,À{6À{WÀ{7À{}À{hÀz〤À{hE/// Specifies that the fields of this type are laid out sequentially.À{ÆÀ{ÇÀ{ÑÀ{ðÀ{ÒÀ|À|À{Œ€’À|7/// Specifies that field layout is supplied explicitly.À|SÀ|TÀ|^À|�À|_À|©À|’À|#€�À|’-/// Gets semantic information about the type.À|âÀ|ãÀ|íÀ}À|îÀ}À}À|¸pÀ}'/// Specifies that the type is a class.À}\À}]À}gÀ}�À}hÀ} À}’À}-}À}’,/// Specifies that the type is an interface.À}ÚÀ}ÛÀ}åÀ}þÀ}æÀ~À~À}¯wÀ~(/// Specifies that the type is abstract.À~]À~^À~hÀ~À~iÀ~›À~�À~+zÀ~�//// Specifies that the type cannot be extended.À~òÀ~óÀ~ýÀÀ~þÀ:À*À~ª€šÀ*E/// Specifies that the class name is special. Its name describes how.ÀtÀuÀÀ–À€À²À§ÀIsÀ§(/// Specifies that the type is imported.ÀðÀñÀûÀ€ÀüÀ€:À€)ÀÁ€ƒÀ€),/// Specifies that the type is serializable.À€ƒÀ€„À€ŽÀ€­À€�À€ÑÀ€¾À€I€’À€¾7/// Specifies that this type is a Windows Runtime type.À�$À�%À�/À�PÀ�0À�vÀ�aÀ€à€ À�aA/// Gets information about how strings are encoded and formatted.À�ÂÀ�ÃÀ�ÍÀ�çÀ�ÎÀ‚À�øÀ�…€‹À�ø:/// Specifies that this type interprets an LPTSTR as ANSI.À‚UÀ‚VÀ‚`À‚}À‚aÀ‚ŸÀ‚ŽÀ‚€”À‚Ž=/// Specifies that this type interprets an LPTSTR as Unicode.À‚ñÀ‚òÀ‚üÀƒÀ‚ýÀƒ5Àƒ'À‚®€‘Àƒ'@/// Specifies that this type interprets an LPTSTR automatically.Àƒ§Àƒ¨Àƒ²ÀƒÔÀƒ³ÀƒûÀƒåÀƒD€ÁÀƒå^/// Specifies that the type has a non-standard encoding, as specified by
/// CustomFormatMask.À„�À„žÀ„¨À„ÉÀ„©À„ïÀ„ÚÀ„
€ïÀ„Ú€Ž/// Use this mask to get non-standard encoding information for native interop.
/// The meaning of the values of these two bits is unspecified.À…iÀ…jÀ…tÀ…”À…uÀ…¹À…¥À„þ€ÅÀ…¥f/// Specifies that the type must be initialized before the first attempt to
/// access a static field.ˠ ˠ
À†À†.À†À†MÀ†?À…È€�À†?>/// Specifies that the type is exported, and a type forwarder.À†ºÀ†»À†ÅÀ†âÀ†ÆÀ‡À†óÀ†\€²À†óY/// This flag and the flags below are used internally by the common language
/// runtime.À‡dÀ‡eÀ‡oÀ‡�À‡pÀ‡°À‡žÀ‡€§À‡žN/// Specifies that the common language runtime should check the name encoding.À‡þÀ‡ÿÀˆ Àˆ%Àˆ
ÀˆFÀˆ6À‡¿€‘Àˆ6</// Specifies that the type has security associated with it.Àt"Àt"”1ÀtY0/// Contains values that indicate type metadata.€ýÀˆƒÀˆpÀˆU1Àˆp/// Used internally.Àˆ´Àˆ Àˆ‰.Àˆ /// A void type.ÀˆëÀˆÔÀˆº4ÀˆÔ/// A Boolean type.À‰!À‰␍Àˆñ3À‰␍/// A character type.À‰\À‰JÀ‰'8À‰J/// A signed 1-byte integer.À‰šÀ‰ˆÀ‰b;À‰ˆ/// An unsigned 1-byte integer.À‰ÕÀ‰ÃÀ‰ 8À‰Ã/// A signed 2-byte integer.ÀŠÀŠÀ‰Û;ÀŠ/// An unsigned 2-byte integer.ÀŠNÀŠ<ÀŠ8ÀŠ</// A signed 4-byte integer.ÀŠŒÀŠzÀŠT;ÀŠz/// An unsigned 4-byte integer.ÀŠÇÀеÀŠ’8Àе/// A signed 8-byte integer.À‹ÀŠóÀŠÍ;ÀŠó/// An unsigned 8-byte integer.À‹@À‹.À‹ 8À‹./// A 4-byte floating point.À‹|À‹jÀ‹F9À‹j/// An 8-byte floating point.À‹¸À‹¢À‹‚9À‹¢/// A System.String type.À‹ôÀ‹áÀ‹¾9À‹á/// A pointer type modifier.ÀŒ4ÀŒÀ‹ú>ÀŒ/// A reference type modifier.ÀŒuÀŒ\ÀŒ;>ÀŒ\/// A value type modifier.ÀŒ²ÀŒ�ÀŒ|:ÀŒ�/// A class type modifier.ÀŒöÀŒãÀŒ¹AÀŒã#/// A class variable type modifier.À�EÀ�0ÀŒýLÀ�0,/// A multi-dimensional array type modifier.À�”À�yÀ�LLÀ�y&/// A type modifier for generic types.À�ÒÀ�¸À�›;À�¸/// A typed reference.ÀŽÀ�ýÀ�Ù9À�ý/// Size of a native integer.ÀŽTÀŽCÀŽCÀŽC'/// Size of an unsigned native integer.ÀŽ“ÀŽ~ÀŽ[<ÀŽ~/// A pointer to a function.ÀŽÐÀŽºÀŽš:ÀŽº/// A System.Object type.À�4À�ÀŽ×aÀ�?/// A single-dimensional, zero lower-bound array type modifier.À�zÀ�fÀ�;CÀ�f$/// A method variable type modifier.À�ÄÀ�«À��GÀ�«#/// A C language required modifier.À�␍À�õÀ�ËFÀ�õ#/// A C language optional modifier.À�GÀ�/À�7À�//// Used internally.À�|À�iÀ�N2À�i/// An invalid type.À�¶À�žÀ�ƒ7À�ž/// Used internally.À‘>À‘9À‘@À‘!À�½€˜À‘!Y/// A type modifier that is a sentinel for a list of a variable number of
/// parameters.À‘’À‘�À‘”À‘wÀ‘XQÀ‘w/// Used internally.À’ À‘üÀ‘¬fÀ‘üI/// Specifies that the event is special, and that its name describes how.À’jÀ’YÀ’[À’Y=/// Reserved for internal use by the common language runtime.À’ëÀ’ÙÀ’s~À’Ù_/// Specifies that the common language runtime should check the encoding of
/// the event name.À“7À“#À’ôIÀ“#(/// Specifies accessibility information.À“ŠÀ“yÀ“@PÀ“y2/// Specifies that the field cannot be referenced.À“éÀ“ÝÀ““\À“ÝC/// Specifies that the field is accessible only by its parent type.À”WÀ”GÀ“òkÀ”GN/// Specifies that the field is accessible by derived classes in its assembly.À”¼À”¯À”`bÀ”¯H/// Specifies that the field is accessible by all types in its assembly.À•+À• À”ÅlÀ• T/// Specifies that the field is accessible only by its type and derived
/// classes.À•­À•žÀ•4À•žc/// Specifies that the field is accessible by derived classes and by all types
/// in its assembly.À–"À–À•¶rÀ–Z/// Specifies that the field is accessible by all types with visibility of
/// this scope.À–•À–ŠÀ–+pÀ–ŠX/// Specifies that the field is a member of its type rather than an instance
/// member.À–ùÀ–ìÀ–žaÀ–ìG/// Specifies that the field cannot be changed after it is initialized.À—SÀ—GÀ—WÀ—G>/// Specifies that the field value is a compile-time constant.À—½À—«À—\gÀ—«H/// Specifies that the field is not serialized when its type is remoted.À˜&À˜À—ÆfÀ˜I/// Specifies that the field is special, and that its name describes how.À˜�À˜À˜/fÀ˜I/// Specifies that the field implementation is forwarded through PInvoke.À˜íÀ˜ÜÀ˜˜[À˜Ü=/// Reserved for internal use by the common language runtime.À™À™mÀ˜ö€�À™mp/// Specifies that the common language runtime metadata internal APIs should
/// check the encoding of the name.À™àÀ™ÌÀ™ˆ^À™Ì=/// Specifies that the field contains marshaling information.Àš0Àš!À™éMÀš!1/// Specifies that the field has a default value.ÀšŒÀš|Àš9YÀš|</// Specifies that the field has a relative virtual address.À›Àš÷Àš•yÀš÷[/// Parameter variance applies only to generic parameters for interfaces and
/// delegates.À›MÀ›>À›BÀ›>&/// Indicates the absence of variance.À›„À›vÀ›V4À›v/// Indicates covariance.À›ÃÀ›±À›�<À›±/// Indicates contravariance.Àœ%Àœ À›Ì_Àœ 8/// Special constraints can apply to any Type parameter.ÀœŒÀœtÀœ.dÀœt?/// Indicates that no constraint applies to the Type parameter.Àœ÷ÀœÛÀœ•hÀœÛ?/// Indicates that the Type parameter must be a reference type.À�…À�bÀ�€‹À�b[/// Indicates that the Type parameter must be a value type that cannot be a
/// null value.Àž À�ÿÀ�Ž€˜À�ÿj/// Indicates that the Type parameter must have a default public constructor
/// that takes no parameters.ÀžaÀžLÀž)>ÀžL/// Specifies member access.ÀžµÀž¤ÀžjQÀž¤3/// Specifies that the member cannot be referenced.ÀŸÀŸ Àž¾]ÀŸ D/// Specifies that the member is accessible only by the parent type.ÀŸƒÀŸsÀŸkÀŸsN/// Specifies that the member is accessible by subtypes only in this assembly.ÀŸãÀŸÙÀŸŒ]ÀŸÙF/// Specifies that the member is accessibly by anyone in the assembly.À DÀ 9ÀŸì^À 9F/// Specifies that the member is accessible only by type and subtypes.À ÉÀ ºÀ M€‚À ºf/// Specifies that the member is accessible by derived classes and by other
/// types in its assembly.À¡:À¡/À ÒnÀ¡/V/// Specifies that the member is accessible by all types with access to the
/// scope.À¡½À¡²À¡C€€À¡²h/// Specifies that the member is defined as part of the type rather than as a
/// member of an instance.À¢
À¢À¡ÆJÀ¢3/// Specifies that the method cannot be overridden.À¢VÀ¢JÀ¢IÀ¢J0/// Specifies that the method can be overridden.À¢ÌÀ¢¾À¢_sÀ¢¾X/// Specifies that the method hides by name and signature, rather than just by
/// name.À£À¢ÿÀ¢ÕEÀ¢ÿ#/// Specifies virtual table layout.À£›À£�À£€„À£�i/// Specifies that the slot used for this method in the virtual table be
/// reused. This is the default.À¤À£õÀ£¤cÀ£õJ/// Specifies that the method always gets a new slot in the virtual table.À¤ˆÀ¤nÀ¤
€„À¤n]/// Specifies that the method can be overridden by the same types to which it
/// is visible.À¤ÖÀ¤ÉÀ¤‘KÀ¤É1/// Specifies that the method is not implemented.À¥@À¥0À¤ßgÀ¥0J/// Specifies that the method is special, and that its name describes how.À¥¨À¥˜À¥IeÀ¥˜H/// Specifies that the method implementation is forwarded using PInvoke.À¦À¦À¥±nÀ¦M/// Specifies that the method is a managed method exported to unmanaged code.À¦wÀ¦fÀ¦"[À¦f=/// Reserved for internal use by the common language runtime.À¦ùÀ¦çÀ¦€À¦ç`/// Specifies that the common language runtime should check the encoding of
/// the method name.À§WÀ§GÀ§[À§G>/// Specifies that the method has security associated with it.À§ÈÀ§³À§`nÀ§³L/// Specifies that the method calls another method containing security code.À¨ À§úÀ§Ñ@À§ú"/// Flags that describe code type.À¨}À¨vÀ¨oÀ¨v[/// Specifies that the method implementation is Microsoft intermediate
/// language (MSIL).À¨ÏÀ¨ÄÀ¨†OÀ¨Ä7/// Specifies that the method implementation is native.À©À©À¨ØMÀ©6/// Specifies that the method implementation is OPTIL.À©—À©‹À©(uÀ©‹\/// Specifies that the method implementation is provided by the common
/// language runtime.À©øÀ©èÀ© ^À©èA/// Flags that indicate whether the code is managed or unmanaged.ÀªPÀªBÀªUÀªB:/// Specifies that the method implementation is unmanaged.Àª¤Àª˜ÀªYQÀª˜8/// Specifies that the method implementation is managed.À« À«Àª­yÀ«]/// Specifies that the method is defined. This flag is used primarily in merge
/// scenarios.À«˜À«ˆÀ«)uÀ«ˆX/// Specifies that the method signature cannot be mangled for an HRESULT
/// conversion.À«öÀ«åÀ«¡[À«å=/// Reserved for internal use by the common language runtime.À¬YÀ¬HÀ«ÿ`À¬HB/// Specifies that the method is single-threaded through its body.À¬¨À¬™À¬bLÀ¬™0/// Specifies that the method cannot be inlined.À­ À¬ôÀ¬±`À¬ô</// Specifies that the method should be inlined if possible.À­dÀ­QÀ­VÀ­Q6/// Specifies that the method should not be optimized.À­»À­¦À­mTÀ­¦2/// The maximum valid value for a [CorMethodImpl].À­ÜÀ­ÊÀ­ÄÀ­ÊÀ­úÀ­çÀ­áÀ­çÀ®À®À­ÿÀ®À®7À®&À® À®&À®SÀ®BÀ®<À®BÀ®oÀ®^À®XÀ®^À®‹À®zÀ®tÀ®zÀ®§À®–À®�À®–À®ÃÀ®²À®¬À®²À®ßÀ®ÎÀ®ÈÀ®ÎÀ®ûÀ®êÀ®äÀ®êÀ¯À¯À¯À¯À¯3À¯"À¯À¯"À¯TÀ¯>À¯8À¯>À¯uÀ¯_À¯YÀ¯_À¯—À¯€À¯z À¯€À¯´À¯¢À¯œÀ¯¢À¯ÖÀ¯ÀÀ¯º À¯ÀÀ¯õÀ¯âÀ¯ÜÀ¯âÀ°À°À¯ûÀ°À°4À° À°À° À°UÀ°@À°:À°@À°vÀ°aÀ°[À°aÀ°ŸÀ°‚À°|'À°‚À°ÃÀ°«À°¥"À°«À°æÀ°ÏÀ°É!À°ÏÀ±
À°òÀ°ì"À°òÀ±+À±À±À±À±JÀ±7À±1À±7À±nÀ±VÀ±P"À±VÀ±“À±zÀ±t#À±zÀ±±À±ŸÀ±™À±ŸÀ±ÐÀ±½À±·À±½À±÷À±ÜÀ±Ö%À±ÜÀ²À²À±ý!À²À²=À²&À² !À²&À²]À²IÀ²CÀ²IÀ²ƒÀ²iÀ²c$À²iÀ²¢À²�À²‰À²�À²ÂÀ²®À²¨À²®À²âÀ²ÎÀ²ÈÀ²ÎÀ³À²îÀ²è!À²îÀ³/À³À³ (À³À³VÀ³;À³5%À³;À³xÀ³bÀ³\ À³bÀ³˜À³„À³~À³„À³¶À³¤À³žÀ³¤À´ À´À³½TÀ´@/// Specifies that the parameter is passed into the method call.À´eÀ´]À´WÀ´]B/// Specifies that the parameter is passed from the method return.À´¯À´¢À´nGÀ´¢-/// Specifies that the parameter is optional.Àµ␍À´üÀ´¸[À´ü=/// Reserved for internal use by the common language runtime.ÀµaÀµRÀµQÀµR5/// Specifies that the parameter has a default value.ÀµÁÀµ­Àµj]Àµ­</// Specifies that the parameter has marshaling information.ÀµçÀµÜÀµÊ#ÀµÜ /// Unused.À¶(À¶ ÀµðBÀ¶ )/// Indicates that this is not a PE file.À¶‚À¶wÀ¶5WÀ¶w;/// Indicates that this PE file contains only managed code.À¶ÚÀ¶ÈÀ�UÀ¶È2/// Indicates that this PE file makes Win32 calls.À·3À·(À¶çVÀ·(:/// Indicates that this PE file runs on a 64-bit platform.À·†À·vÀ·@PÀ·v//// Indicates that this PE file is native code.À¸À¸À·“€�À¸i/// Indicates that this PE file is platform-neutral and prefers to be loaded
/// in a 32-bit environment.À¸]À¸PÀ¸#@À¸P&/// Use each member name as specified.À¸ŠÀ¸zÀ¸f*À¸z␍/// Reserved.À¸ºÀ¸§À¸“-À¸§␍/// Reserved.À¹À¹À¸ÃTÀ¹7/// Marshal strings as multiple-byte character strings.À¹eÀ¹RÀ¹QÀ¹R1/// Marshal strings as Unicode 2-byte characters.ÀºwÀºgÀ¹n�Àºg€ò/// Automatically marshal strings appropriately for the target operating
/// system. The default is Unicode on Windows NT, Windows 2000, Windows XP,
/// and the Windows Server 2003 family; the default is ANSI on Windows 98 and
/// Windows Me.Àº¨Àº”Àº€.Àº”␍/// Reserved.À»5À»"Àº±€ŠÀ»"j/// Perform best-fit mapping of Unicode characters that lack an exact match in
/// the ANSI character set.À»ÚÀ»ÆÀ»>€¢À»Æ€…/// Do not perform best-fit mapping of Unicode characters. In this case, all
/// unmappable characters will be replaced by a ‘?’.À¼À»÷À»ã*À»÷␍/// Reserved.À¼FÀ¼$À¼<À¼$␍/// Reserved.À¼ÐÀ¼¯À¼O€‡À¼¯Y/// Throw an exception when the interop marshaler encounters an unmappable
/// character.À½bÀ½@À¼Ù€�À½@`/// Do not throw an exception when the interop marshaler encounters an
/// unmappable character.À½�À½À½k8À½␍/// Reserved.À¾0À¾À½¦€�À¾m/// Allow the callee to call the Win32 SetLastError function before returning
/// from the attributed method.À¾^À¾MÀ¾9+À¾M␍/// Reserved.À¿À¾õÀ¾g€§À¾õ€‡/// Use the default platform calling convention. For example, on Windows the
/// default is StdCall and on Windows CE .NET it is Cdecl.À¿ðÀ¿ÞÀ¿€åÀ¿Þ€Æ/// Use the Cdecl calling convention. In this case, the caller cleans the
/// stack. This enables calling functions with varargs (that is, functions
/// that accept a variable number of parameters).ÀÀÃÀÀ¯À¿ù€ÐÀÀ¯€¯/// Use the StdCall calling convention. In this case, the callee cleans the
/// stack. This is the default convention for calling unmanaged functions with
/// platform invoke.ÀÁþÀÁéÀÀÌ�8ÀÁé�/// Use the ThisCall calling convention. In this case, the first parameter is
/// the this pointer and is stored in register ECX. Other parameters are
/// pushed on the stack. The ThisCall calling convention is used to call
/// methods on classes exported from an unmanaged DLL.ÀÂ0ÀÂÀÂ/ÀÂ␍/// Reserved.ÀÂZÀÂMÀÂ9'ÀÂM␍/// Reserved.ÀÂÆÀ¶ÀÂciÀ¶L/// Specifies that the property is special, and that its name describes how.ÀÃ$ÀÃÀÂÏ[ÀÃ=/// Reserved for internal use by the common language runtime.ÀÿÀíÀÃ-€˜Àíy/// Specifies that the common language runtime metadata internal APIs should
/// check the encoding of the property name.ÀÄÀÄÀÃÈPÀÄ4/// Specifies that the property has a default value.ÀÄ8ÀÄ-ÀÄ#ÀÄ- /// Unused.ÀÄSÀÄGÀÄAÀÄGÀÄrÀÄeÀÄ_ÀÄeÀÄ‘ÀÄ„ÀÄ~ÀÄ„ÀıÀÄ£ÀÄ�ÀÄ£ÀÄÒÀÄÃÀĽÀÄÃÀÄòÀÄäÀÄÞÀÄäÀÅÀÅÀÄþ#ÀÅÀÅ8ÀÅ)ÀÅ#ÀÅ)ÀÅ_ÀÅJÀÅD%ÀÅJÀÅ�ÀÅqÀÅk ÀÅqÀÅ¢ÀÅ“ÀÅ�ÀÅ“ÀÅ¿ÀÅ´ÀÅ®ÀÅ´ÀÅßÀÅÑÀÅËÀÅÑÀÆÀÅñÀÅëÀÅñÀÆ ÀÆÀÆ ÀÆÀÆ@ÀÆ2ÀÆ,ÀÆ2ÀÆcÀÆRÀÆL!ÀÆRÀÆÀÆuÀÆoÀÆuÀÆ£ÀÆ‘ÀÆ‹"ÀÆ‘ÀÆËÀƵÀƯ&ÀƵÀÆïÀÆÝÀÆ×"ÀÆÝÀÇÀÇÀÆû ÀÇÀÇ?ÀÇ#ÀÇ,ÀÇ#ÀÇ]ÀÇQÀÇKÀÇQÀÇyÀÇoÀÇiÀÇoÀÇ™ÀÇ‹ÀÇ…ÀÇ‹ÀÇéÀÇÖÀǦMÀÇÖ)/// Used for type visibility information.ÀÈ>ÀÈ0ÀÇöRÀÈ03/// Specifies that the type is not in public scope.ÀÈŒÀÈ�ÀÈKKÀÈ�//// Specifies that the type is in public scope.ÀÈîÀÈÝÀÈ™_ÀÈÝ=/// Specifies that the type is nested with public visibility.ÀÉRÀÉ@ÀÈûaÀÉ@>/// Specifies that the type is nested with private visibility.ÀÉ´ÀÉ£ÀÉ__ÀÉ£=/// Specifies that the type is nested with family visibility.ÀÊÀÊÀÉÁcÀÊ?/// Specifies that the type is nested with assembly visibility.ÀÊŽÀÊxÀÊ'qÀÊxJ/// Specifies that the type is nested with family and assembly visibility.ÀËÀÊëÀÊ›oÀÊëI/// Specifies that the type is nested with family or assembly visibility.ÀËLÀË=ÀË␍IÀË=)/// Gets layout information for the type.À˵À˦ÀËYfÀ˦F/// Specifies that the fields of this type are laid out automatically.ÀÌ#ÀÌÀËÂkÀÌE/// Specifies that the fields of this type are laid out sequentially.ÀÌ�ÀÌnÀÌ0[ÀÌn7/// Specifies that field layout is supplied explicitly.ÀÌÙÀÌÂÀÌŽUÀÌÂ-/// Gets semantic information about the type.ÀÍÀÍÀÌæBÀÍ'/// Specifies that the type is a class.ÀÍlÀÍ^ÀÍ+KÀÍ^,/// Specifies that the type is an interface.À͵ÀͨÀÍyFÀͨ(/// Specifies that the type is abstract.ÀÎÀÍøÀÍÂKÀÍø//// Specifies that the type cannot be extended.ÀÎlÀÎ\ÀÎfÀÎ\E/// Specifies that the class name is special. Its name describes how.ÀγÀΨÀÎyDÀΨ(/// Specifies that the type is imported.ÀÏÀÎóÀÎÀNÀÎó,/// Specifies that the type is serializable.ÀÏbÀÏOÀÏ[ÀÏO7/// Specifies that this type is a Windows Runtime type.ÀÏÌÀÏ·ÀÏogÀÏ·A/// Gets information about how strings are encoded and formatted.ÀÐ(ÀÐÀÏÙYÀÐ:/// Specifies that this type interprets an LPTSTR as ANSI.ÀЊÀÐyÀÐ5_ÀÐy=/// Specifies that this type interprets an LPTSTR as Unicode.ÀÐìÀÐÞÀЗ_ÀÐÞ@/// Specifies that this type interprets an LPTSTR automatically.ÀÑtÀÑ^ÀÐù€…ÀÑ^^/// Specifies that the type has a non-standard encoding, as specified by
/// CustomFormatMask.ÀÒ+ÀÒÀÑ�€´ÀÒ€Ž/// Use this mask to get non-standard encoding information for native interop.
/// The meaning of the values of these two bits is unspecified.ÀÒ¹ÀÒ¥ÀÒ8€‹ÀÒ¥f/// Specifies that the type must be initialized before the first attempt to
/// access a static field.ÀÓÀÓ ÀÒÆ]ÀÓ >/// Specifies that the type is exported, and a type forwarder.ÀÓ—ÀÓ†ÀÓ&{ÀÓ†Y/// This flag and the flags below are used internally by the common language
/// runtime.ÀÔ ÀÓùÀÓ¤qÀÓùN/// Specifies that the common language runtime should check the name encoding.ÀÔkÀÔ[ÀÔ]ÀÔ[</// Specifies that the type has security associated with it.†N/0U€¢€£€ñ� �7�N�|�£�¤�·�æ‚‚‚%‚W‚‚‚ƒ‚›‚Ê‚ò‚óƒƒ?ƒeƒfƒˆƒµƒÛƒÜƒû„(„N„O„q„ž„Ąńä……7…8…Z…‡…­…®…Í…ú† †!†C†p†–†—†¶†ã‡ ‡
‡*‡W‡}‡~‡š‡Ë‡õ‡öˆˆCˆjˆkˆŒˆ¼ˆæˆç‰‰8‰f‰g‰„‰´‰Þ‰ßŠŠ3Š[Š\ЋлŠåŠæ‹‹E‹u‹v‹�‹Ä‹ó‹ôŒŒ@ŒfŒgŒ‘Œ½ŒãŒä��3�]�^�z�«�Ö�׎ŽKŽwŽxŽŸŽÎŽ÷Žø��R�€���§�Ú����R��€�—�Å�í�î‘‘8‘e‘f‘²‘Ä‘÷’@’A’X’‰’Ð’Ò’Ó““$“p“›““Ô”/”W”X”¦”¼”é••••O•d•�•¾•é•ê––K–s–t–º–á———V—�—¨—©—ô˜˜@˜A˜‹˜š˜À˜â˜ã™4™K™u™›™œ™é™ûš!šCšDš“š¡šÇšéšê›4›\›€›�›Â›éœ œ␍œXœ…œ®œ¯œû�&�M�N�š�Å�ì�íž-žYž�ž‚žÑž÷Ÿ$ŸMŸNŸŽŸ½ŸèŸé  G m n ­ Ø ÿ¡¡¡K¡g¡¶¡Ç¡ó¢¢¢E¢o¢•¢–¢²¢Û£££!£N£w£x£³£è¤¤¤\¤�¤¾¤¿¥¥8¥k¥l¥º¥Ì¦
¦D¦E¦”¦´¦ð§(§*§+§g§}§œ§Ì§ø§ù¨/¨[¨ƒ¨„¨Ë¨ò©©©g©’©¹©ºªª(ªIªJª“ª¹ªÛªÜ«*«G«q«—«˜«æ«ó¬¬;¬<¬Œ¬©¬Ï¬ñ¬ò­(­M­n­o­¢­É­ì­í®>®J®s®˜®™®¿®ï¯¯¯g¯Š¯³¯Ø¯Ù°&°M°p°q°Á°Ó±±9±:±n±–±º±»²²3²Z²[²¦²Ñ²ø²ù³I³x³£³¤³ä´´8´9´‡´ž´Ë´ô´õµ6µaµˆµ‰µØ¶¶4¶6¶7¶y¶�¶´¶à·· ·R·i·‹·©·ª·ä¸
¸,¸-¸f¸‹¸¬¸­¸ö¹¹5¹X¹Y¹�¹È¹ï¹ðº-ºVº{º|º·ºÞ»»»S»d»Ž»´»µ¼¼¼=¼d¼e¼¥¼Ñ¼ù¼ú½?½k½“½”½Ç½ñ¾¾¾W¾‰¾·¾¸¾ñ¿¿I¿J¿¿¯¿Û¿Ý¿ÞÀ@À@.À@[À@�À@¯À@ÖÀAÀA1ÀA]ÀA‚ÀA®ÀAÓÀAÿÀB$ÀBPÀBuÀB¡ÀBÆÀBòÀCÀCCÀChÀC”ÀC¹ÀCåÀD
ÀD6ÀD[ÀDŒÀD¶ÀDçÀEÀECÀEnÀE›ÀEÂÀEóÀFÀFLÀFtÀF¢ÀFÊÀFùÀG"ÀGRÀG|ÀG¬ÀGÖÀHÀH@ÀHsÀH ÀHÒÀHþÀI1ÀI^ÀIŽÀI¸ÀIæÀJÀJAÀJnÀJ¢ÀJÐÀJýÀK$ÀKRÀKzÀK°ÀKàÀLÀL>ÀLpÀLœÀLËÀLôÀM)ÀMXÀM†ÀM®ÀMÝÀNÀN5ÀN^ÀN�ÀN¼ÀNõÀO(ÀO^ÀOŽÀO¿ÀOêÀPÀPBÀPoÀP–ÀP˜ÀP™ÀPßÀPôÀQ7ÀQYÀQwÀQxÀQ½ÀQàÀQÿÀRÀR0ÀRXÀR|ÀR}ÀR½ÀRéÀSÀSÀSJÀStÀSšÀS›ÀSÚÀT ÀT4ÀT5ÀTCÀTiÀT‹ÀT�ÀTŽÀTÑÀTãÀUÀU2ÀUUÀUVÀU”ÀUºÀUàÀUáÀVÀVCÀVpÀVqÀV®ÀVÔÀVúÀVûÀW-ÀWXÀWƒÀW„ÀWÓÀWòÀX ÀXNÀXPÀXQÀX{ÀX‘ÀXºÀXâÀYÀYÀYÀYBÀYiÀYjÀYzÀY¨ÀYÒÀYÓÀZ␍ÀZ8ÀZ_ÀZ`ÀZ”ÀZÂÀZìÀZíÀ[8À[†À[ÖÀ[èÀ\À\:À\;À\KÀ\zÀ\¥À\¦À\÷À]À]CÀ]mÀ]nÀ]½À]ôÀ^#À^NÀ^OÀ^_À^ŠÀ^±À^²À^ÂÀ^ÿÀ_8À_9À_†À_—À_ÓÀ` À` À`UÀ`qÀ`®À`çÀ`èÀ`øÀa1ÀafÀagÀa·ÀaÙÀb
Àb7Àb8ÀbHÀbtÀbœÀb�ÀbìÀc)ÀcWÀc�Àc‚ÀcÎÀdÀdOÀd|Àd¥Àd¦ÀdôÀeEÀe\Àe‹Àe¶Àe·ÀfÀfRÀf�ÀfÖÀgÀg2Àg3ÀgCÀgsÀgŸÀg Àg°ÀgØÀgüÀgþÀgÿÀh=ÀhUÀh¤ÀhÏÀhöÀh÷Ài7ÀicÀi‹ÀiŒÀiÛÀj
Àj7Àj`ÀjaÀj˜ÀjÂÀjèÀjéÀj÷ÀkÀk?ÀkAÀkBÀknÀkƒÀkªÀkÑÀkùÀl!ÀlIÀlqÀlšÀlÃÀlíÀmÀm@ÀmiÀm—ÀmÅÀmïÀnÀnIÀnyÀn¤ÀnÏÀnùÀo#ÀoIÀooÀo˜ÀoÁÀoëÀpÀp>ÀpgÀp�Àp¹ÀpåÀqÀq6Àq[ÀqˆÀqµÀqæÀrÀrDÀrqÀrœÀrÇÀrþÀs5Às\ÀsƒÀs¨ÀsÍÀsöÀtÀt!Àt"ÀtSÀtgÀt“ÀtÁÀtïÀtðÀu&ÀuOÀuxÀuyÀu«ÀuÑÀu÷ÀuøÀv8ÀvdÀv�Àv‘ÀvÒÀvÿÀw,Àw-ÀwmÀw™ÀwÅÀwÆÀxÀx6ÀxdÀxeÀx²ÀxãÀyÀyÀyaÀy‘ÀyÁÀyÂÀyîÀzÀzBÀzCÀzŒÀz¶ÀzàÀzáÀ{)À{YÀ{‰À{ŠÀ{ÄÀ{òÀ| À|!À|QÀ|ƒÀ|µÀ|¶À|àÀ}À}*À}+À}ZÀ}ƒÀ}¬À}­À}ØÀ~À~(À~)À~[À~�À~§À~¨À~ðÀÀFÀGÀrÀ˜À¾À¿ÀîÀ€À€FÀ€GÀ€�À€¯À€ÝÀ€ÞÀ�"À�RÀ�‚À�ƒÀ�ÀÀ�éÀ‚À‚À‚SÀ‚À‚«À‚¬À‚ïÀƒÀƒAÀƒBÀƒ�Àƒ¥ÀƒÖÀ„À„À„YÀ„›À„ËÀ„ûÀ„üÀ…JÀ…gÀ…–À…ÅÀ…ÆÀ†À†0À†YÀ†ZÀ†©À†¸À†äÀ‡À‡À‡bÀ‡�À‡¼À‡½À‡üÀˆ'ÀˆRÀˆTÀˆUÀˆjÀˆˆÀˆ‰ÀˆšÀˆ¹ÀˆºÀˆÎÀˆðÀˆñÀ‰À‰&À‰'À‰DÀ‰aÀ‰bÀ‰‚À‰ŸÀ‰ À‰½À‰ÚÀ‰ÛÀ‰ûÀŠÀŠÀŠ6ÀŠSÀŠTÀŠtÀŠ‘ÀŠ’ÀНÀŠÌÀŠÍÀŠíÀ‹
À‹ À‹(À‹EÀ‹FÀ‹dÀ‹�À‹‚À‹œÀ‹½À‹¾À‹ÛÀ‹ùÀ‹úÀŒÀŒ:ÀŒ;ÀŒVÀŒ{ÀŒ|ÀŒ—ÀŒ¸ÀŒ¹ÀŒÝÀŒüÀŒýÀ�*À�KÀ�LÀ�sÀ�šÀ�›À�²À�ØÀ�ÙÀ�÷ÀŽÀŽÀŽ=ÀŽZÀŽ[ÀŽxÀŽ™ÀŽšÀŽ´ÀŽÖÀŽ×À�À�:À�;À�`À�€À��À�¥À�ÊÀ�ËÀ�ïÀ�À�À�)À�MÀ�NÀ�cÀ�‚À�ƒÀ�˜À�¼À�½À‘À‘À‘WÀ‘XÀ‘mÀ‘«À‘¬À‘öÀ’À’À’SÀ’rÀ’sÀ’¿À’ÓÀ’óÀ’ôÀ“À“?À“@À“sÀ“’À““À“×À“ñÀ“òÀ”AÀ”_À”`À”©À”ÄÀ”ÅÀ•␍À•À•3À•4À•ƒÀ•˜À•µÀ•¶À–À–À–*À–+À–xÀ–„À–�À–žÀ–æÀ—À—À—AÀ—[À—\À—¥À—ÅÀ—ÆÀ˜À˜.À˜/À˜yÀ˜—À˜˜À˜ÖÀ˜õÀ˜öÀ™CÀ™gÀ™‡À™ˆÀ™ÆÀ™èÀ™éÀšÀš8Àš9ÀšvÀš”Àš•ÀšâÀšñÀ›À›À›8À›UÀ›VÀ›pÀ›ŒÀ›�À›«À›ËÀ›ÌÀœÀœ-Àœ.ÀœnÀœ”Àœ•ÀœÕÀœÿÀ�À�LÀ�\À��À�ŽÀ�ÛÀ�ùÀž(Àž)ÀžFÀžiÀžjÀžžÀž½Àž¾ÀŸÀŸÀŸÀŸmÀŸ‹ÀŸŒÀŸÓÀŸëÀŸìÀ 3À LÀ MÀ ™À ´À ÑÀ ÒÀ¡À¡)À¡BÀ¡CÀ¡‘À¡¬À¡ÅÀ¡ÆÀ¡úÀ¢À¢À¢DÀ¢^À¢_À¢®À¢¸À¢ÔÀ¢ÕÀ¢ùÀ£À£À£fÀ£‡À££À£¤À£ïÀ¤ À¤
À¤XÀ¤hÀ¤�À¤‘À¤ÃÀ¤ÞÀ¤ßÀ¥*À¥HÀ¥IÀ¥’À¥°À¥±À¥ÿÀ¦!À¦"À¦`À¦À¦€À¦ÌÀ¦áÀ§À§À§AÀ§_À§`À§­À§ÐÀ§ÑÀ§ôÀ¨À¨À¨[À¨pÀ¨…À¨†À¨¾À¨×À¨ØÀ©À©'À©(À©oÀ©…À©ŸÀ© À©âÀªÀªÀª<ÀªXÀªYÀª’Àª¬Àª­ÀªüÀ« À«(À«)À«rÀ«‚À« À«¡À«ßÀ«þÀ«ÿÀ¬BÀ¬aÀ¬bÀ¬“À¬°À¬±À¬îÀ­À­À­KÀ­lÀ­mÀ­ À­ÃÀ­ÄÀ­áÀ­ÿÀ® À®<À®XÀ®tÀ®�À®¬À®ÈÀ®äÀ¯À¯À¯8À¯YÀ¯zÀ¯œÀ¯ºÀ¯ÜÀ¯ûÀ°À°:À°[À°|À°¥À°ÉÀ°ìÀ±À±1À±PÀ±tÀ±™À±·À±ÖÀ±ýÀ² À²CÀ²cÀ²‰À²¨À²ÈÀ²èÀ³ À³5À³\À³~À³žÀ³¼À³½À³þÀ´À´À´WÀ´mÀ´nÀ´œÀ´·À´¸À´öÀµÀµÀµLÀµiÀµjÀµ§ÀµÉÀµÊÀµÖÀµïÀµðÀÀ¶4À¶5À¶qÀ¶ŽÀ�À¶ÂÀ¶æÀ¶çÀ·"À·?À·@À·pÀ·’À·“À·àÀ·ýÀ¸"À¸#À¸JÀ¸eÀ¸fÀ¸tÀ¸’À¸“À¸¡À¸ÂÀ¸ÃÀ¸ûÀ¹À¹À¹LÀ¹mÀ¹nÀ¹·ÀºÀºQÀºaÀºÀº€ÀºŽÀº°Àº±À»À»À»=À»>À»‹À»ÀÀ»âÀ»ãÀ»ñÀ¼À¼À¼À¼NÀ¼OÀ¼šÀ¼©À¼ØÀ¼ÙÀ½ À½:À½jÀ½kÀ½yÀ½¥À½¦À½ôÀ¾À¾8À¾9À¾GÀ¾fÀ¾gÀ¾´À¾ïÀ¿À¿À¿[À¿¦À¿ØÀ¿øÀ¿ùÀÀEÀÀ”ÀÀ©ÀÀËÀÀÌÀÁÀÁcÀÁ¬ÀÁãÀÂÀÂÀÂÀÂ8ÀÂ9ÀÂGÀÂbÀÂcÀ°ÀÂÎÀÂÏÀÃ␍ÀÃ,ÀÃ-ÀÃzÀçÀÃÇÀÃÈÀÃýÀÄÀÄÀÄ'ÀÄ@ÀÄAÀÄ_ÀÄ~ÀÄ�ÀĽÀÄÞÀÄþÀÅ#ÀÅDÀÅkÀÅ�ÀÅ®ÀÅËÀÅëÀÆ ÀÆ,ÀÆLÀÆoÀÆ‹ÀƯÀÆ×ÀÆûÀÇÀÇKÀÇiÀÇ…ÀÇ¥ÀǦÀÇÐÀÇõÀÇöÀÈ*ÀÈJÀÈKÀÈ{ÀȘÀÈ™ÀÈ×ÀÈúÀÈûÀÉ:ÀÉ^ÀÉ_ÀÉ�ÀÉÀÀÉÁÀÊÀÊ&ÀÊ'ÀÊrÀÊšÀÊ›ÀÊåÀË ÀË␍ÀË7ÀËXÀËYÀË ÀËÁÀËÂÀÌÀÌ/ÀÌ0ÀÌhÀÌ�ÀÌŽÀ̼ÀÌåÀÌæÀÍÀÍ*ÀÍ+ÀÍXÀÍxÀÍyÀÍ¢ÀÍÁÀÍÂÀÍòÀÎÀÎÀÎVÀÎxÀÎyÀ΢ÀοÀÎÀÀÎíÀÏÀÏÀÏIÀÏnÀÏoÀϱÀÏØÀÏÙÀÐÀÐ4ÀÐ5ÀÐsÀЖÀЗÀÐØÀÐøÀÐùÀÑBÀÑXÀÑ€ÀÑ�ÀÑÐÀÒÀÒ7ÀÒ8ÀÒ„ÀÒŸÀÒÅÀÒÆÀÓÀÓ%ÀÓ&ÀÓsÀÓ€ÀÓ£ÀÓ¤ÀÓóÀÔÀÔÀÔUÀÔw�
CorElementType CorEventAttr CorFieldAttrCorGenericParamAttr␍CorMethodAttr␍CorMethodImpl␍CorNativeType CorParamAttr CorPEKind␍CorPinvokeMapCorPropertyAttr CorTokenType CorTypeAttrELEMENT_TYPE_ENDELEMENT_TYPE_VOIDELEMENT_TYPE_BOOLEANELEMENT_TYPE_CHARELEMENT_TYPE_I1ELEMENT_TYPE_U1ELEMENT_TYPE_I2ELEMENT_TYPE_U2ELEMENT_TYPE_I4ELEMENT_TYPE_U4ELEMENT_TYPE_I8ELEMENT_TYPE_U8ELEMENT_TYPE_R4ELEMENT_TYPE_R8ELEMENT_TYPE_STRINGELEMENT_TYPE_PTRELEMENT_TYPE_BYREFELEMENT_TYPE_VALUETYPEELEMENT_TYPE_CLASSELEMENT_TYPE_VARELEMENT_TYPE_ARRAYELEMENT_TYPE_GENERICINSTELEMENT_TYPE_TYPEDBYREFELEMENT_TYPE_IELEMENT_TYPE_UELEMENT_TYPE_FNPTRELEMENT_TYPE_OBJECTELEMENT_TYPE_SZARRAYELEMENT_TYPE_MVARELEMENT_TYPE_CMOD_REQDELEMENT_TYPE_CMOD_OPTELEMENT_TYPE_INTERNALELEMENT_TYPE_MAXELEMENT_TYPE_MODIFIERELEMENT_TYPE_SENTINELELEMENT_TYPE_PINNED␍evSpecialNameevReservedMaskevRTSpecialNamefdFieldAccessMaskfdPrivateScope fdPrivate␍fdFamANDAssem
fdAssemblyfdFamily fdFamORAssemfdPublicfdStatic
fdInitOnly fdLiteralfdNotSerialized␍fdSpecialName␍fdPinvokeImplfdReservedMaskfdRTSpecialNamefdHasFieldMarshal fdHasDefault␍fdHasFieldRVAgpVarianceMask gpNonVariant gpCovariantgpContravariantgpSpecialConstraintMaskgpNoSpecialConstraintgpReferenceTypeConstraint gpNotNullableValueTypeConstraintgpDefaultConstructorConstraintmdMemberAccessMaskmdPrivateScope mdPrivate␍mdFamANDAssemmdAssemmdFamily mdFamORAssemmdPublicmdStaticmdFinal mdVirtual mdHideBySigmdVtableLayoutMask mdReuseSlot mdNewSlotmdCheckAccessOnOverride
mdAbstract␍mdSpecialName␍mdPinvokeImplmdUnmanagedExportmdReservedMaskmdRTSpecialName␍mdHasSecuritymdRequireSecObjectmiCodeTypeMaskmiILmiNativemiOPTIL miRuntime␍miManagedMask miUnmanaged miManaged miForwardRef␍miPreserveSigmiInternalCallmiSynchronized miNoInliningmiAggressiveInliningmiNoOptimizationmiMaxMethodImplValNATIVE_TYPE_ENDNATIVE_TYPE_VOIDNATIVE_TYPE_BOOLEANNATIVE_TYPE_I1NATIVE_TYPE_U1NATIVE_TYPE_I2NATIVE_TYPE_U2NATIVE_TYPE_I4NATIVE_TYPE_U4NATIVE_TYPE_I8NATIVE_TYPE_U8NATIVE_TYPE_R4NATIVE_TYPE_R8NATIVE_TYPE_SYSCHARNATIVE_TYPE_VARIANTNATIVE_TYPE_CURRENCYNATIVE_TYPE_PTRNATIVE_TYPE_DECIMALNATIVE_TYPE_DATENATIVE_TYPE_BSTRNATIVE_TYPE_LPSTRNATIVE_TYPE_LPWSTRNATIVE_TYPE_LPTSTRNATIVE_TYPE_FIXEDSYSSTRINGNATIVE_TYPE_OBJECTREFNATIVE_TYPE_IUNKNOWNNATIVE_TYPE_IDISPATCHNATIVE_TYPE_STRUCTNATIVE_TYPE_INTFNATIVE_TYPE_SAFEARRAYNATIVE_TYPE_FIXEDARRAYNATIVE_TYPE_INTNATIVE_TYPE_UINTNATIVE_TYPE_NESTEDSTRUCTNATIVE_TYPE_BYVALSTRNATIVE_TYPE_ANSIBSTRNATIVE_TYPE_TBSTRNATIVE_TYPE_VARIANTBOOLNATIVE_TYPE_FUNCNATIVE_TYPE_ASANYNATIVE_TYPE_ARRAYNATIVE_TYPE_LPSTRUCTNATIVE_TYPE_CUSTOMMARSHALERNATIVE_TYPE_IINSPECTABLENATIVE_TYPE_HSTRINGNATIVE_TYPE_ERRORNATIVE_TYPE_MAXpdInpdOut
pdOptionalpdReservedMask pdHasDefaultpdHasFieldMarshalpdUnusedpeNotpeILonlype32BitRequiredpe32Plus␍pe32Unmanagedpe32BitPreferred
pmNoMangle␍pmCharSetMaskpmCharSetNotSpec␍pmCharSetAnsipmCharSetUnicode␍pmCharSetAutopmBestFitUseAssempmBestFitEnabledpmBestFitDisabled␍pmBestFitMaskpmThrowOnUnmappableCharUseAssempmThrowOnUnmappableCharEnabledpmThrowOnUnmappableCharDisabledpmThrowOnUnmappableCharMaskpmSupportsLastErrorpmCallConvMaskpmCallConvWinapipmCallConvCdeclpmCallConvStdcallpmCallConvThiscallpmCallConvFastcall
pmMaxValue␍prSpecialNameprReservedMaskprRTSpecialName prHasDefaultprUnused mdtModule
mdtTypeRef
mdtTypeDef mdtFieldDef mdtMethodDef mdtParamDefmdtInterfaceImpl mdtMemberRefmdtCustomAttribute␍mdtPermission mdtSignaturemdtEvent mdtProperty mdtModuleRef mdtTypeSpec mdtAssemblymdtAssemblyRefmdtFilemdtExportedTypemdtManifestResourcemdtGenericParam␍mdtMethodSpecmdtGenericParamConstraint mdtStringmdtName mdtBaseTypetdVisibilityMask tdNotPublictdPublictdNestedPublictdNestedPrivatetdNestedFamilytdNestedAssemblytdNestedFamANDAssemtdNestedFamORAssem tdLayoutMask tdAutoLayouttdSequentialLayouttdExplicitLayouttdClassSemanticsMasktdClass tdInterface
tdAbstracttdSealed␍tdSpecialNametdImporttdSerializabletdWindowsRuntimetdStringFormatMask tdAnsiClasstdUnicodeClass tdAutoClasstdCustomFormatClasstdCustomFormatMasktdBeforeFieldInit tdForwardertdReservedMasktdRTSpecialName␍tdHasSecurity¹¡
Binary file not shown.

After

Width:  |  Height:  |  Size: 83 B

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