ó
    Ý)Ðg g  ã                   óH  • S r SSKrSSKrSSKrSSKJrJrJrJrJ	r	J
r
JrJrJrJrJrJrJrJrJrJr   SSKr \R,                  " 5         Sr SSKr\R6                  r SSKr\R<                  rSSK r!\!RD                  RF                  r# " S S	\$5      r% " S
 S\&5      r' " S S\'5      r( " S S\'5      r)\(       a   " S S\(5      r*O " S S\)5      r*S r+ " S S5      r, " S S5      r- " S S\-5      r.S r/\/" 5       r0S'S jr1C/S r2S r3Sr4\Rj                  " \45      r6\Rj                  " \4Ro                  S5      5      r8 S'S  jr9S! r:S(S" jr;S# r<S$ r=S)S% jr>S& r?g! \R0                   a    Sr GN%f = f! \ a    Sr GN4f = f! \ a    S r GN3f = f! \ a    S r GN2f = f)*z1Facilities to deal with Debian-specific metadata é    N)ÚAnyÚAnyStrÚBinaryIOÚDictÚIterableÚIteratorÚ	GeneratorÚListÚMatchÚNoReturnÚOptionalÚPatternÚTextÚTextIOÚTupleÚUnionTFc                  ó   • [        S5      e©Nz³Built-in sha1 implementation not found; cannot use hashlib implementation because it depends on OpenSSL, which may not be linked with this library due to license incompatibilities©ÚNotImplementedError©Úargss    Ú7/usr/lib/python3/dist-packages/debian/debian_support.pyÚnew_sha1r   >   ó   € ä!ð!ó"ð 	"ó    c                  ó   • [        S5      er   r   r   s    r   Ú
new_sha256r   M   r   r   c                   óN   ^ • \ rS rSrSrU 4S jrS\4S jrS\4S jrS r	Sr
U =r$ )	Ú
ParseErroré\   z–An exception which is used to signal a parse failure.

Attributes:

filename - name of the file
lineno - line number in the file
msg - error message

c                 ó~   >• [        U[        5      (       d   eXl        X l        X0l        [
        [        U ]  U 5        g ©N)Ú
isinstanceÚintÚfilenameÚlinenoÚmsgÚsuperr    Ú__init__)Úselfr&   r'   r(   Ú	__class__s       €r   r*   ÚParseError.__init__g   s6   ø€ ô ˜&¤#×&Ñ&Ð&Ð&Ø ŒØŒØŒÜŒj˜$Ñ(¨Õ.r   Úreturnc                 ó   • U R                   $ r#   )r(   ©r+   s    r   Ú__str__ÚParseError.__str__s   s   € Ø�x‰xˆr   c                 óN   • SU R                   U R                  U R                  4-  $ )NzParseError(%r, %d, %r)©r&   r'   r(   r0   s    r   Ú__repr__ÚParseError.__repr__v   s(   € Ø'¨4¯=©=Ø+/¯;©;Ø+/¯8©8ð+5ñ 5ð 	5r   c                 óŽ   • UR                  SU R                  U R                  U R                  4-  5        UR	                  5         g)z0Writes a machine-parsable error message to file.z
%s:%d: %s
N)Úwriter&   r'   r(   Úflush)r+   Úfiles     r   Ú	print_outÚParseError.print_out{   s1   € ð 	�
‰
�= D§M¡M°4·;±;ÀÇÁÐ#IÑIÔJØ�
‰
�r   r4   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r*   Ústrr1   r5   r;   Ú__static_attributes__Ú__classcell__©r,   s   @r   r    r    \   s/   ø† ñõ
/ð˜ô ð5˜#ô 5÷
ð r   r    c                   óÊ   ^ • \ rS rSrSr\R                  " S5      rSrS r	S r
U 4S jrU 4S jrSS
 jrS	\4S jrS	\4S jrS rS rS rS rS rS rS rS	\4S jrSrU =r$ )ÚBaseVersioné‚   aÈ  Base class for classes representing Debian versions

It doesn't implement any comparison, but it does check for valid versions
according to Section 5.6.12 in the Debian Policy Manual.  Since splitting
the version into epoch, upstream_version, and debian_revision components is
pretty much free with the validation, it sets those fields as properties of
the object, and sets the raw version to the full_version property.  A
missing epoch or debian_revision results in the respective property set to
None.  Setting any of the properties results in the full_version being
recomputed and the rest of the properties set from that.

It also implements __str__, just returning the raw version given to the
initializer.
zd^((?P<epoch>\d+):)?(?P<upstream_version>[A-Za-z0-9.+:~-]+?)(-(?P<debian_revision>[A-Za-z0-9+.~]+))?$)Úfull_versionÚepochÚupstream_versionÚdebian_revisionÚdebian_versionc                 óP   • [        U[        5      (       a  [        U5      nXl        g r#   )r$   rG   rB   rI   ©r+   Úversions     r   r*   ÚBaseVersion.__init__š   s   € ä�gœ{×+Ñ+Ü˜'“lˆGØ#Õr   c                 ó^  • U R                   R                  U5      nU(       d  [        SU-  5      eUR                  S5      c#  SUR                  S5      ;   a  [        SU-  5      eXl        UR                  S5      U l        UR                  S5      U l        UR                  S5      U l        g )NzInvalid version string %rrJ   Ú:rK   rL   )Úre_valid_versionÚmatchÚ
ValueErrorÚgroupÚ_BaseVersion__full_versionÚ_BaseVersion__epochÚ_BaseVersion__upstream_versionÚ_BaseVersion__debian_revision)r+   rP   Úms      r   Ú_set_full_versionÚBaseVersion._set_full_version    s›   € à×!Ñ!×'Ñ'¨Ó0ˆÞÜÐ8¸7ÑBÓCÐCð �7‰7�7ÓÑ#¨¨q¯w©wÐ7IÓ/JÓ(JÜÐ8¸7ÑBÓCÐCð &ÔØ—w‘w˜wÓ'ˆŒØ"#§'¡'Ð*<Ó"=ˆÔØ!"§¡Ð):Ó!;ˆÕr   c                 ó�  >• XR                   ;  a  [        [        U ]  X5        g US:X  a  SnUS:X  a  U R	                  [        U5      5        g Ub  [        U5      nSU-  n[        X5      n[        XU5         U R                  5         g ! [         a1    [        XU5        U R                  5         [        SU< SU< S35      ef = f)NrM   rL   rI   ú_BaseVersion__%szSetting z to z results in invalid version)
Úmagic_attrsr)   rG   Ú__setattr__r]   rB   ÚgetattrÚsetattrÚ_update_full_versionrV   )r+   ÚattrÚvalueÚprivateÚ	old_valuer,   s        €r   rb   ÚBaseVersion.__setattr__°   sÅ   ø€ à×'Ñ'Ó'Ü”+˜tÑ0°Ô=Øð Ð#Ó#Ø$ˆDà�>Ó!Ø×"Ñ"¤3 u£:Õ.àÑ Ü˜E›
�Ø(¨4Ñ/ˆGÜ Ó.ˆIÜ�D 5Ô)ð2Ø×)Ñ)Õ+øÜó 2ä˜ yÔ1Ø×)Ñ)Ô+Ý Û$(«%ð"1ó 2ð 2ð	2ús   Á9B
 Â
;Cc                 óx   >• XR                   ;  a  [        [        U ]  U5      $ US:X  a  SnSU-  n[	        X5      $ )NrM   rL   r`   )ra   r)   rG   Ú__getattribute__rc   )r+   rf   rh   r,   s      €r   Ú__getattr__ÚBaseVersion.__getattr__Ë   sF   ø€ à×'Ñ'Ó'Üœ dÑ<¸TÓBÐBð Ð#Ó#Ø$ˆDà$ tÑ+ˆÜ�tÓ%Ð%r   r.   c                 ó²   • SnU R                   b  XR                   S-   -  nXR                  -  nU R                  (       a  USU R                  -   -  nXl        g )NÚ rS   Ú-)rY   rZ   r[   rI   rO   s     r   re   Ú BaseVersion._update_full_version×   sT   € ØˆØ�<‰<Ñ#Ø—|‘| cÑ)Ñ)ˆGØ×*Ñ*Ñ*ˆØ×!×!Ø�s˜T×3Ñ3Ñ3Ñ3ˆGØ#Õr   c                 ó8   • U R                   b  U R                   $ S$ )Nrp   )rI   r0   s    r   r1   ÚBaseVersion.__str__à   s   € Ø$(×$5Ñ$5Ñ$Aˆt× Ñ ÐIÀrÐIr   c                 ó>   • U R                   R                  < SU < S3$ )Nz('z'))r,   r=   r0   s    r   r5   ÚBaseVersion.__repr__ã   s   € Ø!Ÿ^™^×4Ô4³dÐ;Ð;r   c                 ó   • [         er#   r   ©r+   Úothers     r   Ú_compareÚBaseVersion._compareæ   s   € ä!Ð!r   c                 ó*   • U R                  U5      S:  $ ©Nr   ©rz   rx   s     r   Ú__lt__ÚBaseVersion.__lt__í   ó   € à�}‰}˜UÓ# aÑ'Ð'r   c                 ó*   • U R                  U5      S:*  $ r}   r~   rx   s     r   Ú__le__ÚBaseVersion.__le__ñ   ó   € à�}‰}˜UÓ# qÑ(Ð(r   c                 ó*   • U R                  U5      S:H  $ r}   r~   rx   s     r   Ú__eq__ÚBaseVersion.__eq__õ   r…   r   c                 ó*   • U R                  U5      S:g  $ r}   r~   rx   s     r   Ú__ne__ÚBaseVersion.__ne__ù   r…   r   c                 ó*   • U R                  U5      S:¬  $ r}   r~   rx   s     r   Ú__ge__ÚBaseVersion.__ge__ý   r…   r   c                 ó*   • U R                  U5      S:„  $ r}   r~   rx   s     r   Ú__gt__ÚBaseVersion.__gt__  r�   r   c                 ó*   • [        [        U 5      5      $ r#   )ÚhashrB   r0   s    r   Ú__hash__ÚBaseVersion.__hash__  s   € Ü”C˜“I‹Ðr   )Ú__debian_revisionÚ__epochÚ__full_versionÚ__upstream_versionrI   )r.   N)r=   r>   r?   r@   rA   ÚreÚcompilerT   ra   r*   r]   rb   rm   re   rB   r1   r5   rz   r   rƒ   r‡   rŠ   r�   r�   r%   r”   rC   rD   rE   s   @r   rG   rG   ‚   sŒ   ø† ñð —z’zð	4ó5Ðð-€Kò$ò<õ 2õ6
&ô$ðJ˜ô Jð<˜#ô <ò"ò(ò)ò)ò)ò)ò(ð˜#÷ ò r   rG   c                   ó2   ^ • \ rS rSrSrU 4S jrS rSrU =r$ )ÚAptPkgVersioni	  zARepresents a Debian package version, using apt_pkg.VersionComparec                 óX   >• [         (       d  [        S5      e[        [        U ]  U5        g )Nz5apt_pkg not available; install the python-apt package)Ú_have_apt_pkgr   r)   r�   r*   )r+   rP   r,   s     €r   r*   ÚAptPkgVersion.__init__  s)   ø€ çŠ}Ü%ð ';ó <ð <äŒm˜TÑ+¨GÕ4r   c                 óT   • [         R                  " [        U 5      [        U5      5      $ r#   )Úapt_pkgÚversion_comparerB   rx   s     r   rz   ÚAptPkgVersion._compare  s   € ä×&Ò&¤s¨4£y´#°e³*Ó=Ð=r   © )	r=   r>   r?   r@   rA   r*   rz   rC   rD   rE   s   @r   r�   r�   	  s   ø† ÙKõ5÷>ð >r   r�   c                   óÞ   • \ rS rSrSr\R                  " S5      r\R                  " S5      r\R                  " S5      r	\R                  " S5      r
S r\S 5       r\S	 5       r\S
 5       rSrg)ÚNativeVersioni  zBRepresents a Debian package version, with native Python comparisonz\d+|\D+z\d+z\dz[A-Za-z]c                 ó(  • Uc  g[        U[        5      (       d   [        [        U5      5      n[	        U R
                  =(       d    S5      n[	        UR
                  =(       d    S5      nX4:  a  gX4:”  a  gU R                  U R                  =(       d    SUR                  =(       d    S5      nUS:w  a  U$ U R                  U R                  =(       d    SUR                  =(       d    S5      $ ! [         a  n[        SU< SU< 35      eS nAff = f)Né   zCouldn't convert z to BaseVersion: Ú0éÿÿÿÿr   )	r$   rG   rB   rV   r%   rJ   Ú_version_cmp_partrK   rL   )r+   ry   ÚeÚlepochÚrepochÚress         r   rz   ÚNativeVersion._compare"  sõ   € ð ‰=Øä˜%¤×-Ñ-ð/Ü#¤C¨£JÓ/�ô
 �T—Z‘Z×& 3Ó'ˆÜ�U—[‘[×' CÓ(ˆØ‹?ØØ‹?ØØ×$Ñ$ T×%:Ñ%:×%A¸cØ%*×%;Ñ%;×%B¸sóDˆà�!‹8ØˆJØ×%Ñ% d×&:Ñ&:×&A¸cØ&+×&;Ñ&;×&B¸sóDð 	Døô ó /Ý Û$)ª1ð".ó /ð /ûð/ús   ›C/ Ã/
DÃ9DÄDc                 óÞ   • US:X  a  gU R                   R                  U5      (       a  [        U5      S-   $ U R                  R                  U5      (       a  [	        U5      $ [	        U5      S-   $ )z'Return an integer value for character xÚ~r«   r©   é   )Úre_digitrU   r%   Úre_alphaÚord)ÚclsÚxs     r   Ú_orderÚNativeVersion._orderA  s]   € ð �‹8ØØ�<‰<×Ñ˜a× Ñ Ü�q“6˜A‘:ÐØ�<‰<×Ñ˜a× Ñ Ü�q“6ˆMÜ�1‹v˜‰|Ðr   c                 óX  • U Vs/ s H  o0R                  U5      PM     nnU Vs/ s H  o0R                  U5      PM     nnU(       d  U(       aR  SnSnU(       a  UR                  S5      nU(       a  UR                  S5      nXg:  a  gXg:”  a  gU(       a  MI  U(       a  MR  gs  snf s  snf )Nr   r«   r©   )rº   Úpop)r¸   ÚvaÚvbr¹   ÚlaÚlbÚaÚbs           r   Ú_version_cmp_stringÚ!NativeVersion._version_cmp_stringM  s�   € ñ &(Ó(¢R �j‰j˜Žm¡RˆÐ(Ù%'Ó(¢R �j‰j˜Žm¡RˆÐ(Þ–BØˆAØˆAÞØ—F‘F˜1“I�ÞØ—F‘F˜1“I�Ø‹uØØ‹uØ÷ ˆb—B�Bð ùò )ùÚ(s
   …B"¥B'c                 ó  • U R                   R                  U5      nU R                   R                  U5      nU(       d  U(       aÂ  SnSnU(       a  UR                  S5      nU(       a  UR                  S5      nU R                  R	                  U5      (       aC  U R                  R	                  U5      (       a#  [        U5      n[        U5      nXx:  a  gXx:”  a  gOU R                  XV5      n	U	S:w  a  U	$ U(       a  M¹  U(       a  MÂ  g)Nrª   r   r«   r©   )Úre_all_digits_or_notÚfindallr½   Ú	re_digitsrU   r%   rÄ   )
r¸   r¾   r¿   rÀ   rÁ   rÂ   rÃ   ÚavalÚbvalr°   s
             r   r¬   ÚNativeVersion._version_cmp_part_  sÝ   € ð ×%Ñ%×-Ñ-¨bÓ1ˆØ×%Ñ%×-Ñ-¨bÓ1ˆÞ–BØˆAØˆAÞØ—F‘F˜1“I�ÞØ—F‘F˜1“I�Ø�}‰}×"Ñ" 1×%Ñ%¨#¯-©-×*=Ñ*=¸a×*@Ñ*@Ü˜1“v�Ü˜1“v�Ø“;ØØ“;Øð ð ×-Ñ-¨aÓ3�Ø˜!“8Ø�J÷# ˆb—B�Bð$ r   r¥   N)r=   r>   r?   r@   rA   rš   r›   rÇ   rÉ   rµ   r¶   rz   Úclassmethodrº   rÄ   r¬   rC   r¥   r   r   r§   r§     s€   † ÙLàŸ:š: jÓ1ÐØ—
’
˜6Ó"€IØ�zŠz˜%Ó €HØ�zŠz˜*Ó%€HòDð> ñ	ó ð	ð ñó ðð" ñó ór   r§   c                   ó   • \ rS rSrSrg)ÚVersioniz  r¥   N©r=   r>   r?   r@   rC   r¥   r   r   rÏ   rÏ   z  ó   † Úr   rÏ   c                   ó   • \ rS rSrSrg)rÏ   i}  r¥   NrÐ   r¥   r   r   rÏ   rÏ   }  rÑ   r   c                 óH   • [        U 5      n[        U5      nX#:  a  gX#:”  a  gg)Nr«   r©   r   )rÏ   )rÂ   rÃ   r¾   r¿   s       r   r£   r£   �  s'   € ä	�‹€BÜ	�‹€BØ	ƒwØØ	ƒwØØr   c                   óŒ   • \ rS rSrSr\R                  " S5      r\R                  " S5      r  SS jr	S r
S\4S	 jrSS
 jrSrg)ÚPackageFileiŒ  zeA Debian package file.

Objects of this class can be used to read Debian's Source and
Packages files.z+^([A-Za-z][A-Za-z0-9-_]+):(?:\s*(.*?))?\s*$z^\s+(?:\.|(\S.*?)\s*)$Nc                 óT   • Uc  [        US5      nXl        X l        SU l        X0l        g)z¼Creates a new package file object.

name - the name of the file the data comes from
file_obj - an alternate data source; the default is to open the
          file with the indicated name.
NÚrbr   )ÚopenÚnamer:   r'   Úencoding)r+   rÙ   Úfile_objrÚ   s       r   r*   ÚPackageFile.__init__•  s,   € ð ÑÜ˜D $Ó'ˆHØŒ	ØŒ	ØˆŒØ �r   c              #   óæ  #   • U R                  5       nU =R                  S-  sl        / nU(       Ga2  UR                  S5      S:X  aE  U(       d  U R                  S5        Uv •  / nU R                  5       nU =R                  S-  sl        Mb  U R                  R                  U5      nU(       d  U R                  S5        UR                  5       u  pEU=(       d    Sn U R                  5       nU =R                  S-  sl        U R                  R                  U5      nU(       a!  UR                  5       u  nUc  SnU< SU< 3nOOMk  UR                  XE45        U(       a  GM2  U(       a  Uv •  g g 7f)Nr©   z 	Ú
zexpected package recordzexpected package fieldrp   )	Ú_aux_read_liner'   ÚstripÚraise_syntax_errorÚre_fieldrU   ÚgroupsÚre_continuationÚappend)r+   ÚlineÚpkgrU   rÙ   ÚcontentsÚ	ncontentss          r   Ú__iter__ÚPackageFile.__iter__¨  s;  é € à×"Ñ"Ó$ˆØ�Š�qÑ�ØˆßØ�z‰z˜%Ó  DÓ(ÞØ×+Ñ+Ð,EÔFØ’	Ø�Ø×*Ñ*Ó,�Ø—’˜qÑ •Ùà—M‘M×'Ñ'¨Ó-ˆEÞØ×'Ñ'Ð(@ÔAØ$Ÿ|™|›~ÑˆTØ—~ 2ˆHàØ×*Ñ*Ó,�Ø—’˜qÑ •Ø×,Ñ,×2Ñ2°4Ó8�ÞØ#(§<¡<£>‘L�YØ Ñ(Ø$&˜	Û+3²YÐ?‘Hàñ ð �J‰J˜Ð'Ô(÷7 ‰dö8 Ø‹Ið ùs   ‚EE1Å$E1r.   c                 óš   • U R                   R                  5       n[        U[        5      (       a  UR	                  U R
                  5      $ U$ r#   )r:   Úreadliner$   ÚbytesÚdecoderÚ   )r+   ræ   s     r   rß   ÚPackageFile._aux_read_lineÌ  s;   € ð �y‰y×!Ñ!Ó#ˆÜ�dœE×"Ñ"Ø—;‘;˜tŸ}™}Ó-Ð-Øˆr   c                 óL   • Uc  U R                   n[        U R                  X!5      er#   )r'   r    rÙ   )r+   r(   r'   s      r   rá   ÚPackageFile.raise_syntax_errorÔ  s!   € à‰>Ø—[‘[ˆFÜ˜Ÿ™ FÓ0Ð0r   )rÚ   r:   r'   rÙ   )Nzutf-8r#   )r=   r>   r?   r@   rA   rš   r›   râ   rä   r*   rê   rB   rß   rá   rC   r¥   r   r   rÕ   rÕ   Œ  sK   † ñð
 �zŠzÐHÓI€HØ—j’jÐ!:Ó;€Oð Ø!ô!ò&"ðH ô ÷1r   rÕ   c                   ól   • \ rS rSrSrS rS\4S jrS\4S jrS r	S r
S	 rS
 rS rS rS\4S jrSrg)Ú
PseudoEnumiÛ  z8A base class for types which resemble enumeration types.c                 ó   • Xl         X l        g r#   ©Ú_namerº   )r+   rÙ   Úorders      r   r*   ÚPseudoEnum.__init__Ý  s   € ð Œ
Ø�r   r.   c                 óR   • U R                   R                  < SU R                  < S3$ )NÚ(Ú))r,   r=   r÷   r0   s    r   r5   ÚPseudoEnum.__repr__ä  s   € ØŸ>™>×2Ô2°D·J´JÐ?Ð?r   c                 ó   • U R                   $ r#   )r÷   r0   s    r   r1   ÚPseudoEnum.__str__ç  s   € Ø�z‰zÐr   c                 ó4   • U R                   UR                   :  $ r#   ©rº   rx   s     r   r   ÚPseudoEnum.__lt__í  ó   € à�{‰{˜UŸ\™\Ñ)Ð)r   c                 ó4   • U R                   UR                   :*  $ r#   r  rx   s     r   rƒ   ÚPseudoEnum.__le__ñ  ó   € à�{‰{˜eŸl™lÑ*Ð*r   c                 ó4   • U R                   UR                   :H  $ r#   r  rx   s     r   r‡   ÚPseudoEnum.__eq__õ  r  r   c                 ó4   • U R                   UR                   :g  $ r#   r  rx   s     r   rŠ   ÚPseudoEnum.__ne__ù  r  r   c                 ó4   • U R                   UR                   :¬  $ r#   r  rx   s     r   r�   ÚPseudoEnum.__ge__ý  r  r   c                 ó4   • U R                   UR                   :„  $ r#   r  rx   s     r   r�   ÚPseudoEnum.__gt__  r  r   c                 ó,   • [        U R                  5      $ r#   )r“   rº   r0   s    r   r”   ÚPseudoEnum.__hash__  s   € Ü�D—K‘KÓ Ð r   rö   N)r=   r>   r?   r@   rA   r*   rB   r5   r1   r   rƒ   r‡   rŠ   r�   r�   r%   r”   rC   r¥   r   r   rô   rô   Û  sN   † ÙBòð@˜#ô @ð˜ô ò*ò+ò+ò+ò+ò*ð!˜#÷ !r   rô   c                   ó6   ^ • \ rS rSrSr0 r SU 4S jjrSrU =r$ )ÚReleasei	  z 
Debian release defined with respect to its name, order of release
and version. The latter can be empty in case of 'sid'.

See https://www.debian.org/releases/
c                 ó8   >• [         [        U ]  X5        X0l        g r#   )r)   r  r*   rP   )r+   rÙ   rø   rP   r,   s       €r   r*   ÚRelease.__init__  s   ø€ ô
 	Œg�tÑ% dÔ2Ø�r   )rP   )rp   )	r=   r>   r?   r@   rA   Úreleasesr*   rC   rD   rE   s   @r   r  r  	  s   ø† ñð €Hð
 ÷õ r   r  c                  óp   • 0 n Sn[        U5       H  u  p#Uu  pE[        XBU5      X'   M     U [        l        U $ )z!
Returns dict of Debian releases
))Úbuzzz1.1)Úrexz1.2)Úboz1.3)Úhammz2.0)Úslinkz2.1)Úpotatoz2.2)Úwoodyz3.0)Úsargez3.1)Úetchz4.0)Úlennyz5.0)Úsqueezez6.0)ÚwheezyÚ7)ÚjessieÚ8)ÚstretchÚ9)ÚbusterÚ10)ÚbullseyeÚ11)ÚbookwormÚ12)ÚtrixieÚ13)ÚforkyÚ14)Úsidrp   )Ú	enumerater  r  )r  ÚrelsÚidxÚrelrÙ   rP   s         r   Úlist_releasesr7    sF   € ð
 €Hð€Dô( ˜d–O‰ˆØ‰ˆÜ  ¨GÓ4ˆ‹ñ $ð  „GÔØ€Or   c                 ó6   • Uc  [         nUR                  U 5      $ r#   )Ú_release_listÚget)rÙ   r  s     r   Úintern_releaser;  ?  s   € àÑÜ ˆØ�<‰<˜ÓÐr   c                 óØ   • [        5       nU  HK  n[        U[        5      (       a  UR                  U5        M+  UR                  UR	                  S5      5        MM     UR                  5       $ ©NúUTF-8)r   r$   rî   ÚupdateÚencodeÚ	hexdigest©Úlinesr\   Úls      r   Úread_lines_sha256rE  I  sN   € ä‹€AÛˆÜ�aœ×ÑØ�H‰H�QŽKà�H‰H�Q—X‘X˜gÓ&Ö'ñ	 ð
 �;‰;‹=Ðr   c                 óØ   • [        5       nU  HK  n[        U[        5      (       a  UR                  U5        M+  UR                  UR	                  S5      5        MM     UR                  5       $ r=  )r   r$   rî   r?  r@  rA  rB  s      r   Úread_lines_sha1rG  T  sN   € ä‹
€AÛˆÜ�aœ×ÑØ�H‰H�QŽKà�H‰H�Q—X‘X˜gÓ&Ö'ñ	 ð
 �;‰;‹=Ðr   z^(\d+)(?:,(\d+))?([acd])$r>  c              #   óP  #   • [        U 5      nUnU GH  nU(       d!  [        U[        5      (       a  [        O[        nUR                  U5      nUc  [        SU-  5      eUR                  5       u  pgn[        U5      n	Uc  SO
[        U5      n
[        U5      S:X  a  U	S-
  n	U
c  U	S-   n
Xš/ 4v •  M   [        U5      S:X  a  U
b  [        SU-  5      eU	n
OU	S-
  n	U
c  U	S-   n
/ nU H0  nUS;   a  [        SU-  5      eUS	;   a    OUR                  U5        M2     XšU4v •  GM     g7f)
a  Converts source to a stream of patches.

Patches are triples of line indexes:

- number of the first line to be replaced
- one plus the number of the last line to be replaced
- list of line replacements

This is enough to model arbitrary additions, deletions and
replacements.
Nzinvalid patch command: %réd   r©   éa   zinvalid patch argument: %r)rp   r   zend of stream in command: %r)z.
Ú.s   .
ó   .)Úiterr$   rî   Ú_patch_re_bÚ	_patch_rerU   rV   rã   r%   r·   rå   )ÚsourceÚre_cmdÚiÚpatch_reræ   rU   Úfirst_Úlast_ÚcmdÚfirstÚlastrC  Úcs                r   Úpatches_from_ed_scriptrZ  d  s=  é € ô" 	ˆV‹€Aà€HäˆÞÜ&0°´u×&=Ñ&=•{Ä9ˆHà—‘˜tÓ$ˆØ‰=ÜÐ8¸4Ñ?Ó@Ð@à$Ÿ|™|›~Ñˆ˜Ü�F“ˆØ‘}‰t¬#¨e«*ˆô ˆs‹8�s‹?Ø˜A‘IˆEØ‰|Ø˜q‘y�Ø Ð#Ò#Ùäˆs‹8�r‹>ØÑÜ Ð!=ÀÑ!DÓEÐEØ‰Dà˜A‘IˆEØ‰|Ø˜q‘y�àˆÛˆAØ�I‹~Ü Ð!?À$Ñ!FÓGÐGØÐ.Ó.ÙØ�L‰L˜ŽOñ ð ˜EÐ"Õ"òI ùs   ‚D$D&c                 ó"   • U H	  u  p#nX@X#& M     g)z2Applies patches to lines.  Updates lines in place.Nr¥   )rC  ÚpatchesrW  rX  r   s        r   Úpatch_linesr]     s   € ó  'Ñˆ�dØ ˆeÒò  'r   c                 ó°  • US-   n [        USUS9 nU  H  nUR                  U5        M     S S S 5        [        R                  " X15        [        R                  R                  U5      (       a  [        R                  " U5        g g ! , (       d  f       N`= f! [        R                  R                  U5      (       a  [        R                  " U5        f f = f)Nz.newzw+©rÚ   )rØ   r8   ÚosÚreplaceÚpathÚexistsÚunlink)rC  ÚlocalrÚ   Ú	local_newÚnew_filerD  s         r   Úreplace_filerh  ª  s›   € à˜‘€Ið!Ü�)˜T¨HÒ5¸Û�Ø—‘˜qÖ!ñ ÷ 6ô 	�
Š
�9Ô$ä�7‰7�>‰>˜)×$Ñ$Ü�IŠI�iÕ ð %÷ 6Õ5ûô
 �7‰7�>‰>˜)×$Ñ$Ü�IŠI�iÕ ð %ús!   ‡B ’B­B Â
BÂB Â=Cc                 óæ   • SSK nSSKJn  U" U 5       nUR                  USS9 nUR	                  5       sSSS5        sSSS5        $ ! , (       d  f       O= f SSS5        g! , (       d  f       g= f)zWDownloads a file from a remote location and gunzips it.

Returns the lines in the file.r   N©ÚurlopenÚrt)Úmode)ÚgzipÚurllib.requestrk  rØ   Ú	readlines)Úremotern  rk  ÚzfdÚgfds        r   Údownload_gunzip_linesrt  ¸  sQ   € ó Ý&á	�Œ˜CØ�Y‰Y�s ˆYÑ&¨#Ø—=‘=“?÷ 'Ð&÷ 
‰ß&Õ&úÐ&÷ 
�Žús!   “A"¤A´	A"Á
A	ÁA"Á"
A0c                 ó8   • [        U S-   5      n[        X!5        U$ )zwCopies a gzipped remote file to the local system.

remote - URL, without the .gz suffix
local - name of the local file
ú.gz)rt  rh  )rq  re  rC  s      r   Údownload_filerw  Æ  s   € ô " &¨5¡.Ó1€EÜ�ÔØ€Lr   c           	      ó¾  •  [        USSS9 nUR                  5       nSSS5        / n0 nSSKJn  U S-   n[        R                  " S	5      n	 U" U5       n
[        [        XŠ5      5      nSSS5        SW VVVs/ s H  oÌ  H  u  pÞUPM	     M     snnn;   a&  U(       a  [        S5        Sn[        W5      n[        nO%U(       a  [        S5        Sn[        W5      n[        nU GH  nU Hý  u  nnUUS-   :X  a4  U	R                  U5      u  nnUU:X  a  U(       a  [        S5        Us  s  $ MC  UUS-   :X  aV  UR                  5        H@  nUS:X  a  M  U	R                  U5      u  nnnU(       d  UU:X  d  M/  UR!                  U5        MB     M¢  UUS-   :X  a;  UR                  5        H%  nUS:X  a  M  U	R                  U5      u  nnnUUU'   M'     Mæ  U(       d  Mï  [        SU-  5        Mÿ     GM
     U(       d  U(       a  [        SU5        [	        X5      $ U Hi  nU(       a  [        SU-  5        [#        U S-   U-   S-   5      nU" U5      UU   :w  a  [%        SU-  5      e[        U5      n['        U[)        U5      5        Mk     U" U5      nUW:w  a  [%        SU< SU< 35      e[+        XA5        U$ ! , (       d  f       GN›= f! [         a     U(       a  [        S5        [	        X5      s $ f = f! , (       d  f       GN�= f! [         a     U(       a  [        S
5        [	        X5      s $ [         a     U(       a  [        S5        [	        X5      s $ f = fs  snnnf )zbUpdates the local file by downloading a remote patch.

Returns a list of lines in the local file.
Úrr>  r_  Nz1update_file: no local copy, downloading full filer   rj  z.diff/Indexz\s+z1update_file: could not interpret patch index filez0update_file: could not download patch index filezSHA256-Currentzupdate_file: using sha256ÚSHA256zupdate_file: using sha1ÚSHA1z-Currentz%update_file: local file is up-to-datez-Historyrp   z-Patcheszupdate_file: field %r ignoredz*update_file: could not find historic entryz!update_file: downloading patch %rz.diff/rv  zpatch %r was garbledzpatch failed, got z instead of )rØ   rp  ÚIOErrorÚprintrw  ro  rk  rš   r›   ÚlistrÕ   r    rE  rG  ÚsplitÚ
splitlinesrå   rt  rV   r]  rZ  rh  )rq  re  ÚverboseÚ
local_filerC  Úpatches_to_applyÚpatch_hashesrk  Ú
index_nameÚre_whitespaceÚ	index_urlÚindex_fieldsÚfieldsÚkÚvÚprefixÚ
local_hashÚ
read_linesÚfieldrg   Úremote_hashÚ_ÚentryÚ	hist_hashÚ
patch_nameÚ
patch_hashÚpatch_contentsÚpatch_contents_unicodeÚnew_hashs                                r   Úupdate_filer™  Ó  sC  € ð,Ü�%˜ wÒ/°:Ø×(Ñ(Ó*ˆE÷ 0ð ÐØ€Lõ 'à˜-Ñ'€Jä—J’J˜vÓ&€Mð,Ù�ZÔ  IÜ¤¨JÓ BÓCˆL÷ !ð ©LÕKªL &ÃF¹S¸Q›AÁF™A©LÓKÓKÞÜÐ-Ô.ØˆÜ& uÓ-ˆ
Ü&‰
æÜÐ+Ô,ØˆÜ$ UÓ+ˆ
Ü$ˆ
äˆÛ$‰NˆU�EØ˜˜zÑ)Ó)Ø#0×#6Ñ#6°uÓ#=Ñ �˜aØ Ó,ÞÜÐEÔFØ ”LÙà˜˜zÑ)Ó)Ø"×-Ñ-Ö/�EØ “{Ù Ø1>×1DÑ1DÀUÓ1KÑ.�Y  :ö (¨9¸
Õ+BØ(×/Ñ/°
Ö;ñ 0ñ à˜˜zÑ)Ó)Ø"×-Ñ-Ö/�EØ “{Ù Ø2?×2EÑ2EÀeÓ2LÑ/�Z  JØ/9�L Ó,ñ	 0ñ
 çˆwÜÐ5¸Ñ=Ö>ô? %ñ öD ÞÜÐ>À
ÔKÜ˜VÓ+Ð+ã&ˆ
ÞÜÐ5¸
ÑBÔCÜ.Ø�XÑ 
Ñ*¨UÑ2ó4ˆá�nÓ%¨°jÑ)AÓAÜÐ3°jÑ@ÓAÐAÜ!% nÓ!5ÐÜ�EÔ1Ð2HÓIÖJñ 'ñ ˜%Ó €HØ�;ÓÝÛ$¢kð3ó 4ð 	4ô �ÔØ€L÷G 0Ö/ûäó ,ÞÜÐEÔFÜ˜VÓ+Ò+ð,ú÷  !Ö ûäó ,ö ÜÐEÔFÜ˜VÓ+Ò+Üó ,ÞÜÐDÔEÜ˜VÓ+Ò+ð,üô
 Lsi   ‚K �J2žK ÁL ÁK1Á)L Á8M
Ê2
KÊ<K ËK Ë'K.Ë-K.Ë1
L Ë;L Ì L Ì'MÌ,&MÍMc                  óH   • 0 nU  H  nU H  nSX'   M	     M     [        U5      $ )z`Create an order set (represented as a list) of the objects in
the sequences passed as arguments.T)Úsorted)r   Úsr¹   Úys       r   Úmerge_as_setsrž  A  s0   € ð 	€AÛˆÛˆAØˆA‹Dó ñ ô �!‹9Ðr   r#   )r>  )F)@rA   r`  Úos.pathrš   Útypingr   r   r   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r¢   ÚinitrŸ   ÚErrorÚImportErrorÚ_sha1Úsha1r   Ú_sha256Úsha256r   Údebian._arch_tableÚdebianÚ_arch_tableÚDpkgArchTableÚ	Exceptionr    ÚobjectrG   r�   r§   rÏ   r£   rÕ   rô   r  r7  r9  r;  rE  rG  Ú_patch_re_rawr›   rO  r@  rN  rZ  r]  rh  rt  rw  r™  rž  r¥   r   r   Ú<module>r¯     sÔ  ðÙ 8ó( 
Û Û 	÷÷ ÷ ÷ ó ð&
ÛðØ�ŠŒØˆð
"ÛØ�z‰z€Hð
"ÛØ—‘€Jó à×"Ñ"×0Ñ0€ô#�ô #ôLD�&ô DôN>�Kô >ô"\�Kô \ö~ ô�-õ ô�-ô ò÷L1ñ L1÷^+!ñ +!ô\ˆjô ò$ñB “€ôð òòð -€Ø�JŠJ�}Ó%€	Ø�jŠj˜×-Ñ-¨gÓ6Ó7€ð
 ô9#òx!ô!ò#ò
ôkó\øða �=‰=ó ð ‹ðûð ó ØƒMðûð ó "õ"ð"ûð ó "õ"ð"úsR   ´E5 ¹E ÁF ÁF ÅE2Å.E5 Å1E2Å2E5 Å5FÆ FÆ	FÆFÆ	F!Æ F!