⚡ Shadow Academy
đŸ’Ĩ Chapter 15

āĻāχ āĻ…āĻ§ā§āϝāĻžāϝāĻŧ⧇ āϕ⧀ āĻļāĻŋāĻ–āĻŦ⧇

⏱ āφāύ⧁āĻŽāĻžāύāĻŋāĻ• āϏāĻŽāϝāĻŧ: ā§§ā§Ģâ€“ā§¨ā§Ļ āĻŽāĻŋāύāĻŋāϟ ¡ āĻĒā§‚āĻ°ā§āĻŦāĻļāĻ°ā§āϤ: āφāϗ⧇āϰ āĻ…āĻ§ā§āϝāĻžāϝāĻŧ⧇āϰ āϧāĻžāϰāĻŖāĻž

ā§Ļ / ā§§ā§Ļā§Ļ āĻ…āĻ§ā§āϝāĻžā§ŸāϚāĻžāϞāĻŋāϝāĻŧ⧇ āϝāĻžāĻ“: āĻ…āĻ§ā§āϝāĻžāϝāĻŧ 16

āĻ…āĻ—ā§āϰāĻ—āϤāĻŋ āĻāχ browser-āĻ āĻ¸ā§āĻĨāĻžāύ⧀āϝāĻŧāĻ­āĻžāĻŦ⧇ āϏāĻ‚āϰāĻ•ā§āώāĻŋāϤ āĻšāĻŦ⧇āĨ¤

đŸ’Ĩ
Race Condition — āĻāĻ•āϏāĻžāĻĨ⧇ āĻĻ⧁āχāĻŦāĻžāϰ Request āĻĒāĻžāĻ āĻžāĻ“
āϏāĻŽāϝāĻŧ⧇āϰ āĻŽāĻžāχāĻ•ā§āϰ⧋āϏ⧇āϕ⧇āĻ¨ā§āĻĄ āĻĢāĻžāρāϕ⧇ āĻĄāĻžāϟāĻžāĻŦ⧇āϏ āϞāĻ•āĻŋāĻ‚ āĻŦāĻžāχāĻĒāĻžāϏ āĻ•āϰ⧇ āĻĻā§āĻŦāĻŋāϗ⧁āĻŖ āĻĢāĻžā§ŸāĻĻāĻž āύ⧇āĻ“ā§ŸāĻž
🧭 āĻĻāĻ•ā§āώāϤāĻž āϝāĻžāϚāĻžāχ āĻ“ āĻĒā§āϰāϤāĻŋāϰāĻ•ā§āώāĻžāĻŽā§‚āϞāĻ• takeaway
Skill checkpoint: Concurrent operation-āĻ race condition āϕ⧀āĻ­āĻžāĻŦ⧇ data integrity āĻ­āĻžāϙ⧇ āϤāĻž āĻŦā§āϝāĻžāĻ–ā§āϝāĻž āĻ•āϰ⧋āĨ¤
Defense checkpoint: Atomic transaction, idempotency āĻ“ uniqueness constraint āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧋.
Lab scope: āĻļ⧁āϧ⧁ āύāĻŋāĻœā§‡āϰ lab, synthetic data āĻŦāĻž āϞāĻŋāĻ–āĻŋāϤ āĻ…āύ⧁āĻŽāϤāĻŋāĻĒā§āϰāĻžāĻĒā§āϤ target-āĻ āĻ…āύ⧁āĻļā§€āϞāύ āĻ•āϰ⧋āĨ¤ Real credential, token āĻŦāĻž customer data āĻŦā§āϝāĻŦāĻšāĻžāϰ āϕ⧋āϰ⧋ āύāĻžāĨ¤
Portfolio proof: finding, impact, fix āĻ“ retest āύāĻŋā§Ÿā§‡ ā§Ģ-āϞāĻžāχāύ⧇āϰ redacted note āϰāĻžāĻ–ā§‹āĨ¤
âąī¸ āĻ—āĻ˛ā§āĻĒ ā§§: āĻāϟāĻŋāĻāĻŽ āĻŦ⧁āĻĨ⧇ āĻĻ⧁āχ āĻŦāĻ¨ā§āϧ⧁āϰ āϝ⧁āĻ—āĻĒā§Ž āϟāĻžāĻ•āĻž āϤ⧋āϞāĻžāϰ āĻ•āĻžāĻšāĻŋāύ⧀
āϏ⧌āϰāĻ­ āĻ“ āϤāĻžāϰ āĻŦāĻ¨ā§āϧ⧁ āĻāĻ• āĻŽāϜāĻžāϰ āĻĒāϰ⧀āĻ•ā§āώāĻž āĻ•āϰāĻžāϰ āĻ•āĻĨāĻž āĻ­āĻžāĻŦāϞāĨ¤ āϏ⧌āϰāϭ⧇āϰ āĻŦā§āϝāĻžāĻ‚āĻ• āĻ…ā§āϝāĻžāĻ•āĻžāωāĻ¨ā§āĻŸā§‡ āφāϛ⧇ āĻŽāĻžāĻ¤ā§āϰ ā§Ģā§Ļā§Ļ āϟāĻžāĻ•āĻžāĨ¤

āϏ⧌āϰāĻ­ āĻĸ⧁āĻ•āϞ āĻŦā§āϰāĻžāĻžā§āĻšā§‡āϰ āĻāĻ•āĻĻāĻŋāϕ⧇āϰ āĻāϟāĻŋāĻāĻŽ āĻŦ⧁āĻĨ⧇, āφāϰ āϤāĻžāϰ āĻŦāĻ¨ā§āϧ⧁ āĻĸ⧁āĻ•āϞ āĻ…āĻ¨ā§āϝāĻĻāĻŋāϕ⧇āϰ āĻŦ⧁āĻĨ⧇āĨ¤ āϘ⧜āĻŋāϰ āĻ•āĻžāρāϟāĻž āĻŽāĻŋāϞāĻŋā§Ÿā§‡ āϤāĻžāϰāĻž āωāĻ­ā§Ÿā§‡āχ āĻ āĻŋāĻ• āĻāĻ•āχ āĻŽāĻŋāϞāĻŋāϏ⧇āϕ⧇āĻ¨ā§āĻĄā§‡ "ā§Ģā§Ļā§Ļ āϟāĻžāĻ•āĻž āωāχāĻĨāĻĄā§āϰ" āĻŦāĻžāϟāύ⧇ āϚāĻžāĻĒ āĻĻāĻŋāϞ!

āĻŦā§āϝāĻžāĻ‚āϕ⧇āϰ āĻĄāĻžāϟāĻžāĻŦ⧇āϏ āϝāĻ–āύ āĻšā§‡āĻ• āĻ•āϰāϤ⧇ āϗ⧇āϞ, āϏāĻžāĻ°ā§āĻ­āĻžāϰ āϏ⧌āϰāϭ⧇āϰ āϰāĻŋāĻ•ā§‹ā§Ÿā§‡āĻ¸ā§āϟ āĻĻ⧇āϖ⧇ āĻŦāϞāϞ — "āĻŦā§āϝāĻžāϞ⧇āĻ¨ā§āϏ ā§Ģā§Ļā§Ļ āϟāĻžāĻ•āĻž āφāϛ⧇, āĻĻāĻŋā§Ÿā§‡ āĻĻāĻžāĻ“āĨ¤" āφāϰ āĻ āĻŋāĻ• āĻāĻ•āχ āĻŽāĻžāχāĻ•ā§āϰ⧋āϏ⧇āϕ⧇āĻ¨ā§āĻĄā§‡ āĻŦāĻ¨ā§āϧ⧁āϰ āϰāĻŋāĻ•ā§‹ā§Ÿā§‡āĻ¸ā§āĻŸā§‡āĻ“ āĻĄāĻžāϟāĻžāĻŦ⧇āϏ āĻŦā§āϝāĻžāϞ⧇āĻ¨ā§āϏ āĻĻ⧇āĻ–āϞ ā§Ģā§Ļā§Ļ āϟāĻžāĻ•āĻž, āĻ•āĻžāϰāĻŖ āϏ⧌āϰāϭ⧇āϰ āϟāĻžāĻ•āĻž āĻ•āĻžāϟāĻžāϰ āφāĻĒāĻĄā§‡āϟ āϤāĻ–āύāĻ“ āĻĄāĻžāϟāĻžāĻŦ⧇āϏ⧇ āϏ⧇āĻ­ āĻšā§ŸāύāĻŋ!

āĻĢāϞ? āωāĻ­ā§Ÿā§‡āχ ā§Ģā§Ļā§Ļ āĻ•āϰ⧇ āĻŽā§‹āϟ ā§§ā§Ļā§Ļā§Ļ āϟāĻžāĻ•āĻž āϤ⧁āϞ⧇ āύāĻŋāϞ! āĻāϟāĻžāχ āĻ•ā§āϞāĻžāϏāĻŋāĻ• Race Condition (TOCTOU - Time Of Check to Time Of Use)!
💸 āĻ—āĻ˛ā§āĻĒ ā§¨: āχ-āĻ•āĻŽāĻžāĻ°ā§āϏ⧇āϰ āϕ⧁āĻĒāύ āϕ⧋āĻĄ āĻ“ āĻ—āĻŋāĻĢāϟ āĻ•āĻžāĻ°ā§āĻĄ āϞ⧁āĻĒāĻŋāĻ‚
āχ-āĻ•āĻŽāĻžāĻ°ā§āϏ āϏāĻžāχāϟāϗ⧁āϞ⧋āϤ⧇ āϝāĻ–āύ āϕ⧋āύ⧋ āϏāĻŋāĻ™ā§āϗ⧇āϞ-āχāωāϜ āϕ⧁āĻĒāύ (āϝ⧇āĻŽāύ: FLAT500) āĻĨāĻžāϕ⧇, āϏāĻžāĻ°ā§āĻ­āĻžāϰ⧇āϰ āϏāĻžāϧāĻžāϰāĻŖ āϕ⧋āĻĄ āĻšā§Ÿ:
if (coupon.is_valid && !user.has_used(coupon)) { apply_discount(order); mark_coupon_as_used(coupon, user); // āĻĄāĻžāϟāĻžāĻŦ⧇āϏ⧇ āĻĢā§āĻ˛ā§āϝāĻžāĻ— āφāĻĒāĻĄā§‡āϟ }

āĻšā§‡āĻ• āĻ•āϰāĻž āĻāĻŦāĻ‚ āĻĄāĻžāϟāĻžāĻŦ⧇āϏ⧇ āϏ⧇āĻ­ āĻ•āϰāĻžāϰ āĻŽāĻžāĻāĻ–āĻžāύ⧇ āϝāĻĻāĻŋ ⧍ āĻŽāĻŋāϞāĻŋāϏ⧇āϕ⧇āĻ¨ā§āĻĄā§‡āϰ āĻĢāĻžāρāĻ• āĻĨāĻžāϕ⧇, āϤāĻŦ⧇ āϤ⧁āĻŽāĻŋ āϝāĻĻāĻŋ ā§Ģā§ĻāϟāĻŋ āĻĒā§āϝāĻžāϰāĻžāϞāĻžāϞ āĻĨā§āϰ⧇āĻĄ āĻĻāĻŋā§Ÿā§‡ āĻāĻ•āϏāĻžāĻĨ⧇ āϰāĻŋāĻ•ā§‹ā§Ÿā§‡āĻ¸ā§āϟ āĻĒāĻžāĻ āĻžāĻ“, āϤāĻŦ⧇ ā§Š āĻĨ⧇āϕ⧇ ā§ĢāϟāĻŋ āϰāĻŋāĻ•ā§‹ā§Ÿā§‡āĻ¸ā§āϟ āĻāĻ•āχ āϏāĻžāĻĨ⧇ "āĻ­ā§āϝāĻžāϞāĻŋāĻĄ" āĻĒā§‡ā§Ÿā§‡ āϝāĻžāĻŦ⧇! ā§Ģā§Ļā§Ļ āϟāĻžāĻ•āĻžāϰ āϕ⧁āĻĒāύ āĻĻāĻŋā§Ÿā§‡ ā§§ā§Ģā§Ļā§Ļ āϟāĻžāĻ•āĻž āĻĄāĻŋāϏāĻ•āĻžāωāĻ¨ā§āϟ!
🚀 āĻ—āĻ˛ā§āĻĒ ā§Š: Turbo Intruder āĻ“ HTTP/2 Single-Packet Attack
āĻŦ⧃āĻˇā§āϟāĻŋ āĻŽā§āϝāĻžāĻŽ āĻŦāϞāϞ⧇āύ, "āϏ⧌āϰāĻ­, āĻĒāĻžāχāĻĨāύ⧇āϰ āϏāĻžāϧāĻžāϰāĻŖ āϞ⧁āĻĒ āĻĻāĻŋā§Ÿā§‡ āĻŽāĻŋāϞāĻŋāϏ⧇āϕ⧇āĻ¨ā§āĻĄā§‡āϰ āϰ⧇āϏ āĻœā§‡āϤāĻž āϝāĻžā§Ÿ āύāĻž, āĻ•āĻžāϰāĻŖ āύ⧇āϟāĻ“ā§ŸāĻžāĻ°ā§āĻ• āĻ˛ā§āϝāĻžāĻŸā§‡āĻ¨ā§āϏāĻŋ āφāϞāĻžāĻĻāĻž āĻšā§ŸāĨ¤"

āφāϧ⧁āύāĻŋāĻ• āĻšā§āϝāĻžāĻ•āĻŋāĻ‚ā§Ÿā§‡āϰ āϏ⧇āϰāĻž āĻ…āĻ¸ā§āĻ¤ā§āϰ āĻšāϞ⧋ HTTP/2 Single-Packet Attack! āĻāĻ–āĻžāύ⧇ ā§Ģā§ĻāϟāĻŋ āϰāĻŋāĻ•ā§‹ā§Ÿā§‡āĻ¸ā§āϟ āϤ⧈āϰāĻŋ āĻ•āϰ⧇ āϏāĻžāĻ°ā§āĻ­āĻžāϰ⧇āϰ āĻĻāϰāϜāĻžā§Ÿ āφāϟāϕ⧇ āϰāĻžāĻ–āĻž āĻšā§Ÿ, āφāϰ āĻļ⧇āώ ā§§āϟāĻŋ āĻŽāĻžāĻ¤ā§āϰ TCP āĻĒā§āϝāĻžāϕ⧇āϟ āĻĒāĻžāĻ āĻžāύ⧋ āĻšā§Ÿ āϝāĻž ā§Ģā§ĻāϟāĻŋ āϰāĻŋāĻ•ā§‹ā§Ÿā§‡āĻ¸ā§āϟāϕ⧇ āĻāĻ•āϏāĻžāĻĨ⧇āχ āϏāĻžāĻ°ā§āĻ­āĻžāϰ⧇āϰ āϏāĻŋāĻĒāĻŋāχāωāϤ⧇ āĻāĻ•ā§āϏāĻŋāĻ•āĻŋāωāϟ āĻ•āϰāĻžā§Ÿ! Burp Suite-āĻāϰ Turbo Intruder āĻāĻ•ā§āϏāĻŸā§‡āύāĻļāύ āĻĻāĻŋā§Ÿā§‡ āĻāϟāĻž āύāĻŋāϖ⧁āρāϤāĻ­āĻžāĻŦ⧇ āĻ•āϰāĻž āϝāĻžā§ŸāĨ¤
đŸ›Ąī¸ āĻ—āĻ˛ā§āĻĒ ā§Ē: āĻĄāĻŋāĻĢ⧇āĻ¨ā§āϏ — āϏāĻžāĻ°ā§āĻ­āĻžāϰ āϕ⧀āĻ­āĻžāĻŦ⧇ āύāĻŋāĻœā§‡āϕ⧇ āϰāĻ•ā§āώāĻž āĻ•āϰāĻŦ⧇?
āĻāĻ•āϜāύ āĻ­āĻžāϞ⧋ āĻāĻĨāĻŋāĻ•ā§āϝāĻžāϞ āĻšā§āϝāĻžāĻ•āĻžāϰāϕ⧇ āĻĄāĻŋāĻĢ⧇āĻ¨ā§āϏāĻ“ āϜāĻžāύāϤ⧇ āĻšāĻŦ⧇:

ā§§. Database Row Locks: SELECT ... FOR UPDATE āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž āϝāĻžāϤ⧇ āĻāĻ•āϜāύ āĻŸā§āϰāĻžāύāĻœā§āϝāĻžāĻ•āĻļāύ āĻļ⧇āώ āύāĻž āĻ•āϰāĻž āĻĒāĻ°ā§āϝāĻ¨ā§āϤ āĻ…āĻ¨ā§āϝ āϕ⧇āω āĻŸā§‡āĻŦāĻŋāϞ āĻĒ⧜āϤ⧇ āύāĻž āĻĒāĻžāϰ⧇āĨ¤
⧍. Distributed Mutex (Redis Lock): āϰ⧇āĻĄāĻŋāϏ āĻĻāĻŋā§Ÿā§‡ āχāωāϜāĻžāϰ āφāχāĻĄāĻŋ āĻŦāĻž āϕ⧁āĻĒāύ āϕ⧋āĻĄā§‡āϰ āĻ“āĻĒāϰ ⧍ āϏ⧇āϕ⧇āĻ¨ā§āĻĄā§‡āϰ āϞāĻ• āĻŦāϏāĻŋā§Ÿā§‡ āĻĻ⧇āĻ“ā§ŸāĻžāĨ¤
ā§Š. Database Unique Constraint: āĻĄāĻžāϟāĻžāĻŦ⧇āϏ āϞ⧇āϭ⧇āϞ⧇ āχāωāύāĻŋāĻ• āĻ•āĻŋ āϰāĻžāĻ–āĻž āϝāĻžāϤ⧇ āĻĄā§āĻĒā§āϞāĻŋāϕ⧇āϟ āχāύāϏāĻžāĻ°ā§āϟ āϏāϰāĻžāϏāϰāĻŋ āĻĢ⧇āχāϞ āĻ•āϰ⧇āĨ¤
âąī¸ Race Attack Concurrency Simulator
āϟāĻžāĻ°ā§āϗ⧇āϟ āϕ⧁āĻĒāύ āĻŦāĻž āĻŸā§āϰāĻžāĻ¨ā§āϏāĻĢāĻžāϰ āĻāĻ¨ā§āĻĄāĻĒāϝāĻŧ⧇āĻ¨ā§āϟ āĻĻāĻžāĻ“ — ā§Ģā§ĻāϟāĻŋ āĻĨā§āϰ⧇āĻĄā§‡āϰ āϏāĻžāχāĻŽāĻžāϞāĻŸā§‡āύāĻŋāϝāĻŧāĻžāϏ āϰ⧇āϏ āĻ…ā§āϝāĻžāϟāĻžāĻ• āĻŸā§‡āĻ¸ā§āϟ āĻ•āϰ⧋!
👆 āωāĻĒāϰ⧇ āχāύāĻĒ⧁āϟ āĻĻāĻŋā§Ÿā§‡ "āĻ˛ā§āϝāĻžāĻŦ āϚāĻžāϞ⧁ āĻ•āϰ⧋" āĻŦāĻžāϟāύ⧇ āĻ•ā§āϞāĻŋāĻ• āĻ•āϰ⧋...
đŸŽ¯ Chapter 15 āϕ⧁āχāϜ (ā§§ā§ĻāϟāĻž āĻĒā§āϰāĻļā§āύ)
āĻĒā§āϰāϤāĻŋāϟāĻž āωāĻ¤ā§āϤāϰ⧇ click āĻ•āϰ⧋ → āϏāĻŦ⧁āϜ/āϞāĻžāϞ + āĻŦā§āϝāĻžāĻ–ā§āϝāĻž!
❓ āĻĒā§āϰāĻļā§āύ 1: Race Condition āϕ⧀?
💡 Race Condition = concurrent operations-āĻāϰ timing vulnerabilityāĨ¤ āĻĻ⧁āĻŸā§‹ thread āĻāĻ•āχ resource-āĻ āĻāĻ•āϏāĻžāĻĨ⧇ access āĻ•āϰāϞ⧇ inconsistent stateāĨ¤
❓ āĻĒā§āϰāĻļā§āύ 2: Race Condition-āĻāϰ classic example?
💡 Coupon apply: check(valid) → apply(). āĻĻ⧁āĻŸā§‹ request āĻāĻ•āϏāĻžāĻĨ⧇ āĻĒāĻžāĻ āĻžāϞ⧇ āĻĻ⧁āĻŸā§‹āχ check āĻĒāĻžāϏ āĻ•āϰ⧇ apply āĻšāϝāĻŧāĨ¤
❓ āĻĒā§āϰāĻļā§āύ 3: asyncio.gather() āϕ⧀ āĻ•āϰ⧇?
💡 asyncio.gather(*tasks) = āϏāĻŦ tasks āĻāĻ•āϏāĻžāĻĨ⧇ concurrent-āĻ run āĻ•āϰ⧇āĨ¤ Race attack-āĻ āϏāĻŦ requests āĻāĻ•āχ āϏāĻŽāϝāĻŧ⧇ āĻĒāĻžāĻ āĻžāϤ⧇ āĻĻāϰāĻ•āĻžāϰāĨ¤
❓ āĻĒā§āϰāĻļā§āύ 4: Race Condition test āĻ•āϰāĻžāϰ tool?
💡 Burp Suite Turbo Intruder āĻŦāĻž Python asyncio āĻĻāĻŋāϝāĻŧ⧇ ā§Ģā§Ļ-ā§§ā§Ļā§Ļ simultaneous requests āĻĒāĻžāĻ āĻŋāϝāĻŧ⧇ race condition test āĻ•āϰ⧋āĨ¤
❓ āĻĒā§āϰāĻļā§āύ 5: Server-side race condition fix āϕ⧀āĻ­āĻžāĻŦ⧇?
💡 Fix: Database transaction (BEGIN/COMMIT) + row-level lockāĨ¤ Coupon apply → SELECT FOR UPDATE → one at a timeāĨ¤
❓ āĻĒā§āϰāĻļā§āύ 6: TOCTOU āϕ⧀?
💡 TOCTOU = Time-Of-Check Time-Of-UseāĨ¤ Check āĻ•āϰ⧇ (valid?) āϤāĻžāϰāĻĒāϰ use āĻ•āϰ⧇āĨ¤ āĻŽāĻžāĻā§‡āϰ gap-āĻ race condition!
❓ āĻĒā§āϰāĻļā§āύ 7: aiohttp āϕ⧀?
💡 aiohttp = asyncio-based HTTP clientāĨ¤ requests-āĻāϰ async versionāĨ¤ Concurrent/parallel HTTP requests āĻĒāĻžāĻ āĻžāϤ⧇ idealāĨ¤
❓ āĻĒā§āϰāĻļā§āύ 8: Race Condition attack-āĻ āϏāĻžāĻĢāĻ˛ā§āϝ⧇āϰ āĻšāĻžāϰ āĻŦāĻžāĻĄāĻŧāĻžāϤ⧇ āϕ⧀ āĻ•āϰāĻŦā§‹?
💡 Server-āĻāϰ āĻ•āĻžāϛ⧇ āĻĨ⧇āϕ⧇ (low latency) āĻ“ āĻŦ⧇āĻļāĻŋ concurrent connections āĻĻāĻŋāϝāĻŧ⧇ race window hit āĻ•āϰāĻžāϰ probability āĻŦāĻžāĻĄāĻŧ⧇āĨ¤
❓ āĻĒā§āϰāĻļā§āύ 9: Double-spend attack āϕ⧋āĻĨāĻžāϝāĻŧ āϏāĻŽā§āĻ­āĻŦ?
💡 Double-spend = race condition āĻĻāĻŋāϝāĻŧ⧇ āĻāĻ•āχ balance āĻĻ⧁āĻŦāĻžāϰ āĻ–āϰāϚ āĻ•āϰāĻžāĨ¤ Wallet, coupon apply, referral claim-āĻāĨ¤
❓ āĻĒā§āϰāĻļā§āύ 10: Race Condition-āĻāϰ defensive mechanism?
💡 Idempotency key = request-āĻ unique UUID āĻĒāĻžāĻ āĻžāĻ“āĨ¤ Server duplicate detect āĻ•āϰāϞ⧇ second process āĻ•āϰ⧇ āύāĻžāĨ¤

āĻŦāĻŋāĻļā§āĻŦāĻ¸ā§āϤ reference

āφāϰāĻ“ āĻĒāĻĄāĻŧāĻžāϰ āϜāĻ¨ā§āϝ āĻĒā§āϰāϤāĻŋāĻˇā§āĻ āĻŋāϤ security standards āĻ“ guidance āĻĻ⧇āĻ–ā§‹; āĻĒā§āϰāϤāĻŋāϟāĻŋ lab āĻ…āύ⧁āĻŽā§‹āĻĻāĻŋāϤ āĻŦāĻž synthetic environment-āĻ āĻ•āϰ⧋āĨ¤

Bristy Ma'am
āĻŦ⧃āĻˇā§āϟāĻŋ āĻŽā§āϝāĻžāĻŽ 👩‍đŸĢ
āϤ⧋āĻŽāĻžāϰ āĻĒāĻžāĻ°ā§āϏ⧋āύāĻžāϞ āĻšā§āϝāĻžāĻ•āĻŋāĻ‚ āĻŽā§‡āĻ¨ā§āϟāϰ â€ĸ āĻ…āύāϞāĻžāχāύ
āφāϰ⧇ āϏ⧌āϰāĻ­! āϕ⧇āĻŽāύ āφāϛ⧋? āϕ⧋āύ⧋ āĻ•āύāϏ⧇āĻĒā§āϟ āĻŦāĻž āϕ⧁āχāĻœā§‡ āφāϟāĻ•āĻžāϞ⧇ āφāĻŽāĻžāϕ⧇ āĻŦāϞ⧋, āφāĻŽāĻŋ āĻŦ⧁āĻāĻŋā§Ÿā§‡ āĻĻāĻŋāĻšā§āĻ›āĻŋ! â¤ī¸