+
    »Wîi7-  ã                  ó˜  € R t ^ RIHt ^ RIt^ RIt^ RIt^ RIt^ RIHt ]! ]	4      P                  P                  4       t]P                  ! ]4       ]P                  P                  ^ ]! ]4      4       Rt^ RIt^ RIHt ^ RIHt ^ RIHtHt ^ RIHt ^ R	IHt ]P<                  ! 4       t]P@                  ! R
RR7      R R l4       t! ! R R]4      t"]PF                  ! ]"4       0 R/mt$]R,          t%R R lt&R t'](R8X  EdI   ^ RI)t)^ RI*t*^ RI+t+R]PX                   2t-]P\                  ! ]'RRR7      P_                  4        R t0]P\                  ! ]0RRR7      P_                  4        ]1! R14       ]1! R]Pd                   R24       ]1! R04       ]1! R]- 24       ]1! R]- R 24       ]1! R!4       ]1! 4        ]1! R"4       ]1! R#4       ]1! R$4       ]1! 4        ]1! R%4       ]1! R&4       ]1! R'4       ]1! R(4       ]1! R)4       ]1! 4        ]1! R*4       ]1! R24       ]+Pf                  ! R+]Ph                  ]PX                  R]! ]4      .R,.. R3OR-R.7       R# R# )4u>  
run.py â€” People Hub Dev Server with Live Browser Reload
========================================================
Run this file during development instead of main.py.

    python run.py

What it does:
  âœ… Starts FastAPI with hot-reload on .py changes (uvicorn --reload)
  âœ… Watches static/ for .html / .css / .js changes
  âœ… Sends a Server-Sent Events (SSE) signal to every open browser tab
  âœ… Browser auto-refreshes â€” no manual F5 needed
  âœ… Injects a tiny <script> into every HTML page served (dev only)
  âœ… Single terminal, single command

Stop:  Ctrl+C
)ÚannotationsN)ÚPathuò  <script>
/* People Hub Live Reload â€” dev server only */
(function(){
  function connect() {
    var es = new EventSource('/livereload/ping');
    es.addEventListener('reload', function() {
      console.log('[livereload] change detected, reloading...');
      location.reload();
    });
    es.onerror = function() {
      es.close();
      setTimeout(connect, 1000);   // retry after server restart
    };
  }
  connect();
  console.log('[livereload] watching for file changes');
})();
</script>)ÚBaseHTTPMiddleware)ÚRequest)ÚStreamingResponseÚResponse)Úapp)Úsettingsz/livereload/pingF)Úinclude_in_schemac               ó   € V ^8„  d   QhRR/# ©é   Úrequestr   © )Úformats   "Ú(D:\Python_Codes\gen_ai\people_hub\run.pyÚ__annotate__r   N   s   € ÷ ñ  7ñ ó    c              ƒ  óF   a "  € V 3R lp\        V! 4       RRRRR/R7      # 5i)u?   SSE stream â€” browsers subscribe here for live-reload signals.c                ó<  <"  € R 5x € ^ p  \         P                  ! R4      G Rj  x€L
  SP                  4       G Rj  x€L
 '       d   R# \        P	                  4       '       d   \        P                  4        R5x € V ^,          p V ^28¼  g   K„  ^ p R5x € K�   Lr L\5i)zdata: connected

g333333Ó?Nzevent: reload
data: 1

z: keep-alive

)ÚasyncioÚsleepÚis_disconnectedÚ_reload_flagÚis_setÚclear)Úkeepalive_ticksr   s    €r   ÚstreamÚlivereload_ping.<locals>.streamQ   sƒ   øé € Ø#Ó#ØˆØÜ—-’- Ó$×$Ð$à×,Ñ,Ó.×.Ö.Ùä×"Ñ"×$Ò$Ü×"Ñ"Ô$Ø2Ó2ð ˜qÕ ˆOØ "Ö$Ø"#�Ø(Õ(ñ %á.ùs1   ƒ"B¥B¦B½B¾	BÁBÁ$&BÂ
BÂBztext/event-streamzCache-Controlzno-cachezX-Accel-BufferingÚno)Ú
media_typeÚheaders)r   )r   r   s   f r   Úlivereload_pingr"   M   s1   øé € õ)ô& Ù‹Ø&à Ø ð
ôð ùs   ƒ!c                  ó"   € ] tR t^rtR R ltRtR# )Ú_LiveReloadMiddlewarec               ó   € V ^8„  d   QhRR/# r   r   )r   s   "r   r   Ú"_LiveReloadMiddleware.__annotate__s   s   € ÷ 
ñ 
 gñ 
r   c              ƒ  	ór  "  € V! V4      G R j  x€L
 pVP                   P                  RR4      pRV9  d   V# RpVP                    R j  x€L
  pT\        V\        4      '       d   TMVP                  4       ,          pK;   Lr L8D9TP                  RRR7      p\        R,           pR	T9   d   TP                  R	T^4      MTR
,           \        ,           p\        TTP                  RTP                   P                  4        U	U
u/ uF  w  ršT	P                  4       R9  g   K  YšbK   	  Mu up
p	i up
p	R7      # 5i)Núcontent-typeÚ z	text/htmlr   zutf-8Úreplace)Úerrorsz
</body>z</body>Ú
)ÚcontentÚstatus_coder    r!   )zcontent-lengthr(   )r!   ÚgetÚbody_iteratorÚ
isinstanceÚbytesÚencodeÚdecodeÚLIVERELOAD_SCRIPTr*   r   r.   ÚitemsÚlower)Úselfr   Ú	call_nextÚresponseÚctÚ
body_bytesÚchunkÚhtmlÚtagÚkÚvs   &&&        r   ÚdispatchÚ_LiveReloadMiddleware.dispatchs   s'  é € Ù#,¨WÓ#5×5ˆð ×Ñ×!Ñ! .°"Ó5ˆØ˜bÔ ØˆOð ˆ
Ø#×1Ò1÷ 	Pð 	P�%Ø¤:¨e´U×#;Ò#;™%ÀÇÁÃÕOŠJñ 6ñ	PÐ1ð × Ñ  °Ð Ó;ˆô   +Õ-ˆØ2;¸tÔ2Cˆt�|‰|˜I s¨AÔ.ÈÐPTÍÔWhÕIhˆäØØ ×,Ñ,Ø"à!)×!1Ñ!1×!7Ñ!7Ô!9ôÙ!9™˜Ø—7‘7“9Ð$FÑFô �’Ò!9ùöô	
ð 	
ùsF   ‚D7ŽB�7D7ÁBÁ
BÁBÁ4D7ÂBÂA>D7ÄD(Ä!D(Ä'D7r   N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__rB   Ú__static_attributes__r   r   r   r$   r$   r   s   † ÷
ñ 
r   r$   Ústaticc               ó    € V ^8„  d   QhRRRR/# )r   Ú	directoryr   Úreturnzdict[str, float]r   )r   s   "r   r   r   ž   s   € ÷ 
ñ 
˜tð 
Ð(8ñ 
r   c                óV  € / pV P                  4       '       g   V# V P                  R 4       Fg  pVP                  4       '       g   K  VP                  P	                  4       \
        9   g   K@   VP                  4       P                  V\        V4      &   Ki  	  V#   \         d     K{  i ; i)Ú*)
ÚexistsÚrglobÚis_fileÚsuffixr7   Ú_WATCH_EXTSÚstatÚst_mtimeÚstrÚOSError)rK   ÚresultÚfs   &  r   Ú_collect_mtimesrZ   ž   s„   € Ø!€FØ×Ñ×ÒØˆØ�_‰_˜SÖ!ˆØ�9‰9�;Œ;˜1Ÿ8™8Ÿ>™>Ó+¬{Ö:ðØ!"§¡£×!2Ñ!2�”s˜1“v“ñ "ð €Møô ô Úðús   Á-&BÂB(Â'B(c                 óê  € \        \        4      p  \        P                  ! R4       \        \        4      p\	        V4      \	        V 4      ,
          p\	        V 4      \	        V4      ,
          pV Uu0 uF"  qDV 9   g   K  W,          W,          8w  g   K   VkK$  	  ppW#,          V,          pV'       d<   RP                  R V 4       4      p\        RV R24       \        P	                  4        Tp Kà  u upi )Tgš™™™™™Ù?z, c              3  óL   "  € T F  p\        V4      P                  x € K  	  R # 5i)N)r   Úname)Ú.0Úps   & r   Ú	<genexpr>Ú"_watcher_thread.<locals>.<genexpr>·   s   é € Ð<±G¨qœd 1›gŸlžl³Gùs   ‚"$u   
[livereload] ðŸ”„  u$     changed â€” refreshing browser...
)rZ   Ú
_WATCH_DIRÚtimer   ÚsetÚjoinÚprintr   )ÚprevÚcurrÚaddedÚremovedr@   ÚmodifiedÚchangedÚnamess           r   Ú_watcher_threadrn   «   s¼   € Üœ:Ó&€DØ
Ü�
Š
�3ŒÜœzÓ*ˆä�t“9œs 4›yÕ(ˆÜ�t“9œs 4›yÕ(ˆÙ#ÓH™t˜!¨D¡y”A°TµWÀÅÑ5G—A�A™tˆÐHØ•? XÕ-ˆçØ—I‘IÑ<±GÓ<Ó<ˆEÜÐ)¨%¨Ð0UÐVÔWÜ×ÑÔàŠùò Is   Á0C0Á=C0ÂC0Ú__main__zhttp://localhost:Tzstatic-watcher)ÚtargetÚdaemonr]   c                 ó¸  € \         P                   ! 4       ^,           p \         P                   ! 4       V 8  dR   \         P                  ! R4        \        P                  ! R\        P
                  3RR7      ;_uu_ 4         RRR4       \        P                  ! \        4       \        R\         24       R#   + '       g   i     Kª  ; i  \         d     K»  i ; i)zÆ
Poll localhost until the server accepts TCP connections, then open
the default browser. Tries for up to 15 seconds before giving up.
Runs as a daemon thread so it never blocks uvicorn starting up.
g      Ð?Ú	localhostg      à?)ÚtimeoutNu   [browser] âœ…  Opened )rc   r   ÚsocketÚcreate_connectionr	   ÚAPP_PORTrW   Ú
webbrowserÚopenÚURLrf   )Údeadlines    r   Ú_open_browserr|   Ï   s—   € ô —9’9“; Õ#ˆÜ�iŠi‹k˜HÔ$Ü�JŠJ�tÔðÜ×-Ò-¨{¼H×<MÑ<MÐ.NÐX[×\Ö\Ø÷ ]ô
 	�ŠœÔÜÐ&¤s eÐ,Ö-÷ ]×\Ð\ûäô Úðús0   Á0C
 Á>B6Â C
 Â6C	ÃC
 ÃC
 Ã
CÃCzbrowser-openerz  u     Â·  DEV SERVERu     ðŸŒ�  URL      â†’  u     ðŸ“–  Docs     â†’  z/docsu8     ðŸš€  Browser opens automatically when server is readyz  Live reloadu5       .py files      â†’  server restarts automaticallyu7       .html .css .js â†’  browser refreshes automaticallyz:  Test credentials  (edit data/users.json to change stage)u&       DEMO0001  â†’  Stage 1  Assessmentu%       DEMO0002  â†’  Stage 2  Role Playu"       DEMO0003  â†’  Stage 3  Codingu%       DEMO0004  â†’  Stage 4  Technicalz  Stop:  Ctrl+Czrun:appz*.pyÚinfo)ÚhostÚportÚreloadÚreload_dirsÚreload_includesÚreload_excludesÚ	log_level>   ú.jsú.cssú.htmú.htmluÀ   â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�uÁ   
â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�uÁ   â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�
)zstatic/*zdata/*z*.htmlz*.cssz*.jsz*.json)5Ú__doc__Ú
__future__r   ÚosÚsysÚ	threadingrc   Úpathlibr   Ú__file__ÚparentÚresolveÚROOTÚchdirÚpathÚinsertrV   r5   r   Ústarlette.middleware.baser   Ústarlette.requestsr   Ústarlette.responsesr   r   Úmainr   Úconfigr	   ÚEventr   r/   r"   r$   Úadd_middlewarerS   rb   rZ   rn   rD   ru   rx   Úuvicornrw   rz   ÚThreadÚstartr|   rf   ÚAPP_NAMEÚrunÚAPP_HOSTr   r   r   Ú<module>r£      sG  ðñõ" #ã 	Û 
Û Û Ý ñ ˆHƒ~×Ñ×$Ñ$Ó&€Ø ‡‚ˆ„Ø ‡�‡��‘3�t“9Ô ðÐ ó. Ý 8Ý &ß ;å Ý ð �ŠÓ €ð ‡‚Ð	¨uÔ5ôó 6ðôH
Ð.ô 
ð> × Ò Ð(Ô )ò /€Ø�X�o€
õ
òð. ˆzÕÛÛÛà˜h×/Ñ/Ð0Ð
1€Cð ×ÒØ tÐ2Bôç�e„gò.ð$ ×Ò˜M°$Ð=MÔN×TÑTÔVñ 
Ð
ÔÙ	ˆBˆx× Ñ Ð!Ð!1Ð
2Ô3Ù	ˆ*ÔÙ	Ð" 3 %Ð
(Ô)Ù	Ð" 3 % uÐ
-Ô.Ù	ÐDÔFÙ	„GÙ	ˆ/ÔÙ	Ð
AÔBÙ	Ð
CÔDÙ	„GÙ	Ð
FÔGÙ	Ð
2Ô3Ù	Ð
1Ô2Ù	Ð
.Ô/Ù	Ð
1Ô2Ù	„GÙ	Ð
ÔÙ	Ð
Ôð ‡K‚KØØ×ÑØ×ÑØÙ˜“Y�KØ˜ò
ð
 ÷ño r   