a
XC?h�l � @ sv d dl Z d dlZd dlZd dlZd dlZd dlZd dlmZ ej dv rTd dl
mZ ndZd dl
Z
d dl
mZmZmZmZ h d�Zee d�r�e�e j� e�e j� dZeZeed �p�ejjZeZd5d
d�Zdd� Zz
e
jZW n e � y� eZY n0 G dd� d�Z!G dd� d�Z"z
e
j#Z#W n& e �yB G dd� de$e%�Z#Y n0 G dd� dej&d�Z'e
j'�(e'� G dd� de'�Z)e
j)�(e)� d dl*m+Z+ e)�(e+� G dd� de'�Z,e
j,�(e,� G dd � d e,�Z-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*e0e/�Z2G d+d,� d,e)�Z+G d-d.� d.e'�Z3e
j3�(e3� G d/d0� d0ej4�Z5G d1d2� d2e3�Z6G d3d4� d4e6�Z7dS )6� 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| ��|d urzt |t�sztd| ��|d ur�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��dd l
}|�dtd� d}
|�rX|�rXt d��| |
| | dk�rvt d��| �s�|
�s�|�s�|�s�t d��|�r�|d u�r�t d��|�r�|d u�r�t d��|�r�|d u�r�t d��|�r|dk�rdd l
}|�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