ó
    ¿]ßjÕ™  ã                  óB  • S r SSKJr  SSKrSSKrSSKrSSKrSSKJr  SSK	J
r
Jr  SSKJr  SSKJrJrJr  SS	KJr  SS
KJrJrJrJr  SSKJr  SSKJrJr  SSKJr  SSK J!r!J"r"J#r#J$r$J%r%J&r&J'r'  SSK(J)r)  \RT                  " S5      r+SS jr, " S S5      r- " S S5      r.g)uG   Orchestrator: market data â†’ quote â†’ paper/live â†’ risk â†’ status.é    )ÚannotationsN)ÚPath)ÚOptionalÚUnioné   )Ú	AppConfig)ÚBookTopÚMarketDataFeedÚdiscover_market)ÚPaperEngine)ÚQuoteÚQuoteLadderÚbuild_quoteÚbuild_ladder)Ú
Momentum1m)Úanalyze_regimeÚRegimeLeanHold)ÚRiskManager)ÚMarkoutTrackerÚday_pnl_policyÚeffective_half_bpsÚinventory_policyÚmerge_allowsÚ
ofi_policyÚside_allow_hysteresis)ÚStatusWriterzlighter_mm.botc                ó‚   • [        U SS5      nUc$  [        5       U l        [        R	                  S5        U R                  $ )z8Guard: live/paper must never crash on missing _momentum.Ú	_momentumNu/   _momentum was missing â€” recreated (bug guard))Úgetattrr   r   ÚlogÚwarning)ÚbotÚms     Ú
src/bot.pyÚ_ensure_momentumr%      s5   € ä��[ $Ó'€AØ�yÜ"›ˆŒÜ�‰ÐEÔFØ�=‰=Ðó    c                  ó^   • \ rS rSrSrSS jrSS jrSS jrSS jrSS jr	SS jr
SS	 jrS
rg)Ú
MicroMMBoté(   z%Paper-mode bot (unchanged behaviour).c                ó¶  • UR                   (       a  [        S5      eXl        X l        [	        UR
                  R                  UR                  5      U l        [        UR                  UR
                  R                  [        [        UR                  SS5      =(       d    S5      S9U l
        X!R                  R                  -  n[!        X1R                  R"                  5      U l        S U l        S U l        [(        R*                  " SS9U l        SU l        [0        R0                  " 5       U l        [5        5       U l        [(        R8                  " 5       U l        g )Nz;Use LiveMicroMMBot for live. Set mode=paper for this class.Úmax_inventory_btcr   ©r+   é   ©Úmaxsizeç        )Úis_liveÚRuntimeErrorÚcfgÚrootr   ÚcapitalÚpaper_equity_usdÚpaperÚenginer   ÚriskÚfloatr   ÚquotingÚstatusÚpathr   Úconsole_every_sÚmetaÚfeedÚasyncioÚQueueÚ_queueÚ_last_quote_tsÚtimeÚ_startr   r   ÚEventÚ_stop)Úselfr3   r4   Ústatus_paths       r$   Ú__init__ÚMicroMMBot.__init__+   sð   € Ø�;�;Üð1óð ð ŒØŒ	Ü! #§+¡+×">Ñ">ÀÇ	Á	ÓJˆŒÜØ�H‰HØ�K‰K×(Ñ(Ü#¤G¨C¯K©KÐ9LÈaÓ$P×$UÐTUÓVñ
ˆŒ	ð
 ŸZ™ZŸ_™_Ñ,ˆÜ" ;·
±
×0JÑ0JÓKˆŒØˆŒ	Ø.2ˆŒ	Ü.5¯mªmÀCÑ.HˆŒØ!ˆÔÜ—i’i“kˆŒÜ#›ˆŒÜ—]’]“_ˆ�
r&   c           	   ƒ  óö  #   • [        U R                  R                  R                  U R                  R                  R                  U R                  R                  R
                  5      I S h  v•N U l        [        R                  SU R                  R                  U R                  R
                  U R                  R                  U R                  R                  U R                  R                  U R                  R                  5        [        U R                  R                  R                  U R                  R                  R                  U R                  R
                  U R                  S9U l        g  GN	7f)Nz>Market %s id=%s mark=%.1f size_dec=%s price_dec=%s min_base=%s©Úrest_urlÚws_urlÚ	market_idÚon_top)r   r3   ÚvenuerO   ÚsymbolrQ   r?   r    ÚinfoÚ
mark_priceÚsize_decimalsÚprice_decimalsÚmin_base_amountr
   rP   Ú_enqueue_topr@   ©rI   s    r$   ÚsetupÚMicroMMBot.setupC   só   é € Ü)Ø�H‰H�N‰N×#Ñ#Ø�H‰H�N‰N×!Ñ!Ø�H‰H�N‰N×$Ñ$ó
÷ 
ˆŒ	ô
 	�‰ØLØ�I‰I×ÑØ�I‰I×ÑØ�I‰I× Ñ Ø�I‰I×#Ñ#Ø�I‰I×$Ñ$Ø�I‰I×%Ñ%ô	
ô #Ø—X‘X—^‘^×,Ñ,Ø—8‘8—>‘>×(Ñ(Ø—i‘i×)Ñ)Ø×$Ñ$ñ	
ˆ�	ò
ùs   ‚A+E9Á-E6Á.D	E9c                óJ  •  U R                   R                  U5        g ! [        R                   ap     U R                   R	                  5       nO! [        R
                   a     Of = f U R                   R                  U5         g ! [        R                   a      g f = ff = f©N©rC   Ú
put_nowaitrA   Ú	QueueFullÚ
get_nowaitÚ
QueueEmpty©rI   ÚtopÚ_s      r$   rZ   ÚMicroMMBot._enqueue_topY   óŒ   € ð
	Ø�K‰K×"Ñ" 3Õ'øÜ× Ñ ó 	ðØ—K‘K×*Ñ*Ó,‘øÜ×%Ñ%ó ÙðúðØ—‘×&Ñ& sÖ+øÜ×$Ñ$ó Úðúð	úóJ   ‚ žB"³AÁB"ÁA%Á"B"Á$A%Á%B"Á)BÂBÂB"ÂBÂB"c           	   ƒ  ó  #   • U R                   R                  U5      nU HD  n[        R                  SUR                  UR
                  UR                  UR                  5        MF     U R                  R                  U R                   UR                  5      n[        R                  " 5       nU R                  R                  R                  S-  nU R                   R                  R                   nUR"                  (       a  U R                   R%                  S 5        S nGOsXPR&                  -
  U:¼  d  UGc]  [)        UU R                   R                  R*                  U R                  R                  U R,                  R.                  U R,                  R0                  U R,                  R2                  U R,                  R4                  5      nU(       a¢  UR6                  (       d2  [9        UR:                  S-  U R,                  R.                  5      Ul        UR<                  (       d2  [9        UR>                  S-  U R,                  R.                  5      Ul        UR:                  UR>                  :¼  a  S nU R                   R%                  U5        XPl        U RA                  XU5        U R                  RB                  RD                  nU(       a:  XPRF                  -
  U:¼  a'  [        R                  SU5        U RI                  5         g g g 7f)Nz"FILL %s %.6f BTC @ %.1f (mid %.1f)ç     @�@ç      à?g      ø?õ$   duration_s=%.0f reached â€” stopping)%r8   Úon_bookr    rU   ÚsideÚsize_btcÚpriceÚmid_at_fillr9   ÚevaluateÚmidrE   r3   r;   Úrequote_interval_msÚstateÚquoteÚkilledÚ	set_quoterD   r   Úinventory_btcr?   rX   rW   rY   Úmin_quote_amountÚ	allow_bidÚroundÚbid_pxÚ	allow_askÚask_pxÚ_write_statusÚrunÚ
duration_srF   Ústop)	rI   rf   ÚfillsÚfÚdecisionÚnowÚintervalÚqÚdurs	            r$   Ú_process_topÚMicroMMBot._process_topf   s  é € Ø—‘×#Ñ# CÓ(ˆÛˆAÜ�H‰HØ4Ø—‘Ø—
‘
Ø—‘Ø—‘öñ ð —9‘9×%Ñ% d§k¡k°3·7±7Ó;ˆÜ�iŠi‹kˆØ—8‘8×#Ñ#×7Ñ7¸&Ñ@ˆØ!Ÿ[™[×.Ñ.×4Ñ4ˆà�?�?Ø�K‰K×!Ñ! $Ô'ØŠAØ×'Ñ'Ñ'¨HÓ4¸º	ÜØØ—‘×!Ñ!×/Ñ/Ø—‘× Ñ Ø—	‘	×(Ñ(Ø—	‘	×'Ñ'Ø—	‘	×)Ñ)Ø—	‘	×*Ñ*óˆAö Ø×)×)Ü$ Q§X¡X°¡^°T·Y±Y×5MÑ5MÓN�A”HØ×)×)Ü$ Q§X¡X°¡^°T·Y±Y×5MÑ5MÓN�A”HØ—8‘8˜qŸx™xÓ'Ø�AØ�K‰K×!Ñ! !Ô$Ø"%Ôà×Ñ˜3 8Ô,à�h‰h�l‰l×%Ñ%ˆÞ�CŸ+™+Ñ%¨#Ó-Ü�H‰HÐ;¸SÔAØ�I‰I�Kð .ˆ3ùs   ‚LLc                óT  • UR                   n0 SS_SU R                  (       a  U R                  R                  OU R                  R                  R                  _SU R                  (       a  U R                  R
                  OS _SU_SUR                  _SUR                  _SUc  S O.UR                  UR                  UR                  UR                  S	._S
U R                  R                  R                  _SU R                  R                  R                  U-  _SU R                  R                  R                  _SU R                  R!                  U5      _SU R                  R                  R"                  _SU R                  R!                  U5      _SU R                  R$                  R&                  _SU R                  R                  R(                  _SU R                  R+                  U5      _SU R                  R-                  U5      _0 SU R                  R/                  5       _SUR0                  _SUR2                  _SU R                  R4                  R6                  U R                  R4                  R8                  /_S[;        [=        U R                  R4                  SS5      5      _S[;        [=        U R                  R4                  SS5      5      _S[;        [=        U R                  R4                  SS5      5      _S[;        [=        U R                  R4                  SS5      5      _S[;        [=        U R                  R>                  SS5      5      _S[;        [=        U R                  R>                  SS5      5      _S [;        [=        U R                  R>                  S S5      5      _S![;        [=        U R                  R>                  S!S5      5      _S"U(       a  [A        [;        U R                  R                  R                  5      [;        U=(       d    S5      -  5      [C        [;        U R                  R!                  U5      =(       d    S5      S#5      -  OS_S$[D        RD                  " 5       U RF                  -
  _S%[I        U RJ                  =(       a    U RJ                  RL                  5      _S&U R                  RO                  5       _S'[;        U R                  R                  R                  5      S(:”  a  S)OS*_E[;        U R                  R                  R                  5      S+:  a  S)OS*[;        U R                  R                  R                  5      S(:”  a  S,O0[;        U R                  R                  R                  5      S+:  a  S-OS.U R                  RQ                  S/5      U R                  RS                  5       U R                  RU                  5       U R                  RW                  5       [Y        U R                  S05      (       a  U R                  R[                  5       O/ S1[=        U S2S 5      (       a  U R\                  R_                  5       OS U R                  R                  R`                  S3S   Vs/ s Hu  nURb                  URd                  URf                  UR                  [i        URf                  UR                  -  S45      URj                  URl                  URn                  S5.PMw     snS6.
EnU Rp                  Rs                  U5        g s  snf )7NÚmoder7   rT   rQ   ru   ÚbidÚaskrx   ©r   r�   rq   Úskew_bpsr{   Úinventory_usdÚcash_usdÚequityÚequity0Úcapital_usdÚcapital0_usdÚrealized_pnlÚday_pnlÚday_pnl_pctr†   ry   Úrisk_reasonÚlot_usdÚhalf_spread_bpsr0   Úrest_threshold_bpsÚ
min_rest_sr+   Úkill_day_pnl_pctç      ð¿Úsoft_leverage_minÚsoft_leverage_maxÚmax_notional_usdÚsoft_leverageç•Ö&è.>Úuptime_sÚws_okÚopen_positionsÚn_longç:Œ0âŽyE>r   r   ç:Œ0âŽyE¾ÚlongÚshortÚflaté   Úcandles_listé,  r   iœÿÿÿé   )Úidrp   rr   rq   Únotional_usdÚfee_usdrs   Úts)
Ún_shortÚposition_sideÚclose_eventsÚ
avg_buy_pxÚavg_sell_pxÚprice_historyÚcandlesÚ
candle_secÚmomentum_1mÚ
last_fills):ru   r?   rT   r3   rS   rQ   r‘   r’   r   r�   rq   r”   r8   rw   r{   r–   r—   r˜   r5   r6   r›   rœ   r�   Úfills_todayry   Úreasonr;   Úlot_usd_minÚlot_usd_maxr:   r   r9   ÚabsÚmaxrE   rF   Úboolr@   r«   r¬   r½   r¾   r¿   Úprice_history_listÚhasattrr´   r   Úsnapshotr†   r·   rp   rr   r~   r¹   rs   rº   r<   Úwrite)rI   rf   r‹   rˆ   ru   r‡   Úpayloads          r$   r‚   ÚMicroMMBot._write_status”   s.  € Ø�g‰gˆðQ
Ø�GðQ
à¨$¯)¯)�d—i‘i×&Ò&¸¿¹¿¹×9NÑ9NðQ
ð °·	·	˜Ÿ™×,Ò,¸tðQ
ð �3ð	Q
ð
 �3—7‘7ðQ
ð �3—7‘7ðQ
ð Ø‰yñ ð Ÿ(™(ØŸ(™(ØŸJ™JØŸJ™Jñ	ðQ
ð ˜TŸ[™[×.Ñ.×<Ñ<ðQ
ð  ˜TŸ[™[×.Ñ.×<Ñ<¸sÑBð!Q
ð" ˜Ÿ™×)Ñ)×2Ñ2ð#Q
ð$ �d—k‘k×(Ñ(¨Ó-ð%Q
ð& �t—{‘{×(Ñ(×0Ñ0ð'Q
ð( ˜4Ÿ;™;×-Ñ-¨cÓ2ð)Q
ð* ˜DŸH™H×,Ñ,×=Ñ=ð+Q
ð, ˜DŸK™K×-Ñ-×:Ñ:ð-Q
ð. �t—{‘{×*Ñ*¨3Ó/ð/Q
ð0 ˜4Ÿ;™;×2Ñ2°3Ó7ñ1Q
ð2 �T—[‘[×,Ñ,Ó.ð3Q
ð4 �h—o‘oð5Q
ð6 ˜8Ÿ?™?ð7Q
ð8 ˜Ÿ™×(Ñ(×4Ñ4°d·h±h×6FÑ6F×6RÑ6RÐSð9Q
ð: œu¤W¨T¯X©X×-=Ñ-=Ð?PÐRUÓ%VÓWð;Q
ð< !¤%¬°·±×0@Ñ0@ÐBVÐX[Ó(\Ó"]ð=Q
ð> œ%¤¨¯©×(8Ñ(8¸,ÈÓ LÓMð?Q
ð@  ¤¤w¨t¯x©x×/?Ñ/?ÐATÐVYÓ'ZÓ![ðAQ
ðB ¤¤g¨d¯h©h¯m©mÐ=OÐQUÓ&VÓ WðCQ
ðD  ¤¤w¨t¯x©x¯}©}Ð>QÐSVÓ'WÓ!XðEQ
ðF  ¤¤w¨t¯x©x¯}©}Ð>QÐSVÓ'WÓ!XðGQ
ðH ¤¤g¨d¯h©h¯m©mÐ=OÐQTÓ&UÓ VðIQ
ðJ ö ô ”U˜4Ÿ;™;×,Ñ,×:Ñ:Ó;¼eÀCÇJÈ3Ó>OÑOÓPÜ”u˜TŸ[™[×/Ñ/°Ó4×;¸Ó<¸dÓCòDàðQQ
ðT œŸ	š	› d§k¡kÑ1ðUQ
ðV ”T˜$Ÿ)™)×7¨¯	©	¯©Ó8ðWQ
ðX ˜dŸk™k×8Ñ8Ó:ðYQ
ð\ Ü˜4Ÿ;™;×,Ñ,×:Ñ:Ó;¸dÓB‘Èñ_Q
ôd ˜4Ÿ;™;×,Ñ,×:Ñ:Ó;¸eÓC‘Èô ˜Ÿ™×*Ñ*×8Ñ8Ó9¸DÓ@ñ ô ˜TŸ[™[×.Ñ.×<Ñ<Ó=ÀÓEñ àð !ŸK™K×4Ñ4°RÓ8ØŸ+™+×0Ñ0Ó2ØŸ;™;×2Ñ2Ó4Ø!Ÿ[™[×;Ñ;Ó=Ü5<¸T¿[¹[È.×5YÑ5Y�t—{‘{×/Ñ/Ô1Ð_aØÜ8?ÀÀkÐSW×8XÑ8X˜4Ÿ>™>×2Ñ2Ô4Ð^bð Ÿ™×*Ñ*×0Ñ0°°Ñ7óò 8�Að Ÿ$™$ØŸF™FØŸW™WØ !§
¡
Ü$)¨!¯'©'°A·J±JÑ*>ÀÓ$BØ Ÿy™yØ#$§=¡=ØŸ$™$ô	ñ 8ñòIQ
ˆðd 	�‰×Ñ˜'Õ"ùòs   ÚA<\%c                ó�   • U R                   R                  5         U R                  (       a  U R                  R                  5         g g r_   ©rH   Úsetr@   r…   r[   s    r$   r…   ÚMicroMMBot.stopê   ó*   € Ø�
‰
�‰ÔØ�9�9Ø�I‰I�N‰NÕð r&   c              ƒ  ó  #   • U R                  5       I S h  v•N   U R                  c   e[        R                  " U R                  R	                  5       5      n U R
                  R                  5       (       dp   [        R                  " U R                  R                  5       SS9I S h  v•N nU R%                  U5      I S h  v•N   U R
                  R                  5       (       d  Mp  U R                  R&                  n[)        U R                  R*                  5      nU R                  R#                  5         UR-                  5          UI S h  v•N   UR1                  5       (       ap  U R2                  R5                  U R6                  UR8                  5      nX@R                  l        U R;                  X R6                  R<                  R>                  U5        [        R!                  SU R6                  RA                  5       U R6                  RC                  UR1                  5       (       a  UR8                  OS5      U R6                  RE                  UR1                  5       (       a  UR8                  OS5      [G        U R6                  R<                  RH                  5      [G        U R6                  R<                  RJ                  5      5        g  GN¶ GN&! [        R                   ax    U R                  R                  R                  nU(       aL  [        R                  " 5       U R                  -
  U:¼  a&  [        R!                  SU5        U R#                  5          GM  f = f GNŸ GN! [        R.                   a     GN,f = f! U R                  R&                  n[)        U R                  R*                  5      nU R                  R#                  5         UR-                  5          UI S h  v•N    O! [        R.                   a     Of = fUR1                  5       (       ap  U R2                  R5                  U R6                  UR8                  5      nX@R                  l        U R;                  X R6                  R<                  R>                  U5        [        R!                  SU R6                  RA                  5       U R6                  RC                  UR1                  5       (       a  UR8                  OS5      U R6                  RE                  UR1                  5       (       a  UR8                  OS5      [G        U R6                  R<                  RH                  5      [G        U R6                  R<                  RJ                  5      5        f = f7f)Nrm   ©Útimeoutrn   z<Stopped. fills=%s equity=%.2f dayPnL=%.2f opens=%s closes=%sr   )&r\   r@   rA   Úcreate_taskrƒ   rH   Úis_setÚwait_forrC   ÚgetÚTimeoutErrorr3   r„   rE   rF   r    rU   r…   r�   Úlast_toprË   r«   ÚcancelÚCancelledErrorÚokr9   rt   r8   ru   r‚   rw   rx   rÅ   r—   rœ   ÚlenÚ	open_lotsÚclosed_trades)rI   Ú	feed_taskrf   rŒ   Úwas_wsÚds         r$   rƒ   ÚMicroMMBot.runï   s¥  é € Ø�j‰j‹l×ÐØ�y‰yÑ$Ð$Ð$Ü×'Ò'¨¯	©	¯©«Ó8ˆ	ð	Ø—j‘j×'Ñ'×)Ñ)ðÜ '× 0Ò 0°·±·±Ó1BÈCÑ P×P�Cð ×'Ñ'¨Ó,×,Ð,ð —j‘j×'Ñ'×)Ó)ð —)‘)×$Ñ$ˆCÜ˜$Ÿ)™)Ÿ/™/Ó*ˆFØ�I‰I�N‰NÔØ×ÑÔðØ—�ð �v‰v�x‰xØ—I‘I×&Ñ& t§{¡{°C·G±GÓ<�Ø"(—	‘	”Ø×"Ñ" 3¯©×(9Ñ(9×(?Ñ(?ÀÔCÜ�H‰HØNØ—‘×'Ñ'Ó)Ø—‘×"Ñ"¨c¯f©f¯h©h 3§7¢7¸AÓ>Ø—‘×#Ñ#¨s¯v©v¯x©x C§G¢G¸QÓ?Ü�D—K‘K×%Ñ%×/Ñ/Ó0Ü�D—K‘K×%Ñ%×3Ñ3Ó4õò7 	ò QøÜ×+Ñ+ó ØŸ(™(Ÿ,™,×1Ñ1�CÞ¤§	¢	£¨d¯k©kÑ 9¸cÓAÜŸ™Ð!GÈÔMØŸ	™	œÛðúò -ò  øÜ×)Ñ)ó Úðûð —)‘)×$Ñ$ˆCÜ˜$Ÿ)™)Ÿ/™/Ó*ˆFØ�I‰I�N‰NÔØ×ÑÔðØ—’øÜ×)Ñ)ó Ùðúà�v‰v�x‰xØ—I‘I×&Ñ& t§{¡{°C·G±GÓ<�Ø"(—	‘	”Ø×"Ñ" 3¯©×(9Ñ(9×(?Ñ(?ÀÔCÜ�H‰HØNØ—‘×'Ñ'Ó)Ø—‘×"Ñ"¨c¯f©f¯h©h 3§7¢7¸AÓ>Ø—‘×#Ñ#¨s¯v©v¯x©x C§G¢G¸QÓ?Ü�D—K‘K×%Ñ%×/Ñ/Ó0Ü�D—K‘K×%Ñ%×3Ñ3Ó4õüsÕ   ‚V–K—AVÁN Á90K Â)KÂ*K Â.N ÃM!Ã#N Ã(AVÅM' ÅM$ÅM' ÅE;VËK ËBMÍN ÍMÍN Í$M' Í'M?Í;VÍ>M?Í?VÎA VÏ#O/Ï(O+Ï)O/Ï.VÏ/PÐVÐPÐE=VÖV)rD   r   rC   rF   rH   r3   r8   r@   r?   r9   r4   r<   N©r3   r   r4   r   ©ÚreturnÚNone©rf   r	   rì   rí   ©rf   r	   r‹   zOptional[Quote]rì   rí   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__rK   r\   rZ   r�   r‚   r…   rƒ   Ú__static_attributes__© r&   r$   r(   r(   (   s+   † Ù/ô%ô0
ô,ô,ô\T#ôl÷
#r&   r(   c                  ó|   • \ rS rSrSrSS jrSS jr\SS j5       rSS jr	SS jr
SS jrSS	 jrSS
 jrSS jrSrg)ÚLiveMicroMMBoti  z4Live micro-MM: real post-only quotes on Lighter BTC.c           
     ó6  • UR                   (       d  [        S5      eS H5  n[        R                  R	                  U5      (       a  M)  [        SU 35      e   Xl        X l        S U l        S U l        S U l	        S U l
        S U l        X!R                  R                  -  n[        XAR                  R                  5      U l        [         R"                  " SS9U l        SU l        SU l        [*        R*                  " 5       U l        [         R.                  " 5       U l        SU l        S U l        S U l        [9        5       U l        [=        US-  S	-  S
-  [?        [A        URB                  SS5      =(       d    S5      S9U l"        SU l#        SU l$        SU l%        SU l&        [O        [        R                  S   5      U l(        [O        [        R                  S   5      U l)        [        R                  S   RU                  5       U l+        [Y        SS9U l-        S U l.        g )Nz9LiveMicroMMBot requires mode=live + live_enabled + LIVE=1)ÚLIGHTER_API_PRIVATE_KEYÚLIGHTER_ACCOUNT_INDEXÚLIGHTER_API_KEY_INDEXzMissing env r-   r.   r0   r   ÚdataÚ
stats_bookzmarkout.jsonlr    ç333333ó?)r=   Úhalf_bps_refÚgreenTrû   rü   rú   )Úhold_s)/r1   r2   ÚosÚenvironrÝ   r3   r4   r?   r@   r8   Úclientr9   r<   r=   r   r>   rA   rB   rC   rD   Ú_last_refresh_tsrE   rF   rG   rH   Ú_quote_cyclesÚ_ladder_taskÚ_refresh_taskr   r   r   r:   r   r;   Ú_markoutÚ_fills_seenÚ	_inv_bandÚ_prev_allow_bidÚ_prev_allow_askÚintÚ_account_indexÚ_api_key_indexÚstripÚ_api_private_keyr   Ú_regime_holdÚ_regime)rI   r3   r4   ÚkeyrJ   s        r$   rK   ÚLiveMicroMMBot.__init__  s²  € Ø�{�{ÜØKóð ó
ˆCô
 —:‘:—>‘> #×&Ó&Ü" \°#°Ð#7Ó8Ð8ñ
ð ŒØŒ	ØˆŒ	Ø.2ˆŒ	ØˆŒØˆŒØ+/ˆŒ	ØŸZ™ZŸ_™_Ñ,ˆÜ" ;·
±
×0JÑ0JÓKˆŒÜ.5¯mªmÀCÑ.HˆŒØ!ˆÔØ #ˆÔÜ—i’i“kˆŒÜ—]’]“_ˆŒ
ØˆÔØ15ˆÔØ26ˆÔÜ#›ˆŒÜ&Ø˜‘ Ñ-°Ñ?Üœw s§{¡{Ð4EÀsÓK×RÈsÓSñ
ˆŒð ˆÔØ ˆŒØ#ˆÔØ#ˆÔÜ!¤"§*¡*Ð-DÑ"EÓFˆÔÜ!¤"§*¡*Ð-DÑ"EÓFˆÔä "§
¡
Ð+DÑ E× KÑ KÓ MˆÔÜ*°#Ñ6ˆÔØˆ�r&   c              ƒ  ó.	  #   • SSK Jn  SSKJn  SSKJnJn  SSKJn  U" 5         U R                  R                  nU" UR                  UR                  UR                  S9  U" 5       n[        R                  SUR                  [        UR                  5      UR                  5        [!        U R                  R"                  R$                  U R                  R"                  R&                  U R                  R"                  R(                  5      I S h  v•N U l        [        R                  S	U R*                  R&                  U R*                  R(                  U R*                  R,                  U R*                  R.                  U R*                  R0                  5        U" U R                  R"                  R$                  U R2                  U R4                  U R6                  05      U l        S
U l        U" U R8                  U R:                  U R4                  U R*                  R(                  U R*                  R0                  U R*                  R.                  U R                  R<                  R>                  S9U l         U RB                  U R@                  l"        U R@                  RG                  5       I S h  v•N   U R@                  RI                  U R*                  R,                  =(       d    S5      nU R@                  RK                  U5        U R@                  RL                  RN                  =(       d    Un	[Q        U R                  RR                  U	=(       d     U R                  R<                  R>                  [U        [W        U R                  RX                  SS5      =(       d    S5      S9U l)        [        R                  SU R:                  UU	U R@                  RL                  RZ                  U R@                  RL                  R\                  U R@                  R_                  5       5        [a        U R                  R"                  R$                  U R                  R"                  Rb                  U R*                  R(                  U Rd                  S9U l3        g  GN GNå7f)Nr   )ÚSignerClientr   )Ú
LiveEngine)Úget_limiterÚinstall_rest_rate_limit)Úinstall_socks_proxy)Úmax_per_windowÚwindow_sÚon_429_backoff_sz@REST pace target ~%s/%ss (Lighter hard 40/60); 429 backoff %.1fsz7LIVE Market %s id=%s mark=%.1f size_dec=%s price_dec=%sÚ )r  Úaccount_indexÚapi_key_indexrQ   rX   rW   Ú
equity_usdr+   r,   zJLIVE account=%s equity0=%.2f day_equity0=%.2f avail=%.2f inv=%.6f fills=%srN   )4Úlighterr  Úlive_enginer  Ú
rate_limitr  r  Úsocks_proxyr  r3   r  r  r   r    rU   r  r   rS   rO   rT   rQ   r?   rV   rW   rX   r"  r  r  r  r  r5   Útarget_working_usdr8   r
  ÚmarkoutÚrefresh_accountr—   Úpersist_day_equityrw   Úday_start_equityr   r9   r:   r   r;   Úavailable_balancer{   rÅ   r
   rP   rZ   r@   )
rI   r  r  r  r  r  ÚrlÚlimÚeq0Úeq_days
             r$   r\   ÚLiveMicroMMBot.setupF  s+  é € Ý(å+ßDÝ4áÔØ�X‰X× Ñ ˆÙØ×,Ñ,Ø—[‘[Ø×0Ñ0ò	
ñ
 ‹mˆÜ�‰ØNØ×ÑÜ�—‘ÓØ×Ñô		
ô *Ø�H‰H�N‰N×#Ñ#Ø�H‰H�N‰N×!Ñ!Ø�H‰H�N‰N×$Ñ$ó
÷ 
ˆŒ	ô
 	�‰ØEØ�I‰I×ÑØ�I‰I×ÑØ�I‰I× Ñ Ø�I‰I×#Ñ#Ø�I‰I×$Ñ$ô	
ñ #Ø�H‰H�N‰N×#Ñ#Ø×ÑØ× Ñ  $×"7Ñ"7Ð8ó
ˆŒð !#ˆÔá Ø—;‘;Ø×-Ñ-Ø×-Ñ-Ø—i‘i×)Ñ)ØŸ9™9×3Ñ3ØŸ)™)×1Ñ1Ø—x‘x×'Ñ'×:Ñ:ñ
ˆŒð #Ÿm™mˆ�‰ÔØ�k‰k×)Ñ)Ó+×+Ð+Ø�k‰k× Ñ  §¡×!5Ñ!5×!:¸Ó;ˆà�‰×&Ñ& sÔ+Ø—‘×"Ñ"×3Ñ3×:°sˆÜØ�H‰H�M‰MØ×9�d—h‘h×&Ñ&×9Ñ9Ü#¤G¨D¯H©H×,<Ñ,<Ð>QÐSTÓ$U×$ZÐYZÓ[ñ
ˆŒ	ô
 	�‰ØXØ×ÑØØØ�K‰K×Ñ×/Ñ/Ø�K‰K×Ñ×+Ñ+Ø�K‰K×#Ñ#Ó%ô	
ô #Ø—X‘X—^‘^×,Ñ,Ø—8‘8—>‘>×(Ñ(Ø—i‘i×)Ñ)Ø×$Ñ$ñ	
ˆ�	òi
ò@ 	,ùs&   ‚DRÄRÄFRÊ-RÊ.G"RÒRc                ó   • U R                   $ r_   )r  r[   s    r$   r"  ÚLiveMicroMMBot.account_index—  s   € à×"Ñ"Ð"r&   c                óJ  •  U R                   R                  U5        g ! [        R                   ap     U R                   R	                  5       nO! [        R
                   a     Of = f U R                   R                  U5         g ! [        R                   a      g f = ff = fr_   r`   re   s      r$   rZ   ÚLiveMicroMMBot._enqueue_top›  ri   rj   c              ƒ  ó  ^ #   • T R                   (       a"  T R                  (       a  T R                  (       d   eT R                   R                  U5        [        R                  " 5       n[        [        T R                  R                  SS5      =(       d    S5      n[        [        T R                   SS5      =(       d    S5      S:*  nSnU(       az   SSK
Jn  U" 5       nU(       a  UR                  5       OS nU(       aL  [        UR                  S5      =(       d    S	5      [        UR                  S
5      =(       d    S5      -
  n	U	S:  nUT R                  -
  U:¼  au  T R                   n
U
b  U
R#                  5       (       aQ  UT l        U(       a  U(       a  [$        R'                  S5        O&U 4S jn[(        R*                  " U" 5       5      T l        T R                  R-                  T R                   UR.                  5      nT R                  R                  R0                  S-  nT R                   R2                  R4                  nUR6                  (       Ga  [$        R9                  SUR:                  5         T R                   R=                  5       I S h  v•N   T R                   R?                  S 5        S nS n [A        T R                   S5      (       aJ  T R                   RC                  SS9I S h  v•N n[$        R9                  S[        U=(       d    S5      5        O[$        R9                  S5         T RE                  XU5        T RG                  5         g [I        T 5      nURK                  UR.                  U5         T RL                  RK                  UR.                  U5         S nT RN                  b=  [        T RN                  SS 5      b%  T RN                  RP                  RS                  S5      nUT l*        UT RL                  l+        [Y        URZ                  5      S:  Ga  [A        T R                   S5      (       aù   / nT R                   R]                  5       =(       d    / SS   H´  n[        UR                  S5      =(       d    UR                  S5      =(       d    S5      n[        UR                  S5      =(       d    UR                  S 5      =(       d    S5      nUS:”  d  M�  US:”  d  M‰  [_        S!5       H  nURa                  UUS"-  -   U45        M     M¶     U(       a  URc                  U5        T RE                  XU5        UT Rf                  -
  U:¼  d  UGc{  URh                  nURj                  nT R                  R                  n[        [        US$S 5      =(       d    S%5      n[m        [        US&S'5      5      n[        [        US(S 5      =(       d    S)5      n[        T R                   R2                  Rn                  5      n[q        U5      nURr                  T l:        [        T R                   Rw                  UR.                  5      5      n [y        U U5      n![{        UUUU!U5      u  nnn"[}        [        T S*S 5      [        T S+S 5      UUU US,9u  nnUT l?        UT l@        [        T SS 5      n[ƒ        U[m        T RL                  R…                  5       5      S-9n#U#R:                  T lC        U#Rh                  (       d  SnU#Rj                  (       d  SnT RL                  R‰                  U5      n$[        [        US.S/5      =(       d    S/5      T RL                  lE        Sn% [        UR�                  5       5      n%[�        [        [        US.S/5      =(       d    S/5      U%U$U!R�                  UR“                  5       S09n&U&T lJ        [        U!R–                  =(       d    S15      n' [A        T R                   S5      (       a  T R                   R]                  5       O/ n([™        [        US2/ 5      =(       d    / 5      n)[›        U(U)[        URœ                  5      [        URž                  5      S39n*T R¤                  R§                  U*U[        URœ                  5      [        URž                  5      S89n*U*T lT        U*Rª                  n,U*R¬                  n- S n,S n-S U*lU        S U*lV        S n.U(       d  U(       aê  UR±                  5       n/[³        UUUT R                  R´                  T R                  R¶                  T R                  R¸                  T R                  Rº                  4UUU/S1UR½                  5       UR¾                  U'-  U#R¾                  -  URÀ                  U'-  U#RÀ                  -  URÂ                  URÄ                  U#RÆ                  U#RÈ                  U&S'U,U-S9.6n.T RÊ                  b   T RÊ                  R#                  5       (       d  OÓUT l3        T =RÌ                  S-  slf        T RÌ                  S:X  ax  U.c  SO[Y        U.RÎ                  5      n0[$        R'                  S:UR.                  U0U.(       d  S OU.RÐ                  U.(       d  S OU.RÒ                  U.(       d  S OU.RÔ                  U5        U.UUUUUX4U 4S; jjn1[(        R*                  " U1" 5       5      T le        T R                  RÖ                  RØ                  n2U2(       a]  UT RÚ                  -
  U2:¼  aI  [$        R'                  S<U25        T R                   R=                  5       I S h  v•N   T RG                  5         g g g ! [         a    Sn G
N'f = f GNà! [         a!  n[$        R9                  SU5         S nAG	NS nAff = f GNµ! [         a!  n[$        R9                  SU5         S nAGNšS nAff = f! [         a     GN>f = f! [         a    [        T SS 5      T l*         GNüf = f! [         a!  n[$        Re                  S#U5         S nAGNøS nAff = f! [         a    Sn% GNÉf = f! [         a.  n[$        Re                  S4U5        SS5KPJQn+  U+" S6/S79n* S nAGNS nAff = f GN=7f)=NÚaccount_refresh_sg      (@Ú_working_n_levelsr   Fr   ©r  r  é%   Ú	in_windowé   uB   skip account refresh â€” empty book, rate tight (prioritize place)c               “  ó²   >#   •  TR                   R                  5       I S h  v•N   g  N! [         a   n [        R	                  SU 5         S n A g S n A ff = f7f)Nzrefresh_account: %s)r8   r+  Ú	Exceptionr    r!   )ÚerI   s    €r$   Ú_do_refreshÚ0LiveMicroMMBot._process_top.<locals>._do_refreshÅ  sE   øé € ðBØ"&§+¡+×"=Ñ"=Ó"?×?Ó?øÜ(ó BÜŸK™KÐ(=¸q×AÑAûðBüs6   ƒA…* ¢(£* §A¨* ª
A´AÁ
AÁAÁArl   u;   KILL SWITCH: %s â€” cancel_all + flatten reduce_only + stopzKILL cancel_all: %sÚflatten_reduce_onlyg{®Gázt?)Ú
target_abszKILL flatten done inv=%.6fr0   u:   KILL flatten skipped â€” engine has no flatten_reduce_onlyzKILL flatten failed: %sÚbooké   Ú	_last_ofir´   iØÿÿÿÚtrE   ÚcÚcloseé   g      N@zmomentum seed: %sr¡   g      @Úbatch_placeTr¢   g      D@r  r  )r�   r{   )Úenabledr    rÿ   )Úsigma_5m_bpsÚmarkout_widen_bpsÚday_half_multÚmom_half_multg      ð?rÁ   )Úmids_1mrÇ   rÈ   zregime analyze: %s)ÚRegimeSignalÚregime_error)Úreasons)r‰   rÇ   rÈ   )r}   r€   Úextra_skew_bpsÚhalf_spread_multÚjoin_extra_ticksÚsize_bid_multÚsize_ask_multÚhalf_bid_multÚhalf_ask_multÚhalf_bid_add_bpsÚhalf_ask_add_bpsÚhalf_spread_bps_overrideÚdepth_sizingÚlot_bid_usdÚlot_ask_usdzOFirst ladder cycle mid=%.1f levels=%s bid=%s ask=%s sz/lvl=%s rest_thr=%.2f bpsc           	   “  óø  >#   •  T	R                   R                  U U=(       a    U S LU=(       a    U S LUUUS9I S h  v•N    T	R                  UT	R                   R                  R                  U5        g  N7! [         a   n[        R	                  SU5         S nANZS nAff = f! [         a     g f = f!  T	R                  UT	R                   R                  R                  U5        f ! [         a     f f = f= f7f)N)r}   r€   r¡   rM  r¢   zapply_ladder task: %s)r8   Úapply_ladderr@  r    r!   r‚   rw   rx   )
ÚladÚabÚaaÚrtÚbp_ÚmrrI  rè   rA  rI   s
            €r$   Ú
_do_ladderÚ/LiveMicroMMBot._process_top.<locals>._do_ladder–  sí   øé € ð!Ø"Ÿk™k×6Ñ6ØØ&(×&<¨S¸¨_Ø&(×&<¨S¸¨_Ø/1Ø(+Ø')ð 7ð ÷ ð ð!Ø ×.Ñ.¨q°$·+±+×2CÑ2C×2IÑ2IÈ1ÕMñøô %ó @ÜŸ™Ð$;¸Q×?Ñ?ûð@ûô
  )ó !Ù ð!ûð!Ø ×.Ñ.¨q°$·+±+×2CÑ2C×2IÑ2IÈ1ÕMøÜ(ó !Ù ð!ÿsŒ   ƒC:…7A6 ¼A4½A6 Á1B# Á3C:Á4A6 Á6
B Â BÂB3 ÂB Â B3 Â#
B0Â-C:Â/B0Â0C:Â3C7Â51C'Ã&C7Ã'
C4Ã1C7Ã3C4Ã4C7Ã7C:u-   duration_s=%.0f reached â€” cancel all + stop)nr8   r9   r?   ro   rE   r:   r   r3   r;   r  r'  r  rÎ   rÝ   r@  r  r	  Údoner    rU   rA   rÚ   rt   ru   rv   rw   rx   ry   ÚerrorrÆ   Ú
cancel_allrz   rÍ   rD  r‚   r…   r%   Úon_midr
  r@   rF  ÚofirH  Úlast_ofirã   rÁ   r´   ÚrangeÚappendÚseed_from_midsÚdebugrD   r}   r€   rË   r{   r   Úbandr  r�   r   r   r   r  r  r   Úofi_actions_enabledÚ_ofi_pol_reasonÚcurrent_widen_bpsr   rO  r   Ú	half_multrX  Ú	_eff_halfÚ	size_multÚlistr   rÇ   rÈ   ÚregimerT  r  Úapplyr  rb  rc  ÚleanÚbias_bpsr   rX   rW   rY   r|   rY  rZ  r[  r\  r]  r^  r_  r  r  Úlevelsr   r�   rq   rƒ   r„   rF   )3rI   rf   r‰   Úrefresh_everyÚ
empty_bookÚ
rate_tightr  r0  ÚsnapÚroomri  rB  rˆ   rŠ   r‹   rA  Úinv_leftÚmomÚofi_nowÚptsrJ  rº   ru   Úkr}   r€   ÚqcÚrest_thrrM  r¢   ÚinvÚinv_polÚday_pctÚday_polÚ_pol_rÚofi_polÚwidenÚsigmaÚeff_halfÚsize_dayrÁ   rS  ÚregrT  rb  rc  ÚladderÚmom_skewÚn_lvrl  rŒ   s3   `                                                  r$   r�   ÚLiveMicroMMBot._process_top¨  s$
  øé € Ø�{�{˜tŸyŸy¨T¯Y¯YÐ6Ð6Ø�‰×Ñ˜CÔ ä�iŠi‹kˆô œg d§h¡h×&6Ñ&6Ð8KÈTÓR×ZÐVZÓ[ˆäœ §¡Ð.AÀ1ÓE×JÈÓKÈqÑPˆ
Øˆ
Þð#Ý3Ù!“m�Þ),�s—|‘|”~°$�ÞÜ˜tŸx™xÐ(8Ó9×?¸RÓ@Ä3ÀtÇxÁxÐP[ÓG\×GaÐ`aÓCbÑb�DØ!%¨¡�Jð �$×'Ñ'Ñ'¨MÓ9Ø×#Ñ#ˆBØ‰z˜RŸW™WŸY™YØ(+�Ô%Þ¦*Ü—H‘HÐaÕbõBô *1×)<Ò)<¹[»]Ó)K�DÔ&à—9‘9×%Ñ% d§k¡k°3·7±7Ó;ˆØ—8‘8×#Ñ#×7Ñ7¸&Ñ@ˆØ!Ÿ[™[×.Ñ.×4Ñ4ˆà�?�?ˆ?Ü�I‰IØMØ—‘ôð4Ø—k‘k×,Ñ,Ó.×.Ð.ð �K‰K×!Ñ! $Ô'ØˆAØˆHð8Ü˜4Ÿ;™;Ð(=×>Ñ>Ø%)§[¡[×%DÑ%DÐPUÐ%DÐ%V×V�HÜ—I‘IÐ:¼EÀ(Ç/ÈcÓ<RÕSä—I‘IÐZÕ[ð ×Ñ˜s xÔ0Ø�I‰IŒKØô ˜tÓ$ˆØ�
‰
�3—7‘7˜CÔ ð	Ø�M‰M× Ñ  §¡¨#Ô.ð	>ØˆGØ�y‰yÑ$¬°·±¸FÀDÓ)IÑ)UØŸ)™)Ÿ.™.×,Ñ,¨QÓ/�Ø$ˆDŒNØ%,ˆD�M‰MÔ"ô
 ˆs�{‰{Ó˜aÔ¤G¨D¯K©K¸×$HÑ$Hð2Ø�ØŸ+™+×2Ñ2Ó4×:¸¸C¸DÓA�AÜ˜qŸu™u S›z×?¨Q¯U©U°6«]×?¸aÓ@�BÜ §¡ c£
× A¨a¯e©e°G«n× AÀÓB�CØ˜A•v #¨¥'ä!& q¦˜AØŸJ™J¨¨Q°©X©°sÐ';Ö<ó "*ñ Bö Ø×&Ñ& sÔ+ð 	×Ñ˜3 8Ô,ð �$×%Ñ%Ñ%¨(Ó2°a²iØ ×*Ñ*ˆIØ ×*Ñ*ˆIØ—‘×!Ñ!ˆBÜœW RÐ)=¸tÓD×KÈÓLˆHÜœw r¨=¸$Ó?Ó@ˆKÜœw r¨<¸Ó>×FÀ$ÓGˆJÜ˜Ÿ™×)Ñ)×7Ñ7Ó8ˆCÜ& sÓ+ˆGØ$Ÿ\™\ˆDŒNÜ˜DŸK™K×3Ñ3°C·G±GÓ<Ó=ˆGÜ$ W¨cÓ2ˆGÜ+7Ø˜9 g¨w¸ó,Ñ(ˆI�y &ô $9Ü˜Ð/°Ó6Ü˜Ð/°Ó6ØØØ#Ø!ñ$Ñ ˆI�yð $-ˆDÔ Ø#,ˆDÔ ä˜d K°Ó6ˆGÜ Ø¤ d§m¡m×&GÑ&GÓ&IÓ!JñˆGð $+§>¡>ˆDÔ Ø×$×$Ø!�	Ø×$×$Ø!�	à—M‘M×3Ñ3°CÓ8ˆEÜ).¬w°rÐ;LÈcÓ/R×/YÐVYÓ)ZˆD�M‰MÔ&ØˆEðÜ˜c×.Ñ.Ó0Ó1�ô *Ü”g˜bÐ"3°SÓ9×@¸SÓAØ"Ø"'Ø%×/Ñ/Ø!×2Ñ2Ó4ñˆHð &ˆDŒNÜ˜W×.Ñ.×5°#Ó6ˆHð=ô ˜tŸ{™{¨N×;Ñ;ð —K‘K×,Ñ,Ô.àð ô
 œw s¨I°rÓ:×@¸bÓA�Ü$ØØ#Ü % b§n¡nÓ 5Ü % b§n¡nÓ 5ñ	�ð ×#Ñ#×)Ñ)ØØÜ! "§.¡.Ó1Ü! "§.¡.Ó1ð	 *ð ˆCð ˆDŒLØŸ/™/ˆKØŸ/™/ˆKð Ø"�Ø"�Ø"&�”Ø"&�”ØˆFÞžIØŸ<™<›>�Ü%ØØØØ—I‘I×,Ñ,Ø—I‘I×+Ñ+Ø—I‘I×-Ñ-Ø—I‘I×.Ñ.ðð (Ø'Ø#+Ø%(Ø%(×%9Ñ%9Ó%;Ø")×"7Ñ"7¸(Ñ"BÀW×EZÑEZÑ"ZØ")×"7Ñ"7¸(Ñ"BÀW×EZÑEZÑ"ZØ")×"7Ñ"7Ø")×"7Ñ"7Ø%,×%=Ñ%=Ø%,×%=Ñ%=Ø-5Ø!%Ø +Ø +ò-�ð4 × Ñ Ñ,°T×5FÑ5F×5KÑ5K×5MÑ5MØà&)�Ô#Ø×"Ò" aÑ'Õ"Ø×%Ñ%¨Ó*Ø &¡™1´C¸¿¹Ó4F�DÜ—H‘Hð,àŸ™ØÞ$*™°·±Þ$*™°·±Þ$*™°·±Ø ô	ð *0°IÀ)Ø(0°kÀjØ'*÷!ô( %,×$7Ò$7¹
»Ó$E�Ô!à�h‰h�l‰l×%Ñ%ˆÞ�C˜$Ÿ+™+Ñ%¨#Ó-Ü�H‰HÐDÀcÔJØ—+‘+×(Ñ(Ó*×*Ð*Ø�I‰I�Kð .ˆ3øôc ó #Ø"“
ð#úò6 /øÜó 4Ü—	‘	Ð/°×3Ò3ûð4úò  Wøô ó 8Ü—	‘	Ð3°Q×7Ò7ûð8ûô ó 	Úð	ûô ó 	>Ü$ T¨;¸Ó=ˆD�Nð	>ûô  ó 2Ü—	‘	Ð-¨q×1Ò1ûð2ûô^ ó Ø“ðûô6 ó =Ü—	‘	Ð.°Ô2Ý0á"¨NÐ+;Ñ<–ûð	=úò| +ùsŠ  ƒCrÃA9m# ÅD-rÉ9m9 Êm6Êm9 ÊrÊ;7n* Ë2n'Ë3,n* ÌrÌ n* Ì5ArÎ&o Î(A$o) Ð5rÑB%p Ó+p Ó3Ap Ô:H,rÝ'p: Þ A'rß(Bq á0Krírírí#m3í/rí2m3í3rí6m9 í9
n$înîrîn$î$rî'n* î*
oî4oï
rïoïrï
o&ï"rï%o&ï&rï)p	ðrðp	ð	rð
p7ðp2ð,rð2p7ð7rð:q
ñrñ	q
ñ
rñ
rñ#r ñ:rò ròrc                óX  • U R                   (       d   eUR                  n SSKJn  U" 5       nU(       a  UR	                  5       OS n0 SS_SU R                  (       a  U R                  R                  OU R                  R                  R                  _SU R                  (       a  U R                  R                  OS _SU R                  _SU_S	UR                  _S
UR                  _S[        U R                   R                  SS5      _S[        U R                   R                  SS5      _S[        U R                   R                  SS5      _S[        U R                   R                  SS5      _S[!        U R                   S5      (       a  U R                   R#                  5       O/ _S[!        U R                   S5      (       a  U R                   R%                  5       OS _S['        [        U R                   R                  SS5      =(       d    S5      S:„  _SUb7  ['        [        U R                   R                  SS5      =(       d    S5      S::  a  S O|[)        [        U R                   SS5      =(       d    UR*                  5      [)        [        U R                   SS5      =(       d    UR,                  5      UR.                  UR0                  S._S[        U R                   SS5      _S[        U R                   SS5      _0 S[        U R                   SS5      _S UR                  _S!UR                  _S"['        [        U R                  R2                  S"S5      5      _S#['        [        U R                  R2                  S#S5      5      _S$[)        [        U R                  R2                  S$S%5      5      _S&['        [        U R                   S'S5      5      _S(['        [        U R                   S)S5      5      _S*U R                   R                  R4                  _S+U R                   R                  R4                  U-  _S,U R                   R                  R6                  _S-U R                   R9                  U5      _S.U R                   R                  R:                  _S/U R                   R9                  U5      _S0U R                   R                  R:                  _S1U R                   R                  R<                  _S2U R                   R                  R>                  _E0 S3U R                   R                  R@                  _S4U R                   R                  RB                  _S5U R                   R                  RD                  _S6U R                   RG                  U5      _S7U R                   RI                  U5      _S8U R                   RK                  5       _S9U R                   RM                  5       _S:U R                   RO                  5       _S;URP                  _S<URR                  _S=U R                   R                  RT                  _S>U_S?U RV                  _S@U R                  R2                  RX                  U R                  R2                  RZ                  /_SA[)        [        U R                  R2                  SAS5      5      _SB[)        [        U R                  R2                  SBS5      5      _SC[)        [        U R                  R2                  SCS5      5      _E0 SD[)        [        U R                  R2                  SDS5      5      _SE[)        [        U R                  R\                  SESF5      5      _SG[)        [        U R                  R\                  SGS5      5      _SH[)        [        U R                  R\                  SHS5      5      _SI[)        [        U R                  R\                  SIS5      5      _SJU(       a  [_        [)        U R                   R                  R4                  5      [)        U=(       d    S5      -  5      [a        [)        U R                   R9                  U5      =(       d    S5      SK5      -  OS_SL[b        Rb                  " 5       U Rd                  -
  _SM[g        U Rh                  =(       a    U Rh                  Rj                  5      _SNU R                   Rm                  5       _SO[)        U R                   R                  R4                  5      SP:”  a  SOS_SQ[)        U R                   R                  R4                  5      SR:  a  SOS_SS[)        U R                   R                  R4                  5      SP:”  a  STO0[)        U R                   R                  R4                  5      SR:  a  SUOSV_SWU R                   Ro                  SX5      _SYU R                   Rq                  5       _SZU R                   Rs                  5       _S[U R                   Ru                  5       _S\[!        U R                   S]5      (       a  U R                   Rw                  5       O/ _ES^[        U S_S 5      (       a  U Rx                  R	                  5       OS [        U S`S 5      b5  [!        U Rz                  Sa5      (       a  U Rz                  R	                  5       OS [        [        U S`S 5      SbS 5      [        U S`S 5      b   [)        [        U Rz                  ScS5      5      OS [        [        U S`S 5      SdS 5      [        [        U S`S 5      SeS 5      [        U SfSg5      [        U ShS 5      (       a  U R|                  R	                  5       OS [        U SiS 5      [        U SjS 5      [)        [        U SkS5      =(       d    S5      U R                   R                  5       [        U R                   SlS 5      b   U R                   R€                  R‚                  OS SmSn.EnU R„                  R‡                  U5        g ! [
         a    S n GNáf = f)oNr   r;  r�   ÚliverT   rQ   r"  ru   r‘   r’   Úladder_ordersr   Úladder_bidsÚladder_asksÚladder_refreshÚlast_refresh_reasonr!  Úladder_levelsÚladder_levels_for_statusÚquote_targetÚquote_target_for_statusÚquotes_liverx   Ú_working_bid0Ú_working_ask0r“   Úworking_midÚ_working_midr0   Úworking_bidÚworking_askÚbook_bidÚbook_askÚn_bid_levelsÚn_ask_levelsÚlevel_spacing_bpsrm   Úcancel_all_countÚ_cancel_all_countÚrest_skip_countÚ_rest_skip_countr{   r•   r–   r—   r˜   r™   rš   r.  Ú
collateralÚunrealized_pnlÚpending_ordersr›   rœ   r�   r†   Ú	fills_buyÚ
fills_sellry   rž   Ú
last_errorr'  Úquote_cyclesrŸ   r    r¡   r¢   r+   r£   r¤   r¥   r¦   r§   r¨   r©   rª   r«   r¬   r­   r®   r»   r¯   r¼   r°   r±   r²   r½   r³   r¾   r¿   rÀ   rÁ   r´   rµ   r   r  rÎ   r‚  Úscorerb  rc  r  r  r
  rH  rz  r}  Ú_sessionÚUTC)rÂ   rÃ   r€  Úregime_leanÚregime_scorerb  rc  Úinv_bandr*  rr  r   Úhalf_spread_bps_effectiverÄ   Úsession_dayÚsession_day_tz)Dr8   ru   r'  r  rÎ   r@  r?   rT   r3   rS   rQ   r  r‘   r’   r   rw   rÍ   r¨  rª  r  r:   r   r�   rq   r”   r;   r{   r–   r—   r˜   r.  r»  r¼  r½  r›   rœ   r�   rÅ   Úfills_buy_countÚfills_sell_country   rÆ   rÀ  r  rÇ   rÈ   r9   rÉ   rÊ   rE   rF   rË   r@   r«   r¬   r½   r¾   r¿   rÌ   r´   r   r  r
  Úlast_fills_for_statusrÃ  Údayr<   rÏ   )	rI   rf   r‹   rˆ   ru   r  Ú_limÚrl_snaprÐ   s	            r$   r‚   ÚLiveMicroMMBot._write_status²  sO  € Ø�{�{Ðˆ{Ø�g‰gˆð	Ý/á“=ˆDÞ)-�d—m‘m”o°4ˆGðC
Ø�FðC
à¨$¯)¯)�d—i‘i×&Ò&¸¿¹¿¹×9NÑ9NðC
ð °·	·	˜Ÿ™×,Ò,¸tðC
ð ˜T×0Ñ0ð	C
ð
 �3ðC
ð �3—7‘7ðC
ð �3—7‘7ðC
ð œW T§[¡[×%6Ñ%6¸ÈÓKðC
ð œ7 4§;¡;×#4Ñ#4°mÀQÓGðC
ð œ7 4§;¡;×#4Ñ#4°mÀQÓGðC
ð œg d§k¡k×&7Ñ&7Ð9NÐPRÓSðC
ð ä˜4Ÿ;™;Ð(B×CÑCð —‘×4Ñ4Ô6àðC
ð" ä˜4Ÿ;™;Ð(A×BÑBð —‘×3Ñ3Ô5àð)C
ð, œ3œw t§{¡{×'8Ñ'8¸/È1ÓM×RÐQRÓSÐVWÑWð-C
ð. ð ‘IÜœ7 4§;¡;×#4Ñ#4°oÀqÓI×NÈQÓOÐSTÓTñ ô $¤G¨D¯K©K¸È!Ó$L×$XÐPQ×PXÑPXÓYÜ#¤G¨D¯K©K¸È!Ó$L×$XÐPQ×PXÑPXÓYØ !§
¡
Ø !§
¡
ñ	ð;C
ðH œ7 4§;¡;°ÀÓDðIC
ðJ œ7 4§;¡;°ÀÓEñKC
ðL œ7 4§;¡;°ÀÓEðMC
ðN ˜Ÿ™ðOC
ðP ˜Ÿ™ðQC
ðR œC¤¨¯©×(8Ñ(8¸.È!Ó LÓMðSC
ðT œC¤¨¯©×(8Ñ(8¸.È!Ó LÓMðUC
ðV  ¤¤w¨t¯x©x×/?Ñ/?ÐATÐVYÓ'ZÓ![ðWC
ðX ¤¤G¨D¯K©KÐ9LÈaÓ$PÓ QðYC
ðZ œs¤7¨4¯;©;Ð8JÈAÓ#NÓOð[C
ð\ ˜TŸ[™[×.Ñ.×<Ñ<ð]C
ð^ ˜TŸ[™[×.Ñ.×<Ñ<¸sÑBð_C
ð` ˜Ÿ™×)Ñ)×2Ñ2ðaC
ðb �d—k‘k×(Ñ(¨Ó-ðcC
ðd �t—{‘{×(Ñ(×0Ñ0ðeC
ðf ˜4Ÿ;™;×-Ñ-¨cÓ2ðgC
ðh ˜DŸK™K×-Ñ-×5Ñ5ðiC
ðj   §¡×!2Ñ!2×!DÑ!DðkC
ðl ˜$Ÿ+™+×+Ñ+×6Ñ6òmC
ðn ˜dŸk™k×/Ñ/×>Ñ>ðoC
ðp ˜dŸk™k×/Ñ/×>Ñ>ðqC
ðr ˜DŸK™K×-Ñ-×:Ñ:ðsC
ðt �t—{‘{×*Ñ*¨3Ó/ðuC
ðv ˜4Ÿ;™;×2Ñ2°3Ó7ðwC
ðx �T—[‘[×,Ñ,Ó.ðyC
ðz ˜Ÿ™×4Ñ4Ó6ð{C
ð| ˜$Ÿ+™+×6Ñ6Ó8ð}C
ð~ �h—o‘oðC
ð@ ˜8Ÿ?™?ðAC
ðB ˜$Ÿ+™+×+Ñ+×6Ñ6ðCC
ðD ˜'ðEC
ðF ˜D×.Ñ.ðGC
ðH ˜Ÿ™×(Ñ(×4Ñ4°d·h±h×6FÑ6F×6RÑ6RÐSðIC
ðJ œu¤W¨T¯X©X×-=Ñ-=Ð?PÐRUÓ%VÓWðKC
ðL !¤%¬°·±×0@Ñ0@ÐBVÐX[Ó(\Ó"]ðMC
ðN œ%¤¨¯©×(8Ñ(8¸,ÈÓ LÓMòOC
ðP  ¤¤w¨t¯x©x×/?Ñ/?ÐATÐVYÓ'ZÓ![ðQC
ðR ¤¤g¨d¯h©h¯m©mÐ=OÐQUÓ&VÓ WðSC
ðT  ¤¤w¨t¯x©x¯}©}Ð>QÐSVÓ'WÓ!XðUC
ðV  ¤¤w¨t¯x©x¯}©}Ð>QÐSVÓ'WÓ!XðWC
ðX ¤¤g¨d¯h©h¯m©mÐ=OÐQTÓ&UÓ VðYC
ðZ ö ô ”U˜4Ÿ;™;×,Ñ,×:Ñ:Ó;¼eÀCÇJÈ3Ó>OÑOÓPÜ”u˜TŸ[™[×/Ñ/°Ó4×;¸Ó<¸dÓCòDàðaC
ðd œŸ	š	› d§k¡kÑ1ðeC
ðf ”T˜$Ÿ)™)×7¨¯	©	¯©Ó8ðgC
ðh ˜dŸk™k×8Ñ8Ó:ðiC
ðl œ5 §¡×!2Ñ!2×!@Ñ!@ÓAÀDÓH‘aÈaðmC
ðn œE $§+¡+×"3Ñ"3×"AÑ"AÓBÀUÓJ‘qÐPQðoC
ðp ä˜Ÿ™×*Ñ*×8Ñ8Ó9¸DÓ@ñ ô ˜TŸ[™[×.Ñ.×<Ñ<Ó=ÀÓEñ àð}C
ðB ˜DŸK™K×4Ñ4°RÓ8ðCC
ðD ˜$Ÿ+™+×0Ñ0Ó2ðEC
ðF ˜4Ÿ;™;×2Ñ2Ó4ðGC
ðH ˜TŸ[™[×;Ñ;Ó=ðIC
ðJ ´W¸T¿[¹[È.×5YÑ5Y�t—{‘{×/Ñ/Ô1Ð_añKC
ðL Ü8?ÀÀkÐSW×8XÑ8X˜4Ÿ>™>×2Ñ2Ô4Ð^bô ˜4 ¨DÓ1Ñ=Ü˜DŸL™L¨*×5Ñ5ð —‘×%Ñ%Ô'ð ä"¤7¨4°¸DÓ#AÀ6È4ÓPô ˜4 ¨DÓ1Ñ=ô ”g˜dŸl™l¨G°SÓ9Ô:àä"¤7¨4°¸DÓ#AÀ=ÐRVÓWÜ"¤7¨4°¸DÓ#AÀ=ÐRVÓWÜ  k°7Ó;Ü3:¸4ÀÈT×3RÑ3R�t—}‘}×-Ñ-Ô/ÐX\Ü˜4 ¨dÓ3Ü! $Ð(9¸4Ó@Ü).¬w°t¸[È!Ó/L×/QÐPQÓ)RàŸ+™+×;Ñ;Ó=ô ˜4Ÿ;™;¨
°DÓ9ÑEð —‘×$Ñ$×(Ò(àà#òEC
ˆðH 	�‰×Ñ˜'Õ"øôM ó 	Ø‹Gð	ús   ¡&p ðp)ð(p)c                ó�   • U R                   R                  5         U R                  (       a  U R                  R                  5         g g r_   rÓ   r[   s    r$   r…   ÚLiveMicroMMBot.stopB  rÖ   r&   c              ƒ  ó–  #   • U R                   R                  5       (       Gda   [        R                  " S5      I Sh  v•N   U R                   R                  5       (       a  gU R                  (       a  U R                  R
                  OSnUb7  UR                  5       (       a"  U R                  (       a  U R                  (       d  MÄ  [        U 5      nUR                  UR                  [        R                  " 5       5        U R                  R                  U R                  UR                  5      nU R                  XR                  R                  R                   U5        U R                   R                  5       (       d  GM`  gg GNH! [        R"                   a    e [$         a   n[&        R)                  SU5         SnAN`SnAff = f7f)uG   Independent of book/REST waits â€” status must stay fresh for watchers.g       @Nzstatus heartbeat loop: %s)rH   rÛ   rA   Úsleepr@   rß   râ   r9   r8   r%   rq  ru   rE   rt   r‚   rw   rx   rá   r@  r    rw  )rI   Úlastr‹  rè   rA  s        r$   Ú_status_heartbeat_loopÚ%LiveMicroMMBot._status_heartbeat_loopG  s&  é € à—*‘*×#Ñ#×%Ò%ð:Ü—m’m CÓ(×(Ð(Ø—:‘:×$Ñ$×&Ñ&ØØ-1¯Y¯Y�t—y‘y×)Ò)¸D�Ø‘< t§w¡w§y¡y¸¿	¿	ÈÏÏÙÜ& tÓ,�Ø—
‘
˜4Ÿ8™8¤T§Y¢Y£[Ô1Ø—I‘I×&Ñ& t§{¡{°D·H±HÓ=�Ø×"Ñ" 4¯©×):Ñ):×)@Ñ)@À!ÔDð —*‘*×#Ñ#×%Ö%â(øô ×)Ñ)ó ØÜó :Ü—	‘	Ð5°q×9Ñ9ûð:üs^   ‚!G	¤F ½F¾#F Á!G	Á"A#F ÃG	ÃBF Å!G	ÆG	ÆF ÆGÆ&GÆ<G	ÇGÇG	c              ƒ  óz  #   • U R                  5       I S h  v•N   U R                  b  U R                  c   e[        R                  " U R                  R                  5       5      n[        R                  " U R                  5       5      n U R                  R                  5       (       dp   [        R                  " U R                  R                  5       SS9I S h  v•N nU RC                  U5      I S h  v•N   U R                  R                  5       (       d  Mp  URE                  5          UI S h  v•N    U R                  R'                  5       I S h  v•N   U R                  R*                  n[K        U R                  RL                  5      n	U R                  R)                  5         URE                  5          UI S h  v•N   UR-                  5       (       a�  U R.                  (       ap  U R.                  R7                  U R                  UR4                  5      nX�R                  l&        U R9                  X0R                  R:                  R<                  U5        U RN                  (       a#   U RN                  RQ                  5       I S h  v•N   ["        R%                  SU RR                  U R                  RU                  5       U R                  RW                  UR-                  5       (       a  UR4                  OS5      U R                  RY                  UR-                  5       (       a  UR4                  OS5      5        g  GN% GNd! [        R                   Ga¶    U R                  R
                  R                  nU(       ao  [        R                  " 5       U R                   -
  U:¼  aI  ["        R%                  SU5        U R                  R'                  5       I S h  v•N    U R)                  5         U R                  (       a  U R                  R*                  OS nUbï  UR-                  5       (       aÚ  U R.                  (       aÉ   [1        U 5      nUR3                  UR4                  [        R                  " 5       5        U R.                  R7                  U R                  UR4                  5      nU R9                  XPR                  R:                  R<                  U5        O-! [>         a   n["        RA                  SU5         S nAOS nAff = f GM�  f = f GN GNã! [        RF                   a     GNøf = f GNÞ! [>         a!  n["        RI                  SU5         S nAGNS nAff = f GN¥! [        RF                   a     GNºf = f GNù! [>         a     GNf = f! URE                  5          UI S h  v•N    O! [        RF                   a     Of = f U R                  R'                  5       I S h  v•N    O-! [>         a   n["        RI                  SU5         S nAOS nAff = fU R                  R*                  n[K        U R                  RL                  5      n	U R                  R)                  5         URE                  5          UI S h  v•N    O! [        RF                   a     Of = fUR-                  5       (       a�  U R.                  (       ap  U R.                  R7                  U R                  UR4                  5      nX�R                  l&        U R9                  X0R                  R:                  R<                  U5        U RN                  (       a5   U RN                  RQ                  5       I S h  v•N    O! [>         a     Of = f["        R%                  SU RR                  U R                  RU                  5       U R                  RW                  UR-                  5       (       a  UR4                  OS5      U R                  RY                  UR-                  5       (       a  UR4                  5      5        f S5      5        f = f7f)Nrm   rØ   rn   zstatus heartbeat: %szfinal cancel_all: %sz8LIVE stopped. cycles=%s fills=%s equity=%.2f dayPnL=%.2fr   )-r\   r@   r8   rA   rÚ   rƒ   r×  rH   rÛ   rÜ   rC   rÝ   rÞ   r3   r„   rE   rF   r    rU   rp  r…   rß   râ   r9   r%   rq  ru   rt   r‚   rw   rx   r@  rw  r�   rà   rá   r!   rË   r«   r  rK  r  rÅ   r—   rœ   )
rI   ræ   Úhb_taskrf   rŒ   rÖ  r‹  rè   rA  rç   s
             r$   rƒ   ÚLiveMicroMMBot.runZ  s±  é € Ø�j‰j‹l×ÐØ�y‰yÑ$¨¯©Ñ)@Ð@Ð@Ü×'Ò'¨¯	©	¯©«Ó8ˆ	Ü×%Ò% d×&AÑ&AÓ&CÓDˆð8	Ø—j‘j×'Ñ'×)Ñ)ðÜ '× 0Ò 0°·±·±Ó1BÈCÑ P×P�Cð& ×'Ñ'¨Ó,×,Ð,ð+ —j‘j×'Ñ'×)Ó)ð. �N‰NÔðØ—�ð7Ø—k‘k×,Ñ,Ó.×.Ð.ð —)‘)×$Ñ$ˆCÜ˜$Ÿ)™)Ÿ/™/Ó*ˆFØ�I‰I�N‰NÔØ×ÑÔðØ—�ð �v‰v�x‰x˜DŸIŸIØ—I‘I×&Ñ& t§{¡{°C·G±GÓ<�Ø"(—	‘	”Ø×"Ñ" 3¯©×(9Ñ(9×(?Ñ(?ÀÔCØ�{�{ðØŸ+™+×+Ñ+Ó-×-Ð-ô �H‰HØJØ×"Ñ"Ø—‘×'Ñ'Ó)Ø—‘×"Ñ"¨c¯f©f¯h©h 3§7¢7¸AÓ>Ø—‘×#Ñ#¨s¯v©v¯x©x C§G¢G¸QÓ?õòm 	ò QøÜ×+Ñ+ô ØŸ(™(Ÿ,™,×1Ñ1�CÞ¤§	¢	£¨d¯k©kÑ 9¸cÓAÜŸ™Ð!GÈÔMØ"Ÿk™k×4Ñ4Ó6×6Ñ6ØŸ	™	œð 26··˜4Ÿ9™9×-Ò-À�DØÑ'¨D¯G©G¯I©I¸$¿)¿)ðAÜ"2°4Ó"8˜CØŸJ™J t§x¡x´·²³Ô=Ø $§	¡	× 2Ñ 2°4·;±;ÀÇÁÓ I˜AØ ×.Ñ.¨t·[±[×5FÑ5F×5LÑ5LÈaÕPøÜ(ó AÜŸI™IÐ&<¸a×@Ñ@ûðAúãð#úò$ -ò øÜ×)Ñ)ó Úðúò /øÜó 7Ü—‘Ð2°A×6Ò6ûð7úò  øÜ×)Ñ)ó Úðúò .øÜ ó Úðûð1 �N‰NÔðØ—’øÜ×)Ñ)ó Ùðúð7Ø—k‘k×,Ñ,Ó.×.Ò.øÜó 7Ü—‘Ð2°A×6Ñ6ûð7úà—)‘)×$Ñ$ˆCÜ˜$Ÿ)™)Ÿ/™/Ó*ˆFØ�I‰I�N‰NÔØ×ÑÔðØ—’øÜ×)Ñ)ó Ùðúà�v‰v�x‰x˜DŸIŸIØ—I‘I×&Ñ& t§{¡{°C·G±GÓ<�Ø"(—	‘	”Ø×"Ñ" 3¯©×(9Ñ(9×(?Ñ(?ÀÔCØ�{�{ðØŸ+™+×+Ñ+Ó-×-Ò-øÜ ó Ùðúä�H‰HØJØ×"Ñ"Ø—‘×'Ñ'Ó)Ø—‘×"Ñ"¨c¯f©f¯h©h 3§7¢7¸AÓ>Ø—‘×#Ñ#¨s¯v©v¯x©x C§G¡GÓ?õð
 >?Ó?õüsG  ‚`;–L;—A2`;Â
V Â*0M ÃL>ÃM ÃV Ã3TÃ4#V Ä`;Ä*T Ä/TÄ0T Ä5T3 ÅT0ÅT3 ÅA`;Æ7U$ Æ<U!Æ=U$ ÇB'`;É)V ÊU?ÊV ÊB1`;Ì>M ÍBTÏOÏA'TÐ?BSÓTÓ
TÓ$S?Ó:TÓ?TÔTÔV ÔTÔV ÔT ÔT-Ô)`;Ô,T-Ô-`;Ô0T3 Ô3
UÔ=UÕ`;ÕUÕ`;Õ!U$ Õ$U<Õ8`;Õ;U<Õ<`;Õ?V Ö
VÖ`;ÖVÖ`;Ö`8Ö%V1Ö*V-Ö+V1Ö0`8Ö1W×`8×W×`8×W0×)W,×*W0×/`8×0
X×:XØ`8ØXØA"`8Ù=Z	ÚZÚZ	Ú`8Ú	Z Ú`8ÚZ Ú B*`8Ý]/Ý(]+Ý)]/Ý.`8Ý/
]<Ý9`8Ý;]<Ý<B<`8à8`;)r  r  r  r}  r  r  r  rH  rD   r  r
  r   rz  r  r  rC   r  r	  r  r  rF   rH   r3   r  r8   r@   r?   r9   r4   r<   Nrê   rë   )rì   r  rî   rï   )rð   rñ   rò   ró   rô   rK   r\   Úpropertyr"  rZ   r�   r‚   r…   r×  rƒ   rõ   rö   r&   r$   rø   rø     sH   † Ù>ô,ô\O
ðb ó#ó ð#ôôHôTN#ô`ô
:÷&=r&   rø   )rì   z'Momentum1m')/rô   Ú
__future__r   rA   Úloggingr  rE   Úpathlibr   Útypingr   r   Úconfigr   Úmarket_datar	   r
   r   Úpaper_enginer   Úquoterr   r   r   r   rÃ   r   r€  r   r   r9   r   Ústrategy_policyr   r   r   r   r   r   r   r<   r   Ú	getLoggerr    r%   r(   rø   rö   r&   r$   Ú<module>rç     s{   ðÙ MÝ "ã Û Û 	Û Ý ß "å ß AÑ AÝ %ß AÓ AÝ #ß 2Ý ÷÷ ñ õ !à×ÒÐ(Ó)€ô÷jñ j÷ZB
ò B
r&   