ó
    ²Rjn8  ã                   óR  • S SK r S SK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  S SK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  S SKJrJr  S SKJrJr  S SKJ r   S SK!J"r"  S SK#J$r$  S SK%J&r&  S SK'J(r(J)r)  S SK*J+r,  S SK-J.r.  S SK/J0r0  S SK1J2r2  S SK3J4r4  S SK5J6r6  \" 5       r7 " S S5      r8 " S S\8\65      r9 " S S\8\45      r:S0S jr;S\4S  jr< " S! S"5      r= " S# S$\=\65      r>S%r? " S& S'\=\45      r@ " S( S)\=\65      rA " S* S+\=\45      rB " S, S-\=\65      rC " S. S/\=\45      rDg)1é    N)ÚurlparseÚ
urlunparse)Úsettings)ÚREDIRECT_FIELD_NAMEÚget_user_model)Úlogin)Úlogout)Úupdate_session_auth_hash)Úlogin_required)ÚAuthenticationFormÚPasswordChangeFormÚPasswordResetFormÚSetPasswordForm)Údefault_token_generator)Úget_current_site)ÚImproperlyConfiguredÚValidationError)ÚHttpResponseRedirectÚ	QueryDict)Úresolve_url)Úreverse_lazy)Úmethod_decorator)ÚRemovedInDjango50Warning)Úurl_has_allowed_host_and_schemeÚurlsafe_base64_decode)Úgettext_lazy)Únever_cache)Úcsrf_protect)Úsensitive_post_parameters)ÚTemplateView)ÚFormViewc                   óB   • \ rS rSrSr\r\" 5       rS r	S r
S rS rSrg)ÚRedirectURLMixiné%   Nc                 óP   • U R                  5       =(       d    U R                  5       $ ©N)Úget_redirect_urlÚget_default_redirect_url©Úselfs    ÚED:\diplom_project\venv\Lib\site-packages\django/contrib/auth/views.pyÚget_success_urlÚ RedirectURLMixin.get_success_url*   s   € Ø×$Ñ$Ó&×I¨$×*GÑ*GÓ*IÐIó    c                 ó4  • U R                   R                  R                  U R                  U R                   R                  R                  U R                  5      5      n[        UU R                  5       U R                   R                  5       S9nU(       a  U$ S$ )z6Return the user-originating redirect URL if it's safe.)ÚurlÚallowed_hostsÚrequire_httpsÚ )ÚrequestÚPOSTÚgetÚredirect_field_nameÚGETr   Úget_success_url_allowed_hostsÚ	is_secure)r*   Úredirect_toÚurl_is_safes      r+   r'   Ú!RedirectURLMixin.get_redirect_url-   s|   € à—l‘l×'Ñ'×+Ñ+Ø×$Ñ$ d§l¡l×&6Ñ&6×&:Ñ&:¸4×;SÑ;SÓ&Tó
ˆô 6ØØ×<Ñ<Ó>ØŸ,™,×0Ñ0Ó2ñ
ˆö
 *ˆ{Ð1¨rÐ1r.   c                 óP   • U R                   R                  5       1U R                  k$ r&   )r4   Úget_hostÚsuccess_url_allowed_hostsr)   s    r+   r9   Ú.RedirectURLMixin.get_success_url_allowed_hosts9   s#   € Ø—‘×%Ñ%Ó'ÐI¨$×*HÑ*HÐIÐIr.   c                 ód   • U R                   (       a  [        U R                   5      $ [        S5      e)ú Return the default redirect URL.z+No URL to redirect to. Provide a next_page.)Ú	next_pager   r   r)   s    r+   r(   Ú)RedirectURLMixin.get_default_redirect_url<   s$   € à�>�>Ü˜tŸ~™~Ó.Ð.Ü"Ð#PÓQÐQr.   © )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__rD   r   r7   Úsetr@   r,   r'   r9   r(   Ú__static_attributes__rF   r.   r+   r#   r#   %   s,   † Ø€IØ-ÐÙ #£ÐòJò
2òJõRr.   r#   c                   ó¶   ^ • \ rS rSrSr\rSrSrSr	Sr
\" \" 5       5      \" \5      \" \5      U 4S j5       5       5       rS rS rU 4S	 jrS
 rU 4S jrSrU =r$ )Ú	LoginViewéC   z5
Display the login form and handle the login action.
Nzregistration/login.htmlFc                 ó  >• U R                   (       ad  U R                  R                  R                  (       a?  U R	                  5       nX@R                  R
                  :X  a  [        S5      e[        U5      $ [        TU ]$  " U/UQ70 UD6$ )NzsRedirection loop for authenticated user detected. Check that your LOGIN_REDIRECT_URL doesn't point to a login page.)
Úredirect_authenticated_userr4   ÚuserÚis_authenticatedr,   ÚpathÚ
ValueErrorr   ÚsuperÚdispatch©r*   r4   ÚargsÚkwargsr;   Ú	__class__s        €r+   rW   ÚLoginView.dispatchN   sx   ø€ ð ×+×+°·±×0AÑ0A×0R×0RØ×.Ñ.Ó0ˆKØŸl™l×/Ñ/Ó/Ü ðMóð ô (¨Ó4Ð4Ü‰wÒ Ð9¨$Ò9°&Ñ9Ð9r.   c                 ó€   • U R                   (       a  [        U R                   5      $ [        [        R                  5      $ ©rC   )rD   r   r   ÚLOGIN_REDIRECT_URLr)   s    r+   r(   Ú"LoginView.get_default_redirect_url\   s)   € à�>�>Ü˜tŸ~™~Ó.Ð.äœx×:Ñ:Ó;Ð;r.   c                 ó@   • U R                   =(       d    U R                  $ r&   )Úauthentication_formÚ
form_classr)   s    r+   Úget_form_classÚLoginView.get_form_classc   s   € Ø×'Ñ'×:¨4¯?©?Ð:r.   c                 óB   >• [         TU ]  5       nU R                  US'   U$ )Nr4   )rV   Úget_form_kwargsr4   ©r*   rZ   r[   s     €r+   rg   ÚLoginView.get_form_kwargsf   s#   ø€ Ü‘Ñ(Ó*ˆØ ŸL™LˆˆyÑØˆr.   c                 ó|   • [        U R                  UR                  5       5        [        U R	                  5       5      $ )z)Security check complete. Log the user in.)Ú
auth_loginr4   Úget_userr   r,   )r*   Úforms     r+   Ú
form_validÚLoginView.form_validk   s*   € ä�4—<‘< §¡£Ô1Ü# D×$8Ñ$8Ó$:Ó;Ð;r.   c                 óî   >• [         TU ]  " S0 UD6n[        U R                  5      nUR	                  U R
                  U R                  5       SUSUR                  0U R                  =(       d    0 E5        U$ )NÚsiteÚ	site_namerF   )	rV   Úget_context_datar   r4   Úupdater7   r'   ÚnameÚextra_context©r*   rZ   ÚcontextÚcurrent_siter[   s       €r+   rs   ÚLoginView.get_context_datap   st   ø€ Ü‘'Ò*Ñ4¨VÑ4ˆÜ'¨¯©Ó5ˆØ�‰à×(Ñ(¨$×*?Ñ*?Ó*AØ˜Ø˜\×.Ñ.ðð ×%Ñ%×+¨ð	ô	
ð ˆr.   rF   )rG   rH   rI   rJ   Ú__doc__r   rc   rb   Útemplate_namerQ   rv   r   r   r   r   rW   r(   rd   rg   rn   rs   rL   Ú__classcell__©r[   s   @r+   rN   rN   C   sx   ø† ñð $€JØÐØ-€MØ"'ÐØ€MáÑ/Ó1Ó2Ù�lÓ#Ù�kÓ"ô	:ó #ó $ó 3ð	:ò<ò;õò
<÷
ó r.   rN   c                   óŠ   ^ • \ rS rSrSr/ SQrSrSr\" \	5      U 4S j5       r
\" \5      U 4S j5       r\rS rU 4S	 jrS
rU =r$ )Ú
LogoutViewé~   z@
Log out the user and display the 'You are logged out' message.
)r6   ÚheadÚpostÚoptionszregistration/logged_out.htmlNc                 óž   >• UR                   R                  5       S:X  a  [        R                  " S[        5        [
        TU ]  " U/UQ70 UD6$ )Nr6   zlLog out via GET requests is deprecated and will be removed in Django 5.0. Use POST requests for logging out.)ÚmethodÚlowerÚwarningsÚwarnr   rV   rW   )r*   r4   rY   rZ   r[   s       €r+   rW   ÚLogoutView.dispatch‹   sH   ø€ à�>‰>×ÑÓ! UÓ*Ü�MŠMð:ä(ôô
 ‰wÒ Ð9¨$Ò9°&Ñ9Ð9r.   c                 óž   >• [        U5        U R                  5       nXAR                  5       :w  a  [        U5      $ [        TU ]  " U/UQ70 UD6$ )zLogout may be done via POST.)Úauth_logoutr,   Úget_full_pathr   rV   r6   rX   s        €r+   rƒ   ÚLogoutView.post•   sN   ø€ ô 	�GÔØ×*Ñ*Ó,ˆØ×/Ñ/Ó1Ó1ä'¨Ó4Ð4Ü‰wŠ{˜7Ð4 TÒ4¨VÑ4Ð4r.   c                 óÖ   • U R                   (       a  [        U R                   5      $ [        R                  (       a  [        [        R                  5      $ U R                  R
                  $ r^   )rD   r   r   ÚLOGOUT_REDIRECT_URLr4   rT   r)   s    r+   r(   Ú#LogoutView.get_default_redirect_url¢   sB   € à�>�>Ü˜tŸ~™~Ó.Ð.Ü×)×)Üœx×;Ñ;Ó<Ð<à—<‘<×$Ñ$Ð$r.   c                 óÎ   >• [         TU ]  " S0 UD6n[        U R                  5      nUR	                  UUR
                  [        S5      S S.U R                  =(       d    0 E5        U$ )Nz
Logged out)rq   rr   ÚtitleÚsubtitlerF   )rV   rs   r   r4   rt   ru   Ú_rv   rw   s       €r+   rs   ÚLogoutView.get_context_data«   sf   ø€ Ü‘'Ò*Ñ4¨VÑ4ˆÜ'¨¯©Ó5ˆØ�‰à$Ø)×.Ñ.Ü˜<›Ø ñ	ð
 ×%Ñ%×+¨ðô	
ð ˆr.   rF   )rG   rH   rI   rJ   r{   Úhttp_method_namesr|   rv   r   r   rW   r   rƒ   r6   r(   rs   rL   r}   r~   s   @r+   r€   r€   ~   sb   ø† ñò ;ÐØ2€MØ€Mñ �kÓ"ô:ó #ð:ñ �lÓ#ô5ó $ð5ð €Cò%÷ó r.   r€   c                 óx   • [        U=(       d    [        R                  5      n[        R	                  US9" U 5      $ )zJ
Log out the user if they are logged in. Then redirect to the login page.
)rD   )r   r   Ú	LOGIN_URLr€   Úas_view)r4   Ú	login_urls     r+   Úlogout_then_loginrœ   º   s2   € ô ˜I×;¬×);Ñ);Ó<€IÜ×Ñ¨	ÐÑ2°7Ó;Ð;r.   c                 óê   • [        U=(       d    [        R                  5      n[        [	        U5      5      nU(       a#  [        US   SS9nXU'   UR                  SS9US'   [        [        U5      5      $ )zE
Redirect the user to the login page, passing the given 'next' page.
é   T)ÚmutableÚ/)Úsafe)	r   r   r™   Úlistr   r   Ú	urlencoder   r   )Únextr›   r7   Úresolved_urlÚlogin_url_partsÚquerystrings         r+   Úredirect_to_loginr¨   Â   sm   € ô ˜y×>¬H×,>Ñ,>Ó?€Läœ8 LÓ1Ó2€OÞÜ °Ñ 2¸DÑAˆØ+/Ð'Ñ(Ø(×2Ñ2¸Ð2Ð<ˆ˜Ñä¤
¨?Ó ;Ó<Ð<r.   c                   ó,   ^ • \ rS rSrSrU 4S jrSrU =r$ )ÚPasswordContextMixinéÙ   Nc                 óŽ   >• [         TU ]  " S0 UD6nUR                  U R                  S S.U R                  =(       d    0 E5        U$ )N)r“   r”   rF   )rV   rs   rt   r“   rv   ©r*   rZ   rx   r[   s      €r+   rs   Ú%PasswordContextMixin.get_context_dataÜ   sD   ø€ Ü‘'Ò*Ñ4¨VÑ4ˆØ�‰Ø—j‘j¨dÑQ°t×7IÑ7I×7OÈRÐQô	
ð ˆr.   rF   )rG   rH   rI   rJ   rv   rs   rL   r}   r~   s   @r+   rª   rª   Ù   s   ø† Ø€M÷ó r.   rª   c                   óŠ   ^ • \ rS rSrSrSr\rSrSr	Sr
\" S5      rSr\" S5      r\r\" \5      U 4S j5       rU 4S	 jrS
rU =r$ )ÚPasswordResetViewéä   z&registration/password_reset_email.htmlNz'registration/password_reset_subject.txtÚpassword_reset_donez%registration/password_reset_form.htmlzPassword resetc                 ó$   >• [         TU ]  " U0 UD6$ r&   ©rV   rW   ©r*   rY   rZ   r[   s      €r+   rW   ÚPasswordResetView.dispatchð   ó   ø€ ä‰wÒ Ð0¨Ñ0Ð0r.   c           	      ó  >• U R                   R                  5       U R                  U R                  U R                  U R
                  U R                   U R                  U R                  S.nUR                  " S0 UD6  [        TU ])  U5      $ )N)Ú	use_httpsÚtoken_generatorÚ
from_emailÚemail_template_nameÚsubject_template_namer4   Úhtml_email_template_nameÚextra_email_contextrF   )r4   r:   rº   r»   r¼   r½   r¾   r¿   ÚsaverV   rn   )r*   rm   Úoptsr[   s      €r+   rn   ÚPasswordResetView.form_validô   sv   ø€ àŸ™×/Ñ/Ó1Ø#×3Ñ3ØŸ/™/Ø#'×#;Ñ#;Ø%)×%?Ñ%?Ø—|‘|Ø(,×(EÑ(EØ#'×#;Ñ#;ñ	
ˆð 	�	Š	Ñ�DÒÜ‰wÑ! $Ó'Ð'r.   rF   )rG   rH   rI   rJ   r¼   r¿   r   rc   r»   r¾   r½   r   Úsuccess_urlr|   r•   r“   r   rº   r   r   rW   rn   rL   r}   r~   s   @r+   r°   r°   ä   sf   ø† ØBÐØÐØ"€JØ€JØ#ÐØEÐÙÐ4Ó5€KØ;€MÙÐÓ€EØ-€Oá�lÓ#ô1ó $ð1÷(ó (r.   r°   Ú_password_reset_tokenc                   ó(   • \ rS rSrSr\" S5      rSrg)ÚPasswordResetDoneViewi  z%registration/password_reset_done.htmlzPassword reset sentrF   N)rG   rH   rI   rJ   r|   r•   r“   rL   rF   r.   r+   rÆ   rÆ     s   † Ø;€MÙÐ#Ó$ƒEr.   rÆ   c                   óÀ   ^ • \ rS rSr\rSrSrSr\	" S5      r
Sr\" S5      r\r\" \" 5       5      \" \5      U 4S j5       5       rS	 rU 4S
 jrU 4S jrU 4S jrSrU =r$ )ÚPasswordResetConfirmViewi  FNzset-passwordÚpassword_reset_completez(registration/password_reset_confirm.htmlzEnter new passwordc                 óÎ  >• SU;  d  SU;  a  [        S5      eSU l        U R                  US   5      U l        U R                  Gb  US   nX0R                  :X  al  U R
                  R                  R                  [        5      nU R                  R                  U R                  U5      (       a  SU l        [        TU ]0  " U0 UD6$ O�U R                  R                  U R                  U5      (       aV  X0R
                  R                  [        '   U R
                  R                  R                  X0R                  5      n[        U5      $ U R!                  U R#                  5       5      $ )NÚuidb64Útokenz:The URL path must contain 'uidb64' and 'token' parameters.FT)r   Ú	validlinkrl   rR   Úreset_url_tokenr4   Úsessionr6   ÚINTERNAL_RESET_SESSION_TOKENrº   Úcheck_tokenrV   rW   rT   Úreplacer   Úrender_to_responsers   )r*   rY   rZ   rÌ   Úsession_tokenÚredirect_urlr[   s         €r+   rW   Ú!PasswordResetConfirmView.dispatch  s=  ø€ ð ˜6Ó! W°FÓ%:Ü&ØLóð ð ˆŒØ—M‘M &¨Ñ"2Ó3ˆŒ	à�9‰9Ò Ø˜7‘OˆEØ×,Ñ,Ó,Ø $§¡× 4Ñ 4× 8Ñ 8Ô9UÓ V�Ø×'Ñ'×3Ñ3°D·I±I¸}×MÑMà%)�D”NÜ ™7Ò+¨TÐ<°VÑ<Ð<ð Nð
 ×'Ñ'×3Ñ3°D·I±I¸u×EÑEð
 JO—L‘L×(Ñ(Ô)EÑFØ#'§<¡<×#4Ñ#4×#<Ñ#<Ø×3Ñ3ó$�Lô 0°Ó=Ð=ð ×&Ñ& t×'<Ñ'<Ó'>Ó?Ð?r.   c                 óØ   •  [        U5      R                  5       n[        R                  R	                  US9nU$ ! [
        [        [        [        R                  [        4 a    S n U$ f = f)N)Úpk)
r   ÚdecodeÚ	UserModelÚ_default_managerr6   Ú	TypeErrorrU   ÚOverflowErrorÚDoesNotExistr   )r*   rË   ÚuidrR   s       r+   rl   Ú!PasswordResetConfirmView.get_user7  sn   € ð	ä'¨Ó/×6Ñ6Ó8ˆCÜ×-Ñ-×1Ñ1°SÐ1Ð9ˆDð ˆøô ÜÜÜ×"Ñ"Üð
ó 	ð ‰DØˆð	ús   ‚6: º+A)Á(A)c                 óB   >• [         TU ]  5       nU R                  US'   U$ ©NrR   )rV   rg   rR   rh   s     €r+   rg   Ú(PasswordResetConfirmView.get_form_kwargsF  s"   ø€ Ü‘Ñ(Ó*ˆØŸ™ˆˆv‰Øˆr.   c                 óÚ   >• UR                  5       nU R                  R                  [        	 U R                  (       a   [        U R                  X R                  5        [        TU ]!  U5      $ r&   )	rÀ   r4   rÏ   rÐ   Úpost_reset_loginrk   Úpost_reset_login_backendrV   rn   )r*   rm   rR   r[   s      €r+   rn   Ú#PasswordResetConfirmView.form_validK  sN   ø€ Ø�y‰y‹{ˆØ�L‰L× Ñ Ô!=Ð>Ø× × Ü�t—|‘| T×+HÑ+HÔIÜ‰wÑ! $Ó'Ð'r.   c                 ó”   >• [         TU ]  " S0 UD6nU R                  (       a  SUS'   U$ UR                  S [	        S5      SS.5        U$ )NTrÍ   zPassword reset unsuccessfulF)rm   r“   rÍ   rF   )rV   rs   rÍ   rt   r•   r­   s      €r+   rs   Ú)PasswordResetConfirmView.get_context_dataR  sV   ø€ Ü‘'Ò*Ñ4¨VÑ4ˆØ�>�>Ø#'ˆG�KÑ ð ˆð �N‰Nà ÜÐ<Ó=Ø!&ñôð ˆr.   )rR   rÍ   )rG   rH   rI   rJ   r   rc   rå   ræ   rÎ   r   rÃ   r|   r•   r“   r   rº   r   r   r   rW   rl   rg   rn   rs   rL   r}   r~   s   @r+   rÈ   rÈ     s}   ø† Ø €JØÐØ#ÐØ$€OÙÐ8Ó9€KØ>€MÙÐ"Ó#€EØ-€OáÑ/Ó1Ó2Ù�kÓ"ô@ó #ó 3ð@ò@õõ
(÷ó r.   rÈ   c                   ó<   ^ • \ rS rSrSr\" S5      rU 4S jrSrU =r	$ )ÚPasswordResetCompleteViewia  z)registration/password_reset_complete.htmlzPassword reset completec                 ó`   >• [         TU ]  " S0 UD6n[        [        R                  5      US'   U$ )Nr›   rF   )rV   rs   r   r   r™   r­   s      €r+   rs   Ú*PasswordResetCompleteView.get_context_datae  s/   ø€ Ü‘'Ò*Ñ4¨VÑ4ˆÜ*¬8×+=Ñ+=Ó>ˆ�ÑØˆr.   rF   )
rG   rH   rI   rJ   r|   r•   r“   rs   rL   r}   r~   s   @r+   rë   rë   a  s   ø† Ø?€MÙÐ'Ó(€E÷ó r.   rë   c                   ó´   ^ • \ rS rSr\r\" S5      rSr\	" S5      r
\" \" 5       5      \" \5      \" \5      U 4S j5       5       5       rU 4S jrU 4S jrSrU =r$ )	ÚPasswordChangeViewik  Úpassword_change_donez&registration/password_change_form.htmlzPassword changec                 ó$   >• [         TU ]  " U0 UD6$ r&   r´   rµ   s      €r+   rW   ÚPasswordChangeView.dispatchq  s   ø€ ô ‰wÒ Ð0¨Ñ0Ð0r.   c                 óV   >• [         TU ]  5       nU R                  R                  US'   U$ râ   )rV   rg   r4   rR   rh   s     €r+   rg   Ú"PasswordChangeView.get_form_kwargsw  s(   ø€ Ü‘Ñ(Ó*ˆØŸ™×*Ñ*ˆˆv‰Øˆr.   c                 ó‚   >• UR                  5         [        U R                  UR                  5        [        TU ]  U5      $ r&   )rÀ   r
   r4   rR   rV   rn   )r*   rm   r[   s     €r+   rn   ÚPasswordChangeView.form_valid|  s0   ø€ Ø�	‰	Œô 	! §¡¨t¯y©yÔ9Ü‰wÑ! $Ó'Ð'r.   rF   )rG   rH   rI   rJ   r   rc   r   rÃ   r|   r•   r“   r   r   r   r   rW   rg   rn   rL   r}   r~   s   @r+   rï   rï   k  sg   ø† Ø#€JÙÐ5Ó6€KØ<€MÙÐÓ €EáÑ/Ó1Ó2Ù�lÓ#Ù�nÓ%ô1ó &ó $ó 3ð1õ÷
(ó (r.   rï   c                   óR   ^ • \ rS rSrSr\" S5      r\" \5      U 4S j5       r	Sr
U =r$ )ÚPasswordChangeDoneViewi„  z&registration/password_change_done.htmlzPassword change successfulc                 ó$   >• [         TU ]  " U0 UD6$ r&   r´   rµ   s      €r+   rW   ÚPasswordChangeDoneView.dispatchˆ  r·   r.   rF   )rG   rH   rI   rJ   r|   r•   r“   r   r   rW   rL   r}   r~   s   @r+   rø   rø   „  s*   ø† Ø<€MÙÐ*Ó+€Eá�nÓ%ô1ó &ö1r.   rø   r&   )Erˆ   Úurllib.parser   r   Údjango.confr   Údjango.contrib.authr   r   r   rk   r	   rŒ   r
   Údjango.contrib.auth.decoratorsr   Údjango.contrib.auth.formsr   r   r   r   Údjango.contrib.auth.tokensr   Údjango.contrib.sites.shortcutsr   Údjango.core.exceptionsr   r   Údjango.httpr   r   Údjango.shortcutsr   Údjango.urlsr   Údjango.utils.decoratorsr   Údjango.utils.deprecationr   Údjango.utils.httpr   r   Údjango.utils.translationr   r•   Údjango.views.decorators.cacher   Údjango.views.decorators.csrfr   Údjango.views.decorators.debugr   Údjango.views.generic.baser    Údjango.views.generic.editr!   rÚ   r#   rN   r€   rœ   r¨   rª   r°   rÐ   rÆ   rÈ   rë   rï   rø   rF   r.   r+   Ú<module>r     s  ðÛ ß -å  ÷ DÝ 3Ý 5Ý 8Ý 9÷ó õ ?Ý ;ß Hß 7Ý (Ý $Ý 4Ý =ß TÝ 6Ý 5Ý 5Ý CÝ 2Ý .áÓ€	÷Rñ Rô<8Ð  (ô 8ôv9Ð! <ô 9ôx<ð '+Ð@Sô =÷.ñ ô(Ð,¨hô (ð>  7Ð ô%Ð0°,ô %ô
SÐ3°Xô SôlÐ 4°lô ô(Ð-¨xô (ô21Ð1°<õ 1r.   