ó
    �[efyH  ã                  ó  • S r SSKJr  SSKrSSKrSSKrSSKrSSKrSSK	r
SSKJs  Jr  SSKJrJr  SSKJr  SSKJr  \R*                  " \5      rSr\R2                  R5                  \5      (       a  \\R6                  S'   S	rS
rSrSrSSSSSSSS.r  " S S5      r!    S,S jr" S-     S.S jjr#    S/S jr$S0S jr%    S1S jr&S2S jr'S3S jr(S\0r)S4S jr*S5S  jr+S6S! jr,S7S" jr-S#r.S$r/S%r0S&r1S8S' jr2S9S( jr3S:S) jr4S;S* jr5S<S+ jr6g)=zñ
Query Debian's Bug Tracking System (BTS).

This module provides a layer between Python and Debian's BTS. It provides
methods to query the BTS using the BTS' SOAP interface, and the Bugreport class
which represents a bugreport from the BTS.
é    )ÚannotationsN)ÚIterableÚMapping)Údatetime)ÚAnyz/etc/ssl/ca-debianÚSSL_CERT_DIRz(https://bugs.debian.org/cgi-bin/soap.cgizDebbugs/SOAP/V1zhttps://bugs.debian.org/iô  é   é   é   é   é   é   é   )ÚcriticalÚgraveÚseriousÚ	importantÚnormalÚminorÚwishlistc                  ór   • \ rS rSrSrSS jrSS jrSS jrSS jrSS jr	SS jr
SS	 jrSS
 jrSS jrSrg)Ú	Bugreporté5   aÐ  Represents a bugreport from Debian's Bug Tracking System.

A bugreport object provides all attributes provided by the SOAP interface.
Most of the attributes are strings, the others are marked.

Attributes
----------
bug_num : int
    The bugnumber
severity : str
    Severity of the bugreport
tags : list[str]
    Tags of the bugreport
subject : str
    The subject/title of the bugreport
originator : str
    Submitter of the bugreport
mergedwith : list[int]
    List of bugnumbers this bug was merged with
package : str
    Package of the bugreport
source : str
    Source package of the bugreport
date : datetime
    Date of bug creation
log_modified : datetime
    Date of update of the bugreport
done : boolean
    Is the bug fixed or not
done_by : str | None
    Name and Email or None
archived : bool
    Is the bug archived or not
unarchived : bool
    Was the bug unarchived or not
fixed_versions : list[str]
    List of versions, can be empty even if bug is fixed
found_versions : list[str]
    List of version numbers where bug was found
forwarded : str
    A URL or email address
blocks: list[int]
    List of bugnumbers this bug blocks
blockedby : list[int]
    List of bugnumbers which block this bug
pending : str
    Either 'pending' or 'done'
msgid : str
    Message ID of the bugreport
owner : str
    Who took responsibility for fixing this bug
location : str
    Either 'db-h' or 'archive'
affects : list[str]
    List of Packagenames
summary : str
    Arbitrary text
c                óh   • U   U   U   U   U   U   U   U   U   U   U   U   U   U   U   U   U   U   U   U   U   U   U   U   U   g ©N© )Úselfs    Ú5/usr/lib/python3/dist-packages/debianbts/debianbts.pyÚ__init__ÚBugreport.__init__q   sM   € ÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÚó    c                ól   • SR                  S U R                  R                  5        5       5      nUS-   $ )zPrepare string representation.Ú
c              3  ó4   #   • U  H  u  pU S U 3v •  M     g7f)z: Nr   )Ú.0ÚkeyÚvalues      r   Ú	<genexpr>Ú$Bugreport.__str__.<locals>.<genexpr>•   s!   é € ð 
Ú0E¡* #ˆsˆe�2�e�WÕÒ0Eùs   ‚)ÚjoinÚ__dict__Úitems)r   Úss     r   Ú__str__ÚBugreport.__str__“   s5   € à�I‰Iñ 
Ø04·±×0CÑ0CÔ0Eó
ó 
ˆð �4‰xˆr!   c                óD   • U R                  5       UR                  5       :  $ )a�  Compare a bugreport with another.

The more open and urgent a bug is, the greater the bug is:

    outstanding > resolved > archived

    critical > grave > serious > important > normal > minor > wishlist.

Openness always beats urgency, eg an archived bug is *always* smaller
than an outstanding bug.

This sorting is useful for displaying bugreports in a list and sorting
them in a useful way.

©Ú
_get_value©r   Úothers     r   Ú__lt__ÚBugreport.__lt__š   s   € ð  �‰Ó  5×#3Ñ#3Ó#5Ñ5Ð5r!   c                ó.   • U R                  U5      (       + $ )zCheck if object <= other.)Ú__gt__r3   s     r   Ú__le__ÚBugreport.__le__¬   ó   € à—;‘;˜uÓ%Ô%Ð%r!   c                óD   • U R                  5       UR                  5       :„  $ )zCheck if object > other.r1   r3   s     r   r8   ÚBugreport.__gt__°   s   € à�‰Ó  5×#3Ñ#3Ó#5Ñ5Ð5r!   c                ó.   • U R                  U5      (       + $ )zCheck if object >= other.)r5   r3   s     r   Ú__ge__ÚBugreport.__ge__´   r;   r!   c                óz   • [        U[        5      (       d  [        $ U R                  5       UR                  5       :H  $ )zCheck if object == other.)Ú
isinstancer   ÚNotImplementedr2   r3   s     r   Ú__eq__ÚBugreport.__eq__¸   s0   € ä˜%¤×+Ñ+Ü!Ð!Ø�‰Ó  E×$4Ñ$4Ó$6Ñ6Ð6r!   c                ód   • [        U[        5      (       d  [        $ U R                  U5      (       + $ )zCheck if object != other.)rB   r   rC   rD   r3   s     r   Ú__ne__ÚBugreport.__ne__¾   s'   € ä˜%¤×+Ñ+Ü!Ð!Ø—;‘;˜uÓ%Ô%Ð%r!   c                ó†   • U R                   (       a  SnOU R                  (       a  SnOSnU[        U R                     -  nU$ )Nr   é
   é   )ÚarchivedÚdoneÚ
SEVERITIESÚseverity)r   Úvals     r   r2   ÚBugreport._get_valueÄ   s9   € Ø�=�=à‰CØ�Y�Yà‰Cð ˆCØŒz˜$Ÿ-™-Ñ(Ñ(ˆØˆ
r!   r   N)ÚreturnÚNone)rR   Ústr)r4   r   rR   Úbool)r4   ÚobjectrR   rU   )rR   Úint)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r   r.   r5   r9   r8   r?   rD   rG   r2   Ú__static_attributes__r   r!   r   r   r   5   s6   † ñ9ôvôDô6ô$&ô6ô&ô7ô&÷r!   r   c                ó@  • [        U [        [        45      (       d  U /nO[        U 5      n/ n[        S[	        U5      [
        5       HS  nXU[
        -    n[        S[         S3U5      nUR                  5        H  nUR                  [        U5      5        M     MU     U$ )zàReturn a list of Bugreport objects.

Given a list of bug numbers this method returns a list of Bugreport
objects.

Parameters
----------
nrs
    The bugnumbers

Returns
-------
list[Bugreport]
    list of Bugreport objects

r   Ú{z}get_status)rB   ÚlistÚtupleÚrangeÚlenÚ
BATCH_SIZEÚ_soap_client_callÚNSÚvaluesÚappendÚ_parse_status)ÚnrsÚnumbersÚbugsÚiÚslice_Úresult_dictÚbugs          r   Ú
get_statusrq   Ò   s‘   € ô( �cœD¤%˜=×)Ñ)Ø�%‰ä�s“)ˆð €DÜ�1”c˜'“l¤JÖ/ˆØ˜Q¤™^Ð,ˆÜ'¨"¬R¨D°Ð(=¸vÓFˆØ×%Ñ%Ö'ˆCØ�K‰Kœ cÓ*Ö+ó (ñ 0ð
 €Kr!   c                ó¼   • Uc  / n[        S[         S3U /UQ76 nUR                  5        VVs0 s H  u  p4U[        [	        [
        U5      5      _M!     snn$ s  snnf )a  Get buglists by usertags.

Parameters
----------
email
tags
    If tags are given the dictionary is limited to the matching tags, if no
    tags are given all available tags are returned.

Returns
-------
dict[str, list[int]]
    a mapping of usertag -> buglist

r_   z}get_usertag)re   rf   r,   r`   ÚmaprW   )ÚemailÚtagsÚresultÚkÚvs        r   Úget_usertagry   ö   sX   € ð& �|Øˆä ¤B 4 }Ð5°uÐD¸tÒD€FØ-3¯\©\¬^Ô<ª^¡T QˆAŒt”Cœ˜Q“KÓ Ò ©^Ò<Ð<ùÓ<s   ®&Ac                óÒ  • [        S[         S3U 5      n/ nU HÊ  nUS   nUS   n[        US   5      n/ n[        R                  R                  [        R                  R                  S9nUR                  UR                  5       5        UR                  S5        UR                  UR                  5       5        UR                  5       n	UUUUU	S.n
UR                  U
5        MÌ     U$ )	aN  Get Buglogs.

A buglog is a dictionary with the following mappings:

* "header": `string`
* "body": `string`
* "attachments": `list`
* "msg_num": `int`
* "message": `email.message.Message`

Parameters
----------
nr
    the bugnumber

Returns
-------
list[dict[str, str | list[Any] | int | email.message.Message]]
    list of buglogs

r_   z}get_bug_logÚheaderÚbodyÚmsg_num)Úpolicys   

)r{   r|   r}   ÚattachmentsÚmessage)re   rf   rW   rt   Ú
feedparserÚBytesFeedParserr~   ÚSMTPÚfeedÚencodeÚcloserh   )Únrr,   ÚbuglogsÚitemr{   r|   r}   r   Úmail_parserr€   Úbuglogs              r   Úget_bug_logrŒ     sè   € ô0  ¤2 $ mÐ4°bÓ9€EØ€GÛˆØ�h‘ˆØ�F‰|ˆÜ�d˜9‘oÓ&ˆà!#ˆä×&Ñ&×6Ñ6Ü—<‘<×$Ñ$ð 7ð 
ˆð 	×Ñ˜Ÿ™›Ô)Ø×Ñ˜Ô!Ø×Ñ˜Ÿ™›Ô'Ø×#Ñ#Ó%ˆð ØØØ&Øñ
ˆð 	�‰�vÖñ/ ð0 €Nr!   c                ó\   • [        S[         S3U 5      n[        [        [        U5      5      $ )a  Return the newest bugs.

This method can be used to query the BTS for the n newest bugs.

Parameters
----------
amount
    the number of desired bugs. E.g. if `amount` is 10 the method will
    return the 10 latest bugs.

Returns
-------
list[int]
    the bugnumbers

r_   z}newest_bugs©re   rf   r`   rs   rW   )Úamountrv   s     r   Únewest_bugsr�   E  s+   € ô"  ¤B 4 }Ð5°vÓ>€FÜ””C˜Ó Ó!Ð!r!   c                 ó\   • [        S[         S3U 5      n[        [        [        U5      5      $ )a  Get list of bugs matching certain criteria.

The conditions are defined by the keyword arguments.

Parameters
----------
**kwargs
    Possible keywords are:

    * `package`: bugs for the given package
    * `submitter`: bugs from the submitter
    * `maint`: bugs belonging to a maintainer
    * `src`: bugs belonging to a source package
    * `severity`: bugs with a certain severity
    * `status`: can be either "done", "forwarded", or "open"
    * `tag`: see http://www.debian.org/Bugs/Developer#tags for available
      tags
    * `owner`: bugs which are assigned to `owner`
    * `bugs`: takes single int or list of bugnumbers, filters the list
      according to given criteria
    * `correspondent`: bugs where `correspondent` has sent a mail to
    * `archive`: takes a string: "0" (unarchived), "1" (archived) or "both"
      (un- and archived). if omitted, only returns un-archived bugs.

Returns
-------
list[int]
    the bugnumbers

Examples
--------
    >>> get_bugs(package='gtk-qt-engine', severity='normal')
    [12345, 23456]

r_   z	}get_bugsrŽ   )Úkwargsrv   s     r   Úget_bugsr“   Z  s,   € ôL  ¤B 4 zÐ2°FÓ;€FÜ””C˜Ó Ó!Ð!r!   c                ó@  • [        5       nS H  n[        XX   5        M     [        R                  " [	        U S   5      5      Ul        [        R                  " [	        U S   5      5      Ul        [        U S   5      R                  5       Ul	        [        U S   5      Ul        UR                  (       a  U S   OSUl        [        U S   5      Ul        [        U S   5      Ul        [        U S	   5      Ul        [        U S
   5      R                  5        Vs/ s H  n[        U5      PM     snUl        [        U S   5      R                  5        Vs/ s H  n[        U5      PM     snUl        [        U S   5      R                  5        Vs/ s H  n[        U5      PM     snUl        [        U S   5      R                  S5       Vs/ s H  oD(       d  M  UPM     nnU Vs/ s H  ofR)                  5       PM     snUl        U$ s  snf s  snf s  snf s  snf s  snf )z¼Return a bugreport object from a given status xml element.

Parameters
----------
bug_el
    a dict containing a debbugs bug description

Returns
-------
Bugreport
    a Bugreport object

)Ú
originatorÚsubjectÚmsgidÚpackagerO   ÚownerÚsummaryÚlocationÚsourceÚpendingÚ	forwardedÚfound_versionsÚfixed_versionsÚdateÚlog_modifiedru   rM   NrL   Ú
unarchivedÚbug_numÚ
mergedwithÚ	blockedbyÚblocksÚaffectsÚ,)r   Úsetattrr   ÚutcfromtimestampÚfloatr¡   r¢   rT   Úsplitru   Ú_parse_boolrM   Údone_byrL   r£   rW   r¤   r¥   r¦   r§   Ústripr¨   )Úbug_elrp   Úfieldrm   Ú_fr¨   Úas          r   ri   ri   „  s»  € ô ‹+€Cóˆô 	�˜F™MÖ*ñô" ×(Ò(¬¨v°f©~Ó)>Ó?€C„HÜ×0Ò0´°v¸nÑ7MÓ1NÓO€CÔÜ�6˜&‘>Ó"×(Ñ(Ó*€C„HÜ˜6 &™>Ó*€C„HØ$'§H§H�&˜’.°$€C„KÜ˜v jÑ1Ó2€C„LÜ  ¨Ñ!5Ó6€C„NÜ�f˜YÑ'Ó(€C„KÜ&)¨&°Ñ*>Ó&?×&EÑ&EÔ&GÓHÒ&G ”c˜!–fÑ&GÑH€C„NÜ%(¨°Ñ)<Ó%=×%CÑ%CÔ%EÓFÒ%E ”S˜–VÑ%EÑF€C„MÜ"% f¨XÑ&6Ó"7×"=Ñ"=Ô"?Ó@Ò"?˜Q”#�a–&Ñ"?Ñ@€C„Jä  yÑ 1Ó2×8Ñ8¸Ô=ÓDÒ=�bÃ�rÑ=€GÐDÙ&-Ó.¢g —7‘7–9¡gÑ.€C„Kð
 €Jùò IùÚFùÚ@ùâDùÚ.s$   ÄHÅHÆHÇ

HÇHÇ$Hc                ó   • U S;  $ )z�Parse a boolean value, according to Perl's rules.

Parameters
----------
x
    the string to parse

Returns
-------
bool
    the parsed value

)Ú Ú0r   )Úxs    r   r®   r®   »  s   € ð �IÑÐr!   r›   c                ó   • U [         S'   g)zvSet proxy for SOAP client.

You must use this method after import to set the proxy.

Parameters
----------
proxy_arg

ÚproxyN©Ú_soap_client_kwargs)Ú	proxy_args    r   Úset_soap_proxyr¾   Ñ  s   € ð $-Ô˜Ò r!   c                ó   • U [         S'   g)z‘Set location URL for SOAP client.

You may use this method after import to override the default URL.

Parameters
----------
url
    default URL

r›   Nr»   )Úurls    r   Úset_soap_locationrÁ   Þ  s   € ð '*Ô˜
Ò#r!   c                 ó   • [         $ )zWReturn SOAP client kwargs.

Returns
-------
dict[str, str]
    the SOAP client kwargs

r»   r   r!   r   Úget_soap_client_kwargsrÃ   ì  s
   € ô Ðr!   c           	     ó  • / nS[         ;   a=  UR                  [        R                  R	                  [         S   [         S   S.S95        [        R                  R
                  " U6 n[        X5      n[        R                  SU5         UR                  [        R                  R                  [         S   SSSS	.US
95       nUR                  5       nSSS5        [        R                  SW5        [%        U5      $ ! , (       d  f       N/= f! [        R                  R                   aU  nUR                  R                  SS5      R!                  S5      (       a  UR"                  R                  5       n SnANŸe SnAff = f)zkPerform a SOAP request.

Parameters
----------
method_name
    the method name
*args

Returns
-------
Any

rº   )ÚhttpÚhttps)ÚproxieszRequest: %sr›   ÚPOSTztext/xml; charset="utf-8"r¶   )úContent-TypeÚ
SOAPAction)rÀ   ÚmethodÚheadersÚdataNrÉ   ztext/xmlzResponse: %s)r¼   rh   ÚurllibÚrequestÚProxyHandlerÚbuild_openerÚ_encode_soap_requestÚloggerÚdebugÚopenÚRequestÚreadÚerrorÚ	HTTPErrorrÌ   ÚgetÚ
startswithÚfpÚ_decode_soap_response)Úmethod_nameÚargsÚhandlersÚopenerÚencoded_requestÚfÚencoded_responseÚes           r   re   re   ø  sG  € ð €HØÔ%Ó%Ø�‰Ü�N‰N×'Ñ'ä/°Ñ8Ü0°Ñ9ñð (ð ô	
ô �^‰^×(Ò(¨(Ð3€Fä*¨;Ó=€OÜ
‡L�L� Ô0ðØ�[‰[Ü�N‰N×"Ñ"Ü'¨
Ñ3Øà$?Ø"$ñð %ð #ð ô

ð Ø Ÿv™v›xÐ÷

ô& ‡L�L�Ð!1Ô2Ü Ð!1Ó2Ð2÷)

õ 

ûô �<‰<×!Ñ!ó Ø�9‰9�=‰=˜¨Ó,×7Ñ7¸
×CÑCà Ÿt™tŸy™y›{Õàûðús=   Â	9D ÃC<ÃD Ã<
D
ÄD Ä
D ÄF Ä+A
E;Å:E;Å;F z)http://schemas.xmlsoap.org/soap/envelope/z)http://schemas.xmlsoap.org/soap/encoding/z http://www.w3.org/2001/XMLSchemaz)http://www.w3.org/2001/XMLSchema-instancec                ó<  • [         R                  " S[         S35      nUR                  S[         S3[        5        [         R
                  " US[         S35      n[         R
                  " X05      nU H  n[        USU5        M     [         R                  " U5      $ )z Build a SOAP request.

Parameters
----------
method_name
    the function to call (including namespace)
args
    the function arguments

Returns
-------
bytes

r_   z	}Envelopez}encodingStylez}BodyÚarg)ÚETÚElementÚSOAPENVÚsetÚSOAPENCÚ
SubElementÚ_encode_valueÚtostring)rÞ   rß   Úrootr|   Úmsgrç   s         r   rÒ   rÒ   4  s~   € ô �:Š:˜œ7˜) :Ð.Ó/€DØ‡H�Hˆr”'�˜/Ð*¬GÔ4Ü�=Š=˜ ¤G 9¨FÐ3Ó4€DÜ
�-Š-˜Ó
*€CÛˆÜ�c˜5 #Ö&ñ ä�;Š;�tÓÐr!   c                ó$  • [         R                  " U 5      nUR                  S[         S[         S35      nUb0  UR                  S5      nUb  UR                  OSn[        SU 35      eUR                  S[         S35      nUc  g[        U5      $ )	z¥Extract the returned value from a SOAP response.

Parameters
----------
response
    the response from the SOAP service

Returns
-------
Any
    the returned value

r_   z}Body/{z}FaultNÚfaultstringÚUnknownzSOAP fault: z}Body/*[1]/*[1])rè   Ú
fromstringÚfindrê   ÚtextÚRuntimeErrorÚ_decode_value)Úresponserð   ÚfaultÚ
message_elr€   Úanswers         r   rÝ   rÝ   L  s�   € ô �=Š=˜Ó"€Dà�I‰I˜œ7˜) 9¬W¨I°WÐ=Ó>€EØÑØ—Z‘Z Ó.ˆ
Ø%/Ñ%;�*—/’/ÀˆÜ˜\¨'¨Ð3Ó4Ð4à�Y‰Y˜œG˜9Ð$4Ð5Ó6€FØ�~ØÜ˜Ó Ð r!   c           
     óà  • [        U[        5      (       aZ  [        R                  " X5      nUR	                  S[
         S3[        R                  " [        S5      5        [        U5      Ul        g
[        U[        5      (       ac  [        R                  " X5      nUR	                  S[
         S3[        R                  " [        S5      5        [        [        U5      5      Ul        g
[        U[        5      (       aÞ  [        U[        5      (       a*  UR                  5        VVs/ s H  oD  H  oUPM     M     nnn[        R                  " X5      nUR	                  S[
         S3[        R                  " [        S5      5        UR	                  S[         S3[        R                  " [        S[        U5      -  5      5        U H  n[        USU5        M     g
[!        S	U< 35      es  snnf )zÀAppend the encoded representation of a value to the parent element.

Parameters
----------
parent
    the parent element
name
    the tag of the new element
value
    the value to be encoded

r_   ú}typeÚstringrW   ÚArrayz
}arrayTypezanyType[%d]r‰   zCan't encode N)rB   rT   rè   rí   rë   ÚXSIÚQNameÚXSDr÷   rW   r   r   r,   rì   rc   rî   Ú
ValueError)ÚparentÚnamer'   ÚelÚpairr¸   s         r   rî   rî   h  se  € ô �%œ×ÑÜ�]Š]˜6Ó(ˆØ
�‰�”C�5˜Ð¤§¢¬#¨xÓ!8Ô9Ü�e“*ˆ�Ü	�Eœ3×	Ñ	ä�]Š]˜6Ó(ˆØ
�‰�”C�5˜Ð¤§¢¬#¨uÓ!5Ô6Ü”c˜%“j“/ˆ�Ü	�Eœ8×	$Ñ	$Ü�eœW×%Ñ%à#(§;¡;¤=Ô?¢=˜4»$°Q’Q¹$‘Q¡=ˆEÑ?Ü�]Š]˜6Ó(ˆØ
�‰�”C�5˜Ð¤§¢¬'°7Ó!;Ô<Ø
�‰Ø”�	˜Ð%Ü�HŠH”S˜-¬#¨e«*Ñ4Ó5ô	
ó ˆAÜ˜"˜f aÖ(ò ô ˜=¨©	Ð2Ó3Ð3ùó @s   Ä%G*c                óº  • U R                  S[         S35      nU(       a  XR                  S5      S-   S nU R                  =(       d    SnUS;   a  U$ US:X  a$  [        R
                  " U5      R                  S	S
S9$ US:X  a  U  Vs/ s H  n[        U5      PM     sn$ US:X  aE  [        S U  5       5      (       d   eU  Vs0 s H  n[        US   5      [        US   5      _M      sn$ Uc0  U  Vs0 s H"  n[        UR                  5      [        U5      _M$     sn$ [        S[        R                  " U 5      R                  5        35      es  snf s  snf s  snf )aQ  Decode an XML encoded representation.

Note: Perl does not have separate types for strings and numbers.
The server assigns a type based on heuristics. To get consistent
behavior, this function returns all numeric values as strings.

Parameters
----------
element
    the XML element to decode

Returns
-------
Any
    the decoded value

r_   rÿ   Ú:r   Nr¶   )r   rW   r¬   Úbase64Binaryzutf-8Úreplace)Úerrorsr  ÚMapc              3  ó>   #   • U  H  n[        U5      S :H  v •  M     g7f)r   N)rc   )r%   r‰   s     r   r(   Ú _decode_value.<locals>.<genexpr>¯  s   é € Ð6ªg d”3�t“9 –>ªgùs   ‚r   zCan't decode )rÚ   r  rö   r÷   Úbase64Ú	b64decodeÚdecoderù   ÚallÚ_remove_namespaceÚtagr  rè   rï   )ÚelementÚtypr÷   r  r‰   s        r   rù   rù   Ž  sa  € ð$ �+‰+˜œ3˜%˜vÐ&Ó
'€CÞ
ð —(‘(˜3“- !Ñ#Ð%Ð&ˆà�<‰<×˜2€DØ
Ð(Ó(ØˆØ	�Ó	Ü×Ò Ó%×,Ñ,¨W¸YÐ,ÐGÐGØ	�‹Ù,3Ó4ªG b”˜bÖ!©GÑ4Ð4Ø	�‹ÜÑ6©gÓ6×6Ñ6Ð6Ð6áGNó
ÚGN¸tŒM˜$˜q™'Ó"¤M°$°q±'Ó$:Ò:Áwñ
ð 	
ð 
‰ñ  ó
â�ô ˜dŸh™hÓ'¬°tÓ)<Ò<Ùñ
ð 	
ô
 ˜=¬¯ª°WÓ)=×)DÑ)DÓ)FÐ(GÐHÓIÐIùò 5ùò
ùò
s   ÂEÃ%EÃ2)Ec                ó.   • X R                  S5      S-   S $ )z-Remove the namespace from an ElementTree tag.Ú}r   N)rö   )r  s    r   r  r  ¼  s   € à�x‰x˜‹}˜qÑ Ð"Ð#Ð#r!   )rj   z!int | list[int] | tuple[int, ...]rR   zlist[Bugreport]r   )rt   rT   ru   z"None | list[str] | tuple[str, ...]rR   zdict[str, list[int]])r‡   rW   rR   z>list[dict[str, str | list[Any] | int | email.message.Message]])r�   rW   rR   ú	list[int])r’   zstr | int | list[int]rR   r  )r±   zdict[str, Any]rR   r   )r¸   rT   rR   rU   )r½   rT   rR   rS   )rÀ   rT   rR   rS   )rR   zdict[str, str])rÞ   rT   rß   r   rR   r   )rÞ   rT   rß   zIterable[Any]rR   Úbytes)rú   r  rR   r   )r  ú
ET.Elementr  rT   r'   r   rR   rS   )r  r  rR   r   )r  rT   rR   rT   )7r\   Ú
__future__r   r  Úemail.feedparserrt   Úemail.policyÚloggingÚosÚurllib.requestrÎ   Úxml.etree.ElementTreeÚetreeÚElementTreerè   Úcollections.abcr   r   r   Útypingr   Ú	getLoggerrX   rÓ   Úca_pathÚpathÚisdirÚenvironÚURLrf   ÚBTS_URLrd   rN   r   rq   ry   rŒ   r�   r“   ri   r®   r¼   r¾   rÁ   rÃ   re   rê   rì   r  r  rÒ   rÝ   rî   rù   r  r   r!   r   Ú<module>r1     su  ðñõ #ã Û Û Û Û 	Û ß "Ð "ß -Ý Ý à	×	Ò	˜8Ó	$€ð €Ø‡7�7‡=�=�×ÑØ!(€B‡J�Jˆ~Ñð
 1€Ø€Ø
$€à€
ð ØØØØØØñ€
÷Zñ Zðz!Ø	*ð!àô!ðL 04ð=Øð=à
,ð=ð õ=ð42Øð2àCô2ôj"ð*'"Ø#ð'"àô'"ôT4ônð$ �ðÐ ô

-ô*ô	ô23ðl 6€Ø
5€Ø(€Ø1€ôô0!ô8#4ôL+Jõ\$r!   