§
    íóÉjaÃ ã                   ó  — d Z 	 ddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlmZmZ ddlmZmZ ddlmZ ddlZddlmZ ddlmZ ddlmZ dd	lmZmZ dd
lmZ d„ Z G d„ d¦  «        Z  G d„ d¦  «        Z! G d„ d¦  «        Z" G d„ de"¦  «        Z# G d„ de"¦  «        Z$ G d„ de"¦  «        Z% G d„ de"¦  «        Z& G d„ de"¦  «        Z' G d„ de"¦  «        Z( G d„ de"¦  «        Z) G d „ d!e"¦  «        Z* G d"„ d#e"¦  «        Z+ G d$„ d%e"¦  «        Z, G d&„ d'e"¦  «        Z- G d(„ d)e"¦  «        Z. G d*„ d+e"¦  «        Z/ G d,„ d-¦  «        Z0 G d.„ d/¦  «        Z1 G d0„ d1¦  «        Z2d2„ Z3d3„ Z4d4„ Z5d5„ Z6ddd7„Z7d8„ Z8ded9„Z9d:„ Z:dfd<„Z;d=„ Z<d>„ Z=d?„ Z>d@„ Z? e0¦   «         Z@e@jA        ZAdA„ ZBdB„ ZCdC„ ZDeEdDk    �rGddElFmGZG  eG¦   «         ZHeH I                    dFdGdHdIdJ¬K¦  «         eH I                    dLdMdNdOdPdQ¬R¦  «         eH I                    dSdTdUdOdPdV¬R¦  «         eH I                    dWdXdYdOdPdZ¬R¦  «         eH I                    d[d\d]ejJ         K                    d^¦  «        d_¬`¦  «         eH L                    ¦   «         \  ZMZN e0eMjO        ¬a¦  «        ZPeNrAeND ]<ZQeP A                    eQeMjR        eMjS        eMjT        eMjU        ¬b¦  «        ZVeVs
eMjU        r dS Œ=dS eP A                    eMjR        eMjS        eMjT        eMjU        ¬c¦  «         dS dS )gaH	  
The NLTK corpus and module downloader.  This module defines several
interfaces which can be used to download corpora, models, and other
data packages that can be used with NLTK.

Downloading Packages
====================
If called with no arguments, ``download()`` will display an interactive
interface which can be used to download and install new packages.
If Tkinter is available, then a graphical interface will be shown,
otherwise a simple text interface will be provided.

Individual packages can be downloaded by calling the ``download()``
function with a single argument, giving the package identifier for the
package that should be downloaded:

    >>> download('treebank') # doctest: +SKIP
    [nltk_data] Downloading package 'treebank'...
    [nltk_data]   Unzipping corpora/treebank.zip.

NLTK also provides a number of "package collections", consisting of
a group of related packages.  To download all packages in a
colleciton, simply call ``download()`` with the collection's
identifier:

    >>> download('all-corpora') # doctest: +SKIP
    [nltk_data] Downloading package 'abc'...
    [nltk_data]   Unzipping corpora/abc.zip.
    [nltk_data] Downloading package 'alpino'...
    [nltk_data]   Unzipping corpora/alpino.zip.
      ...
    [nltk_data] Downloading package 'words'...
    [nltk_data]   Unzipping corpora/words.zip.

Download Directory
==================
By default, packages are installed in either a system-wide directory
(if Python has sufficient access to write to it); or in the current
user's home directory.  However, the ``download_dir`` argument may be
used to specify a different installation target, if desired.

See ``Downloader.default_download_dir()`` for more a detailed
description of how the default download directory is chosen.

NLTK Download Server
====================
Before downloading any packages, the corpus and module downloader
contacts the NLTK download server, to retrieve an index file
describing the available packages.  By default, this index file is
loaded from ``https://raw.githubusercontent.com/nltk/nltk_data/gh-pages/index.xml``.
If necessary, it is possible to create a new ``Downloader`` object,
specifying a different URL for the package index file.

Usage::

    python nltk/downloader.py [-d DATADIR] [-q] [-f] [-k] PACKAGE_IDS

or::

    python -m nltk.downloader [-d DATADIR] [-q] [-f] [-k] PACKAGE_IDS
é    N)Úmd5Úsha256)Ú	HTTPErrorÚURLError)ÚElementTree)Ú_check_decompression_bomb)ÚZipFile)Úopen)ÚurlopenÚvalidate_path)Úparsec                 óÜ  — | sdS 	 t           j                             t          | ¦  «        ¦  «        }n# t          t
          f$ r Y dS w xY wddlm} |}t           j                             |¦  «        s„t           j         	                    |¦  «        |k    rat           j         	                    |¦  «        }t           j                             |¦  «        s#t           j         	                    |¦  «        |k    °a| 
                    |¦  «        st          j        d|›d�d¬¦  «         dS d„ t          j        j        D ¦   «         }||vr&t          j        j                             |¦  «         dS dS )	aà  Register a caller-chosen NLTK data / download directory on
    ``nltk.data.path`` so that the downloader's own reads and writes under it
    pass the ``nltk.pathsec`` sandbox.

    A ``download_dir`` is an explicit, trusted destination for NLTK's own data,
    so the specific directory is authorized -- as opposed to blanket-allowing a
    shared location such as the system temp dir, which would widen the sandbox
    for every caller (GHSA-p4rw follow-up, CWE-73/CWE-378).
    Nr   )Úpathsecz;NLTK will not authorize the non-private download directory z�: it (or an ancestor) is world- or group-writable, so another local user could plant files there. Choose a private location such as ~/nltk_data.é   ©Ú
stacklevelc                 ó�   — h | ]C}t          |t          ¦  «        ¯t          j                             t          |¦  «        ¦  «        ’ŒDS © )Ú
isinstanceÚstrÚosÚpathÚrealpath©Ú.0Úps     úr/home/lighthouse/badge-speaker-benchmark/.benchmark-venv-community/lib/python3.11/site-packages/nltk/downloader.pyú	<setcomp>z&_authorize_data_dir.<locals>.<setcomp>Þ   s>   € ÐWÐWÐW¨QÅJÈqÕRUÑDVÔDVÐW•”× Ò ¥ Q¡¤Ñ(Ô(ÐWÐWÐWó    )r   r   r   r   ÚOSErrorÚ
ValueErrorÚnltkr   ÚexistsÚdirnameÚis_private_dirÚwarningsÚwarnÚdataÚappend)Ú	directoryÚresolvedr   ÚprobeÚexistings        r   Ú_authorize_data_dirr.   º   s~  € ð ð ØˆðÝ”7×#Ò#¥C¨	¡N¤NÑ3Ô3ˆˆøÝ•ZÐ ð ð ð Øˆˆðøøøð ÐÐÐÐÐà€EÝŒg�nŠn˜UÑ#Ô#ð '­¬¯ª¸Ñ(>Ô(>À%Ò(GÐ(GÝ”—’ Ñ&Ô&ˆõ Œg�nŠn˜UÑ#Ô#ð '­¬¯ª¸Ñ(>Ô(>À%Ò(GÐ(Gà×!Ò! %Ñ(Ô(ð ÝŒð-Øð-ð -ð -ð ð	
ñ 	
ô 	
ð 	
ð 	ˆàWÐWµ$´)´.ÐWÑWÔW€HØ�xÐÐÝŒ	Œ×Ò˜hÑ'Ô'Ð'Ð'Ð'ð  Ðs   †,3 ³AÁAc                   óR   — e Zd ZdZ	 	 	 	 	 	 	 	 	 	 	 d
d„Zed„ ¦   «         Zd„ Zd	„ ZdS )ÚPackagea4  
    A directory entry for a downloadable package.  These entries are
    extracted from the XML index file that is downloaded by
    ``Downloader``.  Each package consists of a single file; but if
    that file is a zip file, then it can be automatically decompressed
    when the package is installed.
    NÚ ÚUnknownTc                 óV  — || _         	 |p|| _        	 t          j                             |¦  «        s+d|                     dd¦  «                             d¦  «        v rt          d|›d�¦  «        ‚|| _        	 t          j	        |v sd|v sd|v sd|v rt          d|›d�¦  «        ‚|| _
        	 t          |¦  «        | _        	 t          |¦  «        | _        	 || _        	 || _        	 |	| _        	 |
| _        	 || _        	 || _        	 t          j                             |                     d¦  «        d         ¦  «        d	         }t+          t          |¦  «        ¦  «        | _        	 | j                             |¦  «         t          j                             |||z   ¦  «        | _        d S )
Nz..ú\ú/zInvalid package subdir z=: must be a relative path without parent directory referenceszInvalid package id z": must not contain path separatorséÿÿÿÿé   )ÚidÚnamer   r   ÚisabsÚreplaceÚsplitr!   ÚsubdirÚsepÚurlÚintÚsizeÚunzipped_sizeÚchecksumÚsvn_revisionÚ	copyrightÚcontactÚlicenseÚauthorÚsplitextÚboolÚunzipÚ__dict__ÚupdateÚjoinÚfilename)Úselfr8   r?   r9   r=   rA   rB   rC   rD   rE   rF   rG   rH   rK   ÚkwÚexts                   r   Ú__init__zPackage.__init__ñ   sÉ  € ð" ˆŒØ3à�J˜BˆŒ	Ø-õ Œ7�=Š=˜Ñ Ô ð 	 D¨F¯NªN¸4ÀÑ,EÔ,E×,KÒ,KÈCÑ,PÔ,PÐ$PÐ$PÝð7¨&ð 7ð 7ð 7ñô ð ð ˆŒð	4õ Œ6�Rˆ<ˆ<˜3 "˜9˜9¨°¨
¨
°d¸b°j°jÝØN bÐNÐNÐNñô ð ð ˆŒØEå˜‘I”IˆŒ	Ø:å  Ñ/Ô/ˆÔð	ð !ˆŒØ4à(ˆÔØ<à"ˆŒØ0àˆŒð	,ð ˆŒØ3àˆŒØ%åŒg×Ò˜sŸyšy¨™~œ~¨bÔ1Ñ2Ô2°1Ô5ˆå�#˜e™*œ*Ñ%Ô%ˆŒ
ð	ð 	Œ×Ò˜RÑ Ô Ð ÝœŸš V¨R°#©XÑ6Ô6ˆŒð	3ð 	3r   c                 óÄ   — t          | t          ¦  «        rt          | ¦  «        } | j        D ]$}t          | j        |         ¦  «        | j        |<   Œ%t	          di | j        ¤ŽS )Nr   )r   r   Ú
safe_parseÚattribr0   )ÚxmlÚkeys     r   ÚfromxmlzPackage.fromxmlB  sa   € å�c�3ÑÔð 	"Ý˜S‘/”/ˆCØ”:ð 	3ð 	3ˆCÝ! #¤*¨S¤/Ñ2Ô2ˆCŒJ�s‰OˆOÝÐ$Ð$˜œÐ$Ð$Ð$r   c                 ó"   — | j         |j         k     S ©N©r8   ©rP   Úothers     r   Ú__lt__zPackage.__lt__J  ó   € ØŒw˜œÒ!Ð!r   c                 ó   — d| j         z  S )Nz<Package %s>r\   ©rP   s    r   Ú__repr__zPackage.__repr__M  s   € Ø ¤Ñ'Ð'r   )Nr1   NNNNr2   r2   r2   r2   T©	Ú__name__Ú
__module__Ú__qualname__Ú__doc__rS   ÚstaticmethodrY   r_   rc   r   r   r   r0   r0   è   s“   € € € € € ðð ð ØØØØØØØØØØðO3ð O3ð O3ð O3ðb ð%ð %ñ „\ð%ð"ð "ð "ð(ð (ð (ð (ð (r   r0   c                   ó<   — e Zd ZdZdd„Zed„ ¦   «         Zd„ Zd„ ZdS )Ú
Collectionz¨
    A directory entry for a collection of downloadable packages.
    These entries are extracted from the XML index file that is
    downloaded by ``Downloader``.
    Nc                 ó~   — || _         	 |p|| _        	 || _        	 d | _        	 | j                             |¦  «         d S r[   )r8   r9   ÚchildrenÚpackagesrL   rM   )rP   r8   rm   r9   rQ   s        r   rS   zCollection.__init__X  sR   € ØˆŒØ6à�J˜BˆŒ	Ø0à ˆŒð	,ð ˆŒð	3ð 	Œ×Ò˜RÑ Ô Ð Ð Ð r   c                 ó  — t          | t          ¦  «        rt          | ¦  «        } | j        D ]$}t          | j        |         ¦  «        | j        |<   Œ%d„ |                      d¦  «        D ¦   «         }t          dd|i| j        ¤ŽS )Nc                 ó8   — g | ]}|                      d ¦  «        ‘ŒS )Úref©Úget)r   Úchilds     r   ú
<listcomp>z&Collection.fromxml.<locals>.<listcomp>p  s$   € ÐFÐFÐF¨�E—I’I˜eÑ$Ô$ÐFÐFÐFr   Úitemrm   r   )r   r   rU   rV   Úfindallrk   )rW   rX   rm   s      r   rY   zCollection.fromxmlj  s…   € å�c�3ÑÔð 	"Ý˜S‘/”/ˆCØ”:ð 	3ð 	3ˆCÝ! #¤*¨S¤/Ñ2Ô2ˆCŒJ�s‰OˆOØFÐF°#·+²+¸fÑ2EÔ2EÐFÑFÔFˆÝÐ:Ð: 8Ð:¨s¬zÐ:Ð:Ð:r   c                 ó"   — | j         |j         k     S r[   r\   r]   s     r   r_   zCollection.__lt__s  r`   r   c                 ó   — d| j         z  S )Nz<Collection %s>r\   rb   s    r   rc   zCollection.__repr__v  s   € Ø  4¤7Ñ*Ð*r   r[   rd   r   r   r   rk   rk   Q  sk   € € € € € ðð ð!ð !ð !ð !ð$ ð;ð ;ñ „\ð;ð"ð "ð "ð+ð +ð +ð +ð +r   rk   c                   ó   — e Zd ZdZdS )ÚDownloaderMessagezSA status message object, used by ``incr_download`` to
    communicate its progress.N)re   rf   rg   rh   r   r   r   r{   r{     s   € € € € € ð!ð !ð !ð !r   r{   c                   ó   — e Zd ZdZd„ ZdS )ÚStartCollectionMessagez<Data server has started working on a collection of packages.c                 ó   — || _         d S r[   ©Ú
collection©rP   r€   s     r   rS   zStartCollectionMessage.__init__‡  ó   € Ø$ˆŒˆˆr   N©re   rf   rg   rh   rS   r   r   r   r}   r}   „  s)   € € € € € ØFÐFð%ð %ð %ð %ð %r   r}   c                   ó   — e Zd ZdZd„ ZdS )ÚFinishCollectionMessagez=Data server has finished working on a collection of packages.c                 ó   — || _         d S r[   r   r�   s     r   rS   z FinishCollectionMessage.__init__Ž  r‚   r   Nrƒ   r   r   r   r…   r…   ‹  s)   € € € € € ØGÐGð%ð %ð %ð %ð %r   r…   c                   ó   — e Zd ZdZd„ ZdS )ÚStartPackageMessagez-Data server has started working on a package.c                 ó   — || _         d S r[   ©Úpackage©rP   r‹   s     r   rS   zStartPackageMessage.__init__•  ó   € ØˆŒˆˆr   Nrƒ   r   r   r   rˆ   rˆ   ’  ó)   € € € € € Ø7Ð7ðð ð ð ð r   rˆ   c                   ó   — e Zd ZdZd„ ZdS )ÚFinishPackageMessagez.Data server has finished working on a package.c                 ó   — || _         d S r[   rŠ   rŒ   s     r   rS   zFinishPackageMessage.__init__œ  r�   r   Nrƒ   r   r   r   r�   r�   ™  ó)   € € € € € Ø8Ð8ðð ð ð ð r   r�   c                   ó   — e Zd ZdZd„ ZdS )ÚStartDownloadMessagez.Data server has started downloading a package.c                 ó   — || _         d S r[   rŠ   rŒ   s     r   rS   zStartDownloadMessage.__init__£  r�   r   Nrƒ   r   r   r   r”   r”      r’   r   r”   c                   ó   — e Zd ZdZd„ ZdS )ÚFinishDownloadMessagez/Data server has finished downloading a package.c                 ó   — || _         d S r[   rŠ   rŒ   s     r   rS   zFinishDownloadMessage.__init__ª  r�   r   Nrƒ   r   r   r   r—   r—   §  ó)   € € € € € Ø9Ð9ðð ð ð ð r   r—   c                   ó   — e Zd ZdZd„ ZdS )ÚStartUnzipMessagez,Data server has started unzipping a package.c                 ó   — || _         d S r[   rŠ   rŒ   s     r   rS   zStartUnzipMessage.__init__±  r�   r   Nrƒ   r   r   r   r›   r›   ®  s)   € € € € € Ø6Ð6ðð ð ð ð r   r›   c                   ó   — e Zd ZdZd„ ZdS )ÚFinishUnzipMessagez-Data server has finished unzipping a package.c                 ó   — || _         d S r[   rŠ   rŒ   s     r   rS   zFinishUnzipMessage.__init__¸  r�   r   Nrƒ   r   r   r   rž   rž   µ  rŽ   r   rž   c                   ó   — e Zd ZdZd„ ZdS )ÚUpToDateMessagez/The package download file is already up-to-datec                 ó   — || _         d S r[   rŠ   rŒ   s     r   rS   zUpToDateMessage.__init__¿  r�   r   Nrƒ   r   r   r   r¡   r¡   ¼  r™   r   r¡   c                   ó   — e Zd ZdZd„ ZdS )ÚStaleMessagez3The package download file is out-of-date or corruptc                 ó   — || _         d S r[   rŠ   rŒ   s     r   rS   zStaleMessage.__init__Æ  r�   r   Nrƒ   r   r   r   r¤   r¤   Ã  s)   € € € € € Ø=Ð=ðð ð ð ð r   r¤   c                   ó   — e Zd ZdZd„ ZdS )ÚErrorMessagez Data server encountered an errorc                 óx   — || _         t          |t          ¦  «        rt          |¦  «        | _        d S || _        d S r[   )r‹   r   Ú	Exceptionr   Úmessage)rP   r‹   rª   s      r   rS   zErrorMessage.__init__Í  s7   € ØˆŒÝ�g�yÑ)Ô)ð 	#Ý˜w™<œ<ˆDŒLˆLˆLà"ˆDŒLˆLˆLr   Nrƒ   r   r   r   r§   r§   Ê  s)   € € € € € Ø*Ð*ð#ð #ð #ð #ð #r   r§   c                   ó   — e Zd ZdZd„ ZdS )ÚProgressMessagez4Indicates how much progress the data server has madec                 ó   — || _         d S r[   )Úprogress)rP   r®   s     r   rS   zProgressMessage.__init__Ø  s   € Ø ˆŒˆˆr   Nrƒ   r   r   r   r¬   r¬   Õ  s)   € € € € € Ø>Ð>ð!ð !ð !ð !ð !r   r¬   c                   ó   — e Zd ZdZd„ ZdS )ÚSelectDownloadDirMessagez:Indicates what download directory the data server is usingc                 ó   — || _         d S r[   )Údownload_dir©rP   r²   s     r   rS   z!SelectDownloadDirMessage.__init__ß  s   € Ø(ˆÔÐÐr   Nrƒ   r   r   r   r°   r°   Ü  s)   € € € € € ØDÐDð)ð )ð )ð )ð )r   r°   c            	       óJ  — e Zd ZdZdZ	 dZ	 dZ	 dZ	 dZ	 dZ		 d(d	„Z
	 	 	 	 	 	 d)d„Zd„ Zd„ Zd„ Zd„ Zd„ Zd*d„Zd„ Zd„ Zd„ Zdddddd
dej        df	d„Zd+d„Zd+d„Zd+d„Zd+d„Zd„ Zd,d„Zd+d„Zd„ Zd „ Z d!„ Z!d"„ Z"d#„ Z# e$e"e#¦  «        Z%d$„ Z&d%„ Z'd&„ Z( e$e'e(¦  «        Z)d'„ Z*dS )-Ú
Downloaderzy
    A class used to access the NLTK data server, which can be used to
    download corpora and other data packages.
    i  zChttps://raw.githubusercontent.com/nltk/nltk_data/gh-pages/index.xmlÚ	installedznot installedzout of dateÚpartialNc                 óØ   — |p| j         | _        	 i | _        	 i | _        	 || _        	 d | _        	 d | _        	 i | _        	 d | _        	 | j        €|  	                    ¦   «         | _        d S d S r[   )
ÚDEFAULT_URLÚ_urlÚ_collectionsÚ	_packagesÚ_download_dirÚ_indexÚ_index_timestampÚ_status_cacheÚ_errorsÚdefault_download_dir)rP   Úserver_index_urlr²   s      r   rS   zDownloader.__init__  s”   € Ø$Ð8¨Ô(8ˆŒ	Ø7àˆÔØEàˆŒØ?à)ˆÔØIàˆŒØ@à $ˆÔð	Lð  ˆÔð	ð
 ˆŒØRð ÔÐ%Ø!%×!:Ò!:Ñ!<Ô!<ˆDÔÐÐð &Ð%r   TFc                 ó  — d}|€| j         }t          d|z  ¦  «         |rjt          ddt          | j        ¦  «        z   z  ¦  «         t          d| j        z  ¦  «         t          ddt          | j        ¦  «        z   z  ¦  «         |dz  }dx}}	g }
|r|
                     d¦  «         |r|
                     d	¦  «         |
D �]�}t          d
|                     ¦   «         z  ¦  «         |dz  }t           t          | |¦  «        ¦   «         t          ¬¦  «        D �](}|  	                    ||¦  «        }|| j
        k    r|rŒ'|| j        k    rd}|| j        k    rd}	| j
        d| j        d| j        d| j        di|         }t          j        d|j        p|j        z   dd¬¦  «        dd …         }t          d                     ||j                             dd¦  «        |¦  «        ¦  «         |t          |                     d¦  «        ¦  «        z  }|r1|dk    r+t+          d¦  «        }|                     ¦   «         dv r  d S d}�Œ*t          ¦   «          �Œ’d}|r|dz  }|	r|dz  }t          t          j        |d z   dd!¬"¦  «        ¦  «         d S )#Nr   z!Using default data directory (%s)ú=é   z Data server index for <%s>r   Frn   Úcollectionsz%s:r7   ©rX   TÚ*ú-ÚPú ú---------------------------éK   ú                           ©Úsubsequent_indenté   z  [{}] {} {}é   ú.ú
zHit Enter to continue: )ÚxÚqz([*] marks installed packagesz+; [-] marks out-of-date or corrupt packagesz+; [P] marks partially installed collectionsú)éL   )rÑ   Úwidth)r½   ÚprintÚlenrº   r)   Ú
capitalizeÚsortedÚgetattrr   ÚstatusÚ	INSTALLEDÚSTALEÚPARTIALÚNOT_INSTALLEDÚtextwrapÚfillr9   r8   ÚformatÚljustr<   ÚinputÚlower)rP   r²   Úshow_packagesÚshow_collectionsÚheaderÚmore_promptÚskip_installedÚlinesÚstaler·   Ú
categoriesÚcategoryÚinforà   Úprefixr9   Ú
user_inputÚmsgs                     r   ÚlistzDownloader.list6  sç  € ð ˆØÐØÔ-ˆLÝÐ5¸ÑDÑEÔEÐEØð 	Ý�#˜�c $¤)™nœnÑ,Ñ-Ñ.Ô.Ð.ÝÐ/°$´)Ñ;Ñ<Ô<Ð<Ý�#˜�c $¤)™nœnÑ,Ñ-Ñ.Ô.Ð.Ø�Q‰JˆEØÐˆ�àˆ
Øð 	*Ø×Ò˜jÑ)Ô)Ð)Øð 	-Ø×Ò˜mÑ,Ô,Ð,Ø"ð 	ñ 	ˆHÝ�%˜(×-Ò-Ñ/Ô/Ñ/Ñ0Ô0Ð0Ø�Q‰JˆEÝÐ6�w t¨XÑ6Ô6Ñ8Ô8½cÐBÑBÔBð ñ �ØŸš T¨<Ñ8Ô8�Ø˜Tœ^Ò+Ð+°Ð+ØØ˜TœZÒ'Ð'Ø �EØ˜Tœ\Ò)Ð)Ø"�Gà”N CØ”J Ø”L #ØÔ&¨ð	ð
 ô�õ  ”}Ø ¤	Ð 4¨T¬WÑ5°rÈXðñ ô à�#�#ô�õ �n×+Ò+¨F°D´G·M²MÀ"ÀcÑ4JÔ4JÈDÑQÔQÑRÔRÐRØ�˜TŸZšZ¨Ñ-Ô-Ñ.Ô.Ñ.�Øð  5¨2¢: :Ý!&Ð'@Ñ!AÔ!A�JØ!×'Ò'Ñ)Ô)¨ZÐ7Ð7Ø˜˜˜Ø�EùÝ‰GŒGˆG‰GØ-ˆØð 	AØÐ@Ñ@ˆCØð 	AØÐ@Ñ@ˆCÝ�hŒm˜C #™I¸ÀBÐGÑGÔGÑHÔHÐHÐHÐHr   c                 ó\   — |                       ¦   «          | j                             ¦   «         S r[   )Ú_update_indexr¼   Úvaluesrb   s    r   rn   zDownloader.packagesr  s(   € Ø×ÒÑÔÐØŒ~×$Ò$Ñ&Ô&Ð&r   c                 óp   — |                       ¦   «          d„ | j                             ¦   «         D ¦   «         S )Nc                 ó.   — g | ]\  }}|j         d k    ¯|‘ŒS ©Úcorpora©r=   ©r   r8   Úpkgs      r   ru   z&Downloader.corpora.<locals>.<listcomp>x  ó(   € ÐWÐWÐW™	˜˜S¸s¼zÈYÒ?VÐ?V�Ð?VÐ?VÐ?Vr   ©rú   r¼   Úitemsrb   s    r   rÿ   zDownloader.corporav  ó6   € Ø×ÒÑÔÐØWÐW T¤^×%9Ò%9Ñ%;Ô%;ÐWÑWÔWÐWr   c                 óp   — |                       ¦   «          d„ | j                             ¦   «         D ¦   «         S )Nc                 ó.   — g | ]\  }}|j         d k    ¯|‘ŒS rþ   r   r  s      r   ru   z%Downloader.models.<locals>.<listcomp>|  r  r   r  rb   s    r   ÚmodelszDownloader.modelsz  r  r   c                 ó\   — |                       ¦   «          | j                             ¦   «         S r[   )rú   r»   rû   rb   s    r   rÇ   zDownloader.collections~  s)   € Ø×ÒÑÔÐØÔ ×'Ò'Ñ)Ô)Ð)r   c                 óZ   — t          |t          ¦  «        r|                      |¦  «        S |S r[   )r   r   rô   )rP   Ú
info_or_ids     r   Ú_info_or_idzDownloader._info_or_id†  s,   € Ý�j¥#Ñ&Ô&ð 	Ø—9’9˜ZÑ(Ô(Ð(àÐr   c              #   ó^  K  — |€| j         }t          |¦  «        V — t          |¦  «         t          |t          t
          f¦  «        r|                      |||¦  «        E d {V —† d S 	 |                      |¦  «        }n7# t          t          f$ r#}t          d d|› d|› �¦  «        V — Y d }~d S d }~ww xY wt          |t          ¦  «        rFt          |¦  «        V — |                      |j        ||¦  «        E d {V —† t          |¦  «        V — d S |                      |||¦  «        E d {V —† d S )NzError loading ú: )r½   r°   r.   r   rø   ÚtupleÚ_download_listr  r    r!   r§   rk   r}   Úincr_downloadrm   r…   Ú_download_package)rP   r  r²   Úforcerô   Úes         r   r  zDownloader.incr_download•  s’  è è € àÐØÔ-ˆLÝ*¨<Ñ8Ô8Ð8Ð8Ð8õ
 	˜LÑ)Ô)Ð)õ �j¥4­ -Ñ0Ô0ð 	Ø×*Ò*¨:°|ÀUÑKÔKÐKÐKÐKÐKÐKÐKÐKØˆFð	Ø×#Ò# JÑ/Ô/ˆDˆDøÝ�Ð$ð 	ð 	ð 	Ý˜tÐ%G°jÐ%GÐ%GÀAÐ%GÐ%GÑHÔHÐHÐHÐHØˆFˆFˆFˆFˆFøøøøð	øøøõ
 �d�JÑ'Ô'ð 	IÝ(¨Ñ.Ô.Ð.Ð.Ð.Ø×)Ò)¨$¬-¸ÀuÑMÔMÐMÐMÐMÐMÐMÐMÐMÝ)¨$Ñ/Ô/Ð/Ð/Ð/Ð/Ð/ð ×-Ò-¨d°LÀ%ÑHÔHÐHÐHÐHÐHÐHÐHÐHÐHÐHs   Á(A> Á>B2ÂB-Â-B2c                 óX   — t          |t          ¦  «        rdS t          |j        ¦  «        S )Nr7   )r   r0   rÜ   rn   )rP   rv   s     r   Ú_num_packageszDownloader._num_packages¶  s)   € Ý�d�GÑ$Ô$ð 	&Ø�1å�t”}Ñ%Ô%Ð%r   c              #   óp  ‡ K  — t          t          |¦  «        ¦  «        D ]Y}	 ‰                      ||         ¦  «        ||<   Œ"# t          t          f$ r$}t          ||         |¦  «        V — Y d }~ d S d }~ww xY wt          ˆ fd„|D ¦   «         ¦  «        }d}t          |¦  «        D ]�\  }}t          |t          ¦  «        rd|z  }	nt          |j
        ¦  «        |z  }	‰                      |||¦  «        D ]8}
t          |
t          ¦  «        rt          ||
j        |	z  z   ¦  «        V — Œ4|
V — Œ9|d|	z  z  }Œ�d S )Nc              3   óB   •K  — | ]}‰                      |¦  «        V — Œd S r[   )r  ©r   rv   rP   s     €r   ú	<genexpr>z,Downloader._download_list.<locals>.<genexpr>Æ  s1   øè è € ÐFÐF¸˜4×-Ò-¨dÑ3Ô3ÐFÐFÐFÐFÐFÐFr   r   g      ð?éd   )ÚrangerÜ   r  r    r!   r§   ÚsumÚ	enumerater   r0   rn   r  r¬   r®   )rP   r  r²   r  Úir  Únum_packagesr®   rv   Údeltar÷   s   `          r   r  zDownloader._download_list¼  s„  øè è € å•s˜5‘z”zÑ"Ô"ð 	ð 	ˆAðØ×+Ò+¨E°!¬HÑ5Ô5��a‘�øÝ�ZÐ(ð ð ð Ý" 5¨¤8¨QÑ/Ô/Ð/Ð/Ð/Ø������øøøøðøøøõ
 ÐFÐFÐFÐFÀÐFÑFÔFÑFÔFˆØˆÝ  Ñ'Ô'ð 	$ð 	$‰GˆAˆtÝ˜$¥Ñ(Ô(ð :Ø˜lÑ*��å˜DœMÑ*Ô*¨\Ñ9�Ø×)Ò)¨$°¸eÑDÔDð ð �Ý˜c¥?Ñ3Ô3ð Ý)¨(°S´\ÀEÑ5IÑ*IÑJÔJÐJÐJÐJÐJà�I�I�I�Ià˜˜e™Ñ#ˆHˆHð	$ð 	$s   £AÁA7ÁA2Á2A7c              #   óÒ  ‡ ‡‡‡‡‡ ‡!K  — t          ‰¦  «        V — t          d¦  «        V — t          j                             ‰‰j        ¦  «        }|dz   }|dz   Š!d„ Š ˆ ˆfd„}t          j                             t          j                             t          j                             ‰¦  «        ¦  «        ¦  «        }t          j                             t          j                             t          j                             |¦  «        ¦  «        ¦  «        } ‰ ||¦  «        r ||¦  «        r ||¦  «        s%t          ‰d‰j
        › d‰j        › d�¦  «        V — d S |                     d	¦  «        r
|d d
…         nd }	d}
d}d„ Šˆfd„}ˆ!fd„}ˆ!fd„}ˆˆˆ fd„Šˆˆ fd„}t          j        ‰d¬¦  «         t          j        t          j                             ‰‰j        ¦  «        d¬¦  «         |sI |¦   «         r? |¦   «         s5t          ‰¦  «        V — t          d¦  «        V — t          ‰¦  «        V — d S 	 |sI |¦   «         r? |¦   «         s5t          ‰¦  «        V — t          d¦  «        V — t          ‰¦  «        V — d S 	 t          j        ‰!t          j        t          j        z  t          j        z  ¦  «        }t          j        |¦  «         ny# t*          $ rj 	 t-          j        ¦   «         t          j        ‰!¦  «        j        z
  }||
k    r ‰‰!¦  «         Y Œæn# t2          $ r Y Y Œôw xY wt-          j        |¦  «         Y nw xY w�Œ	 |sV |¦   «         rLt          ‰¦  «        V — t          d¦  «        V — t          ‰¦  «        V — 	  ‰|¦  «          ‰‰!¦  «         d S  ‰¦   «         }|‰ j        k    rTt9          ‰¦  «        V —  ‰|¦  «          ‰|¦  «         |	r ||	¦  «         ‰ j                             ‰j
        d ¦  «         |s t          j                             |¦  «        �s!tA          ‰¦  «        V — t          d¦  «        V — 	 tC          ‰j"        ¦  «        }tG          |dd‰¬¦  «        5 }tI          d‰j%        dz  ¦  «        }tM          j'        ¦   «         D ]k}| (                    d¦  «        }|s nQ| )                    |¦  «         |dz  dk    r2 |¦   «          t          tU          ddd||z  z  z   ¦  «        ¦  «        V — Œld d d ¦  «         n# 1 swxY w Y   |                     ¦   «          t          j         +                    |¦  «        }|tY          ‰j%        ¦  «        k    rJ ‰|¦  «         t          ‰d‰j
        ›d|› d ‰j%        › d!�¦  «        V — 	  ‰|¦  «          ‰‰!¦  «         d S t[          ‰d"d ¦  «        }|rSt]          |¦  «        |k    r? ‰|¦  «         t          ‰d‰j
        ›d#�¦  «        V — 	  ‰|¦  «          ‰‰!¦  «         d S net[          ‰d$d ¦  «        }|rRt_          |¦  «        |k    r? ‰|¦  «         t          ‰d‰j
        ›d%�¦  «        V — 	  ‰|¦  «          ‰‰!¦  «         d S ta          |d‰¬¦  «         t          j1        ||¦  «         ‰ j                             ‰j
        d ¦  «         n^# td          $ rQ} ‰|¦  «         t          ‰d&‰j
        ›d'‰j"        ›d(|›�¦  «        V — Y d }~ ‰|¦  «          ‰‰!¦  «         d S d }~ww xY wtg          ‰¦  «        V — t          d¦  «        V — ‰j                             d	¦  «        rît          j                             ‰‰j        ¦  «        }‰j4        sBt          j                             t          j                             |‰j
        ¦  «        ¦  «        r€tk          ‰¦  «        V — tm          ||d)‰j
        ¬*¦  «        D ]E} |¦   «          ‰|_7        |V — tq          |t          ¦  «        r  ‰|¦  «          ‰‰!¦  «         d S ŒFts          ‰¦  «        V —  |¦   «         s?t          ‰d+‰j
        ›d, ‰¦   «         › d!�¦  «        V — 	  ‰|¦  «          ‰‰!¦  «         d S t          ‰¦  «        V —  ‰|¦  «          ‰‰!¦  «         d S #  ‰|¦  «          ‰‰!¦  «         w xY w)-Nr   z.tmpz.lockc                 óp   — 	 t           j                             || g¦  «        |k    S # t          $ r Y dS w xY w©NF)r   r   Ú
commonpathr!   )rt   Úroots     r   Ú_withinz-Downloader._download_package.<locals>._withinñ  sH   € ðÝ”w×)Ò)¨4°¨-Ñ8Ô8¸DÒ@Ð@øÝð ð ð Ø�u�uðøøøs   ‚$' §
5´5c                 ó"  •— t           j                             | ¦  «        }t           j                             |¦  «        sGt           j                             |¦  «        }||k    rn!|}t           j                             |¦  «        ¯Gt           j                             |¦  «        }t           j                             t           j                             t           j                             ‰¦  «        ¦  «        ¦  «        } ‰||¦  «        rdS t           j                             t           j                             |¦  «        ¦  «        }t           j                             t           j                             ‰¦  «        ¦  «        } ‰||¦  «        S ©NT)r   r   ÚabspathÚlexistsr$   ÚnormcaseÚnormpathr   )	r   ÚancestorÚparentÚlex_ancestorÚlex_downloadÚreal_ancestorÚreal_downloadr(  r²   s	          €€r   Ú_symlink_containedz8Downloader._download_package.<locals>._symlink_contained÷  s4  ø€ õ
 ”w—’ tÑ,Ô,ˆHÝ”g—o’o hÑ/Ô/ð "ÝœŸš¨Ñ2Ô2�Ø˜XÒ%Ð%ØØ!�õ	 ”g—o’o hÑ/Ô/ð "õ œ7×+Ò+¨HÑ5Ô5ˆLÝœ7×+Ò+Ý”—’¥¤× 0Ò 0°Ñ >Ô >Ñ?Ô?ñô ˆLð ˆw�| \Ñ2Ô2ð Ø�tõ œG×,Ò,­R¬W×-=Ò-=¸hÑ-GÔ-GÑHÔHˆMÝœG×,Ò,­R¬W×-=Ò-=¸lÑ-KÔ-KÑLÔLˆMØ�7˜=¨-Ñ8Ô8Ð8r   z!Path traversal blocked: package 'z9' attempted to write outside download directory (subdir='z')ú.zipéüÿÿÿé<   r7   c                 ój   — 	 t          j        | ¦  «         d S # t          $ r Y d S t          $ r Y d S w xY wr[   )r   ÚremoveÚFileNotFoundErrorr    )r   s    r   Ú_safe_removez2Downloader._download_package.<locals>._safe_remove+  sS   € ðÝ”	˜$‘”���øÝ$ð ð ð Ø��Ýð ð ð Ø��ðøøøs   ‚ ˜
2¥	2±2c                 ó¢  •— t           j                             | ¦  «        r ‰| ¦  «         d S t           j                             | ¦  «        sd S t          j        | d¬¦  «        D ]Ã\  }}}|D ]E}	 t          j        t           j                             ||¦  «        ¦  «         Œ6# t          $ r Y ŒBw xY w|D ]r}t           j                             ||¦  «        }t           j                             |¦  «        r ‰|¦  «         ŒM	 t          j        |¦  «         Œc# t          $ r Y Œow xY wŒÄ	 t          j        | ¦  «         d S # t          $ r Y d S w xY w)NF)Útopdown)	r   r   ÚislinkÚisdirÚwalkr:  rN   r    Úrmdir)r   r'  ÚdirsÚfilesr9   Úfullr<  s         €r   Ú_safe_rmtreez2Downloader._download_package.<locals>._safe_rmtree3  s‡  ø€ õ Œw�~Š~˜dÑ#Ô#ð Ø�˜TÑ"Ô"Ð"Ø�Ý”7—=’= Ñ&Ô&ð Ø�Ý%'¤W¨T¸5Ð%AÑ%AÔ%Að ð Ñ!��d˜EØ!ð ð �DðÝœ	¥"¤'§,¢,¨t°TÑ":Ô":Ñ;Ô;Ð;Ð;øÝ"ð ð ð Ø˜ðøøøà ð 
ð 
�DÝœ7Ÿ<š<¨¨dÑ3Ô3�Dõ ”w—~’~ dÑ+Ô+ð !Ø$˜ TÑ*Ô*Ð*Ø ðÝœ ™œ˜˜øÝ"ð ð ð Ø˜ðøøøð
ðÝ”˜‘”���øÝð ð ð Ø��ðøøøs6   Á02B#Â#
B0Â/B0ÄDÄ
D%Ä$D%Ä*E  Å 
EÅEc                  óV   •— 	 t          j        ‰ d ¦  «         d S # t          $ r Y d S w xY wr[   )r   Úutimer    ©Úlock_filepaths   €r   Ú_touch_lockz1Downloader._download_package.<locals>._touch_lockT  sB   ø€ ðÝ”˜¨Ñ-Ô-Ð-Ð-Ð-øÝð ð ð Ø��ðøøøs   ƒ š
(§(c                  óB   •— t           j                             ‰ ¦  «        S r[   )r   r   r#   rI  s   €r   Ú_lock_existsz2Downloader._download_package.<locals>._lock_existsZ  s   ø€ Ý”7—>’> -Ñ0Ô0Ð0r   c                  óp   •— ‰j                              ‰j        d ¦  «         ‰                     ‰‰ ¦  «        S r[   )rÀ   Úpopr8   rà   )r²   rô   rP   s   €€€r   Ú_status_nowz1Downloader._download_package.<locals>._status_now]  s2   ø€ ØÔ×"Ò" 4¤7¨DÑ1Ô1Ð1Ø—;’;˜t \Ñ2Ô2Ð2r   c                  ó*   •—  ‰ ¦   «         ‰j         k    S r[   )rá   )rP  rP   s   €€r   Ú_installed_nowz4Downloader._download_package.<locals>._installed_nowa  s   ø€ Ø�;‘=”= D¤NÒ2Ð2r   T©Úexist_okr  é   ÚwbzDownloader._download_package)ÚcontextÚrequired_rooté @  é   éP   rÎ   zIntegrity check failed for z: size mismatch (got z, expected rØ   Úsha256_checksumz: sha256 mismatchrC   z: md5 mismatchzError downloading z from <ú>:
  F)ÚverboseÚexpected_rootzPackage z. did not reach installed state (final status: ):rˆ   r¬   r   r   rN   rO   r-  r+  r.  r§   r8   r=   ÚendswithÚmakedirsr¡   r�   r
   ÚO_CREATÚO_EXCLÚO_WRONLYÚcloseÚFileExistsErrorÚtimeÚstatÚst_mtimer;  Úsleeprâ   r¤   rÀ   rO  r#   r”   r   r?   Úpathsec_openÚmaxrA   Ú	itertoolsÚcountÚreadÚwriteÚminÚgetsizer@   rß   Úsha256_hexdigestÚmd5_hexdigestr   r;   r    r—   rK   r›   Ú_unzip_iterr‹   r   rž   )"rP   rô   r²   r  ÚfilepathÚtmp_filepathr5  Úsafe_downloadÚsafe_filepathÚunzipdirÚMAX_ZOMBIE_TIMEÚPOLL_INTERVALrF  rK  rM  rR  ÚfdÚagerà   ÚinfileÚoutfileÚ
num_blocksÚblockÚsÚtmp_sizer\  Úmd5_checksumr  Úzipdirr÷   r<  rP  r(  rJ  s"   ```                           @@@@r   r  zDownloader._download_packageÕ  sù  øøøøøøøè è € Ý! $Ñ'Ô'Ð'Ð'Ð'Ý˜aÑ Ô Ð Ð Ð å”7—<’< ¨d¬mÑ<Ô<ˆØ &Ñ(ˆØ  7Ñ*ˆð,	ð 	ð 	ð	9ð 	9ð 	9ð 	9ð 	9ð 	9õ@ œ×(Ò(ÝŒG�OŠO�BœG×,Ò,¨\Ñ:Ô:Ñ;Ô;ñ
ô 
ˆõ œ×(Ò(­¬¯ª½¼×9IÒ9IÈ(Ñ9SÔ9SÑ)TÔ)TÑUÔUˆàˆG�M =Ñ1Ô1ð
	à"Ð" 8Ñ,Ô,ð
	ð #Ð" <Ñ0Ô0ð
	õ
 ØðM°D´Gð Mð MØ=A¼[ðMð Mð Mñô ð ð ð ð
 ˆFà$,×$5Ò$5°fÑ$=Ô$=ÐG�8˜C˜R˜C”=�=À4ˆØˆØˆð	ð 	ð 	ð	ð 	ð 	ð 	ð 	ðB	ð 	ð 	ð 	ð 	ð	1ð 	1ð 	1ð 	1ð 	1ð	3ð 	3ð 	3ð 	3ð 	3ð 	3ð 	3ð	3ð 	3ð 	3ð 	3ð 	3ð 	3õ 	Œ�L¨4Ð0Ñ0Ô0Ð0Ý
Œ•B”G—L’L ¨t¬{Ñ;Ô;ÀdÐKÑKÔKÐKð ð 	˜˜Ñ)Ô)ð 	°,°,±.´.ð 	Ý! $Ñ'Ô'Ð'Ð'Ð'Ý! #Ñ&Ô&Ð&Ð&Ð&Ý& tÑ,Ô,Ð,Ð,Ð,ØˆFð	*Øð ˜^˜^Ñ-Ô-ð °l°l±n´nð Ý% dÑ+Ô+Ð+Ð+Ð+Ý% cÑ*Ô*Ð*Ð*Ð*Ý*¨4Ñ0Ô0Ð0Ð0Ð0Ø�ð*Ý”W˜]­B¬J½¼Ñ,BÅRÄ[Ñ,PÑQÔQ�Ý”˜‘”�ØøÝ"ð *ð *ð *ðÝœ)™+œ+­¬°Ñ(>Ô(>Ô(GÑG�CØ˜oÒ-Ð-Ø$˜ ]Ñ3Ô3Ð3Ø ˜ð .øõ )ð ð ð Ø�H�Hðøøøå”
˜=Ñ)Ô)Ð)Ð)Ð)ð*øøøñ	*ð*E	(àð ˜^˜^Ñ-Ô-ð Ý% dÑ+Ô+Ð+Ð+Ð+Ý% cÑ*Ô*Ð*Ð*Ð*Ý*¨4Ñ0Ô0Ð0Ð0Ð0Øð| ˆL˜Ñ&Ô&Ð&ØˆL˜Ñ'Ô'Ð'Ð'Ð'ð{ !�[‘]”]ˆFð ˜œÒ#Ð#Ý" 4Ñ(Ô(Ð(Ð(Ð(Ø�˜\Ñ*Ô*Ð*Ø�˜XÑ&Ô&Ð&Øð +Ø �L Ñ*Ô*Ð*ØÔ"×&Ò& t¤w°Ñ5Ô5Ð5ð ð N*�BœGŸNšN¨8Ñ4Ô4ñ N*Ý*¨4Ñ0Ô0Ð0Ð0Ð0Ý% aÑ(Ô(Ð(Ð(Ð(ðGÝ$ T¤XÑ.Ô.�FÝ%Ø$ØØ >Ø&2ð	ñ ô ð "ð
 !Ý%(¨¨D¬I¸Ñ,CÑ%DÔ%D˜
Ý%.¤_Ñ%6Ô%6ð 	"ð 	"˜EØ &§¢¨IÑ 6Ô 6˜AØ#$ð &Ø % Ø#ŸMšM¨!Ñ,Ô,Ð,Ø$ q™y¨Aš~˜~Ø + ¡¤ Ý&5Ý$'¨¨A°°e¸jÑ6HÑ0IÑ,IÑ$JÔ$Jñ'"ô '"ð !"ð !"ð !"øð"ð "ð "ñ "ô "ð "ð "ð "ð "ð "ð "øøøð "ð "ð "ð "ð" —L’L‘N”N�Nõ  "œwŸš¨|Ñ<Ô<�HØ¥3 t¤y¡>¤>Ò1Ð1Ø$˜ \Ñ2Ô2Ð2Ý*Ø ðT¸$¼'ð Tð TØ2:ðTð TØGKÄyðTð Tð Tñô ð ð ð ð
 ðV ˆL˜Ñ&Ô&Ð&ØˆL˜Ñ'Ô'Ð'Ð'Ð'õU '.¨dÐ4EÀtÑ&LÔ&L�Oà&ð #Ý+¨LÑ9Ô9¸_ÒLÐLØ(˜L¨Ñ6Ô6Ð6Ý".Ø $Ø Z¸d¼gÐ ZÐ ZÐ Zñ#ô #ð ð ð ð #ð@ ˆL˜Ñ&Ô&Ð&ØˆL˜Ñ'Ô'Ð'Ð'Ð'ðO Mõ (/¨t°ZÀÑ'FÔ'F˜à'ð #­M¸,Ñ,GÔ,GÈ<Ò,WÐ,WØ(˜L¨Ñ6Ô6Ð6Ý".Ø $Ø W¸d¼gÐ WÐ WÐ Wñ#ô #ð ð ð ð #ðl ˆL˜Ñ&Ô&Ð&ØˆL˜Ñ'Ô'Ð'Ð'Ð'õi "Ø Ø >Ø&2ðñ ô ð õ
 ”J˜|¨XÑ6Ô6Ð6ØÔ&×*Ò*¨4¬7°DÑ9Ô9Ð9Ð9øÝð ð ð Ø �L Ñ.Ô.Ð.Ý&Ø˜à$(¤G G G¨T¬X¨X¨X°q°qð:ñô ð ð ð ð
 �F�F�FðJ ˆL˜Ñ&Ô&Ð&ØˆL˜Ñ'Ô'Ð'Ð'Ð'øøøøð[øøøõ ,¨DÑ1Ô1Ð1Ð1Ð1Ý% bÑ)Ô)Ð)Ð)Ð)ð Œ}×%Ò% fÑ-Ô-ð 3ÝœŸš l°D´KÑ@Ô@�Ø”:ð 3¥¤§¢µ´·²¸VÀTÄWÑ0MÔ0MÑ!NÔ!Nð 3Ý+¨DÑ1Ô1Ð1Ð1Ð1õ  +Ø  &°%ÀtÄwð ñ  ô  ð #ð #˜ð $˜™œ˜Ø&*˜œØ!˜	˜	˜	Ý% c­<Ñ8Ô8ð #Ø"ð ˆL˜Ñ&Ô&Ð&ØˆL˜Ñ'Ô'Ð'Ð'Ð'ð##å,¨TÑ2Ô2Ð2Ð2Ð2ð "�>Ñ#Ô#ð Ý"Øð7˜tœwð 7ð 7Ø&1 k¡m¤mð7ð 7ð 7ñô ð ð ð ð
 ð
 ˆL˜Ñ&Ô&Ð&ØˆL˜Ñ'Ô'Ð'Ð'Ð'õ	 ' tÑ,Ô,Ð,Ð,Ð,ð ˆL˜Ñ&Ô&Ð&ØˆL˜Ñ'Ô'Ð'Ð'Ð'øð ˆL˜Ñ&Ô&Ð&ØˆL˜Ñ'Ô'Ð'Ð'øøøs½   ÊAK Ë
M
Ë!>L"Ì!M
Ì"
L0Ì,M
Ì/L0Ì0M
Í	M
Í?c Î(B-c Ñ'[ Ñ=BT!Ô[ Ô!T%Ô%[ Ô(T%Ô)A?[ ×A[ Ø&A[ ÚA[ Ûc Û
\/Û0\*Üc Ü*\/Ü/Dc á
Ac â%c ãc&ú[nltk_data] c
           
      óð  ‡‡— |	r|�ddl m}
  |
||¬¦  «        S t          j        t          |¬¦  «        Š|€|�|| _        |                      ¦   «          dS dˆˆfd„	}|                      |||¦  «        D �] }t          |t          ¦  «        r“ ||j
        ¦  «         |rt          |j
        ¦  «        ‚|r dS d| _        |s_ ‰d	¦  «         t          ¦   «                              ¦   «         }|d
v r)|                      |j        j        |||‰||¦  «        s dS n|dv r dS |�sRt          |t"          ¦  «        r) |d|j        j        z  ¦  «         ‰dz  Š ‰‰¦  «         Œìt          |t&          ¦  «        rP ‰‰¦  «         ‰d d…         Š| j        r |d|j        j        z  ¦  «         �Œ7 |d|j        j        z  ¦  «         �ŒQt          |t(          ¦  «        r |d|j        j        ›d|›d�¦  «         �Œ„t          |t*          ¦  «        r |d|j        j        z  d¦  «         �Œ´t          |t,          ¦  «        r |d|j        j        z  d¦  «         �Œät          |t0          ¦  «        r|j        }�ŒdS )Nr   )Údownload)Úquiet)ÚfileTr1   c                 óZ   •—  ‰t          j        | ‰|z   ‰|z   dz   ¬¦  «        ¦  «         d S )Nú    )Úinitial_indentrÑ   )rå   ræ   )rƒ  Úprefix2rõ   Úprint_tos     €€r   Úshowz!Downloader.download.<locals>.show+  sM   ø€ Ø�Ý”MØØ'-°Ñ'7Ø*0°7Ñ*:¸WÑ*Dðñ ô ñô ð ð ð r   Fz(Error installing package. Retry? [n/y/e])ÚyÚY)r  ÚEúDownloading collection %rz   | r7  z$Downloaded collection %r with errorszDone downloading collection %szDownloading package z to z...z!Package %s is already up-to-date!ú  zUnzipping %s.©r1   )Únltk.huggingface.datasetr‰  Ú	functoolsr·   rÛ   r½   Ú_interactive_downloadr  r   r§   rª   r!   rÁ   ré   Ústripr‹   r8   r}   r€   r…   rˆ   r¡   r›   rO   r°   r²   )rP   r  r²   rŠ  r  rõ   Úhalt_on_errorÚraise_on_errorÚprint_error_toÚhfÚhf_downloadr‘  r÷   Úchoicer�  s        `        @r   r‰  zDownloader.download  sD  øø€ ð ð 	8�*Ð(ØHÐHÐHÐHÐHÐHà�;˜z°Ð7Ñ7Ô7Ð7åÔ$¥U°Ð@Ñ@Ô@ˆàÐð Ð'Ø%1�Ô"Ø×&Ò&Ñ(Ô(Ð(Ø�4ðð ð ð ð ð ð ð ×)Ò)¨*°lÀEÑJÔJð <8ñ <8�å˜c¥<Ñ0Ô0ð )Ø�D˜œÑ%Ô%Ð%Ø%ð 6Ý(¨¬Ñ5Ô5Ð5Ø$ð %Ø$˜u˜uØ#'�D”LØ ð )Ø ˜Ð!KÑLÔLÐLÝ!&¡¤§¢¡¤˜Ø! ZÐ/Ð/Ø#'§=¢=Ø #¤¤Ø ,Ø %Ø %Ø &Ø -Ø .ñ$ô $ð 	-ð (- u uð	-ð $ zÐ1Ð1Ø#( 5 5ð ñ !8å! #Õ'=Ñ>Ô>ð 8Ø˜Ð8¸3¼>Ô;LÑLÑMÔMÐMØ 'Ñ)˜Ø ˜ Ñ(Ô(Ð(Ð(Ý# CÕ)@ÑAÔAð 8Ø ˜ Ñ(Ô(Ð(Ø!'¨¨¨¤˜Øœ<ð WØ ˜DØ FØ"%¤.Ô"3ñ!4ñô ð ñ ð
 !˜DÐ!AÀCÄNÔDUÑ!UÑVÔVÐVÑVõ $ CÕ)<Ñ=Ô=ð 8Ø˜˜à"œ{œ~˜~˜~¨|¨|¨|ð=ñô ð ñ õ $ C­Ñ9Ô9ð 
8Ø˜Ð@À3Ä;Ä>ÑQÐSWÑXÔXÐXÑXõ $ CÕ):Ñ;Ô;ð 8Ø˜˜_¨s¬{Ô/CÑCÀTÑJÔJÐJÑJõ $ CÕ)AÑBÔBð 8Ø'*Ô'7˜ùØˆtr   c                 ó@   — |                       ||¦  «        | j        k    S r[   )rà   râ   ©rP   r  r²   s      r   Úis_stalezDownloader.is_stales  s   € Ø�{Š{˜: |Ñ4Ô4¸¼
ÒBÐBr   c                 ó@   — |                       ||¦  «        | j        k    S r[   )rà   rá   r£  s      r   Úis_installedzDownloader.is_installedv  s   € Ø�{Š{˜: |Ñ4Ô4¸¼ÒFÐFr   c                 óv   — |€| j                              ¦   «          d S | j                              |d ¦  «         d S r[   )rÀ   ÚclearrO  ©rP   r8   s     r   Úclear_status_cachezDownloader.clear_status_cachey  sA   € Øˆ:ØÔ×$Ò$Ñ&Ô&Ð&Ð&Ð&àÔ×"Ò" 2 tÑ,Ô,Ð,Ð,Ð,r   c                 óB  ‡ — |€‰ j         }‰                      |¦  «        }t          |t          ¦  «        rcˆ fd„|j        D ¦   «         }‰ j        |v r‰ j        S ‰ j        |v r‰ j        S ‰ j        |v r‰ j        |v r‰ j        S ‰ j        |v r‰ j        S ‰ j        S t          j
                             ||j        ¦  «        }|‰ j         k    r‰                      ||¦  «        S |j        ‰ j        vr#‰                      ||¦  «        ‰ j        |j        <   ‰ j        |j                 S )zÀ
        Return a constant describing the status of the given package
        or collection.  Status can be one of ``INSTALLED``,
        ``NOT_INSTALLED``, ``STALE``, or ``PARTIAL``.
        Nc                 óD   •— g | ]}‰                      |j        ¦  «        ‘ŒS r   )rà   r8   )r   r  rP   s     €r   ru   z%Downloader.status.<locals>.<listcomp>‹  s'   ø€ ÐGÐGÐG°#˜$Ÿ+š+ c¤fÑ-Ô-ÐGÐGÐGr   )r½   r  r   rk   rn   râ   rã   rá   rä   r   r   rN   rO   Ú_pkg_statusr8   rÀ   )rP   r  r²   rô   Ú
pkg_statusrv  s   `     r   rà   zDownloader.status  s<  ø€ ð ÐØÔ-ˆLØ×Ò 
Ñ+Ô+ˆõ �d�JÑ'Ô'ð 	3ØGÐGÐGÐG¸¼ÐGÑGÔGˆJØŒz˜ZÐ'Ð'Ø”zÐ!Ø” Ð+Ð+Ø”|Ð#Ø” :Ð-Ð-°$Ô2DÈ
Ð2RÐ2RØ”|Ð#ØÔ# zÐ1Ð1ØÔ)Ð)à”~Ð%õ ”w—|’| L°$´-Ñ@Ô@ˆHØ˜tÔ1Ò1Ð1Ø×'Ò'¨¨hÑ7Ô7Ð7à”7 $Ô"4Ð4Ð4Ø26×2BÒ2BÀ4ÈÑ2RÔ2R�DÔ& t¤wÑ/ØÔ)¨$¬'Ô2Ð2r   c                 ó–  — t           j                             |¦  «        s| j        S 	 t          j        |¦  «        }n# t
          $ r
 | j        cY S w xY w|j        t          |j        ¦  «        k    r| j	        S t          |dd ¦  «        }|rt          |¦  «        |k    r| j	        S nht          | dd¦  «        s#t          j        dt          d¬¦  «         d| _        t          |dd ¦  «        }|s| j	        S t!          |¦  «        |k    r| j	        S |                     d	¦  «        r¡|d d
…         }t           j                             |¦  «        s|j        r| j        n| j        S t           j                             |¦  «        s| j	        S t+          d„ t          j        |¦  «        D ¦   «         ¦  «        }||j        k    r| j	        S | j        S )Nr\  Ú_warned_missing_sha256_checksumFzÅNLTK downloader package metadata is missing SHA256 checksums; falling back to legacy MD5 verification. Consider updating your NLTK data index (or re-running the downloader) to get SHA256 checksums.rZ  r   TrC   r6  r7  c              3   ó–   K  — | ]D\  }}}|D ];}t          j        t           j                             ||¦  «        ¦  «        j        V — Œ<ŒEd S r[   )r   rh  r   rN   Úst_size)r   ÚdÚ_rD  Úfs        r   r  z)Downloader._pkg_status.<locals>.<genexpr>Í  sp   è è € ð  ð  á�A�q˜%Øð ð  ð õ ”�œŸš Q¨Ñ*Ô*Ñ+Ô+Ô3ð ð  ð  ð  ð  ð  ð  r   )r   r   r#   rä   rh  r    r²  r@   rA   râ   rß   rs  r&   r'   ÚRuntimeWarningr°  rt  r`  rK   rá   r@  r  rA  rB   )rP   rô   rv  Úfilestatr\  r…  rz  rB   s           r   r­  zDownloader._pkg_status¡  s  € ÝŒw�~Š~˜hÑ'Ô'ð 	&ØÔ%Ð%ð	&Ý”w˜xÑ(Ô(ˆHˆHøÝð 	&ð 	&ð 	&ØÔ%Ð%Ð%Ð%ð	&øøøàÔ�s 4¤9™~œ~Ò-Ð-Ø”:Ðõ " $Ð(9¸4Ñ@Ô@ˆØð 	"Ý Ñ)Ô)¨_Ò<Ð<Ø”zÐ!ð =õ ˜4Ð!BÀEÑJÔJð <Ý”ð^õ #Ø ðñ ô ð ð 8<�Ô4å" 4¨°TÑ:Ô:ˆLØð "Ø”zÐ!Ý˜XÑ&Ô&¨,Ò6Ð6Ø”zÐ!ð ×Ò˜VÑ$Ô$ð 	"Ø   ”}ˆHÝ”7—>’> (Ñ+Ô+ð LØ-1¬ZÐK�tÔ)Ð)¸T¼^ÐKÝ”7—=’= Ñ*Ô*ð "Ø”zÐ!åð  ð  å#%¤7¨8Ñ#4Ô#4ð ñ  ô  ñ ô ˆMð
  Ô 2Ò2Ð2Ø”zÐ!ð Œ~Ðs   ¨= ½AÁAc                 óÈ   — |                       ¦   «          |                      ¦   «         D ]8}|                      |¦  «        | j        k    r|                      |||¬¦  «         Œ9dS )zA
        Re-download any packages whose status is STALE.
        )rŠ  rõ   N)rª  rn   rà   râ   r‰  )rP   rŠ  rõ   r  s       r   rM   zDownloader.updateØ  si   € ð 	×ÒÑ!Ô!Ð!Ø—=’=‘?”?ð 	?ð 	?ˆCØ�{Š{˜3ÑÔ 4¤:Ò-Ð-Ø—’˜c¨°v�Ñ>Ô>Ð>øð	?ð 	?r   c                 óº  — | j         �(|€&t          j        ¦   «         | j        z
  | j        k    sdS |p| j        | _        t
          j                             t          t          | j        ¦  «        ¦  «         
                    ¦   «         ¦  «        | _         t          j        ¦   «         | _        d„ | j                              d¦  «        D ¦   «         }d„ |D ¦   «         | _        d„ | j                              d¦  «        D ¦   «         }d„ |D ¦   «         | _        | j                             ¦   «         D ]„}t          |j        ¦  «        D ]m\  }}|| j        v r| j        |         |j        |<   Œ$|| j        v r| j        |         |j        |<   ŒCt#          d                     |¦  «        ¦  «         |j        |= ŒnŒ…| j                             ¦   «         D ]u}i }|g}|D ]R}t'          |t(          ¦  «        r|                     |j        ¦  «         Œ2t'          |t,          ¦  «        r|||j        <   ŒRŒS|                     ¦   «         |_        Œv| j                             ¦   «          dS )	z–A helper function that ensures that self._index is
        up-to-date.  If the index is older than self.INDEX_TIMEOUT,
        then download it again.Nc                 óB   — g | ]}t                                |¦  «        ‘ŒS r   )r0   rY   r   s     r   ru   z,Downloader._update_index.<locals>.<listcomp>û  s$   € ÐXÐXÐX¨1•G—O’O AÑ&Ô&ÐXÐXÐXr   úpackages/packagec                 ó   — i | ]
}|j         |“ŒS r   r\   r   s     r   ú
<dictcomp>z,Downloader._update_index.<locals>.<dictcomp>ü  s   € Ð4Ð4Ð4 a˜!œ$ Ð4Ð4Ð4r   c                 óB   — g | ]}t                                |¦  «        ‘ŒS r   )rk   rY   ©r   Úcs     r   ru   z,Downloader._update_index.<locals>.<listcomp>ÿ  s3   € ð 
ð 
ð 
Ø&'�J×Ò˜qÑ!Ô!ð
ð 
ð 
r   úcollections/collectionc                 ó   — i | ]
}|j         |“ŒS r   r\   r¿  s     r   r½  z,Downloader._update_index.<locals>.<dictcomp>  s   € Ð:Ð:Ð:¨˜QœT 1Ð:Ð:Ð:r   z.removing collection member with no package: {})r¾   rg  r¿   ÚINDEX_TIMEOUTrº   r"   Ú	internalsÚElementWrapperrU   r   Úgetrootrw   r¼   r»   rû   r  rm   rÛ   rç   r   rk   Úextendr0   r8   rn   rÀ   r¨  )	rP   r?   rn   rÇ   r€   r   Úchild_idÚqueuert   s	            r   rú   zDownloader._update_indexå  s�  € ð ŒKÐØˆÝŒy‰{Œ{˜TÔ2Ñ2°TÔ5GÒGÐGàˆFð Ð$˜4œ9ˆŒ	õ ”n×3Ò3Ý•w˜tœyÑ)Ô)Ñ*Ô*×2Ò2Ñ4Ô4ñ
ô 
ˆŒõ !%¤	¡¤ˆÔð YÐX°´×0CÒ0CÐDVÑ0WÔ0WÐXÑXÔXˆØ4Ð4¨8Ð4Ñ4Ô4ˆŒð
ð 
Ø+/¬;×+>Ò+>Ð?WÑ+XÔ+Xð
ñ 
ô 
ˆð ;Ð:¨kÐ:Ñ:Ô:ˆÔð Ô+×2Ò2Ñ4Ô4ð 	/ð 	/ˆJÝ(¨Ô)<Ñ=Ô=ð /ð /‘��8Ø˜tœ~Ð-Ð-Ø-1¬^¸HÔ-E�JÔ'¨Ñ*Ð*Ø Ô!2Ð2Ð2Ø-1Ô->¸xÔ-H�JÔ'¨Ñ*Ð*åØH×OÒOØ$ñô ñô ð ð
 #Ô+¨AÐ.Ð.ð/ð Ô+×2Ò2Ñ4Ô4ð 
	4ð 
	4ˆJØˆHØ�LˆEØð ð �Ý˜e¥ZÑ0Ô0ð Ø—L’L ¤Ñ0Ô0Ð0Ð0Ý ¥wÑ/Ô/ð Ø).�H˜UœXÑ&Ð&àØ"*§/¢/Ñ"3Ô"3ˆJÔÐð 	Ô× Ò Ñ"Ô"Ð"Ð"Ð"r   c                 ó8   — |                       ¦   «          | j        S )z±
        Return the XML index describing the packages available from
        the data server.  If necessary, this index will be downloaded
        from the data server.
        )rú   r¾   rb   s    r   ÚindexzDownloader.index#  s   € ð 	×ÒÑÔÐØŒ{Ðr   c                 ó¦   — |                       ¦   «          || j        v r| j        |         S || j        v r| j        |         S t          d|z  ¦  «        ‚)zKReturn the ``Package`` or ``Collection`` record for the
        given item.úPackage %r not found in index)rú   r¼   r»   r!   r©  s     r   rô   zDownloader.info,  s`   € ð 	×ÒÑÔÐØ�”ÐÐØ”> "Ô%Ð%Ø�Ô"Ð"Ð"ØÔ$ RÔ(Ð(ÝÐ8¸2Ñ=Ñ>Ô>Ð>r   c                 ó6  — |                       ¦   «          | j                             d¦  «        D ]}|                     d¦  «        |k    r|c S Œ | j                             d¦  «        D ]}|                     d¦  «        |k    r|c S Œ t	          d|z  ¦  «        ‚)z-Return the XML info record for the given itemr»  r8   rÁ  rÍ  )rú   r¾   rw   rs   r!   )rP   r8   r‹   r€   s       r   ÚxmlinfozDownloader.xmlinfo6  sµ   € à×ÒÑÔÐØ”{×*Ò*Ð+=Ñ>Ô>ð 	ð 	ˆGØ�{Š{˜4Ñ Ô  BÒ&Ð&Ø���ð 'àœ+×-Ò-Ð.FÑGÔGð 	"ð 	"ˆJØ�~Š~˜dÑ#Ô# rÒ)Ð)Ø!Ð!Ð!Ð!ð *åÐ8¸2Ñ=Ñ>Ô>Ð>r   c                 ó   — | j         S )z)The URL for the data server's index file.)rº   rb   s    r   Ú_get_urlzDownloader._get_urlE  s
   € àŒyÐr   c                 ól   — | j         }	 |                      |¦  «         dS # t          $ r	 || _         ‚ w xY w)z…
        Set a new URL for the data server. If we're unable to contact
        the given url, then the original url is kept.
        N)rº   rú   r©   )rP   r?   Úoriginal_urls      r   Ú_set_urlzDownloader._set_urlI  sO   € ð
 ”yˆð	Ø×Ò˜sÑ#Ô#Ð#Ð#Ð#øÝð 	ð 	ð 	Ø$ˆDŒIØð	øøøs   ‰   3c                 óØ  — dt           j        v rdS t          j        j        D ]D}t           j                             |¦  «        r#t          j                             |¦  «        r|c S ŒEt           j        dk    r!dt           j        v rt           j        d         }n4t           j         	                    d¦  «        }|dk    rt          d¦  «        ‚t           j                             |d¦  «        S )a×  
        Return the directory to which packages will be downloaded by
        default.  This value can be overridden using the constructor,
        or on a case-by-case basis using the ``download_dir`` argument when
        calling ``download()``.

        On Windows, the default download directory is
        ``PYTHONHOME/lib/nltk``, where *PYTHONHOME* is the
        directory containing Python, e.g. ``C:\Python25``.

        On all other platforms, the default directory is the first of
        the following which exists or which can be created with write
        permission: ``/usr/share/nltk_data``, ``/usr/local/share/nltk_data``,
        ``/usr/lib/nltk_data``, ``/usr/local/lib/nltk_data``, ``~/nltk_data``.
        ÚAPPENGINE_RUNTIMENÚntÚAPPDATAz~/z+Could not find a default download directoryÚ	nltk_data)r   Úenvironr"   r(   r   r#   rÄ  Úis_writabler9   Ú
expanduserr!   rN   )rP   ÚnltkdirÚhomedirs      r   rÂ   zDownloader.default_download_dirW  sÐ   € ð" ¥"¤*Ð,Ð,ØˆFõ ”y”~ð 	ð 	ˆGÝŒw�~Š~˜gÑ&Ô&ð ­4¬>×+EÒ+EÀgÑ+NÔ+Nð Ø���øõ Œ7�dŠ?ˆ?˜y­B¬JÐ6Ð6Ý”j Ô+ˆGˆGõ ”g×(Ò(¨Ñ.Ô.ˆGØ˜$ŠˆÝ Ð!NÑOÔOÐOõ Œw�|Š|˜G [Ñ1Ô1Ð1r   c                 ó   — | j         S )a  
        The default directory to which packages will be downloaded.
        This defaults to the value returned by ``default_download_dir()``.
        To override this default on a case-by-case basis, use the
        ``download_dir`` argument when calling ``download()``.
        )r½   rb   s    r   Ú_get_download_dirzDownloader._get_download_dir~  s   € ð Ô!Ð!r   c                 óF   — || _         | j                             ¦   «          d S r[   )r½   rÀ   r¨  r³   s     r   Ú_set_download_dirzDownloader._set_download_dir‡  s%   € Ø)ˆÔàÔ× Ò Ñ"Ô"Ð"Ð"Ð"r   c                 óÐ  — t           j                             dd¦  «                             ¦   «         dk    r#t	          | ¦  «                             ¦   «          d S 	 dd l}n2# t          $ r% t	          | ¦  «                             ¦   «          Y d S w xY w	 t          | ¦  «         	                    ¦   «          d S # |j
        $ r% t	          | ¦  «                             ¦   «          Y d S w xY w)NÚ'NLTK_DOWNLOADER_FORCE_INTERACTIVE_SHELLÚfalseÚtruer   )r   rÚ  rs   rê   ÚDownloaderShellÚrunÚtkinterÚImportErrorÚDownloaderGUIÚmainloopÚTclError)rP   ré  s     r   rš  z Downloader._interactive_download’  s  € õ ŒJ�NŠNÐDÀgÑNÔN×TÒTÑVÔVØòð õ ˜DÑ!Ô!×%Ò%Ñ'Ô'Ð'ØˆFð	ØˆNˆNˆNˆNøÝð 	ð 	ð 	Ý˜DÑ!Ô!×%Ò%Ñ'Ô'Ð'ØˆFˆFð	øøøð	(Ý˜$ÑÔ×(Ò(Ñ*Ô*Ð*Ð*Ð*øØÔð 	(ð 	(ð 	(Ý˜DÑ!Ô!×%Ò%Ñ'Ô'Ð'Ð'Ð'Ð'ð	(øøøs$   ÁA  Á +BÂBÂ!B6 Â6+C%Ã$C%)NN)NTTTFFr%  r[   )Fr‡  )+re   rf   rg   rh   rÃ  r¹   rá   rä   râ   rã   rS   rø   rn   rÿ   r	  rÇ   r  r  r  r  r  ÚsysÚstderrr‰  r¤  r¦  rª  rà   r­  rM   rú   rË  rô   rÏ  rÑ  rÔ  Úpropertyr?   rÂ   rà  râ  r²   rš  r   r   r   rµ   rµ   è  s¹  € € € € € ðð ð €Mðð X€Kð!ð €Ið$à#€Mðà€Eð"à€GðEð=ð =ð =ð =ðN ØØØØØð:Ið :Ið :Ið :Iðx'ð 'ð 'ðXð Xð XðXð Xð Xð*ð *ð *ðð ð ðIð Ið Ið IðB&ð &ð &ð$ð $ð $ð2u(ð u(ð u(ðr	 ØØØØØØØ”zØðeð eð eð eðNCð Cð Cð CðGð Gð Gð Gð-ð -ð -ð -ð 3ð  3ð  3ð  3ðD5ð 5ð 5ðn?ð ?ð ?ð ?ð<#ð <#ð <#ð <#ð|ð ð ð?ð ?ð ?ð	?ð 	?ð 	?ðð ð ð
ð 
ð 
ð ˆ(�8˜XÑ
&Ô
&€Cð%2ð %2ð %2ðN"ð "ð "ð#ð #ð #ð
 �8Ð-Ð/@ÑAÔA€Lð(ð (ð (ð (ð (r   rµ   c                   ó>   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	S )
rç  c                 ó   — || _         d S r[   )Ú_ds)rP   Ú
dataservers     r   rS   zDownloaderShell.__init__«  s   € ØˆŒˆˆr   c                 óð   — t          d¦  «         dt          d„ |D ¦   «         ¦  «        z
  t          |¦  «        dz
  z  dz  }t          d|                     |¦  «        z   ¦  «         t          d¦  «         d S )NzK---------------------------------------------------------------------------éD   c              3   ó4   K  — | ]}t          |¦  «        V — Œd S r[   )rÜ   )r   Úos     r   r  z;DownloaderShell._simple_interactive_menu.<locals>.<genexpr>°  s(   è è € Ð0Ð0 1�˜A™œÐ0Ð0Ð0Ð0Ð0Ð0r   r7   rÌ   r�  )rÛ   r  rÜ   rN   )rP   ÚoptionsÚspcs      r   Ú_simple_interactive_menuz(DownloaderShell._simple_interactive_menu®  sq   € Ýˆh‰ŒˆØ•CÐ0Ð0¨Ð0Ñ0Ô0Ñ0Ô0Ñ0µc¸'±l´lÀQÑ6FÑGÈ#ÑMˆÝˆf�s—x’x Ñ(Ô(Ñ(Ñ)Ô)Ð)Ýˆh‰Œˆˆˆr   c                 ó”  — t          d¦  «         	 |                      dddddd¦  «         t          d	¦  «                             ¦   «         }|st          ¦   «          ŒM|                     ¦   «                              ¦   «         d
         }|                     ¦   «         dd …         }	 |dk    r6t          ¦   «          | j                             | j        j        dd¬¦  «         n…|dk    r|  	                    ¦   «          nj|dk    r|  
                    ¦   «          nO|dv rd S |dk    r|                      |¦  «         n-|dk    r|                      ¦   «          nt          d|z  ¦  «         nR# t          $ r}t          d|z  ¦  «         Y d }~n1d }~wt          $ r!}t          d|j        z  ¦  «         Y d }~nd }~ww xY wt          ¦   «          �Œ¹)NúNLTK DownloaderTzd) Downloadzl) Listz
 u) Updatez	c) Configzh) Helpzq) QuitzDownloader> r   r7   ÚlF)rí   rî   ÚhrÀ  )r×   rÖ   r³  ÚuzCommand %r unrecognizedzError reading from server: %szError connecting to server: %s)rÛ   rû  ré   r›  rê   r<   ró  rø   r²   Ú_simple_interactive_helpÚ_simple_interactive_configÚ_simple_interactive_downloadÚ_simple_interactive_updater   r   Úreason)rP   rö   ÚcommandÚargsr  s        r   rè  zDownloaderShell.run´  s  € ÝÐÑ Ô Ð ð%	Ø×)Ò)ØØØØØØñô ð õ ˜~Ñ.Ô.×4Ò4Ñ6Ô6ˆJØð Ý‘”�ØØ ×&Ò&Ñ(Ô(×.Ò.Ñ0Ô0°Ô3ˆGØ×#Ò#Ñ%Ô% a b bÔ)ˆDðCØ˜c’>�>Ý‘G”G�GØ”H—M’M $¤(Ô"7ÀÐSW�MÑXÔXÐXÐXØ ’^�^Ø×1Ò1Ñ3Ô3Ð3Ð3Ø ’^�^Ø×3Ò3Ñ5Ô5Ð5Ð5Ø 
Ð*Ð*Ø�FØ ’^�^Ø×5Ò5°dÑ;Ô;Ð;Ð;Ø ’^�^Ø×3Ò3Ñ5Ô5Ð5Ð5åÐ3°jÑ@ÑAÔAÐAøøÝð ;ð ;ð ;ÝÐ5¸Ñ9Ñ:Ô:Ð:Ð:Ð:Ð:Ð:Ð:øøøøÝð Cð Cð CÝÐ6¸¼ÑAÑBÔBÐBÐBÐBÐBÐBÐBøøøøðCøøøõ ‰GŒGˆGñK%	s,   Â&A6E( ÄA	E( Å(
F7Å2F	Æ	F7ÆF2Æ2F7c                 ó€  — |rQ|D ]L}	 | j                              |d¬¦  «         Œ # t          t          f$ r}t	          |¦  «         Y d }~ŒEd }~ww xY wd S 	 t	          ¦   «          t	          d¦  «         t          d¦  «        }|                     ¦   «         dk    r)| j                              | j         j        ddd¬¦  «         Œn|                     ¦   «         d	v rd S |rc| 	                    ¦   «         D ]L}	 | j                              |d¬¦  «         Œ # t          t          f$ r}t	          |¦  «         Y d }~ŒEd }~ww xY wd S Œë)
Nr�  ©rõ   Tz*Download which package (l=list; x=cancel)?ú  Identifier> rþ  F)rí   rî   rï   ©rÖ   r×   r1   )
ró  r‰  r    r!   rÛ   ré   rê   rø   r²   r<   )rP   r  Úargr  rö   r8   s         r   r  z,DownloaderShell._simple_interactive_downloadÝ  s™  € Øð 	Øð ð �ðØ”H×%Ò% c°&Ð%Ñ9Ô9Ð9Ð9øÝ¥Ð,ð ð ð Ý˜!‘H”H�H�H�H�H�H�Høøøøðøøøðð ðÝ‘”�ÝÐBÑCÔCÐCÝ"Ð#3Ñ4Ô4�
Ø×#Ò#Ñ%Ô%¨Ò,Ð,Ø”H—M’MØœÔ-Ø$Ø$(Ø'+ð	 "ñ ô ð ð Ø×%Ò%Ñ'Ô'¨>Ð9Ð9Ø�FØð Ø(×.Ò.Ñ0Ô0ð %ð %˜ð%Ø œH×-Ò-¨b¸Ð-Ñ@Ô@Ð@Ð@øÝ '­Ð4ð %ð %ð %Ý! !™HœH˜H˜H˜H˜H˜H˜Høøøøð%øøøà�Eð)s,   ˆ%¥A¶A
Á
AÃ3DÄD:Ä!D5Ä5D:c           	      óv  — 	 g }dx}}t           t          | j        d¦  «        ¦   «         t          ¬¦  «        D ]K}| j                             |¦  «        | j        j        k    r!|                     |j        |j        f¦  «         ŒLt          ¦   «          |�rt          d¦  «         |D ]^\  }}t          j        d|z   dd¬	¦  «        d
d …         }t          d                     |                     dd¦  «        |¦  «        ¦  «         Œ_t          ¦   «          t          d¦  «        }|                     ¦   «         dk    rT|D ]O\  }}	 | j                             |d¬¦  «         Œ## t"          t$          f$ r}	t          |	¦  «         Y d }	~	ŒHd }	~	ww xY wd S |                     ¦   «         dv rd S nt          d¦  «         d S �Œ¹)NTFrn   rÈ   z/Will update following packages (o=ok; x=cancel)rÍ   rÎ   rÏ   rÐ   rÒ   z  [ ] {} {}rÓ   rÔ   r
  rø  r�  r	  r  zNothing to update.)rÞ   rß   ró  r   rà   râ   r)   r8   r9   rÛ   rå   ræ   rç   rè   ré   rê   r‰  r    r!   )
rP   Ústale_packagesrñ   r·   rô   ÚpidÚpnamer9   rö   r  s
             r   r  z*DownloaderShell._simple_interactive_updateû  sö  € ð	ØˆNØ#Ð#ˆE�GÝÐ<�w t¤x°Ñ<Ô<Ñ>Ô>ÅCÐHÑHÔHð @ð @�Ø”8—?’? 4Ñ(Ô(¨D¬H¬NÒ:Ð:Ø"×)Ò)¨4¬7°D´IÐ*>Ñ?Ô?Ð?øå‰GŒGˆGØñ ÝÐGÑHÔHÐHØ"0ð Jð J‘J�C˜Ý#œ=Ø  EÑ*¨BÀ(ðñ ô à�c�cô�Dõ ˜-×.Ò.¨s¯yªy¸¸SÑ/AÔ/AÀ4ÑHÔHÑIÔIÐIÐIÝ‘”�å"Ð#3Ñ4Ô4�
Ø×#Ò#Ñ%Ô%¨Ò,Ð,Ø&4ð %ð %™
˜˜Uð%Ø œH×-Ò-¨c¸&Ð-ÑAÔAÐAÐAøÝ '­Ð4ð %ð %ð %Ý! !™HœH˜H˜H˜H˜H˜H˜Høøøøð%øøøà�EØ×%Ò%Ñ'Ô'¨>Ð9Ð9Ø�Fð :õ Ð*Ñ+Ô+Ð+Ø�ñ;	s   ÅE Å F
Å1FÆF
c                 óš   — t          ¦   «          t          d¦  «         t          d¦  «         t          d¦  «         t          d¦  «         d S )Nz	Commands:zH  d) Download a package or collection     u) Update out of date packagesz1  l) List packages & collections          h) Helpz1  c) View & Modify Configuration          q) Quit)rÛ   rb   s    r   r  z(DownloaderShell._simple_interactive_help  sT   € Ý‰ŒˆÝˆkÑÔÐÝØVñ	
ô 	
ð 	
õ 	ÐAÑBÔBÐBÝÐAÑBÔBÐBÐBÐBr   c                 óÂ  — t          ¦   «          t          d¦  «         t          d| j        j        z  ¦  «         t          dt          | j                             ¦   «         ¦  «        z  ¦  «         t          dt          | j                             ¦   «         ¦  «        z  ¦  «         t          ¦   «          t          d¦  «         t          d| j        j        z  ¦  «         d S )NzData Server:z  - URL: <%s>z$  - %d Package Collections Availablez$  - %d Individual Packages AvailablezLocal Machine:z  - Data directory: %s)rÛ   ró  r?   rÜ   rÇ   rn   r²   rb   s    r   Ú_show_configzDownloaderShell._show_config$  s»   € Ý‰ŒˆÝˆnÑÔÐÝˆo ¤¤Ñ,Ñ-Ô-Ð-ÝÐ4µs¸4¼8×;OÒ;OÑ;QÔ;QÑ7RÔ7RÑRÑSÔSÐSÝÐ4µs¸4¼8×;LÒ;LÑ;NÔ;NÑ7OÔ7OÑOÑPÔPÐPÝ‰ŒˆÝÐÑÔÐÝÐ&¨¬Ô)>Ñ>Ñ?Ô?Ð?Ð?Ð?r   c                 ó<  — |                       ¦   «          	 t          ¦   «          |                      dddd¦  «         t          d¦  «                             ¦   «                              ¦   «         }|dk    r|                       ¦   «          �n|dk    rtt          d	¦  «                             ¦   «         }|d
v rt          d¦  «         nÖt          j                             |¦  «        r|| j	        _
        nªt          d|z  ¦  «         n—|dk    r‰t          d¦  «                             ¦   «         }|d
v rt          d¦  «         n\|                     d¦  «        sd|z   }	 || j	        _        n4# t          $ r}t          d|›d|› �¦  «         Y d }~nd }~ww xY w|dk    rd S �Œˆ)NTzs) Show Configzu) Set Server URLzd) Set Data Dirzm) Main MenuzConfig> rƒ  r³  z  New Directory> )r1   rÖ   r×   ÚXÚQz  Cancelled!z)Directory %r not found!  Create it first.r   z  New URL> )zhttp://úhttps://r  zError reading <r]  Úm)r  rÛ   rû  ré   r›  rê   r   r   r@  ró  r²   Ú
startswithr?   r©   )rP   rö   Ú
new_dl_dirÚnew_urlr  s        r   r  z*DownloaderShell._simple_interactive_config.  sâ  € Ø×ÒÑÔÐð	Ý‰GŒGˆGØ×)Ò)Ø Ð"5Ð7HÈ.ñô ð õ ˜zÑ*Ô*×0Ò0Ñ2Ô2×8Ò8Ñ:Ô:ˆJØ˜SÒ Ð Ø×!Ò!Ñ#Ô#Ð#Ñ#Ø˜sÒ"Ð"Ý"Ð#6Ñ7Ô7×=Ò=Ñ?Ô?�
ØÐ!9Ð9Ð9Ý˜.Ñ)Ô)Ð)Ð)Ý”W—]’] :Ñ.Ô.ð TØ,6�D”HÔ)Ð)åÐEÈ
ÑRÑSÔSÐSÐSØ˜sÒ"Ð"Ý Ñ.Ô.×4Ò4Ñ6Ô6�ØÐ6Ð6Ð6Ý˜.Ñ)Ô)Ð)Ð)à"×-Ò-Ð.EÑFÔFð 7Ø",¨wÑ"6˜ðFØ'.˜œœ˜øÝ$ð Fð Fð FÝÐD°ÐDÐDÀÐDÐDÑEÔEÐEÐEÐEÐEÐEÐEøøøøðFøøøà˜sÒ"Ð"Ø�ñ9	s   ÅE( Å(
FÅ2FÆFN)re   rf   rg   rS   rû  rè  r  r  r  r  r  r   r   r   rç  rç  ª  s”   € € € € € ðð ð ðð ð ð'ð 'ð 'ðRð ð ð<ð ð ð@Cð Cð Cð@ð @ð @ðð ð ð ð r   rç  c                   ó"  — e Zd ZdZg d¢Z	 dddddœZ	 dddd	d	d
dœZ	 dZ	 g d¢Z	 eD ]Z	e	ev sJ ‚Œ	eD ]Z	e	ev sJ ‚Œ	eD ]Z	e	ev sJ ‚Œ	dZ
ej        dej        dej        dej        diZdZdZdZdZdZdCd„Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ ZdDd „Zd!„ Zd"„ Zd#„ Z d$„ Z!d%„ Z"d&„ Z#d'„ Z$d(Z%dZ&d)„ Z'd*„ Z(d+„ Z)d	Z*d,„ Z+d-„ Z,d.„ Z-d/„ Z.d0„ Z/d1„ Z0d2„ Z1d3„ Z2d4„ Z3d5„ Z4d6„ Z5 e6j7        d7¦  «        Z8d8„ Z9d9„ Z:dZ;d:„ Z<d;„ Z=d<„ Z>d=„ Z?d>„ Z@ G d?„ d@eAjB        ¦  «        ZCdAZDdB„ ZEdS )Erë  zU
    Graphical interface for downloading packages from the NLTK data
    server.
    )r1   Ú
IdentifierÚNameÚSizeÚStatusúUnzipped SizeÚ	CopyrightÚContactÚLicenseÚAuthorÚSubdirÚChecksumr   rU  )r1   r  r  r   r7   rÓ   é-   é
   é   )r1   r  r  r  r!  r   é   )r1   r  r  r  r   )z#000z#ccc)z#afaz#080)z#ffaz#880)z#faaz#800)ú#fffz#888)r,  z#45c)ú#aaaz#67a)z#f00r-  zhelvetica -16 boldTc                 ó  — dd l }ddlm} || _        || _        t          j        ¦   «         | _        g | _        g | _	        d| _
        i | _        g | _        d| _        |                      d¦  «         |                     ¦   «         x}| _        |                     d¦  «         |                     d¦  «         |                     | j        d         ¬¦  «         |                     d	| j        ¦  «         |                     d
| j        ¦  «         d| _        i | _        |                      ¦   «          |                      ¦   «          	 |                      ¦   «          nF# t8          $ r} |d|¦  «         Y d }~n+d }~wt:          $ r} |d|j        ¦  «         Y d }~nd }~ww xY w|                      ¦   «          |                       ¦   «          | j!         "                    d¦  «         | j!                             d| j#        ¦  «         d S )Nr   ©Ú	showerrorFzNLTK Downloader Started!z+50+50rý  r7   )Ú
backgroundz<Control-q>z<Control-x>úError reading from serverúError connecting to serverz	<Destroy>)$ré  Útkinter.messageboxr0  ró  Ú_use_threadsÚ	threadingÚLockÚ_download_lockÚ_download_msg_queueÚ_download_abort_queueÚ_downloadingÚ_afteridÚ_log_messagesÚ_log_indentÚ_logÚTkÚtopÚgeometryÚtitleÚ	configureÚ_BACKDROP_COLORÚbindÚdestroyÚ
_destroyedÚ_column_varsÚ_init_widgetsÚ
_init_menuÚ_fill_tabler   r   r  Ú
_show_infoÚ_select_columnsÚ_tableÚselectÚ_destroy)rP   rô  Úuse_threadsré  r0  rA  r  s          r   rS   zDownloaderGUI.__init__©  s/  € ð 	ˆˆˆØ0Ð0Ð0Ð0Ð0Ð0àˆŒØ'ˆÔõ (œnÑ.Ô.ˆÔØ#%ˆÔ Ø%'ˆÔ"Ø!ˆÔð ˆŒð  ˆÔØˆÔØ�	Š	Ð,Ñ-Ô-Ð-ð !Ÿš™œÐ%ˆˆdŒhØ�Š�XÑÔÐØ�	Š	Ð#Ñ$Ô$Ð$Ø�Š Ô!5°aÔ!8ˆÑ9Ô9Ð9ð 	�Š� ¤Ñ-Ô-Ð-Ø�Š� ¤Ñ-Ô-Ð-ØˆŒàˆÔð 	×ÒÑÔÐØ�ŠÑÔÐð	>Ø×ÒÑÔÐÐøÝð 	6ð 	6ð 	6ØˆIÐ1°1Ñ5Ô5Ð5Ð5Ð5Ð5Ð5Ð5øøøøÝð 	>ð 	>ð 	>ØˆIÐ2°A´HÑ=Ô=Ð=Ð=Ð=Ð=Ð=Ð=øøøøð	>øøøð 	�ŠÑÔÐØ×ÒÑÔÐØŒ×Ò˜1ÑÔÐð 	Œ×Ò˜ d¤mÑ4Ô4Ð4Ð4Ð4s$   ÅE Å
FÅ"E3Å3FÆ FÆFc                 ó–   — | j                              d                     t          j        ¦   «         d| j        z  |¦  «        ¦  «         d S )Nz{} {}{}z | )r=  r)   rç   rg  Úctimer>  ©rP   r÷   s     r   r?  zDownloaderGUI._logß  sJ   € ØÔ×!Ò!Ø×Ò�TœZ™\œ\¨5°4Ô3CÑ+CÀSÑIÔIñ	
ô 	
ð 	
ð 	
ð 	
r   c                 óæ  ‡ — dd l }ddlm} |                     ‰ j        dddd¬¦  «        }|                     ddd	¬
¦  «         |                     dd¬¦  «         |                     dd¬¦  «         |                     |d¬¦  «                             dd¬¦  «         |                     |¦  «        }|                     ddd¬¦  «         |                     |¦  «        }|                     ddd¬¦  «         |                     |¦  «        }|                     ddd¬¦  «         |                     |d¬¦  «                             dd¬¦  «         |                     |¦  «        }|                     ddd¬¦  «         |                     |d¬¦  «                             dd¬¦  «         |                     ‰ j        dd‰ j	        d         ¬¦  «        }|                     dd¬¦  «         d‰ j        d<   d‰ j        d<   g d¢‰ _
        i ‰ _        t          ‰ j
        ¦  «        D ]y\  }	}
|                     ||
‰ j        ¬¦  «        }|                     d|	dz   dz  dz  ¬¦  «         |                     d ‰ j        ¦  «         |‰ j        |
                     ¦   «         <   Œzˆ fd!„‰ j        D ¦   «         } ||‰ j        |dd"‰ j        ¬#¦  «        ‰ _        ‰ j                             d‰ j        d         ¬$¦  «         t          ‰ j        ¦  «        D ]A\  }	}‰ j                             |‰ j        ¦  «        }‰ j                             |	|¬%¦  «         ŒB‰ j                             dd	¬&¦  «         ‰ j                             ¦   «          ‰ j                             d'‰ j        ¦  «         ‰ j                             d(‰ j        ¦  «         ‰ j                             d)‰ j        ¦  «         ‰ j                             d*‰ j        ¦  «         ‰ j                             d+‰ j        ¦  «         ‰ j                             d,‰ j         ¦  «         |                     dd¬¦  «         d-d.‰ j!        fd/d0‰ j"        fg}i ‰ _#        t          |¦  «        D ]ª\  }	\  }}}|                     ||¬1¦  «                             d|	d2¬¦  «         | $                    |d3d4d5d5¬6¦  «        }||f‰ j#        |<   |                     d)‰ j%        ¦  «         |                     d |fˆ fd7„	¦  «         |                     d|	d8¬¦  «         Œ«‰ j                             d ‰ j%        ¦  «         | &                    |d9‰ j        d¬:¦  «        ‰ _'        ‰ j'                             d¬;¦  «         | &                    |d<‰ j(        d¬:¦  «        ‰ _)        ‰ j)                             d=¬;¦  «         |                     |d>‰ j	        d         ‰ j	        d         ¬?¦  «        ‰ _*        | +                    |d@d"‰ j,        d         dAd¬B¦  «        ‰ _-        ‰  .                    ¦   «          ‰ j-                             d=¬;¦  «         ‰ j*                             d¬;¦  «         d S )CNr   )ÚTableÚraisedrZ  é   )ÚreliefÚborderÚpadxÚpadyrA  TÚboth)ÚsidÚexpandræ   r7   )Úweight)Úheight)ÚcolumnÚrowÚnews)rc  rd  Ústickyr   é   rU  é   )r\  r]  r1  ÚbottomrÖ   )Úsideræ   r[  Úhighlightthickness)ÚCollectionsÚCorporaÚModelszAll Packages)ÚtextÚfontÚleftr)  )rj  r\  z
<Button-1>c                 óF   •— g | ]}‰j                              |d ¦  «        ‘ŒS )r7   )ÚCOLUMN_WEIGHTSrs   )r   rc  rP   s     €r   ru   z/DownloaderGUI._init_widgets.<locals>.<listcomp>  s,   ø€ ÐXÐXÐXÀ˜$Ô-×1Ò1°&¸!Ñ<Ô<ÐXÐXÐXr   é   )Úcolumn_weightsrk  Úlistbox_heightÚreprfunc)Ú
foreground©rÚ   )r`  ræ   z<Double-Button-1>z<space>z<Return>z<Left>z<Right>z<Control-a>r?   zServer Index:r²   zDownload Directory:)ro  r  ÚcourierÚgroovez#007aff)rp  rZ  Údisabledforegroundrx  c                 ó.   •— ‰                      |¦  «        S r[   ©Ú
_info_edit)r  rX   rP   s     €r   ú<lambda>z-DownloaderGUI._init_widgets.<locals>.<lambda>9  s   ø€ ¸¿ºÈÑ8LÔ8L€ r   ÚewÚDownload)ro  r  rÚ   )rj  ÚRefreshÚrightr1   )ro  rx  r1  éÈ   Úsunken)rÚ   rb  r1  rZ  r[  )/ré  Únltk.draw.tablerW  ÚFramerA  ÚpackÚgrid_rowconfigureÚgrid_columnconfigureÚgridrE  Ú
_tab_namesÚ_tabsr  ÚLabelÚ	_TAB_FONTrF  Ú_select_tabrê   ÚCOLUMNSÚ_table_reprfuncrO  ÚcolumnconfigÚ_MARK_COLORÚCOLUMN_WIDTHSrs   ÚDEFAULT_COLUMN_WIDTHÚfocusÚbind_to_listboxesÚ	_downloadÚ_table_markÚ	_prev_tabÚ	_next_tabÚ	_mark_allrÔ  râ  Ú_infoÚEntryÚ
_info_saveÚButtonÚ_download_buttonÚ_refreshÚ_refresh_buttonÚ_progresslabelÚCanvasÚ_PROGRESS_COLORÚ_progressbarÚ_init_progressbar)rP   ré  rW  Úf1ÚtabframeÚ
tableframeÚbuttonframeÚ	infoframeÚprogressframer   ÚtabÚlabelru  rc  rÚ   rô   rX   ÚcallbackÚentrys   `                  r   rJ  zDownloaderGUI._init_widgetsè  s»  ø€ ð 	ˆˆˆà)Ð)Ð)Ð)Ð)Ð)ð �]Š]˜4œ8¨H¸QÀQÈQˆ]ÑOÔOˆØ
�Š�E $¨VˆÑ4Ô4Ð4Ø
×Ò˜Q qÐÑ)Ô)Ð)Ø
×Ò ¨!ÐÑ,Ô,Ð,Ø�Š�b ˆÑ#Ô#×(Ò(°°qÐ(Ñ9Ô9Ð9Ø—=’= Ñ$Ô$ˆØ�Š˜Q A¨fˆÑ5Ô5Ð5Ø—]’] 2Ñ&Ô&ˆ
Ø�Š˜q a°ˆÑ7Ô7Ð7Ø—m’m BÑ'Ô'ˆØ×Ò  q°ÐÑ8Ô8Ð8Ø�Š�b ˆÑ#Ô#×(Ò(°°qÐ(Ñ9Ô9Ð9Ø—M’M "Ñ%Ô%ˆ	Ø�Š˜a Q¨vˆÑ6Ô6Ð6Ø�Š�b ˆÑ#Ô#×(Ò(°°qÐ(Ñ9Ô9Ð9ØŸšØŒH˜1 1°Ô1EÀaÔ1Hð &ñ 
ô 
ˆð 	×Ò ¨sÐÑ3Ô3Ð3ØˆŒ�ÑØ)*ˆŒÐ%Ñ&ð OÐNÐNˆŒØˆŒ
Ý ¤Ñ0Ô0ð 	,ð 	,‰FˆAˆsØ—M’M (°¸4¼>�MÑJÔJˆEØ�JŠJ˜F¨1¨q©5°A©+¸Ñ);ˆJÑ<Ô<Ð<Ø�JŠJ�| TÔ%5Ñ6Ô6Ð6Ø&+ˆDŒJ�s—y’y‘{”{Ñ#Ð#ð YÐXÐXÐXÈ4Ì<ÐXÑXÔXˆØ�eØØŒLØ)Ø ØØÔ)ð
ñ 
ô 
ˆŒð 	Œ× Ò  ¨tÔ/?ÀÔ/BÐ ÑCÔCÐCÝ" 4¤<Ñ0Ô0ð 	5ð 	5‰IˆAˆvØÔ&×*Ò*¨6°4Ô3LÑMÔMˆEØŒK×$Ò$ Q¨eÐ$Ñ4Ô4Ð4Ð4ØŒ×Ò ¨6ÐÑ2Ô2Ð2ØŒ×ÒÑÔÐØŒ×%Ò%Ð&9¸4¼>ÑJÔJÐJØŒ×Ò˜ DÔ$4Ñ5Ô5Ð5ØŒ×Ò˜ T¤^Ñ4Ô4Ð4ØŒ×Ò˜ 4¤>Ñ2Ô2Ð2ØŒ×Ò˜ D¤NÑ3Ô3Ð3ØŒ×Ò˜¨¬Ñ7Ô7Ð7ð 	×&Ò& q°Ð&Ñ3Ô3Ð3ð �O T¤]Ð3ØÐ2°DÔ4JÐKð
ˆð ˆŒ
Ý)2°4©¬ð 	5ð 	5Ñ%ˆAÑ%��U˜HØ�MŠM˜)¨%ˆMÑ0Ô0×5Ò5¸QÀAÈcÐ5ÑRÔRÐRØ—M’MØØØØ#,Ø$ð "ñ ô ˆEð  % hÐ/ˆDŒJ�s‰OØ�JŠJ�z 4¤?Ñ3Ô3Ð3Ø�JŠJ�|°3Ð%LÐ%LÐ%LÐ%LÐ%LÑMÔMÐMØ�JŠJ˜a Q¨tˆJÑ4Ô4Ð4Ð4ð 	Œ�Š�l D¤OÑ4Ô4Ð4ð !(§¢Ø˜j°$´.Èð !/ñ !
ô !
ˆÔð 	Ô×"Ò"¨Ð"Ñ/Ô/Ð/Ø&Ÿ~š~Ø˜i°´Àað  .ñ  
ô  
ˆÔð 	Ô×!Ò! wÐ!Ñ/Ô/Ð/ð &ŸmšmØØØÔ+¨AÔ.ØÔ+¨AÔ.ð	 ,ñ 
ô 
ˆÔð $ŸNšNØØØØÔ+¨AÔ.ØØð +ñ 
ô 
ˆÔð 	×ÒÑ Ô Ð ØÔ×Ò GÐÑ,Ô,Ð,ØÔ× Ò  fÐ Ñ-Ô-Ð-Ð-Ð-r   c                 óB  ‡ — dd l }|                     ‰ j        ¦  «        }|                     |d¬¦  «        }|                     dd‰ j        d¬¦  «         |                     ¦   «          |                     ddˆ fd„¬	¦  «         |                     d
dˆ fd„¬	¦  «         |                     ¦   «          |                     dd‰ j        ¬	¦  «         |                     ¦   «          |                     dd‰ j        d¬¦  «         |                     dd|¬¦  «         |                     |d¬¦  «        }‰ j	        j
        dd …         D ]m}|                     ‰ j        ¦  «        }|‰ j        vsJ ‚|‰ j        |<   |‰ j        v r|                     d¦  «         |                     |d|‰ j        ¬¦  «         Œn|                     dd|¬¦  «         |                     |d¬¦  «        }‰ j	        j
        dd …         D ]!}|                     d|z  |fˆ fd„	¬¦  «         Œ"|                     ¦   «          ‰ j	        j
        dd …         D ]!}|                     d|z  |fˆ fd„	¬¦  «         Œ"|                     dd|¬¦  «         |                     |d¬¦  «        }|                     dd‰ j        ¬	¦  «         |                     dd‰ j        d¬¦  «         |                     dd|¬¦  «         ‰ j                             d ‰ j        ¦  «         ‰ j                             |¬!¦  «         d S )"Nr   )Útearoffr‚  ÚReturn)r²  Ú	underliner  ÚacceleratorzChange Server Indexé   c                  ó.   •— ‰                       d¦  «        S )Nr?   r~  rb   s   €r   r€  z*DownloaderGUI._init_menu.<locals>.<lambda>j  s   ø€ ˜DŸOšO¨EÑ2Ô2€ r   )r²  r¸  r  zChange Download Directoryc                  ó.   •— ‰                       d¦  «        S )Nr²   r~  rb   s   €r   r€  z*DownloaderGUI._init_menu.<locals>.<lambda>o  s   ø€ ˜DŸOšO¨NÑ;Ô;€ r   zShow LogrU  ÚExitr7   zCtrl-xÚFile)r²  r¸  ÚmenurZ  )r²  r¸  Úvariabler  ÚViewz
Sort by %sc                 ó:   •— ‰j                              | d¦  «        S )NÚ	ascending©rO  Úsort_by©rÀ  rP   s    €r   r€  z*DownloaderGUI._init_menu.<locals>.<lambda>�  s   ø€ ¨$¬+×*=Ò*=¸aÀÑ*MÔ*M€ r   )r²  r  zReverse sort by %sc                 ó:   •— ‰j                              | d¦  «        S )NÚ
descendingrÄ  rÆ  s    €r   r€  z*DownloaderGUI._init_menu.<locals>.<lambda>–  s   ø€ ¨$¬+×*=Ò*=¸aÀÑ*NÔ*N€ r   ÚSortÚAboutÚInstructionsÚF1ÚHelpz<F1>)r¿  )ré  ÚMenurA  Úadd_commandrš  Úadd_separatorÚ	_show_logrG  Úadd_cascaderO  Úcolumn_namesÚIntVarrI  ÚINITIAL_COLUMNSÚsetÚadd_checkbuttonrN  ÚaboutÚhelprF  Úconfig)	rP   ré  ÚmenubarÚfilemenuÚviewmenurc  ÚvarÚsortmenuÚhelpmenus	   `        r   rK  zDownloaderGUI._init_menu]  sÍ  ø€ Øˆˆˆà—,’,˜tœxÑ(Ô(ˆà—<’< °�<Ñ3Ô3ˆØ×ÒØ¨°4´>Èxð 	ñ 	
ô 	
ð 	
ð 	×ÒÑ Ô Ð Ø×ÒØ'ØØ2Ð2Ð2Ð2ð 	ñ 	
ô 	
ð 	
ð
 	×ÒØ-ØØ;Ð;Ð;Ð;ð 	ñ 	
ô 	
ð 	
ð
 	×ÒÑ Ô Ð Ø×Ò :¸ÀDÄNÐÑSÔSÐSØ×ÒÑ Ô Ð Ø×ÒØ A¨t¬|Èð 	ñ 	
ô 	
ð 	
ð 	×Ò &°A¸HÐÑEÔEÐEð
 —<’< °�<Ñ3Ô3ˆØ”kÔ.¨q¨r¨rÔ2ð 	ð 	ˆFØ—.’. ¤Ñ*Ô*ˆCØ Ô!2Ð2Ð2Ð2Ð2Ø(+ˆDÔ˜fÑ%Ø˜Ô-Ð-Ð-Ø—’˜‘
”
�
Ø×$Ò$Ø¨°CÀÔAUð %ñ ô ð ð ð 	×Ò &°A¸HÐÑEÔEÐEð
 —<’< °�<Ñ3Ô3ˆØ”kÔ.¨q¨r¨rÔ2ð 	ð 	ˆFØ× Ò Ø" VÑ+Ø"(ÐMÐMÐMÐMÐMð !ñ ô ð ð ð 	×ÒÑ Ô Ð à”kÔ.¨q¨r¨rÔ2ð 	ð 	ˆFØ× Ò Ø*¨VÑ3Ø"(ÐNÐNÐNÐNÐNð !ñ ô ð ð ð 	×Ò &°A¸HÐÑEÔEÐEà—<’< °�<Ñ3Ô3ˆØ×Ò 7°aÀÄÐÑLÔLÐLØ×ÒØ ¨A°t´yÈdð 	ñ 	
ô 	
ð 	
ð 	×Ò &°A¸HÐÑEÔEÐEØŒ�Š�f˜dœiÑ(Ô(Ð(àŒ�Š˜WˆÑ%Ô%Ð%Ð%Ð%r   c                 óÖ   — | j                              ¦   «         D ]N\  }}|                     ¦   «         r| j                             |¦  «         Œ4| j                             |¦  «         ŒOd S r[   )rI  r  rs   rO  Úshow_columnÚhide_column)rP   rc  rÞ  s      r   rN  zDownloaderGUI._select_columns¤  sp   € ØÔ,×2Ò2Ñ4Ô4ð 	0ð 	0‰KˆF�CØ�wŠw‰yŒyð 0Ø”×'Ò'¨Ñ/Ô/Ð/Ð/à”×'Ò'¨Ñ/Ô/Ð/Ð/ð		0ð 	0r   c                 ó0  — ddl m} | j                             ¦   «          	 |                      ¦   «          nF# t
          $ r} |d|¦  «         Y d }~n+d }~wt          $ r} |d|j        ¦  «         Y d }~nd }~ww xY w| j         	                    d¦  «         d S ©Nr   r/  r2  r3  )
r4  r0  ró  rª  rL  r   r   r  rO  rP  )rP   r0  r  s      r   r¤  zDownloaderGUI._refresh«  sÙ   € Ø0Ð0Ð0Ð0Ð0Ð0àŒ×#Ò#Ñ%Ô%Ð%ð	>Ø×ÒÑÔÐÐøÝð 	6ð 	6ð 	6ØˆIÐ1°1Ñ5Ô5Ð5Ð5Ð5Ð5Ð5Ð5øøøøÝð 	>ð 	>ð 	>ØˆIÐ2°A´HÑ=Ô=Ð=Ð=Ð=Ð=Ð=Ð=øøøøð	>øøøàŒ×Ò˜1ÑÔÐÐÐs!   ¡6 ¶
A9Á AÁA9ÁA4Á4A9c                 óŠ   — |                       ¦   «          | j        |         \  }}d|d<   d|d<   |                     ¦   «          d S )NÚnormalÚstater†  rZ  )r¡  rŸ  r˜  )rP   Úinfo_keyr´  r³  s       r   r  zDownloaderGUI._info_edit·  sE   € Ø�ŠÑÔÐØœ* XÔ.‰ˆˆxØ!ˆˆg‰Ø"ˆˆh‰Ø�Š‰Œˆˆˆr   Nc                 ó  — | j         }| j                             ¦   «         D ]R\  }}|d         dk    rŒ|�|j        |u r|j        dk    r|}Œ+d|d<   d|d<    ||                     ¦   «         ¦  «         ŒS|                     ¦   «          d S )Nrè  Údisabledr·  r{  rZ  )rO  rŸ  rû   ÚwidgetÚkeysymrs   r˜  )rP   r  r˜  r´  r³  s        r   r¡  zDownloaderGUI._info_save¾  sž   € Ø”ˆØ#œz×0Ò0Ñ2Ô2ð 	&ð 	&‰OˆE�8Ø�WŒ~ Ò+Ð+ØØˆ} ¤¨UÐ!2Ð!2°q´xÀ8Ò7KÐ7KØ��à!+��g‘Ø"*��h‘Ø�˜Ÿš™œÑ%Ô%Ð%Ð%Ø�Š‰Œˆˆˆr   c                 óø   — | j         j        |                              d¦  «        r>t          |t          ¦  «        rd|z  S |dk     rd|dz  z  S |dk     rd|dz  z  S d	|d
z  z  S |dv rt	          |¦  «        S d|z  S )Nr  z  %si   z	  %.1f KBg      �@i   @z	  %.1f MBg      0Az	  %.1f GBg      ÐA)r   r1   )rO  rÓ  r`  r   r   )rP   rd  ÚcolÚvals       r   r“  zDownloaderGUI._table_reprfuncË  s›   € ØŒ;Ô# CÔ(×1Ò1°&Ñ9Ô9ð 	7Ý˜#�sÑ#Ô#ð 7Ø ‘|Ð#Ø�w’�Ø" c¨I¡oÑ6Ð6Ø�w’�Ø" c¨I¡oÑ6Ð6à" c¨I¡oÑ6Ð6à�'ˆ>ˆ>Ý�s‘8”8ˆOà˜C‘<Ðr   c                 ó  — ddl m} || j        j        k    rd S 	 || j        _        |                      ¦   «          n0# t
          $ r#} |dt          |¦  «        ¦  «         Y d }~nd }~ww xY w|                      ¦   «          d S )Nr   r/  zError Setting Server Index)r4  r0  ró  r?   rL  r    r   rM  )rP   r?   r0  r  s       r   rÔ  zDownloaderGUI._set_urlÛ  s¨   € Ø0Ð0Ð0Ð0Ð0Ð0à�$”(”,ÒÐØˆFð	<ØˆDŒHŒLØ×ÒÑÔÐÐøÝð 	<ð 	<ð 	<ØˆIÐ2µC¸±F´FÑ;Ô;Ð;Ð;Ð;Ð;Ð;Ð;øøøøð	<øøøà�ŠÑÔÐÐÐs   š ; »
A(ÁA#Á#A(c                 ó.  — ddl m} | j        j        |k    rd S || j        _        	 |                      ¦   «          nF# t
          $ r} |d|¦  «         Y d }~n+d }~wt          $ r} |d|j        ¦  «         Y d }~nd }~ww xY w|                      ¦   «          d S rå  )	r4  r0  ró  r²   rL  r   r   r  rM  )rP   r²   r0  r  s       r   râ  zDownloaderGUI._set_download_dirç  sà   € Ø0Ð0Ð0Ð0Ð0Ð0àŒ8Ô  LÒ0Ð0ØˆFð !-ˆŒÔð	>Ø×ÒÑÔÐÐøÝð 	6ð 	6ð 	6ØˆIÐ1°1Ñ5Ô5Ð5Ð5Ð5Ð5Ð5Ð5øøøøÝð 	>ð 	>ð 	>ØˆIÐ2°A´HÑ=Ô=Ð=Ð=Ð=Ð=Ð=Ð=øøøøð	>øøøà�ŠÑÔÐÐÐs!   ¦; »
A>ÁAÁA>Á#A9Á9A>c                 óº  — t          d| j        j        ¦  «         | j                             ¦   «         D ] \  }}d|d<   |                     dd¦  «         Œ!| j        d         d                              d| j        j        ¦  «         | j        d         d                              d| j        j        ¦  «         | j                             ¦   «         D ]
\  }}d|d<   Œd S )	Nzshowing inforç  rè  r   Úendr?   r²   rë  )rÛ   ró  r?   rŸ  rû   ÚdeleteÚinsertr²   )rP   r´  Úcbs      r   rM  zDownloaderGUI._show_infoø  sÚ   € Ýˆn˜dœhœlÑ+Ô+Ð+Øœ×*Ò*Ñ,Ô,ð 	#ð 	#‰IˆE�2Ø%ˆE�'‰NØ�LŠL˜˜EÑ"Ô"Ð"Ð"ØŒ
�5Ô˜!Ô×#Ò# A t¤x¤|Ñ4Ô4Ð4ØŒ
�>Ô" 1Ô%×,Ò,¨Q°´Ô0EÑFÔFÐFØœ×*Ò*Ñ,Ô,ð 	(ð 	(‰IˆE�2Ø'ˆE�'‰NˆNð	(ð 	(r   c                 ó”  — ddl m} t          | j        ¦  «        D ]¬\  }}|                     ¦   «         | j        k    rŠ|dk    r„| j        |dz
                                ¦   «         | _        	 |                      ¦   «         c S # t          $ r} |d|¦  «         Y d }~Œ�d }~wt          $ r} |d|j	        ¦  «         Y d }~Œ¤d }~ww xY wŒ­d S ©Nr   r/  r7   r2  r3  )
r4  r0  r  r�  rê   Ú_tabrL  r   r   r  ©rP   r  r0  r   r±  s        r   rœ  zDownloaderGUI._prev_tab  s  € Ø0Ð0Ð0Ð0Ð0Ð0å ¤Ñ0Ô0ð 	Fð 	F‰FˆAˆsØ�yŠy‰{Œ{˜dœiÒ'Ð'¨A°ªE¨EØ œO¨A°©EÔ2×8Ò8Ñ:Ô:�”	ðFØ×+Ò+Ñ-Ô-Ð-Ð-Ð-øÝ ð >ð >ð >Ø�IÐ9¸1Ñ=Ô=Ð=Ð=Ð=Ð=Ð=Ð=øøøøÝð Fð Fð FØ�IÐ:¸A¼HÑEÔEÐEÐEÐEÐEÐEÐEøøøøðFøøøøð	Fð 	Fs$   Á+BÂ
CÂBÂCÂ)B?Â?Cc                 ó¾  — ddl m} t          | j        ¦  «        D ]Á\  }}|                     ¦   «         | j        k    rŸ|t          | j        ¦  «        dz
  k     r„| j        |dz                                 ¦   «         | _        	 |                      ¦   «         c S # t          $ r} |d|¦  «         Y d }~Œ–d }~wt          $ r} |d|j        ¦  «         Y d }~Œ¹d }~ww xY wŒÂd S rù  )r4  r0  r  r�  rê   rú  rÜ   rŽ  rL  r   r   r  rû  s        r   r�  zDownloaderGUI._next_tab  s'  € Ø0Ð0Ð0Ð0Ð0Ð0å ¤Ñ0Ô0ð 	Fð 	F‰FˆAˆsØ�yŠy‰{Œ{˜dœiÒ'Ð'¨Aµ°T´Z±´À1Ñ1DÒ,EÐ,EØ œO¨A°©EÔ2×8Ò8Ñ:Ô:�”	ðFØ×+Ò+Ñ-Ô-Ð-Ð-Ð-øÝ ð >ð >ð >Ø�IÐ9¸1Ñ=Ô=Ð=Ð=Ð=Ð=Ð=Ð=øøøøÝð Fð Fð FØ�IÐ:¸A¼HÑEÔEÐEÐEÐEÐEÐEÐEøøøøðFøøøøð	Fð 	Fs$   Â BÂ
CÂ B1Â1CÂ>CÃCc                 ó  — ddl m} |j        d                              ¦   «         | _        	 |                      ¦   «          d S # t          $ r} |d|¦  «         Y d }~d S d }~wt          $ r} |d|j        ¦  «         Y d }~d S d }~ww xY w)Nr   r/  ro  r2  r3  )	r4  r0  rì  rê   rú  rL  r   r   r  )rP   Úeventr0  r  s       r   r‘  zDownloaderGUI._select_tab  sÌ   € Ø0Ð0Ð0Ð0Ð0Ð0à”L Ô(×.Ò.Ñ0Ô0ˆŒ	ð	>Ø×ÒÑÔÐÐÐøÝð 	6ð 	6ð 	6ØˆIÐ1°1Ñ5Ô5Ð5Ð5Ð5Ð5Ð5Ð5Ð5øøøøÝð 	>ð 	>ð 	>ØˆIÐ2°A´HÑ=Ô=Ð=Ð=Ð=Ð=Ð=Ð=Ð=øøøøð	>øøøs#   ¬A Á
BÁAÁBÁ+BÂBrÇ   c                 ó¢  ‡ — ‰ j                              ¦   «         }‰ j                              ¦   «          ‰ j        dk    r‰ j                             ¦   «         }n�‰ j        dk    r‰ j                             ¦   «         }n\‰ j        dk    r‰ j                             ¦   «         }n7‰ j        dk    r‰ j                             ¦   «         }nJ d‰ j        z  ¦   «         ‚ˆ fd„|D ¦   «         }‰ j          	                    |¦  «         ‰ j
                             ¦   «         D ]k\  }}|‰ j        k    r.|                     ‰ j        d         ‰ j        d         ¬	¦  «         Œ>|                     ‰ j        d         ‰ j        d         ¬	¦  «         Œl‰ j                              d
d¬¦  «         ‰                      ¦   «          ‰ j                              |¦  «          ‰ j        j        d‰ j         j        j        g‰ j         j                             ¦   «         ¢R Ž   ‰ j        j        d‰ j         j        j        g‰ j         j                             ¦   «         ¢R Ž  d S )Nzall packagesrÿ   r	  rÇ   r   zbad tab value %rc                 ó:   •— g | ]}‰                      |¦  «        ‘ŒS r   )Ú_package_to_columnsr  s     €r   ru   z-DownloaderGUI._fill_table.<locals>.<listcomp>8  s'   ø€ ÐAÐAÐA°4�×(Ò(¨Ñ.Ô.ÐAÐAÐAr   r7   ©rx  r1  r  rÃ  )Úorderé–   i,  )rO  Úselected_rowr¨  rú  ró  rn   rÿ   r	  rÇ   rÇ  rŽ  r  rD  Ú_FRONT_TAB_COLORÚ_BACK_TAB_COLORrÅ  Ú_color_tablerP  rA  ÚafterÚ
_scrollbarrÖ  Ú_mlbÚyview)rP   r  r  Úrowsr±  r²  s   `     r   rL  zDownloaderGUI._fill_table+  sN  ø€ Ø”{×/Ò/Ñ1Ô1ˆØŒ×ÒÑÔÐØŒ9˜Ò&Ð&Ø”H×%Ò%Ñ'Ô'ˆEˆEØŒY˜)Ò#Ð#Ø”H×$Ò$Ñ&Ô&ˆEˆEØŒY˜(Ò"Ð"Ø”H—O’OÑ%Ô%ˆEˆEØŒY˜-Ò'Ð'Ø”H×(Ò(Ñ*Ô*ˆEˆEà4Ð(¨4¬9Ñ4Ñ4Ô4Ð4ØAÐAÐAÐA¸5ÐAÑAÔAˆØŒ×Ò˜4Ñ Ô Ð ð œ*×*Ò*Ñ,Ô,ð 
	ð 
	‰JˆC�Ø�d”iÒÐØ—’Ø#Ô4°QÔ7Ø#Ô4°QÔ7ð  ñ ô ð ð ð
 —’Ø#Ô3°AÔ6Ø#Ô3°AÔ6ð  ñ ô ð ð ð
 	Œ×Ò˜L°ÐÑ<Ô<Ð<Ø×ÒÑÔÐØŒ×Ò˜<Ñ(Ô(Ð(ð 	ˆŒŒ�s˜DœKÔ2Ô6ÐR¸¼Ô9I×9OÒ9OÑ9QÔ9QÐRÐRÐRÐRØˆŒŒ�s˜DœKÔ2Ô6ÐR¸¼Ô9I×9OÒ9OÑ9QÔ9QÐRÐRÐRÐRÐRÐRr   c                 óÜ   — t          t          | j        ¦  «        ¦  «        D ]5}| j                             | j        |df         ¦  «        }|| j        |df<   Œ6|                      ¦   «          d S )Nr  r   )r  rÜ   rO  ró  rà   r  )rP   Úrow_numrà   s      r   Ú_update_table_statusz"DownloaderGUI._update_table_statusT  sn   € Ý�S ¤Ñ-Ô-Ñ.Ô.ð 	4ð 	4ˆGØ”X—_’_ T¤[°¸,Ð1FÔ%GÑHÔHˆFØ-3ˆDŒK˜ Ð)Ñ*Ð*Ø×ÒÑÔÐÐÐr   c                 ób  ‡ — ‰ j         r
 ‰ j        |Ž S ˆ fd„t          t          ‰ j        ¦  «        ¦  «        D ¦   «         }‰ j                             ¦   «         }|s|�‰ j        |df         g}‰ j                             |‰ j        j        ¦  «        }d‰ _	        ‰  
                    ||¦  «         d S )Nc                 óT   •— g | ]$}‰j         |d f         dk    ¯‰j         |df         ‘Œ%S ©r   r1   r  ©rO  ©r   rd  rP   s     €r   ru   z+DownloaderGUI._download.<locals>.<listcomp>`  óE   ø€ ð 
ð 
ð 
àØŒ{˜3 ˜6Ô" bÒ(Ð(ð ŒK˜˜\Ð)Ô*à(Ð(Ð(r   r  r   )r5  Ú_download_threadedr  rÜ   rO  r  ró  r  r²   r>  Ú_download_cb)rP   r  ÚmarkedÚ	selectionÚdownload_iters   `    r   rš  zDownloaderGUI._downloadZ  sÐ   ø€ ð Ôð 	/Ø*�4Ô*¨AÐ.Ð.ð
ð 
ð 
ð 
å�S ¤Ñ-Ô-Ñ.Ô.ð
ñ 
ô 
ˆð
 ”K×,Ò,Ñ.Ô.ˆ	Øð 	<˜)Ð/Ø”k )¨\Ð"9Ô:Ð;ˆFàœ×.Ò.¨v°t´xÔ7LÑMÔMˆØˆÔØ×Ò˜-¨Ñ0Ô0Ð0Ð0Ð0r   c                 ón  ‡ — 	 t          |¦  «        }nP# t          $ rC ‰                      ¦   «          ‰ j                             d‰ j        d¦  «        }|‰ j        d<   Y d S w xY wˆ fd„}t          |t          ¦  «        r‰                      |j	        ¦  «         �nët          |t          ¦  «        rM ||j        ¦  «         |j        �‰                      |j        j        ¦  «         ‰                      d ¦  «         d S t          |t          ¦  «        r* |d|j        j        z  ¦  «         ‰ xj        dz  c_        �nJt          |t$          ¦  «        r |d|j        j        z  ¦  «         �nt          |t&          ¦  «        r |d|j        j        z  ¦  «         nít          |t(          ¦  «        r |d	|j        j        z  ¦  «         n¿t          |t*          ¦  «        r |d
|j        j        z  ¦  «         n‘t          |t.          ¦  «        rH‰ xj        dz  c_         |d|j        j        z  ¦  «         ‰                      |j        j        ¦  «         n4t          |t2          ¦  «        r‰                      |j        j        ¦  «         ‰ j                             ‰ j        ‰ j        ||¦  «        }|‰ j        d<   d S )Nr)  r   r  c                 óF   •— | ‰j         d<   ‰                     | ¦  «         d S ©Nro  ©r¦  r?  ©rƒ  rP   s    €r   r‘  z(DownloaderGUI._download_cb.<locals>.showy  ó#   ø€ Ø*+ˆDÔ Ñ'Ø�IŠI�a‰LŒLˆLˆLˆLr   zDownloading collection %sr7   zDownloading package %súPackage %s is up-to-date!úFinished downloading %r.úUnzipping %sú#Finished downloading collection %r.)ÚnextÚStopIterationr  rA  r	  Ú_show_progressr<  r   r¬   r®   r§   rª   r‹   Ú_selectr8   r}   r€   r>  rˆ   r¡   r—   r›   rO   r…   Ú_clear_markr�   Ú	_DL_DELAYr  )rP   r  Úidsr÷   Úafteridr‘  s   `     r   r  zDownloaderGUI._download_cbo  sÒ  ø€ ð	Ý�}Ñ%Ô%ˆCˆCøÝð 	ð 	ð 	à×%Ò%Ñ'Ô'Ð'Ø”h—n’n R¨Ô)<¸aÑ@Ô@ˆGØ,3ˆDŒM˜.Ñ)ØˆFˆFð	øøøð	ð 	ð 	ð 	ð 	õ �c�?Ñ+Ô+ð 	-Ø×Ò ¤Ñ-Ô-Ð-Ñ-Ý˜�\Ñ*Ô*ð 	-ØˆD�”ÑÔÐØŒ{Ð&Ø—’˜Sœ[œ^Ñ,Ô,Ð,Ø×Ò Ñ%Ô%Ð%ØˆFÝ˜Õ3Ñ4Ô4ð 	-ØˆDÐ,¨s¬~Ô/@Ñ@ÑAÔAÐAØÐÔ Ñ!ÐÔÑÝ˜Õ0Ñ1Ô1ð 	-ØˆDÐ)¨C¬K¬NÑ:Ñ;Ô;Ð;Ñ;Ý˜�_Ñ-Ô-ð 	-ØˆDÐ,¨s¬{¬~Ñ=Ñ>Ô>Ð>Ð>õ ˜Õ2Ñ3Ô3ð 		-ØˆDÐ+¨c¬k¬nÑ<Ñ=Ô=Ð=Ð=Ý˜Õ.Ñ/Ô/ð 	-ØˆD� #¤+Ô"6Ñ6Ñ7Ô7Ð7Ð7Ý˜Õ4Ñ5Ô5ð 	-ØÐÔ Ñ!ÐÔØˆDÐ6¸¼Ô9JÑJÑKÔKÐKØ×Ò˜Sœ^Ô.Ñ/Ô/Ð/Ð/Ý˜Õ1Ñ2Ô2ð 	-Ø×Ò˜Sœ[œ^Ñ,Ô,Ð,Ø”(—.’. ¤°Ô1BÀMÐSVÑWÔWˆØ(/ˆŒ�nÑ%Ð%Ð%s   ƒ “A	A ÁA c                 ó®   — t          t          | j        ¦  «        ¦  «        D ]2}| j        |df         |k    r| j                             |¦  «          d S Œ3d S )Nr  )r  rÜ   rO  rP  ©rP   r8   rd  s      r   r)  zDownloaderGUI._select›  sf   € Ý�˜Tœ[Ñ)Ô)Ñ*Ô*ð 	ð 	ˆCØŒ{˜3 Ð,Ô-°Ò3Ð3Ø”×"Ò" 3Ñ'Ô'Ð'Ø��ð 4ð	ð 	r   c                 ó8  — t          t          | j        ¦  «        ¦  «        D ]w}| j        | j        |df                  \  }}d\  }}| j                             |||||¬¦  «         | j                             |d| j        d         | j        d         ¬¦  «         Œxd S )Nr   )ÚblackÚwhite)rx  Úselectforegroundr1  Úselectbackgroundr   r7   r  )r  rÜ   rO  Ú
_ROW_COLORÚ	rowconfigÚitemconfigurer•  )rP   rd  ÚbgÚsbgÚfgÚsfgs         r   r  zDownloaderGUI._color_table¡  s¿   € å�˜Tœ[Ñ)Ô)Ñ*Ô*ð 	ð 	ˆCØ”o d¤k°#°x°-Ô&@ÔA‰GˆB�Ø(‰GˆB�ØŒK×!Ò!ØØØ!$ØØ!$ð "ñ ô ð ð ŒK×%Ò%Ø�Q 4Ô#3°AÔ#6À4ÔCSÐTUÔCVð &ñ ô ð ð ð	ð 	r   c                 óŒ   — t          t          | j        ¦  «        ¦  «        D ]!}| j        |df         |k    rd| j        |df<   Œ"d S )Nr  r1   r   ©r  rÜ   rO  r/  s      r   r*  zDownloaderGUI._clear_mark²  sU   € Ý�˜Tœ[Ñ)Ô)Ñ*Ô*ð 	)ð 	)ˆCØŒ{˜3 Ð,Ô-°Ò3Ð3Ø&(�”˜C ˜FÑ#øð	)ð 	)r   c                 óf   — t          t          | j        ¦  «        ¦  «        D ]}d| j        |df<   Œd S )Nr  r   r=  )rP   r  rd  s      r   rž  zDownloaderGUI._mark_all·  s@   € Ý�˜Tœ[Ñ)Ô)Ñ*Ô*ð 	&ð 	&ˆCØ"%ˆDŒK˜˜Q˜ÑÐð	&ð 	&r   c                 óÚ   — | j                              ¦   «         }|dk    r0| j         |         d         dk    rd| j         |df<   nd| j         |df<   | j                              d¬¦  «         d S )Nr   r1   r  r7   )r"  )rO  r  rP  )rP   r  r  s      r   r›  zDownloaderGUI._table_mark»  sw   € Ø”K×,Ò,Ñ.Ô.ˆ	Ø˜Š>ˆ>ØŒ{˜9Ô% aÔ(¨BÒ.Ð.Ø,.�”˜I q˜LÑ)Ð)à,/�”˜I q˜LÑ)ØŒ×Ò ÐÑ#Ô#Ð#Ð#Ð#r   c                 ój   — ddl m} d                     | j        ¦  «        } || j        d|¦  «         d S )Nr   ©ÚShowTextrÕ   zNLTK Downloader Log)Únltk.draw.utilrB  rN   r=  rA  )rP   rB  ro  s      r   rÑ  zDownloaderGUI._show_logÄ  sE   € Ø+Ð+Ð+Ð+Ð+Ð+à�yŠy˜Ô+Ñ,Ô,ˆØˆ�”Ð0°$Ñ7Ô7Ð7Ð7Ð7r   c                 ó¸  — g }t          | j        ¦  «        D ]Â\  }}|dk    r|                     d¦  «         Œ!|dk    r|                     |j        ¦  «         ŒB|dk    r.|                     | j                             |¦  «        ¦  «         Œv|                     ¦   «                              dd¦  «        }|                     t          ||d¦  «        ¦  «         ŒÃ|S )z„
        Given a package, return a list of values describing that
        package, one for each column in ``self.COLUMNS``.
        r   r1   r  r   rÌ   r´  zn/a)	r  r’  r)   r8   ró  rà   rê   r;   rß   )rP   r  rd  Úcolumn_indexÚcolumn_nameÚattrs         r   r  z!DownloaderGUI._package_to_columnsÊ  sÚ   € ð
 ˆÝ)2°4´<Ñ)@Ô)@ð 		6ð 		6Ñ%ˆL˜+Ø˜qÒ Ð Ø—
’
˜2‘”��Ø Ò,Ð,Ø—
’
˜3œ6Ñ"Ô"Ð"Ð"Ø Ò(Ð(Ø—
’
˜4œ8Ÿ?š?¨3Ñ/Ô/Ñ0Ô0Ð0Ð0à"×(Ò(Ñ*Ô*×2Ò2°3¸Ñ<Ô<�Ø—
’
�7 3¨¨eÑ4Ô4Ñ5Ô5Ð5Ð5Øˆ
r   c                 óX   — | j         rd S | j                             ¦   «          d| _         d S r*  )rH  rA  rG  )rP   r  s     r   rG  zDownloaderGUI.destroyà  s0   € ØŒ?ð 	ØˆFØŒ×ÒÑÔÐØˆŒˆˆr   c                 óö   — | j         �6| j                             ¦   «         D ]}| j                              |¦  «         Œ| j        r| j        r|                      ¦   «          | j                             ¦   «          d S r[   )	rA  r<  rû   Úafter_cancelr;  r5  Ú_abort_downloadrI  r¨  )rP   r  r-  s      r   rQ  zDownloaderGUI._destroyæ  s†   € ØŒ8ÐØœ=×/Ò/Ñ1Ô1ð /ð /�Ø”×%Ò% gÑ.Ô.Ð.Ð.ð Ôð 	# Ô!2ð 	#Ø× Ò Ñ"Ô"Ð"ð
 	Ô×ÒÑ!Ô!Ð!Ð!Ð!r   c                 ó*   —  | j         j        |i |¤Ž d S r[   )rA  rì  )rP   r  Úkwargss      r   rì  zDownloaderGUI.mainloopô  s"   € ØˆŒÔ˜4Ð* 6Ð*Ð*Ð*Ð*Ð*r   an      This tool can be used to download a variety of corpora and models
    that can be used with NLTK.  Each corpus or model is distributed
    in a single zip file, known as a "package file."  You can
    download packages individually, or you can download pre-defined
    collections of packages.

    When you download a package, it will be saved to the "download
    directory."  A default download directory is chosen when you run

    the downloader; but you may also select a different download
    directory.  On Windows, the default download directory is


    "package."

    The NLTK downloader can be used to download a variety of corpora,
    models, and other data packages.

    Keyboard shortcuts::
      [return]	 Download
      [up]	 Select previous package
      [down]	 Select next package
      [left]	 Select previous tab
      [right]	 Select next tab
    c                 óä   — ddl m} 	  || j        d| j                             ¦   «         dd¬¦  «         d S # t
          $ r/  || j        d| j                             ¦   «         d¬¦  «         Y d S w xY w)Nr   rA  zHelp: NLTK DownloaderrÎ   Úfixed)rÚ   rp  ry  )rC  rB  rA  ÚHELPr›  r©   )rP   r  rB  s      r   rÙ  zDownloaderGUI.help	  s­   € Ø+Ð+Ð+Ð+Ð+Ð+ð		UØˆHØ”Ø'Ø”	—’Ñ!Ô!ØØðñ ô ð ð ð øõ ð 	Uð 	Uð 	UØˆH�T”XÐ6¸¼	¿ºÑ8IÔ8IÐQSÐTÑTÔTÐTÐTÐTÐTð	Uøøøs   ˆ,6 ¶5A/Á.A/c                 ó¬   — ddl m} d}d}	 ddlm}  |||¬¦  «                             ¦   «          d S # t
          $ r  || j        ||¦  «         Y d S w xY w)Nr   rA  z'NLTK Downloader
Written by Edward LoperzAbout: NLTK Downloader)ÚMessage)rª   rC  )rC  rB  r4  rR  r‘  rê  rA  )rP   r  rB  ÚABOUTÚTITLErR  s         r   rØ  zDownloaderGUI.about'	  s–   € Ø+Ð+Ð+Ð+Ð+Ð+à?ˆØ(ˆð	-Ø2Ð2Ð2Ð2Ð2Ð2àˆG˜E¨Ð/Ñ/Ô/×4Ò4Ñ6Ô6Ð6Ð6Ð6øÝð 	-ð 	-ð 	-ØˆH�T”X˜u eÑ,Ô,Ð,Ð,Ð,Ð,ð	-øøøs   Œ%3 ³AÁAc                 óD  — | j         }t          |d         ¦  «        t          |d         ¦  «        }}t          dt          |d         ¦  «        dz  | j        z  ¦  «        D ]Z}|                     || j        z  dz   d|| j        z  |z
  dz
  |dz   | j        ddt          |d	z  d
z
  ¦  «        dz  z   z  ¬¦  «         Œ[|                     d¦  «         |                     dd¬¦  «         |                     d| 	                    dddd| j
        d         ¬¦  «        ¦  «         d S )NrÚ   rb  r   rZ  rÓ   iìÿÿÿz	#%02x0000r[  rh  r   r*  )rÚ   ræ   ÚgradientÚhidden©rè  Úredbox)ræ   )r©  r@   r  Ú_gradient_widthÚcreate_lineÚabsÚ
addtag_allÚ
itemconfigÚaddtag_withtagÚcreate_rectangler¨  )rP   rÀ  rÚ   rb  r   s        r   rª  zDownloaderGUI._init_progressbar9	  sB  € ØÔˆÝ˜A˜gœJ™œ­¨Q¨x¬[Ñ)9Ô)9ˆvˆÝ�q�3˜q œz™?œ?¨QÑ.°4Ô3GÑGÑHÔHð 	ð 	ˆAØ�MŠMØ�DÔ(Ñ(¨2Ñ-ØØ�DÔ(Ñ(¨6Ñ1°BÑ6Ø˜‘ØÔ*Ø  B­¨Q°©U°Q©Y©¬¸"Ñ)<Ñ$<Ñ=ð ñ ô ð ð ð 	
�Š�ZÑ Ô Ð Ø	�Š�Z xˆÑ0Ô0Ð0ð 	
×ÒØ�a×(Ò(¨¨A¨q°!¸$Ô:NÈqÔ:QÐ(ÑRÔRñ	
ô 	
ð 	
ð 	
ð 	
r   c                 ó8  — | j         }|€2|                     ddddd¦  «         |                     dd¬¦  «         d S t          |d         ¦  «        t          |d         ¦  «        }}|t          |¦  «        z  dz  d	z   }|                     ddd||d	z   ¦  «         d S )
NrY  r   rV  rW  rX  rÚ   rb  r  r7   )r©  Úcoordsr^  r@   )rP   ÚpercentrÀ  rÚ   rb  rÖ   s         r   r(  zDownloaderGUI._show_progressM	  s¢   € ØÔˆØˆ?Ø�HŠH�X˜q ! Q¨Ñ*Ô*Ð*Ø�LŠL˜¨8ˆLÑ4Ô4Ð4Ð4Ð4å  '¤
™OœO­S°°8´Ñ-=Ô-=�6ˆEØ�#˜e™*œ*Ñ$¨Ñ+¨aÑ/ˆAØ�HŠH�X˜q ! Q¨°©
Ñ3Ô3Ð3Ð3Ð3r   c                 óŠ  — | j         }| j        s|                     dd¬¦  «         d S |                     dd¬¦  «         |                     d¦  «        \  }}}}|dk    r#|                     d| j        dz  dz
  d¦  «         n|                     dd	d¦  «         | j                             d
| j        ¦  «        }|| j	        d<   d S )NrV  rW  rX  rç  iœÿÿÿrh  rg  r   r7  r…  Ú_progress_alive)
r©  r;  r^  ÚbboxÚmoverZ  rA  r	  re  r<  )rP   rÀ  Úx1Úy1Úx2Úy2r-  s          r   re  zDownloaderGUI._progress_aliveW	  sÐ   € ØÔˆØÔ ð 
	7Ø�LŠL˜¨8ˆLÑ4Ô4Ð4Ð4Ð4à�LŠL˜¨8ˆLÑ4Ô4Ð4ØŸVšV JÑ/Ô/‰NˆB��B˜Ø�TŠzˆzØ—’�z DÔ$8¸1Ñ$<ÀÑ#AÀ1ÑEÔEÐEÐEà—’�z 2 qÑ)Ô)Ð)Ø”h—n’n S¨$Ô*>Ñ?Ô?ˆGØ/6ˆDŒMÐ+Ñ,Ð,Ð,r   c                 óf  ‡ — ‰ j         r‰                      ¦   «          d S d‰ j        d<   ˆ fd„t          t	          ‰ j        ¦  «        ¦  «        D ¦   «         }‰ j                             ¦   «         }|s|�‰ j        |df         g}t          ‰ j        j	        ‰ j        j
        ¦  «        }‰ j        g k    sJ ‚‰ j        g k    sJ ‚‰                      ||‰ j        ‰ j        ‰ j        ¦  «                             ¦   «          d‰ _        d‰ _         ‰                      ¦   «          ‰                      ¦   «          d S )NÚCancelro  c                 óT   •— g | ]$}‰j         |d f         dk    ¯‰j         |df         ‘Œ%S r  r  r  s     €r   ru   z4DownloaderGUI._download_threaded.<locals>.<listcomp>s	  r  r   r  r   T)r;  rK  r£  r  rÜ   rO  r  rµ   ró  r?   r²   r9  r:  Ú_DownloadThreadr8  Ústartr>  Ú_monitor_message_queuere  )rP   r  r  r  Údss   `    r   r  z DownloaderGUI._download_threadedi	  s`  ø€ ð Ôð 	Ø× Ò Ñ"Ô"Ð"ØˆFð )1ˆÔ˜fÑ%ð
ð 
ð 
ð 
å�S ¤Ñ-Ô-Ñ.Ô.ð
ñ 
ô 
ˆð
 ”K×,Ò,Ñ.Ô.ˆ	Øð 	<˜)Ð/Ø”k )¨\Ð"9Ô:Ð;ˆFõ
 ˜œœ d¤hÔ&;Ñ<Ô<ˆð Ô'¨2Ò-Ð-Ð-Ð-ØÔ)¨RÒ/Ð/Ð/Ð/Ø×ÒØØØÔØÔ$ØÔ&ñ	
ô 	
÷ Š%‰'Œ'ˆ'ð ˆÔØ ˆÔØ×#Ò#Ñ%Ô%Ð%ð 	×ÒÑÔÐÐÐr   c                 ó°   — | j         rN| j                             ¦   «          | j                             d¦  «         | j                             ¦   «          d S d S )NÚabort)r;  r8  Úacquirer:  r)   Úreleaserb   s    r   rK  zDownloaderGUI._abort_download•	  s^   € ØÔð 	*ØÔ×'Ò'Ñ)Ô)Ð)ØÔ&×-Ò-¨gÑ6Ô6Ð6ØÔ×'Ò'Ñ)Ô)Ð)Ð)Ð)ð	*ð 	*r   c                   ó   — e Zd Zd„ Zd„ ZdS )úDownloaderGUI._DownloadThreadc                 óŠ   — || _         || _        || _        || _        || _        t
          j                             | ¦  «         d S r[   )Údata_serverr  ÚlockÚmessage_queuert  r6  ÚThreadrS   )rP   rz  r  r{  r|  rt  s         r   rS   z&DownloaderGUI._DownloadThread.__init__œ	  sD   € Ø*ˆDÔØˆDŒJØˆDŒIØ!.ˆDÔØˆDŒJÝÔ×%Ò% dÑ+Ô+Ð+Ð+Ð+r   c                 óô  — | j                              | j        ¦  «        D ]‹}| j                             ¦   «          | j                             |¦  «         | j        r6| j                             d¦  «         | j                             ¦   «           d S | j                             ¦   «          ŒŒ| j                             ¦   «          | j                             d¦  «         | j                             ¦   «          d S )NÚabortedÚfinished)	rz  r  r  r{  ru  r|  r)   rt  rv  rU  s     r   rè  z!DownloaderGUI._DownloadThread.run¤	  sç   € ØÔ'×5Ò5°d´jÑAÔAð $ð $�Ø”	×!Ò!Ñ#Ô#Ð#ØÔ"×)Ò)¨#Ñ.Ô.Ð.à”:ð ØÔ&×-Ò-¨iÑ8Ô8Ð8Ø”I×%Ò%Ñ'Ô'Ð'Ø�F�FØ”	×!Ò!Ñ#Ô#Ð#Ð#ØŒI×ÒÑÔÐØÔ×%Ò% jÑ1Ô1Ð1ØŒI×ÒÑÔÐÐÐr   N)re   rf   rg   rS   rè  r   r   r   ro  rx  ›	  s2   € € € € € ð	,ð 	,ð 	,ð	 ð 	 ð 	 ð 	 ð 	 r   ro  r  c                 ó¨  ‡ — ˆ fd„}‰ j                              ¦   «         sd S ‰ j        D �]D}|dk    s|dk    r§‰                      ¦   «          d‰ _        d‰ j        d<   ‰ j        d d …= ‰ j        d d …= ‰ j                              ¦   «          |dk    r! |d¦  «         ‰                      d ¦  «         n+‰ j	         
                    d‰ j        d ¦  «        }|‰ j        d	<    d S t          |t          ¦  «        r‰                      |j        ¦  «         Œæt          |t          ¦  «        rU ||j        ¦  «         |j        �‰                      |j        j        ¦  «         ‰                      d ¦  «         d‰ _         d S t          |t(          ¦  «        r* |d
|j        j        z  ¦  «         ‰ xj        dz  c_        �Œ�t          |t.          ¦  «        r>‰ j                             |j        j        ¦  «          |d|j        j        z  ¦  «         �Œât          |t4          ¦  «        r |d|j        j        z  ¦  «         �Œt          |t6          ¦  «        r |d|j        j        z  ¦  «         �Œ@t          |t8          ¦  «        r |d|j        j        z  ¦  «         �Œot          |t<          ¦  «        r |d|j        j        z  ¦  «         �Œžt          |t>          ¦  «        rI‰ xj        dz  c_         |d|j        j        z  ¦  «         ‰                       |j        j        ¦  «         �Œüt          |tB          ¦  «        r3‰                      ¦   «          ‰                       |j        j        ¦  «         �ŒF‰ j        r
d‰ j"        d<   ‰ j        d d …= ‰ j                              ¦   «          ‰ j	         
                    ‰ j#        ‰ j$        ¦  «        }|‰ j        d	<   d S )Nc                 óF   •— | ‰j         d<   ‰                     | ¦  «         d S r  r  r   s    €r   r‘  z2DownloaderGUI._monitor_message_queue.<locals>.showµ	  r!  r   r€  r  Fr‚  ro  zDownload aborted!r  rq  r•  r7   zDownloading package %rr"  r#  r$  zFinished installing %sr%  zAborting download...)%r8  ru  r9  r  r;  r£  r:  rv  r(  rA  r	  r<  r   r¬   r®   r§   rª   r‹   r)  r8   r}   r€   r>  rˆ   ró  rª  r¡   r—   r›   rO   rž   r…   r*  r�   r¦  Ú_MONITOR_QUEUE_DELAYrq  )rP   r‘  r÷   r-  s   `   r   rq  z$DownloaderGUI._monitor_message_queue´	  s  ø€ ð	ð 	ð 	ð 	ð 	ð
 Ô"×*Ò*Ñ,Ô,ð 	ØˆFØÔ+ð 3	1ñ 3	1ˆCà�jÒ Ð  C¨9Ò$4Ð$4à×)Ò)Ñ+Ô+Ð+Ø$)�Ô!Ø0:�Ô% fÑ-ØÔ,¨Q¨Q¨QÐ/ØÔ.¨q¨q¨qÐ1ØÔ#×+Ò+Ñ-Ô-Ð-Ø˜)Ò#Ð#Ø�DÐ,Ñ-Ô-Ð-Ø×'Ò'¨Ñ-Ô-Ð-Ð-à"œhŸnšn¨S°$Ô2EÀtÑLÔL�GØ>E�D”MÐ":Ñ;Ø��õ ˜C¥Ñ1Ô1ð  1Ø×#Ò# C¤LÑ1Ô1Ð1Ð1Ý˜C¥Ñ.Ô.ð 1Ø��S”[Ñ!Ô!Ð!Ø”;Ð*Ø—L’L ¤¤Ñ0Ô0Ð0Ø×#Ò# DÑ)Ô)Ð)Ø$)�Ô!Ø��Ý˜CÕ!7Ñ8Ô8ð 1Ø�Ð0°3´>Ô3DÑDÑEÔEÐEØÐ Ô  AÑ%Ð Ô Ñ Ý˜CÕ!4Ñ5Ô5ð 1Ø”×+Ò+¨C¬K¬NÑ;Ô;Ð;Ø�Ð-°´´Ñ>Ñ?Ô?Ð?Ñ?Ý˜C¥Ñ1Ô1ð 1Ø�Ð0°3´;´>ÑAÑBÔBÐBÑBõ ˜CÕ!6Ñ7Ô7ð 1Ø�Ð/°#´+´.Ñ@ÑAÔAÐAÑAÝ˜CÕ!2Ñ3Ô3ð 
1Ø��^ c¤kÔ&:Ñ:Ñ;Ô;Ð;Ñ;Ý˜CÕ!3Ñ4Ô4ð 1Ø�Ð-°´´Ñ>Ñ?Ô?Ð?Ñ?Ý˜CÕ!8Ñ9Ô9ð 1ØÐ Ô  AÑ%Ð Ô Ø�Ð:¸S¼^Ô=NÑNÑOÔOÐOØ× Ò  ¤Ô!2Ñ3Ô3Ð3Ñ3Ý˜CÕ!5Ñ6Ô6ð 1Ø×)Ò)Ñ+Ô+Ð+Ø× Ò  ¤¤Ñ0Ô0Ð0ùð
 Ô%ð 	AØ*@ˆDÔ Ñ'ð Ô$ Q Q QÐ'ØÔ×#Ò#Ñ%Ô%Ð%ð ”(—.’. Ô!:¸DÔ<WÑXÔXˆØ29ˆŒÐ.Ñ/Ð/Ð/r   ©Tr[   )Fre   rf   rg   rh   r’  rs  r–  r—  rÕ  rÀ  rE  rµ   rá   rã   râ   rä   r5  r•  r  r  r¨  r�  rS   r?  rJ  rK  rN  r¤  r  r¡  r“  rÔ  râ  rM  rœ  r�  r‘  rú  Ú_rowsrL  r  rš  r+  r  r)  r  r*  rž  r›  rÑ  r  rG  rQ  rì  rå   ÚdedentrP  rÙ  rØ  rZ  rª  r(  re  r  rK  r6  r}  ro  rƒ  rq  r   r   r   rë  rë  O  sú  € € € € € ðð ðð ð €GðDð  Q°¸QÐ?Ð?€NðCð ØØØØØðð €Mð<ð Ðð ð CÐBÐB€OØAð ð ð ˆØ�Gˆ|ˆ|ˆ|ˆ|ˆ|Øð ð ˆØ�Gˆ|ˆ|ˆ|ˆ|ˆ|Øð ð ˆØ�Gˆ|ˆ|ˆ|ˆ|ˆ|ð '€Oð 	ÔÐ.ØÔÐ,ØÔÐ*ØÔ Ð"2ð	€Jð #€Kð (ÐØ&€Oà&€Oà$€Ið45ð 45ð 45ð 45ðl
ð 
ð 
ðs.ð s.ð s.ðjE&ð E&ð E&ðN0ð 0ð 0ð
ð 
ð 
ðð ð ðð ð ð ð ð  ð  ð 
ð 
ð 
ðð ð ð"(ð (ð (ðFð Fð FðFð Fð Fð	>ð 	>ð 	>ð €Dà€Eð'Sð 'Sð 'SðRð ð ð1ð 1ð 1ð& €Ið*0ð *0ð *0ðXð ð ðð ð ð")ð )ð )ð
&ð &ð &ð$ð $ð $ð8ð 8ð 8ðð ð ð,ð ð ð"ð "ð "ð+ð +ð +ð ˆ8Œ?ð	ñô €Dð:Uð Uð Uð
-ð 
-ð 
-ð  €Oð
ð 
ð 
ð(4ð 4ð 4ð7ð 7ð 7ð$*ð *ð *ðX*ð *ð *ð ð  ð  ð  ð  ˜)Ô*ñ  ô  ð  ð. ÐðI:ð I:ð I:ð I:ð I:r   rë  c                 ó¸   — t          | t          ¦  «        r7t          | d¦  «        5 }t          |¦  «        cddd¦  «         S # 1 swxY w Y   t          | ¦  «        S )zz
    Calculate and return the MD5 checksum for a given file.
    ``file`` may either be a filename or an open stream.
    ÚrbN)r   r   r
   Ú_md5_hexdigest©r‹  r  s     r   rt  rt  
  s–   € õ
 �$�ÑÔð *Ý�$˜ÑÔð 	* Ý! &Ñ)Ô)ð	*ð 	*ð 	*ð 	*ñ 	*ô 	*ð 	*ð 	*ð 	*ð 	*ð 	*ð 	*øøøð 	*ð 	*ð 	*ð 	*å˜$ÑÔÐó   ¦AÁAÁ	Ac                 ó¤   — t          ¦   «         }	 |                      d¦  «        }|sn|                     |¦  «         Œ.|                     ¦   «         S ©NTrY  )r   ro  rM   Ú	hexdigest)ÚfpÚ
md5_digestr‚  s      r   r‰  r‰  
  sY   € Ý‘”€Jð!Ø—’˜	Ñ"Ô"ˆØð 	ØØ×Ò˜%Ñ Ô Ð ð	!ð
 ×ÒÑ!Ô!Ð!r   c                 ó¸   — t          | t          ¦  «        r7t          | d¦  «        5 }t          |¦  «        cddd¦  «         S # 1 swxY w Y   t          | ¦  «        S )z~
    Calculate and return the SHA-256 checksum for a given file.
    ``file`` may either be a filename or an open stream.
    rˆ  N)r   r   r
   Ú_sha256_hexdigestrŠ  s     r   rs  rs  
  s–   € õ
 �$�ÑÔð -Ý�$˜ÑÔð 	- Ý$ VÑ,Ô,ð	-ð 	-ð 	-ð 	-ñ 	-ô 	-ð 	-ð 	-ð 	-ð 	-ð 	-ð 	-øøøð 	-ð 	-ð 	-ð 	-å˜TÑ"Ô"Ð"r‹  c                 ó¤   — t          ¦   «         }	 |                      d¦  «        }|sn|                     |¦  «         Œ.|                     ¦   «         S r�  )r   ro  rM   rŽ  )r�  Úsha256_digestr‚  s      r   r’  r’  &
  sY   € Ý‘H”H€Mð$Ø—’˜	Ñ"Ô"ˆØð 	ØØ×Ò˜UÑ#Ô#Ð#ð	$ð
 ×"Ò"Ñ$Ô$Ð$r   Tc                 óv   — t          | ||¦  «        D ]&}t          |t          ¦  «        rt          |¦  «        ‚Œ'dS )z\
    Extract the contents of the zip file ``filename`` into the
    directory ``root``.
    N)ru  r   r§   r©   )rO   r'  r^  rª   s       r   rK   rK   3
  sN   € õ
 ˜x¨¨wÑ7Ô7ð %ð %ˆÝ�g�|Ñ,Ô,ð 	%Ý˜GÑ$Ô$Ð$ð	%ð%ð %r   c                 óF  — d| v rd| ›�S t           j                             |¦  «                             t           j        ¦  «        t           j        z   }t           j                             t           j                             t           j                             || ¦  «        ¦  «        ¦  «        }|                     |¦  «        sd| › �S t           j                             t           j                             |¦  «        ¦  «                             t           j        ¦  «        t           j        z   }t           j                             t           j                             t           j                             || ¦  «        ¦  «        ¦  «        }|                     |¦  «        sd| › �S dS )aU  
    Check a single ZIP member name for path-traversal and escape vectors.

    Returns ``None`` if the member is safe, or a human-readable error
    string if the member must be rejected.  Comparison prefixes are
    derived from *root_abs* internally via ``os.path.normcase`` so that
    callers cannot supply inconsistent values.

    Parameters
    ----------
    member : str
        The archive entry name (forward-slash separated, as stored in the ZIP).
    .. note::
        This function enforces Zip-Slip and symlink-escape containment only.
        Cross-package ownership (CVE-2026-12261) is enforced separately by
        the ``expected_root`` parameter of ``_unzip_iter``.

    root_abs : str
        Absolute path of the extraction root (used to build candidate paths
        and derive comparison prefixes via ``os.path.normcase``).
    ú z!Null byte in entry name blocked: zZip Slip blocked: zSymlink escape blocked: N)	r   r   r-  Úrstripr>   r+  rN   r  r   )ÚmemberÚroot_absÚ
abs_prefixÚ
target_absÚreal_prefixÚtarget_reals         r   Ú_validate_memberrŸ  =
  s<  € ð, �ÐÐØ=°6Ð=Ð=Ð=å”×!Ò! (Ñ+Ô+×2Ò2µ2´6Ñ:Ô:½R¼VÑC€JÝ”×!Ò!¥"¤'§/¢/µ"´'·,²,¸xÈÑ2PÔ2PÑ"QÔ"QÑRÔR€JØ× Ò  Ñ,Ô,ð -Ø, FÐ,Ð,Ð,å”'×"Ò"¥2¤7×#3Ò#3°HÑ#=Ô#=Ñ>Ô>×EÒEÅbÄfÑMÔMÕPRÔPVÑV€KÝ”'×"Ò"¥2¤7×#3Ò#3µB´G·L²LÀÈ6Ñ4RÔ4RÑ#SÔ#SÑTÔT€KØ×!Ò! +Ñ.Ô.ð 3Ø2¨&Ð2Ð2Ð2àˆ4r   c           	   #   ór  K  — |rct           j                             dt          j                             | ¦  «        d         z  ¦  «         t           j                             ¦   «          	 t          | ¦  «        }n:# t          $ r-}t          | |¦  «        V — |rt          ¦   «          Y d}~dS d}~ww xY w	 t          j                             |¦  «        }|                     ¦   «         }d}|D ]é}	|�c|	                     dd¦  «                             d¦  «                             d¦  «        d         }
|
|k    rt          | d|	›d	|›�¦  «        V — d
}Œgt          |	|¦  «        }|�t          | |¦  «        V — d
}ŒŽ	 t!          |                     |	¦  «        ¦  «         Œ²# t$          $ r+}t          | t'          |¦  «        ¦  «        V — d
}Y d}~Œâd}~ww xY w|r)	 |                     ¦   «          |rt          ¦   «          dS dS 	 t          j        |d
¬¦  «         nS# t          $ rF}t          | d|› �¦  «        V — Y d}~|                     ¦   «          |rt          ¦   «          dS dS d}~ww xY w|D �]K}	|�‰|	                     dd¦  «                             d¦  «                             d¦  «        d         }
|
|k    rAt          | d|	›d	|›�¦  «        V —  |                     ¦   «          |rt          ¦   «          dS dS t          |	|¦  «        }|�>t          | |› d�¦  «        V —  |                     ¦   «          |rt          ¦   «          dS dS 	 |                     |	|¦  «         Œö# t          $ rJ}t          | d|	› d|› �¦  «        V — Y d}~ |                     ¦   «          |rt          ¦   «          dS dS d}~ww xY wn,# t          $ r}t          | d|› �¦  «        V — Y d}~nd}~ww xY w|                     ¦   «          |rt          ¦   «          dS dS # |                     ¦   «          |rt          ¦   «          w w xY w)aë  
    Secure ZIP extraction using validate-then-extract.

    All members are validated before any extraction occurs.  If any member
    fails validation the entire archive is rejected and nothing is written
    to disk.

    Checks performed on every member name:
    - Null-byte rejection (platform path-truncation vector)
    - Zip-Slip (.., absolute paths, drive letters)
    - Symlink-escape (writes through pre-existing symlinks)

    All path comparisons use ``os.path.normcase`` so that the checks
    are case-insensitive on Windows (no-op on POSIX).

    Members are validated again immediately before each extraction as a
    best-effort check against filesystem changes between Phase 1 and the
    actual write, but this cannot eliminate TOCTOU races inherent in
    non-atomic extraction.

    Extraction aborts on the first error (including I/O errors) rather
    than skipping individual members.  Partial extraction of a potentially
    malicious archive is worse than no extraction.
    r$  r7   NFr4   r5   r   z(Cross-package overwrite blocked: member z) is outside the owning package directory TrS  zExtraction error: z (during extraction)zExtraction error for r  zValidation error: )rî  Ústdoutrp  r   r   r<   Úflushr	   r©   r§   rÛ   r+  Únamelistr;   ÚlstriprŸ  r   Úgetinfor!   r   re  ra  Úextract)rO   r'  r^  r_  Úzfr  rš  ÚmembersÚhas_violationsr™  rA  Úerrors               r   ru  ru  c
  sp  è è € ð4 ð ÝŒ
×Ò˜­"¬'¯-ª-¸Ñ*AÔ*AÀ!Ô*DÑDÑEÔEÐEÝŒ
×ÒÑÔÐðÝ�XÑÔˆˆøÝð ð ð Ý˜8 QÑ'Ô'Ð'Ð'Ð'ð ð 	Ý‰GŒGˆGØˆˆˆˆˆøøøøðøøøðIÝ”7—?’? 4Ñ(Ô(ˆØ—+’+‘-”-ˆð ˆØð 	&ð 	&ˆFð Ð(Ø—n’n T¨3Ñ/Ô/×6Ò6°sÑ;Ô;×AÒAÀ#ÑFÔFÀqÔI�Ø˜-Ò'Ð'Ý&Ø ðUÀ6ð Uð UØCPðUð Uñô ð ð ð ð
 &*�NØå$ V¨XÑ6Ô6ˆEØÐ Ý" 8¨UÑ3Ô3Ð3Ð3Ð3Ø!%�Øð&Ý)¨"¯*ª*°VÑ*<Ô*<Ñ=Ô=Ð=Ð=øÝð &ð &ð &Ý" 8­S°©V¬VÑ4Ô4Ð4Ð4Ð4Ø!%������øøøøð&øøøð ð 	Øð> 	�Š‰
Œ
ˆ
Øð 	Ý‰GŒGˆGˆGˆGð	ð 	ð;	ÝŒK˜¨4Ð0Ñ0Ô0Ð0Ð0øÝð 	ð 	ð 	Ý˜xÐ)A¸aÐ)AÐ)AÑBÔBÐBÐBÐBØˆFˆFˆFð0 	�Š‰
Œ
ˆ
Øð 	Ý‰GŒGˆGˆGˆGð	ð 	øøøøð7	øøøð ð 	ñ 	ˆFØÐ(Ø—n’n T¨3Ñ/Ô/×6Ò6°sÑ;Ô;×AÒAÀ#ÑFÔFÀqÔI�Ø˜-Ò'Ð'Ý&Ø ðUÀ6ð Uð UØCPðUð Uñô ð ð ð ð
 ð 	�Š‰
Œ
ˆ
Øð 	Ý‰GŒGˆGˆGˆGð	ð 	õ % V¨XÑ6Ô6ˆEØÐ Ý" 8°Ð-KÐ-KÐ-KÑLÔLÐLÐLÐLØð 	�Š‰
Œ
ˆ
Øð 	Ý‰GŒGˆGˆGˆGð	ð 	ðØ—
’
˜6 8Ñ,Ô,Ð,Ð,øÝð ð ð Ý" 8Ð-RÀVÐ-RÐ-RÈqÐ-RÐ-RÑSÔSÐSÐSÐSØ����ð 	�Š‰
Œ
ˆ
Øð 	Ý‰GŒGˆGˆGˆGð	ð 	øøøøðøøøð!	øõ& ð ?ð ?ð ?Ý˜8Ð%=¸!Ð%=Ð%=Ñ>Ô>Ð>Ð>Ð>Ð>Ð>Ð>Ð>Ð>øøøøð?øøøð 	�Š‰
Œ
ˆ
Øð 	Ý‰GŒGˆGˆGˆGð	ð 	øð 	�Š‰
Œ
ˆ
Øð 	Ý‰GŒGˆGˆGð	øøøsÎ   Á)A9 Á9
B0Â"B+Â+B0Â4CN; Å:"FÆN; Æ
GÆ'!GÇN; ÇGÇN; ÈH ÈN; È
I(È"I#È7N; É#I(É(A+N; Ë;(N; ÍM#Í"N; Í#
N7Í-N2ÎN; Î2N7Î7N; Î:P Î;
O$ÏOÏP ÏO$Ï$P Ð'P6c                 ó<  — t          | ¦  «         g }t          t          j                             | d¦  «        ¦  «        D �]`\  }}}t          j        |j        ¦  «        }|› d|› dt          j                             |j        ¦  «        d         › �}t          d„ | 	                    ¦   «         D ¦   «         ¦  «        }| 
                    dd|z  ¦  «         | 
                    dd|j        z  ¦  «         | 
                    ddt          |j        ¦  «        z  ¦  «         | 
                    d	dt          |j        ¦  «        z  ¦  «         | 
                    d
|¦  «         |                     d¦  «        s| 
                    d|¦  «         |                     |¦  «         �Œbt!          t#          t          j                             | d¦  «        ¦  «        ¦  «        }	t          ¦   «         }
||	z   D ]f}|                     d¦  «        |
v r%t%          d|                     d¦  «        z  ¦  «        ‚|
                     |                     d¦  «        ¦  «         Œgt)          j        d¦  «        }|                     t)          j        d¦  «        ¦  «         |d                              t/          |d„ ¬¦  «        ¦  «         |                     t)          j        d¦  «        ¦  «         |d                              t/          |	d„ ¬¦  «        ¦  «         t1          |¦  «         |S )a}  
    Create a new data.xml index file, by combining the xml description
    files for various packages and collections.  ``root`` should be the
    path to a directory containing the package xml and zip files; and
    the collection xml files.  The ``root`` directory is expected to
    have the following subdirectories::

      root/
        packages/ .................. subdirectory for packages
          corpora/ ................. zip & xml files for corpora
          grammars/ ................ zip & xml files for grammars
          taggers/ ................. zip & xml files for taggers
          tokenizers/ .............. zip & xml files for tokenizers
          etc.
        collections/ ............... xml files for collections

    For each package, there should be two files: ``package.zip``
    (where *package* is the package name)
    which contains the package itself as a compressed zip file; and
    ``package.xml``, which is an xml description of the package.  The
    zipfile ``package.zip`` should expand to a single subdirectory
    named ``package/``.  The base filename ``package`` must match
    the identifier given in the package's xml file.

    For each collection, there should be a single file ``collection.zip``
    describing the collection, where *collection* is the name of the collection.

    All identifiers (for both packages and collections) must be unique.
    rn   r5   r7   c              3   ó$   K  — | ]}|j         V — Œd S r[   )Ú	file_size)r   Úzf_infos     r   r  zbuild_index.<locals>.<genexpr>  s%   è è € ÐKÐK°'˜GÔ-ÐKÐKÐKÐKÐKÐKr   rB   z%srA   rC   r\  r=   r?   rÇ   r8   zDuplicate UID: %srÙ  r   c                 ó,   — |                       d¦  «        S ©Nr8   rr   rŠ   s    r   r€  zbuild_index.<locals>.<lambda>!  s   € ¸7¿;º;ÀtÑ;LÔ;L€ r   rÈ   c                 ó,   — |                       d¦  «        S r°  rr   r   s    r   r€  zbuild_index.<locals>.<lambda>#  s   € ÀÇÂÐPTÑAUÔAU€ r   )r.   Ú_find_packagesr   r   rN   rh  rO   r<   r  ÚinfolistrÖ  r²  rt  rs  rs   r)   rø   Ú_find_collectionsr!   Úaddr   ÚElementrÇ  rÞ   Ú_indent_xml)r'  Úbase_urlrn   Úpkg_xmlr§  r=   Úzipstatr?   rB   rÇ   Úuidsrv   Útop_elts                r   Úbuild_indexr½  Ý
  sÈ  € õB ˜ÑÔÐð €HÝ-­b¬g¯lªl¸4ÀÑ.LÔ.LÑMÔMð !ñ !Ñˆ��VÝ”'˜"œ+Ñ&Ô&ˆØÐDÐD˜FÐDÐD¥R¤W§]¢]°2´;Ñ%?Ô%?ÀÔ%BÐDÐDˆÝÐKÐK¸R¿[º[¹]¼]ÐKÑKÔKÑKÔKˆð 	�Š�O T¨MÑ%9Ñ:Ô:Ð:Ø�Š�F˜D 7¤?Ñ2Ñ3Ô3Ð3Ø�Š�J ¥}°R´[Ñ'AÔ'AÑ AÑBÔBÐBØ�ŠÐ% tÕ.>¸r¼{Ñ.KÔ.KÑ'KÑLÔLÐLØ�Š�H˜fÑ%Ô%Ð%à�{Š{˜5Ñ!Ô!ð 	$Ø�KŠK˜˜sÑ#Ô#Ð#ð 	�Š˜Ñ Ô Ð Ñ õ Õ(­¬¯ª°d¸MÑ)JÔ)JÑKÔKÑLÔL€Kõ ‰5Œ5€DØ˜;Ñ&ð !ð !ˆØ�8Š8�D‰>Œ>˜TÐ!Ð!ÝÐ0°4·8²8¸D±>´>ÑAÑBÔBÐBØ�Š�—’˜$‘”Ñ Ô Ð Ð õ Ô! +Ñ.Ô.€GØ‡N‚N•;Ô& zÑ2Ô2Ñ3Ô3Ð3ØˆA„J×Ò•f˜XÐ+LÐ+LÐMÑMÔMÑNÔNÐNØ‡N‚N•;Ô& }Ñ5Ô5Ñ6Ô6Ð6ØˆA„J×Ò•f˜[Ð.UÐ.UÐVÑVÔVÑWÔWÐWå�ÑÔÐØ€Nr   r1   c                 ó‚  — t          | ¦  «        dk    r«| j        pd                     ¦   «         dz   |z   dz   | _        | D ]}t          ||dz   ¦  «         Œ| dd…         D ]+}|j        pd                     ¦   «         dz   |z   dz   |_        Œ,| d         j        pd                     ¦   «         dz   |z   | d         _        dS dS )zþ
    Helper for ``build_index()``: Given an XML ``ElementTree``, modify it
    (and its descendents) ``text`` and ``tail`` attributes to generate
    an indented tree, where each nested element is indented by 2
    spaces with respect to its parent.
    r   r1   rÕ   r–  Nr6   )rÜ   ro  r›  r·  Útail)rW   rõ   rt   s      r   r·  r·  )  sÜ   € õ ˆ3�x„x�!‚|€|Ø”H�N ×)Ò)Ñ+Ô+¨dÑ2°VÑ;¸dÑBˆŒØð 	.ð 	.ˆEÝ˜˜v¨™}Ñ-Ô-Ð-Ð-Ø˜˜"˜”Xð 	Kð 	KˆEØœ*Ð*¨×1Ò1Ñ3Ô3°dÑ:¸VÑCÀdÑJˆEŒJˆJØ˜BœœÐ*¨×1Ò1Ñ3Ô3°dÑ:¸VÑCˆˆBŒŒˆˆð €|r   c                 óÖ  ‡— t           j                             t           j                             |¦  «        d         ¦  «        d         Š|                      d¦  «        ‰k    r6t          d                     |                      d¦  «        ‰¦  «        ¦  «        ‚t          ˆfd„|                     ¦   «         D ¦   «         ¦  «        r#t          d                     ‰‰¦  «        ¦  «        ‚dS )zr
    Helper for ``build_index()``: Perform some checks to make sure that
    the given package is consistent.
    r7   r   r8   z&package identifier mismatch ({} vs {})c              3   óV   •K  — | ]#}|‰k    o|                      ‰d z   ¦  «         V — Œ$dS ©r5   N©r  ©r   r9   Úuids     €r   r  z!_check_package.<locals>.<genexpr>F  s?   øè è € Ð
VÐ
VÀˆD�CŠKÐ: §¢°°c±	Ñ :Ô :Ð:Ð
VÐ
VÐ
VÐ
VÐ
VÐ
Vr   z;Zipfile {}.zip does not expand to a single subdirectory {}/N)	r   r   rI   r<   rs   r!   rç   r  r£  )r¹  Úzipfilenamer§  rÅ  s      @r   Ú_check_packagerÇ  9  sÝ   ø€ õ Œ'×
Ò
�2œ7Ÿ=š=¨Ñ5Ô5°aÔ8Ñ
9Ô
9¸!Ô
<€CØ‡{‚{�4ÑÔ˜CÒÐÝØ4×;Ò;¸G¿KºKÈÑ<MÔ<MÈsÑSÔSñ
ô 
ð 	
õ
 Ð
VÐ
VÐ
VÐ
VÈÏÊÉÌÐ
VÑ
VÔ
VÑVÔVð 
ÝØI×PÒPØ�Sñô ñ
ô 
ð 	
ð
ð 
r   c                 ót  — t          j        ddd| gt           j        t           j        ¬¦  «        }|                     ¦   «         \  }}|j        dk    s|s|sJt          dt          j                             | ¦  «        d         ›dt          j
        |¦  «        ›�¦  «        ‚|                     ¦   «         d	         S )
z�
    Helper for ``build_index()``: Calculate the subversion revision
    number for a given file (by using ``subprocess`` to run ``svn``).
    Úsvnrà   z-v)r¡  rï  r   z#Error determining svn_revision for r7   r  rZ  )Ú
subprocessÚPopenÚPIPEÚcommunicateÚ
returncoder!   r   r   r<   rå   ræ   )rO   r   r¡  rï  s       r   Ú_svn_revisionrÏ  O  sµ   € õ
 	ÔØ	�˜$ Ð)ÝŒÝŒð	ñ 	ô 	€Að
 —]’]‘_”_�N€FˆFØ„|�qÒÐ˜FÐ¨&ÐÝˆjåŒw�}Š}˜XÑ&Ô& qÔ)Ð)Ð)­8¬=¸Ñ+@Ô+@Ð+@ðBñ
ô 
ð 	
ð �<Š<‰>Œ>˜!ÔÐr   c              #   óú   K  — t          j        | ¦  «        D ]c\  }}}|D ]Z}|                     d¦  «        rCt           j                             ||¦  «        }t          |¦  «                             ¦   «         V — Œ[ŒddS )zŽ
    Helper for ``build_index()``: Yield a list of ElementTree.Element
    objects, each holding the xml for a single package collection.
    ú.xmlN)r   rA  r`  r   rN   rU   rÆ  )r'  r$   Ú_subdirsrD  rO   Úxmlfiles         r   r´  r´  b  s�   è è € õ
 %'¤G¨D¡M¤Mð 4ð 4Ñ ˆ�˜5Øð 	4ð 	4ˆHØ× Ò  Ñ(Ô(ð 4Ýœ'Ÿ,š, w°Ñ9Ô9�Ý  Ñ)Ô)×1Ò1Ñ3Ô3Ð3Ð3Ð3øð	4ð4ð 4r   c           
   #   ó0  ‡K  — ddl m} g }t          j        | ¦  «        D �]t\  }}}d                      || |¦  «        ¦  «        }|D �]#}|                     d¦  «        �rlt          j                             ||¦  «        }|dd…         dz   }		 t          |	¦  «        }
n(# t          $ r}t          d|	›d	|› �¦  «        |‚d}~ww xY w	 t          |¦  «                             ¦   «         }n(# t          $ r}t          d|›d	|› �¦  «        |‚d}~ww xY wt          j                             |dd…         ¦  «        d
         Š|                     d¦  «        ‰k    r)t          d|                     d¦  «        ›d‰›d�¦  «        ‚t          ˆfd„|
                     ¦   «         D ¦   «         ¦  «        rt          d‰›d‰›d�¦  «        ‚||
|fV — �Œ…|                     d¦  «        r‰t          j                             |¦  «        d         }t          j                             ||dz   ¦  «        }t          j                             |¦  «        s"t%          j        |› d|dz   › d|› d�d¬¦  «         �Œ%	 |                     d¦  «         �Œe# t          $ r Y �Œrw xY wdS )az  
    Helper for ``build_index()``: Yield a list of tuples
    ``(pkg_xml, zf, subdir)``, where:
      - ``pkg_xml`` is an ``ElementTree.Element`` holding the xml for a
        package
      - ``zf`` is a ``ZipFile`` for the package's contents.
      - ``subdir`` is the subdirectory (relative to ``root``) where
        the package was found (e.g. 'corpora' or 'grammars').
    r   )Ú
_path_fromr5   rÑ  Nr7  r6  zError reading file z!
r7   r8   zpackage identifier mismatch (z vs rØ   c              3   óV   •K  — | ]#}|‰k    o|                      ‰d z   ¦  «         V — Œ$dS rÂ  rÃ  rÄ  s     €r   r  z!_find_packages.<locals>.<genexpr>•  sS   øè è € ð ð àð ˜S’[ÐC¨¯ª¸¸s¹Ñ)CÔ)CÐ%Cðð ð ð ð ð r   zZipfile z..zip does not expand to a single subdirectory z exists, but z' cannot be found! This could mean that z can not be downloaded.rZ  r   z.svn)Únltk.corpus.reader.utilrÕ  r   rA  rN   r`  r   r	   r©   r!   rU   rÆ  r<   rs   r  r£  rI   r#   r&   r'   r:  )r'  rÕ  rn   r$   ÚsubdirsrD  ÚrelpathrO   ÚxmlfilenamerÆ  r§  r  r¹  ÚresourcenamerÅ  s                 @r   r²  r²  n  sS  øè è € ð 3Ð2Ð2Ð2Ð2Ð2ð €HÝ#%¤7¨4¡=¤=ð 3ñ 3Ñˆ�˜%Ø—(’(˜:˜: d¨GÑ4Ô4Ñ5Ô5ˆØð +	ñ +	ˆHØ× Ò  Ñ(Ô(ñ *Ý œgŸlšl¨7°HÑ=Ô=�Ø)¨#¨2¨#Ô.°Ñ7�ðYÝ  Ñ-Ô-�B�BøÝ ð Yð Yð YÝ$Ð%P¸;Ð%PÐ%PÈQÐ%PÐ%PÑQÔQÐWXÐXøøøøðYøøøðYÝ(¨Ñ5Ô5×=Ò=Ñ?Ô?�G�GøÝ ð Yð Yð YÝ$Ð%P¸;Ð%PÐ%PÈQÐ%PÐ%PÑQÔQÐWXÐXøøøøðYøøøõ ”g—m’m K°°°Ô$4Ñ5Ô5°aÔ8�Ø—;’;˜tÑ$Ô$¨Ò+Ð+Ý$˜*à$+§K¢K°Ñ$5Ô$5Ð$5Ð$5°s°s°sð<ñô ð õ ð ð ð ð à "§¢¡¤ðñ ô ñ ô ð õ %˜*à58°S°S¸#¸#¸#ð?ñô ð ð
 ˜r 7Ð*Ð*Ð*Ð*Ñ*à×"Ò" 6Ñ*Ô*ð 	å!œw×/Ò/°Ñ9Ô9¸!Ô<�Ý œgŸlšl¨7°LÀ6Ñ4IÑJÔJ�Ý”w—~’~ kÑ2Ô2ð Ý”MØ#ð Vð V°,ÀÑ2Gð Vð VØ0<ðVð Vð Và#$ðñ ô ð ùð	Ø�NŠN˜6Ñ"Ô"Ð"Ñ"øÝð 	ð 	ð 	Ø‰Dð	øøøðe3ð 3sB   ÂBÂ
CÂ)B?Â?CÃ!C*Ã*
DÃ4D
Ä
DÉ.JÊ
JÊJc                  óR   — t          t          ¦  «                             ¦   «          d S r[   )rç  Ú_downloaderrè  r   r   r   Údownload_shellrÞ  ½  s"   € Ý•KÑ Ô ×$Ò$Ñ&Ô&Ð&Ð&Ð&r   c                  óR   — t          t          ¦  «                             ¦   «          d S r[   )rë  rÝ  rì  r   r   r   Údownload_guirà  Á  s"   € Ý•+ÑÔ×'Ò'Ñ)Ô)Ð)Ð)Ð)r   c                  ó8   — t                                ¦   «          d S r[   )rÝ  rM   r   r   r   rM   rM   Å  s   € Ý×ÒÑÔÐÐÐr   Ú__main__)ÚOptionParserz-dz--dirÚdirz!download package to directory DIRÚDIR)ÚdestrÙ  Úmetavarz-qz--quietrŠ  Ú
store_trueFzwork quietly)ræ  ÚactionÚdefaultrÙ  z-fz--forcer  z"download even if already installedz-ez--exit-on-errorrœ  zexit if an error occursz-uz--urlrÃ   ÚNLTK_DOWNLOAD_URLzdownload server index url)ræ  rê  rÙ  )rÃ   )r  r²   rŠ  r  rœ  )r²   rŠ  r  rœ  r„  )TNr—  )Wrh   r™  rm  r   rÊ  rî  rå   r6  rg  r&   ÚzipfileÚhashlibr   r   Úurllib.errorr   r   Ú	xml.etreer   r"   Ú	nltk.datar   Únltk.pathsecr	   r
   rk  r   r   Únltk.xmlsecr   rU   r.   r0   rk   r{   r}   r…   rˆ   r�   r”   r—   r›   rž   r¡   r¤   r§   r¬   r°   rµ   rç  rë  rt  r‰  rs  r’  rK   rŸ  ru  r½  r·  rÇ  rÏ  r´  r²  rÝ  r‰  rÞ  rà  rM   re   Úoptparserã  ÚparserÚ
add_optionrÚ  rs   Ú
parse_argsrù  r  rÃ   Ú
downloaderÚpkg_idrä  rŠ  r  rœ  Úrvr   r   r   ú<module>rú     s¬  ðð<ð <ð@Yðt Ð Ð Ð Ø Ð Ð Ð Ø 	€	€	€	Ø Ð Ð Ð Ø 
€
€
€
Ø €€€Ø Ð Ð Ð Ø €€€Ø €€€Ø €€€Ø Ð Ð Ð Ð Ð Ð Ð Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø !Ð !Ð !Ð !Ð !Ð !à €€€Ø /Ð /Ð /Ð /Ð /Ð /Ø  Ð  Ð  Ð  Ð  Ð  Ø -Ð -Ð -Ð -Ð -Ð -Ø /Ð /Ð /Ð /Ð /Ð /Ð /Ð /Ø +Ð +Ð +Ð +Ð +Ð +ð
&(ð &(ð &(ð\f(ð f(ð f(ð f(ð f(ñ f(ô f(ð f(ðR&+ð &+ð &+ð &+ð &+ñ &+ô &+ð &+ð\!ð !ð !ð !ð !ñ !ô !ð !ð
%ð %ð %ð %ð %Ð.ñ %ô %ð %ð%ð %ð %ð %ð %Ð/ñ %ô %ð %ðð ð ð ð Ð+ñ ô ð ðð ð ð ð Ð,ñ ô ð ðð ð ð ð Ð,ñ ô ð ðð ð ð ð Ð-ñ ô ð ðð ð ð ð Ð)ñ ô ð ðð ð ð ð Ð*ñ ô ð ðð ð ð ð Ð'ñ ô ð ðð ð ð ð Ð$ñ ô ð ð#ð #ð #ð #ð #Ð$ñ #ô #ð #ð!ð !ð !ð !ð !Ð'ñ !ô !ð !ð)ð )ð )ð )ð )Ð0ñ )ô )ð )ð(ð (ð (ð (ð (ñ (ô (ð (ðDbð bð bð bð bñ bô bð bðJn:ð n:ð n:ð n:ð n:ñ n:ô n:ð n:ðn ð  ð  ð"ð "ð "ð#ð #ð #ð%ð %ð %ð%ð %ð %ð %ð#ð #ð #ðLqð qð qð qðtIð Ið IðXDð Dð Dð Dð 
ð 
ð 
ð,ð ð ð&	4ð 	4ð 	4ðAð Að AðV ˆj‰lŒl€ØÔ€ð'ð 'ð 'ð*ð *ð *ðð ð ð ˆzÒÑØ%Ð%Ð%Ð%Ð%Ð%àˆ\‰^Œ^€FØ
×ÒØØØØ0Øð ñ ô ð ð ×ÒØØØØØØð ñ ô ð ð ×ÒØØØØØØ1ð ñ ô ð ð ×ÒØØØØØØ&ð ñ ô ð ð ×ÒØØØØ”
—’Ð2Ñ3Ô3Ø(ð ñ ô ð ð ×%Ò%Ñ'Ô'�M€GˆTà�¨WÔ-EÐFÑFÔF€Jàð 
Øð 		ð 		ˆFØ×$Ò$Ø!Ø$œ[Ø”mØ”mØ%Ô3ð %ñ ô ˆBð ð ˜'Ô/ð Ø��øð		ð 		ð 	×ÒØ œØ”-Ø”-Ø!Ô/ð	 	ñ 	
ô 	
ð 	
ð 	
ð 	
ðw Ðr   