+
    S^i                     ,   ^ RI t ^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RI	t	^ RI
HtHtHt ^ RIHtHtHtHtHt ^ RIt^RIHt ^RIHtHt ]! R4      t. R(OtR R ltR R lt ! R R]4      t ! R R]4      t  ! R R]]],          4      t!R R lt"R R lt# ! R R4      t$ ! R R4      t% ! R R4      t&]]&]$3,          t']]&]$]%3,          t( ! R R	4      t) ! R R
4      t* ! R  R4      t+],R!8X  d   ]PZ                  ! 4        ]*! 4       t.]. F*  t/]P`                  ! R"]/Pc                  4       ,          4       K,  	  ]! R#R$4      t2]P`                  ! R%]2,          4       ]P`                  ! ]! R&R$4      4       ]P`                  ! ]! R#R'4      4       R# R# ))    N)CallableIterableIterator)AnyGenericOptionalTypeVarUnion)_deb822)DistInfoTemplateTDeb822SourceEntrySourceEntryNullMatcherSourcesListSourceEntryMatcherc                <    V ^8  d   QhR\         R\         R\        /# )   
master_uricompare_urireturn)strbool)formats   "8/usr/lib/python3/dist-packages/aptsources/sourceslist.py__annotate__r   ;   s!      # C D     c                0   VP                  R4      pV P                  R4      p W8X  d   R#  VP                  R4      ^,          pV P                  R4      ^,          pRT9   d"   Y"P                  R4      ^,           R T8X  d   R# R#   \         d     R# i ; i)zcheck if the given add_url is idential or a mirror of orig_uri e.g.:
master_uri = archive.ubuntu.com
compare_uri = de.archive.ubuntu.com
-> True
z/ Tz//F.N)rstripsplit
IndexErrorindex)r   r   compare_srv
master_srvs   &&  r   	is_mirrorr'   ;   s     $$T*K""4(J !''-a0%%d+A.
 kk*;*;C*@1*D*FG:U  s   0B BBc                \    V ^8  d   QhR\         \        ,          R\        \        ,          /# r   sr   )r   r   list)r   s   "r   r   r   X   s"      HQK DG r   c                *    \        \        V 4      4      # )a  simple and efficient way to return uniq collection

This is not intended for use with a SourceList. It is provided
for internal use only. It does not have a leading underscore to
not break any old code that uses it; but it should not be used
in new code (and is not listed in __all__).)r+   set)r*   s   &r   uniqr.   X   s     A<r   c                   Z   a  ] tR t^bt o V 3R lR ltR	V 3R lR lltV 3R lR ltRtV tR# )
SingleValuePropertyc                &   < V ^8  d   QhRS[ RS[ /# r   keydocr   )r   __classdict__s   "r   r    SingleValueProperty.__annotate__c         C c r   c                    Wn         W n        R # Nr3   __doc__selfr3   r4   s   &&&r   __init__SingleValueProperty.__init__c       r   Nc                V   < V ^8  d   QhRS[ R,          RS[R,          RS[R,          /# r   objr   objtypeNr   )r   typer   )r   r6   s   "r   r   r7   g   s3     / //0/;?$;/	t/r   c                Z    Vf   V # VP                   P                  V P                  R 4      # r:   )sectiongetr3   r>   rD   rE   s   &&&r   __get__SingleValueProperty.__get__g   s'     ;K{{txx..r   c                6   < V ^8  d   QhRRRS[ R,          RR/# )r   rD   r   valueNr   r5   )r   r6   s   "r   r   r7   n   s'     * *. *sTz *d *r   c                p    Vf   VP                   V P                   R # W!P                   V P                  &   R # r:   )rH   r3   r>   rD   rN   s   &&&r   __set__SingleValueProperty.__set__n   s'    =DHH%$)KK!r   r<   r3   r:   	__name__
__module____qualname____firstlineno__r?   rK   rQ   __static_attributes____classdictcell__r6   s   @r   r0   r0   b   s#      / /* *r   r0   c                   Z   a  ] tR t^ut o V 3R lR ltR	V 3R lR lltV 3R lR ltRtV tR# )
MultiValuePropertyc                &   < V ^8  d   QhRS[ RS[ /# r2   r5   )r   r6   s   "r   r   MultiValueProperty.__annotate__v   r8   r   c                    Wn         W n        R # r:   r;   r=   s   &&&r   r?   MultiValueProperty.__init__v   rA   r   Nc                X   < V ^8  d   QhRS[ R,          RS[R,          RS[S[,          /# rC   )r   rF   r+   r   )r   r6   s   "r   r   r_   z   s8     B B/0B;?$;B	cBr   c                    Vf   V # \         P                  VP                  P                  V P                  R4      4      # )N )r   mysplitrH   rI   r3   rJ   s   &&&r   rK   MultiValueProperty.__get__z   s2     ;K""3;;??488R#@AAr   c                8   < V ^8  d   QhRRRS[ S[,          RR/# )r   rD   r   valuesr   Nr+   r   )r   r6   s   "r   r   r_      s'     1 1. 1S	 1d 1r   c                V    R P                  V4      VP                  V P                  &   R# ) N)joinrH   r3   )r>   rD   rh   s   &&&r   rQ   MultiValueProperty.__set__   s     # 0DHHr   rS   r:   rT   r[   s   @r   r]   r]   u   s%      B B1 1r   r]   c                   Z   a  ] tR t^t o V 3R lR ltR	V 3R lR lltV 3R lR ltRtV tR# )
ExplodedEntryPropertyc                    < V ^8  d   QhRS[ /# )r   parentr   )r   r6   s   "r   r   "ExplodedEntryProperty.__annotate__   s      q r   c                    Wn         R # r:   rq   r>   rq   s   &&r   r?   ExplodedEntryProperty.__init__   s    r   Nc                H   < V ^8  d   QhRS[ R,          RS[R,          RS[/# )r   rD   ExplodedDeb822SourceEntryrE   Nr   )r   rF   r   )r   r6   s   "r   r   rs      s/     / /78/CG$;/	
/r   c                X    Vf   V # V P                   P                  VP                   4      # r:   )rq   rK   rJ   s   &&&r   rK   ExplodedEntryProperty.__get__   s'     ;K{{""3::..r   c                (   < V ^8  d   QhRRRS[ RR/# )r   rD   ry   rN   r   Nrr   )r   r6   s   "r   r   rs      s#     / /6 /q /T /r   c                r    VP                  4        V P                  P                  VP                  V4       R # r:   )	split_outrq   rQ   rP   s   &&&r   rQ   ExplodedEntryProperty.__set__   s#    CJJ.r   ru   r:   rT   r[   s   @r   ro   ro      s#      / // /r   ro   c                0    V ^8  d   QhR\         R\         /# )r   propr   rr   )r   s   "r   r   r      s      Q 1 r   c                     V # r:    )r   s   &r   DeprecatedPropertyr      s    Kr   c                    V ^8  d   QhRR/# r   r   Nr   )r   s   "r   r   r      s      t r   c                     R# )z3Behaves like an expired weakref.ref, returning NoneNr   r   r   r   _null_weakrefr      s    r   c                   r  a  ] tR t^t o R+V 3R lR lltV 3R lR lt]! RR4      t]! RR	4      t]	! ]
! RR	4      4      t]! R
R4      t]	! ]
! R
R4      4      t]! RR4      t]	! ]
! RR4      4      t]! RR4      t]V 3R lR l4       t]P&                  V 3R lR l4       t]V 3R lR l4       t]P&                  V 3R lR l4       t]V 3R lR l4       t]P&                  V 3R lR l4       t]V 3R lR l4       t]V 3R lR l4       tV 3R  lR! ltV 3R" lR# ltV 3R$ lR% ltV 3R& lR' ltV 3R( lR) ltR*tV tR# ),r   Nc                l   < V ^8  d   QhRS[ P                  S[,          R,          RS[RS[R,          /# )r   rH   Nfiler+   r   )r   Sectionr   r   )r   r6   s   "r   r   Deb822SourceEntry.__annotate__   s<     ' '3&-' ' }%	'r   c                   Vf   \         P                  ! R4      V n        M8\        V\        4      '       d   \         P                  ! V4      V n        MWn        \	        V P                  4      V n        W n        R V n        RV n        \        P                  R,          ! 4       V n        V'       d   \        P                  ! V4      V n        R # \        V n        R # )Nrd   Fry   )r   r   rH   
isinstancer   _liner   template	may_mergeweakrefWeakSet	_childrenref_listr   )r>   rH   r   r+   s   &&&&r   r?   Deb822SourceEntry.__init__   s     ?"??2.DL%%"??73DL"L&
	)- )DEG;B;;t;LDJ&DJr   c                &   < V ^8  d   QhRS[ RS[ /# r   otherr   r   )r   r6   s   "r   r   r      s     

 

C 

C 

r   c                   V P                   VP                   8H  ;'       d    V P                  VP                  8H  ;'       d    V P                  ;'       dz    V P                  P                  R4      VP                  P                  R4      8H  ;'       d;    V P                  VP                  8H  ;'       d    V P
                  VP
                  8H  # z+equal operator for two sources.list entries/disabledrF   urir!   distcompsr>   r   s   &&r   __eq__Deb822SourceEntry.__eq__   s     MMU^^+ * *		UZZ'* ** * $		(8(8(==* * 		UZZ'	* *
 

ekk)	
r   ArchitectureszThe list of architecturesTypeszThe list of typesURIszURIs in the sourceSuiteszSuites in the source
ComponentszComponents in the sourcec                    < V ^8  d   QhRS[ /# r   r   r5   )r   r6   s   "r   r   r      s     # # #r   c                .    V P                   P                  # )1Legacy attribute describing the paragraph header.rH   headerr>   s   &r   commentDeb822SourceEntry.comment   s     ||"""r   c                $   < V ^8  d   QhRS[ RR/# )r   r   r   Nr5   )r   r6   s   "r   r   r      s     & &s &t &r   c                &    WP                   n        R# )r   Nr   )r>   r   s   &&r   r   r      s     &r   c                .   < V ^8  d   QhRS[ R,          /# r   r   )r   r6   s   "r   r   r      s       r   c                v     \         P                  ! V P                  R,          4      #   \         d     R# i ; i)z%Return the value of the Trusted fieldTrustedN)apt_pkgstring_to_boolrH   KeyErrorr   s   &r   trustedDeb822SourceEntry.trusted   s3    	))$,,y*ABB 		s   &) 88c                2   < V ^8  d   QhRS[ R,          RR/# )r   rN   Nr   r   )r   r6   s   "r   r   r      s     ? ?TD[ ?T ?r   c                    Vf    V P                   R R # V'       d   RMRV P                   R&   R #   \         d     R # i ; i)Nr   yesnorH   r   r>   rN   s   &&r   r   r      s@    =LL+ 05e$DLL#  s   0 ??c                    < V ^8  d   QhRS[ /# r   r   )r   r6   s   "r   r   r      s     N N$ Nr   c                l    \         P                  ! V P                  P                  RR4      4      '       * # )zCheck if Enabled: no is set.Enabledr   )r   r   rH   rI   r   s   &r   r   Deb822SourceEntry.disabled   s)     ))$,,*:*:9e*LMMMr   c                $   < V ^8  d   QhRS[ RR/# )r   rN   r   Nr   )r   r6   s   "r   r   r      s      d t r   c                x    V'       d   R V P                   R&   R#  V P                   R R#   \         d     R# i ; i)r   r   Nr   r   s   &&r   r   r      s6    &*DLL#LL+ s   * 99c                    < V ^8  d   QhRS[ /# r   r   )r   r6   s   "r   r   r      s          r   c                $    V P                   '       * # )z7A section is invalid if it doesn't have proper entries.)rH   r   s   &r   invalidDeb822SourceEntry.invalid   s     <<r   c                    < V ^8  d   QhRS[ /# r   r5   )r   r6   s   "r   r   r            c r   c                    V P                   # )z The entire (original) paragraph.)r   r   s   &r   lineDeb822SourceEntry.line   s     zzr   c                    < V ^8  d   QhRS[ /# r   r5   )r   r6   s   "r   r   r     s     " " "r   c                >    V P                  4       P                  4       # r:   r   stripr   s   &r   __str__Deb822SourceEntry.__str__  s    xxz!!r   c                    < V ^8  d   QhRS[ /# r   r5   )r   r6   s   "r   r   r     s     ! !S !r   c                ,    \        V P                  4      # )z(Section as a string, newline terminated.)r   rH   r   s   &r   r   Deb822SourceEntry.str  s    4<<  r   c                $   < V ^8  d   QhRS[ RR/# r   enabledr   Nr   )r   r6   s   "r   r   r          $ $4 $D $r   c                    V'       * V n         R# )z.Deprecated (for deb822) accessor for .disabledNr   r>   r   s   &&r   set_enabledDeb822SourceEntry.set_enabled      #r   c                $   < V ^8  d   QhRRRS[ /# )r   r   AnySourceEntryr   r   )r   r6   s   "r   r   r     s      B B+ B Br   c           
        V P                   '       g_   V P                  fQ   \        ;QJ d&    R V P                   4       F  '       d   K   RM	  RM! R V P                   4       4      '       g   R# V P                  VP                  8w  d   R# \        V\        4      '       g   R# V P                  VP                  8w  di   \        ;QJ d2    R V P                  VP                  3 4       F  '       g   K   RM'	  RM#! R V P                  VP                  3 4       4      '       g   R# \        \        V P                  P                  4      \        VP                  P                  4      ,           4       F[  pVP                  4       R9   d   K  V P                  P                  VR4      pVP                  P                  VR4      pW48w  g   KZ   R# 	  \        \        V P                   4      \        VP                   4      8g  \        V P"                  4      \        VP"                  4      8g  \        V P$                  4      \        VP$                  4      8g  \        V P&                  4      \        VP&                  4      8g  \        V P(                  4      \        VP(                  4      8g  .4      ^8  d   R# VP                    F/  pWPP                   9  g   K  V ;P                   V.,          un        K1  	  VP"                   F/  pW`P"                  9  g   K  V ;P"                  V.,          un        K1  	  VP$                   F/  pWpP$                  9  g   K  V ;P$                  V.,          un        K1  	  VP&                   F/  pWP&                  9  g   K  V ;P&                  V.,          un        K1  	  VP(                   F/  p	WP(                  9  g   K  V ;P(                  V	.,          un        K1  	  R# )z-Merge the two entries if they are compatible.Nc              3   8   "   T F  qP                   x  K  	  R # 5ir:   )r   ).0childs   & r   	<genexpr>*Deb822SourceEntry.merge.<locals>.<genexpr>  s     CN5Ns   FTc              3   ,   "   T F
  pR V9   x  K  	  R# 5i)zAdded by software-propertiesNr   )r   cs   & r   r   r     s      5
9VA*a/9Vs   )typesurissuites
componentsarchitecturesz	signed-by)r   r   allr   r   r   r   r   anyr-   r+   rH   tagslowerrI   sumr   r   r   r   r   )
r>   r   tagin_selfin_othertypr   suite	componentarchs
   &&        r   mergeDeb822SourceEntry.merge  s    %CCDNNCCCCCDNNCCC99

"%!233<<5==( 5
:>,,9V5
 5
:>,,9V5
 2
 2
 tDLL--.emm6H6H1IIJCyy{   ll&&sD1G}}((d3H" K  

Os5;;'77		Nc%**o5$ELL(99

Os5;;'77**+s53F3F/GG 	 ;;C**$

se#
  ::C))#		cU"	  \\EKK'w& " I

*

yk)
 % ''D---""tf," ( r   c                "   < V ^8  d   QhRRRR/# )r   tor   r   Nr   )r   r6   s   "r   r   r   P  s     < <%8 <T <r   c                R   V P                    F  pVP                   F  pVP                   Fp  pVP                   F]  pVP                  VP
                  VP                  3W4V38X  g   K/  VP                  V 8X  g   Q h\        P                  ! V4      Vn
        K_  	  Kr  	  K  	  K  	  R# )z_If we end up being split, check if any of our children need to be reparented to the new parent.N)r   r   r   r   _type_uri_suiterq   r   r   _parent)r>   r  r   r   r   r  s   &&    r   _reparent_children$Deb822SourceEntry._reparent_childrenP  s|    ^^Exx77C!#!KKU\\BsQVFWW#(<<4#77#7,3KKOEM "+ #   $r   )r   r   r   r   r   r   rH   r   r:   )rU   rV   rW   rX   r?   r   r]   r   r   r   r0   rF   r   r   r   r   r   propertyr   setterr   r   r   r   r   r   r   r  r  rY   rZ   r[   s   @r   r   r      sv    ' '0

 

 '8STMw(;<E1';NOPDf&:;D
09MN
OC*@AF1(<RSTD|-GHE# # ^^& &   ^^? ? N N __       " "! !$ $B BH< <r   c                     a  ] tR tRt o Rt. R%OtV 3R lR lt]V 3R lR l4       t]V 3R lR l4       t	]	P                  V 3R	 lR
 l4       t	]V 3R lR l4       t]V 3R lR l4       t]V 3R lR l4       t]V 3R lR l4       t]P                  V 3R lR l4       t]V 3R lR l4       t]P                  V 3R lR l4       tV 3R lR ltV 3R lR ltV 3R lR lt]! ]P*                  4      t]! ]P,                  4      t]! ]P.                  4      t]],          ! ]P2                  4      t]! ]P4                  4      t]! ]P6                  4      tV 3R lR  lt]V 3R! lR" l4       tR#tV tR$# )&ry   i[  zXThis represents a bit of a deb822 paragraph corresponding to a legacy sources.list entryc                2   < V ^8  d   QhRS[ RS[RS[RS[/# )r   rq   r   r   r  )r   r   )r   r6   s   "r   r   &ExplodedDeb822SourceEntry.__annotate__a  s*     # #0 #s # #S #r   c                    \         P                  ! V4      V n        W n        W0n        W@n        VP                  V n        VP                  P                  V 4       R # r:   )	r   r   r  r	  r
  r  r   r   add)r>   rq   r   r   r  s   &&&&&r   r?   "ExplodedDeb822SourceEntry.__init__a  s@    {{6*
	T"r   c                    < V ^8  d   QhRS[ /# r   )r   )r   r6   s   "r   r   r  j  s     @ @) @r   c                `    V P                   e   V P                  4       ;pe   V# \        R4      h)Nz#The parent entry is no longer valid)r  
ValueErrorrv   s   & r   rq    ExplodedDeb822SourceEntry.parenti  s.    <<#,,.(5>??r   c                    < V ^8  d   QhRS[ /# r   r5   )r   r6   s   "r   r   r  q  s      S r   c                :    V P                  4        V P                  # r:   )'_ExplodedDeb822SourceEntry__check_validr
  r   s   &r   r   ExplodedDeb822SourceEntry.urip  s    yyr   c                $   < V ^8  d   QhRS[ RR/# )r   r   r   Nr5   )r   r6   s   "r   r   r  v  s      s t r   c                    V P                  4        V P                  P                   Uu. uF  q"V P                  8w  d   TMTNK  	  upV P                  n        Wn        R # u upi r:   )r~   rq   r   r
  )r>   r   us   && r   r   r  u  sK    BF++BRBRSBRQdiiAS8BRS	 Ts   A c                0   < V ^8  d   QhRS[ S[,          /# r   ri   )r   r6   s   "r   r   r  |  s      tCy r   c                    V P                   .# r:   rF   r   s   &r   r   ExplodedDeb822SourceEntry.types{      		{r   c                0   < V ^8  d   QhRS[ S[,          /# r   ri   )r   r6   s   "r   r   r    s      S	 r   c                    V P                   .# r:   r   r   s   &r   r    ExplodedDeb822SourceEntry.suites  r&  r   c                0   < V ^8  d   QhRS[ S[,          /# r   ri   )r   r6   s   "r   r   r    s      d3i r   c                    V P                   .# r:   r   r   s   &r   r   ExplodedDeb822SourceEntry.uris  s    zr   c                    < V ^8  d   QhRS[ /# r   r5   )r   r6   s   "r   r   r    r   r   c                :    V P                  4        V P                  # r:   )r  r	  r   s   &r   rF   ExplodedDeb822SourceEntry.type  s    zzr   c                $   < V ^8  d   QhRS[ RR/# )r   r   r   Nr5   )r   r6   s   "r   r   r    s     1 1 1 1r   c                    V P                  4        V.V P                  n        Wn        V P	                  4        V P                  V8X  g   Q hV P                  P                  V P                  .8X  g   Q hR # r:   )r~   rq   r   r	  r  )r>   r   s   &&r   rF   r1    s[     E
zzS   {{  TZZL000r   c                    < V ^8  d   QhRS[ /# r   r5   )r   r6   s   "r   r   r    s      c r   c                :    V P                  4        V P                  # r:   )r  r  r   s   &r   r   ExplodedDeb822SourceEntry.dist  s    {{r   c                $   < V ^8  d   QhRS[ RR/# )r   r  r   Nr5   )r   r6   s   "r   r   r    s     3 3# 3$ 3r   c                    V P                  4        V.V P                  n        Wn        V P	                  4        V P                  V8X  g   Q hV P                  P                  V P                  .8X  g   Q hR # r:   )r~   rq   r   r  r  )r>   r  s   &&r   r   r6    s[    #W{{e###{{!!dkk]222r   c                   < V ^8  d   QhRR/# r   r   )r   r6   s   "r   r   r    s     = =t =r   c                x   V P                   P                  4       f   \        R4      hV P                   P                   Fl  pV P                   P                   FO  pV P                   P
                   F2  pWV3V P                  V P                  V P                  38X  g   K/     R # 	  KQ  	  Kn  	  \        RV  24      h)NThe parent entry is deadCould not find parent of )	rq   r   r  r   r   r   r	  r
  r  )r>   rF   r   r  s   &   r   __check_valid'ExplodedDeb822SourceEntry.__check_valid  s    ;;&788KK%%D{{''![[//E5)djj$))T[[-QQ 0 ( &
 4TF;<<r   c                   < V ^8  d   QhRR/# r   r   )r   r6   s   "r   r   r    s     )A )A4 )Ar   c           	        V P                   pVP                  VP                  VP                  3V P                  .V P
                  .V P                  .38X  d   R # VP                  4       pVf   \        R4      h VP                  P                  V4      pTP                  T4       Rp\        TP                  4       EF  p\        TP                  4       F  p\        TP                  4       F  p\        \        P                  ! TP                   4      TP"                  TR7      p	T.T	n        T.T	n        T.T	n        RT	n        TP'                  T	4       TP                  P)                  Y94       YgT3T P                  T P
                  T P                  38X  g   K  \*        P,                  ! T	4      T n        RpK  	  K  	  EK	  	  T'       g   \        RT  24      hR #   \         d   p\        RT  R24      ThR p?ii ; i)Nr;  z Parent entry for partial deb822 z no longer validF)rH   r   r+   Tr<  )rq   r   r   r   r	  r
  r  r   r  r+   r$   removereversedr   r   r   rH   r   r   r  insertr   r   r  )
r>   rq   sources_listr$   e
reparentedrF   r   r  news
   &         r   r~   #ExplodedDeb822SourceEntry.split_out  s   LL&++v}}5ZZLYYK[[M:
 

 ||~788	 %%++F3E 	F#
V\\*D,%fmm4E+ ' ?#[[)C
 "&CI #uCH"'CJ$(CM--c2 %%,,U85)djj$))T[[-QQ'.{{3'7%)
 5 - +$ 8?@@ 5  	24&8HI	s   ;G! !H,G<<Hc                    < V ^8  d   QhRS[ /# r   r5   )r   r6   s   "r   r   r    s     R R# Rr   c                n    R V P                    RV P                   RV P                   RV P                   2# )z<child rk   z of )r	  r
  r  r  r   s   &r   __repr__"ExplodedDeb822SourceEntry.__repr__  s1    Adii[$++d4<<.QQr   c                $   < V ^8  d   QhRS[ RR/# r   r   )r   r6   s   "r   r   r    r   r   c                    V'       * V n         R# )zSet the source to enabled.Nr   r   s   &&r   r   %ExplodedDeb822SourceEntry.set_enabled  r   r   c                    < V ^8  d   QhRS[ /# r   r5   )r   r6   s   "r   r   r    s        c  r   c                .    V P                   P                  # )zReturn the file.)rq   r   r   s   &r   r   ExplodedDeb822SourceEntry.file  s     {{r   )r  r  r	  r
  r   r   N)r  r	  r
  r  r   __weakref__) rU   rV   rW   rX   r<   	__slots__r?   r  rq   r   r  r   r   r   rF   r   r  r~   rK  ro   r   r   r   r   r   r   r   r   r   r   rY   rZ   r[   s   @r   ry   ry   [  s    b RI# # @ @   	ZZ 
         
[[1 1   
[[3 3= =)A )AVR R **;*I*IJM!"3"9"9:E#$5$=$=>G$T*+<+E+EFH#$5$=$=>G#$5$=$=>G$ $    r   ry   c                     a  ] tR tRt o RtRV 3R lR lltV 3R lR lt]V 3R lR	 l4       tV 3R
 lR lt	V 3R lR lt
V 3R lR ltV 3R lR lt]V 3R lR l4       t]V 3R lR l4       t]V 3R lR l4       tRtV tR# )r   i  zsingle sources.list entryNc                4   < V ^8  d   QhRS[ RS[ R,          /# )r   r   r   Nr5   )r   r6   s   "r   r   SourceEntry.__annotate__  s     . .S .d
 .r   c                d   R V n         R V n        RV n        . V n        RV n        RV n        RV n        . V n        RV n        Wn	        Vf    \        P                  P                  R4      pVP                  R4      '       d   \        R4      hW n        V P!                  V4       RV n        . V n        R# )Frd   NDir::Etc::sourcelist.sourcesz6Classic SourceEntry cannot be written to .sources file)r   r   rF   r   r   r   r   r   r   r   r   config	find_fileendswithr  r   parser   children)r>   r   r   s   &&&r   r?   SourceEntry.__init__  s    	(*$(	 "
	<>>++,BCD==$$UVV	

4)-+-r   c                &   < V ^8  d   QhRS[ RS[ /# r   r   )r   r6   s   "r   r   rW    s     
 
C 
C 
r   c                x   V P                   VP                   8H  ;'       d    V P                  VP                  8H  ;'       dz    V P                  P                  R4      VP                  P                  R4      8H  ;'       d;    V P                  VP                  8H  ;'       d    V P
                  VP
                  8H  # r   r   r   s   &&r   r   SourceEntry.__eq__  s     MMU^^+ * *		UZZ'* *$		(8(8(==* * 		UZZ'* * 

ekk)	
r   c                6   < V ^8  d   QhRS[ RS[S[ ,          /# )r   r   r   )r   r+   )r   r6   s   "r   r   rW    s     # #c #d3i #r   c                l   V P                  4       p . pRpRpRp\        \        V 4      4       F  pW,          R8X  d;   V'       d    RpRpVP                  V4       W,          pK7  RpW V,          ,          pKJ  W,          R8X  d   RpW V,          ,          pKj  V'       d:   W,          P	                  4       '       g   RpVP                  V4       W,          pK  W,          P	                  4       '       d   V'       g   RpK  W V,          ,          pK  	  \        V4      ^ 8  d   VP                  V4       V# )zta split() implementation that understands the sources.list
format better and takes [] into account (for e.g. cdroms)rd   F[T])r   rangelenappendisspace)r   piecestmpp_foundspace_foundis   &     r   re   SourceEntry.mysplit  s     zz|s4y!Aw#~"'K"GMM#&'C"G7NCCAwTW__%6%6#c"g""7"Aw- "0 s8a<MM#r   c                $   < V ^8  d   QhRS[ RR/# )r   r   r   Nr5   )r   r6   s   "r   r   rW  3  s     > ># >$ >r   c                   Wn         VP                  4       pVR8X  g   VR8X  d
   RV n        R# V^ ,          R8X  dM   RV n        VR,          P                  4       P	                  4       pV^ ,          R9   g
   RV n        R# VR,          pVP                  R4      pV^ 8  d   W^,           R V n        VRV pV P                  V4      p\        V4      ^8  d
   RV n        R# V^ ,          P                  4       V n	        V P                  R9  d
   RV n        R# V^,          P                  4       ^ ,          R8X  d   VP                  ^4      P                  R4      P	                  4       pV Fb  p VP	                  R^4      w  rgVR	8X  d   VP	                  R
4      V n        K7  VR8X  d   \        P                  ! V4      V n        K[  RV n        Kd  	  V^,          P                  4       V n        \        V P                   4      ^8  d   RV n        V^,          P                  4       V n        \        V4      ^8  d   VR,          V n        R# . V n        R#   \         d    RT n         K  i ; i)zPparse a given sources.list (textual) line and break it up
into the field we haverd   #TN   NNrf  z[]=r  ,r   :   NN)rpmrpm-srcdebdeb-src)r|  r}  rz  r{  )r   r   r   r   r"   findr   re   ri  rF   popr   r   r   r   	Exceptionr   r   r   )r>   r   rl  rp  optionsoptionr3   rN   s   &&      r   r^  SourceEntry.parse3  s    	zz|2:DL7c> DM"X^^%++-F!9 DD#BxIIcNq5A=DL8Dd#v;?DL1IOO%	99@@DL!9??Q3&jjm))$/557G!
,!'c1!5JC f}-2[[-=*	)'.'='=e'D'+ " !9??$txx=1DL 1IOO%	v;?DJDJ+ ! (#'DL(s   ,II&%I&c                $   < V ^8  d   QhRS[ RR/# )r   	new_valuer   Nr   )r   r6   s   "r   r   rW  s  s     	, 	,T 	,d 	,r   c                   V'       * V n         V'       d1   V P                  P                  4       P                  R4      V n        R# V P                  P                  4       ^ ,          R8w  d   RV P                  ,           V n        R# R# )z!set a line to enabled or disabledrt  N)r   r   lstripr   )r>   r  s   &&r   r   SourceEntry.set_enableds  s[    %		((*11#6DI yy #s*$))O	 +r   c                    < V ^8  d   QhRS[ /# r   r5   )r   r6   s   "r   r   rW  ~  s     " " "r   c                >    V P                  4       P                  4       # )zdebug helperr   r   s   &r   r   SourceEntry.__str__~  s    xxz!!r   c                    < V ^8  d   QhRS[ /# r   r5   )r   r6   s   "r   r   rW    s      S r   c                p   V P                   '       d   V P                  # RpV P                  '       d   RpWP                  ,          pV P                  '       dV   V P
                  eH   TRP                  RP                  V P                  4      V P
                  '       d   RMR4      ,          pMnV P
                  e&   TRV P
                  '       d   RMR,          ,          pM;V P                  '       d*   VRRP                  V P                  4      ,          ,          pVR	V P                   R	V P                   2,          p\        V P                  4      ^ 8  d*   VR	R	P                  V P                  4      ,           ,          pV P                  R8w  d   VR
V P                  ,           ,          pVR,          pV# )z!return the current line as stringrd   z# z [arch={} trusted={}]rx  r   r   z [trusted=%s]z
 [arch=%s]rk   z #
)r   r   r   rF   r   r   r   rl   r   r   ri  r   r   )r>   r   s   & r   r   SourceEntry.str  sG   <<<99===D		$,,":+22++,4 D \\%Ou$GGDL388D,>,>#???D!DHH:Qtyyk**tzz?QC#((4::...D<<2D4<<''Dr   c                D   < V ^8  d   QhRS[ S[P                  ,          /# r   r+   builtinsr   )r   r6   s   "r   r   rW    s      tHLL) r   c                    V P                   .# )z'deb822 compatible accessor for the typer$  r   s   &r   r   SourceEntry.types       		{r   c                D   < V ^8  d   QhRS[ S[P                  ,          /# r   r  )r   r6   s   "r   r   rW    s      d8<<( r   c                    V P                   .# )z&deb822 compatible accessor for the urir-  r   s   &r   r   SourceEntry.uris  s     zr   c                D   < V ^8  d   QhRS[ S[P                  ,          /# r   r  )r   r6   s   "r   r   rW    s      X\\* r   c                    V P                   .# )z(deb822 compatible accessor for the suiter)  r   s   &r   r   SourceEntry.suites  r  r   )r   r_  r   r   r   r   r   r   r   r   r   rF   r   r:   )rU   rV   rW   rX   r<   r?   r   staticmethodre   r^  r   r   r   r  r   r   r   rY   rZ   r[   s   @r   r   r     s     #. .(
 
 # #J> >@	, 	," " 6      r   c                   6   a  ] tR tRt o RtV 3R lR ltRtV tR# )r   i  za Matcher that does nothingc                &   < V ^8  d   QhRS[ RS[/# r)   AnyExplodedSourceEntryr   )r   r6   s   "r   r   NullMatcher.__annotate__  s      - $ r   c                    R # )Tr   )r>   r*   s   &&r   matchNullMatcher.match  s    r   r   N)rU   rV   rW   rX   r<   r  rY   rZ   r[   s   @r   r   r     s     % r   c                   >  a  ] tR tRt o RtR$RR/V 3R lR llltV 3R lR ltV 3R	 lR
 ltV 3R lR ltRR%R. R3V 3R lR llt	V 3R lR lt
V 3R lR ltR&V 3R lR lltV 3R lR ltV 3R lR ltV 3R lR ltV 3R lR ltV 3R lR  ltV 3R! lR" ltR#tV tR# )'r   i  z6represents the full sources.list + sources.list.d filedeb822Fc                ,   < V ^8  d   QhRS[ RS[RS[ /# )r   withMatchermatcherPathr  )r   r   )r   r6   s   "r   r   SourcesList.__annotate__  s)       
 r   c                   . V n         V  V'       d   \        V4      V n        M\        4       V n        W0n        V P                  4        R # r:   )r+   r   matcherr   r  refresh)r>   r  r  r  s   &&&$r   r?   SourcesList.__init__  s4     +-	-k:DL&=DLr   c                   < V ^8  d   QhRR/# r   r   )r   r6   s   "r   r   r    s     + + +r   c                   . V n         \        P                  P                  R4      pVR8w  d7   \        P
                  P                  V4      '       d   V P                  V4       \        P                  P                  R4      pVR8w  d   \        P
                  P                  V4      '       d   \        \        P                  ! V4      4       Fs  pV P                  '       d   VP                  R4      '       g   VP                  R4      '       g   KE  V P                  \        P
                  P                  W!4      4       Ku  	  V P                    F2  pVP                  '       d   K  V P                  P!                  V4       K4  	  R# )z update the list of known entriesrY  z	/dev/nullDir::Etc::sourcepartsrZ  z.listN)r+   r   r[  r\  ospathexistsloadfind_dirsortedlistdirr  r]  rl   r   r  r  )r>   r   partsdirsources   &   r   r  SourcesList.refresh  s    	~~''(>?;277>>$#7#7IIdO>>**+BC{"rww~~h'?'?rzz(34KKKDMM*$=$=$--C C IIbggll8:;	 5 iiF>>>""6*  r   c                0   < V ^8  d   QhRS[ S[,          /# r   )r   r   )r   r6   s   "r   r   r    s      (>2 r   c              #  :   "   V P                    Rj  xL
  R#  L5i)z?simple iterator to go over self.list, returns SourceEntry
typesNr+   r   s   &r   __iter__SourcesList.__iter__  s      99s   c                T   < V ^8  d   QhRS[ S[.S[3,          RS[RS[S[,          /# )r   
predicatesattrsr   )r   r  r   r   r   )r   r6   s   "r   r   r    s9     
 
#%;$<d$BC
NQ
	(	)
r   c              /    aa"   SP                  R R4      pV P                  4        F  oV'       dD   SP                  '       d2   VP                  R4      SP                  P                  R4      8w  d   KN  \        ;QJ d     VV3R lS 4       F  '       d   K   RM	  RM! VV3R lS 4       4      '       g   K  \        ;QJ d    V3R lV 4       F  '       d   K   RM	  RM! V3R lV 4       4      '       g   K  Sx  K  	  R# 5i)r   Nr   c              3   P   <"   T F  p\        SV4      SV,          8H  x  K  	  R # 5ir:   )getattr)r   r3   r  r  s   & r   r   %SourcesList.__find.<locals>.<genexpr>  s!     G#763'5:5s   #&FTc              3   2   <"   T F  q! S4      x  K  	  R # 5ir:   r   )r   	predicater  s   & r   r   r    s      P3=i	&!!:s   )r  exploded_listr   r!   r   )r>   r  r  r   r  s   &*l @r   __findSourcesList.__find  s      iit$((*Fvzzzcjjo9J9J39O&OsGGsssGGGGCC P3=PCCC P3=P M M  +s/   ?D;D DD9
DDD;
Drd   Nc                   < V ^8  d   QhRS[ RS[ RS[ RS[S[ ,          RS[ RS[RS[ R,          R	S[S[ ,          R
S[R,          RS[/
# )r   rF   r   r   
orig_compsr   posr   Nr   rq   r   )r   r+   intr   r  )r   r6   s   "r   r   r    s     i ii i 	i
 Ii i i Dji  }i '-i 
 ir   c
           	       a VP                  4       pVP                  R4      p
V
'       d   VR,          P                  4       p\        S4      oVR,          pV P	                  V3R lV
RVVVR7      pV FE  pV F<  pWP
                  9   g   K  WP                  V4       \        V4      ^ 8X  g   K8  Vu u # 	  KG  	  V P	                  V3R lRVVVR7      pV F  pVP                  V
8X  dI   \        VP
                  4      \        V4      8w  d"   \        VP
                  V,           4      Vn        Vu # VP                  '       g   Kp  V
'       d   Kz  \        VP
                  4      \        V4      8X  g   K  RVn        Vu # 	  Vf    \        P                  P                  R
4      pVP                  R4      '       d   \        R	WpR7      pV	'       dc   \        V	RV	4      p	\!        V	\        4      '       g   Q hV	P"                  P$                   F#  pV	P"                  V,          VP"                  V&   K%  	  V.Vn        V.Vn        V.Vn        Wn        S'       d   \-        S4      Vn        W_P"                  n        Wn        MV
'       d   RMRTS'       d   RRP3                  S4      ,          MRVV.pVP5                  V4       V'       d   VP7                  RV,           4       RP3                  R V 4       4      R,           p\9        V4      pVe   Wn        V P<                  P?                  V4       V^ 8  d   V P,                  P7                  V4       V# V P,                  PA                  Wo4       V# )z
Add a new source to the sources.list.
The method will search for existing matching repos and will try to
reuse them as far as possible
rt  ru  :NNNc                 4   < \        V P                  4      S8H  # r:   r-   r   r*   r   s   &r   <lambda>!SourcesList.add.<locals>.<lambda>      c!//*m;r   F)r   r   rF   r   r   c                 4   < \        V P                  4      S8H  # r:   r  r  s   &r   r  r    r  r   )r   rF   r   r   NrY  rZ  )r   r+   rq   rd   z	[arch=%s]rx  rk   c              3   8   "   T F  q'       g   K  Vx  K  	  R # 5ir:   r   )r   parts   & r   r   "SourcesList.add.<locals>.<genexpr>P  s     ;UTdDDUs   	
r  )!r   
startswithr  r-   _SourcesList__findr   r$   ri  r   r.   r   r[  r\  r]  r   r  r   rH   r   r   r   r   r+   r   r   rl   extendrj  r   r   r  r  rC  )r>   rF   r   r   r  r   r  r   r   rq   r   r   sourcesr  new_comp	new_entrykpartsr   s   &&&&&&&&f&         r   r  SourcesList.add  s   $ zz|??3'8??$DM* 1++;  
 F!||+ kk(345zQ% "  ++;  
 F(* v||$E
2#'u(<#=FLv||$E
2&+FO!M  <>>++,BCD==$$)$TEI 6:!&*;<<<<,,A+1>>!+<I%%a( -#fIO!UIN $vI#O*.}*=	''.$!)  R;Hsxx66bE LLS7]+88;U;;dBD#D)I!%9%7IIY'  IIS,r   c                $   < V ^8  d   QhRS[ RR/# )r   source_entryr   N)r  )r   r6   s   "r   r   r  ]  s     ' '#9 'd 'r   c                    \        V\        4      '       d   VP                  4        VP                  pV P                  P                  V4       R# )z0remove the specified entry from the sources.listN)r   ry   r~   rq   r+   rA  )r>   r  s   &&r   rA  SourcesList.remove]  s9    l$=>>""$'..L		&r   c                $   < V ^8  d   QhRS[ RR/# )r   
backup_extr   Nr5   )r   r6   s   "r   r   r  d  s     	5 	5 	5 	5r   c                8   \         P                  P                  R4      p\        P                  P                  W!,           4      '       dC   \        P                  P                  V4      '       d   \        P                  ! W!,           V4       \         P                  P                  R4      p\        P                  ! RV,          4       FM  p\        P                  P                  W!,           4      '       g   K0  \        P                  ! W!,           V4       KO  	  R# )z8restore sources.list files based on the backup extensionrY  r  z%s/*N)
r   r[  r\  r  r  r  shutilcopyr  glob)r>   r  r   r  s   &&  r   restore_backupSourcesList.restore_backupd  s    ~~''(>?77>>$+,,1E1EKK)40>>**+BCIIfx/0Dww~~d/00D-t4 1r   c                4   < V ^8  d   QhRS[ R,          RS[ /# )r   r  Nr   r5   )r   r6   s   "r   r   r  o  s     	 	t 	s 	r   c                Z   \        4       pVf   \        P                  ! R4      pV P                   Fv  pVP                  V9  g   K  \
        P                  P                  VP                  4      '       g   KG  \        P                  ! VP                  VP                   V 24       Kx  	  V# )zxmake a backup of the current source files, if no backup extension
is given, the current date/time is used (and returned)z%y%m%d.%H%M)
r-   timestrftimer+   r   r  r  r  r  r  )r>   r  already_backupedr  s   &&  r   backupSourcesList.backupo  sx     +.%}5JiiF{{"22rww~~fkk7R7RFKKFKK=)EF   r   c                $   < V ^8  d   QhRS[ RR/# )r   r   r   Nr5   )r   r6   s   "r   r   r  z  s     F F F Fr   c                    \        V4      ;_uu_ 4       pVP                  R4      '       dE   \        P                  ! V4       F)  pV P                  P                  \        W1V R7      4       K+  	  M/V F)  p\        WA4      pV P                  P                  V4       K+  	  RRR4       R#   + '       g   i     R# ; i  \         d)   p\        P                  ! RT RT R24        Rp?R# Rp?ii ; i)z(re)load the current sourcesrZ  r  Nzcould not open file 'z': r  )openr]  r   Filer+   rj  r   r   r  loggingwarning)r>   r   frH   r   r  excs   &&     r   r  SourcesList.loadz  s    
	Fdq==,,#*<<?		(():7t)TU $3 !"!,T!8		((0 !"   	FOO3D6SEDEE	Fs5   B> BB* B> *B;	5B> ;B> >C1	C,,C1c                &   < V ^8  d   QhRS[ RS[/# )r   entryr   )r  r  )r   r6   s   "r   r   r    s     & &1 &c &r   c                    \        V\        4      '       d&   V P                  P                  VP                  4      # V P                  P                  V4      # r:   )r   ry   r+   r$   rq   )r>   r  s   &&r   r$   SourcesList.index  s:    e67799??5<<00yyu%%r   c                   < V ^8  d   QhRR/# r   r   )r   r6   s   "r   r   r    s      t r   c                   RpV'       d   ^ pRpV^,           \        V P                  4      8  g   K/  V P                  V,          p\        V\        4      '       dh   V^,           pV\        V P                  4      8  dE   VP	                  V P                  V,          4      '       d   V P                  V RpKS  V^,          pK^  V^,          pK  R# )z=Merge consecutive entries that have been split back together.TFN)ri  r+   r   r   r  )r>   mergedrp  r  js   &    r   r  SourcesList.merge  s    AFa%#dii.(		!e%677AAc$))n, ;;tyy|44 $		!%)FFAQ r   c                   < V ^8  d   QhRR/# r   r   )r   r6   s   "r   r   r    s      d r   c                *   / p\        V P                  4      ^ 8X  dR   \        P                  P	                  R4      pRp\        VR4      ;_uu_ 4       pVP                  V4       RRR4       R# V P                  4         V P                   F  pVP                  V9  d$   \        VP                  R4      WP                  &   M7\        V\        4      '       d"   WP                  ,          P                  R4       WP                  ,          P                  VP                  4       4       K  	  VP                  4        F  pVP                  4        K  	  R#   + '       g   i     R# ; i  TP                  4        F  pTP                  4        K  	  i ; i)zsave the current sourcesrY  z## See sources.list(5) for more information, especialy
# Remember that you can only use http, ftp or file URIs
# CDROMs are managed through the apt-cdrom tool.
wNr  )ri  r+   r   r[  r\  r  writer  r   r   r   r   rh   close)r>   filesr  r   r  r  s   &     r   saveSourcesList.save  s   -/tyy>Q>>++,BCDE  dCA !

		));;e+)-fkk3)?E++&(9::++&,,T2kk"((6 $ \\^	 $ ! \\^	 $s   E?B-E) E&	))Fc          	         < V ^8  d   QhRS[ S[,          RS[S[S[,          S[S[S[S[,          3,          3,          /# )r   rD  r   )r   r   tupler+   dictr   )r   r6   s   "r   r   r    s@     / /$^4/	tN#T(D4H*H%II	J/r   c                J   . p/ pV F  pVP                   f   K  VP                   P                  '       d2   VP                   pWS9  d   . W5&   W5,          pVP                  V4       K`  \        VP                   P                  4      ^ 8  g   K  VP                  V4       K  	  W#3# )z5get all parent and child channels in the sources list)r   r   rj  ri  r_  )r>   rD  parentsused_child_templatesr  r3   temps   &&     r   check_for_relationsSourcesList.check_for_relations  s     EG"F& $$$oo202(-+0F# v//014NN6* #$ ..r   c                0   < V ^8  d   QhRS[ S[,          /# r   )r+   r  )r   r6   s   "r   r   r    s      t$:; r   c                4   . pV P                    EF  p\        V\        4      '       d   VP                  V4       K-  \	        VP
                  4      ^8X  dH   \	        VP                  4      ^8X  d.   \	        VP                  4      ^8X  d   VP                  V4       K  VP
                   Ff  pVP                   FS  pVP                   F@  pVP                  \        W#WE4      4       V P                  P                  VR,          4       KB  	  KU  	  Kh  	  EK  	  V# )a&  Present an exploded view of the list where each entry corresponds exactly to a Release file.

A release file is uniquely identified by the triplet (type, uri, suite). Old style entries
always referred to a single release file, but deb822 entries allow multiple values for each
of those fields.
)r+   r   r   rj  ri  r   r   r   ry   r  r  )r>   resr  r   r   suis   &     r   r  SourcesList.exploded_list  s     -/YYE%--

5!EKK A%

Oq(%*

5! ;;C$zz#(<<CJJ'@S'VW LL..s2w7 $0  * '   
r   )r  r+   r  )Tz /usr/share/python-apt/templates/r  r:   )rU   rV   rW   rX   r<   r?   r  r  r  r  rA  r  r  r  r$   r  r  r  r  rY   rZ   r[   s   @r   r   r     s     @
   + +( 

 
$ ')04i iV' '	5 	5	 	F F& &
 $ 8/ /4 r   c                   H   a  ] tR tRt o RtV 3R lR ltV 3R lR ltRtV tR# )	r   i  zlmatcher class to make a source entry look nice
lots of predefined matchers to make it i18n/gettext friendly
c                    < V ^8  d   QhRS[ /# )r   r  r5   )r   r6   s   "r   r   SourceEntryMatcher.__annotate__  s      C r   c                ^   . V n         \        P                  ! R V,          4      pV F  p\        P                  P	                  V4      pVP                  R4      pV^ V p\        W1R7      pVP                    F.  pVP                  f   K  V P                   P                  V4       K0  	  K  	  R# )z	%s/*.infoz.info)base_dirN)		templatesr  r  r  basenamer~  r   	match_urirj  )r>   r  
spec_filesr  rp  r   r   s   &&     r   r?   SourceEntryMatcher.__init__  s    )+YY{[89
A  #AwA!AAA4D NN%%1NN))(3 +  	r   c                &   < V ^8  d   QhRS[ RS[/# )r   r  r   r  )r   r6   s   "r   r   r#    s      2 t r   c                   RpV P                    EFu  pVP                  e   VP                  f   K"  VP                  e   VP                  e   VP                  e   VP                  e   \
        P                  ! VP                  VP                  4      '       di   \
        P                  ! VP                  VP                  4      '       d8   VP                  VP                  8X  g   VP                  R8X  d   RpW1n	         V# VP                  VP                  4      '       g   EK  VP                  f   EK(  VP                  f   EK9  \
        P                  ! VP                  VP                  4      '       g   EKm  RpW1n	         V# 	  V# )z%Add a matching template to the sourceFr|  T)r&  r   r   r(  
match_nameresearchr  rF   r   r'   )r>   r  foundr   s   &&  r   r  SourceEntryMatcher.match  s   Hzz!V[[%8"".''3JJ*KK+IIh00&**==HHX00&++>> -%1G"*  ""6::..''3KK+HHX00&++>>"*7 '6 r   )r&  N)	rU   rV   rW   rX   r<   r?   r  rY   rZ   r[   s   @r   r   r     s       r   __main__zentry %sz!http://archive.ubuntu.com/ubuntu/z$http://de.archive.ubuntu.com/ubuntu/zis_mirror(): %sz http://archive.ubuntu.com/ubuntuz#http://de.archive.ubuntu.com/ubuntu)r'   r   r   r   r   r   )3r  r  ior  os.pathr  r.  r  r  r   collections.abcr   r   r   typingr   r   r   r	   r
   r   rd   r   distinfor   r   r   __all__r'   r.   r  r0   r]   ro   r   r   r   ry   r   r   r  r   r   r   rU   init_configr  r  infor   mirrorr   r   r   <module>r<     s  4   	   	    8 8 9 9   ( CL:*( *&1 1 /Hgaj / 
z< z<zN  N b~ ~B {$556"$== 
 s sl	1 1j zmGZ%))+-.  +-SF LL"V+,LL.0V	

 LL/1V	
% r   