Ë
    £2Úi%  ã                  ó^   — d dl mZ  G d„ d«      Z G d„ d«      Zd„ Z G d„ d«      Zd	d
lmZ y)é    )Úannotationsc                  ó*   — e Zd ZdZdd„Zd„ Zd„ Zd„ Zy)ÚIfRangez½Very simple object that represents the `If-Range` header in parsed
    form.  It will either have neither a etag or date or one of either but
    never both.

    .. versionadded:: 0.7
    Nc                ó    — || _         || _        y ©N)ÚetagÚdate)Úselfr   r	   s      úT/var/www/html/acx/venv/lib/python3.12/site-packages/werkzeug/datastructures/range.pyÚ__init__zIfRange.__init__   s   € ð ˆŒ	àˆ�	ó    c                ó°   — | j                   �t        j                  | j                   «      S | j                  �t        j                  | j                  «      S y)ú-Converts the object back into an HTTP header.Ú )r	   ÚhttpÚ	http_dater   Ú
quote_etag©r
   s    r   Ú	to_headerzIfRange.to_header   s?   € à�9‰9Ð Ü—>‘> $§)¡)Ó,Ð,Ø�9‰9Ð Ü—?‘? 4§9¡9Ó-Ð-Ør   c                ó"   — | j                  «       S r   ©r   r   s    r   Ú__str__zIfRange.__str__   ó   € Ø�~‰~ÓÐr   c                óL   — dt        | «      j                  › dt        | «      ›d�S ©Nú<ú ú>©ÚtypeÚ__name__Ústrr   s    r   Ú__repr__zIfRange.__repr__   ó&   € Ø”4˜“:×&Ñ&Ð' q¬¨T«¨°QÐ7Ð7r   ©NN)r!   Ú
__module__Ú__qualname__Ú__doc__r   r   r   r#   © r   r   r   r      s   „ ñóòò ó8r   r   c                  ó:   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
y	)
ÚRangeaX  Represents a ``Range`` header. All methods only support only
    bytes as the unit. Stores a list of ranges if given, but the methods
    only work if only one range is provided.

    :raise ValueError: If the ranges provided are invalid.

    .. versionchanged:: 0.15
        The ranges passed in are validated.

    .. versionadded:: 0.7
    c                ór   — || _         || _        |D ]$  \  }}|�|€Œ|dk  s||k\  sŒt        ||f› d�«      ‚ y )Nr   z is not a valid range.)ÚunitsÚrangesÚ
ValueError)r
   r-   r.   ÚstartÚends        r   r   zRange.__init__/   sS   € àˆŒ
ð ˆŒà ò 	J‰JˆE�3Øˆ} ¡°e¸a²iÀ5ÈCÃ<Ü  U¨C L >Ð1GÐ!HÓIÐIñ	Jr   c                óâ   — | j                   dk7  s|�t        | j                  «      dk7  ry| j                  d   \  }}|€|}|dk  r||z  }t        j                  |||«      r|t        ||«      fS y)z·If the range is for bytes, the length is not None and there is
        exactly one range and it is satisfiable it returns a ``(start, stop)``
        tuple, otherwise `None`.
        ÚbytesNé   r   )r-   Úlenr.   r   Úis_byte_range_validÚmin)r
   Úlengthr0   r1   s       r   Úrange_for_lengthzRange.range_for_length:   sy   € ð
 �:‰:˜Ò  F N´c¸$¿+¹+Ó6FÈ!Ò6KØØ—[‘[ ‘^‰
ˆˆsØˆ;ØˆCØ�qŠyØ˜‘�Ü×#Ñ# E¨3°Ô7Øœ#˜c 6Ó*Ð*Ð*Ør   c                óf   — | j                  |«      }|�t        | j                  |d   |d   |«      S y)z�Creates a :class:`~werkzeug.datastructures.ContentRange` object
        from the current range and given content length.
        Nr   r4   )r9   ÚContentRanger-   )r
   r8   Úrngs      r   Úmake_content_rangezRange.make_content_rangeJ   s9   € ð ×#Ñ# FÓ+ˆØˆ?Ü §
¡
¨C°©F°C¸±F¸FÓCÐCØr   c                óî   — g }| j                   D ]E  \  }}|€%|j                  |dk\  r|› d�n
t        |«      «       Œ-|j                  |› d|dz
  › �«       ŒG | j                  › ddj	                  |«      › �S )r   r   ú-r4   ú=ú,)r.   Úappendr"   r-   Újoin)r
   r.   Úbeginr1   s       r   r   zRange.to_headerS   s}   € àˆØŸ+™+ò 	4‰JˆE�3Øˆ{Ø—‘¨U°aªZ   q™k¼SÀ»ZÕHà—‘   q¨¨q©¨	Ð2Õ3ð		4ð
 —*‘*�˜Q˜sŸx™x¨Ó/Ð0Ð1Ð1r   c                ój   — | j                  |«      }|� | j                  › d|d   › d|d   dz
  › d|› �S y)z\Converts the object into `Content-Range` HTTP header,
        based on given length
        Nr   r   r?   r4   ú/)r9   r-   )r
   r8   Úranges      r   Úto_content_range_headerzRange.to_content_range_header]   sJ   € ð ×%Ñ% fÓ-ˆØÐØ—j‘j�\  5¨¡8 *¨A¨e°A©h¸©l¨^¸1¸V¸HÐEÐEØr   c                ó"   — | j                  «       S r   r   r   s    r   r   zRange.__str__f   r   r   c                óL   — dt        | «      j                  › dt        | «      ›d�S r   r   r   s    r   r#   zRange.__repr__i   r$   r   N)r!   r&   r'   r(   r   r9   r=   r   rH   r   r#   r)   r   r   r+   r+   "   s+   „ ñ
ò	Jòò ò2òò ó8r   r+   c                ó0   ‡ — ˆ fd„}ˆ fd„}t        ||«      S )Nc                ó   •— t        | ‰«      S r   )Úgetattr)r
   Únames    €r   Úfgetz _callback_property.<locals>.fgetn   s   ø€ Ü�t˜TÓ"Ð"r   c                ó\   •— t        | ‰|«       | j                  �| j                  | «       y y r   )ÚsetattrÚ	on_update)r
   ÚvaluerN   s     €r   Úfsetz _callback_property.<locals>.fsetq   s*   ø€ Ü��d˜EÔ"Ø�>‰>Ð%Ø�N‰N˜4Õ ð &r   )Úproperty)rN   rO   rT   s   `  r   Ú_callback_propertyrV   m   s   ø€ ô#ô!ô
 �D˜$ÓÐr   c                  ó~   — e Zd ZdZdd„Z ed«      Z ed«      Z ed«      Z ed«      Z	dd„Z
d	„ Zd
„ Zd„ Zd„ Zd„ Zy)r;   zDRepresents the content range header.

    .. versionadded:: 0.7
    Nc                óv   — t        j                  |||«      sJ d«       ‚|| _        | j                  ||||«       y )NúBad range provided)r   r6   rR   Úset)r
   r-   r0   Ústopr8   rR   s         r   r   zContentRange.__init__   s9   € Ü×'Ñ'¨¨t°VÔ<ÐRÐ>RÓRÐ<Ø"ˆŒØ�‰�˜˜f eÕ,r   Ú_unitsÚ_startÚ_stopÚ_lengthc                ó´   — t        j                  |||«      sJ d«       ‚|| _        || _        || _        || _        | j                  �| j                  | «       yy)z#Simple method to update the ranges.rY   N)r   r6   r\   r]   r^   r_   rR   )r
   r0   r[   r8   r-   s        r   rZ   zContentRange.setŽ   sW   € ä×'Ñ'¨¨t°VÔ<ÐRÐ>RÓRÐ<ØˆŒØˆŒØˆŒ
ØˆŒØ�>‰>Ð%Ø�N‰N˜4Õ ð &r   c                ó,   — | j                  ddd¬«       y)zcSets the units to `None` which indicates that the header should
        no longer be used.
        N©r-   )rZ   r   s    r   ÚunsetzContentRange.unset˜   s   € ð 	�‰��t 4ˆÕ(r   c                óè   — | j                   €y| j                  €d}n| j                  }| j                  €| j                   › d|› �S | j                   › d| j                  › d| j                  dz
  › d|› �S )Nr   Ú*z */r   r?   r4   rF   )r-   r8   r0   r[   )r
   r8   s     r   r   zContentRange.to_headerž   ss   € Ø�:‰:ÐØØ�;‰;ÐØ‰Fà—[‘[ˆFØ�:‰:ÐØ—j‘j�\  V HÐ-Ð-Ø—*‘*�˜Q˜tŸz™z˜l¨!¨D¯I©I¸©M¨?¸!¸F¸8ÐDÐDr   c                ó   — | j                   d uS r   rb   r   s    r   Ú__bool__zContentRange.__bool__©   s   € Ø�z‰z Ð%Ð%r   c                ó"   — | j                  «       S r   r   r   s    r   r   zContentRange.__str__¬   r   r   c                óL   — dt        | «      j                  › dt        | «      ›d�S r   r   r   s    r   r#   zContentRange.__repr__¯   r$   r   r%   )Nr3   )r!   r&   r'   r(   r   rV   r-   r0   r[   r8   rZ   rc   r   rg   r   r#   r)   r   r   r;   r;   y   sW   „ ñó
-ñ ˜xÓ(€Eá˜xÓ(€Eñ ˜gÓ&€Dá 	Ó*€Fó!ò)ò	Eò&ò ó8r   r;   é   )r   N)Ú
__future__r   r   r+   rV   r;   r   r   r)   r   r   ú<module>rl      s4   ðÝ "÷8ñ 8÷<H8ñ H8òV	 ÷78ñ 78öv r   