a
XC?h�l � @ sz d Z ddlZddlZddlZddlZddlZddlZddlmZ ej
dv rXddlmZ
ndZ
ddlZddlmZmZmZmZ h d�Zeed�r�e�ej� e�ej� d ZeZeed
�p�ejjZeZd6dd�Zdd� Zz
ej Z W n e!� y� eZ Y n0 G dd� d�Z"G dd� d�Z#z
ej$Z$W n& e!�yF G dd� de%e&�Z$Y n0 G dd� dej'd�Z(ej(�)e(� G dd� de(�Z*ej*�)e*� ddl+m,Z, e*�)e,� G dd� de(�Z-ej-�)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(�Z4ej4�)e4� G d0d1� d1ej5�Z6G d2d3� d3e4�Z7G d4d5� d5e7�Z8dS )7z)
Python implementation of the io module.
� N)�
allocate_lock> �cygwinZwin32)�setmode)�__all__�SEEK_SET�SEEK_CUR�SEEK_END> r � � � SEEK_HOLEi Zgettotalrefcount�r�����Tc C s� t | t�st�| �} t | tttf�s0td| ��t |t�sFtd| ��t |t�s\td| ��|durzt |t�sztd| ��|dur�t |t�s�td| ��t|�}|td� s�t|�t|�kr�t d| ��d|v } d |v }
d
|v }d|v }d|v }
d
|v }d|v }d|v �rD| �s"|�s"|�s"|
�r*t d��ddl
}|�dtd� d}
|�rX|�rXt d��| |
| | dk�rvt d��| �s�|
�s�|�s�|�s�t d��|�r�|du�r�t d��|�r�|du�r�t d��|�r�|du�r�t d��|�r|dk�rddl
}|�dt
d� t| | �rd�pd|
�r"d �p$d |�r2d
�p4d |�rBd�pDd |
�rRd�pTd ||d�}|}�z"d}|dk�s�|dk �r�|�� �r�d }d}|dk �r�t}zt�|�� �j}W n ttf�y� Y n0 |dk�r�|}|dk �r�t d!��|dk�r|�r|W S t d"��|
�rt||�}n<| �s0|�s0|�r