ok

Mini Shell

Direktori : /opt/alt/python33/lib/python3.3/site-packages/pip/_vendor/html5lib/
Upload File :
Current File : //opt/alt/python33/lib/python3.3/site-packages/pip/_vendor/html5lib/inputstream.pyo

�
�2{Yc!@`s�ddlmZmZmZddlmZddlZddlZddlm	Z	m
Z
mZmZddlm
Z
mZddlmZddlmZydd	lmZWnek
r�eZnXydd
lmZWn'ek
rdefd��YZnXege
D]Zejd
�^q�ZegeD]Zejd
�^q:�ZegeD]Zejd
�^qb�Zeeddg�BZejd�Ze dddddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0g �Z!ejd1�Z"iZ#d2efd3��YZ$de&e&d4�Z'd5efd6��YZ(d7e(fd8��YZ)d9e*fd:��YZ+d;efd<��YZ,d=efd>��YZ-d?�Z.dS(@i(tabsolute_importtdivisiontunicode_literals(t	text_typeNi(tEOFtspaceCharacterstasciiLetterstasciiUppercase(t	encodingstReparseException(tutils(tStringIO(tBytesIO(tBufferedIOBaseR
cB`seZRS((t__name__t
__module__(((sQ/opt/alt/python33/lib/python3.3/site-packages/pip/_vendor/html5lib/inputstream.pyR
suasciit>t<u�[---Ÿ�-�﷐-﷯￾￿🿾🿿𯿾𯿿𿿾𿿿񏿾񏿿񟿾񟿿񯿾񯿿񿿾񿿿򏿾򏿿򟿾򟿿򯿾򯿿򿿾򿿿󏿾󏿿󟿾󟿿󯿾󯿿󿿾󿿿􏿾􏿿]i��i��i��i��i��i��i��i��i��i��i��i��i��i��i��i��i��	i��	i��
i��
i��i��i��i��i��
i��
i��i��i��i��i��i��u[	-
 -/:-@[-`{-~]tBufferedStreamcB`sMeZdZd�Zd�Zd�Zd�Zd�Zd�Zd�Z	RS(u�Buffering for streams that do not have buffering of their own

    The buffer is implemented as a list of chunks on the assumption that
    joining many strings will be slow since it is O(n**2)
    cC`s%||_g|_ddg|_dS(Ni����i(tstreamtbuffertposition(tselfR((sQ/opt/alt/python33/lib/python3.3/site-packages/pip/_vendor/html5lib/inputstream.pyt__init__5s		cC`sJd}x,|j|jd D]}|t|�7}qW||jd7}|S(Nii(RRtlen(Rtpostchunk((sQ/opt/alt/python33/lib/python3.3/site-packages/pip/_vendor/html5lib/inputstream.pyttell:s
cC`s`|}d}x>t|j|�|krL|t|j|�8}|d7}qW||g|_dS(Nii(RRR(RRtoffsetti((sQ/opt/alt/python33/lib/python3.3/site-packages/pip/_vendor/html5lib/inputstream.pytseekAscC`sp|js|j|�S|jdt|j�kr_|jdt|jd�kr_|j|�S|j|�SdS(Niii����(Rt_readStreamRRt_readFromBuffer(Rtbytes((sQ/opt/alt/python33/lib/python3.3/site-packages/pip/_vendor/html5lib/inputstream.pytreadJs	
 
cC`s&tg|jD]}t|�^q
�S(N(tsumRR(Rtitem((sQ/opt/alt/python33/lib/python3.3/site-packages/pip/_vendor/html5lib/inputstream.pyt_bufferedBytesSscC`sL|jj|�}|jj|�|jdcd7<t|�|jd<|S(Nii(RR"RtappendRR(RR!tdata((sQ/opt/alt/python33/lib/python3.3/site-packages/pip/_vendor/html5lib/inputstream.pyRVs
cC`s|}g}|jd}|jd}x�|t|j�kr�|dkr�|j|}|t|�|kr�|}|||g|_n/t|�|}|t|�g|_|d7}|j||||!�||8}d}q)W|r|j|j|��ndj|�S(Niit(RRRR&Rtjoin(RR!tremainingBytestrvtbufferIndextbufferOffsettbufferedDatatbytesToRead((sQ/opt/alt/python33/lib/python3.3/site-packages/pip/_vendor/html5lib/inputstream.pyR ]s$

$



(
RRt__doc__RRRR"R%RR (((sQ/opt/alt/python33/lib/python3.3/site-packages/pip/_vendor/html5lib/inputstream.pyR.s								cC`s{t|d�r*t|jd�t�}nt|t�}|rd|dk	rZtd��nt|�St||||�SdS(Nureadiu7Cannot explicitly set an encoding with a unicode string(thasattrt
isinstanceR"RtNonet	TypeErrortHTMLUnicodeInputStreamtHTMLBinaryInputStream(tsourcetencodingt	parseMetatchardett	isUnicode((sQ/opt/alt/python33/lib/python3.3/site-packages/pip/_vendor/html5lib/inputstream.pytHTMLInputStreamxs
R5cB`s}eZdZdZd�Zd�Zd�Zd�Zd�Zd�Z	d
d�Zd	�Zd
�Z
ed�Zd�ZRS(u�Provides a unicode stream of characters to the HTMLTokenizer.

    This class takes care of character encoding and removing or replacing
    incorrect byte-sequences and also provides column and line tracking.

    i(cC`s�td�dkr3|j|_tjd�|_n|j|_tjd�|_dg|_d	|_|j	|�|_
|j�dS(
uInitialises the HTMLInputStream.

        HTMLInputStream(source, [encoding]) -> Normalized stream from source
        for use by html5lib.

        source can be either a file-object, local filename or a string.

        The optional encoding parameter must be a string that indicates
        the encoding.  If specified, that encoding will be used,
        regardless of any BOM or later declaration (such as in a meta
        element)

        parseMeta - Look for a <meta> element containing encoding information

        u􏿿iu	[�-�]u0([�-�](?![�-�])|(?<![�-�])[�-�])iuutf-8ucertainN(uutf-8ucertain(RtcharacterErrorsUCS4treportCharacterErrorstretcompiletreplaceCharactersRegexptcharacterErrorsUCS2tnewLinestcharEncodingt
openStreamt
dataStreamtreset(RR7((sQ/opt/alt/python33/lib/python3.3/site-packages/pip/_vendor/html5lib/inputstream.pyR�s	cC`sCd|_d|_d|_g|_d|_d|_d|_dS(Nui(Rt	chunkSizetchunkOffsetterrorstprevNumLinestprevNumColsR3t_bufferedCharacter(R((sQ/opt/alt/python33/lib/python3.3/site-packages/pip/_vendor/html5lib/inputstream.pyRG�s						cC`s(t|d�r|}nt|�}|S(uvProduces a file object from source.

        source can be either a file object, local filename or a string.

        uread(R1R(RR7R((sQ/opt/alt/python33/lib/python3.3/site-packages/pip/_vendor/html5lib/inputstream.pyRE�s	cC`st|j}|jdd|�}|j|}|jdd|�}|dkr\|j|}n||d}||fS(Nu
ii����i(RtcountRKtrfindRL(RRRtnLinestpositionLinetlastLinePostpositionColumn((sQ/opt/alt/python33/lib/python3.3/site-packages/pip/_vendor/html5lib/inputstream.pyt	_position�s	
cC`s&|j|j�\}}|d|fS(u:Returns (line, col) of the current position in the stream.i(RTRI(Rtlinetcol((sQ/opt/alt/python33/lib/python3.3/site-packages/pip/_vendor/html5lib/inputstream.pyR�scC`sL|j|jkr%|j�s%tSn|j}|j|}|d|_|S(uo Read one character from the stream or queue if available. Return
            EOF when EOF is reached.
        i(RIRHt	readChunkRR(RRItchar((sQ/opt/alt/python33/lib/python3.3/site-packages/pip/_vendor/html5lib/inputstream.pyRX�s	

cC`sX|dkr|j}n|j|j�\|_|_d|_d|_d|_|jj	|�}|j
r�|j
|}d|_
n
|s�tSt|�dkr�t
|d�}|dks�d|ko�dknr�|d|_
|d }q�n|j|�|jjd|�}|jd	d
�}|jdd
�}||_t|�|_tS(Nuiii����i
i�i��u�u
u
u
(R3t_defaultChunkSizeRTRHRKRLRRIRFR"RMtFalseRtordR>RAtsubtreplacetTrue(RRHR'tlastv((sQ/opt/alt/python33/lib/python3.3/site-packages/pip/_vendor/html5lib/inputstream.pyRW�s0				
(

	cC`s:x3tttj|���D]}|jjd�qWdS(Nuinvalid-codepoint(trangeRtinvalid_unicode_retfindallRJR&(RR'R((sQ/opt/alt/python33/lib/python3.3/site-packages/pip/_vendor/html5lib/inputstream.pyR=s"cC`st}x�tj|�D]�}|r(qnt|j��}|j�}tj|||d!�r�tj|||d!�}|t	kr�|j
jd�nt}q|dkr�|dkr�|t
|�dkr�|j
jd�qt}|j
jd�qWdS(Niuinvalid-codepointi�i��i(RZRatfinditerR[tgrouptstartR
tisSurrogatePairtsurrogatePairToCodepointtnon_bmp_invalid_codepointsRJR&R^R(RR'tskiptmatcht	codepointRtchar_val((sQ/opt/alt/python33/lib/python3.3/site-packages/pip/_vendor/html5lib/inputstream.pyRBs 	c
C`sTyt||f}Wnqtk
r�djg|D]}dt|�^q1�}|scd|}ntjd|�}t||f<nXg}x�tr@|j|j|j	�}|dkr�|j	|jkrPqnB|j�}||jkr|j
|j|j	|!�||_	Pn|j
|j|j	�|j�s�Pq�q�Wdj|�}	|	S(u� Returns a string of characters from the stream up to but not
        including any character in 'characters' or EOF. 'characters' must be
        a container that supports the 'in' method and iteration over its
        characters.
        uu\x%02xu^%su[%s]+N(tcharsUntilRegExtKeyErrorR)R[R?R@R^RjRRIR3RHtendR&RW(
Rt
characterstoppositetcharstctregexR+tmRotr((sQ/opt/alt/python33/lib/python3.3/site-packages/pip/_vendor/html5lib/inputstream.pyt
charsUntil0s.
,
%		cC`sS|dk	rO|jdkr=||j|_|jd7_qO|jd8_ndS(Nii(R3RIRRH(RRX((sQ/opt/alt/python33/lib/python3.3/site-packages/pip/_vendor/html5lib/inputstream.pytunget_sN(RRR0RYRRGRERTRRXR3RWR=RBRZRwRx(((sQ/opt/alt/python33/lib/python3.3/site-packages/pip/_vendor/html5lib/inputstream.pyR5�s	!					(		/R6cB`s\eZdZdeed�Zd�Zd�Zeed�Zd�Z	d�Z
d�ZRS(	u�Provides a unicode stream of characters to the HTMLTokenizer.

    This class takes care of character encoding and removing or replacing
    incorrect byte-sequences and also provides column and line tracking.

    cC`s�|j|�|_tj||j�t|�df|_d|_d|_d|_|jddkr�|j
||�|_n|j�dS(uInitialises the HTMLInputStream.

        HTMLInputStream(source, [encoding]) -> Normalized stream from source
        for use by html5lib.

        source can be either a file-object, local filename or a string.

        The optional encoding parameter must be a string that indicates
        the encoding.  If specified, that encoding will be used,
        regardless of any BOM or later declaration (such as in a meta
        element)

        parseMeta - Look for a <meta> element containing encoding information

        ucertainiiduwindows-1252iN(REt	rawStreamR5Rt	codecNameRDtnumBytesMetatnumBytesChardettdefaultEncodingR3tdetectEncodingRG(RR7R8R9R:((sQ/opt/alt/python33/lib/python3.3/site-packages/pip/_vendor/html5lib/inputstream.pyRxs			cC`s6tj|jd�|jd�|_tj|�dS(Niureplace(tcodecst	getreaderRDRyRFR5RG(R((sQ/opt/alt/python33/lib/python3.3/site-packages/pip/_vendor/html5lib/inputstream.pyRG�scC`sUt|d�r|}nt|�}y|j|j��Wnt|�}nX|S(uvProduces a file object from source.

        source can be either a file object, local filename or a string.

        uread(R1RRRR(RR7R((sQ/opt/alt/python33/lib/python3.3/site-packages/pip/_vendor/html5lib/inputstream.pyRE�s	c
C`s}|j�}d}|dkr9|r9|j�}d}n|dkr#|r#d}y�yddlm}Wn!tk
r�ddlm}nXg}|�}xF|js�|jj	|j
�}|s�Pn|j|�|j|�q�W|j
�|jd}|jjd�Wq#tk
rq#Xn|dkrAd}|j}nidd6}	|j�|	krs|	|j�}n||fS(Nucertainu	tentativei(tUniversalDetectoruencodinguwindows-1252u
iso-8859-1(t	detectBOMR3tdetectEncodingMetatcharade.universaldetectorR�tImportErrortchardet.universaldetectortdoneRyR"R|R&tfeedtclosetresultRR}tlower(
RR9R:R8t
confidenceR�tbufferstdetectorRtencodingSub((sQ/opt/alt/python33/lib/python3.3/site-packages/pip/_vendor/html5lib/inputstream.pyR~�s@	
	




cC`s�t|�}|dkr!d}n|dkr1dS||jdkr]|jddf|_nF|jjd�|j�|df|_td|jd|f��dS(	Nuutf-16u	utf-16-beu	utf-16-leuutf-8iucertainuEncoding changed from %s to %s(uutf-16u	utf-16-beu	utf-16-le(RzR3RDRyRRGR	(RtnewEncoding((sQ/opt/alt/python33/lib/python3.3/site-packages/pip/_vendor/html5lib/inputstream.pytchangeEncoding�s	
cC`s�idtj6dtj6dtj6dtj6dtj6}|jjd�}|j|d �}d}|s�|j|�}d}|s�|j|d �}d}q�n|jj	|r�|p�d	�|S(
u�Attempts to detect at BOM at the start of the stream. If
        an encoding can be determined from the BOM return the name of the
        encoding otherwise return Noneuutf-8u	utf-16-leu	utf-16-beu	utf-32-leu	utf-32-beiiii(
RtBOM_UTF8tBOM_UTF16_LEtBOM_UTF16_BEtBOM_UTF32_LEtBOM_UTF32_BERyR"tgetR(RtbomDicttstringR8R((sQ/opt/alt/python33/lib/python3.3/site-packages/pip/_vendor/html5lib/inputstream.pyR��s
cC`sV|jj|j�}t|�}|jjd�|j�}|dkrRd}n|S(u9Report the encoding declared by the meta element
        iuutf-16u	utf-16-beu	utf-16-leuutf-8(uutf-16u	utf-16-beu	utf-16-le(RyR"R{tEncodingParserRtgetEncoding(RRtparserR8((sQ/opt/alt/python33/lib/python3.3/site-packages/pip/_vendor/html5lib/inputstream.pyR�s	N(RRR0R3R^RRGRER~R�R�R�(((sQ/opt/alt/python33/lib/python3.3/site-packages/pip/_vendor/html5lib/inputstream.pyR6ps(		-		t
EncodingBytescB`s�eZdZd�Zd�Zd�Zd�Zd�Zd�Zd�Z	d�Z
ee
e	�Zd	�Z
ee
�Zed
�Zd�Zd�Zd
�ZRS(u�String-like object with an associated position and various extra methods
    If the position is ever greater than the string length then an exception is
    raisedcC`stj||j��S(N(R!t__new__R�(Rtvalue((sQ/opt/alt/python33/lib/python3.3/site-packages/pip/_vendor/html5lib/inputstream.pyR�&scC`s
d|_dS(Ni����(RT(RR�((sQ/opt/alt/python33/lib/python3.3/site-packages/pip/_vendor/html5lib/inputstream.pyR*scC`s|S(N((R((sQ/opt/alt/python33/lib/python3.3/site-packages/pip/_vendor/html5lib/inputstream.pyt__iter__-scC`sS|jd}|_|t|�kr/t�n|dkrDt�n|||d!S(Nii(RTRt
StopIterationR4(Rtp((sQ/opt/alt/python33/lib/python3.3/site-packages/pip/_vendor/html5lib/inputstream.pyt__next__0s		cC`s
|j�S(N(R�(R((sQ/opt/alt/python33/lib/python3.3/site-packages/pip/_vendor/html5lib/inputstream.pytnext8scC`sY|j}|t|�kr$t�n|dkr9t�n|d|_}|||d!S(Nii(RTRR�R4(RR�((sQ/opt/alt/python33/lib/python3.3/site-packages/pip/_vendor/html5lib/inputstream.pytprevious<s			cC`s+|jt|�krt�n||_dS(N(RTRR�(RR((sQ/opt/alt/python33/lib/python3.3/site-packages/pip/_vendor/html5lib/inputstream.pytsetPositionEs	cC`s<|jt|�krt�n|jdkr4|jSdSdS(Ni(RTRR�R3(R((sQ/opt/alt/python33/lib/python3.3/site-packages/pip/_vendor/html5lib/inputstream.pytgetPositionJs
	cC`s||j|jd!S(Ni(R(R((sQ/opt/alt/python33/lib/python3.3/site-packages/pip/_vendor/html5lib/inputstream.pytgetCurrentByteTscC`sc|j}xJ|t|�krU|||d!}||krH||_|S|d7}qW||_dS(uSkip past a list of charactersiN(RRRTR3(RRrR�Rs((sQ/opt/alt/python33/lib/python3.3/site-packages/pip/_vendor/html5lib/inputstream.pyRiYs			cC`sc|j}xJ|t|�krU|||d!}||krH||_|S|d7}qW||_dS(Ni(RRRTR3(RRrR�Rs((sQ/opt/alt/python33/lib/python3.3/site-packages/pip/_vendor/html5lib/inputstream.pyt	skipUntiles			cC`sQ|j}|||t|�!}|j|�}|rM|jt|�7_n|S(u�Look for a sequence of bytes at the start of a string. If the bytes
        are found return True and advance the position to the byte after the
        match. Otherwise return False and leave the position alone(RRt
startswith(RR!R�R'R+((sQ/opt/alt/python33/lib/python3.3/site-packages/pip/_vendor/html5lib/inputstream.pyt
matchBytesps	cC`sh||jj|�}|dkr^|jdkr=d|_n|j|t|�d7_tSt�dS(u�Look for the next sequence of bytes matching a given sequence. If
        a match is found advance the position to the last byte of the matchi����iiN(RtfindRTRR^R�(RR!tnewPosition((sQ/opt/alt/python33/lib/python3.3/site-packages/pip/_vendor/html5lib/inputstream.pytjumpTo{s(RRR0R�RR�R�R�R�R�R�tpropertyRR�tcurrentBytetspaceCharactersBytesRiR�R�R�(((sQ/opt/alt/python33/lib/python3.3/site-packages/pip/_vendor/html5lib/inputstream.pyR�"s 												R�cB`s_eZdZd�Zd�Zd�Zd�Zd�Zd�Zd�Z	d�Z
d	�ZRS(
u?Mini parser for detecting character encoding from meta elementscC`st|�|_d|_dS(u3string - the data to work on for encoding detectionN(R�R'R3R8(RR'((sQ/opt/alt/python33/lib/python3.3/site-packages/pip/_vendor/html5lib/inputstream.pyR�scC`s�d|jfd|jfd|jfd|jfd|jfd|jff}xv|jD]k}t}xR|D]J\}}|jj|�rky|�}PWq�tk
r�t	}Pq�XqkqkW|sXPqXqXW|j
S(Ns<!--s<metas</s<!s<?R(t
handleCommentt
handleMetathandlePossibleEndTagthandleOtherthandlePossibleStartTagR'R^R�R�RZR8(RtmethodDispatchtbytetkeepParsingtkeytmethod((sQ/opt/alt/python33/lib/python3.3/site-packages/pip/_vendor/html5lib/inputstream.pyR��s&	
cC`s|jjd�S(uSkip over commentss-->(R'R�(R((sQ/opt/alt/python33/lib/python3.3/site-packages/pip/_vendor/html5lib/inputstream.pyR��scC`sK|jjtkrtSt}d}x"trF|j�}|dkrGtS|ddkr�|ddk}|rC|dk	rC||_tSq%|ddkr�|d}t|�}|dk	rC||_tSq%|ddkr%t	t
|d��}|j�}|dk	rCt|�}|dk	r@|r4||_tS|}q@qCq%q%WdS(Nis
http-equiviscontent-typetcharsettcontent(R'R�R�R^RZR3tgetAttributeR8RztContentAttrParserR�tparse(Rt	hasPragmatpendingEncodingtattrttentativeEncodingtcodect
contentParser((sQ/opt/alt/python33/lib/python3.3/site-packages/pip/_vendor/html5lib/inputstream.pyR��s:		
		cC`s
|jt�S(N(thandlePossibleTagRZ(R((sQ/opt/alt/python33/lib/python3.3/site-packages/pip/_vendor/html5lib/inputstream.pyR��scC`st|j�|jt�S(N(R�R'R�R^(R((sQ/opt/alt/python33/lib/python3.3/site-packages/pip/_vendor/html5lib/inputstream.pyR��s
cC`s�|j}|jtkr9|r5|j�|j�ntS|jt�}|dkra|j�n+|j�}x|dk	r�|j�}qpWtS(NR(
R'R�tasciiLettersBytesR�R�R^R�tspacesAngleBracketsR�R3(RtendTagR'RsR�((sQ/opt/alt/python33/lib/python3.3/site-packages/pip/_vendor/html5lib/inputstream.pyR��s	


cC`s|jjd�S(NR(R'R�(R((sQ/opt/alt/python33/lib/python3.3/site-packages/pip/_vendor/html5lib/inputstream.pyR��scC`s�|j}|jttdg�B�}|dkr5dSg}g}x�tr�|dkr`|r`Pnz|tkr||j�}Pn^|d	kr�dj|�dfS|tkr�|j|j	��n|dkr�dS|j|�t
|�}qDW|dkr|j�dj|�dfSt
|�|j�}|d
kr�|}x�tr�t
|�}||kr�t
|�dj|�dj|�fS|tkr�|j|j	��q>|j|�q>Wn^|dkr�dj|�dfS|tkr�|j|j	��n|dkr	dS|j|�x}tr�t
|�}|tkrSdj|�dj|�fS|tkru|j|j	��q|dkr�dS|j|�qWdS(u_Return a name,value pair for the next attribute in the stream,
        if one is found, or Nonet/Rt=R(t't"N(RN(R�R(R�R�(
R'RiR�t	frozensetR3R^R)tasciiUppercaseBytesR&R�R�R�R�(RR'RstattrNamet	attrValuet	quoteChar((sQ/opt/alt/python33/lib/python3.3/site-packages/pip/_vendor/html5lib/inputstream.pyR��sf		


	

	(RRR0RR�R�R�R�R�R�R�R�(((sQ/opt/alt/python33/lib/python3.3/site-packages/pip/_vendor/html5lib/inputstream.pyR��s				$				R�cB`seZd�Zd�ZRS(cC`s
||_dS(N(R'(RR'((sQ/opt/alt/python33/lib/python3.3/site-packages/pip/_vendor/html5lib/inputstream.pyR?scC`s:y!|jjd�|jjd7_|jj�|jjdksHdS|jjd7_|jj�|jjdkr�|jj}|jjd7_|jj}|jj|�r�|j||jj!SdSnP|jj}y(|jjt�|j||jj!SWntk
r|j|SXWntk
r5dSXdS(NR�iR�R�R�(R�R�(	R'R�RRiR�R3R�R�R�(Rt	quoteMarktoldPosition((sQ/opt/alt/python33/lib/python3.3/site-packages/pip/_vendor/html5lib/inputstream.pyR�Cs.



(RRRR�(((sQ/opt/alt/python33/lib/python3.3/site-packages/pip/_vendor/html5lib/inputstream.pyR�>s	cC`spt|t�r:y|jd�}Wq:tk
r6dSXn|rhtjd|�j�}tj	|d�SdSdS(u{Return the python codec name corresponding to an encoding or None if the
    string doesn't correspond to a valid encoding.uasciiuN(
R2R!tdecodetUnicodeDecodeErrorR3tascii_punctuation_reR\R�RR�(R8t
canonicalName((sQ/opt/alt/python33/lib/python3.3/site-packages/pip/_vendor/html5lib/inputstream.pyRzes
(/t
__future__RRRtpip._vendor.sixRRR?t	constantsRRRRRR	R(R
tioRRR�R
tobjectR�R$tencodeR�R�R�R�R@RatsetRhR�RmRR3R^R<R5R6R!R�R�R�Rz(((sQ/opt/alt/python33/lib/python3.3/site-packages/pip/_vendor/html5lib/inputstream.pyt<module>sJ"


(((J��g�'

Zerion Mini Shell 1.0