§
    WŠtj]Ÿ  ã                  ó„  — d Z ddlmZ ddlZddlZddlZddlmZmZm	Z	m
Z
mZmZ ddlmZ ddlmZmZ eeef         Z ede¬	¦  «        Zeeegef         Zd(d„Zd)d„Zd)d„Z G d„ de¦  «        Z G d„ dej        ¬¦  «        Z G d„ de¦  «        Z ej        d¦  «        Z d*d„Z!d+d„Z"d,d!„Z#d-d%„Z$ G d&„ d'e¦  «        Z%dS ).zŠ
.. testsetup::

    from packaging.specifiers import Specifier, SpecifierSet, InvalidSpecifier
    from packaging.version import Version
é    )ÚannotationsN)ÚCallableÚFinalÚIterableÚIteratorÚTypeVarÚUnioné   )Úcanonicalize_version)ÚInvalidVersionÚVersionÚUnparsedVersionVar)ÚboundÚversionÚUnparsedVersionÚreturnúVersion | Nonec                ót   — t          | t          ¦  «        s"	 t          | ¦  «        } n# t          $ r Y d S w xY w| S ©N)Ú
isinstancer   r   ©r   s    úe/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/setuptools/_vendor/packaging/specifiers.pyÚ_coerce_versionr      sO   € Ý�g�wÑ'Ô'ð ð	Ý˜gÑ&Ô&ˆGˆGøÝð 	ð 	ð 	Ø�4�4ð	øøøà€Ns   —' §
5´5r   c                ó.   — |                       d ¬¦  «        S )N)Úlocal©Ú__replace__r   s    r   Ú_public_versionr   #   s   € Ø×Ò TÐÑ*Ô*Ð*ó    c                ó4   — |                       d d d d ¬¦  «        S )N)ÚpreÚpostÚdevr   r   r   s    r   Ú_base_versionr$   '   s   € Ø×Ò 4¨d¸ÀDÐÑIÔIÐIr   c                  ó   — e Zd ZdZdS )ÚInvalidSpecifiera  
    Raised when attempting to create a :class:`Specifier` with a specifier
    string that is invalid.

    >>> Specifier("lolwat")
    Traceback (most recent call last):
        ...
    packaging.specifiers.InvalidSpecifier: Invalid specifier: 'lolwat'
    N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__© r   r   r&   r&   +   s   € € € € € ðð ð ð r   r&   c                  ó2  — e Zd ZdZdZedd„¦   «         Zej        dd„¦   «         Z	ej        dd„¦   «         Z
ej        dd„¦   «         Zeej        dd„¦   «         ¦   «         Zej        dd„¦   «         Zej        dd d„¦   «         Zej        	 dd!d„¦   «         ZdS )"ÚBaseSpecifierr+   )Ú_strr   Ústrc                ó    — t          | ¦  «        S )z Internal property for match_args©r/   ©Úselfs    r   r.   zBaseSpecifier._str;   s   € õ �4‰yŒyÐr   c                ó   — dS )zŽ
        Returns the str representation of this Specifier-like object. This
        should be representative of the Specifier itself.
        Nr+   r2   s    r   Ú__str__zBaseSpecifier.__str__@   ó   € € € r   Úintc                ó   — dS )zF
        Returns a hash value for this Specifier-like object.
        Nr+   r2   s    r   Ú__hash__zBaseSpecifier.__hash__G   r6   r   ÚotherÚobjectÚboolc                ó   — dS )z«
        Returns a boolean representing whether or not the two Specifier-like
        objects are equal.

        :param other: The other object to check against.
        Nr+   ©r3   r:   s     r   Ú__eq__zBaseSpecifier.__eq__M   r6   r   úbool | Nonec                ó   — dS )zîWhether or not pre-releases as a whole are allowed.

        This can be set to either ``True`` or ``False`` to explicitly enable or disable
        prereleases or it can be set to ``None`` (the default) to use default semantics.
        Nr+   r2   s    r   ÚprereleaseszBaseSpecifier.prereleasesV   r6   r   ÚvalueÚNonec                ó   — dS )zQSetter for :attr:`prereleases`.

        :param value: The value to set.
        Nr+   ©r3   rC   s     r   rB   zBaseSpecifier.prereleases_   r6   r   NÚitemrB   c                ó   — dS )zR
        Determines if the given item is contained within this specifier.
        Nr+   ©r3   rG   rB   s      r   ÚcontainszBaseSpecifier.containsf   r6   r   ÚiterableúIterable[UnparsedVersionVar]úIterator[UnparsedVersionVar]c                ó   — dS )z•
        Takes an iterable of items and filters them so that only items which
        are contained within this specifier are allowed in it.
        Nr+   )r3   rK   rB   s      r   ÚfilterzBaseSpecifier.filterl   r6   r   ©r   r/   ©r   r7   ©r:   r;   r   r<   ©r   r@   )rC   r<   r   rD   r   )rG   r/   rB   r@   r   r<   ©rK   rL   rB   r@   r   rM   )r'   r(   r)   Ú	__slots__Ú__match_args__Úpropertyr.   ÚabcÚabstractmethodr5   r9   r?   rB   ÚsetterrJ   rO   r+   r   r   r-   r-   7   sO  € € € € € Ø€IØ€Nàðð ð ñ „Xðð 	Ôðð ð ñ Ôðð 	Ôðð ð ñ Ôðð
 	Ôðð ð ñ Ôðð ØÔðð ð ñ Ôñ „Xðð Ôðð ð ñ Ôðð 	Ôðð ð ð ñ Ôðð
 	ÔàQUðð ð ð ñ Ôðð ð r   r-   )Ú	metaclassc            	      ó°  — e Zd ZU dZdZdZdZ ej        dez   ez   dz   ej	        ej
        z  ¦  «        Zdddd	d
ddddœZded<   dEdFd„ZdGd„ZdHd„ZedId„¦   «         Zej        dJd!„¦   «         ZedKd"„¦   «         ZedKd#„¦   «         ZdKd$„ZdKd%„ZedLd'„¦   «         ZdMd)„ZdNd-„ZdOd0„ZdPd2„ZdPd3„ZdPd4„ZdPd5„ZdPd6„Z dQd8„Z!dQd9„Z"dRd;„Z#dSd>„Z$dTdUd@„Z%	 dTdVdD„Z&dS )WÚ	Specifiera?  This class abstracts handling of version specifiers.

    .. tip::

        It is generally not required to instantiate this manually. You should instead
        prefer to work with :class:`SpecifierSet` instead, which can parse
        comma-separated version specifiers (which is what package metadata contains).
    )Ú_prereleasesÚ_specÚ_spec_versionz8
        (?P<operator>(~=|==|!=|<=|>=|<|>|===))
        aÈ  
        (?P<version>
            (?:
                # The identity operators allow for an escape hatch that will
                # do an exact string match of the version you wish to install.
                # This will not be parsed by PEP 440 and we cannot determine
                # any semantic meaning from it. This operator is discouraged
                # but included entirely as an escape hatch.
                (?<====)  # Only match for the identity operator
                \s*
                [^\s;)]*  # The arbitrary version can be just about anything,
                          # we match everything except for whitespace, a
                          # semi-colon for marker support, and a closing paren
                          # since versions can be enclosed in them.
            )
            |
            (?:
                # The (non)equality operators allow for wild card and local
                # versions to be specified so we have to define these two
                # operators separately to enable that.
                (?<===|!=)            # Only match for equals and not equals

                \s*
                v?
                (?:[0-9]+!)?          # epoch
                [0-9]+(?:\.[0-9]+)*   # release

                # You cannot use a wild card and a pre-release, post-release, a dev or
                # local version together so group them with a | and make them optional.
                (?:
                    \.\*  # Wild card syntax of .*
                    |
                    (?:                                  # pre release
                        [-_\.]?
                        (alpha|beta|preview|pre|a|b|c|rc)
                        [-_\.]?
                        [0-9]*
                    )?
                    (?:                                  # post release
                        (?:-[0-9]+)|(?:[-_\.]?(post|rev|r)[-_\.]?[0-9]*)
                    )?
                    (?:[-_\.]?dev[-_\.]?[0-9]*)?         # dev release
                    (?:\+[a-z0-9]+(?:[-_\.][a-z0-9]+)*)? # local
                )?
            )
            |
            (?:
                # The compatible operator requires at least two digits in the
                # release segment.
                (?<=~=)               # Only match for the compatible operator

                \s*
                v?
                (?:[0-9]+!)?          # epoch
                [0-9]+(?:\.[0-9]+)+   # release  (We have a + instead of a *)
                (?:                   # pre release
                    [-_\.]?
                    (alpha|beta|preview|pre|a|b|c|rc)
                    [-_\.]?
                    [0-9]*
                )?
                (?:                                   # post release
                    (?:-[0-9]+)|(?:[-_\.]?(post|rev|r)[-_\.]?[0-9]*)
                )?
                (?:[-_\.]?dev[-_\.]?[0-9]*)?          # dev release
            )
            |
            (?:
                # All other operators only allow a sub set of what the
                # (non)equality operators do. Specifically they do not allow
                # local versions to be specified nor do they allow the prefix
                # matching wild cards.
                (?<!==|!=|~=)         # We have special cases for these
                                      # operators so we want to make sure they
                                      # don't match here.

                \s*
                v?
                (?:[0-9]+!)?          # epoch
                [0-9]+(?:\.[0-9]+)*   # release
                (?:                   # pre release
                    [-_\.]?
                    (alpha|beta|preview|pre|a|b|c|rc)
                    [-_\.]?
                    [0-9]*
                )?
                (?:                                   # post release
                    (?:-[0-9]+)|(?:[-_\.]?(post|rev|r)[-_\.]?[0-9]*)
                )?
                (?:[-_\.]?dev[-_\.]?[0-9]*)?          # dev release
            )
        )
        z\s*Ú
compatibleÚequalÚ	not_equalÚless_than_equalÚgreater_than_equalÚ	less_thanÚgreater_thanÚ	arbitrary)ú~=ú==ú!=z<=ú>=ú<ú>ú===r   Ú
_operatorsÚ NÚspecr/   rB   r@   r   rD   c                ó$  — | j                              |¦  «        }|st          d|›�¦  «        ‚|                     d¦  «                             ¦   «         |                     d¦  «                             ¦   «         f| _        || _        d| _        dS )að  Initialize a Specifier instance.

        :param spec:
            The string representation of a specifier which will be parsed and
            normalized before use.
        :param prereleases:
            This tells the specifier if it should accept prerelease versions if
            applicable or not. The default of ``None`` will autodetect it from the
            given specifiers.
        :raises InvalidSpecifier:
            If the given specifier is invalid (i.e. bad syntax).
        zInvalid specifier: Úoperatorr   N)Ú_regexÚ	fullmatchr&   ÚgroupÚstripr_   r^   r`   )r3   rr   rB   Úmatchs       r   Ú__init__zSpecifier.__init__ó   s”   € ð ”×%Ò% dÑ+Ô+ˆØð 	CÝ"Ð#A¸Ð#AÐ#AÑBÔBÐBð �KŠK˜
Ñ#Ô#×)Ò)Ñ+Ô+Ø�KŠK˜	Ñ"Ô"×(Ò(Ñ*Ô*ð'
ˆŒ
ð (ˆÔð :>ˆÔÐÐr   r   r   c                óˆ   — | j         �| j         d         |k    r| j         d         S t          |¦  «        }|€dS ||f| _         |S )zDOne element cache, as only one spec Version is needed per Specifier.Nr   r
   )r`   r   )r3   r   Úversion_specifiers      r   Ú_get_spec_versionzSpecifier._get_spec_version  sX   € àÔÐ)¨dÔ.@ÀÔ.CÀwÒ.NÐ.NØÔ% aÔ(Ð(å+¨GÑ4Ô4ÐØÐ$Ø�4à%Ð'8Ð9ˆÔØ Ð r   r   c                ó8   — |                       |¦  «        }|€J ‚|S )zÕGet spec version, asserting it's valid (not for === operator).

        This method should only be called for operators where version
        strings are guaranteed to be valid PEP 440 versions (not ===).
        )r}   )r3   r   Úspec_versions      r   Ú_require_spec_versionzSpecifier._require_spec_version  s)   € ð ×-Ò-¨gÑ6Ô6ˆØÐ'Ð'Ð'ØÐr   c                óÀ   — | j         �| j         S | j        \  }}|dk    r?|dk    r|                     d¦  «        rdS |                      |¦  «        }|€d S |j        rdS dS )Nrk   rj   ú.*FT)r^   r_   Úendswithr}   Úis_prerelease)r3   rt   Úversion_strr   s       r   rB   zSpecifier.prereleases%  sŠ   € ð ÔÐ(ØÔ$Ð$ð !%¤
Ñˆ�+Ø�tÒÐð ˜4ÒÐ K×$8Ò$8¸Ñ$>Ô$>ÐØ�uð ×,Ò,¨[Ñ9Ô9ˆGØˆØ�tð Ô$ð Ø�tàˆur   rC   c                ó   — || _         d S r   ©r^   rF   s     r   rB   zSpecifier.prereleasesB  ó   € à!ˆÔÐÐr   c                ó   — | j         d         S )z`The operator of this specifier.

        >>> Specifier("==1.2.3").operator
        '=='
        r   ©r_   r2   s    r   rt   zSpecifier.operatorF  ó   € ð Œz˜!Œ}Ðr   c                ó   — | j         d         S )zaThe version of this specifier.

        >>> Specifier("==1.2.3").version
        '1.2.3'
        r
   rŠ   r2   s    r   r   zSpecifier.versionO  r‹   r   c                ól   — | j         �
d| j        ›�nd}d| j        j        › dt	          | ¦  «        ›|› d�S )aT  A representation of the Specifier that shows all internal state.

        >>> Specifier('>=1.0.0')
        <Specifier('>=1.0.0')>
        >>> Specifier('>=1.0.0', prereleases=False)
        <Specifier('>=1.0.0', prereleases=False)>
        >>> Specifier('>=1.0.0', prereleases=True)
        <Specifier('>=1.0.0', prereleases=True)>
        Nú, prereleases=rq   rm   ú(ú)>)r^   rB   Ú	__class__r'   r/   ©r3   r!   s     r   Ú__repr__zSpecifier.__repr__X  sT   € ð Ô Ð,ð 2˜TÔ-Ð1Ð1Ð1àð 	ð B�4”>Ô*ÐAÐA­S°©Y¬YÐA¸#ÐAÐAÐAÐAr   c                ó    —  dj         | j        Ž S )zÐA string representation of the Specifier that can be round-tripped.

        >>> str(Specifier('>=1.0.0'))
        '>=1.0.0'
        >>> str(Specifier('>=1.0.0', prereleases=False))
        '>=1.0.0'
        z{}{})Úformatr_   r2   s    r   r5   zSpecifier.__str__j  s   € ð ˆvŒ}˜dœjÐ)Ð)r   útuple[str, str]c                ó°   — | j         \  }}|dk    s|                     d¦  «        r||fS |                      |¦  «        }t          ||dk    ¬¦  «        }||fS )Nro   r‚   ri   ©Ústrip_trailing_zero)r_   rƒ   r€   r   )r3   rt   r   r   Úcanonical_versions        r   Ú_canonical_speczSpecifier._canonical_spect  sw   € à œJÑˆ�'Ø�uÒÐ × 0Ò 0°Ñ 6Ô 6ÐØ˜WÐ$Ð$à×1Ò1°'Ñ:Ô:ˆå0Ø¨x¸4Ò/?ð
ñ 
ô 
Ðð Ð*Ð*Ð*r   r7   c                ó*   — t          | j        ¦  «        S r   )Úhashr›   r2   s    r   r9   zSpecifier.__hash__‚  s   € Ý�DÔ(Ñ)Ô)Ð)r   r:   r;   r<   c                óú   — t          |t          ¦  «        r;	 |                      t          |¦  «        ¦  «        }n3# t          $ r
 t          cY S w xY wt          || j        ¦  «        st          S | j        |j        k    S )a>  Whether or not the two Specifier-like objects are equal.

        :param other: The other object to check against.

        The value of :attr:`prereleases` is ignored.

        >>> Specifier("==1.2.3") == Specifier("== 1.2.3.0")
        True
        >>> (Specifier("==1.2.3", prereleases=False) ==
        ...  Specifier("==1.2.3", prereleases=True))
        True
        >>> Specifier("==1.2.3") == "==1.2.3"
        True
        >>> Specifier("==1.2.3") == Specifier("==1.2.4")
        False
        >>> Specifier("==1.2.3") == Specifier("~=1.2.3")
        False
        )r   r/   r‘   r&   ÚNotImplementedr›   r>   s     r   r?   zSpecifier.__eq__…  s†   € õ& �e�SÑ!Ô!ð 	"ð&ØŸš¥s¨5¡z¤zÑ2Ô2��øÝ#ð &ð &ð &Ý%Ð%Ð%Ð%ð&øøøå˜E 4¤>Ñ2Ô2ð 	"Ý!Ð!àÔ# uÔ'<Ò<Ð<s   —": ºAÁAÚopÚCallableOperatorc                óB   — t          | d| j        |         › �¦  «        }|S )NÚ	_compare_)Úgetattrrp   )r3   r    Úoperator_callables      r   Ú_get_operatorzSpecifier._get_operator¢  s/   € Ý.5ØÐ3˜dœo¨bÔ1Ð3Ð3ñ/
ô /
Ðð !Ð r   Úprospectivec           
     ó  — t          t          t          j        t          t          |¦  «        ¦  «        ¦  «        d d…         ¦  «        }|dz  } |                      d¦  «        ||¦  «        o |                      d¦  «        ||¦  «        S )Néÿÿÿÿr‚   rl   rj   )Ú_version_joinÚlistÚ	itertoolsÚ	takewhileÚ_is_not_suffixÚ_version_splitr¦   )r3   r§   rr   Úprefixs       r   Ú_compare_compatiblezSpecifier._compare_compatible¨  s“   € õ Ý•Ô$¥^µ^ÀDÑ5IÔ5IÑJÔJÑKÔKÈCÈRÈCÔPñ
ô 
ˆð
 	�$‰ˆà'ˆt×!Ò! $Ñ'Ô'¨°TÑ:Ô:ð 
Ð?W¸t×?QÒ?QÐRVÑ?WÔ?WØ˜ñ@
ô @
ð 	
r   c                ó˜  — |                      d¦  «        r…t          t          |¦  «        d¬¦  «        }t          |d d…         d¬¦  «        }t          |¦  «        }t          |¦  «        }t	          ||¦  «        \  }}|d t          |¦  «        …         }	|	|k    S |                      |¦  «        }
|
j        st          |¦  «        }||
k    S )Nr‚   Fr˜   éþÿÿÿ)rƒ   r   r   r¯   Ú_pad_versionÚlenr€   r   )r3   r§   rr   Únormalized_prospectiveÚnormalized_specÚ
split_specÚsplit_prospectiveÚpadded_prospectiveÚ_Úshortened_prospectiver   s              r   Ú_compare_equalzSpecifier._compare_equal¼  së   € à�=Š=˜ÑÔð $	/å%9Ý Ñ,Ô,À%ð&ñ &ô &Ð"õ 3°4¸¸¸´9ÐRWÐXÑXÔXˆOõ (¨Ñ8Ô8ˆJõ
 !/Ð/EÑ FÔ FÐõ %1Ð1BÀJÑ$OÔ$OÑ!Ð ð
 %7Ð7H½¸Z¹¼Ð7HÔ$IÐ!à(¨JÒ6Ð6ð  ×5Ò5°dÑ;Ô;ˆLð
  Ô%ð ;Ý-¨kÑ:Ô:�à ,Ò.Ð.r   c                ó0   — |                       ||¦  «         S r   )r½   ©r3   r§   rr   s      r   Ú_compare_not_equalzSpecifier._compare_not_equalä  s   € Ø×&Ò& {°DÑ9Ô9Ð9Ð9r   c                óN   — t          |¦  «        |                      |¦  «        k    S r   ©r   r€   r¿   s      r   Ú_compare_less_than_equalz"Specifier._compare_less_than_equalç  ó%   € õ ˜{Ñ+Ô+¨t×/IÒ/IÈ$Ñ/OÔ/OÒOÐOr   c                óN   — t          |¦  «        |                      |¦  «        k    S r   rÂ   r¿   s      r   Ú_compare_greater_than_equalz%Specifier._compare_greater_than_equalí  rÄ   r   Úspec_strc                ó    — |                       |¦  «        }||k     sdS |j        s)|j        r"t          |¦  «        t          |¦  «        k    rdS dS ©NFT)r€   r„   r$   ©r3   r§   rÇ   rr   s       r   Ú_compare_less_thanzSpecifier._compare_less_thanó  sj   € ð ×)Ò)¨(Ñ3Ô3ˆð
 ˜TÒ!Ð!Ø�5ð Ô"ð	àÔ)ð	õ ˜kÑ*Ô*­m¸DÑ.AÔ.AÒAÐAà�5ð
 ˆtr   c                óò   — |                       |¦  «        }||k    sdS |j        s)|j        r"t          |¦  «        t          |¦  «        k    rdS |j        �"t          |¦  «        t          |¦  «        k    rdS dS rÉ   )r€   Úis_postreleaser$   r   rÊ   s       r   Ú_compare_greater_thanzSpecifier._compare_greater_than  s    € ð ×)Ò)¨(Ñ3Ô3ˆð
 ˜TÒ!Ð!Ø�5ð Ô#ð	àÔ*ð	õ ˜kÑ*Ô*­m¸DÑ.AÔ.AÒAÐAà�5ð ÔÐ(­]Øñ.
ô .
å˜4Ñ Ô ò.!ð .!ð �5ð
 ˆtr   úVersion | strc                óŠ   — t          |¦  «                             ¦   «         t          |¦  «                             ¦   «         k    S r   )r/   Úlowerr¿   s      r   Ú_compare_arbitraryzSpecifier._compare_arbitrary0  s1   € Ý�;ÑÔ×%Ò%Ñ'Ô'­3¨t©9¬9¯?ª?Ñ+<Ô+<Ò<Ð<r   rG   ústr | Versionc                ó,   — |                       |¦  «        S )a:  Return whether or not the item is contained in this specifier.

        :param item: The item to check for.

        This is used for the ``in`` operator and behaves the same as
        :meth:`contains` with no ``prereleases`` argument passed.

        >>> "1.2.3" in Specifier(">=1.2.3")
        True
        >>> Version("1.2.3") in Specifier(">=1.2.3")
        True
        >>> "1.0.0" in Specifier(">=1.2.3")
        False
        >>> "1.3.0a1" in Specifier(">=1.2.3")
        True
        >>> "1.3.0a1" in Specifier(">=1.2.3", prereleases=True)
        True
        ©rJ   ©r3   rG   s     r   Ú__contains__zSpecifier.__contains__3  ó   € ð& �}Š}˜TÑ"Ô"Ð"r   r   c                óf   — t          t          |                      |g|¬¦  «        ¦  «        ¦  «        S )as  Return whether or not the item is contained in this specifier.

        :param item:
            The item to check for, which can be a version string or a
            :class:`Version` instance.
        :param prereleases:
            Whether or not to match prereleases with this Specifier. If set to
            ``None`` (the default), it will follow the recommendation from
            :pep:`440` and match prereleases, as there are no other versions.

        >>> Specifier(">=1.2.3").contains("1.2.3")
        True
        >>> Specifier(">=1.2.3").contains(Version("1.2.3"))
        True
        >>> Specifier(">=1.2.3").contains("1.0.0")
        False
        >>> Specifier(">=1.2.3").contains("1.3.0a1")
        True
        >>> Specifier(">=1.2.3", prereleases=False).contains("1.3.0a1")
        False
        >>> Specifier(">=1.2.3").contains("1.3.0a1")
        True
        ©rB   )r<   r«   rO   rI   s      r   rJ   zSpecifier.containsH  s,   € õ2 •D˜Ÿš d V¸˜ÑEÔEÑFÔFÑGÔGÐGr   rK   rL   rM   c              #  ó–  K  — g }d}|�|n| j         }|                      | j        ¦  «        }|D ]}t          |¦  «        }|€+| j        dk    r|                      || j        ¦  «        r|V — Œ> ||| j        ¦  «        r0|j        r|rd}|V — Œ_|€| j        dur|                     |¦  «         Œ€|s|€| j        dur|E d{V —† dS dS dS dS )a  Filter items in the given iterable, that match the specifier.

        :param iterable:
            An iterable that can contain version strings and :class:`Version` instances.
            The items in the iterable will be filtered according to the specifier.
        :param prereleases:
            Whether or not to allow prereleases in the returned iterator. If set to
            ``None`` (the default), it will follow the recommendation from :pep:`440`
            and match prereleases if there are no other versions.

        >>> list(Specifier(">=1.2.3").filter(["1.2", "1.3", "1.5a1"]))
        ['1.3']
        >>> list(Specifier(">=1.2.3").filter(["1.2", "1.2.3", "1.3", Version("1.4")]))
        ['1.2.3', '1.3', <Version('1.4')>]
        >>> list(Specifier(">=1.2.3").filter(["1.2", "1.5a1"]))
        ['1.5a1']
        >>> list(Specifier(">=1.2.3").filter(["1.3", "1.5a1"], prereleases=True))
        ['1.3', '1.5a1']
        >>> list(Specifier(">=1.2.3", prereleases=True).filter(["1.3", "1.5a1"]))
        ['1.3', '1.5a1']
        FNro   T)	rB   r¦   rt   r   rÒ   r   r„   r^   Úappend)	r3   rK   rB   Úprereleases_versionsÚfound_non_prereleasesÚinclude_prereleasesr¥   r   Úparsed_versions	            r   rO   zSpecifier.filterc  sP  è è € ð0  "ÐØ %Ðð 'Ð2ˆKˆK¸Ô8Hð 	ð
 !×.Ò.¨t¬}Ñ=Ô=Ðð  ð 	9ð 	9ˆGÝ,¨WÑ5Ô5ˆNØÐ%à”= EÒ)Ð)¨d×.EÒ.EØ˜Tœ\ñ/ô /Ð)ð "�M�M�MøØ"Ð" >°4´<Ñ@Ô@ð 9à%Ô3ð 9Ð7Jð 9Ø,0Ð)Ø!�M�M�M�Mà Ð(¨TÔ->ÀeÐ-KÐ-KØ(×/Ò/°Ñ8Ô8Ð8øð
 &ð	,àÐ#ØÔ!¨Ð.Ð.à+Ð+Ð+Ð+Ð+Ð+Ð+Ð+Ð+Ð+ð	,ð 	,à#Ð#Ø.Ð.r   ©rq   N)rr   r/   rB   r@   r   rD   )r   r/   r   r   )r   r/   r   r   rS   ©rC   r@   r   rD   rP   )r   r–   rQ   rR   )r    r/   r   r¡   )r§   r   rr   r/   r   r<   )r§   r   rÇ   r/   r   r<   )r§   rÏ   rr   r/   r   r<   )rG   rÓ   r   r<   r   )rG   r   rB   r@   r   r<   rT   )'r'   r(   r)   r*   rU   Ú_operator_regex_strÚ_version_regex_strÚreÚcompileÚVERBOSEÚ
IGNORECASEru   rp   Ú__annotations__rz   r}   r€   rW   rB   rZ   rt   r   r“   r5   r›   r9   r?   r¦   r±   r½   rÀ   rÃ   rÆ   rË   rÎ   rÒ   r×   rJ   rO   r+   r   r   r]   r]   v   sñ  € € € € € € ðð ð ;€IðÐð\Ðð| ˆRŒZØÐ$Ñ$Ð'9Ñ9¸FÑBØ
Œ
�R”]Ñ"ñô €Fð ØØØØ"ØØØð	ð 	€Jð 	ð 	ð 	ñ 	ð>ð >ð >ð >ð >ð8
!ð 
!ð 
!ð 
!ðð ð ð ð ðð ð ñ „Xðð8 Ôð"ð "ð "ñ Ôð"ð ðð ð ñ „Xðð ðð ð ñ „XððBð Bð Bð Bð$*ð *ð *ð *ð ð+ð +ð +ñ „Xð+ð*ð *ð *ð *ð=ð =ð =ð =ð:!ð !ð !ð !ð
ð 
ð 
ð 
ð(&/ð &/ð &/ð &/ðP:ð :ð :ð :ðPð Pð Pð PðPð Pð Pð Pðð ð ð ð6 ð  ð  ð  ðD=ð =ð =ð =ð#ð #ð #ð #ð*Hð Hð Hð Hð Hð8 RVð<,ð <,ð <,ð <,ð <,ð <,ð <,r   r]   z([0-9]+)((?:a|b|c|rc)[0-9]+)r/   ú	list[str]c                óL  — g }|                       d¦  «        \  }}}|                     |pd¦  «         |                     d¦  «        D ][}t                               |¦  «        }|r(|                     |                     ¦   «         ¦  «         ŒF|                     |¦  «         Œ\|S )a  Split version into components.

    The split components are intended for version comparison. The logic does
    not attempt to retain the original version string, so joining the
    components back with :func:`_version_join` may not produce the original
    version string.
    ú!Ú0ú.)Ú
rpartitionrÜ   ÚsplitÚ_prefix_regexrv   ÚextendÚgroups)r   ÚresultÚepochr»   ÚrestrG   ry   s          r   r¯   r¯   ¥  s£   € ð €Fà×'Ò'¨Ñ,Ô,�N€Eˆ1ˆdØ
‡M‚M�%�,˜3ÑÔÐà—
’
˜3‘”ð  ð  ˆÝ×'Ò'¨Ñ-Ô-ˆØð 	 Ø�MŠM˜%Ÿ,š,™.œ.Ñ)Ô)Ð)Ð)à�MŠM˜$ÑÔÐÐØ€Mr   Ú
componentsc                ó>   — | ^}}|› dd                      |¦  «        › �S )zñJoin split version components into a version string.

    This function assumes the input came from :func:`_version_split`, where the
    first component must be the epoch (either empty or numeric), and all other
    components numeric.
    rì   rî   )Újoin)r÷   rõ   rö   s      r   rª   rª   »  s+   € ð €L€EˆDØÐ&Ð&�c—h’h˜t‘n”nÐ&Ð&Ð&r   Úsegmentr<   c                ó<   ‡ — t          ˆ fd„dD ¦   «         ¦  «         S )Nc              3  óB   •K  — | ]}‰                      |¦  «        V — Œd S r   )Ú
startswith)Ú.0r°   rú   s     €r   ú	<genexpr>z!_is_not_suffix.<locals>.<genexpr>Ç  sB   øè è € ð ð Ø'-ˆ×Ò˜6Ñ"Ô"ðð ð ð ð ð r   )r#   ÚaÚbÚrcr"   )Úany)rú   s   `r   r®   r®   Æ  s@   ø€ Ýð ð ð ð Ø1Pðñ ô ñ ô ð ð r   ÚleftÚrightútuple[list[str], list[str]]c                ó–  — g g }}|                      t          t          j        d„ | ¦  «        ¦  «        ¦  «         |                      t          t          j        d„ |¦  «        ¦  «        ¦  «         |                      | t	          |d         ¦  «        d …         ¦  «         |                      |t	          |d         ¦  «        d …         ¦  «         |                     ddgt          dt	          |d         ¦  «        t	          |d         ¦  «        z
  ¦  «        z  ¦  «         |                     ddgt          dt	          |d         ¦  «        t	          |d         ¦  «        z
  ¦  «        z  ¦  «         t          t          j                             |¦  «        ¦  «        t          t          j                             |¦  «        ¦  «        fS )Nc                ó*   — |                       ¦   «         S r   ©Úisdigit©Úxs    r   ú<lambda>z_pad_version.<locals>.<lambda>Ð  s   € ¸¿º¹¼€ r   c                ó*   — |                       ¦   «         S r   r	  r  s    r   r  z_pad_version.<locals>.<lambda>Ñ  s   € ¸!¿)º)¹+¼+€ r   r   r
   rí   )	rÜ   r«   r¬   r­   rµ   ÚinsertÚmaxÚchainÚfrom_iterable)r  r  Ú
left_splitÚright_splits       r   r´   r´   Ì  s‹  € Ø  "�€Jð ×Ò•d�9Ô.Ð/DÐ/DÀdÑKÔKÑLÔLÑMÔMÐMØ×Ò•t�IÔ/Ð0EÐ0EÀuÑMÔMÑNÔNÑOÔOÐOð ×Ò�d�3˜z¨!œ}Ñ-Ô-Ð/Ð/Ô0Ñ1Ô1Ð1Ø×Ò�u�S ¨Q¤Ñ0Ô0Ð2Ð2Ô3Ñ4Ô4Ð4ð ×Ò�a˜#˜¥ Q­¨K¸¬NÑ(;Ô(;½cÀ*ÈQÄ-Ñ>PÔ>PÑ(PÑ!QÔ!QÑQÑRÔRÐRØ×Ò�q˜3˜%¥# a­¨Z¸¬]Ñ);Ô);½cÀ+ÈaÄ.Ñ>QÔ>QÑ)QÑ"RÔ"RÑRÑSÔSÐSõ 	�YŒ_×*Ò*¨:Ñ6Ô6Ñ7Ô7Ý�YŒ_×*Ò*¨;Ñ7Ô7Ñ8Ô8ðð r   c                  ó¸   — e Zd ZdZdZ	 	 d&d'd„Zed(d„¦   «         Zej        d)d„¦   «         Zd*d„Z	d*d„Z
d+d„Zd,d„Zd-d„Zd+d„Zd.d„Zd/d„Z	 	 d0d1d!„Z	 d2d3d%„ZdS )4ÚSpecifierSetzÌThis class abstracts handling of a set of version specifiers.

    It can be passed a single specifier (``>=3.0``), a comma-separated list of
    specifiers (``>=3.0,!=3.1``), or no specifier at all.
    )r^   Ú_specsrq   NÚ
specifiersústr | Iterable[Specifier]rB   r@   r   rD   c                óô   — t          |t          ¦  «        rGd„ |                     d¦  «        D ¦   «         }t          t	          t
          |¦  «        ¦  «        | _        nt          |¦  «        | _        || _        dS )a´  Initialize a SpecifierSet instance.

        :param specifiers:
            The string representation of a specifier or a comma-separated list of
            specifiers which will be parsed and normalized before use.
            May also be an iterable of ``Specifier`` instances, which will be used
            as is.
        :param prereleases:
            This tells the SpecifierSet if it should accept prerelease versions if
            applicable or not. The default of ``None`` will autodetect it from the
            given specifiers.

        :raises InvalidSpecifier:
            If the given ``specifiers`` are not parseable than this exception will be
            raised.
        c                ó^   — g | ]*}|                      ¦   «         ¯|                      ¦   «         ‘Œ+S r+   )rx   ©rþ   Úss     r   ú
<listcomp>z)SpecifierSet.__init__.<locals>.<listcomp>  s-   € ÐVÐVÐV¨aÈAÏGÊGÉIÌIÐV §¢¡	¤	ÐVÐVÐVr   ú,N)r   r/   rð   Ú	frozensetÚmapr]   r  r^   )r3   r  rB   Úsplit_specifierss       r   rz   zSpecifierSet.__init__ê  sz   € õ, �j¥#Ñ&Ô&ð 
	0ð  WÐV°:×3CÒ3CÀCÑ3HÔ3HÐVÑVÔVÐõ $¥C­	Ð3CÑ$DÔ$DÑEÔEˆDŒKˆKõ $ JÑ/Ô/ˆDŒKð (ˆÔÐÐr   c                ót   — | j         �| j         S | j        sd S t          d„ | j        D ¦   «         ¦  «        rdS d S )Nc              3  ó$   K  — | ]}|j         V — Œd S r   rÚ   r  s     r   rÿ   z+SpecifierSet.prereleases.<locals>.<genexpr>  s$   è è € Ð2Ð2 ˆqŒ}Ð2Ð2Ð2Ð2Ð2Ð2r   T)r^   r  r  r2   s    r   rB   zSpecifierSet.prereleases  sT   € ð ÔÐ(ØÔ$Ð$ð
 Œ{ð 	Ø�4õ Ð2Ð2 d¤kÐ2Ñ2Ô2Ñ2Ô2ð 	Ø�4àˆtr   rC   c                ó   — || _         d S r   r‡   rF   s     r   rB   zSpecifierSet.prereleases$  rˆ   r   r/   c                óR   — | j         �
d| j        ›�nd}dt          | ¦  «        ›|› d�S )a  A representation of the specifier set that shows all internal state.

        Note that the ordering of the individual specifiers within the set may not
        match the input string.

        >>> SpecifierSet('>=1.0.0,!=2.0.0')
        <SpecifierSet('!=2.0.0,>=1.0.0')>
        >>> SpecifierSet('>=1.0.0,!=2.0.0', prereleases=False)
        <SpecifierSet('!=2.0.0,>=1.0.0', prereleases=False)>
        >>> SpecifierSet('>=1.0.0,!=2.0.0', prereleases=True)
        <SpecifierSet('!=2.0.0,>=1.0.0', prereleases=True)>
        NrŽ   rq   z<SpecifierSet(r�   )r^   rB   r/   r’   s     r   r“   zSpecifierSet.__repr__(  sF   € ð Ô Ð,ð 2˜TÔ-Ð1Ð1Ð1àð 	ð 5¥ D¡	¤	Ð4¨SÐ4Ð4Ð4Ð4r   c                ód   — d                      t          d„ | j        D ¦   «         ¦  «        ¦  «        S )an  A string representation of the specifier set that can be round-tripped.

        Note that the ordering of the individual specifiers within the set may not
        match the input string.

        >>> str(SpecifierSet(">=1.0.0,!=1.0.1"))
        '!=1.0.1,>=1.0.0'
        >>> str(SpecifierSet(">=1.0.0,!=1.0.1", prereleases=False))
        '!=1.0.1,>=1.0.0'
        r  c              3  ó4   K  — | ]}t          |¦  «        V — Œd S r   r1   r  s     r   rÿ   z'SpecifierSet.__str__.<locals>.<genexpr>H  s(   è è € Ð;Ð;¨!�s 1™vœvÐ;Ð;Ð;Ð;Ð;Ð;r   )rù   Úsortedr  r2   s    r   r5   zSpecifierSet.__str__=  s/   € ð �xŠx�Ð;Ð;¨t¬{Ð;Ñ;Ô;Ñ;Ô;Ñ<Ô<Ð<r   r7   c                ó*   — t          | j        ¦  «        S r   )r�   r  r2   s    r   r9   zSpecifierSet.__hash__J  s   € Ý�D”KÑ Ô Ð r   r:   úSpecifierSet | strc                ó�  — t          |t          ¦  «        rt          |¦  «        }nt          |t          ¦  «        st          S t          ¦   «         }t	          | j        |j        z  ¦  «        |_        | j        €|j        �|j        |_        n:| j        �|j        �| j        |j        k    r| j        |_        nt          d¦  «        ‚|S )a‚  Return a SpecifierSet which is a combination of the two sets.

        :param other: The other object to combine with.

        >>> SpecifierSet(">=1.0.0,!=1.0.1") & '<=2.0.0,!=2.0.1'
        <SpecifierSet('!=1.0.1,!=2.0.1,<=2.0.0,>=1.0.0')>
        >>> SpecifierSet(">=1.0.0,!=1.0.1") & SpecifierSet('<=2.0.0,!=2.0.1')
        <SpecifierSet('!=1.0.1,!=2.0.1,<=2.0.0,>=1.0.0')>
        NzFCannot combine SpecifierSets with True and False prerelease overrides.)r   r/   r  rŸ   r   r  r^   Ú
ValueError)r3   r:   Ú	specifiers      r   Ú__and__zSpecifierSet.__and__M  sË   € õ �e�SÑ!Ô!ð 	"Ý  Ñ'Ô'ˆEˆEÝ˜E¥<Ñ0Ô0ð 	"Ý!Ð!å ‘N”Nˆ	Ý$ T¤[°5´<Ñ%?Ñ@Ô@ˆ	ÔàÔÐ$¨Ô);Ð)GØ%*Ô%7ˆIÔ"Ð"àÔÐ)¨eÔ.@Ð.HØÔ %Ô"4Ò4Ð4Ø%)Ô%6ˆIÔ"Ð"åØXñô ð ð Ðr   r;   r<   c                óÌ   — t          |t          t          f¦  «        rt          t          |¦  «        ¦  «        }nt          |t          ¦  «        st          S | j        |j        k    S )a¡  Whether or not the two SpecifierSet-like objects are equal.

        :param other: The other object to check against.

        The value of :attr:`prereleases` is ignored.

        >>> SpecifierSet(">=1.0.0,!=1.0.1") == SpecifierSet(">=1.0.0,!=1.0.1")
        True
        >>> (SpecifierSet(">=1.0.0,!=1.0.1", prereleases=False) ==
        ...  SpecifierSet(">=1.0.0,!=1.0.1", prereleases=True))
        True
        >>> SpecifierSet(">=1.0.0,!=1.0.1") == ">=1.0.0,!=1.0.1"
        True
        >>> SpecifierSet(">=1.0.0,!=1.0.1") == SpecifierSet(">=1.0.0")
        False
        >>> SpecifierSet(">=1.0.0,!=1.0.1") == SpecifierSet(">=1.0.0,!=1.0.2")
        False
        )r   r/   r]   r  rŸ   r  r>   s     r   r?   zSpecifierSet.__eq__l  sW   € õ& �e�c¥9Ð-Ñ.Ô.ð 	"Ý ¥ U¡¤Ñ,Ô,ˆEˆEÝ˜E¥<Ñ0Ô0ð 	"Ý!Ð!àŒ{˜eœlÒ*Ð*r   c                ó*   — t          | j        ¦  «        S )z7Returns the number of specifiers in this specifier set.)rµ   r  r2   s    r   Ú__len__zSpecifierSet.__len__†  s   € å�4”;ÑÔÐr   úIterator[Specifier]c                ó*   — t          | j        ¦  «        S )zð
        Returns an iterator over all the underlying :class:`Specifier` instances
        in this specifier set.

        >>> sorted(SpecifierSet(">=1.0.0,!=1.0.1"), key=str)
        [<Specifier('!=1.0.1')>, <Specifier('>=1.0.0')>]
        )Úiterr  r2   s    r   Ú__iter__zSpecifierSet.__iter__Š  s   € õ �D”KÑ Ô Ð r   rG   r   c                ó,   — |                       |¦  «        S )aq  Return whether or not the item is contained in this specifier.

        :param item: The item to check for.

        This is used for the ``in`` operator and behaves the same as
        :meth:`contains` with no ``prereleases`` argument passed.

        >>> "1.2.3" in SpecifierSet(">=1.0.0,!=1.0.1")
        True
        >>> Version("1.2.3") in SpecifierSet(">=1.0.0,!=1.0.1")
        True
        >>> "1.0.1" in SpecifierSet(">=1.0.0,!=1.0.1")
        False
        >>> "1.3.0a1" in SpecifierSet(">=1.0.0,!=1.0.1")
        True
        >>> "1.3.0a1" in SpecifierSet(">=1.0.0,!=1.0.1", prereleases=True)
        True
        rÕ   rÖ   s     r   r×   zSpecifierSet.__contains__”  rØ   r   Ú	installedc                óª   — t          |¦  «        }|�|r	|j        rd}|€|n|}t          t          |                      |g|¬¦  «        ¦  «        ¦  «        S )a‡  Return whether or not the item is contained in this SpecifierSet.

        :param item:
            The item to check for, which can be a version string or a
            :class:`Version` instance.
        :param prereleases:
            Whether or not to match prereleases with this SpecifierSet. If set to
            ``None`` (the default), it will follow the recommendation from :pep:`440`
            and match prereleases, as there are no other versions.
        :param installed:
            Whether or not the item is installed. If set to ``True``, it will
            accept prerelease versions even if the specifier does not allow them.

        >>> SpecifierSet(">=1.0.0,!=1.0.1").contains("1.2.3")
        True
        >>> SpecifierSet(">=1.0.0,!=1.0.1").contains(Version("1.2.3"))
        True
        >>> SpecifierSet(">=1.0.0,!=1.0.1").contains("1.0.1")
        False
        >>> SpecifierSet(">=1.0.0,!=1.0.1").contains("1.3.0a1")
        True
        >>> SpecifierSet(">=1.0.0,!=1.0.1", prereleases=False).contains("1.3.0a1")
        False
        >>> SpecifierSet(">=1.0.0,!=1.0.1").contains("1.3.0a1", prereleases=True)
        True
        NTrÚ   )r   r„   r<   r«   rO   )r3   rG   rB   r8  r   Ú
check_items         r   rJ   zSpecifierSet.contains©  s_   € õ@ " $Ñ'Ô'ˆàÐ 9Ð°Ô1FÐØˆKà$˜_�T�T°'ˆ
Ý•D˜Ÿš j \¸{˜ÑKÔKÑLÔLÑMÔMÐMr   rK   rL   rM   c                ó  ‡	— |€| j         �| j         }| j        r7| j        D ]}|                     ||€dn|¬¦  «        }Œ|�t          |¦  «        S n%|du rt          |¦  «        S |du rˆ	fd„|D ¦   «         S g }g }d}|D ]r}t	          |¦  «        }|€+|                     |¦  «         |                     |¦  «         Œ>|j        r|                     |¦  «         Œ[|                     |¦  «         d}Œst          |r|n|¦  «        S )aö  Filter items in the given iterable, that match the specifiers in this set.

        :param iterable:
            An iterable that can contain version strings and :class:`Version` instances.
            The items in the iterable will be filtered according to the specifier.
        :param prereleases:
            Whether or not to allow prereleases in the returned iterator. If set to
            ``None`` (the default), it will follow the recommendation from :pep:`440`
            and match prereleases if there are no other versions.

        >>> list(SpecifierSet(">=1.2.3").filter(["1.2", "1.3", "1.5a1"]))
        ['1.3']
        >>> list(SpecifierSet(">=1.2.3").filter(["1.2", "1.3", Version("1.4")]))
        ['1.3', <Version('1.4')>]
        >>> list(SpecifierSet(">=1.2.3").filter(["1.2", "1.5a1"]))
        ['1.5a1']
        >>> list(SpecifierSet(">=1.2.3").filter(["1.3", "1.5a1"], prereleases=True))
        ['1.3', '1.5a1']
        >>> list(SpecifierSet(">=1.2.3", prereleases=True).filter(["1.3", "1.5a1"]))
        ['1.3', '1.5a1']

        An "empty" SpecifierSet will filter items based on the presence of prerelease
        versions in the set.

        >>> list(SpecifierSet("").filter(["1.3", "1.5a1"]))
        ['1.3']
        >>> list(SpecifierSet("").filter(["1.5a1"]))
        ['1.5a1']
        >>> list(SpecifierSet("", prereleases=True).filter(["1.3", "1.5a1"]))
        ['1.3', '1.5a1']
        >>> list(SpecifierSet("").filter(["1.3", "1.5a1"], prereleases=True))
        ['1.3', '1.5a1']
        NTrÚ   Fc              3  óL   •K  — | ]}t          |¦  «        xŠ�‰j        °|V — Œd S r   )r   r„   )rþ   rG   r   s     €r   rÿ   z&SpecifierSet.filter.<locals>.<genexpr>  sN   øè è € ð ð àÝ#2°4Ñ#8Ô#8Ð8˜ÐAØ"Ô0ð Bð àAÐAÐAÐAðð r   )rB   r  rO   r5  r   rÜ   r„   )
r3   rK   rB   rr   Úfiltered_itemsÚfound_prereleasesÚfound_final_releaserG   rà   r   s
            @r   rO   zSpecifierSet.filterÑ  s‡  ø€ ðN Ð 4Ô#3Ð#?ØÔ*ˆKð
 Œ;ð 	ð œð ð �ØŸ;š;Ø°+Ð2E¨$¨$È;ð 'ñ ô ��ð Ð&õ ˜H‘~”~Ð%ð 'ð ˜dÐ"Ð"Ý˜H‘~”~Ð%à˜eÐ#Ð#ðð ð ð à (ðñ ô ð ð 46ˆØ68ÐØ#Ðàð 	+ð 	+ˆDÝ,¨TÑ2Ô2ˆNð Ð%Ø×%Ò% dÑ+Ô+Ð+Ø!×(Ò(¨Ñ.Ô.Ð.Ð.ØÔ-ð +Ø!×(Ò(¨Ñ.Ô.Ð.Ð.à×%Ò% dÑ+Ô+Ð+Ø&*Ð#Ð#åÐ&9ÐP�N�NÐ?PÑQÔQÐQr   rá   )r  r  rB   r@   r   rD   rS   râ   rP   rQ   )r:   r+  r   r  rR   )r   r3  )rG   r   r   r<   )NN)rG   r   rB   r@   r8  r@   r   r<   r   rT   )r'   r(   r)   r*   rU   rz   rW   rB   rZ   r“   r5   r9   r/  r?   r2  r6  r×   rJ   rO   r+   r   r   r  r  á  s€  € € € € € ðð ð +€Ið 13Ø#'ð$(ð $(ð $(ð $(ð $(ðL ðð ð ñ „Xðð& Ôð"ð "ð "ñ Ôð"ð5ð 5ð 5ð 5ð*=ð =ð =ð =ð!ð !ð !ð !ðð ð ð ð>+ð +ð +ð +ð4 ð  ð  ð  ð!ð !ð !ð !ð#ð #ð #ð #ð0 $(Ø!%ð	&Nð &Nð &Nð &Nð &NðR RVð[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   r  )&r*   Ú
__future__r   rX   r¬   rå   Útypingr   r   r   r   r   r	   Úutilsr   r   r   r   r/   r   r   r<   r¡   r   r   r$   r-  r&   ÚABCMetar-   r]   ræ   rñ   r¯   rª   r®   r´   r  r+   r   r   ú<module>rD     sN  ððð ð #Ð "Ð "Ð "Ð "Ð "à 
€
€
€
Ø Ð Ð Ð Ø 	€	€	€	Ø FÐ FÐ FÐ FÐ FÐ FÐ FÐ FÐ FÐ FÐ FÐ FÐ FÐ FÐ FÐ Fà 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,à˜ ˜Ô%€Ø�WÐ1¸ÐIÑIÔIÐ Ø˜W c˜N¨DÐ0Ô1Ð ðð ð ð ð+ð +ð +ð +ðJð Jð Jð Jð	ð 	ð 	ð 	ð 	�zñ 	ô 	ð 	ð<ð <ð <ð <ð <˜cœkð <ñ <ô <ð <ð~i,ð i,ð i,ð i,ð i,�ñ i,ô i,ð i,ðX �”
Ð:Ñ;Ô;€ðð ð ð ð,'ð 'ð 'ð 'ðð ð ð ðð ð ð ð*KRð KRð KRð KRð KR�=ñ KRô KRð KRð KRð KRr   