HEX
Server: Microsoft-IIS/10.0
System: Windows NT ITPWINWEBSVR22 10.0 build 20348 (Windows Server 2022) AMD64
User: www.conferencesearch.co.uk (0)
PHP: 8.3.30
Disabled: NONE
Upload Files
File: D:/Python311/Lib/site-packages/soupsieve/__pycache__/css_parser.cpython-311.pyc
�

��nc#�����dZddlZddlmZddlmZddlmZddlmZ	ddlm
Z
ddlZdd	lm
Z
mZmZmZmZmZmZmZmZmZd
Zhd�Zhd�Zhd
�Zhd�Zhd�ZeezezezezZdZd�e��Z dZ!d�e e!���Z"d�e ���Z#d�e e���Z$d�e#���Z%d�e"���Z&d�ee%���Z'd�e"e'���Z(d �e%�!��Z)d"�e%�!��Z*d#�e%�!��Z+d$�e"e%e(�%��Z,d&�e"e%�'��Z-d(�e"e%�'��Z.d)�e%�!��Z/d*�e"���Z0d+�e-��Z1d,�e%�!��Z2d-�e.e"e!e e&�.��Z3d/�e.e"e&�0��Z4d1�e.e"e'�2��Z5d3�e.e"�4��Z6d5�e e"�6��Z7d1�e.e"e'�2��Z8ej9d7�e"���ej:��Z;ej9d8�e e���ej:��Z<ej9d9�e"���ej:��Z=ej9d:�e"e'���ej>��Z?ej9e ��Z@ej9d;�e"����ZAej9d<�e"����ZBej9d=�e/��ej>��ZCd>ZDd?ZEdZFd@ZGdAZHdBZIdCZJdDZKdEZLdFZMdGZNdHZOdIZPdJZQeeQ�K��dLeRdMe
e	jSdNe
e	jTdOeUdPejVf
dQ���ZWdpdR�ZXdNe
e	jTdPeeReeRe	jYfffdS�ZZdqdUeRdVe[dPeRfdW�Z\dXeRdPeRfdY�Z]GdZ�d[��Z^Gd\�d]e^��Z_Gd^�d_��Z`Gd`�da��Zaeadb���beFeJz�c��Zceadd���beFeJz�c��Zdeade���beFeJzeIz�c��Zeeadf���beFeJzeKz�c��Zfeadg���beFeJz�c��Zgeadh���beFeJz�c��Zheadi���beFeJz�c��Zieadj���beFeJz�c��Zjeadk���beFeJzeOz�c��Zkeadl���beF�c��Zleadm���beFeJz�c��Zmeadn���beFeJz�c��Zneado���beFeMzeJz�c��Zoeado���beFeNzeJz�c��ZpdS)rzCSS selector parser.�N)�	lru_cache�)�util)�	css_match)�	css_types)�SelectorSyntaxError)
�Optional�Dict�Match�Tuple�Type�Any�List�Union�Iterator�casti��>�:link�:root�:empty�:scope�:checked�:default�:defined�:enabled�	:any-link�	:disabled�	:in-range�	:optional�	:required�
:read-only�:last-child�:only-child�:read-write�:first-child�
:last-of-type�
:only-of-type�
:out-of-range�:first-of-type�:indeterminate�:placeholder-shown>�:past�:focus�:hover�:active�:future�:paused�:target�:playing�:visited�:local-link�
:focus-within�
:user-invalid�:focus-visible�:target-within�:host�:current>�:matches�:is�:has�:not�:where�	:contains�:-soup-contains�:-soup-contains-own>�
:host-contextr9r:>�:dir�:lang�
:nth-child�:nth-of-type�:nth-last-child�:nth-last-of-typez(?:\r\n|(?!\r\n)[\n\f\r])z(?:[ \t]|{})z"(?:/\*[^*]*\*+(?:[^/*][^*]*\*+)*/)z(?:{ws}|{comments}))�ws�commentsz*(?:\\(?:[a-f0-9]{{1,6}}{ws}?|[^\r\n\f]|$)))rJz/(?:\\(?:[a-f0-9]{{1,6}}{ws}?|[^\r\n\f]|$|{nl})))rJ�nlz�
(?:(?:-?(?:[^\x00-\x2f\x30-\x40\x5B-\x5E\x60\x7B-\x9f]|{esc})+|--)
(?:[^\x00-\x2c\x2e\x2f\x3A-\x40\x5B-\x5E\x60\x7B-\x9f]|{esc})*)
)�escz>(?:[-+])?(?:[0-9]+n?|n)(?:(?<=n){ws}*(?:[-+]){ws}*(?:[0-9]+))?zT
(?:"(?:\\(?:.|{nl})|[^\\"\r\n\f]+)*?"|'(?:\\(?:.|{nl})|[^\\'\r\n\f]+)*?'|{ident}+)
)rL�identzU
(?:{ws}*(?P<cmp>[!~^|*$]?=){ws}*(?P<value>{value})(?:{ws}+(?P<case>[is]))?)?{ws}*\]
)rJ�valuez	\#{ident})rNz	\.{ident}z6(?P<tag_ns>(?:{ident}|\*)?\|)?(?P<tag_name>{ident}|\*)zD
\[{ws}*(?P<attr_ns>(?:{ident}|\*)?\|)?(?P<attr_name>{ident}){attr}
)rJrN�attrz$(?P<name>:{ident})(?P<open>\({ws}*)?)rJrNz#(?P<name>:{ident})(?P<open>\({ws}*)z(?P<name>:(?=--){ident})z{ws}*\)z:{}z	@P{ident}z}
(?P<pseudo_nth_child>{name}
(?P<nth_child>{nth}|even|odd))(?:{wsc}*\)|(?P<of>{comments}*{ws}{wsc}*of{comments}*{ws}{wsc}*))
)�name�wscrKrJ�nthzA
(?P<pseudo_nth_type>{name}
(?P<nth_type>{nth}|even|odd)){ws}*\)
)rQrJrSz7{name}(?P<values>{value}(?:{ws}*,{ws}*{value})*){ws}*\))rQrJrOz{name}(?P<dir>ltr|rtl){ws}*\))rQrJz0{wsc}*?(?P<relation>[,+>~]|{ws}(?![,+>~])){wsc}*)rJrRz0(?:(\\[a-f0-9]{{1,6}}{ws}?)|(\\[^\r\n\f])|(\\$))z9(?:(\\[a-f0-9]{{1,6}}{ws}?)|(\\[^\r\n\f])|(\\$)|(\\{nl}))zL(?P<s1>[-+])?(?P<a>[0-9]+n?|n)(?:(?<=n){ws}*(?P<s2>[-+]){ws}*(?P<b>[0-9]+))?z-(?:(?P<value>{value})|(?P<split>{ws}*,{ws}*))z^{}*z{}*$z^{}$�,� ����� �@��iii�)�maxsize�pattern�
namespaces�custom�flags�returnc��t|��}tj|t|||������|||��S)zCached CSS compile.�rarb)�process_custom�cm�	SoupSieve�	CSSParser�process_selectors)r_r`rarb�custom_selectorss     �6D:\Python311\Lib\site-packages\soupsieve/css_parser.py�_cached_css_compilerm�s[��&�f�-�-��
�<����#��	
�	
�	
��
�
�
���
�
�
�
�c�8�t���dS)zPurge the cache.N)rm�cache_clear�rnrl�_purge_cacherr�s���#�#�%�%�%�%�%rnc�R�i}|��|���D]�\}}tj|��}t�|���"td�|�����||vr"td�|�����||t|��<��|S)zProcess custom.Nz5The name '{}' is not a valid custom pseudo-class namez4The custom selector '{}' has already been registered)	�itemsr�lower�	RE_CUSTOM�matchr�format�KeyError�css_unescape)rark�keyrOrQs     rlrfrf�s�����
�9� �,�,�.�.�	9�	9�J�C���:�c�?�?�D����t�$�$�
p�)�*a�*h�*h�im�*n�*n�o�o�o��'�'�
d��U�\�\�]a�b�b�c�c�c�38��\�$�/�/�0�0��rnF�content�stringc��dttdtfd�}|stnt�||��S)zs
    Unescape CSS value.

    Strings allow for spanning the value on multiple strings by escaping a new line.
    �mrcc�Z�|�d��rHt|�d��dd�d��}|dkrt}t|��}nM|�d��r|�d��dd�}n|�d��rd}nd}|S)	z(Replace with the appropriate substitute.rNrYrrV����)�group�int�UNICODE_REPLACEMENT_CHAR�chr)r�	codepointrOs   rl�replacezcss_unescape.<locals>.replaces���
�7�7�1�:�:�
	��A�G�G�A�J�J�q�r�r�N�B�/�/�I��A�~�
5�4�	��	�N�N�E�E�
�W�W�Q�Z�Z�	��G�G�A�J�J�q�r�r�N�E�E�
�W�W�Q�Z�Z�	��E�E��E��rn)r�str�
RE_CSS_ESC�RE_CSS_STR_ESC�sub)r|r}r�s   rlrzrz�sI���5��:��#�����"%�8�J�J�.�=�=�g�w�O�O�OrnrNc�p�g}t|��}|dko|ddk}|dkr,|r*|�d�|�����nMt|��D�]<\}}t	|��}|dkr|�d���1d|cxkrdksn|dkr)|�d�|�����o|dks|r?|dkr9d	|cxkrd
kr,nn)|�d�|������|dvsC|dks=d	|cxkrd
ks0nd	|cxkrd
ks!nd
|cxkrdksnd|cxkrdkrnn|�|����|�d�|������>d�|��S)zEscape identifier.r�-rz\{}r���z\{:x} �0�9)�-�_r\�A�Z�a�zr�)�len�appendrx�	enumerate�ord�join)rNr}�length�
start_dash�index�cr�s       rl�escaper�s����F�
��Z�Z�F��!��/��a��C��J�
��{�0�z�0��
�
�f�m�m�E�*�*�+�+�+�+�!�%�(�(�	0�	0�H�E�1��A���I��D� �
0��
�
�h�'�'�'�'��)�

0�

0�

0�

0�t�

0�

0�

0�

0�	�T�0A�

0��
�
�i�.�.�y�9�9�:�:�:�:��1�*�
0��
0���
�
0�$�)�
0�
0�
0�
0�W[�
0�
0�
0�
0�
0��
�
�i�.�.�y�9�9�:�:�:�:��\�)�
0�-6�$�->�
0�CG�9�
0�
0�
0�
0�X\�
0�
0�
0�
0���
0�
0�
0�
0�&*�
0�
0�
0�
0�04�	�
0�
0�
0�
0�EI�
0�
0�
0�
0�OS�W`�
0�
0�
0�
0�dh�
0�
0�
0�
0�
0��
�
�a� � � � ��
�
�f�m�m�A�.�.�/�/�/�/�
�7�7�6�?�?�rnc
�b�eZdZdZdededdfd�Zdefd�Zded	ed
edee	efd�Z
dS)�SelectorPattern�Selector pattern.rQr_rcNc��||_tj|tjtjztjz��|_dS)�Initialize.N)rQ�re�compile�I�X�U�
re_pattern)�selfrQr_s   rl�__init__zSelectorPattern.__init__4s1����	��*�W�b�d�R�T�k�B�D�.@�A�A����rnc��|jS)�	Get name.)rQ�r�s rl�get_namezSelectorPattern.get_name:s���y�rn�selectorr�rbc�8�|j�||��S)�Match the selector.)r�rw)r�r�r�rbs    rlrwzSelectorPattern.match?s����$�$�X�u�5�5�5rn)�__name__�
__module__�__qualname__�__doc__r�r�r�r�r	rrwrqrnrlr�r�1s���������B�S�B�3�B�4�B�B�B�B��#�����
6�c�6�#�6�c�6�h�u�S�z�>R�6�6�6�6�6�6rnr�c
��eZdZdZdeeeeedfeeefdfddfd�Zdefd�Z	ded	e
d
e
deeefd�Z
dS)�SpecialPseudoPatternr��patterns.rcNc��i|_|D]7}|d}|d||d��}|dD]}||j|<�
�8d|_tjttjtjztjz��|_dS)r�rr�rVrN)	r��matched_namer�r��PAT_PSEUDO_CLASS_SPECIALr�r�r��re_pseudo_name)r�r��prQr_�pseudos      rlr�zSpecialPseudoPattern.__init__Hs�����
��	0�	0�A��Q�4�D��a��d�4��1��&�&�G��A�$�
0�
0��(/��
�f�%�%�
0�!��� �j�)A�2�4�"�$�;�QS�QU�CU�V�V����rnc�F�|j�dn|j���S)r�Nr�)r�r�r�s rlr�zSpecialPseudoPattern.get_nameUs%���&�P�r�r�D�4E�4N�4N�4P�4P�Prnr�r�rbc�$�d}|j�||��}|rptjt	|�d������}|j�|��}|r |�|||��}|r||_|S)r�NrQ)	r�rwrrurzr�r��getr�)r�r�r�rbr�rrQr_s        rlrwzSpecialPseudoPattern.matchZs�������%�%�h��6�6���	0��:�l�1�7�7�6�?�?�;�;�<�<�D��m�'�'��-�-�G��
0� ���x���>�>���0�(/�D�%��
rn)r�r�r�r�rr�r
r�r�r�r�r	rrwrqrnrlr�r�Es���������W��u�S�%��S��/�3��_�H]�-]�'^�`c�'c�!d�W�im�W�W�W�W�Q�#�Q�Q�Q�Q�

�c�
�#�
�c�
�h�u�S�z�>R�
�
�
�
�
�
rnr�c��eZdZdZdeddfd�Zdeddejfd�Z	de
ejejffd�Z
defd	�ZeZdS)
�	_Selectorz�
    Intermediate selector class.

    This stores selector data for a compound selector as we are acquiring them.
    Once we are done collecting the data for a compound selector, we freeze
    the data in an object that can be pickled and hashed.
    �kwargsrcNc��|�dd��|_|�dg��|_|�dg��|_|�dg��|_|�dg��|_|�dg��|_|�dg��|_|�d	d��|_|�d
g��|_	|�dg��|_
|�dd
��|_|�dd��|_dS)r��tagN�ids�classes�
attributesrS�	selectors�	relations�rel_type�contains�langrbr�no_matchF)
r�r�r�r�r�rSr�r�r�r�r�rbr�)r�r�s  rlr�z_Selector.__init__ss���:�:�e�T�*�*����:�:�e�R�(�(����z�z�)�R�0�0��� �*�*�\�2�6�6����:�:�e�R�(�(������K��4�4������K��4�4����
�
�:�t�4�4��
��
�
�:�r�2�2��
��J�J�v�r�*�*��	��Z�Z���+�+��
��
�
�:�u�5�5��
�
�
rnr�c���|rQ|d}|j�|dd���tj|���g��Stj��S)zFreeze relation.rrN)r��extend�ct�SelectorList�freeze)r�r��sels   rl�_freeze_relationsz_Selector._freeze_relations�s[���	%��A�,�C��M� � ��1�2�2��/�/�/��?�C�J�J�L�L�>�2�2�2��?�$�$�$rnc��|jrtj��Stj|jt|j��t|j��t|j��t|j	��t|j
��|�|j��|j
t|j��t|j��|j��S)zFreeze self.)r�r��SelectorNull�Selectorr��tupler�r�r�rSr�r�r�r�r�r�rbr�s rlr�z_Selector.freeze�s����=�	��?�$�$�$��;����d�h����d�l�#�#��d�o�&�&��d�h����d�n�%�%��&�&�t�~�6�6��
��d�m�$�$��d�i� � ��
���
rnc��d�|j|j|j|j|j|j|j|j|j	|j
|j|j��S)zString representation.z�_Selector(tag={!r}, ids={!r}, classes={!r}, attributes={!r}, nth={!r}, selectors={!r}, relations={!r}, rel_type={!r}, contains={!r}, lang={!r}, flags={!r}, no_match={!r}))
rxr�r�r�r�rSr�r�r�r�r�rbr�r�s rl�__str__z_Selector.__str__�sP��
b�
�&��H�d�h���d�o�t�x����N�D�M�4�=�$�)�T�Z�QU�Q^�
�
�	
rn)r�r�r�r�rr�rr�r�r�rr�r�r�r�r��__repr__rqrnrlr�r�js���������6��6��6�6�6�6� %�4��+<�%���%�%�%�%���b�k�2�?�:�;�����(	
��	
�	
�	
�	
��H�H�Hrnr�c���eZdZdZede��eddeefddeefdde	efd	d
e
efddeeff��ed
e��ede
��ede��ede��ede��ede��ede��ede��ede��fZ		d9dedeeeeeejffdeddfd�Zdedeede de fd �Z!dedeede de fd!�Z"dedeede de fd"�Z#dedeede d#e$e%eeefd$e de%e e ffd%�Z&dedeede d#e$e%eeefde f
d&�Z'ded'ede d#e$e%eeefd(ede fd)�Z(dedeede d*e)ed+ed(ede%e eeffd,�Z*dedeede d*e)ed-e)ed.e d/e d(ede%e effd0�Z+dedeede de fd1�Z,dedeede de fd2�Z-dedeede de fd3�Z.dedeede de fd4�Z/		d:d#e$e%eeefd(ededejfd5�Z0d6ede$e%eeeffd7�Z1d:d(ededejfd8�Z2dS);rizParse CSS selectors.�pseudo_close�pseudo_contains)r@rArB�pseudo_nth_child)rFrH�pseudo_nth_type)rGrI�pseudo_lang)rE�
pseudo_dir)rD�pseudo_class_custom�pseudo_class�pseudo_element�at_rule�id�classr��	attribute�combineNrr�rarbrcc��|�dd��|_||_|jtjz|_|�in||_dS)r��r�N)r�r_rbr�DEBUG�debugra)r�r�rarbs    rlr�zCSSParser.__init__�sF�� �'�'���9�9�����
��Z�$�*�,��
�"�6�b�b�����rnr�r�has_selectorc��d}|�d��}|�d��r'tj|�d����nd}|�d��r*t|�d��dd���nd}t|�d����}d}	d}
d}|r"|d	krtjnd
tjz}n@tj|��dkrtjtjz}d}	ntj}|rv|�d
���d��r,t|�d
��dd�d��}n"t|�d
����}|sd}
�n�|�d��r,t	jdt	j	|��z|��}
�nb|�d��r,t	jdt	j	|��z|��}
�n!|�d��r+t	jdt	j	|��z|��}
n�|�d��rK|rt�|��rdnt	j	|��}t	jd|z|��}
n�|�d��r+t	jdt	j	|��z|��}
nAt	jdt	j	|��z|��}
|�d��rd}|	r|
rt	j|
j��}
tj|||
|
��}|rlt��}|j�|��tj|���gdd��}|j�|��n|j�|��d}|S)z8Create attribute selector from the returned regex match.F�cmp�caseN�attr_ns���r��	attr_name�ir�typeTrO��"�'r�^z^%s.*�$z.*?%s$�*z.*?%s.*�~z[^\s\S]z7.*?(?:(?<=^)|(?<=[ \t\r\n\f]))%s(?=(?:[ \t\r\n\f]|$)).*�|z^%s(?:-.*)?$z^%s$�!)r�rrurzr�r��DOTALL�
startswithr�r��RE_WS�searchr_r��SelectorAttributer�r�r�r�r�r�)r�r�rr��inverse�opr��nsrP�is_type�pattern2rOrbr_�sel_attr�sub_sel�not_lists                 rl�parse_attribute_selectorz"CSSParser.parse_attribute_selector�s�����
�W�W�U�^�^��./�g�g�f�o�o�G�t�z�!�'�'�&�/�/�*�*�*�4��67�g�g�i�6H�6H�
P�\�!�'�'�)�,�,�S�b�S�1�
2�
2�
2�b���A�G�G�K�0�0�1�1���������	�!�S�[�/�R�T�T�a�2�9�<�E�E�
�Z��
�
��
'�	��D�2�9�$�E��G�G��I�E�
�	7��w�w�w���*�*�:�6�6�
7�$�Q�W�W�W�%5�%5�a��d�%;�T�B�B���$�Q�W�W�W�%5�%5�6�6���	��G�G�
�]�]�3�
�
�	��j��B�I�e�,<�,<�!<�e�D�D�G�G�
�]�]�3�
�
�	��j��R�Y�u�-=�-=�!=�u�E�E�G�G�
�]�]�3�
�
�	��j��b�i��.>�.>�!>��F�F�G�G�
�]�]�3�
�
�	�',�X�u�|�|�E�/B�/B�X�J�J��	�RW�HX�HX�E��j�![�^c�!c�ej�k�k�G�G�
�]�]�3�
�
�	��j��2�9�U�3C�3C�!C�U�K�K�G�G��j��2�9�U�+;�+;�!;�U�C�C�G��}�}�S�!�!�
����	3�w�	3��z�'�/�2�2�H��'��b�'�8�D�D���	,��k�k�G���%�%�h�/�/�/������(8�(8�'9�4��G�G�H��M� � ��*�*�*�*��N�!�!�(�+�+�+����rnc��|�d��r*t|�d��dd���nd}t|�d����}tj||��|_d}|S)z#Parse tag pattern from regex match.�tag_nsNr��tag_nameT)r�rzr��SelectorTagr�)r�r�rr��prefixr�s      rl�parse_tag_patternzCSSParser.parse_tag_pattern st��:;����9J�9J�T��a�g�g�h�/�/����4�5�5�5�PT���1�7�7�:�.�.�/�/���.��f�-�-������rnc�@�tjt|�d������}|j�|��}|�Pt
d�||�d����|j	|�d�����t|tj��sG|j|=t||j|j����t ���}||j|<|j�|��d}|S)z�
        Parse custom pseudo class alias.

        Compile custom selectors as we need them. When compiling a custom selector,
        set it to `None` in the dictionary so we can avoid an infinite loop.
        rQNz3Undefined custom selector '{}' found at position {}rre�rbT)rrurzr�rar�rrx�endr_�
isinstancer�r�rirbrj�
FLG_PSEUDOr�r�)r�r�rr�r�r�s      rl�parse_pseudo_class_customz#CSSParser.parse_pseudo_class_custom)s	����L�������9�9�:�:���;�?�?�6�*�*���	�%�E�L�L�V�UV�UZ�UZ�[\�U]�U]�^�^������a�����
��(�B�O�4�4�	+���F�#� ����D�J������j��1�1�
�#+�D�K����
���X�&�&�&����rn�	iselector�is_htmlc���d}tjt|�d������}|�d��rd}|r7|tvr.|�|||||�d����}�ng|�s�|tv�r�|dkr|xjtj
zc_�nm|dkr|xjtjzc_d}�nI|dkr|xjtjzc_�n'|d	kr|xjtj
zc_�n|d
vr!|j�t ���n�|dkr!|j�t"���n�|dkr!|j�t$���n�|d
kr!|j�t&���nk|dkr!|j�t(���nD|dkr!|j�t*���n|dkr!|j�t,���n�|dkr!|j�t.���n�|dkr!|j�t0���n�|dkr!|j�t2���n�|dkr!|j�t4���nZ|dkr!|j�t6���n3|dkr!|j�t8���n|dkrD|j�tjdddddtj�������n�|dkrD|j�tjdddddtj�������nx|dkrD|j�tjdddddtj�������n.|dkrC|j�tjdddddtj������n�|dkrm|j� tjdddddtj����tjdddddtj����g��nr|dkrl|j� tjdddddtj����tjdddddtj����g��d}n�|rJ|tBvrA|�"||�d��tFtHz��d|_%d}n||s|tLvr
d|_%d}ng|tNvr<tQd�)|��|j*|�+d�����tYd�)|�����||fS) zParse pseudo class.FrQ�openTrrrrr)rrrrr)rrrrr r#rr'r*r$rr!r(r%r"r&z$Invalid syntax for pseudo class '{}'z1'{}' pseudo-class is not implemented at this time)-rrurzr��PSEUDO_COMPLEX�parse_pseudo_openr�
PSEUDO_SIMPLErbr��SEL_ROOT�SEL_DEFINED�	SEL_SCOPE�	SEL_EMPTYr�r��CSS_LINK�CSS_CHECKED�CSS_DEFAULT�CSS_INDETERMINATE�CSS_DISABLED�CSS_ENABLED�CSS_REQUIRED�CSS_OPTIONAL�
CSS_READ_ONLY�CSS_READ_WRITE�CSS_IN_RANGE�CSS_OUT_OF_RANGE�CSS_PLACEHOLDER_SHOWNrS�SelectorNthr�r��PSEUDO_COMPLEX_NO_MATCH�parse_selectorsr!�FLG_OPENr��PSEUDO_SIMPLE_NO_MATCH�PSEUDO_SUPPORTEDrrxr_�start�NotImplementedError)r�r�rr�r#r$�complex_pseudor�s        rl�parse_pseudo_classzCSSParser.parse_pseudo_classEs�������L�������9�9�:�:���7�7�6�?�?�	"�!�N��M	�f��6�M	��1�1�#�v�|�Y�XY�X]�X]�^_�X`�X`�a�a�L�L��K	�F�m�$;�K	��� �8
��	�	�R�[�(�	�	�	��:�%�6
��	�	�R�^�+�	�	�����8�#�3
��	�	�R�\�)�	�	�	��8�#�1
��	�	�R�\�)�	�	�	��1�1�/
��
�$�$�X�.�.�.�.��:�%�-
��
�$�$�[�1�1�1�1��:�%�+
��
�$�$�[�1�1�1�1��+�+�)
��
�$�$�%6�7�7�7�7��;�&�'
��
�$�$�\�2�2�2�2��:�%�%
��
�$�$�[�1�1�1�1��;�&�#
��
�$�$�\�2�2�2�2��;�&�!
��
�$�$�\�2�2�2�2��<�'�
��
�$�$�]�3�3�3�3��=�(�
��
�$�$�^�4�4�4�4��;�&�
��
�$�$�\�2�2�2�2��?�*�
��
�$�$�%5�6�6�6�6��/�/�
��
�$�$�%:�;�;�;�;��>�)�
�����r�~�a���5�%���IZ�IZ�[�[�\�\�\�\��=�(�
�����r�~�a���5�$���HY�HY�Z�Z�[�[�[�[��+�+�
�����r�~�a���4����HY�HY�Z�Z�[�[�[�[��?�*�
�����r�~�a���4��r��GX�GX�Y�Y�Z�Z�Z�Z��=�(�

�������q�%��E�5�"�/�BS�BS�T�T���q�%��E�4���AR�AR�S�S�������?�*�
�������q�%��D�%���AR�AR�S�S���q�%��D�$���@Q�@Q�R�R����� �L�L�
�	��*A� A�	�� � ��A�E�E�!�H�H�j�8�6K�L�L�L��C�L��L�L��	�F�.D�$D�	��C�L��L�L�
�'�
'�		�%�6�=�=�f�E�E�������
�
���
�&�C�J�J�6�R�R���
��W�$�$rnc��|���}|�d��rd}nd}tjt	|d����|d<tj|�d|z����}|dkrd}d}	d	}
�nT|d
krd}d}	d	}
�nFtttt�	|����}|�
d��r|�
d��d
krd
nd}|�
d��}
|
�d��}
|
�d��r|dz
}n|
r||
dd�z
}n||
z
}|�
d��r|�
d��d
krd
nd}|�
d��r||�
d��z
}nd}t|d��}t|d��}	|d}|dkr�|�
d��r8|�||�d��t t"z��}nt$}|dkr2|j�t+j||
|	dd|����n�|dkr1|j�t+j||
|	dd	|����n�|dkrC|j�t+j||
|	d	dt+j������nH|dkrB|j�t+j||
|	d	d	t+j������d	}|S)zParse `nth` pseudo.r��_child�_typerQrS�evenrVrT�oddr�s1r�r��a�n�1Nr��s2�b�0�
�ofrFFrHrGrI)�	groupdictr�rrurzrrr��RE_NTHrwr��endswithr
r�r=rr!r>�CSS_NTH_OF_S_DEFAULTrSr�r�r;r�)r�r�rr�r#�mdict�postfixr|rJrN�var�	nth_parts�_s1rK�_s2�
pseudo_sel�nth_sels                 rl�parse_pseudo_nthzCSSParser.parse_pseudo_nth�s0�����
�
���9�9�'�(�(�	��G�G��G��
�<��f�
�#>�#>�?�?��f�
��*�U�Y�Y�u�w��7�7�8�8���f��	��B��B��C�C�
��
�	��B��B��C�C��U�3�Z����g�)>�)>�?�?�I�"����.�.�W�9�?�?�4�3H�3H�C�3O�W�#�#�UW�C�����$�$�A��*�*�S�/�/�C��|�|�C� � �
��s�
����
��q��"��v�
����q���"����.�.�W�9�?�?�4�3H�3H�C�3O�W�#�#�UW�C����s�#�#�
��y���s�+�+�+������S�"���B��S�"���B��6�]�
��h��	[��w�w�t�}�}�
/��.�.�y�!�%�%��(�(�J�QY�DY�Z�Z���/���\�)�
R�����r�~�b�#�r�5�%��Q�Q�R�R�R�R��0�0�
R�����r�~�b�#�r�5�$��P�P�Q�Q�Q���^�+�
[�����r�~�b�#�r�4����HY�HY�Z�Z�[�[�[�[��2�2�
[�����r�~�b�#�r�4��r��GX�GX�Y�Y�Z�Z�Z����rnrQr�c��ttz}|dkr|tz}n'|dkr|ttzz}n|dvr
|tz}|j�|�|||����d}|S)z"Parse pseudo with opening bracket.r>r=)r?r<T)r!r>�FLG_NOT�FLG_RELATIVE�FLG_FORGIVEr�r�r=)r�r�rQr�r#r�rbs       rlr(zCSSParser.parse_pseudo_open�s����X�%���6�>�	!��W��E�E�
�V�^�	!��\�K�/�/�E�E�
�&�
&�	!��[� �E��
���T�1�1�)�U�E�J�J�K�K�K����rnr�r�c�0�|�d�����}|st}|tkr\|sd|_||_|dj�|��dtz}|�t����nk|r(||_|dj�|��n<|dd�tkr)td�
|��|j|���d|z}t��}d}|||fS)	�Parse combinator tokens.�relationTr��:rNz'The multiple combinators at position {}F)r��strip�
WS_COMBINATOR�COMMA_COMBINATORr�r�r�r�r�rrxr_)r�r�rr�r�r�r��
combinators        rl�parse_has_combinatorzCSSParser.parse_has_combinator�s*���W�W�Z�(�(�.�.�0�0�
��	'�&�J��)�)�	(��
$� $���#�C�L��b�M�#�*�*�3�/�/�/��]�*�H����Y�[�[�)�)�)�)��
�'����"�
�'�.�.�s�3�3�3�3��!�"�"���.�

�*�=�D�D�U�K�K��L������Z�'�H��k�k�����S�(�*�*rnr��	is_pseudo�
is_forgivec	��|�d�����}	|	st}	|sd|r|	tkr*t	d�|	|��|j|���|	tkr!d|_|dd�=|�|��n�|	tkrX|j	s|stjdd��|_	|j�
|��|�|��|dd�=n;|j�
|��|	|_|dd�=|�|��t��}d}||fS)rerfzBThe combinator '{}' at position {}, must have a selector before itTNrF)r�rhrirjrrxr_r�r�r�r�rr�r�r�r�)
r�r�rr�r�r�rmrnr�rks
          rl�parse_combinatorzCSSParser.parse_combinator,so���W�W�Z�(�(�.�.�0�0�
��	'�&�J��	&��
��/?�!?�
�)�X�_�_�`j�lq�r�r��L������-�-�
&�#����a�a�a�L�� � ��%�%�%���-�-�
&��w�8�y�8� �n�S�$�7�7�C�G��
�$�$�Y�/�/�/�� � ��%�%�%��a�a�a�L�L��
�$�$�Y�/�/�/�)����a�a�a�L�� � ��%�%�%��k�k�����S� � rnc��|�d��}|�d��r0|j�t	|dd�����n/|j�t	|dd�����d}|S)zParse HTML classes and ids.r�.rNT)r�r
r�r�rzr�)r�r�rr�r�s     rl�parse_class_idzCSSParser.parse_class_id\s����7�7�1�:�:�����s�#�#�	7��K���|�H�Q�R�R�L�9�9�:�:�:�:��G�N�N�<������5�5�6�6�6����rnc��tjt|�d������}|dkrt	jdt��|dk}t|�d����}g}t�|��D]}|�d��r�|�d��}	|	�	d��rt|	d	d
�d��}	nt|	��}	|�
|	����|j�
tj
||����d}|S)zParse contains.rQr@z\The pseudo class ':contains' is deprecated, ':-soup-contains' should be used moving forward.rB�values�splitrO)rrrr�T)rrurzr��warnings�warn�
FutureWarning�	RE_VALUES�finditerr
r�r�r��SelectorContains)
r�r�rr�r��contains_ownrur��tokenrOs
          rl�parse_pseudo_containszCSSParser.parse_pseudo_containsgs;����L�������9�9�:�:���[� �	��M�n��
�
�
��!6�6���a�g�g�h�/�/�0�0�����'�'��/�/�	#�	#�E��{�{�7�#�#�
���K�K��(�(�E����
�+�+�
,�$�U�1�R�4�[�$�7�7���$�U�+�+���O�O�E�"�"�"�"�����B�/��,�G�G�H�H�H����rnc���|�d��}g}t�|��D]}|�d��r�|�d��}|�d��rt	|dd�d��}nt	|��}|�|����|j�tj|����d}|S)zParse pseudo language.rurvrOrrr�T)	r�rzr{r
rzr�r�r��SelectorLang)r�r�rr�rur�r~rOs        rl�parse_pseudo_langzCSSParser.parse_pseudo_lang�s�������"�"�����'�'��/�/�		#�		#�E��{�{�7�#�#�
���K�K��(�(�E����
�+�+�
,�$�U�1�R�4�[�$�7�7���$�U�+�+���O�O�E�"�"�"�"��������1�1�2�2�2����rnc��tj|�d����dkrtjntj}|xj|zc_d}|S)zParse pseudo direction.�dir�ltrT)rrur�r��SEL_DIR_LTR�SEL_DIR_RTLrb)r�r�rr�rOs     rl�parse_pseudo_dirzCSSParser.parse_pseudo_dir�sJ��#'�*�Q�W�W�U�^�^�"<�"<��"E�Y����2�>���	�	�U��	�	����rnc
��t��}g}d}d}g}dtz}	t|tz��}
t|tz��}t|t
z��}t|tz��}
t|tz��}t|tz��}t|tz��}t|tz��}t|tz��}t|tz��}t|tz��}|jr�|rtd��|
rtd��|rtd��|
rtd��|rtd��|rtd��|rtd	��|rtd
��|rtd��|rtd��|rtd
��|r!|�t����		t#|��\}}|dkr5t%d�|�d�������|dkr|�|||��}�n�|dkr|�|||||��\}}�n\|dkr5t%d�|�d�������|dkr|�|||��}�n|dvr|�||||��}�n�|dkr|�|||��}�n�|dkr|�|||��}d}�n�|dkr�|sX|sOt7d�|�d����|j|�d�����d|_|
rd}�nUt7d�|�d����|j|�d�����|dkrA|r|�|||||	|��\}}}	n�|�||||||||��\}}n�|dkr|� |||��}n�|dkri|rOt7d �|�d����|j|�d�����|�!|||��}n|d!vr|�"|||��}|�#d��}��n#tH$rYnwxYw|
r+|s)t7d"�|��|j|���|r�|j%s|stMj'd#d$��|_%|r(|	|_(|d%j)�|��n�|j)�*|��|d$d$�=|�|��nq|ro|rF|rC|d%j(�6|	d&kr0|	|_(d|_|d%j)�|��d}n'|r|s#d|_|d$d$�=|�|��d}|s)t7d�|��|j|���|rtLj+|d%_,|rtLj-|d%_,|rtLj.|d%_,|rtLj/|d%_,|rtLj0|d%_,tMj1d'�|D��|
|��S)(zParse selectors.Frgz    is_pseudo: Truez    is_open: Truez    is_relative: Truez    is_not: Truez    is_html: Truez    is_default: Truez    is_indeterminate: Truez    is_in_range: Truez    is_out_of_range: Truez    is_placeholder_shown: Truez    is_forgive: TrueTr�zAt-rules found at position {}rr�r�r�z#Pseudo-element found at position {}r�)r�r�r�r�r�z"Expected a selector at position {}z+Unmatched pseudo-class close at position {}r�r�r�z5Tag name found at position {} instead of at the start)r�r�z$Unclosed pseudo-class at position {}rNr�z: c�6�g|]}|�����Srq)r�)�.0�ss  rl�
<listcomp>z-CSSParser.parse_selectors.<locals>.<listcomp>Ys ��>�>�>�q����
�
�>�>�>rn)2r�ri�boolr>r!rbra�FLG_HTML�FLG_DEFAULT�FLG_INDETERMINATE�FLG_IN_RANGE�FLG_OUT_OF_RANGE�FLG_PLACEHOLDER_SHOWNrcr��printr��nextrBrxrAr"rDrr_r�r�rr_r�rlrprrrsr�
StopIterationr�r�rr�r�r��SEL_DEFAULTrb�SEL_INDETERMINATE�SEL_IN_RANGE�SEL_OUT_OF_RANGE�SEL_PLACEHOLDER_SHOWNr�)r�r#r�rbr�r�r��closedr�r��is_openrm�is_relative�is_notr$�
is_default�is_indeterminate�is_in_range�is_out_of_range�is_placeholder_shownrnr{rs                       rlr=zCSSParser.parse_selectors�s ���k�k���	������	���&���u�x�'�(�(�����+�,�,�	��5�<�/�0�0���e�g�o�&�&���u�x�'�(�(���%�+�-�.�.�
���(9� 9�:�:���5�<�/�0�0���u�'7�7�8�8��#�E�,A�$A�B�B���%�+�-�.�.�
��:�	.��
-��+�,�,�,��
+��)�*�*�*��
/��-�.�.�.��
*��(�)�)�)��
+��)�*�*�*��
.��,�-�-�-��
4��2�3�3�3��
/��-�.�.�.��
3��1�2�2�2�#�
8��6�7�7�7��
.��,�-�-�-��	*����Y�[�[�)�)�)�A	�>
!��i�����Q��)�#�8M�-�.M�.T�.T�UV�U\�U\�]^�U_�U_�.`�.`�a�a�a��1�1�6M�#'�#A�#A�#�q�,�#W�#W�L�L��N�*�4M�,0�,C�,C�C��L�Zc�el�,m�,m�)�L�'�'��,�,�2M�-�.S�.Z�.Z�[\�[b�[b�cd�[e�[e�.f�.f�g�g�g��-�-�0M�#'�#=�#=�c�1�l�#S�#S�L�L��C�C�.M�#'�#8�#8��a��y�#Y�#Y�L�L��M�)�,M�#'�#9�#9�#�q�,�#O�#O�L�L��L�(�*M�#'�#8�#8��a��#N�#N�L�"�G�G��N�*�&M�'�,�)��"5� D� K� K�A�G�G�TU�J�J� W� W� $�� !����
�
�#�#��
(,�����!%���1�I�P�P�QR�QX�QX�YZ�Q[�Q[�\�\� �L��G�G�A�J�J����
�I�%�M�"��6:�6O�6O���L�)�X�u�7�7�3��c�8�8�-1�,A�,A���L�)�Y�	�S]�_d�-�-�)��c�c��K�'�M�#'�#@�#@��a��#V�#V�L�L��E�\�	M�#��1�S�Z�Z�[\�[b�[b�cd�[e�[e�f�f� �L��G�G�A�J�J����
$(�#9�#9�#�q�,�#O�#O�L�L��O�+�M�#'�#6�#6�s�A�|�#L�#L�L����a����}>
!�B��<�	�	�	��D�	�����	�6�	�%�6�=�=�e�D�D������
��	(��7�
4�9�
4��.��d�3�3����
&�'����"�
�'�.�.�s�3�3�3�3��
�$�$�Y�/�/�/��a�a�a�L�� � ��%�%�%�%��	(��
(��(��2��!7�(�H�PT�DT�(�#+�C�L�#'�C�L��b�M�+�2�2�3�7�7�7�#'�L��!�(�	�(�#'�C�L�!�!�!�!���$�$�S�)�)�)�#'�L��	�&�4�;�;�E�B�B������
��	1�"$�.�I�b�M���	7�"$�"6�I�b�M���	2�"$�/�I�b�M���	6�"$�"5�I�b�M���	;�"$�":�I�b�M����>�>�I�>�>�>���P�P�Ps�LT	�	
T�Tr_c
#�>K�t�|��}|r|�d��nd}t�|��}|r|�d��dz
nt|��dz
}|jr"td�|����||k�rYd}|j	D]�}|�
|||j��}|r�|���}|jrJtd�||�
d��|�d������|�d��}||fV�n��|��||}|dkrd�|��}nj|dkrd	�|��}nN|d
krd�|��}n2|dkrd
�|��}nd�||��}t||j|���||k��Y|jrtd��dSdS)zIterate selector tokens.rrz## PARSING: {!r}Nz#TOKEN: '{}' --> {!r} at position {}�[z+Malformed attribute selector at position {}rrz'Malformed class selector at position {}�#z$Malformed id selector at position {}rgz.Malformed pseudo-class selector at position {}z"Invalid character {!r} position {}z## END PARSING)�RE_WS_BEGINrr�	RE_WS_ENDrAr�r�r�rx�
css_tokensrwrbr�r�rr_)	r�r_rr�r�vrQr��msgs	         rl�
selector_iterzCSSParser.selector_iter[sW����
���w�'�'���$����a����1�����W�%�%��"#�;�q�w�w�q�z�z�A�~�~�#�g�,�,��*:���:�	6��$�+�+�G�4�4�5�5�5��s�l�	D��A��_�
�
���G�G�G�U�D�J�7�7�����:�:�<�<�D��z�j��C�J�J�4�QR�QX�QX�YZ�Q[�Q[�]^�]d�]d�ef�]g�]g�h�h�i�i�i��E�E�!�H�H�E���'�M�M�M��E�
��
D��E�N����8�	P�G�N�N�u�U�U�C�C��#�X�P�C�J�J�5�Q�Q�C�C��#�X�P�@�G�G��N�N�C�C��#�X�P�J�Q�Q�RW�X�X�C�C�>�E�E�a��O�O�C�)�#�t�|�U�C�C�C�5�s�l�	D�6�:�	$��"�#�#�#�#�#�	$�	$rnc�`�|�|�|j��||��S)zProcess selectors.)r=r�r_)r�r�rbs   rlrjzCSSParser.process_selectors�s,���#�#�D�$6�$6�t�|�$D�$D�e�U�S�S�Srn)Nr)rr)3r�r�r�r�r��PAT_PSEUDO_CLOSEr��PAT_PSEUDO_CONTAINS�PAT_PSEUDO_NTH_CHILD�PAT_PSEUDO_NTH_TYPE�PAT_PSEUDO_LANG�PAT_PSEUDO_DIR�PAT_PSEUDO_CLASS_CUSTOM�PAT_PSEUDO_CLASS�PAT_PSEUDO_ELEMENT�PAT_AT_RULE�PAT_ID�	PAT_CLASS�PAT_TAG�PAT_ATTR�PAT_COMBINEr�r�r	r
rr�r�r�r�r�rr�rrr"rrrDr_r(rrlrprsrr�r�r=r�rjrqrnrlriri�s��������	���(8�9�9���&�K�'�#�	�$�%F�H\�^m�n�"�$I�K^�`o�p��
�O�_�M��y�.�/�J�
�
	
�
	
�	��-�/F�G�G����(8�9�9���(�*<�=�=���	�;�/�/����f�%�%�����+�+����w�'�'����X�.�.���	�;�/�/�1�J�<DH��	7�7��7���c�5��b�o�)=�#>�>�?�@�7��	7�

�7�7�7�7�D�I�D�%��*�D�TX�D�]a�D�D�D�D�L�Y��5��:��T��VZ������Y��5��:��UY��^b�����8]%�
�]%���:�]%��	]%�
�E�#�u�S�z�/�2�3�]%��
]%�
�t�T�z�	�]%�]%�]%�]%�~?�
�?���:�?��	?�
�E�#�u�S�z�/�2�3�?�
�
?�?�?�?�B�
�����	�
�E�#�u�S�z�/�2�3���
�
�����..+�
�.+���:�.+��	.+�
�	�?�.+��
.+��.+�
�t�Y��#�	$�.+�.+�.+�.+�`.!�
�.!���:�.!��	.!�
�	�?�.!��	�?�
.!��.!��.!��.!�
�t�Y��	�.!�.!�.!�.!�`	�)�	��c�
�	�$�	�SW�	�	�	�	����u�S�z��QU��Z^�����2�Y��5��:��T��VZ�����*�I��%��*��D��UY�������	|Q�|Q��E�#�u�S�z�/�2�3�|Q��|Q��	|Q�

��|Q�|Q�|Q�|Q�|'$�S�'$�X�e�C��s��O�6L�-M�'$�'$�'$�'$�RT�T�s�T�s�T�2�?�T�T�T�T�T�Trnrizhtml|*:is(a, area)[href]rz\
    html|*:is(input[type=checkbox], input[type=radio])[checked], html|option[selected]
    z�
    :checked,

    /*
    This pattern must be at the end.
    Special logic is applied to the last selector.
    */
    html|form html|*:is(button, input)[type="submit"]
    aF
    html|input[type="checkbox"][indeterminate],
    html|input[type="radio"]:is(:not([name]), [name=""]):not([checked]),
    html|progress:not([value]),

    /*
    This pattern must be at the end.
    Special logic is applied to the last selector.
    */
    html|input[type="radio"][name]:not([name='']):not([checked])
    a�
    html|*:is(input:not([type=hidden]), button, select, textarea, fieldset, optgroup, option, fieldset)[disabled],
    html|optgroup[disabled] > html|option,
    html|fieldset[disabled] > html|*:is(input:not([type=hidden]), button, select, textarea, fieldset),
    html|fieldset[disabled] >
        html|*:not(legend:nth-of-type(1)) html|*:is(input:not([type=hidden]), button, select, textarea, fieldset)
    z|
    html|*:is(input:not([type=hidden]), button, select, textarea, fieldset, optgroup, option, fieldset):not(:disabled)
    z,html|*:is(input, textarea, select)[required]z2html|*:is(input, textarea, select):not([required])aW
    html|input:is(
        :not([type]),
        [type=""],
        [type=text],
        [type=search],
        [type=url],
        [type=tel],
        [type=email],
        [type=password],
        [type=number]
    )[placeholder]:not([placeholder='']):is(:not([value]), [value=""]),
    html|textarea[placeholder]:not([placeholder=''])
    z*|*a
    html|*:is(
        textarea,
        input:is(
            :not([type]),
            [type=""],
            [type=text],
            [type=search],
            [type=url],
            [type=tel],
            [type=email],
            [type=number],
            [type=password],
            [type=date],
            [type=datetime-local],
            [type=month],
            [type=time],
            [type=week]
        )
    ):not([readonly], :disabled),
    html|*:is([contenteditable=""], [contenteditable="true" i])
    z!
    html|*:not(:read-write)
    z�
    html|input:is(
        [type="date"],
        [type="month"],
        [type="week"],
        [type="time"],
        [type="datetime-local"],
        [type="number"],
        [type="range"]
    ):is(
        [min],
        [max]
    )
    )rcN)F)qr�r��	functoolsrr�rrrgrr�rrw�typingr	r
rrr
rrrrrr�r)r?r'r<�PSEUDO_SPECIALr@�NEWLINErx�WS�COMMENTS�WSC�CSS_ESCAPES�CSS_STRING_ESCAPES�
IDENTIFIER�NTH�VALUE�ATTRr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rTr�rzrr�r�rvrjrir!rarbr�r�r�r>r�r�r�rc�	_MAXCACHEr��
Namespaces�CustomSelectorsr�rhrmrrr�rfr�rzr�r�r�r�rirjr.r/r0r1r2r3r4r5r:rVr7r6r8r9rqrnrl�<module>r�s�	����	�	�	�	�������������������������%�%�%�%�%�%�����W�W�W�W�W�W�W�W�W�W�W�W�W�W�W�W�W�W�W�W�W�W�W�W�!�����
�8����(	�	�	����������!�#9�9�N�J�Md�d�gu�u��'�����G�$�$��0���#�#�r�H�#�=�=��;�B�B�b�B�I�I��G�N�N�RT�Y`�N�a�a����F�{�F����
H�N�N�RU�N�V�V��	�
�F�g�Z�F�(�(���
�F�c��F����
�	�	�:�	�	.�	.�����j��1�1�	�
C�
J�
J�Q[�
J�
\�
\���
�F�c��$�F�/�/�	�;�A�A�S�PZ�A�[�[��A�H�H�C�Wa�H�b�b��5�<�<�:�<�N�N���$�$��$�,�,���]�]�#3�4�4���!�!�
�!�3�3����F�(�c�H��QT�F�U�U��
��F�(�S�c�F�:�:��
M�S�S�	!�c��T����2�8�8�>V�[^�8�_�_��A�H�H�B�TW�H�X�X��P�W�W�	!�c��X�����R�Z�K�R�R�VY�R�Z�Z�\^�\`�
a�
a�
����@�G�G�2�RY�G�Z�Z�\^�\`����
���S�Z�Z�^a�Z�b�b��D�
�
��

�B�J�G�N�N�RU�]b�N�c�c�eg�ei�j�j�	���
�2�����b�j����s�+�+�,�,���B�J�v�}�}�S�)�)�*�*�	��B�J�w�~�~�&=�>�>���E�E�	����
��
�
��������������������
�	���9�����
�����'��
�R�'�(���	�
�\�������,&�&�&�&��8�B�$6�7��D��e�C�QS�Q`�L`�Fa�Aa�<b�����P�P�#�P�t�P��P�P�P�P�6�#��#�����86�6�6�6�6�6�6�6�("�"�"�"�"�?�"�"�"�JB�B�B�B�B�B�B�B�JXT�XT�XT�XT�XT�XT�XT�XT�~�9������*�x�/��0�0�	��i������*�x�/��0�0�	��i��
�
���*�x�/�+�=��>�>���I�
�����*�x�/�2C�C��D�D���y������*�x�/��0�0�
��i������*�x�/��0�0�	��y�2�����*�x�/��0�0�
��y�8�����*�x�/��0�0�
�"�	�
�����*�x�/�2G�G��H�H��"!�y�	�����*��%�%�������.��*�x�/��0�0�/�2�	������*�x�/��0�0�	��y�
�����*�|�3�h�>��?�?�
�"�9�
�����*�'7�7�(�B��C�C���rn