PNG  IHDR;IDATxܻn0K )(pA 7LeG{ §㻢|ذaÆ 6lذaÆ 6lذaÆ 6lom$^yذag5bÆ 6lذaÆ 6lذa{ 6lذaÆ `}HFkm,mӪôô! x|'ܢ˟;E:9&ᶒ}{v]n&6 h_tڠ͵-ҫZ;Z$.Pkž)!o>}leQfJTu іچ\X=8Rن4`Vwl>nG^is"ms$ui?wbs[m6K4O.4%/bC%t Mז -lG6mrz2s%9s@-k9=)kB5\+͂Zsٲ Rn~GRC wIcIn7jJhۛNCS|j08yiHKֶۛkɈ+;SzL/F*\Ԕ#"5m2[S=gnaPeғL lذaÆ 6l^ḵaÆ 6lذaÆ 6lذa; _ذaÆ 6lذaÆ 6lذaÆ RIENDB`  lY.@skddlZddlmZGdddejZGdddZGdddZd d ZdS) N)dequec@seZdZdZdZdZdZddddZddZd d Z d d Z d dZ ddZ ddZ ddZddZddZddZddZddZdd Zd!d"Zd#d$Zd%d&ZdS)' async_chatirzlatin-1NcCs8d|_g|_t|_tjj|||dS)N) ac_in_bufferincomingr producer_fifoasyncore dispatcher__init__)selfsockmapr'/opt/python35/lib/python3.5/asynchat.pyr Cs   zasync_chat.__init__cCstddS)Nzmust be implemented in subclass)NotImplementedError)r datarrrcollect_incoming_dataQsz async_chat.collect_incoming_datacCs|jj|dS)N)rappend)r rrrr_collect_incoming_dataTsz!async_chat._collect_incoming_datacCs&dj|j}|jdd=|S)Nr)joinr)r drrr _get_dataWszasync_chat._get_datacCstddS)Nzmust be implemented in subclass)r)r rrrfound_terminator\szasync_chat.found_terminatorcCsat|tr-|jr-t||j}n't|trT|dkrTtd||_dS)Nrz-the number of received bytes must be positive) isinstancestr use_encodingbytesencodingint ValueError terminator)r Ztermrrrset_terminator_s  zasync_chat.set_terminatorcCs|jS)N)r )r rrrget_terminatorjszasync_chat.get_terminatorcCsiy|j|j}WnHtk r.dSYn3tk r`}z|jdSWYdd}~XnXt|tr|jrtt|j }|j ||_ x|j rdt |j }|j }|s|j |j d|_ qt|trw|}||kr1|j |j d|_ |j||_qa|j |j d||j |d|_ d|_|jqt |}|j j|}|dkr|dkr|j |j d||j ||d|_ |jqt|j |}|rH||krD|j |j d| |j | d|_ Pq|j |j d|_ qWdS)Nrr)recvac_in_buffer_sizeBlockingIOErrorOSError handle_errorrrrrrrlenr"rrr rfindfind_prefix_at_end)r rwhyZlbr nZterminator_lenindexrrr handle_readrsR             zasync_chat.handle_readcCs|jdS)N) initiate_send)r rrr handle_writeszasync_chat.handle_writecCs|jdS)N)close)r rrr handle_closeszasync_chat.handle_closecCst|tttfs-tdt||j}t||krxQtdt||D]$}|j j ||||qaWn|j j ||j dS)Nz#data argument must be byte-ish (%r)r) rr bytearray memoryview TypeErrortypeac_out_buffer_sizer*rangerrr1)r rZsabsirrrpushs %zasync_chat.pushcCs|jj||jdS)N)rrr1)r Zproducerrrrpush_with_producerszasync_chat.push_with_producercCsdS)Nr#r)r rrrreadableszasync_chat.readablecCs|jp|j S)N)r connected)r rrrwritableszasync_chat.writablecCs|jjddS)N)rr)r rrrclose_when_doneszasync_chat.close_when_donecCsgx`|jrb|jrb|jd}|sL|jd=|dkrL|jdS|j}y|d|}WnDtk r|j}|r|jj|n |jd=wYnXt|tr|j rt ||j }y|j |}Wn t k r|jdSYnX|r^|t|ks:|t|krT||d|jdr@rAr1rGrrrrr4s*       H       (rc@s+eZdZdddZddZdS)simple_producericCs||_||_dS)N)r buffer_size)r rrLrrrr s zsimple_producer.__init__cCset|j|jkrK|jd|j}|j|jd|_|S|j}d|_|SdS)Nr)r*rrL)r resultrrrrBs  zsimple_producer.moreN)rHrIrJr rBrrrrrKs rKc@s[eZdZdddZddZddZdd Zd d Zd d ZdS)fifoNcCsJddl}|jdtdd|s7t|_nt||_dS)Nrz(fifo class will be removed in Python 3.6 stacklevel)warningswarnDeprecationWarningrlist)r rTrQrrrr !s    z fifo.__init__cCs t|jS)N)r*rT)r rrr__len__*sz fifo.__len__cCs|j S)N)rT)r rrris_empty-sz fifo.is_emptycCs |jdS)Nr)rT)r rrrrE0sz fifo.firstcCs|jj|dS)N)rTr)r rrrrr<3sz fifo.pushcCs$|jrd|jjfSdSdS)Nr#r)rN)rTpopleft)r rrrpop6s zfifo.pop) rHrIrJr rUrVrEr<rXrrrrrN s     rNcCsEt|d}x.|r@|j|d| r@|d8}qW|S)Nr#)r*endswith)ZhaystackZneedlelrrrr,Ls#r,)r collectionsrr rrKrNr,rrrr0s ,