§
    Ÿj>B  ã                   óÞ   — d dl Z d dlZd dlmZmZ d dlmZ d dlmZ d dlm	Z	 d dl
mZ d dlmZ d dlmZ ej        ej        z   Z G d	„ d
e¦  «        Z G d„ de¦  «        Z G d„ d¦  «        ZdS )é    N)ÚdatetimeÚ	timedelta)Úsync_to_async)Úsettings)Úsigning)Útimezone)Úget_random_string)Úimport_stringc                   ó   — e Zd ZdZdS )ÚCreateErrorz‡
    Used internally as a consistent exception type to catch from save (see the
    docstring for SessionBase.save() for details).
    N©Ú__name__Ú
__module__Ú__qualname__Ú__doc__© ó    úr/var/www/finuniver-perm.ru/html/student/venv/lib/python3.11/site-packages/django/contrib/sessions/backends/base.pyr   r      s   € € € € € ðð ð
 	€Dr   r   c                   ó   — e Zd ZdZdS )ÚUpdateErrorzF
    Occurs if Django tries to update a session that was deleted.
    Nr   r   r   r   r   r      s   € € € € € ðð ð 	€Dr   r   c                   óN  — e Zd ZdZdZdZ e¦   «         ZdId„Zd„ Z	d„ Z
d„ Zd	„ Zd
„ Zed„ ¦   «         ZdId„ZdId„Zefd„Zefd„Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z d„ Z!d„ Z"d„ Z#d „ Z$d!„ Z%d"„ Z&d#„ Z'd$„ Z(d%„ Z)d&„ Z*d'„ Z+d(„ Z,d)„ Z-d*„ Z.d+„ Z/d,„ Z0 ee/¦  «        Z1 ee/e0¦  «        Z2dJd.„Z3dJd/„Z4 ee3¦  «        Z5d0„ Z6d1„ Z7d2„ Z8d3„ Z9d4„ Z:d5„ Z;d6„ Z<d7„ Z=d8„ Z>d9„ Z?d:„ Z@d;„ ZAd<„ ZBd=„ ZCd>„ ZDd?„ ZEd@„ ZFdJdA„ZGdJdB„ZHdIdC„ZIdIdD„ZJdE„ ZKdF„ ZLeMdG„ ¦   «         ZNeMdH„ ¦   «         ZOdS )KÚSessionBasez-
    Base class for all Session classes.
    Ú
testcookieÚworkedNc                 ól   — || _         d| _        d| _        t          t          j        ¦  «        | _        d S )NF)Ú_session_keyÚaccessedÚmodifiedr
   r   ÚSESSION_SERIALIZERÚ
serializer©ÚselfÚsession_keys     r   Ú__init__zSessionBase.__init__-   s.   € Ø'ˆÔØˆŒØˆŒÝ'­Ô(CÑDÔDˆŒˆˆr   c                 ó   — || j         v S ©N©Ú_session©r"   Úkeys     r   Ú__contains__zSessionBase.__contains__3   ó   € Ø�d”mÐ#Ð#r   c                 ó   — | j         |         S r&   r'   r)   s     r   Ú__getitem__zSessionBase.__getitem__6   s   € ØŒ}˜SÔ!Ð!r   c                 ó(   — || j         |<   d| _        d S ©NT©r(   r   ©r"   r*   Úvalues      r   Ú__setitem__zSessionBase.__setitem__9   s   € Ø"ˆŒ�cÑØˆŒˆˆr   c              ƒ   óR   K  — ||                       ¦   «         ƒ d {V —†|<   d| _        d S r0   )Ú_aget_sessionr   r2   s      r   ÚasetzSessionBase.aset=   s9   è è € Ø,1ˆt×!Ò!Ñ#Ô#Ð	#Ð	#Ð	#Ð	#Ð	#Ð	# SÑ)ØˆŒˆˆr   c                 ó$   — | j         |= d| _        d S r0   r1   r)   s     r   Ú__delitem__zSessionBase.__delitem__A   s   € ØŒM˜#ÐØˆŒˆˆr   c                 ó    — d| j         j        z   S )Nzdjango.contrib.sessions.)Ú	__class__r   ©r"   s    r   Úkey_saltzSessionBase.key_saltE   s   € à)¨D¬NÔ,GÑGÐGr   c                 ó8   — | j                              ||¦  «        S r&   )r(   Úget©r"   r*   Údefaults      r   r?   zSessionBase.getI   s   € ØŒ}× Ò   gÑ.Ô.Ð.r   c              ƒ   ób   K  — |                       ¦   «         ƒ d {V —†                     ||¦  «        S r&   )r6   r?   r@   s      r   ÚagetzSessionBase.agetL   s:   è è € Ø×(Ò(Ñ*Ô*Ð*Ð*Ð*Ð*Ð*Ð*×/Ò/°°WÑ=Ô=Ð=r   c                 ón   — | j         p|| j        v | _         || j        u rdn|f} | j        j        |g|¢R Ž S ©Nr   )r   r(   Ú_SessionBase__not_givenÚpop©r"   r*   rA   Úargss       r   rG   zSessionBase.popO   sL   € ØœÐ=¨°´Ð)=ˆŒØ Ô 0Ð0Ð0ˆrˆr°w°jˆØ ˆtŒ}Ô  Ð, tÐ,Ð,Ð,Ð,r   c              ƒ   ó¾   K  — | j         p||                      ¦   «         ƒ d {V —†v | _         || j        u rdn|f} |                      ¦   «         ƒ d {V —†j        |g|¢R Ž S rE   )r   r6   rF   rG   rH   s       r   ÚapopzSessionBase.apopT   sˆ   è è € ØœÐL¨°t×7IÒ7IÑ7KÔ7KÐ1KÐ1KÐ1KÐ1KÐ1KÐ1KÐ)LˆŒØ Ô 0Ð0Ð0ˆrˆr°w°jˆØ/�d×(Ò(Ñ*Ô*Ð*Ð*Ð*Ð*Ð*Ð*Ô/°Ð;°dÐ;Ð;Ð;Ð;r   c                 ó<   — || j         v r| j         |         S || |<   |S r&   r'   r2   s      r   Ú
setdefaultzSessionBase.setdefaultY   s*   € Ø�$”-ÐÐØ”= Ô%Ð%àˆD�‰IØˆLr   c              ƒ   óŽ   K  — |                       ¦   «         ƒ d {V —†}||v r||         S |                      ||¦  «        ƒ d {V —† |S r&   )r6   r7   )r"   r*   r3   Úsessions       r   ÚasetdefaultzSessionBase.asetdefault`   sg   è è € Ø×*Ò*Ñ,Ô,Ð,Ð,Ð,Ð,Ð,Ð,ˆØ�'ˆ>ˆ>Ø˜3”<Ðà—)’)˜C Ñ'Ô'Ð'Ð'Ð'Ð'Ð'Ð'Ð'ØˆLr   c                 ó$   — | j         | | j        <   d S r&   )ÚTEST_COOKIE_VALUEÚTEST_COOKIE_NAMEr<   s    r   Úset_test_cookiezSessionBase.set_test_cookieh   s   € Ø&*Ô&<ˆˆTÔ"Ñ#Ð#Ð#r   c              ƒ   óV   K  — |                       | j        | j        ¦  «        ƒ d {V —† d S r&   )r7   rS   rR   r<   s    r   Úaset_test_cookiezSessionBase.aset_test_cookiek   s8   è è € Ø�iŠi˜Ô-¨tÔ/EÑFÔFÐFÐFÐFÐFÐFÐFÐFÐFÐFr   c                 óH   — |                       | j        ¦  «        | j        k    S r&   )r?   rS   rR   r<   s    r   Útest_cookie_workedzSessionBase.test_cookie_workedn   s   € Ø�xŠx˜Ô-Ñ.Ô.°$Ô2HÒHÐHr   c              ƒ   óX   K  — |                       | j        ¦  «        ƒ d {V —†| j        k    S r&   )rC   rS   rR   r<   s    r   Úatest_cookie_workedzSessionBase.atest_cookie_workedq   s5   è è € Ø—i’i Ô 5Ñ6Ô6Ð6Ð6Ð6Ð6Ð6Ð6¸4Ô;QÒQÐQr   c                 ó   — | | j         = d S r&   )rS   r<   s    r   Údelete_test_cookiezSessionBase.delete_test_cookiet   s   € Ø�Ô&Ð'Ð'Ð'r   c              ƒ   óJ   K  — |                       ¦   «         ƒ d {V —†| j        = d S r&   )r6   rS   r<   s    r   Úadelete_test_cookiezSessionBase.adelete_test_cookiew   s5   è è € Ø×%Ò%Ñ'Ô'Ð'Ð'Ð'Ð'Ð'Ð'¨Ô)>Ð?Ð?Ð?r   c                 óF   — t          j        || j        | j        d¬¦  «        S )zGReturn the given session dictionary serialized and encoded as a string.T)Úsaltr    Úcompress)r   Údumpsr=   r    )r"   Úsession_dicts     r   ÚencodezSessionBase.encodez   s+   € åŒ}ØØ”Ø”Øð	
ñ 
ô 
ð 	
r   c                 óÜ   — 	 t          j        || j        | j        ¬¦  «        S # t           j        $ r, t          j        d¦  «        }|                     d¦  «         Y nt          $ r Y nw xY wi S )N)r`   r    z!django.security.SuspiciousSessionzSession data corrupted)	r   Úloadsr=   r    ÚBadSignatureÚloggingÚ	getLoggerÚwarningÚ	Exception)r"   Úsession_dataÚloggers      r   ÚdecodezSessionBase.decodeƒ   s•   € ð
	Ý”=Ø 4¤=¸T¼_ðñ ô ð øõ Ô#ð 	5ð 	5ð 	5ÝÔ&Ð'JÑKÔKˆFØ�NŠNÐ3Ñ4Ô4Ð4Ð4Ð4Ýð 	ð 	ð 	ð ˆDð	øøøð ˆ	s   ‚ # £8A)Á	A)Á(A)c                 óH   — | j                              |¦  «         d| _        d S r0   )r(   Úupdater   ©r"   Údict_s     r   rp   zSessionBase.update‘   s#   € ØŒ×Ò˜UÑ#Ô#Ð#ØˆŒˆˆr   c              ƒ   ór   K  — |                       ¦   «         ƒ d {V —†                     |¦  «         d| _        d S r0   )r6   rp   r   rq   s     r   ÚaupdatezSessionBase.aupdate•   sC   è è € Ø×!Ò!Ñ#Ô#Ð	#Ð	#Ð	#Ð	#Ð	#Ð	#×+Ò+¨EÑ2Ô2Ð2ØˆŒˆˆr   c                 ó   — || j         v S r&   r'   r)   s     r   Úhas_keyzSessionBase.has_key™   r,   r   c              ƒ   ó>   K  — ||                       ¦   «         ƒ d {V —†v S r&   )r6   r)   s     r   Úahas_keyzSessionBase.ahas_keyœ   s/   è è € Ø˜T×/Ò/Ñ1Ô1Ð1Ð1Ð1Ð1Ð1Ð1Ð2Ð2r   c                 ó4   — | j                              ¦   «         S r&   )r(   Úkeysr<   s    r   rz   zSessionBase.keysŸ   s   € ØŒ}×!Ò!Ñ#Ô#Ð#r   c              ƒ   ó^   K  — |                       ¦   «         ƒ d {V —†                     ¦   «         S r&   )r6   rz   r<   s    r   ÚakeyszSessionBase.akeys¢   s6   è è € Ø×(Ò(Ñ*Ô*Ð*Ð*Ð*Ð*Ð*Ð*×0Ò0Ñ2Ô2Ð2r   c                 ó4   — | j                              ¦   «         S r&   )r(   Úvaluesr<   s    r   r~   zSessionBase.values¥   s   € ØŒ}×#Ò#Ñ%Ô%Ð%r   c              ƒ   ó^   K  — |                       ¦   «         ƒ d {V —†                     ¦   «         S r&   )r6   r~   r<   s    r   ÚavalueszSessionBase.avalues¨   s6   è è € Ø×(Ò(Ñ*Ô*Ð*Ð*Ð*Ð*Ð*Ð*×2Ò2Ñ4Ô4Ð4r   c                 ó4   — | j                              ¦   «         S r&   )r(   Úitemsr<   s    r   r‚   zSessionBase.items«   s   € ØŒ}×"Ò"Ñ$Ô$Ð$r   c              ƒ   ó^   K  — |                       ¦   «         ƒ d {V —†                     ¦   «         S r&   )r6   r‚   r<   s    r   ÚaitemszSessionBase.aitems®   s6   è è € Ø×(Ò(Ñ*Ô*Ð*Ð*Ð*Ð*Ð*Ð*×1Ò1Ñ3Ô3Ð3r   c                 ó0   — i | _         d| _        d| _        d S r0   )Ú_session_cacher   r   r<   s    r   ÚclearzSessionBase.clear±   s   € ð !ˆÔØˆŒØˆŒˆˆr   c                 óF   — 	 | j          o| j         S # t          $ r Y dS w xY w)zBReturn True when there is no session_key and the session is empty.T)r   r†   ÚAttributeErrorr<   s    r   Úis_emptyzSessionBase.is_empty¹   s@   € ð	ØÔ(Ð(ÐD°Ô1DÐ-DÐDøÝð 	ð 	ð 	Ø�4�4ð	øøøs   ‚ ’
 Ÿ c                 ó^   — 	 t          dt          ¦  «        }|                      |¦  «        s|S Œ-)z)Return session key that isn't being used.Té    )r	   ÚVALID_KEY_CHARSÚexistsr!   s     r   Ú_get_new_session_keyz SessionBase._get_new_session_keyÀ   s5   € ð	#Ý+¨BµÑ@Ô@ˆKØ—;’;˜{Ñ+Ô+ð #Ø"Ð"ð	#r   c              ƒ   ón   K  — 	 t          dt          ¦  «        }|                      |¦  «        ƒ d {V —†s|S Œ3)NTrŒ   )r	   r�   Úaexistsr!   s     r   Ú_aget_new_session_keyz!SessionBase._aget_new_session_keyÇ   sK   è è € ð	#Ý+¨BµÑ@Ô@ˆKØŸš kÑ2Ô2Ð2Ð2Ð2Ð2Ð2Ð2ð #Ø"Ð"ð	#r   c                 óP   — | j         €|                      ¦   «         | _         | j         S r&   )r   r�   r<   s    r   Ú_get_or_create_session_keyz&SessionBase._get_or_create_session_keyÍ   s(   € ØÔÐ$Ø $× 9Ò 9Ñ ;Ô ;ˆDÔØÔ Ð r   c              ƒ   ó`   K  — | j         €|                      ¦   «         ƒ d {V —†| _         | j         S r&   )r   r’   r<   s    r   Ú_aget_or_create_session_keyz'SessionBase._aget_or_create_session_keyÒ   s>   è è € ØÔÐ$Ø&*×&@Ò&@Ñ&BÔ&BÐ BÐ BÐ BÐ BÐ BÐ BˆDÔØÔ Ð r   c                 ó,   — |ot          |¦  «        dk    S )z”
        Key must be truthy and at least 8 characters long. 8 characters is an
        arbitrary lower bound for some minimal key security.
        é   )Úlenr)   s     r   Ú_validate_session_keyz!SessionBase._validate_session_key×   s   € ð
 Ð$•s˜3‘x”x 1’}Ð$r   c                 ó   — | j         S r&   )Ú_SessionBase__session_keyr<   s    r   Ú_get_session_keyzSessionBase._get_session_keyÞ   s   € ØÔ!Ð!r   c                 óP   — |                       |¦  «        r	|| _        dS d| _        dS )zV
        Validate session key on assignment. Invalid values will set to None.
        N)rš   rœ   ©r"   r3   s     r   Ú_set_session_keyzSessionBase._set_session_keyá   s6   € ð ×%Ò% eÑ,Ô,ð 	&Ø!&ˆDÔÐÐà!%ˆDÔÐÐr   Fc                 ó¢   — d| _         	 | j        S # t          $ r- | j        �|ri | _        n|                      ¦   «         | _        Y nw xY w| j        S )zž
        Lazily load session from storage (unless "no_load" is True, when only
        an empty dict is stored) and store it in the current instance.
        T)r   r†   r‰   r#   Úload©r"   Úno_loads     r   Ú_get_sessionzSessionBase._get_sessioní   sj   € ð
 ˆŒð	2ØÔ&Ð&øÝð 	2ð 	2ð 	2ØÔÐ'¨7Ð'Ø&(�Ô#Ð#à&*§i¢i¡k¤k�Ô#øøð		2øøøð
 Ô"Ð"s   ‰ �4AÁAc              ƒ   ó²   K  — d| _         	 | j        S # t          $ r3 | j        �|ri | _        n|                      ¦   «         ƒ d {V —†| _        Y nw xY w| j        S r0   )r   r†   r‰   r#   Úaloadr£   s     r   r6   zSessionBase._aget_sessionü   s~   è è € ØˆŒð	9ØÔ&Ð&øÝð 	9ð 	9ð 	9ØÔÐ'¨7Ð'Ø&(�Ô#Ð#à,0¯JªJ©L¬LÐ&8Ð&8Ð&8Ð&8Ð&8Ð&8�Ô#øøð		9øøøð
 Ô"Ð"s   ‹ ’:AÁAc                 ó   — t           j        S r&   )r   ÚSESSION_COOKIE_AGEr<   s    r   Úget_session_cookie_agez"SessionBase.get_session_cookie_age	  s   € ÝÔ*Ð*r   c                 ó¢  — 	 |d         }n## t           $ r t          j        ¦   «         }Y nw xY w	 |d         }n%# t           $ r |                      d¦  «        }Y nw xY w|s|                      ¦   «         S t          |t          t          f¦  «        s|S t          |t          ¦  «        rt          j        |¦  «        }||z
  }|j	        dz  |j
        z   S )zÕGet the number of seconds until the session expires.

        Optionally, this function accepts `modification` and `expiry` keyword
        arguments specifying the modification and expiry of the session.
        ÚmodificationÚexpiryÚ_session_expiryé€Q )ÚKeyErrorr   Únowr?   rª   Ú
isinstancer   ÚstrÚfromisoformatÚdaysÚseconds©r"   Úkwargsr¬   r­   Údeltas        r   Úget_expiry_agezSessionBase.get_expiry_age  sö   € ð	*Ø! .Ô1ˆLˆLøÝð 	*ð 	*ð 	*Ý#œ<™>œ>ˆLˆLˆLð	*øøøð
	1Ø˜HÔ%ˆFˆFøÝð 	1ð 	1ð 	1Ø—X’XÐ/Ñ0Ô0ˆFˆFˆFð	1øøøð ð 	1Ø×.Ò.Ñ0Ô0Ð0Ý˜&¥8­S /Ñ2Ô2ð 	ØˆMÝ�f�cÑ"Ô"ð 	4ÝÔ+¨FÑ3Ô3ˆFØ˜Ñ%ˆØŒz˜EÑ! E¤MÑ1Ð1ó   ‚ ‹+ª+¯8 ¸AÁAc              ‹   ó²  K  — 	 |d         }n## t           $ r t          j        ¦   «         }Y nw xY w	 |d         }n+# t           $ r |                      d¦  «        ƒ d {V —†}Y nw xY w|s|                      ¦   «         S t          |t          t          f¦  «        s|S t          |t          ¦  «        rt          j        |¦  «        }||z
  }|j	        dz  |j
        z   S )Nr¬   r­   r®   r¯   )r°   r   r±   rC   rª   r²   r   r³   r´   rµ   r¶   r·   s        r   Úaget_expiry_agezSessionBase.aget_expiry_age'  s  è è € ð	*Ø! .Ô1ˆLˆLøÝð 	*ð 	*ð 	*Ý#œ<™>œ>ˆLˆLˆLð	*øøøð	8Ø˜HÔ%ˆFˆFøÝð 	8ð 	8ð 	8ØŸ9š9Ð%6Ñ7Ô7Ð7Ð7Ð7Ð7Ð7Ð7ˆFˆFˆFð	8øøøð ð 	1Ø×.Ò.Ñ0Ô0Ð0Ý˜&¥8­S /Ñ2Ô2ð 	ØˆMÝ�f�cÑ"Ô"ð 	4ÝÔ+¨FÑ3Ô3ˆFØ˜Ñ%ˆØŒz˜EÑ! E¤MÑ1Ð1ó   „ �-¬-±: º%A"Á!A"c                 óŒ  — 	 |d         }n## t           $ r t          j        ¦   «         }Y nw xY w	 |d         }n%# t           $ r |                      d¦  «        }Y nw xY wt	          |t
          ¦  «        r|S t	          |t          ¦  «        rt          j        |¦  «        S |p|                      ¦   «         }|t          |¬¦  «        z   S )zÔGet session the expiry date (as a datetime object).

        Optionally, this function accepts `modification` and `expiry` keyword
        arguments specifying the modification and expiry of the session.
        r¬   r­   r®   ©r¶   )
r°   r   r±   r?   r²   r   r³   r´   rª   r   ©r"   r¸   r¬   r­   s       r   Úget_expiry_datezSessionBase.get_expiry_date:  sç   € ð	*Ø! .Ô1ˆLˆLøÝð 	*ð 	*ð 	*Ý#œ<™>œ>ˆLˆLˆLð	*øøøð	1Ø˜HÔ%ˆFˆFøÝð 	1ð 	1ð 	1Ø—X’XÐ/Ñ0Ô0ˆFˆFˆFð	1øøøõ �f�hÑ'Ô'ð 	2ØˆMÝ˜¥Ñ$Ô$ð 	2ÝÔ)¨&Ñ1Ô1Ð1ØÐ8˜4×6Ò6Ñ8Ô8ˆØ�i°Ð7Ñ7Ô7Ñ7Ð7r»   c              ‹   óœ  K  — 	 |d         }n## t           $ r t          j        ¦   «         }Y nw xY w	 |d         }n+# t           $ r |                      d¦  «        ƒ d {V —†}Y nw xY wt	          |t
          ¦  «        r|S t	          |t          ¦  «        rt          j        |¦  «        S |p|                      ¦   «         }|t          |¬¦  «        z   S )Nr¬   r­   r®   rÀ   )
r°   r   r±   rC   r²   r   r³   r´   rª   r   rÁ   s       r   Úaget_expiry_datezSessionBase.aget_expiry_dateQ  sý   è è € ð	*Ø! .Ô1ˆLˆLøÝð 	*ð 	*ð 	*Ý#œ<™>œ>ˆLˆLˆLð	*øøøð	8Ø˜HÔ%ˆFˆFøÝð 	8ð 	8ð 	8ØŸ9š9Ð%6Ñ7Ô7Ð7Ð7Ð7Ð7Ð7Ð7ˆFˆFˆFð	8øøøõ �f�hÑ'Ô'ð 	2ØˆMÝ˜¥Ñ$Ô$ð 	2ÝÔ)¨&Ñ1Ô1Ð1ØÐ8˜4×6Ò6Ñ8Ô8ˆØ�i°Ð7Ñ7Ô7Ñ7Ð7r¾   c                 óê   — |€	 | d= n# t           $ r Y nw xY wdS t          |t          ¦  «        rt          j        ¦   «         |z   }t          |t
          ¦  «        r|                     ¦   «         }|| d<   dS )a*  
        Set a custom expiration for the session. ``value`` can be an integer,
        a Python ``datetime`` or ``timedelta`` object or ``None``.

        If ``value`` is an integer, the session will expire after that many
        seconds of inactivity. If set to ``0`` then the session will expire on
        browser close.

        If ``value`` is a ``datetime`` or ``timedelta`` object, the session
        will expire at that specific future time.

        If ``value`` is ``None``, the session uses the global session expiry
        policy.
        Nr®   )r°   r²   r   r   r±   r   Ú	isoformatrŸ   s     r   Ú
set_expiryzSessionBase.set_expiryb  s“   € ð ˆ=ðØÐ*Ð+Ð+øÝð ð ð Ø�ðøøøàˆFÝ�e�YÑ'Ô'ð 	+Ý”L‘N”N UÑ*ˆEÝ�e�XÑ&Ô&ð 	&Ø—O’OÑ%Ô%ˆEØ"'ˆÐÑÐÐs   „ ˆ
”c              ƒ   óL  K  — |€/	 |                       d¦  «        ƒ d {V —† n# t          $ r Y nw xY wd S t          |t          ¦  «        rt	          j        ¦   «         |z   }t          |t          ¦  «        r|                     ¦   «         }|                      d|¦  «        ƒ d {V —† d S )Nr®   )	rK   r°   r²   r   r   r±   r   rÆ   r7   rŸ   s     r   Úaset_expiryzSessionBase.aset_expiry~  sÍ   è è € Øˆ=ðØ—i’iÐ 1Ñ2Ô2Ð2Ð2Ð2Ð2Ð2Ð2Ð2Ð2øÝð ð ð Ø�ðøøøàˆFÝ�e�YÑ'Ô'ð 	+Ý”L‘N”N UÑ*ˆEÝ�e�XÑ&Ô&ð 	&Ø—O’OÑ%Ô%ˆEØ�iŠiÐ)¨5Ñ1Ô1Ð1Ð1Ð1Ð1Ð1Ð1Ð1Ð1Ð1s   †" ¢
/®/c                 óT   — |                       d¦  «        x}€t          j        S |dk    S )a  
        Return ``True`` if the session is set to expire when the browser
        closes, and ``False`` if there's an expiry date. Use
        ``get_expiry_date()`` or ``get_expiry_age()`` to find the actual expiry
        date/age, if there is one.
        r®   Nr   )r?   r   ÚSESSION_EXPIRE_AT_BROWSER_CLOSE©r"   r­   s     r   Úget_expire_at_browser_closez'SessionBase.get_expire_at_browser_closeŒ  s/   € ð —h’hÐ0Ñ1Ô1Ð1ˆFÐ:ÝÔ;Ð;Ø˜Š{Ðr   c              ƒ   ód   K  — |                       d¦  «        ƒ d {V —†x}€t          j        S |dk    S )Nr®   r   )rC   r   rË   rÌ   s     r   Úaget_expire_at_browser_closez(SessionBase.aget_expire_at_browser_close—  sC   è è € Ø ŸIšIÐ&7Ñ8Ô8Ð8Ð8Ð8Ð8Ð8Ð8Ð8ˆFÐAÝÔ;Ð;Ø˜Š{Ðr   c                 ód   — |                       ¦   «          |                      ¦   «          d| _        dS )zc
        Remove the current session data from the database and regenerate the
        key.
        N)r‡   Údeleter   r<   s    r   ÚflushzSessionBase.flushœ  s,   € ð
 	�
Š
‰ŒˆØ�Š‰ŒˆØ ˆÔÐÐr   c              ƒ   ót   K  — |                       ¦   «          |                      ¦   «         ƒ d {V —† d | _        d S r&   )r‡   Úadeleter   r<   s    r   ÚaflushzSessionBase.aflush¥  sA   è è € Ø�
Š
‰ŒˆØ�lŠl‰nŒnÐÐÐÐÐÐÐØ ˆÔÐÐr   c                 óŠ   — | j         }| j        }|                      ¦   «          || _        |r|                      |¦  «         dS dS ©zU
        Create a new session key, while retaining the current session data.
        N)r(   r#   Úcreater†   rÑ   ©r"   Údatar*   s      r   Ú	cycle_keyzSessionBase.cycle_keyª  sR   € ð Œ}ˆØÔˆØ�Š‰ŒˆØ"ˆÔØð 	Ø�KŠK˜ÑÔÐÐÐð	ð 	r   c              ƒ   óÌ   K  — |                       ¦   «         ƒ d{V —†}| j        }|                      ¦   «         ƒ d{V —† || _        |r|                      |¦  «        ƒ d{V —† dS dS r×   )r6   r#   Úacreater†   rÔ   rÙ   s      r   Ú
acycle_keyzSessionBase.acycle_keyµ  s—   è è € ð ×'Ò'Ñ)Ô)Ð)Ð)Ð)Ð)Ð)Ð)ˆØÔˆØ�lŠl‰nŒnÐÐÐÐÐÐÐØ"ˆÔØð 	$Ø—,’,˜sÑ#Ô#Ð#Ð#Ð#Ð#Ð#Ð#Ð#Ð#Ð#ð	$ð 	$r   c                 ó    — t          d¦  «        ‚)zF
        Return True if the given session_key already exists.
        z9subclasses of SessionBase must provide an exists() method©ÚNotImplementedErrorr!   s     r   rŽ   zSessionBase.existsÂ  s   € õ "ØGñ
ô 
ð 	
r   c              ƒ   óL   K  —  t          | j        ¦  «        |¦  «        ƒ d {V —†S r&   )r   rŽ   r!   s     r   r‘   zSessionBase.aexistsÊ  ó2   è è € Ø/•] 4¤;Ñ/Ô/°Ñ<Ô<Ð<Ð<Ð<Ð<Ð<Ð<Ð<r   c                 ó    — t          d¦  «        ‚)zÅ
        Create a new session instance. Guaranteed to create a new object with
        a unique key and will have saved the result once (with empty data)
        before the method returns.
        z8subclasses of SessionBase must provide a create() methodrà   r<   s    r   rØ   zSessionBase.createÍ  s   € õ "ØFñ
ô 
ð 	
r   c              ƒ   óJ   K  —  t          | j        ¦  «        ¦   «         ƒ d {V —†S r&   )r   rØ   r<   s    r   rÝ   zSessionBase.acreate×  s0   è è € Ø/•] 4¤;Ñ/Ô/Ñ1Ô1Ð1Ð1Ð1Ð1Ð1Ð1Ð1r   c                 ó    — t          d¦  «        ‚)zä
        Save the session data. If 'must_create' is True, create a new session
        object (or raise CreateError). Otherwise, only update an existing
        object and don't create one (raise UpdateError if needed).
        z6subclasses of SessionBase must provide a save() methodrà   ©r"   Úmust_creates     r   ÚsavezSessionBase.saveÚ  s   € õ "ØDñ
ô 
ð 	
r   c              ƒ   óL   K  —  t          | j        ¦  «        |¦  «        ƒ d {V —†S r&   )r   ré   rç   s     r   ÚasavezSessionBase.asaveä  s2   è è € Ø-•] 4¤9Ñ-Ô-¨kÑ:Ô:Ð:Ð:Ð:Ð:Ð:Ð:Ð:r   c                 ó    — t          d¦  «        ‚)zx
        Delete the session data under this key. If the key is None, use the
        current session key value.
        z8subclasses of SessionBase must provide a delete() methodrà   r!   s     r   rÑ   zSessionBase.deleteç  s   € õ
 "ØFñ
ô 
ð 	
r   c              ƒ   óL   K  —  t          | j        ¦  «        |¦  «        ƒ d {V —†S r&   )r   rÑ   r!   s     r   rÔ   zSessionBase.adeleteð  rã   r   c                 ó    — t          d¦  «        ‚)z@
        Load the session data and return a dictionary.
        z6subclasses of SessionBase must provide a load() methodrà   r<   s    r   r¢   zSessionBase.loadó  s   € õ "ØDñ
ô 
ð 	
r   c              ƒ   óJ   K  —  t          | j        ¦  «        ¦   «         ƒ d {V —†S r&   )r   r¢   r<   s    r   r§   zSessionBase.aloadû  s0   è è € Ø-•] 4¤9Ñ-Ô-Ñ/Ô/Ð/Ð/Ð/Ð/Ð/Ð/Ð/r   c                 ó    — t          d¦  «        ‚)a  
        Remove expired sessions from the session store.

        If this operation isn't possible on a given backend, it should raise
        NotImplementedError. If it isn't necessary, because the backend has
        a built-in expiration mechanism, it should be a no-op.
        z.This backend does not support clear_expired().rà   ©Úclss    r   Úclear_expiredzSessionBase.clear_expiredþ  s   € õ "Ð"RÑSÔSÐSr   c              ƒ   óJ   K  —  t          | j        ¦  «        ¦   «         ƒ d {V —†S r&   )r   ró   rñ   s    r   Úaclear_expiredzSessionBase.aclear_expired	  s1   è è € à5•] 3Ô#4Ñ5Ô5Ñ7Ô7Ð7Ð7Ð7Ð7Ð7Ð7Ð7r   r&   )F)Pr   r   r   r   rS   rR   ÚobjectrF   r$   r+   r.   r4   r7   r9   Úpropertyr=   r?   rC   rG   rK   rM   rP   rT   rV   rX   rZ   r\   r^   rd   rn   rp   rt   rv   rx   rz   r|   r~   r€   r‚   r„   r‡   rŠ   r�   r’   r”   r–   rš   r�   r    r#   r   r¥   r6   r(   rª   rº   r½   rÂ   rÄ   rÇ   rÉ   rÍ   rÏ   rÒ   rÕ   rÛ   rÞ   rŽ   r‘   rØ   rÝ   ré   rë   rÑ   rÔ   r¢   r§   Úclassmethodró   rõ   r   r   r   r   r   #   sÕ  € € € € € ðð ð $ÐØ Ðà�&‘(”(€KðEð Eð Eð Eð$ð $ð $ð"ð "ð "ðð ð ðð ð ðð ð ð ðHð Hñ „XðHð/ð /ð /ð /ð>ð >ð >ð >ð  +ð -ð -ð -ð -ð
 '2ð <ð <ð <ð <ð
ð ð ðð ð ð=ð =ð =ðGð Gð GðIð Ið IðRð Rð Rð(ð (ð (ð@ð @ð @ð
ð 
ð 
ðð ð ðð ð ðð ð ð$ð $ð $ð3ð 3ð 3ð$ð $ð $ð3ð 3ð 3ð&ð &ð &ð5ð 5ð 5ð%ð %ð %ð4ð 4ð 4ðð ð ðð ð ð#ð #ð #ð#ð #ð #ð!ð !ð !ð
!ð !ð !ð
%ð %ð %ð"ð "ð "ð&ð &ð &ð �(Ð+Ñ,Ô,€KØ�8Ð,Ð.>Ñ?Ô?€Lð#ð #ð #ð #ð	#ð 	#ð 	#ð 	#ð ˆx˜Ñ%Ô%€Hð+ð +ð +ð2ð 2ð 2ð62ð 2ð 2ð&8ð 8ð 8ð.8ð 8ð 8ð"(ð (ð (ð82ð 2ð 2ð	ð 	ð 	ðð ð ð
!ð !ð !ð!ð !ð !ð
	ð 	ð 	ð	$ð 	$ð 	$ð
ð 
ð 
ð=ð =ð =ð
ð 
ð 
ð2ð 2ð 2ð
ð 
ð 
ð 
ð;ð ;ð ;ð ;ð
ð 
ð 
ð 
ð=ð =ð =ð =ð
ð 
ð 
ð0ð 0ð 0ð ðTð Tñ „[ðTð ð8ð 8ñ „[ð8ð 8ð 8r   r   )rh   Ústringr   r   Úasgiref.syncr   Údjango.confr   Údjango.corer   Údjango.utilsr   Údjango.utils.cryptor	   Údjango.utils.module_loadingr
   Úascii_lowercaseÚdigitsr�   rk   r   r   r   r   r   r   ú<module>r     s<  ðØ €€€Ø €€€Ø (Ð (Ð (Ð (Ð (Ð (Ð (Ð (à &Ð &Ð &Ð &Ð &Ð &à  Ð  Ð  Ð  Ð  Ð  Ø Ð Ð Ð Ð Ð Ø !Ð !Ð !Ð !Ð !Ð !Ø 1Ð 1Ð 1Ð 1Ð 1Ð 1Ø 5Ð 5Ð 5Ð 5Ð 5Ð 5ð Ô(¨6¬=Ñ8€ð	ð 	ð 	ð 	ð 	�)ñ 	ô 	ð 	ð	ð 	ð 	ð 	ð 	�)ñ 	ô 	ð 	ðh8ð h8ð h8ð h8ð h8ñ h8ô h8ð h8ð h8ð h8r   