o
    IAfq                    @   sr  	 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 ej	dv r+d dl
mZ ndZd dlZd dlmZmZmZmZ h dZee drRee j ee j dZeZeed	p^ejjZeZd6ddZe		d7ddZdd Z zej!Z!W n e"y   e Z!Y nw dd Z#zej$Z$W n e"y   G dd de%e&Z$Y nw G dd dej'dZ(ej()e( G dd de(Z*ej*)e* d dl+m,Z, e*)e, G dd de(Z-ej-)e- G d d! d!e-Z.G d"d# d#e-Z/G d$d% d%e.Z0G d&d' d'e.Z1G d(d) d)e-Z2G d*d+ d+e1e0Z3G d,d- d-e*Z,G d.d/ d/e(Z4ej4)e4 G d0d1 d1ej5Z6G d2d3 d3e4Z7G d4d5 d5e7Z8dS )8    N)allocate_lock>   win32cygwin)setmode)__all__SEEK_SETSEEK_CURSEEK_END>   r         	SEEK_HOLEi    Zgettotalrefcountr   c                 C   s4   	 | d u rd} t jjrdd l}|dt|d  | S )Nlocaler   z"'encoding' argument not specified.r
   )sysflagswarn_default_encodingwarningswarnEncodingWarning)encoding
stacklevelr    r   /usr/lib/python3.10/_pyio.pytext_encoding+   s   r   rTc              	   C   sr  	 t | tst| } t | tttfstd|  t |ts$td| t |ts/td| |d ur>t |ts>td| |d urMt |tsMtd| t|}|td s_t|t|kret	d| d|v }	d|v }
d	|v }d
|v }d|v }d|v }d|v }d|v r|	s|s|s|rt	ddd l
}|dtd d}
|r|rt	d|	|
 | | dkrt	d|	s|
s|s|st	d|r|d urt	d|r|d urt	d|r|d urt	d|r|dkrdd l
}|dtd t| |	rdpd|
rdpd |rd	pd |r
d
pd |rdpd ||d}|}zd}|dks-|dk r1| r1d}d}|dk rVt}z
t| j}W n ttfyN   Y nw |dkrV|}|dk r_t	d |dkrn|rj|W S t	d!|rwt||}n|	s|s|rt||}n|
rt||}nt	d"| |}|r|W S t|}t|||||}|}||_|W S    |   )#Nzinvalid file: %rzinvalid mode: %rzinvalid buffering: %rinvalid encoding: %rinvalid errors: %rzaxrwb+tUxr   wa+tbUz4mode U cannot be combined with 'x', 'w', 'a', or '+'r   z'U' mode is deprecatedr   Tz'can't have text and binary mode at oncer
   z)can't have read/write/append mode at oncez/must have exactly one of read/write/append modez-binary mode doesn't take an encoding argumentz+binary mode doesn't take an errors argumentz+binary mode doesn't take a newline argumentzaline buffering (buffering=1) isn't supported in binary mode, the default buffer size will be used )openerFr   zinvalid buffering sizezcan't have unbuffered text I/Ozunknown mode: %r)
isinstanceintosfspathstrbytes	TypeErrorsetlen
ValueErrorr   r   DeprecationWarningRuntimeWarningFileIOisattyDEFAULT_BUFFER_SIZEfstatfileno
st_blksizeOSErrorAttributeErrorBufferedRandomBufferedWriterBufferedReaderr   TextIOWrappermodeclose)filer>   	bufferingr   errorsnewlineclosefdr%   ZmodesZcreatingreadingwritingZ	appendingZupdatingtextbinaryr   rawresultline_bufferingbsbufferr   r   r   openH   s   
x








rN   c                 C   s"   	 dd l }|dtd t| dS )Nr   z(_pyio.open_code() may not be using hooksr   rb)r   r   r1   rN   )pathr   r   r   r   _open_code_with_warning$  s   

rQ   c                 C   s0   | dkrdd l }|jdtdd tatS t| )NOpenWrapperr   z+OpenWrapper is deprecated, use open insteadr   )r   )r   r   r0   rN   rR   r9   )namer   r   r   r   __getattr__:  s   rT   c                   @   s   e Zd ZdS )UnsupportedOperationN)__name__
__module____qualname__r   r   r   r   rU   O  s    rU   c                   @   s   e Zd Z	 dd Zd5ddZdd Zd6d	d
Zdd ZdZdd Z	dd Z
dd Zd6ddZdd Zd6ddZdd Zd6ddZedd Zd6d d!Zd"d# Zd$d% Zd&d' Zd(d) Zd7d+d,Zd-d. Zd/d0 Zd6d1d2Zd3d4 ZdS )8IOBasec                 C   s   	 t d| jj|f )Nz%s.%s() not supported)rU   	__class__rV   )selfrS   r   r   r   _unsupportedu  s   
zIOBase._unsupportedr   c                 C      	 |  d d S )Nseekr\   r[   poswhencer   r   r   r^   |  s   zIOBase.seekc                 C   s   	 |  ddS Nr   r
   )r^   r[   r   r   r   tell     zIOBase.tellNc                 C   r]   Ntruncater_   r[   ra   r   r   r   rh        zIOBase.truncatec                 C      	 |    d S N_checkClosedrd   r   r   r   flush  s   zIOBase.flushFc                 C   s*   	 | j sz
|   W d| _ d S d| _ w d S )NT)_IOBase__closedro   rd   r   r   r   r?     s   
zIOBase.closec                 C   sV   	 z| j }W n
 ty   Y d S w |rd S tr|   d S z|   W d S    Y d S rl   )closedr9   _IOBASE_EMITS_UNRAISABLEr?   )r[   rq   r   r   r   __del__  s   
zIOBase.__del__c                 C      	 dS NFr   rd   r   r   r   seekable  s   zIOBase.seekablec                 C   $   	 |   st|d u rd|d S )NzFile or stream is not seekable.)rv   rU   r[   msgr   r   r   _checkSeekable     zIOBase._checkSeekablec                 C   rt   ru   r   rd   r   r   r   readable     zIOBase.readablec                 C   rw   )NzFile or stream is not readable.)r|   rU   rx   r   r   r   _checkReadable  r{   zIOBase._checkReadablec                 C   rt   ru   r   rd   r   r   r   writable  r}   zIOBase.writablec                 C   rw   )NzFile or stream is not writable.)r   rU   rx   r   r   r   _checkWritable  r{   zIOBase._checkWritablec                 C      	 | j S rl   )rp   rd   r   r   r   rq     s   zIOBase.closedc                 C   s"   	 | j rt|d u rd|d S NI/O operation on closed file.rq   r/   rx   r   r   r   rn     s   zIOBase._checkClosedc                 C   s   	 |    | S rl   rm   rd   r   r   r   	__enter__  s   zIOBase.__enter__c                 G   rk   rl   )r?   )r[   argsr   r   r   __exit__  rf   zIOBase.__exit__c                 C   r]   )Nr6   r_   rd   r   r   r   r6        zIOBase.filenoc                 C   s   	 |    dS ru   rm   rd   r   r   r   r3     s   zIOBase.isattyr   c                    s   	 t  dr fdd}ndd }d u rdnzj}W n ty,   tdw | t }dk s=t|k rb | }|sJ	 t|S ||7 }|drX	 t|S dk s=t|k s=t|S )	Npeekc                     s>     d} | s	dS | dd pt| }dkrt|}|S )Nr
      
r   )r   findr.   min)Z	readaheadnr[   sizer   r   
nreadahead0  s   

z#IOBase.readline.<locals>.nreadaheadc                   S   s   dS Nr
   r   r   r   r   r   r   9  s   r    is not an integerr   r   )	hasattr	__index__r9   r,   	bytearrayr.   readendswithr+   )r[   r   r   
size_indexresr"   r   r   r   readline$  s0   

	

zIOBase.readlinec                 C   s   |    | S rl   rm   rd   r   r   r   __iter__N  s   zIOBase.__iter__c                 C   s   |   }|st|S rl   )r   StopIterationr[   liner   r   r   __next__R  s   zIOBase.__next__c                 C   sT   	 |d u s	|dkrt | S d}g }| D ]}|| |t|7 }||kr' |S q|S Nr   )listappendr.   )r[   Zhintr   linesr   r   r   r   	readlinesX  s   
zIOBase.readlinesc                 C   s"   	 |    |D ]}| | qd S rl   )rn   write)r[   r   r   r   r   r   
writelinesj  s
   zIOBase.writelinesr   rl   r   )rV   rW   rX   r\   r^   re   rh   ro   rp   r?   rs   rv   rz   r|   r~   r   r   propertyrq   rn   r   r   r6   r3   r   r   r   r   r   r   r   r   r   rY   S  s8     







	

*
rY   )	metaclassc                   @   s0   e Zd Z	 dddZdd Zdd Zdd	 Zd
S )	RawIOBaser   c                 C   sR   	 |d u rd}|dk r|   S t| }| |}|d u r d S ||d = t|S )Nr   r   )readallr   r   readintor+   )r[   r   r"   r   r   r   r   r     s   

zRawIOBase.readc                 C   s4   	 t  }	 | t}|sn||7 }q|rt|S |S rl   )r   r   r4   r+   )r[   r   datar   r   r   r     s   
zRawIOBase.readallc                 C   r]   )Nr   r_   r[   r"   r   r   r   r     rj   zRawIOBase.readintoc                 C   r]   Nr   r_   r   r   r   r   r     rj   zRawIOBase.writeNr   )rV   rW   rX   r   r   r   r   r   r   r   r   r   w  s    
r   )r2   c                   @   sJ   e Zd Z	 dddZdddZdd Zdd	 Zd
d Zdd Zdd Z	dS )BufferedIOBaser   c                 C   r]   Nr   r_   r   r   r   r   r     s   zBufferedIOBase.readc                 C   r]   )Nread1r_   r   r   r   r   r     s   zBufferedIOBase.read1c                 C      	 | j |ddS )NFr   	_readintor   r   r   r   r     s   zBufferedIOBase.readintoc                 C   r   )NTr   r   r   r   r   r   	readinto1     zBufferedIOBase.readinto1c                 C   sV   t |ts	t|}|d}|r| t|}n| t|}t|}||d |< |S NB)r&   
memoryviewcastr   r.   r   )r[   r"   r   r   r   r   r   r   r     s   

zBufferedIOBase._readintoc                 C   r]   r   r_   r   r   r   r   r     r   zBufferedIOBase.writec                 C   r]   Ndetachr_   rd   r   r   r   r        zBufferedIOBase.detachNr   )
rV   rW   rX   r   r   r   r   r   r   r   r   r   r   r   r     s    

r   c                   @   s   e Zd Z	 dd Zd#ddZdd Zd$d	d
Zdd Zdd Zdd Z	dd Z
edd Zedd Zedd Zedd Zdd Zdd Zdd  Zd!d" ZdS )%_BufferedIOMixinc                 C   s
   || _ d S rl   _rawr[   rI   r   r   r   __init__,     
z_BufferedIOMixin.__init__r   c                 C   s"   | j ||}|dk rtd|S )Nr   z#seek() returned an invalid position)rI   r^   r8   )r[   ra   rb   Znew_positionr   r   r   r^   1  s   z_BufferedIOMixin.seekc                 C   s   | j  }|dk rtd|S )Nr   z#tell() returned an invalid position)rI   re   r8   ri   r   r   r   re   7  s   
z_BufferedIOMixin.tellNc                 C   s4   |    |   |   |d u r|  }| j|S rl   )rn   r   ro   re   rI   rh   ri   r   r   r   rh   =  s   z_BufferedIOMixin.truncatec                 C   s   | j rtd| j  d S )Nflush on closed file)rq   r/   rI   ro   rd   r   r   r   ro   N  s   z_BufferedIOMixin.flushc                 C   >   | j d ur| jsz|   W | j   d S | j   w d S d S rl   )rI   rq   ro   r?   rd   r   r   r   r?   S  s
   
z_BufferedIOMixin.closec                 C   *   | j d u r	td|   | j}d | _|S )Nzraw stream already detached)rI   r/   ro   r   r   r   r   r   r   [     
z_BufferedIOMixin.detachc                 C   
   | j  S rl   )rI   rv   rd   r   r   r   rv   e  r   z_BufferedIOMixin.seekablec                 C      | j S rl   r   rd   r   r   r   rI   h     z_BufferedIOMixin.rawc                 C      | j jS rl   )rI   rq   rd   r   r   r   rq   l     z_BufferedIOMixin.closedc                 C   r   rl   )rI   rS   rd   r   r   r   rS   p  r   z_BufferedIOMixin.namec                 C   r   rl   )rI   r>   rd   r   r   r   r>   t  r   z_BufferedIOMixin.modec                 C      t d| jjdNzcannot pickle z objectr,   rZ   rV   rd   r   r   r   __getstate__x     z_BufferedIOMixin.__getstate__c                 C   sH   | j j}| j j}z| j}W n ty   d|| Y S w d|||S )Nz<{}.{}>z<{}.{} name={!r}>)rZ   rW   rX   rS   r9   format)r[   modnameZclsnamerS   r   r   r   __repr__{  s   
z_BufferedIOMixin.__repr__c                 C   r   rl   )rI   r6   rd   r   r   r   r6     r   z_BufferedIOMixin.filenoc                 C   r   rl   )rI   r3   rd   r   r   r   r3     r   z_BufferedIOMixin.isattyr   rl   )rV   rW   rX   r   r^   re   rh   ro   r?   r   rv   r   rI   rq   rS   r>   r   r   r6   r3   r   r   r   r   r   #  s,    






r   c                       s   e Zd Z	 dZd ddZdd Zdd Zdd	 Z fd
dZd!ddZ	d!ddZ
dd Zd"ddZdd Zd ddZdd Zdd Zdd Z  ZS )#BytesIONc                 C   s&   t  }|d ur||7 }|| _d| _d S r   )r   _buffer_pos)r[   Zinitial_bytesbufr   r   r   r     s
   
zBytesIO.__init__c                 C   s   | j rtd| j S )Nz__getstate__ on closed file)rq   r/   __dict__copyrd   r   r   r   r     s   
zBytesIO.__getstate__c                 C      	 | j rtdt| jS )Nzgetvalue on closed file)rq   r/   r+   r   rd   r   r   r   getvalue     
zBytesIO.getvaluec                 C   r   )Nzgetbuffer on closed file)rq   r/   r   r   rd   r   r   r   	getbuffer  r   zBytesIO.getbufferc                    s"   | j d ur
| j   t   d S rl   )r   clearsuperr?   rd   rZ   r   r   r?     s   

zBytesIO.closer   c                 C   s   | j rtd|d u rd}nz|j}W n ty!   t|dw | }|dk r.t| j}t| j| jkr8dS tt| j| j| }| j| j| }|| _t	|S )Nread from closed filer   r   r       )
rq   r/   r   r9   r,   r.   r   r   r   r+   )r[   r   r   Znewposr"   r   r   r   r     s$   

zBytesIO.readc                 C   s   	 |  |S rl   )r   r   r   r   r   r     s   
zBytesIO.read1c                 C   s   | j rtdt|trtdt|}|j}W d    n1 s"w   Y  |dkr-dS | j}|t| j	krGd|t| j	  }|  j	|7  _	|| j	||| < |  j|7  _|S )Nwrite to closed file can't write str to binary streamr       )
rq   r/   r&   r*   r,   r   nbytesr   r.   r   )r[   r"   viewr   ra   Zpaddingr   r   r   r     s    

zBytesIO.writer   c                 C   s   | j rtdz|j}W n ty   t|dw | }|dkr3|dk r-td|f || _| jS |dkrCtd| j| | _| jS |dkrUtdt| j| | _| jS td)Nzseek on closed filer   r   negative seek position %rr
   r   zunsupported whence value)	rq   r/   r   r9   r,   r   maxr.   r   )r[   ra   rb   	pos_indexr   r   r   r^     s(   
zBytesIO.seekc                 C      | j rtd| jS )Ntell on closed file)rq   r/   r   rd   r   r   r   re        zBytesIO.tellc                 C   sr   | j rtd|d u r| j}n"z|j}W n ty"   t|dw | }|dk r1td|f | j|d = |S )Nztruncate on closed filer   r   znegative truncate position %r)rq   r/   r   r   r9   r,   r   )r[   ra   r   r   r   r   rh     s   
zBytesIO.truncatec                 C      | j rtddS Nr   Tr   rd   r   r   r   r|        zBytesIO.readablec                 C   r   r   r   rd   r   r   r   r     r   zBytesIO.writablec                 C   r   r   r   rd   r   r   r   rv     r   zBytesIO.seekablerl   r   r   )rV   rW   rX   r   r   r   r   r   r?   r   r   r   r^   re   rh   r|   r   rv   __classcell__r   r   r   r   r     s"    




r   c                   @   sv   e Zd Z	 efddZdd Zdd Zddd	Zdd
dZdddZ	dddZ
dddZdd Zdd ZdddZdS )r<   c                 C   sH   	 |  s	tdt| | |dkrtd|| _|   t | _d S )Nz "raw" argument must be readable.r   invalid buffer size)	r|   r8   r   r   r/   buffer_size_reset_read_bufLock
_read_lockr[   rI   r   r   r   r   r   (  s   zBufferedReader.__init__c                 C   r   rl   )rI   r|   rd   r   r   r   r|   5  r   zBufferedReader.readablec                 C   s   d| _ d| _d S )Nr   r   )	_read_buf	_read_posrd   r   r   r   r   8  s   
zBufferedReader._reset_read_bufNc                 C   sN   	 |d ur|dk rt d| j | |W  d    S 1 s w   Y  d S )Nr   zinvalid number of bytes to read)r/   r   _read_unlockedr   r   r   r   r   <  s   $zBufferedReader.readc                 C   s  d}d}| j }| j}|d u s|dkr^|   t| jdr5| j }|d u r-||d  p,d S ||d  | S ||d  g}d}	 | j }||v rK|}n|t|7 }|| q?d	|p]|S t|| }	||	krw|  j|7  _||||  S ||d  g}t
| j|}
|	|k r| j|
}||v r|}n|	t|7 }	|| |	|k st||	}d	|}||d  | _ d| _|r|d | S |S )Nr   )r   Nr   r   r   )r   r   r   r   rI   r   r   r.   r   joinr   r   r   )r[   r   Z
nodata_valZempty_valuesr   ra   chunkchunksZcurrent_sizeavailZwantedoutr   r   r   r   I  sR   




	
zBufferedReader._read_unlockedr   c                 C   s6   	 | j  | |W  d    S 1 sw   Y  d S rl   )r   _peek_unlockedr   r   r   r   r   }  s   $zBufferedReader.peekc                 C   sr   t || j}t| j| j }||k s|dkr1| j| }| j|}|r1| j| jd  | | _d| _| j| jd  S r   )r   r   r.   r   r   rI   r   )r[   r   ZwantZhaveZto_readcurrentr   r   r   r    s   
zBufferedReader._peek_unlockedr   c                 C   sl   	 |dk r| j }|dkrdS | j | d | t|t| j| j W  d    S 1 s/w   Y  d S )Nr   r   r
   )r   r   r  r   r   r.   r   r   r   r   r   r   r     s   
$zBufferedReader.read1c                 C   s|  	 t |ts
t|}|jdkrdS |d}d}| j |t|k rtt| j| j t|}|rT| j| j| j|  |||| < |  j|7  _||7 }|t|krTn@t|| | j	kro| j
||d  }|sjn2||7 }n
|rs|sy| dsyn+|r~|r~n.|t|k s"W d    |S W d    |S W d    |S W d    |S W d    |S W d    |S 1 sw   Y  |S )Nr   r   r
   )r&   r   r   r   r   r.   r   r   r   r   rI   r   r  )r[   r   r   writtenr  r   r   r   r   r     s^   










zBufferedReader._readintoc                 C   s   t | t| j | j S rl   )r   re   r.   r   r   rd   r   r   r   re     s   zBufferedReader.tellc                 C   sp   |t vrtd| j# |dkr|t| j| j 8 }t| ||}|   |W  d    S 1 s1w   Y  d S )Ninvalid whence valuer
   )	valid_seek_flagsr/   r   r.   r   r   r   r^   r   r`   r   r   r   r^     s   $zBufferedReader.seekrl   r   r   )rV   rW   rX   r4   r   r|   r   r   r   r   r  r   r   re   r^   r   r   r   r   r<     s    	


4


.r<   c                   @   s^   e Zd Z	 efddZdd Zdd Zddd	Zd
d Zdd Z	dd Z
dddZdd ZdS )r;   c                 C   sF   |  stdt| | |dkrtd|| _t | _t | _	d S )Nz "raw" argument must be writable.r   r   )
r   r8   r   r   r/   r   r   
_write_bufr   _write_lockr   r   r   r   r     s   zBufferedWriter.__init__c                 C   r   rl   )rI   r   rd   r   r   r   r     r   zBufferedWriter.writablec                 C   s  t |tr	td| ju | jrtdt| j| jkr | 	  t| j}| j
| t| j| }t| j| jkrxz| 	  W n7 tyw } z+t| j| jkrmt| j| j }||8 }| jd | j | _t|j|j|W Y d }~nd }~ww |W  d    S 1 sw   Y  d S )Nr   r   )r&   r*   r,   r
  rq   r/   r.   r	  r   _flush_unlockedextendBlockingIOErrorerrnostrerror)r[   r"   beforer  eZoverager   r   r   r     s0   

$zBufferedWriter.writeNc                 C   sP   | j  |   |d u r| j }| j|W  d    S 1 s!w   Y  d S rl   )r
  r  rI   re   rh   ri   r   r   r   rh     s   

$zBufferedWriter.truncatec                 C   s4   | j  |   W d    d S 1 sw   Y  d S rl   )r
  r  rd   r   r   r   ro     s   
"zBufferedWriter.flushc                 C   s   | j rtd| jrDz	| j| j}W n ty   tdw |d u r*ttjdd|t	| jks5|dk r9t
d| jd |= | js
d S d S )Nr   zHself.raw should implement RawIOBase: it should not raise BlockingIOErrorz)write could not complete without blockingr   z*write() returned incorrect number of bytes)rq   r/   r	  rI   r   r  RuntimeErrorr  EAGAINr.   r8   r[   r   r   r   r   r    s"   zBufferedWriter._flush_unlockedc                 C   s   t | t| j S rl   )r   re   r.   r	  rd   r   r   r   re   .  r   zBufferedWriter.tellr   c                 C   sP   |t vrtd| j |   t| ||W  d    S 1 s!w   Y  d S )Nr  )r  r/   r
  r  r   r^   r`   r   r   r   r^   1  s   $zBufferedWriter.seekc                 C   s   | j  | jd u s| jr	 W d    d S W d    n1 sw   Y  z |   W | j  | j  W d    d S 1 s>w   Y  d S | j  | j  W d    w 1 sXw   Y  w rl   )r
  rI   rq   ro   r?   rd   r   r   r   r?   8  s   
*zBufferedWriter.closerl   r   )rV   rW   rX   r4   r   r   r   rh   ro   r  re   r^   r?   r   r   r   r   r;     s    

r;   c                   @   s   e Zd Z	 efddZdddZdd Zdd	 ZdddZdddZ	dd Z
dd Zdd Zdd Zdd Zdd Zedd ZdS ) BufferedRWPairc                 C   s>   	 |  s	td| stdt||| _t||| _d S )Nz#"reader" argument must be readable.z#"writer" argument must be writable.)r|   r8   r   r<   readerr;   writer)r[   r  r  r   r   r   r   r   X  s   zBufferedRWPair.__init__r   c                 C   s   |d u rd}| j |S Nr   )r  r   r   r   r   r   r   f  s   zBufferedRWPair.readc                 C      | j |S rl   )r  r   r   r   r   r   r   k     zBufferedRWPair.readintoc                 C   r  rl   )r  r   r   r   r   r   r   n  r  zBufferedRWPair.writer   c                 C   r  rl   )r  r   r   r   r   r   r   q  r  zBufferedRWPair.peekc                 C   r  rl   )r  r   r   r   r   r   r   t  r  zBufferedRWPair.read1c                 C   r  rl   )r  r   r   r   r   r   r   w  r  zBufferedRWPair.readinto1c                 C   r   rl   )r  r|   rd   r   r   r   r|   z  r   zBufferedRWPair.readablec                 C   r   rl   )r  r   rd   r   r   r   r   }  r   zBufferedRWPair.writablec                 C   r   rl   )r  ro   rd   r   r   r   ro     r   zBufferedRWPair.flushc                 C   s(   z| j   W | j  d S | j  w rl   )r  r?   r  rd   r   r   r   r?     s   zBufferedRWPair.closec                 C   s   | j  p	| j S rl   )r  r3   r  rd   r   r   r   r3     r   zBufferedRWPair.isattyc                 C   r   rl   )r  rq   rd   r   r   r   rq     r   zBufferedRWPair.closedNr   r   )rV   rW   rX   r4   r   r   r   r   r   r   r   r|   r   ro   r?   r3   r   rq   r   r   r   r   r  H  s     


r  c                   @   sl   e Zd Z	 efddZdddZdd Zdd	d
ZdddZdd Z	dddZ
dddZdd Zdd ZdS )r:   c                 C   s(   |   t| || t| || d S rl   )rz   r<   r   r;   r   r   r   r   r     s   zBufferedRandom.__init__r   c                 C   s   |t vrtd|   | jr/| j | j| jt| j d W d    n1 s*w   Y  | j||}| j | 	  W d    n1 sHw   Y  |dk rUt
d|S )Nr  r
   r   z seek() returned invalid position)r  r/   ro   r   r   rI   r^   r   r.   r   r8   r`   r   r   r   r^     s   
zBufferedRandom.seekc                 C   s   | j rt| S t| S rl   )r	  r;   re   r<   rd   r   r   r   re     s   

zBufferedRandom.tellNc                 C   s   |d u r|   }t| |S rl   )re   r;   rh   ri   r   r   r   rh     s   zBufferedRandom.truncatec                 C   s    |d u rd}|    t| |S r  )ro   r<   r   r   r   r   r   r     s   zBufferedRandom.readc                 C      |    t| |S rl   )ro   r<   r   r   r   r   r   r        zBufferedRandom.readintoc                 C   r  rl   )ro   r<   r   r   r   r   r   r     r  zBufferedRandom.peekr   c                 C   r  rl   )ro   r<   r   r   r   r   r   r     r  zBufferedRandom.read1c                 C   r  rl   )ro   r<   r   r   r   r   r   r     r  zBufferedRandom.readinto1c                 C   sZ   | j r'| j | j| jt| j  d |   W d    n1 s"w   Y  t| |S r   )	r   r   rI   r^   r   r.   r   r;   r   r   r   r   r   r     s   
zBufferedRandom.writer   rl   r   )rV   rW   rX   r4   r   r^   re   rh   r   r   r   r   r   r   r   r   r   r   r:     s    




r:   c                       s   e Zd ZdZdZdZdZdZdZdZ	d0ddZ
dd	 Zd
d Zdd Zdd Zd1ddZd1ddZdd Zdd Zdd ZefddZdd Zd1ddZ fd d!Zd"d# Zd$d% Zd&d' Zd(d) Zd*d+ Zed,d- Zed.d/ Z   Z!S )2r2   r   FNTr   c              
   C   s0  	 | j dkrz| jrt| j  W d| _ nd| _ w t|tr"tdt|tr2|}|dk r1tdnd}t|t	s@td|f t
|t
dksOtd|f tdd |D d	ksa|d
d	kretdd|v rvd| _d| _tjtjB }n(d|v rd| _d}nd|v rd| _tjtjB }nd|v rd| _d| _tjtjB }d
|v rd| _d| _| jr| jr|tjO }n| jr|tjO }n|tjO }|ttddO }ttddpttdd}||O }d }z|dk r|std|d u rt||d}n|||}t|tstd|dk rtd|}|st|d || _t|}	zt|	jr2t t!j"t#t!j"|W n
 t$y=   Y nw t|	dd| _%| j%d	krNt&| _%t'rWt'|tj( || _)| jrz	t*|dt+ W n ty }
 z|
j!t!j,krx W Y d }
~
nd }
~
ww W n   |d urt|  || _ d S )Nr   r   z$integer argument expected, got floatznegative file descriptorzinvalid mode: %szxrwab+c                 s   s    | ]}|d v V  qdS )ZrwaxNr   ).0cr   r   r   	<genexpr>  s    z"FileIO.__init__.<locals>.<genexpr>r
   r    zKMust have exactly one of create/read/write/append mode and at most one plusr   Tr   r   r   O_BINARYZO_NOINHERIT	O_CLOEXECz'Cannot use closefd=False with file namei  zexpected integer from openerzNegative file descriptorFr7   )-_fd_closefdr(   r?   r&   floatr,   r'   r/   r*   r-   sumcount_created	_writableO_EXCLO_CREAT	_readableO_TRUNC
_appendingO_APPENDO_RDWRO_RDONLYO_WRONLYgetattrrN   r8   set_inheritabler5   statS_ISDIRst_modeIsADirectoryErrorr  ZEISDIRr  r9   _blksizer4   _setmoder   rS   lseekr	   ZESPIPE)r[   r@   r>   rD   r%   fdr   Znoinherit_flagZowned_fdZfdfstatr  r   r   r   r     s   



$








zFileIO.__init__c                 C   sN   | j dkr!| jr#| js%dd l}|jd| f td| d |   d S d S d S d S )Nr   zunclosed file %rr   )r   source)r"  r#  rq   r   r   ResourceWarningr?   )r[   r   r   r   r   rs   ]  s   zFileIO.__del__c                 C   r   r   r   rd   r   r   r   r   d  r   zFileIO.__getstate__c                 C   sj   d| j j| j jf }| jrd| S z| j}W n ty*   d|| j| j| jf  Y S w d||| j| jf S )Nz%s.%sz<%s [closed]>z<%s fd=%d mode=%r closefd=%r>z<%s name=%r mode=%r closefd=%r>)	rZ   rW   rX   rq   rS   r9   r"  r>   r#  )r[   
class_namerS   r   r   r   r   g  s   
zFileIO.__repr__c                 C      | j stdd S )NzFile not open for reading)r+  rU   rd   r   r   r   r~   u     zFileIO._checkReadablec                 C   r?  )NzFile not open for writing)r(  rU   rx   r   r   r   r   y  r@  zFileIO._checkWritablec                 C   sP   	 |    |   |d u s|dk r|  S zt| j|W S  ty'   Y d S w r   )rn   r~   r   r(   r   r"  r  r   r   r   r   r   }  s   zFileIO.readc                 C   s   	 |    |   t}zt| jdt}t| jj}||kr%|| d }W n	 t	y/   Y nw t
 }	 t||krEt|}|t|t7 }|t| }z	t| j|}W n tye   |rbY t|S Y d S w |sm	 t|S ||7 }q4rc   )rn   r~   r4   r(   r:  r"  r   r5   st_sizer8   r   r.   r   r   r  r+   )r[   bufsizera   endrJ   r   r   r   r   r   r     s@   zFileIO.readallc                 C   s6   	 t |d}| t|}t|}||d |< |S r   )r   r   r   r.   )r[   r"   mr   r   r   r   r   r     s   zFileIO.readintoc                 C   s8   	 |    |   zt| j|W S  ty   Y d S w rl   )rn   r   r(   r   r"  r  r   r   r   r   r     s   zFileIO.writec                 C   s,   	 t |tr
td|   t| j||S )Nzan integer is required)r&   r$  r,   rn   r(   r:  r"  r`   r   r   r   r^     s
   

zFileIO.seekc                 C   s   	 |    t| jdtS r   )rn   r(   r:  r"  r   rd   r   r   r   re     s   zFileIO.tellc                 C   s4   	 |    |   |d u r|  }t| j| |S rl   )rn   r   re   r(   	ftruncater"  r   r   r   r   rh     s   zFileIO.truncatec                    sL   	 | j s$z| jrt| j W t   d S W t   d S t   w d S rl   )rq   r#  r(   r?   r"  r   rd   r   r   r   r?     s   zFileIO.closec                 C   sJ   	 |    | jd u r"z|   W n ty   d| _Y | jS w d| _| jS )NFT)rn   	_seekablere   r8   rd   r   r   r   rv     s   
zFileIO.seekablec                 C      	 |    | jS rl   )rn   r+  rd   r   r   r   r|        zFileIO.readablec                 C   rG  rl   )rn   r(  rd   r   r   r   r     rH  zFileIO.writablec                 C   rG  rl   )rn   r"  rd   r   r   r   r6     rH  zFileIO.filenoc                 C   s   	 |    t| jS rl   )rn   r(   r3   r"  rd   r   r   r   r3     s   zFileIO.isattyc                 C   r   rl   )r#  rd   r   r   r   rD     s   zFileIO.closefdc                 C   sB   	 | j r| jr	dS dS | jr| jrdS dS | jr| jrdS dS dS )Nzxb+xbzab+abzrb+rO   wb)r'  r+  r-  r(  rd   r   r   r   r>     s   zFileIO.mode)r   TNrl   )"rV   rW   rX   r"  r'  r+  r(  r-  rF  r#  r   rs   r   r   r~   r   r   r   r   r   r   r^   re   rh   r?   rv   r|   r   r6   r3   r   rD   r>   r   r   r   r   r   r2     s>    
y

#

r2   c                   @   s^   e Zd Z	 dddZdd ZdddZd	d
 Zdd Zedd Z	edd Z
edd ZdS )
TextIOBaser   c                 C   r]   r   r_   r   r   r   r   r   :  s   zTextIOBase.readc                 C   r]   r   r_   )r[   sr   r   r   r   D     zTextIOBase.writeNc                 C   r]   rg   r_   ri   r   r   r   rh   H  rN  zTextIOBase.truncatec                 C   r]   )Nr   r_   rd   r   r   r   r   L  r   zTextIOBase.readlinec                 C   r]   r   r_   rd   r   r   r   r   S  r   zTextIOBase.detachc                 C      	 d S rl   r   rd   r   r   r   r   \  s   zTextIOBase.encodingc                 C   rO  rl   r   rd   r   r   r   newlinesa  s   zTextIOBase.newlinesc                 C   rO  rl   r   rd   r   r   r   rB   k  s   zTextIOBase.errorsr   rl   )rV   rW   rX   r   r   rh   r   r   r   r   rP  rB   r   r   r   r   rL  2  s    


	

	rL  c                   @   sR   e Zd Z	 dddZdddZdd Zd	d
 Zdd ZdZdZ	dZ
edd ZdS )IncrementalNewlineDecoderstrictc                 C   s,   t jj| |d || _|| _d| _d| _d S )N)rB   r   F)codecsIncrementalDecoderr   	translatedecoderseennl	pendingcr)r[   rV  rU  rB   r   r   r   r   |  s
   
z"IncrementalNewlineDecoder.__init__Fc                 C   s   | j d u r|}n| j j||d}| jr|s|rd| }d| _|dr.|s.|d d }d| _|d}|d| }|d| }|  j|oH| j|oL| jB |oQ| jB O  _| j	rh|r`|
dd}|rh|
dd}|S )NfinalFr   T

)rV  decoderX  r   r&  rW  _LF_CR_CRLFrU  replace)r[   inputrZ  outputZcrlfZcrZlfr   r   r   r^    s*   

z IncrementalNewlineDecoder.decodec                 C   s@   | j d u r
d}d}n| j  \}}|dK }| jr|dO }||fS )Nr   r   r
   )rV  getstaterX  )r[   r   flagr   r   r   re    s   
z"IncrementalNewlineDecoder.getstatec                 C   s<   |\}}t |d@ | _| jd ur| j||d? f d S d S r   )boolrX  rV  setstate)r[   stater   rf  r   r   r   rh    s
   
z"IncrementalNewlineDecoder.setstatec                 C   s(   d| _ d| _| jd ur| j  d S d S )Nr   F)rW  rX  rV  resetrd   r   r   r   rj    s
   
zIncrementalNewlineDecoder.resetr
   r      c                 C   s
   d| j  S )N)Nr]  r[  )r[  r]  r\  )r]  r\  )r[  r\  )r[  r]  r\  )rW  rd   r   r   r   rP    s   z"IncrementalNewlineDecoder.newlinesN)rR  )F)rV   rW   rX   r   r^  re  rh  rj  r_  r`  ra  r   rP  r   r   r   r   rQ  u  s    

rQ  c                   @   s  e Zd Z	 dZdZ		dNddZdd Z		dNdd	Zd
d Ze	dd Z
e	dd Ze	dd Ze	dd Ze	dd ZddedddddZdd Zdd Zdd Zdd  Zd!d" Ze	d#d$ Ze	d%d& Zd'd( Zd)d* Zd+d, Zd-d. Zd/d0 Zd1d2 ZdOd3d4Zd5d6 Zd7d8 Z 	9	9dPd:d;Z!d<d= Z"d>d? Z#dOd@dAZ$dBdC Z%dQdDdEZ&dOdFdGZ'dHdI Z(dOdJdKZ)e	dLdM Z*dS )Rr=   i   NFc           	   	   C   s0  |  | t|}|dkr$zt| pd}W n ttfy#   Y nw |dkr?zdd l}W n ty9   d}Y nw |	d}t
|tsJtd| t|jsXd}t|| |d u r_d}nt
|tsjtd| trqt| || _d	| _d| _d | _| j  | _| _t| jd
| _| ||||| d S )Nr   r   utf-8Fr   zG%r is not a text encoding; use codecs.open() to handle arbitrary codecsrR  r   r$   r   )_check_newliner   r(   device_encodingr6   r9   rU   r   ImportErrorgetpreferredencodingr&   r*   r/   rS  lookup_is_text_encodingLookupError_CHECK_ERRORSlookup_errorr   _decoded_chars_decoded_chars_used	_snapshotrM   rv   rF  _tellingr   
_has_read1
_configure)	r[   rM   r   rB   rC   rK   write_throughr   ry   r   r   r   r     sF   





zTextIOWrapper.__init__c                 C   s>   |d urt |tstdt|f |dvrtd|f d S )Nzillegal newline type: %r)Nr$   r]  r[  r\  zillegal newline value: %r)r&   r*   r,   typer/   )r[   rC   r   r   r   rm    s
   zTextIOWrapper._check_newlinec                 C   s   || _ || _d | _d | _d| _| | _|d u | _|| _|dk| _|p$t	j
| _|| _|| _| jrQ|  rS| j }|dkrUz
|  d W d S  tyP   Y d S w d S d S d S )N        r$   r   )	_encoding_errors_encoder_decoder	_b2cratio_readuniversal_readtranslate_readnl_writetranslater(   linesep_writenl_line_buffering_write_throughrF  r   rM   re   _get_encoderrh  rs  )r[   r   rB   rC   rK   r|  positionr   r   r   r{    s,   


zTextIOWrapper._configurec                 C   s|   d | jj| jj}z| j}W n	 ty   Y nw |d |7 }z| j}W n	 ty.   Y nw |d |7 }|d | j S )Nz<{}.{}z name={0!r}z mode={0!r}z encoding={0!r}>)r   rZ   rW   rX   rS   r9   r>   r   )r[   rJ   rS   r>   r   r   r   r   B  s    


zTextIOWrapper.__repr__c                 C   r   rl   )r  rd   r   r   r   r   S  r   zTextIOWrapper.encodingc                 C   r   rl   )r  rd   r   r   r   rB   W  r   zTextIOWrapper.errorsc                 C   r   rl   )r  rd   r   r   r   rK   [  r   zTextIOWrapper.line_bufferingc                 C   r   rl   )r  rd   r   r   r   r|  _  r   zTextIOWrapper.write_throughc                 C   r   rl   )r   rd   r   r   r   rM   c  r   zTextIOWrapper.buffer)r   rB   rC   rK   r|  c                C   s   	 | j d ur|d us|d us|turtd|d u r%|d u r"| j}nd}nt|ts0td| |d u r8| j}nt|tsCtd| |tu rJ| j}| 	| |d u rV| j
}|d u r]| j}|   | ||||| d S )NzPIt is not possible to set the encoding or newline of stream after the first readrR  r   r   )r  EllipsisrU   r  r&   r*   r,   r  r  rm  rK   r|  ro   r{  )r[   r   rB   rC   rK   r|  r   r   r   reconfigureg  s8   




zTextIOWrapper.reconfigurec                 C   r   r   )rq   r/   rF  rd   r   r   r   rv     r   zTextIOWrapper.seekablec                 C   r   rl   )rM   r|   rd   r   r   r   r|     r   zTextIOWrapper.readablec                 C   r   rl   )rM   r   rd   r   r   r   r     r   zTextIOWrapper.writablec                 C   s   | j   | j| _d S rl   )rM   ro   rF  ry  rd   r   r   r   ro     s   
zTextIOWrapper.flushc                 C   r   rl   )rM   rq   ro   r?   rd   r   r   r   r?     s
   
zTextIOWrapper.closec                 C   r   rl   )rM   rq   rd   r   r   r   rq     r   zTextIOWrapper.closedc                 C   r   rl   )rM   rS   rd   r   r   r   rS     r   zTextIOWrapper.namec                 C   r   rl   )rM   r6   rd   r   r   r   r6     r   zTextIOWrapper.filenoc                 C   r   rl   )rM   r3   rd   r   r   r   r3     r   zTextIOWrapper.isattyc                 C   s   	 | j rtdt|tstd|jj t|}| js| j	o"d|v }|r4| jr4| j
dkr4|d| j
}| jp:|  }||}| j| | j	rS|sOd|v rS|   | d d | _| jrc| j  |S )Nr   zcan't write %s to text streamr]  r[  r$   )rq   r/   r&   r*   r,   rZ   rV   r.   r  r  r  rb  r  r  encoderM   r   ro   _set_decoded_charsrx  r  rj  )r[   rM  lengthZhaslfencoderr"   r   r   r   r     s*   



zTextIOWrapper.writec                 C   s   t | j}|| j| _| jS rl   )rS  getincrementalencoderr  r  r  )r[   Zmake_encoderr   r   r   r    s   zTextIOWrapper._get_encoderc                 C   s2   t | j}|| j}| jrt|| j}|| _|S rl   )rS  getincrementaldecoderr  r  r  rQ  r  r  )r[   Zmake_decoderrV  r   r   r   _get_decoder  s   
zTextIOWrapper._get_decoderc                 C   s   	 || _ d| _d S r   )rv  rw  )r[   charsr   r   r   r    s   
z TextIOWrapper._set_decoded_charsc                 C   sH   	 | j }|d u r| j|d  }n	| j|||  }|  j t|7  _ |S rl   )rw  rv  r.   )r[   r   offsetr  r   r   r   _get_decoded_chars  s   z TextIOWrapper._get_decoded_charsc                 C   s&   	 | j |k r
td|  j |8  _ d S )Nz"rewind decoded_chars out of bounds)rw  AssertionErrorr  r   r   r   _rewind_decoded_chars  s   
z#TextIOWrapper._rewind_decoded_charsc                 C   s   	 | j d u r
td| jr| j  \}}| jr| j| j}n| j| j}| }| j 	||}| 
| |rBt|t| j | _nd| _| jrO||| f| _| S )Nz
no decoderr~  )r  r/   ry  re  rz  rM   r   _CHUNK_SIZEr   r^  r  r.   rv  r  rx  )r[   
dec_buffer	dec_flagsinput_chunkeofZdecoded_charsr   r   r   _read_chunk  s"   


zTextIOWrapper._read_chunkr   c                 C   s(   ||d> B |d> B |d> B t |d> B S )N@            )rg  )r[   r  r  bytes_to_feedneed_eofchars_to_skipr   r   r   _pack_cookie	  s
   
zTextIOWrapper._pack_cookiec                 C   sJ   t |d\}}t |d\}}t |d\}}t |d\}}|||t||fS )Nl            )divmodrg  )r[   Zbigintrestr  r  r  r  r  r   r   r   _unpack_cookie$	  s
   zTextIOWrapper._unpack_cookiec              	   C   s>  | j std| jstd|   | j }| j}|d u s#| jd u r,| j	r*t
d|S | j\}}|t|8 }| j}|dkrD| ||S | }zt| j| }d}|dkr|d|f t||d | }	|	|kr| \}
}|
s{|}||	8 }n|t|
8 }d}n||8 }|d }|dksVd}|d|f || }|}|dkr| ||W || S d}d}d}t|t|D ]7}|d7 }|t||||d  7 }| \}}|s||kr||7 }||8 }|dd}}}||kr nq|t|jdd	d
7 }d	}||k r
td| |||||W || S || w )N!underlying stream is not seekablez(telling position disabled by next() callzpending decoded textr   r
   r   r   FTrY  z'can't reconstruct logical file position)rF  rU   ry  r8   ro   rM   re   r  rx  rv  r  r.   rw  r  re  r'   r  rh  r^  range)r[   r  rV  r  Z
next_inputr  saved_stateZ
skip_bytesZ	skip_backr   r"   d	start_posZstart_flagsZ	bytes_fedr  Zchars_decodedir  r   r   r   re   +	  s~   

 

zTextIOWrapper.tellc                 C   s$   |    |d u r|  }| j|S rl   )ro   re   rM   rh   ri   r   r   r   rh   	  s   zTextIOWrapper.truncatec                 C   r   )Nzbuffer is already detached)rM   r/   ro   r   )r[   rM   r   r   r   r   	  r   zTextIOWrapper.detachc                    s   fdd} j rtd jstd|tkr'|dkr tdd}  }n-|tkrT|dkr3td    j	d|} 
d d  _ jrN j  || |S |dkr_td	|f |dk rjtd
|f     |\}}}}}	 j	|  
d d  _|dkr jr j  n js|s|	r jp   _ jd|f |df _|	rԈ j|}
 
 j|
| ||
f _t j|	k rtd|	 _|| |S )Nc                    sL   	 z	 j p  }W n
 ty   Y d S w | dkr |d d S |  d S r   )r  r  rs  rh  rj  )r  r  rd   r   r   _reset_encoder	  s   z*TextIOWrapper.seek.<locals>._reset_encoderr   r  r   z#can't do nonzero cur-relative seeksz#can't do nonzero end-relative seeksr$   zunsupported whence (%r)r   r   z#can't restore logical file position)rq   r/   rF  rU   r   re   r	   ro   rM   r^   r  rx  r  rj  r  r  rh  r   r^  r.   rv  r8   rw  )r[   Zcookierb   r  r  r  r  r  r  r  r  r   rd   r   r^   	  s`   





zTextIOWrapper.seekc                 C   s   |    |d u rd}nz|j}W n ty   t|dw | }| jp(|  }|dk rE|  |j| j	 dd }| 
d d | _|S d}| |}t||k rl|sl|   }|| |t| 7 }t||k rl|rT|S )Nr   r   r   TrY  r$   F)r~   r   r9   r,   r  r  r  r^  rM   r   r  rx  r.   r  )r[   r   r   rV  rJ   r  r   r   r   r   	  s0   



zTextIOWrapper.readc                 C   s(   d| _ |  }|sd | _| j| _ t|S ru   )ry  r   rx  rF  r   r   r   r   r   r   
  s   zTextIOWrapper.__next__c           	      C   s  | j rtd|d u rd}nz|j}W n ty!   t|dw | }|  }d}| js2|   d  }}	 | jrN|	d|}|dkrI|d }nt
|}nU| jr|	d|}|	d|}|dkro|dkrjt
|}n9|d }nb|dkrx|d }nY||k r|d }nP||d kr|d	 }nE|d }n@|	| j}|dkr|t
| j }n.|dkrt
||kr|}n!|  r| jrn|  s| jr||  7 }n
| d
 d | _|S q7|dkr||kr|}| t
||  |d | S )Nr   r   r   r   Tr]  r
   r[  r   r$   )rq   r/   r   r9   r,   r  r  r  r  r   r.   r  r  r  rv  r  rx  r  )	r[   r   r   r   startra   endposZnlposZcrposr   r   r   r   
  s|   



@zTextIOWrapper.readlinec                 C   s   | j r| j jS d S rl   )r  rP  rd   r   r   r   rP  i
  s   zTextIOWrapper.newlines)NNNFFrl   )r   r   Fr   r   )+rV   rW   rX   r  r   r   rm  r{  r   r   r   rB   rK   r|  rM   r  r  rv   r|   r   ro   r?   rq   rS   r6   r3   r   r  r  r  r  r  r  r  r  re   rh   r   r^   r   r   r   rP  r   r   r   r   r=     sp    
-
$




)



*


c

K
	]r=   c                       sP   e Zd Z	 d fdd	Zdd Zdd Zed	d
 Zedd Zdd Z	  Z
S )StringIOr$   r]  c                    sj   t t| jt dd|d |d u rd| _|d ur3t|ts'tdt	|j
| | | d d S d S )Nrl  surrogatepass)r   rB   rC   Fz*initial_value must be str or None, not {0}r   )r   r  r   r   r  r&   r*   r,   r   r}  rV   r   r^   )r[   Zinitial_valuerC   r   r   r   r   u
  s   

zStringIO.__init__c              	   C   sT   |    | jp
|  }| }|  z|j| j ddW || S || w )NTrY  )	ro   r  r  re  rj  r^  rM   r   rh  )r[   rV  Z	old_stater   r   r   r   
  s   zStringIO.getvaluec                 C   s
   t | S rl   )objectr   rd   r   r   r   r   
  s   
zStringIO.__repr__c                 C      d S rl   r   rd   r   r   r   rB   
     zStringIO.errorsc                 C   r  rl   r   rd   r   r   r   r   
  r  zStringIO.encodingc                 C   s   |  d d S r   r_   rd   r   r   r   r   
  s   zStringIO.detach)r$   r]  )rV   rW   rX   r   r   r   r   rB   r   r   r   r   r   r   r   r  n
  s    


r  )r   )r   r   NNNTN)9r(   abcrS  r  r4  r   _threadr   r   platformmsvcrtr   r9  ior   r   r   r	   r  r   addr   	SEEK_DATAr4   r  r   dev_moderr   rt  r   staticmethodrN   rQ   	open_coder9   rT   rU   r8   r/   ABCMetarY   registerr   _ior2   r   r   r   r<   r;   r  r:   rL  rT  rQ  r=   r  r   r   r   r   <module>   s    


 \

  #=
gk  CiIJ  Y@U     )