JFIFxxC      C  " }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3RbrJFIFxxC      C  " }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr ֓g.dZgdZddlZddlZddlmZmZddlmZddl m Z ddl m Z d d l m Z d d lmZd Zd Ze j$ddeiZe j$ddeiZe j$ddeiZe j$dZe j$dZe j$dZej2dej4j6Zej2dj6Ze j$ddeiZej2dZej2dej4j@Z!dZ"dZ#dZ$GddeZ%Gd d!Z&Gd"d#Z'e'd$d%&Z(e'd'd%&Z)e'd(d)&Z*e'd*d)&Z+e'd+d%&Z,e'd,d)&Z-Gd-d.e&e j\Z/Gd/d0e&e j`Z1Gd1d2e&e jdZ3Gd3d4e&e jhZ5Gd5d6e jlZ7ej2d7ej4jpZ9ej2d8ej4jpZ:djd9Z; dkd:Z< dkd;Z=dld<Z>dld=Z?d>Z@d?ZAGd@dAe1ZBeBe7jdB<dldCZDdDZEGdEdFeZFGdGdHZGGdIdJZHGdKdLeHe1ZIeIe7jdM<GdNdOeHe1ZJeJe7jdP<GdQdReZKGdSdTeLZMGdUdVeLZNGdWdXeZOGdYdZeHe1ZPePe7jd[<Gd\d]e1ZQeQe7jd^<d_ZRd`ZSej2dajZUej2dbjZV dmdcZWeeWjeW_dnddZXGdedfe jZYGdgdhe jZ[diZ\eYZ]e[Z^y)oz.The ``lxml.html`` tool set for HTML handling. )document_fromstringfragment_fromstringfragments_fromstring fromstringtostringElementdefsopen_in_browser submit_formfind_rel_links find_classmake_links_absoluteresolve_base_href iterlinks rewrite_linksparseN)MutableMapping MutableSet)partialurljoin)etree)r)SetMixincx|s|Stjdtjj}|d|S)Nz^(\s*)u'z\1')recompileMsub)sr s C/opt/hc_python/lib64/python3.12/site-packages/lxml/html/__init__.py__fix_docstringr#6s0  **["$$ ' + +C vq>zhttp://www.w3.org/1999/xhtmlz9descendant-or-self::a[@rel]|descendant-or-self::x:a[@rel]x namespacesz7descendant-or-self::option|descendant-or-self::x:optionz3descendant-or-self::form|descendant-or-self::x:formztdescendant-or-self::*[@class and contains(concat(' ', normalize-space(@class), ' '), concat(' ', $class_name, ' '))]zdescendant-or-self::*[@id=$id]zstring()z&url\((["][^"]*["]|['][^']*[']|[^)]*)\)z@import "(.*?)"z%//label[@for=$id]|//x:label[@for=$id]z[^ ]+z%[^;=]*;\s*(?:url\s*=\s*)?(?P.*)$c^|dddk(r|dddk(s|dddk(r|dddk(r |dd|dzfS||fS)Nr"')r!poss r"_unquote_matchr.SsP!u|"## 2A#!BC&C-2wA~u r$czt|tr t|dSt|tr t|dS|S)z1Convert the result back into the input type. zutf-8)encodingunicode) issubclassbytesrstr)typresults r"_transform_resultr7Zs7#u11 C 33 r$ct|tr8|ddk(r0|dttdztk(r|j ddS|S)Nr{r}r*) isinstancer4lenXHTML_NAMESPACEsplit)tags r"_nonsr@esG#s q6S=S3#7#9:oM99S>"% % Jr$cReZdZdZdZdZdZfdZdZdZ dZ d Z d Z xZ S) Classesa*Provides access to an element's class attribute as a set-like collection. Usage:: >>> el = fromstring('') >>> classes = el.classes # or: classes = Classes(el.attrib) >>> classes |= ['block', 'paragraph'] >>> el.get('class') 'hidden large block paragraph' >>> classes.toggle('hidden') False >>> el.get('class') 'large block paragraph' >>> classes -= ('some', 'classes', 'block') >>> el.get('class') 'large paragraph' cJ||_t|jdd|_y)Nclass) _attributesrget_get_class_value)self attributess r"__init__zClasses.__init__}s% '  Dr$c|rtjd|rtd|z|jj }||vry|j |dj ||jd<y)z[ Add a class. This has no effect if the class is already present. \sInvalid class name: %rN rD)rsearch ValueErrorrHr>appendjoinrF)rIvalueclassess r"addz Classes.addsl  %/5=> >'')//1 G  u$'HHW$5!r$c4|rtjd|rtd|z|jj Dcgc] }||k7r| }}|rdj ||j d<yd|j vr|j d=yycc}w)zn Remove a class if it is currently present. If the class is not present, do nothing. rMrNrOrDN)rrPrQrHr>rSrF)rIrTnamerUs r"discardzClasses.discards  %/5=> >$($9$9$;$A$A$C%$CDem$C% (+(9D  W % (( (  )) %sBcp|rtjd|rtd|zt||y)zw Remove a class; it must currently be present. If the class is not present, raise a KeyError. rMrNN)rrPrQsuperremove)rIrT __class__s r"r\zClasses.removes2  %/5=> > ur$cR|j}||vxr||jvSN)rHr>)rIrXrUs r" __contains__zClasses.__contains__s*'')w:47==?#::r$cPt|jjSr_)iterrHr>rIs r"__iter__zClasses.__iter__sD))+11344r$cPt|jjSr_)r<rHr>rcs r"__len__zClasses.__len__s4((*00233r$c|jj}d}|D]}||vs|j|d}|rdj||jd<yy)z. Add all names from 'values'. FTrOrDN)rHr>rRrSrF)rIvaluesrUextendedrTs r"updatezClasses.updatesf'')//1EG#u% (+(9D  W % r$cX|rtjd|rtd|z|jj } |j |d}|r dj||jd<|S|jd=|S#t$r|j |d}YOwxYw)z Add a class name if it isn't there yet, or remove it if it exists. Returns true if the class was added (and is now enabled) and false if it was removed (and is now disabled). rMrNFTrOrD) rrPrQrHr>r\rRrSrF)rIrTrUenableds r"togglezClasses.toggles %/5=> >'')//1  NN5 !G (+(9D  W %  )  NN5 !G sB B)(B))__name__ __module__ __qualname____doc__rKrVrYr\r`rdrfrjrm __classcell__r]s@r"rBrBls6 E 6 *;54 :r$rBc>eZdZdfd ZedZej dZedZedZedZ edZ edZ e j d Z e jd Z d Z d Zd ZdZdZdZddZ ddZddZdZ ddZxZS) HtmlMixinc&t|||y)zset(self, key, value=None) Sets an element attribute. If no value is provided, or if the value is None, creates a 'boolean' attribute without value, e.g. "
" for ``form.set('novalidate')``. N)r[set)rIkeyrTr]s r"rwz HtmlMixin.sets  Cr$c,t|jS)zB A set-like wrapper around the 'class' attribute. )rBattribrcs r"rUzHtmlMixin.classess t{{##r$ct|tsJ|j}|r|jd|y|j d|j d=yy)NrD)r;rBrHrwrGrz)rIrUrTs r"rUzHtmlMixin.classessQ'7+++((*  HHWe $ XXg  * G$+r$cJ|jjjS)z Returns the base URL, given when the page was parsed. Use with ``urlparse.urljoin(el.base_url, href)`` to get absolute URLs. ) getroottreedocinfoURLrcs r"base_urlzHtmlMixin.base_urls!))---r$ct|S)z0 Return a list of all the forms ) _forms_xpathrcs r"formszHtmlMixin.formss D!!r$c:|jddtidS)zt Return the element. Can be called from a child element to get the document's head. z//body|//x:bodyr%r&rxpathr=rcs r"bodyzHtmlMixin.body" zz+_8MzNqQQr$c:|jddtidS)zu Returns the element. Can be called from a child element to get the document's head. z//head|//x:headr%r&rrrcs r"headzHtmlMixin.head rr$cT|jd}|syt||}|sy|dS)zN Get or set any