§
   «2¯k-ã                   óÒ  — d Z ddlZddlmZ ddlmZ ddlmZmZm	Z	 dZ
dZdZd	Zi d
d“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd“ej        d“ZdZdZd „ Zdµd!„Zd"„ Zd#„ Zd$„ Zi d%d&“d'd(“d)d*“d+d,“d-d.“d/d0“d1d2“d3d4“dd5“d6d7“d8d9“d:d;“d<d=“d>d?“d@dA“dBdC“dDdE“i dFdG“dHdI“dJdK“dLdM“dNdO“dPdQ“dRdS“dTdU“dVdW“dXdY“dZd[“d\d]“d^d_“d`da“dbdc“ddde“dfdg“¥i dhdi“djdk“dldm“dndo“dpdq“drds“dtdu“dvdw“dxdy“dzd{“d|d}“d~d“d€d�“d‚dƒ“d„d…“d†d‡“dˆd‰“¥i dŠd‹“dŒd�“dŽd�“d�d‘“d’d““d”d•“d–d—“d˜d™“dšd›“dœd�“dždŸ“d d¡“d¢d£“d¤d¥“d¦d§“d¨d©“dªd«“¥Zd¬„ Z G d­„ d®¦  «        Zdµd¯„Zd°„ Zd±„ Zd²„ Zd³„ Zd´„ ZdS )¶a8  What the "Ceny AI" dialog shows: the pages' data built from the usage history (wcs/ai/usage_store.py).

No Kodi controls here, only plain data: a page is a set of facts plus rows of text (c1..c5 are the five columns of the
dialog's list). The dialog (DialogAICosts.py) puts them on screen and runs the deleting.
é    N)Úaccounts)Úusage_store)Ú
cost_partsÚformat_costÚformat_tokens)ÚtodayÚweekÚmonthÚallr
   é   é   Úmillionaire_chatÚmillionaireÚdirector_tipÚtipsÚstory_prepareÚstoryÚquizÚ
actor_quizÚdirector_quizÚcreator_quizÚwriter_quizÚ	text_gameÚgameÚrecommendationÚmytv_recommendationÚmycinema_recommendationÚchannel_nameÚnamesÚcinema_nameÚlegacyÚotherzs:millionairec                 óB   — t                                | t          ¦  «        S ©N)ÚPURPOSE_GROUPSÚgetÚOTHER_GROUP)Úpurposes    ú_/Users/chudy/Library/Application Support/Kodi/addons/plugin.video.milionar/wcs/ai/usage_view.pyÚpurpose_groupr*      s   € Ý×Ò˜g¥{Ñ3Ô3Ð3ó    c                 ó®  — |pt           j                             ¦   «         }| dk    r(|                     ¦   «         |                     ¦   «         fS | dk    r>|t          j        d¬¦  «        z
                       ¦   «         |                     ¦   «         fS | dk    r<|                     d¬¦  «                             ¦   «         |                     ¦   «         fS dS )	zJ(first day, last day) of a period as YYYY-MM-DD; ('all') leaves both open.r   r	   é   ©Údaysr
   é   ©Úday)NN)ÚdatetimeÚdater   Ú	isoformatÚ	timedeltaÚreplace)Úperiodr   s     r)   Úperiod_ranger9   "   sÂ   € àÐ*•X”]×(Ò(Ñ*Ô*€EØ�ÒÐØ�ŠÑ Ô  %§/¢/Ñ"3Ô"3Ð3Ð3Ø�ÒÐØ�Ô*°Ð2Ñ2Ô2Ñ2×=Ò=Ñ?Ô?ÀÇÂÑARÔARÐRÐRØ�ÒÐØ�}Š} ˆ}Ñ#Ô#×-Ò-Ñ/Ô/°·²Ñ1BÔ1BÐBÐBØˆ:r+   c                 óÀ   — 	 t           j                              | ¦  «        }n# t          $ r | cY S w xY wd                     |j        |j        |j        |j        ¦  «        S )z('2026-10-06T22:02:27' -> '6. 10. 22:02'.z{}. {}. {:02d}:{:02d})r3   ÚfromisoformatÚ
ValueErrorÚformatr2   r
   ÚhourÚminute)ÚstampÚmoments     r)   ÚwhenrB   .   sg   € ðÝÔ"×0Ò0°Ñ7Ô7ˆˆøÝð ð ð Øˆˆˆðøøøà"×)Ò)¨&¬*°f´lÀFÄKÐQWÔQ^Ñ_Ô_Ð_s   ‚" ¢1°1c                 ó¢   — d                      t          | d         ¦  «        t          | d         ¦  «        t          | d         ¦  «        ¦  «        S )zC'in / cached / out' tokens of a row, the way the dialog shows them.z{} / {} / {}Úinput_tokensÚcached_tokensÚoutput_tokens)r=   r   )Úrows    r)   Útokens_textrH   7   sM   € à× Ò ¥¨s°>Ô/BÑ!CÔ!CÅ]ÐSVÐWfÔSgÑEhÔEhÝ!.¨s°?Ô/CÑ!DÔ!DñFô Fð Fr+   c                 óV   — |dk    r"t          t          d| z  |z  ¦  «        ¦  «        ndS )Nr   g      Y@)ÚintÚround)ÚvalueÚtotals     r)   Ú_sharerN   =   s.   € Ø05¸²	°	�3�u�U˜U‘] UÑ*Ñ+Ô+Ñ,Ô,Ð,¸qÐ@r+   Úpurpose_storyiIŠ  Útitlei €  Úoverviewi!€  Úmodelsi"€  Úpurposesi#€  Úhistoryi$€  r   i%€  r	   i&€  i'€  r   i(€  Údeletei)€  Úexporti*€  Úclosei+€  Úcosti,€  Úcallsi-€  Útokensi.€  Úsavingsi/€  Úcharti0€  Útopi1€  Úper_call_labeli2€  Úper_game_labeli3€  Útoday_labeli4€  Úmonth_labeli5€  Úoverall_labeli6€  Úpurpose_millionairei>€  Úpurpose_tipsi?€  Úpurpose_quizi@€  Úpurpose_text_gameiA€  Úpurpose_recommendationiB€  Úpurpose_namesiC€  Úpurpose_legacyiD€  Úpurpose_otheriE€  Úerrors_noteiH€  Úsavings_noteiI€  Úper_calliJ€  ÚfailediK€  Úper_gameiL€  Útokens_legendio€  Ú	col_modeliM€  Úcol_purposeiN€  Úcol_purpose_tokensip€  Ú	col_entryiO€  Úcol_timeiP€  Ú
col_tokensiQ€  Ú	col_callsiR€  Ú	col_shareiS€  Úcol_wheniT€  Úcol_responseiU€  Úcol_costiV€  Údelete_titlei\€  Údelete_entryi]€  Údelete_calli^€  Ú
delete_dayi_€  Údelete_monthi`€  Údelete_provideria€  Ú
delete_allib€  Údelete_confirmic€  Údeletedid€  Únothingie€  Úexportedif€  Úemptyig€  Údelete_shortih€  Úhint_arrowsii€  Úhint_selectij€  Úhint_confirmik€  Ú	hint_backil€  Úhint_returnim€  Úratein€  c                 óN   ‡ — ˆ fd„t                                ¦   «         D ¦   «         S )Nc                 óB   •— i | ]\  }}|‰                      |¦  «        “ŒS © )ÚgetLocalizedString)Ú.0ÚnameÚ	string_idÚaddons      €r)   ú
<dictcomp>z load_strings.<locals>.<dictcomp>U   s-   ø€ Ð`Ð`Ð`¹/¸$À	ˆD�%×*Ò*¨9Ñ5Ô5Ð`Ð`Ð`r+   )Ú
STRING_IDSÚitems)r–   s   `r)   Úload_stringsrš   T   s)   ø€ Ø`Ð`Ð`Ð`ÍZ×M]ÒM]ÑM_ÔM_Ð`Ñ`Ô`Ð`r+   c                   ó2   — e Zd ZdZdd„Zd„ Zd„ Zd„ Zd„ ZdS )	ÚTextsz^The words the pages use: the localized strings (load_strings) and the user's currency setting.Nc                 ó"   — || _         || _        d S r$   )Úsr–   )ÚselfÚstringsr–   s      r)   Ú__init__zTexts.__init__[   s   € ØˆŒØˆŒ
ˆ
ˆ
r+   c                 ó,   — t          || j        ¦  «        S r$   )r   r–   )rŸ   rX   s     r)   ÚmoneyzTexts.money_   s   € Ý˜4 ¤Ñ,Ô,Ð,r+   c                 óF   — t          || j        ¦  «        \  }}|p||r|ndfS )zD(main, other) text of a cost for a big number and the line under it.Ú )r   r–   )rŸ   rX   ÚusdÚczks       r)   Úpairz
Texts.pairb   s/   € å˜d D¤JÑ/Ô/‰ˆˆSØ�
�s SÐ0˜c˜c¨bÐ1Ð1r+   c                 óF   — d                      t          |¦  «        ¦  «        S )Nu   {}Ã—)r=   rJ   )rŸ   Úcounts     r)   rY   zTexts.callsg   s   € Ø�}Š}�S ™ZœZÑ(Ô(Ð(r+   c                 ó<   — | j         dt          |¦  «        z            S )NÚpurpose_)rž   r*   )rŸ   r(   s     r)   r(   zTexts.purposej   s   € ØŒv�j¥=°Ñ#9Ô#9Ñ9Ô:Ð:r+   r$   )	Ú__name__Ú
__module__Ú__qualname__Ú__doc__r¡   r£   r¨   rY   r(   r‘   r+   r)   rœ   rœ   X   sj   € € € € € ØhÐhðð ð ð ð-ð -ð -ð2ð 2ð 2ð
)ð )ð )ð;ð ;ð ;ð ;ð ;r+   rœ   c           	      ó”  ‡ ‡— t          ||¦  «        \  }}t          j        ||¦  «        Š|pt          j                             ¦   «         }|                     d¬¦  «                             ¦   «         }t          j        ||d¬¦  «        }d„ |D ¦   «         }|t          j	        t          dz
  ¬¦  «        z
                       ¦   «         }t          j        ||                     ¦   «         ¦  «        }	‰                      ‰d         ¦  «        \  }
}‰                      ‰d         ¦  «        \  }}‰d	         r*‰                      ‰d         ‰d	         z  ¦  «        d
         nd}|rB‰                      t          d„ |D ¦   «         ¦  «        t          |¦  «        z  ¦  «        d
         nd}t          ‰d         ‰d         ‰d         z   ¦  «        }i d|
“d|“d|r ‰ j        d                              |¦  «        nd“dt%          t'          ‰d	         ¦  «        ¦  «        “d|r ‰ j        d                              |¦  «        nd“d‰d         r3‰ j        d                              t'          ‰d         ¦  «        ¦  «        nd“dt)          ‰d         ‰d         z   ‰d         z   ¦  «        “dd                     ˆfd„dD ¦   «         ¦  «        “d‰ j        d         “d|“d |“d!‰d         r ‰ j        d                               |¦  «        nd“d"‰                      t          j        |                     ¦   «         |                     ¦   «         ¦  «        d         ¦  «        d
         “d#‰                      t          j        ||                     ¦   «         ¦  «        d         ¦  «        d
         “d$‰                      t          j        ¦   «         d         ¦  «        d
         “d%d&„ |	D ¦   «         “d'‰                      t-          d(„ |	D ¦   «         pd
g¦  «        ¦  «        d
         “d)ˆ fd*„t/          |d+„ d,¬-¦  «        d t0          …         D ¦   «         i¥S ).Nr0   r1   iˆ  )Úlimitc                 óR   — g | ]$}|d                                t          ¦  «        ¯"|‘Œ%S )Úkey)Ú
startswithÚMILLIONAIRE_SESSION)r“   Úentrys     r)   ú
<listcomp>zoverview.<locals>.<listcomp>u   s0   € ÐXÐXÐX�u¨5°¬<×+BÒ+BÕCVÑ+WÔ+WÐXˆUÐXÐXÐXr+   r.   rX   r[   Úrequestsr   r¥   c              3   ó&   K  — | ]}|d          V — ŒdS ©rX   Nr‘   )r“   Úgs     r)   ú	<genexpr>zoverview.<locals>.<genexpr>{   s&   è è € Ð7Ð7¨A˜a œiÐ7Ð7Ð7Ð7Ð7Ð7r+   rE   rD   Ú	cost_noteÚ
cost_note2ro   rY   Ú
calls_noterm   Úcalls_note2Úerrorsrk   rZ   rF   Útokens_noteú/c              3   óB   •K  — | ]}t          ‰|         ¦  «        V — Œd S r$   )r   )r“   r´   rM   s     €r)   r½   zoverview.<locals>.<genexpr>‚   s/   øè è € ÐxÐx¸c¥¨e°C¬jÑ 9Ô 9ÐxÐxÐxÐxÐxÐxr+   )rD   rE   rF   Útokens_note2rp   rl   Úsavings_note2r   r
   Úoverallr\   c                 ó0   — g | ]}|d          |d         dœ‘ŒS )r2   rX   )r2   rX   r‘   ©r“   Úds     r)   r¸   zoverview.<locals>.<listcomp>‰   s(   € ÐEÐEÐE¸1˜!˜Eœ(¨A¨f¬IÐ6Ð6ÐEÐEÐEr+   Ú	chart_maxc                 ó   — g | ]
}|d          ‘ŒS )rX   r‘   rÊ   s     r)   r¸   zoverview.<locals>.<listcomp>Š   s   € Ð$=Ð$=Ð$=°1 Q v¤YÐ$=Ð$=Ð$=r+   Úrowsc                 ó0   •— g | ]}t          ‰|¦  «        ‘ŒS r‘   ©Ú
_entry_row©r“   r·   Útextss     €r)   r¸   zoverview.<locals>.<listcomp>‹   s#   ø€ Ð|Ð|Ð|¨e•˜E 5Ñ)Ô)Ð|Ð|Ð|r+   c                 ó   — | d         S )NrX   r‘   )Úes    r)   ú<lambda>zoverview.<locals>.<lambda>‹   s   € ÐUVÐW]ÔU^€ r+   T©r´   Úreverse)r9   ÚstoreÚtotalsr3   r4   r   r7   r5   Úsessionsr6   Ú
CHART_DAYSÚper_dayr¨   ÚsumÚlenrN   rž   r=   ÚstrrJ   r   ÚjoinÚmaxÚsortedÚTOP_ENTRIES)rÓ   r8   r   ÚsinceÚuntilÚmonth_startÚentriesÚgamesÚfirstr/   rX   Ú
cost_otherr[   Úsavings_otherrm   ro   Úcached_sharerM   s   `                @r)   rQ   rQ   o   sf  øø€ Ý ¨Ñ.Ô.�L€Eˆ5ÝŒL˜ Ñ&Ô&€EØÐ*•X”]×(Ò(Ñ*Ô*€EØ—-’- A�-Ñ&Ô&×0Ò0Ñ2Ô2€KÝŒn˜U E°Ð6Ñ6Ô6€GØXÐX ÐXÑXÔX€EØ•XÔ'­Z¸!©^Ð<Ñ<Ô<Ñ<×GÒGÑIÔI€EÝŒ=˜ §¢Ñ 1Ô 1Ñ2Ô2€DØ—z’z %¨¤-Ñ0Ô0Ñ€Dˆ*Ø"ŸZšZ¨¨iÔ(8Ñ9Ô9Ñ€Gˆ]ØCHÈÔCTÐ\ˆu�zŠz˜% œ-¨%°
Ô*;Ñ;Ñ<Ô<¸QÔ?Ð?ÐZ\€HØLQÐYˆu�zŠz�#Ð7Ð7°Ð7Ñ7Ô7Ñ7Ô7½#¸e¹*¼*ÑDÑEÔEÀaÔHÐHÐWY€HÝ˜% Ô0°%¸Ô2GÈ%ÐP_ÔJ`Ñ2`ÑaÔa€LðØ�ðØ! :ðØ/;ÐemÐ=u¸U¼WÀZÔ=P×=WÒ=WÐX`Ñ=aÔ=aÐ=aÐsuðà••S˜˜zÔ*Ñ+Ô+Ñ,Ô,ðà.:ÐdlÐ<t¸E¼GÀJÔ<O×<VÒ<VÐW_Ñ<`Ô<`Ð<`Ðrtðð 	ÈeÐT\ÌoÐe�u”w˜}Ô-×4Ò4µS¸¸x¼Ñ5IÔ5IÑJÔJÐJÐceðð 	•-  nÔ 5¸¸oÔ8NÑ NÐQVÐWfÔQgÑ gÑhÔhð	ð
 	�s—x’xÐxÐxÐxÐxÐEwÐxÑxÔxÑxÔxðð 	˜œ Ô0ðð 	�7ðð +¨Mðð 	ÈÈÔI_Ðg˜œ Ô0×7Ò7¸ÑEÔEÐEÐegðð 	�—’�EœL¨¯ªÑ):Ô):¸E¿OºOÑ<MÔ<MÑNÔNÈvÔVÑWÔWÐXYÔZðð 	�—’�EœL¨°e·o²oÑ6GÔ6GÑHÔHÈÔPÑQÔQÐRSÔTðð 	�5—:’:�eœl™nœn¨VÔ4Ñ5Ô5°aÔ8ðð 	ÐEÐEÀÐEÑEÔEðð 	�U—Z’Z¥Ð$=Ð$=¸Ð$=Ñ$=Ô$=Ð$DÀ!ÀÑ EÔ EÑFÔFÀqÔIðð 	Ð|Ð|Ð|Ð|µv¸gÐK^ÐK^ÐhlÐ7mÑ7mÔ7mÐnzÕozÐnzÔ7{Ð|Ñ|Ô|ðð ð r+   c                 óÌ  — |d         p|                       |d         ¦  «        }d|d         ||d         r5d                     |                       |d         ¦  «        |d         ¦  «        n|d         |                      |d         ¦  «        t          |d         ¦  «        |                      |d	         ¦  «        t          |d
         ¦  «        |d         d d…         |d         dœ
S )NrP   r(   r·   r´   u
   {}  Â·  {}Úmodelr¹   Úlast_tsrX   rÂ   é
   Úprovider)
Úkindr´   Úc1Úc2Úc3Úc4Úc5Úerrorr2   rò   )r(   r=   rY   rB   r£   Úbool)rÓ   r·   r”   s      r)   rÑ   rÑ   �   sà   € Ø�Œ>Ð<˜UŸ]š]¨5°Ô+;Ñ<Ô<€DØ E¨%¤L¸ØZ_Ð`gÔZhÐ|�,×%Ò% e§m¢m°E¸)Ô4DÑ&EÔ&EÀuÈWÄ~ÑVÔVÐVÐnsÐt{Ôn|Ø—+’+˜e JÔ/Ñ0Ô0½¸UÀ9Ô=MÑ8NÔ8NÐV[×VaÒVaÐbgÐhnÔboÑVpÔVpÝ˜% œ/Ñ*Ô*°5¸Ô3CÀCÀRÀCÔ3HÐV[Ð\fÔVgðið ið ir+   c                 óZ  — t          |¦  «        \  }}t          j        ||¦  «        }t          d„ |D ¦   «         ¦  «        }g }|D �]d}t          j                             |d         |d         f¦  «        d         }|d         r*|                      |d         |d         z  ¦  «        d         n|                      d¦  «        d         }	|                     dd|d         d 	                    |t          |¦  «        d	 	                    |	¦  «        ¦  «        |                      |d         ¦  «        d
 	                    t          |d         |¦  «        ¦  «        |                      |d         ¦  «        |d         t          |d         |¦  «        t          |d         ¦  «        dœ
¦  «         �Œf|S )Nc              3   ó&   K  — | ]}|d          V — ŒdS r»   r‘   )r“   rG   s     r)   r½   zmodels.<locals>.<genexpr>š   s&   è è € Ð,Ð, ��F”Ð,Ð,Ð,Ð,Ð,Ð,r+   rò   r   r¹   rX   rï   r¥   u   {}  Â·  {}  Â·  {}u   Ã˜ {}ú{} %rÂ   )
ró   r´   rô   rõ   rö   r÷   rø   rò   Úsharerù   )r9   rÙ   Ú	per_modelrÞ   r   Ú	PROVIDERSr&   r¨   Úappendr=   rH   rY   rN   r£   rú   )
rÓ   r8   rå   ræ   rÎ   rM   ÚresultrG   Úprovider_nameÚaverages
             r)   rR   rR   —   s˜  € Ý Ñ'Ô'�L€Eˆ5ÝŒ?˜5 %Ñ(Ô(€DÝÐ,Ð, tÐ,Ñ,Ô,Ñ,Ô,€EØ€FØð 6ñ 6ˆÝ Ô*×.Ò.¨s°:¬ÀÀZÄÐ@RÑSÔSÐTUÔVˆØBEÀjÄ/Ðg�%—*’*˜S œ[¨3¨z¬?Ñ:Ñ;Ô;¸AÔ>Ð>ÐW\×WaÒWaÐbcÑWdÔWdÐefÔWgˆØ�Š˜w¨r¸¸W¼Ø1×8Ò8¸ÍÐTWÑHXÔHXÐZa×ZhÒZhÐipÑZqÔZqÑrÔrØ"Ÿ[š[¨¨Z¬Ñ9Ô9ÀÇÂÍvÐVYÐZ`ÔVaÐchÑOiÔOiÑAjÔAjØ"Ÿ[š[¨¨V¬Ñ5Ô5À3ÀzÄ?Õ]cÐdgÐhnÔdoÐqvÑ]wÔ]wÝ $ S¨¤]Ñ 3Ô 3ð	5ð 5ñ 	6ô 	6ð 	6ñ 	6ð
 €Mr+   c                 ó2  — t          |¦  «        \  }}i }t          j        ||¦  «        D ]Z}|                     t	          |d         ¦  «        t          ddddddd¬¦  «        ¦  «        }|D ]}||xx         ||         z  cc<   ŒŒ[t          d„ |                     ¦   «         D ¦   «         ¦  «        }g }	t          | 	                    ¦   «         d„ d¬¦  «        D ]¿\  }
}|	 
                    dd	| j        d
|
z            t          |¦  «        |                      |d         ¦  «        d                     t          |d         |¦  «        ¦  «        |                      |d         ¦  «        t          |d         |¦  «        t#          |d         ¦  «        dœ	¦  «         ŒÀ|	S )Nr(   r   g        )r¹   rÂ   rX   r[   rD   rE   rF   c              3   ó&   K  — | ]}|d          V — ŒdS r»   r‘   )r“   Úgroups     r)   r½   zpurposes.<locals>.<genexpr>¯   s&   è è € Ð;Ð; %��f”Ð;Ð;Ð;Ð;Ð;Ð;r+   c                 ó   — | d         d         S )Nr0   rX   r‘   )Úitems    r)   rÖ   zpurposes.<locals>.<lambda>±   s   € ¸tÀA¼wÀv¼€ r+   Tr×   r¥   r¬   r¹   rý   rX   rÂ   )	ró   r´   rô   rõ   rö   r÷   rø   rþ   rù   )r9   rÙ   Úper_purposeÚ
setdefaultr*   ÚdictrÞ   Úvaluesrã   r™   r  rž   rH   rY   r=   rN   r£   rú   )rÓ   r8   rå   ræ   ÚmergedrG   r  r´   rM   rÎ   r”   s              r)   rS   rS   §   sÈ  € Ý Ñ'Ô'�L€Eˆ5Ø€FÝÔ  ¨Ñ.Ô.ð #ð #ˆØ×!Ò!¥-°°I´Ñ"?Ô"?ÅÈqÐYZÐadÐnqØSTÐdeÐuvðBxñ Bxô Bxñ yô yˆàð 	#ð 	#ˆCØ�#ˆJˆJŒJ˜#˜cœ(Ñ"ˆJˆJ‰JˆJð	#åÐ;Ð;¨6¯=ª=©?¬?Ð;Ñ;Ô;Ñ;Ô;€EØ€DÝ˜fŸlšl™nœnÐ2NÐ2NÐX\Ð]Ñ]Ô]ð ð ‰ˆˆeØ�Š˜Y¨r¸¼ÀÈdÑARÔ9SÕ[fÐglÑ[mÔ[mØ Ÿ;š; u¨ZÔ'8Ñ9Ô9ÀÇÂÍvÐV[Ð\bÔVcÐejÑOkÔOkÑAlÔAlØ Ÿ;š; u¨V¤}Ñ5Ô5ÅÀuÈVÄ}ÐV[Ñ@\Ô@\ÕgkÐlqÐrzÔl{Ñg|Ôg|ð~ð ~ñ 	ô 	ð 	ð 	ð €Kr+   c                 ój   ‡ — t          |¦  «        \  }}ˆ fd„t          j        ||¦  «        D ¦   «         S )Nc                 ó0   •— g | ]}t          ‰|¦  «        ‘ŒS r‘   rÐ   rÒ   s     €r)   r¸   zhistory.<locals>.<listcomp>º   s#   ø€ ÐOÐOÐO¨�J�u˜eÑ$Ô$ÐOÐOÐOr+   )r9   rÙ   rÛ   )rÓ   r8   rå   ræ   s   `   r)   rT   rT   ¸   s:   ø€ Ý Ñ'Ô'�L€Eˆ5ØOÐOÐOÐOµ%´.ÀÈÑ2NÔ2NÐOÑOÔOÐOr+   c                 ó
  — g }t          j        |¦  «        D ]ë}|d         dk    }|                     dd                     |d         ¦  «        |d         t	          |d         ¦  «        |r|d         nt          |¦  «        |d         rd                     |d         d	z  ¦  «        nd
|s|                      |d         ¦  «        n| j        d         |                      |d         ¦  «        ||d         |d         dœ¦  «         Œì|S )z9The calls of one history entry (a game or a single call).Ústatusrù   Úcallzk:{}ÚidÚtsÚ
latency_msz{:.1f} sg     @�@r¥   r(   rn   rX   r2   rò   )ró   r´   Úcall_idrô   rõ   rö   r÷   rø   rù   r2   rò   )	rÙ   Úcalls_ofr  r=   rB   rH   r(   rž   r£   )rÓ   r´   rÎ   r  rn   s        r)   Údetailr  ½   s  € à€DÝ”˜sÑ#Ô#ð zð zˆØ�h” 7Ò*ˆØ�Š˜V¨F¯MªM¸$¸t¼*Ñ,EÔ,EÐRVÐW[ÔR\Ý  T¤
Ñ+Ô+Ø,2ÐI˜4 œ=˜=½ÀDÑ8IÔ8IØMQÐR^ÔM_Ðg˜:×,Ò,¨T°,Ô-?À&Ñ-HÑIÔIÐIÐegØAGÐ^˜5Ÿ=š=¨¨i¬Ñ9Ô9Ð9ÈUÌWÐU]ÔM^Ø Ÿ;š; t¨F¤|Ñ4Ô4¸vÈdÐSXÌkÐgkÐlvÔgwðyð yñ 	zô 	zð 	zð 	zð €Kr+   r$   ) r°   r3   Úwcs.air   r   rÙ   Úwcs.ai.UsageTrackerr   r   r   ÚPERIODSÚDEFAULT_PERIODrÜ   rä   ÚLEGACY_PURPOSEr%   r'   r¶   r*   r9   rB   rH   rN   r˜   rš   rœ   rQ   rÑ   rR   rS   rT   r  r‘   r+   r)   ú<module>r     sÔ  ððð ð
 €€€à Ð Ð Ð Ð Ð Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø FÐ FÐ FÐ FÐ FÐ FÐ FÐ FÐ FÐ Fà
+€Ø€Ø€
Ø€ðØ˜ðØ'5°vðØ?NÐPWðà
ˆFðà  &ðà*9¸6ðàCQÐSYðà[hÐjpðð �ðð % kðð Ð&ð	ð )>Ð?Oð	ð RkÐl|ð	ð
 �Gðð
 +¨Gðð
 6;Ô5IÈ8ð€ð €Ø%Ð ð4ð 4ð 4ð	ð 	ð 	ð 	ð`ð `ð `ðFð Fð FðAð Að AðØ�UðàˆUðà ðà'/°ðà8BÀEðàKTÐV[ðð ˆUðð ˜Eðð $+¨Eðð 49¸%ðð BJÈ5ðð S[Ð\aðð dkÐlqðð ˆEð	ð ˜Eð	ð $,¨Uð	ð 5>¸uð	ð ð GNÈuð	ð W\Ð]bð	ð
 �eðð
 .¨uðð
 7DÀUðð
 MZÐ[`ðð
 crÐsxðð ˜5ðð #1°%ðð :HÈðð QdÐejðð ˜eðð &5°eðð >NÈuðð WfÐglðð �5ðð )¨%ðð ð ð 2<¸Uðð EMÈeðð V`Ðafðð �Uðð �ðð & uðð /CÀEðð LWÐX]ðð `jÐkpðð sð  AFðð �ðð $ Uðð -7¸ðð @NÈuðð WaÐbgðð �Eðð *¨5ðð ð ð 3@Àðð IUÐV[ðð ^lÐmrðð �uðð +¨Eðð 4DÀUðð MVÐW\ðð _hÐinðð �ðð  ðð (6°uðð ?LÈUðð UbÐchðð �Eðð '¨ðð 0=¸eðð FLÈUðð €
ð&að að að;ð ;ð ;ð ;ð ;ñ ;ô ;ð ;ð.ð ð ð ð@ið ið iðð ð ð ð ð ð"Pð Pð Pð
ð ð ð ð r+   