Ë
    êmxiSÊ  ã                   óØ  — d dl mZ d dlmZ d dlmZ d dlmZ d dlmZm	Z	m
Z
mZmZ d dlmZmZ d dlmZ d dlmZmZ d d	lmZ d d
lmZmZ d dlmZ d dlmZ d dlmZm Z m!Z!m"Z"m#Z#m$Z$ d dl%m&Z&m'Z'm(Z(m)Z) d dl*m+Z+m,Z, d dl-Z-d dl.Z.d dl/Z/d dl0Z0d dl1Z1d dl2Z2d dl3Z3d dl4Z4d dl5Z5d dl6Z6d dl7m8Z8 d dl7Z7d„ Z9 G d„ de+«      Z:e) G d„ de!«      «       Z;e) G d„ de!«      «       Z<e) G d„ de<«      «       Z= G d„ dee;«      Z> G d„ de e;«      Z? G d„ d e=«      Z@ G d!„ d"e=«      ZA G d#„ d$e=«      ZB G d%„ d&e!«      ZC G d'„ d(e!«      ZD G d)„ d*e!«      ZEe& G d+„ d,e<e!«      «       ZF G d-„ d.e7jŽ                  «      ZHy)/é    )ÚFuture)Úgen)Únetutil)ÚIOLoop)ÚIOStreamÚSSLIOStreamÚPipeIOStreamÚStreamClosedErrorÚ_StreamBuffer)ÚAsyncHTTPClientÚHTTPResponse)ÚHTTPHeaders)Ú	ConditionÚEvent)Úgen_log)Ússl_options_to_contextÚssl_wrap_socket)ÚAddThreadSelectorEventLoop)Ú	TCPServer)ÚAsyncHTTPTestCaseÚAsyncHTTPSTestCaseÚAsyncTestCaseÚbind_unused_portÚ	ExpectLogÚgen_test)ÚskipIfNonUnixÚrefusing_portÚignore_deprecationÚabstract_base_test)ÚRequestHandlerÚApplicationN)Úmockc                  ó  — t        t        j                  j                  t        j                  j	                  t
        «      d«      t        j                  j                  t        j                  j	                  t
        «      d«      ¬«      S )Nútest.crtútest.key)ÚcertfileÚkeyfile)ÚdictÚosÚpathÚjoinÚdirnameÚ__file__© ó    úQ/home/htdocs/ttos/venv/lib/python3.12/site-packages/tornado/test/iostream_test.pyÚ_server_ssl_optionsr1   0   sM   € ÜÜ—‘—‘œbŸg™gŸo™o¬hÓ7¸ÓDÜ—‘—‘œRŸW™WŸ_™_¬XÓ6¸
ÓCôð r/   c                   ó   — e Zd Zd„ Zy)ÚHelloHandlerc                 ó&   — | j                  d«       y )NÚHello)Úwrite©Úselfs    r0   ÚgetzHelloHandler.get8   s   € Ø�
‰
�7Õr/   N)Ú__name__Ú
__module__Ú__qualname__r9   r.   r/   r0   r3   r3   7   s   „ ór/   r3   c            	       óº   — e Zd Zd„ Zd„ Zdefd„Z	 ddedede	j                  defd„Zd	„ Zed
„ «       Zed„ «       Zed„ «       Zed„ «       Zed„ «       Zed„ «       Zy)ÚTestIOStreamWebMixinc                 ó   — t        «       ‚©N©ÚNotImplementedErrorr7   s    r0   Ú_make_client_iostreamz*TestIOStreamWebMixin._make_client_iostreamG   ó   € Ü!Ó#Ð#r/   c                 ó&   — t        dt        fg«      S )Nú/)r!   r3   r7   s    r0   Úmixin_get_appz"TestIOStreamWebMixin.mixin_get_appJ   s   € Ü˜S¤,Ð/Ð0Ó1Ð1r/   Úreturnc                 ó   — t        «       ‚r@   rA   r7   s    r0   Úget_http_portz"TestIOStreamWebMixin.get_http_portM   rD   r/   r*   Úraise_errorÚkwargsc                 ó   — t        «       ‚r@   rA   )r8   r*   rK   rL   s       r0   ÚfetchzTestIOStreamWebMixin.fetchP   s   € ô "Ó#Ð#r/   c                 óø   — t        j                  «       j                  j                  d«      r(t	        j
                  «       dk(  r| j                  d«       | j                  dddi¬«      }|j                  «        y )NÚCurlAsyncHTTPClientÚDarwinz:libcurl doesn't handle closed connections cleanly on macOSrF   Ú
ConnectionÚclose)Úheaders)	r   Úconfigured_classr:   ÚendswithÚplatformÚsystemÚskipTestrN   Úrethrow)r8   Úresponses     r0   Útest_connection_closedz+TestIOStreamWebMixin.test_connection_closedV   sc   € ô ×,Ñ,Ó.×7Ñ7×@Ñ@ÐAVÔWÜ—‘Ó! XÒ-ð �M‰MÐVÔWØ—:‘:˜c¨L¸'Ð+B�:ÓCˆØ×ÑÕr/   c              #   ó8  K  — | j                  «       }|j                  d| j                  «       f«      –— |j                  d«       |j	                  «       –—}| j                  |j                  d«      «       | j                  |j                  d«      «       y ­w)Nú	127.0.0.1ó   GET / HTTP/1.0

s   HTTP/1.1 200ó   Hello)rC   ÚconnectrJ   r6   Úread_until_closeÚ
assertTrueÚ
startswithrV   )r8   ÚstreamÚdatas      r0   Útest_read_until_closez*TestIOStreamWebMixin.test_read_until_closei   sy   è ø€ à×+Ñ+Ó-ˆØ�n‰n˜k¨4×+=Ñ+=Ó+?Ð@ÓAÒAØ�‰Ð.Ô/à×,Ñ,Ó.Ñ.ˆØ�‰˜Ÿ™¨Ó8Ô9Ø�‰˜Ÿ™ hÓ/Õ0ùs   ‚BBc              #   ó  K  — | j                  «       | _        | j                  j                  d| j                  «       f«      –— | j                  j	                  d«       | j                  j                  d«      –—}| j                  |d«       | j                  j                  d«      –—}| j                  |d«       | j                  j                  d«      –—}| j                  |d«       | j                  j                  «        y ­w)	Nr^   r_   é	   s	   HTTP/1.1 r   r/   é   s   200)rC   re   ra   rJ   r6   Ú
read_bytesÚassertEqualrS   )r8   rf   s     r0   Útest_read_zero_bytesz)TestIOStreamWebMixin.test_read_zero_bytess   s×   è ø€ à×0Ñ0Ó2ˆŒØ�k‰k×!Ñ! ;°×0BÑ0BÓ0DÐ"EÓFÒFØ�‰×ÑÐ3Ô4ð —[‘[×+Ñ+¨AÓ.Ñ.ˆØ×Ñ˜˜|Ô,ð —[‘[×+Ñ+¨AÓ.Ñ.ˆØ×Ñ˜˜sÔ#ð —[‘[×+Ñ+¨AÓ.Ñ.ˆØ×Ñ˜˜vÔ&à�‰×ÑÕùs   ‚DDc              #   óF  K  — | j                  «       }|j                  d| j                  «       f«      }|j                  d«      }| j	                  |j                  «       «       t        j                  ||«      }g }|j                  «       s>|j                  «       –— |j                  |j                  «       |j                  «       sŒ>| j                  |||g«       |j                  «       –—}| j                  |j                  d«      «       |j                  «        y ­w)Nr^   ó%   GET / HTTP/1.0
Connection: close

r`   )rC   ra   rJ   r6   ÚassertFalseÚdoner   ÚWaitIteratorÚnextÚappendÚcurrent_futurerl   rb   rc   rV   rS   )r8   re   Úconnect_futÚ	write_futÚitÚresolved_orderrf   s          r0   Útest_write_while_connectingz0TestIOStreamWebMixin.test_write_while_connecting‡   sê   è ø€ à×+Ñ+Ó-ˆØ—n‘n k°4×3EÑ3EÓ3GÐ%HÓIˆð —L‘LÐ!OÓPˆ	Ø×Ñ˜×)Ñ)Ó+Ô,ô ×Ñ˜k¨9Ó5ˆØˆØ—'‘'”)Ø—'‘'“)ŠOØ×!Ñ! "×"3Ñ"3Ô4ð —'‘'•)ð 	×Ñ˜¨+°yÐ)AÔBà×,Ñ,Ó.Ñ.ˆØ�‰˜Ÿ™ hÓ/Ô0à�‰�ùs   ‚CD!Ã
AD!c              #   óú  K  — | j                  «       }|j                  d| j                  «       f«      –—}| j                  ||«       |j	                  d«      –— |j                  d«      –—}| j                  |d«       |j                  d«      –—}t        j                  |j                  d«      «      }t        |d   «      }|j                  |«      –—}| j                  |d«       |j                  «        y	­w)
z3Basic test of IOStream's ability to return Futures.r^   r_   ó   
s   HTTP/1.1 200 OK
ó   

Úlatin1zContent-Lengthr`   N)rC   ra   rJ   ÚassertIsr6   Ú
read_untilrl   r   ÚparseÚdecodeÚintrk   rS   )r8   re   Úconnect_resultÚ
first_lineÚheader_datarT   Úcontent_lengthÚbodys           r0   Útest_future_interfacez*TestIOStreamWebMixin.test_future_interface�   sá   è ø€ ð ×+Ñ+Ó-ˆØ%Ÿ~™~¨{¸D×<NÑ<NÓ<PÐ.QÓRÑRˆØ�‰�n fÔ-Ø�l‰lÐ4Ó5Ò5Ø!×,Ñ,¨WÓ5Ñ5ˆ
Ø×Ñ˜Ð%;Ô<à"×-Ñ-¨kÓ:Ñ:ˆÜ×#Ñ# K×$6Ñ$6°xÓ$@ÓAˆÜ˜WÐ%5Ñ6Ó7ˆØ×&Ñ& ~Ó6Ñ6ˆØ×Ñ˜˜xÔ(Ø�‰�ùs   ‚C9C;c              #   ó2  K  — | j                  «       }|j                  d| j                  «       f«      –— |j                  d«      –— | j	                  t
        «      5  |j                  d«      –— d d d «       |j                  «        y # 1 sw Y   ŒxY w­w)Nr^   r_   é   )rC   ra   rJ   r6   ÚassertRaisesr
   rk   rS   ©r8   re   s     r0   Útest_future_close_while_readingz4TestIOStreamWebMixin.test_future_close_while_reading®   s~   è ø€ à×+Ñ+Ó-ˆØ�n‰n˜k¨4×+=Ñ+=Ó+?Ð@ÓAÒAØ�l‰lÐ4Ó5Ò5Ø×ÑÔ0Ó1ñ 	1Ø×#Ñ# KÓ0Ò0÷	1à�‰�÷	1ð 	1üs   ‚ABÁBÁ2BÂBÂBc              #   ó|  K  — | j                  «       }|j                  d| j                  «       f«      –— |j                  d«      –— |j	                  d«      –— |j                  «       –—}| j                  |d«       | j                  t        «      5  |j                  d«       d d d «       y # 1 sw Y   y xY w­w)Nr^   ro   r}   r`   é   )
rC   ra   rJ   r6   r€   rb   rl   rŒ   r
   rk   )r8   re   rˆ   s      r0   Útest_future_read_until_closez1TestIOStreamWebMixin.test_future_read_until_close·   s¨   è ø€ ð ×+Ñ+Ó-ˆØ�n‰n˜k¨4×+=Ñ+=Ó+?Ð@ÓAÒAØ�l‰lÐIÓJÒJØ×Ñ Ó,Ò,Ø×,Ñ,Ó.Ñ.ˆØ×Ñ˜˜xÔ(ð ×ÑÔ0Ó1ñ 	!Ø×Ñ˜aÔ ÷	!÷ 	!ñ 	!üs   ‚BB<ÂB0Â'	B<Â0B9Â5B<N)F)r:   r;   r<   rC   rG   rƒ   rJ   ÚstrÚboolÚtypingÚAnyr   rN   r\   r   rg   rm   rz   r‰   rŽ   r‘   r.   r/   r0   r>   r>   <   sÃ   „ ò$ò2ð$˜só $ð .3ñ$Øð$Ø&*ð$Ø>D¿j¹jð$à	ó$òð& ñ1ó ð1ð ñó ðð& ñó ðð* ñó ðð  ñó ðð ñ!ó ñ!r/   r>   c                   ó˜  — e Zd Zd„ Zd„ Zed„ «       Zed„ «       Zed„ «       Zed„ «       Z	ed„ «       Z
ed„ «       Zed	„ «       Zed
„ «       Zed„ «       Zed„ «       Zed„ «       Zed„ «       Zed„ «       Zed„ «       Zed„ «       Zed„ «       Zed„ «       Zed„ «       Zed„ «       Zed„ «       Zed„ «       Zed„ «       Zed„ «       Zed„ «       Zy)ÚTestReadWriteMixinc                 ó   — t         ‚r@   rA   )r8   rL   s     r0   Úmake_iostream_pairz%TestReadWriteMixin.make_iostream_pairÌ   s   € Ü!Ð!r/   c                 ó(   —  G d„ d«      } || |«      S )zŠLike make_iostream_pair, but called by ``async with``.

        In py37 this becomes simpler with contextlib.asynccontextmanager.
        c                   ó   — e Zd Zd„ Zd„ Zd„ Zy)ú=TestReadWriteMixin.iostream_pair.<locals>.IOStreamPairContextc                 ó    — || _         || _        y r@   )ÚtestrL   )r8   rž   rL   s      r0   Ú__init__zFTestReadWriteMixin.iostream_pair.<locals>.IOStreamPairContext.__init__Ö   s   € Ø �”	Ø$�•r/   c              “   óŒ   K  —  | j                   j                  di | j                  ¤Žƒ d {  –—† | _        | j                  S 7 Œ­w)Nr.   )rž   r™   rL   Úpairr7   s    r0   Ú
__aenter__zHTestReadWriteMixin.iostream_pair.<locals>.IOStreamPairContext.__aenter__Ú   s8   è ø€ Ø"> $§)¡)×">Ñ">Ñ"MÀÇÁÑ"M×M�”	Ø—y‘yÐ ð Nús   ‚*A¬A­Ac              “   óN   K  — | j                   D ]  }|j                  «        Œ y ­wr@   )r¡   rS   )r8   ÚtypÚvalueÚtbÚss        r0   Ú	__aexit__zGTestReadWriteMixin.iostream_pair.<locals>.IOStreamPairContext.__aexit__Þ   s"   è ø€ ØŸ™ò �AØ—G‘G•Iñùs   ‚#%N)r:   r;   r<   rŸ   r¢   r¨   r.   r/   r0   ÚIOStreamPairContextrœ   Õ   s   „ ò%ò!ór/   r©   r.   )r8   rL   r©   s      r0   Úiostream_pairz TestReadWriteMixin.iostream_pairÏ   s   € ÷	ñ 	ñ # 4¨Ó0Ð0r/   c              #   óœ   K  — | j                  «       –—\  }}|j                  d«      –— |j                  «        |j                  «        y ­w)Nr/   )r™   r6   rS   )r8   ÚrsÚwss      r0   Útest_write_zero_bytesz(TestReadWriteMixin.test_write_zero_bytesä   s=   è ø€ ð ×.Ñ.Ó0Ñ0‰ˆˆBØ�h‰h�s‹mÒØ
�‰Œ
Ø
�‰�
ùs   ‚A
Ac              #   ó¸  K  — | j                  «       –—\  }}	 |j                  d«       g }|j                  |j                  d«      –—«       |j	                  «        |j                  |j                  d«      –—«       | j                  |ddg«       |j	                  «        |j	                  «        y # |j	                  «        |j	                  «        w xY w­w)Nó   12r�   ó   1ó   2)r™   r6   rt   rk   rS   rl   )r8   r¬   r­   Úchunkss       r0   Ú"test_future_delayed_close_callbackz5TestReadWriteMixin.test_future_delayed_close_callbackí   s¦   è ø€ ð ×.Ñ.Ó0Ñ0‰ˆˆBð		Ø�H‰H�UŒOØˆFØ�M‰M §¡¨qÓ!1Ñ1Ô3Ø�H‰HŒJØ�M‰M §¡¨qÓ!1Ñ1Ô3Ø×Ñ˜V d¨D \Ô2à�H‰HŒJØ�H‰H�Jøð �H‰HŒJØ�H‰H�Jüs   ‚C™A;B5 Â!CÂ5"CÃCc              #   óÊ  K  — | j                  d¬«      –—\  }}	 |j                  d«       |j                  d«      –—}| j                  d|«       |j	                  «        t        j                  d«      –— |j                  d«      –—}| j                  d|«       |j	                  «        |j	                  «        y # |j	                  «        |j	                  «        w xY w­w)Né   )Úread_chunk_sizes   AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAs   AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAg{®Gáz„?)r™   r6   rk   rl   rS   r   Úsleep©r8   r¬   r­   rf   s       r0   Útest_close_buffered_dataz+TestReadWriteMixin.test_close_buffered_dataý   sµ   è ø€ ð ×.Ñ.¸sÐ.ÓCÑC‰ˆˆBð	Ø�H‰H�ZÔ ØŸ™ sÓ+Ñ+ˆDØ×Ñ˜Z¨Ô.Ø�H‰HŒJô —)‘)˜D“/Ò!ØŸ™ sÓ+Ñ+ˆDØ×Ñ˜Z¨Ô.à�H‰HŒJØ�H‰H�Jøð �H‰HŒJØ�H‰H�Jüs   ‚C#›BB> Â!C#Â>"C Ã C#c              #   ó–  K  — | j                  «       –—\  }}	 |j                  d«       |j                  d«      –—}|j                  «        | j	                  |d«       |j                  «       –—}| j	                  |d«       |j                  «        |j                  «        y # |j                  «        |j                  «        w xY w­w)Ns   1234r�   r±   s   234)r™   r6   rk   rS   rl   rb   r¹   s       r0   Ú!test_read_until_close_after_closez4TestReadWriteMixin.test_read_until_close_after_close  s¢   è ø€ ð ×.Ñ.Ó0Ñ0‰ˆˆBð	Ø�H‰H�WÔð Ÿ™ qÓ)Ñ)ˆDØ�H‰HŒJØ×Ñ˜T 4Ô(Ø×,Ñ,Ó.Ñ.ˆDØ×Ñ˜T 6Ô*à�H‰HŒJØ�H‰H�Jøð �H‰HŒJØ�H‰H�Jüs   ‚C	™A*B$ Â!C	Â$"CÃC	c              #   ó
  K  — | j                  «       –—\  }}	 t        |t        «      r,t        j                  «       dk(  rt        j                  d«      ‚d}t        |«      D ]  }|j                  d«       Œ |j                  d«       |j                  d«      –—}| j                  t        |«      |dz  dz   «       |j                  «        |j                  «        y # |j                  «        |j                  «        w xY w­w)NÚPyPyz$pypy gc causes problems with opensslé   s   AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr|   é   é   )r™   Ú
isinstancer   rW   Úpython_implementationÚunittestÚSkipTestÚranger6   r€   rl   ÚlenrS   )r8   r¬   r­   ÚNUM_KBÚirf   s         r0   Útest_large_read_untilz(TestReadWriteMixin.test_large_read_until*  sÖ   è ø€ ð
 ×.Ñ.Ó0Ñ0‰ˆˆBð	ô
 ˜2œ{Ô+Ü×2Ñ2Ó4¸Ò>ä×'Ñ'Ð(NÓOÐOØˆFÜ˜6“]ò &�Ø—‘˜Õ%ð&à�H‰H�WÔØŸ™ wÓ/Ñ/ˆDØ×ÑœS ›Y¨°©¸Ñ(9Ô:à�H‰HŒJØ�H‰H�Jøð �H‰HŒJØ�H‰H�Jüs   ‚D™B$C Â=!DÃ"D Ä Dc              ƒ   ó¬  K  — | j                  «       4 ƒd {  –—† \  }}t        j                  |j                  d«      «      }t        j                  d«      ƒ d {  –—†  |j                  d«      ƒ d {  –—†  |j                  d«       |j                  «        |ƒ d {  –—†  d d d «      ƒd {  –—†  y 7 Œ�7 Œ[7 ŒD7 Œ7 Œ# 1 ƒd {  –—†7  sw Y   y xY w­w)Nó   doneçš™™™™™¹?ó   xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)rª   ÚasyncioÚensure_futurer€   r¸   r6   rS   ©r8   r¬   r­   Úrfs       r0   Ú.test_read_until_with_close_after_second_packetzATestReadWriteMixin.test_read_until_with_close_after_second_packetC  s´   è ø€ ð ×%Ñ%Ó'÷ 		ð 		©8¨B°Ü×&Ñ& r§}¡}°WÓ'=Ó>ˆBô —-‘- Ó$×$Ð$Ø—(‘(˜;Ó'×'Ð'Ø�H‰H�WÔØ�H‰HŒJØ�HˆH÷		÷ 		ñ 		øð
 %øØ'øð øð		ø÷ 		÷ 		ñ 		üs{   ‚C—B5˜C›A B?ÁB7ÁB?Á4B9Á5*B?ÂB;Â B?Â$CÂ/B=Â0CÂ7B?Â9B?Â;B?Â=CÂ?CÃCÃCÃCc              ƒ   óÂ  K  — | j                  «       4 ƒd {  –—† \  }}t        j                  |j                  d«      «      }|j	                  d«      ƒ d {  –—†  |j	                  d«       |j                  «        | j                  t        «      5  |ƒ d {  –—†  d d d «       d d d «      ƒd {  –—†  y 7 Œž7 Œ`7 Œ!# 1 sw Y   Œ xY w7 Œ# 1 ƒd {  –—†7  sw Y   y xY w­w)NrÌ   rÎ   s   foo)rª   rÏ   rÐ   r€   r6   rS   rŒ   r
   rÑ   s       r0   Ú'test_read_until_unsatisfied_after_closez:TestReadWriteMixin.test_read_until_unsatisfied_after_close[  s¾   è ø€ ð ×%Ñ%Ó'÷ 	ð 	©8¨B°Ü×&Ñ& r§}¡}°WÓ'=Ó>ˆBØ—(‘(˜;Ó'×'Ð'Ø�H‰H�VÔØ�H‰HŒJØ×"Ñ"Ô#4Ó5ñ Ø—�÷÷	÷ 	ñ 	øà'øð ø÷ð úð	ø÷ 	÷ 	ñ 	üs€   ‚C—B6˜C›<C
ÁB8Á:C
ÂB<ÂB:ÂB<ÂC
Â%CÂ0CÂ1CÂ8C
Â:B<Â<C	ÃC
ÃCÃ
CÃCÃCÃCc              #   óâ  K  — d}| j                  «       –—\  }}t        «       }|j                  |j                  «       	 |j	                  |«       |j                  d«      –—}| j                  ||«       |j                  «        |j                  d«       |j                  «       –— |j                  «        |j                  «        y # |j                  «        |j                  «        w xY w­w)Ns   OK
r|   )	r™   r   Úset_close_callbackÚsetr6   r€   rl   rS   Úwait)r8   ÚOKr¬   r­   ÚeventÚress         r0   Ú%test_close_callback_with_pending_readz8TestReadWriteMixin.test_close_callback_with_pending_readi  s¶   è ø€ ð
 ˆØ×.Ñ.Ó0Ñ0‰ˆˆBÜ“ˆØ
×Ñ˜eŸi™iÔ(ð	Ø�H‰H�RŒLØŸ™ gÓ.Ñ.ˆCØ×Ñ˜S "Ô%à�H‰HŒJØ�M‰M˜'Ô"ð —*‘*“,Òà�H‰HŒJØ�H‰H�Jøð �H‰HŒJØ�H‰H�Jüs   ‚=C/Á A)C
 Â)!C/Ã
"C,Ã,C/c              #   ó  ‡‡K  — | j                  «       –—\  }}dgŠt        «       Šˆˆfd„}|j                  |«       	 |j                  d«       |j	                  d«      –—}| j                  |d«       | j                  ‰d   «       |j                  «        ‰j                  «       –— | j                  ‰d   «       |j                  «        |j                  «        y # |j                  «        |j                  «        w xY w­w)NFc                  ó0   •— d‰ d<   ‰j                  «        y )NTr   )Únotify)ÚclosedÚconds   €€r0   Úclose_callbackzETestReadWriteMixin.test_future_close_callback.<locals>.close_callback‰  s   ø€ ØˆF�1‰IØ�K‰K�Mr/   ó   ar�   r   )
r™   r   r×   r6   rk   rl   rp   rS   rÙ   rc   )r8   r¬   r­   rã   rÜ   rá   râ   s        @@r0   Útest_future_close_callbackz-TestReadWriteMixin.test_future_close_callback�  sÐ   ùè ø€ ð ×.Ñ.Ó0Ñ0‰ˆˆBØ�ˆÜ‹{ˆõ	ð 	×Ñ˜nÔ-ð
	Ø�H‰H�TŒNØŸ™ aÓ(Ñ(ˆCØ×Ñ˜S $Ô'Ø×Ñ˜V A™YÔ'Ø�H‰HŒJØ—)‘)“+ÒØ�O‰O˜F 1™IÔ&à�H‰HŒJØ�H‰H�Jøð �H‰HŒJØ�H‰H�Jüs   „:D¿B C  Â?!DÃ "DÄDc              #   óD  K  — | j                  «       –—\  }}	 |j                  d«      }|j                  t        d«      «       |–—}| j	                  |d«       |j                  «        |j                  «        y # |j                  «        |j                  «        w xY w­w)Né   ó   hellos   hell)r™   rk   r6   Ú
memoryviewrl   rS   ©r8   r¬   r­   Úfutrf   s        r0   Útest_write_memoryviewz(TestReadWriteMixin.test_write_memoryviewš  s}   è ø€ à×.Ñ.Ó0Ñ0‰ˆˆBð	Ø—-‘- Ó"ˆCØ�H‰H”Z Ó)Ô*Ø‘9ˆDØ×Ñ˜T 7Ô+à�H‰HŒJØ�H‰H�Jøð �H‰HŒJØ�H‰H�Jüs   ‚B ™AA; Á!B Á;"BÂB c              #   óø  K  — | j                  «       –—\  }}	 |j                  dd¬«      }|j                  d«       |–—}| j                  |d«       |j                  dd¬«      }|j                  d«       |–—}| j                  |d«       |j                  dd¬«      –—}| j                  |d	«       |j	                  «        |j	                  «        y # |j	                  «        |j	                  «        w xY w­w)
Né2   T©Úpartialrè   rj   s   worldó   worr   r/   )r™   rk   r6   rl   rS   rê   s        r0   Útest_read_bytes_partialz*TestReadWriteMixin.test_read_bytes_partial¦  sÚ   è ø€ à×.Ñ.Ó0Ñ0‰ˆˆBð	à—-‘- ¨D�-Ó1ˆCØ�H‰H�XÔØ‘9ˆDØ×Ñ˜T 8Ô,ð —-‘- ¨4�-Ó0ˆCØ�H‰H�XÔØ‘9ˆDØ×Ñ˜T 6Ô*ð Ÿ™ q°$˜Ó7Ñ7ˆDØ×Ñ˜T 3Ô'à�H‰HŒJØ�H‰H�Jøð �H‰HŒJØ�H‰H�Jüs   ‚C:™BC Â4!C:Ã"C7Ã7C:c              #   óÊ  K  — | j                  «       –—\  }}t        «       }|j                  |j                  «       	 |j	                  dd¬«      }|j                  d«       |–—}| j                  |d«       |j	                  dd¬«      }|j                  d«       |–—}| j                  |d«       t        t        dt        j                  ¬«      5  |j	                  dd¬«      }|j                  d	«       |j                  «       –— d d d «       |j                  «        |j                  «        y # 1 sw Y   Œ*xY w# |j                  «        |j                  «        w xY w­w©
Nó   defrî   ©Ú	max_bytesó   abcdefé   úUnsatisfiable read©Úlevelé   ó   123456)r™   r   r×   rØ   r€   r6   rl   r   r   ÚloggingÚINFOrÙ   rS   ©r8   r¬   r­   rá   rë   rf   s         r0   Útest_read_until_max_bytesz,TestReadWriteMixin.test_read_until_max_bytes¿  s  è ø€ à×.Ñ.Ó0Ñ0‰ˆˆBÜ“ˆØ
×Ñ˜fŸj™jÔ)ð	à—-‘- °"�-Ó5ˆCØ�H‰H�YÔØ‘9ˆDØ×Ñ˜T 9Ô-ð —-‘- °!�-Ó4ˆCØ�H‰H�YÔØ‘9ˆDØ×Ñ˜T 9Ô-ô œ7Ð$8ÄÇÁÔMñ $Ø—m‘m F°a�mÓ8�Ø—‘˜Ô#Ø—k‘k“mÒ#÷$ð
 �H‰HŒJØ�H‰H�J÷$ð $ûð
 �H‰HŒJØ�H‰H�Jüó5   ‚;E#¾BD> Ã7D2Ä	D> Ä!E#Ä2D;Ä7D> Ä>"E Å E#c              #   ó:  K  — | j                  «       –—\  }}t        «       }|j                  |j                  «       	 |j	                  d«       t        t        dt        j                  ¬«      5  | j                  t        «      5  |j                  dd¬«      –— d d d «       d d d «       |j                  «       –— |j                  «        |j                  «        y # 1 sw Y   ŒDxY w# 1 sw Y   ŒHxY w# |j                  «        |j                  «        w xY w­w©Nrþ   rú   rû   rõ   rý   rö   )r™   r   r×   rØ   r6   r   r   rÿ   r   rŒ   r
   r€   rÙ   rS   ©r8   r¬   r­   rá   s       r0   Ú test_read_until_max_bytes_inlinez3TestReadWriteMixin.test_read_until_max_bytes_inlineÛ  sØ   è ø€ à×.Ñ.Ó0Ñ0‰ˆˆBÜ“ˆØ
×Ñ˜fŸj™jÔ)ð	ð
 �H‰H�YÔÜœ7Ð$8ÄÇÁÔMñ =Ø×&Ñ&Ô'8Ó9ñ =ØŸ-™-¨¸!˜-Ó<Ò<÷=÷=ð —+‘+“-Òà�H‰HŒJØ�H‰H�J÷=ð =ú÷=ð =ûð
 �H‰HŒJØ�H‰H�JüsL   ‚;D¾1C6 Á/C*ÂCÂC*Â#C6 Â=!DÃC'	Ã#C*Ã*C3Ã/C6 Ã6"DÄDc              #   óâ  K  — | j                  «       –—\  }}t        «       }|j                  |j                  «       	 |j	                  d«       t        t        dt        j                  ¬«      5  |j                  dd¬«       |j                  «       –— d d d «       |j                  «        |j                  «        y # 1 sw Y   Œ*xY w# |j                  «        |j                  «        w xY w­w©Nrø   rú   rû   rõ   rý   rö   )r™   r   r×   rØ   r6   r   r   rÿ   r   r€   rÙ   rS   r  s       r0   Ú'test_read_until_max_bytes_ignores_extraz:TestReadWriteMixin.test_read_until_max_bytes_ignores_extraî  s±   è ø€ à×.Ñ.Ó0Ñ0‰ˆˆBÜ“ˆØ
×Ñ˜fŸj™jÔ)ð
	ð �H‰H�YÔÜœ7Ð$8ÄÇÁÔMñ $Ø—‘˜f°�Ô2Ø—k‘k“mÒ#÷$ð �H‰HŒJØ�H‰H�J÷$ð $ûð �H‰HŒJØ�H‰H�Jüó4   ‚;C/¾1C
 Á/&B>ÂC
 Â!C/Â>CÃC
 Ã
"C,Ã,C/c              #   óÊ  K  — | j                  «       –—\  }}t        «       }|j                  |j                  «       	 |j	                  dd¬«      }|j                  d«       |–—}| j                  |d«       |j	                  dd¬«      }|j                  d«       |–—}| j                  |d«       t        t        dt        j                  ¬«      5  |j	                  dd¬«       |j                  d	«       |j                  «       –— d d d «       |j                  «        |j                  «        y # 1 sw Y   Œ*xY w# |j                  «        |j                  «        w xY w­wrô   )r™   r   r×   rØ   Úread_until_regexr6   rl   r   r   rÿ   r   rÙ   rS   r  s         r0   Útest_read_until_regex_max_bytesz2TestReadWriteMixin.test_read_until_regex_max_bytesÿ  s&  è ø€ à×.Ñ.Ó0Ñ0‰ˆˆBÜ“ˆØ
×Ñ˜fŸj™jÔ)ð	à×%Ñ% f¸Ð%Ó;ˆCØ�H‰H�YÔØ‘9ˆDØ×Ñ˜T 9Ô-ð ×%Ñ% f¸Ð%Ó:ˆCØ�H‰H�YÔØ‘9ˆDØ×Ñ˜T 9Ô-ô œ7Ð$8ÄÇÁÔMñ $Ø×#Ñ# F°aÐ#Ô8Ø—‘˜Ô#Ø—k‘k“mÒ#÷$ð
 �H‰HŒJØ�H‰H�J÷$ð $ûð
 �H‰HŒJØ�H‰H�Jür  c              #   óâ  K  — | j                  «       –—\  }}t        «       }|j                  |j                  «       	 |j	                  d«       t        t        dt        j                  ¬«      5  |j                  dd¬«       |j                  «       –— d d d «       |j                  «        |j                  «        y # 1 sw Y   Œ*xY w# |j                  «        |j                  «        w xY w­wr  ©r™   r   r×   rØ   r6   r   r   rÿ   r   r  rÙ   rS   r  s       r0   Ú&test_read_until_regex_max_bytes_inlinez9TestReadWriteMixin.test_read_until_regex_max_bytes_inline  s´   è ø€ à×.Ñ.Ó0Ñ0‰ˆˆBÜ“ˆØ
×Ñ˜fŸj™jÔ)ð	ð
 �H‰H�YÔÜœ7Ð$8ÄÇÁÔMñ $Ø×#Ñ# F°aÐ#Ô8Ø—k‘k“mÒ#÷$ð �H‰HŒJØ�H‰H�J÷$ð $ûð �H‰HŒJØ�H‰H�Jür  c              #   óâ  K  — | j                  «       –—\  }}t        «       }|j                  |j                  «       	 |j	                  d«       t        t        dt        j                  ¬«      5  |j                  dd¬«       |j                  «       –— d d d «       |j                  «        |j                  «        y # 1 sw Y   Œ*xY w# |j                  «        |j                  «        w xY w­wr	  r  r  s       r0   Ú-test_read_until_regex_max_bytes_ignores_extraz@TestReadWriteMixin.test_read_until_regex_max_bytes_ignores_extra-  s´   è ø€ à×.Ñ.Ó0Ñ0‰ˆˆBÜ“ˆØ
×Ñ˜fŸj™jÔ)ð
	ð �H‰H�YÔÜœ7Ð$8ÄÇÁÔMñ $Ø×#Ñ# F°aÐ#Ô8Ø—k‘k“mÒ#÷$ð �H‰HŒJØ�H‰H�J÷$ð $ûð �H‰HŒJØ�H‰H�Jür  c              #   óZ  K  — | j                  d¬«      –—\  }}	 |j                  ddz  «       t        d«      D ]'  }|j                  d«      –—}| j	                  |d«       Œ) 	 |j                  «        |j                  «        y # |j                  «        |j                  «        w xY w­w)Né (  ©Úmax_buffer_sizes   aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaéd   rÀ   )r™   r6   rÆ   rk   rl   rS   ©r8   r¬   r­   rÉ   rf   s        r0   Ú"test_small_reads_from_large_bufferz5TestReadWriteMixin.test_small_reads_from_large_buffer>  s•   è ø€ ð
 ×.Ñ.¸yÐ.ÓIÑI‰ˆˆBð	Ø�H‰H�[ 3Ñ&Ô'Ü˜3“Zò 4�ØŸ]™]¨4Ó0Ñ0�Ø× Ñ   {Õ3ñ4ð �H‰HŒJØ�H‰H�Jøð �H‰HŒJØ�H‰H�Jüs   ‚B+›A	B Á%!B+Â"B(Â(B+c              #   ó^  K  — | j                  d¬«      –—\  }}	 |j                  ddz  «       t        d«      D ])  }|j                  dd¬«      –—}| j	                  |d«       Œ+ 	 |j                  «        |j                  «        y # |j                  «        |j                  «        w xY w­w)Nr  r  s   aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
r  ó   
r¿   rö   )r™   r6   rÆ   r€   rl   rS   r  s        r0   Ú(test_small_read_untils_from_large_bufferz;TestReadWriteMixin.test_small_read_untils_from_large_bufferM  s›   è ø€ ð
 ×.Ñ.¸yÐ.ÓIÑI‰ˆˆBð	Ø�H‰HÐ)¨SÑ0Ô1Ü˜3“Zò <�ØŸ]™]¨5¸D˜]ÓAÑA�Ø× Ñ  Ð':Õ;ñ<ð �H‰HŒJØ�H‰H�Jøð �H‰HŒJØ�H‰H�Jüs   ‚B-›AB Á'!B-Â"B*Â*B-c              #   ó”  K  — d}| j                  d|z  ¬«      –—\  }}	 |j                  d|z  «       |j                  |«      –— t        j                  d«      –— t        d«      D ]  }|j                  |«      –— Œ 	 |j                  «        |j                  «        y # |j                  «        |j                  «        w xY w­w)Nr‹   rý   r  s
   aaaaaaaaaarÍ   ri   )r™   r6   rk   r   r¸   rÆ   rS   )r8   ÚMBr¬   r­   rÉ   s        r0   Útest_flow_controlz$TestReadWriteMixin.test_flow_control\  s¨   è ø€ àˆØ×.Ñ.¸qÀ2¹vÐ.ÓFÑF‰ˆˆBð	à�H‰H�Y ‘^Ô$à—-‘- Ó#Ò#Ü—)‘)˜C“.Ò ô ˜1“Xò (�Ø—m‘m BÓ'Ó'ñ(ð �H‰HŒJØ�H‰H�Jøð �H‰HŒJØ�H‰H�Jüs   ‚C A!B# Â!CÂ#"CÃCc              #   ó¨  ‡ K  — ‰ j                  «       –—\  }}ˆ fd„}	 t        d«      }|j                  |«      }|j                  d«       t	        j
                  d«      –— ‰ j                  |j                  «       «       |j                  d«       |–—}‰ j                  |j                  «       «       ‰ j                  |d«       ‰ j                  t        |«      d«       |j                  |«      }t	        j
                  d«      –— ‰ j                  |j                  «       «       |j                  d«       |–—}‰ j                  |j                  «       «       ‰ j                  |d«       ‰ j                  t        |«      d«       t        d	«      }|j                  d
«       |j                  |«      –—}‰ j                  |d	«       ‰ j                  t        |«      d«       |j                  d«      –—}‰ j                  |d«       |j                  «        |j                  «        y # |j                  «        |j                  «        w xY w­w)Nc                  ó>   •— ‰ j                   j                  d„ «       y )Nc                  ó,   — t        j                  d«      S )Nçš™™™™™©?)r   r¸   r.   r/   r0   ú<lambda>zGTestReadWriteMixin.test_read_into.<locals>.sleep_some.<locals>.<lambda>s  s   € ¬#¯)©)°D«/€ r/   )Úio_loopÚrun_syncr7   s   €r0   Ú
sleep_somez5TestReadWriteMixin.test_read_into.<locals>.sleep_somer  s   ø€ Ø�L‰L×!Ñ!Ñ"9Õ:r/   é
   rè   r$  s   world!!s
   helloworlds
   1234567890s
   !!12345678rç   s	   abcdefghis   90abé   s   cdefghi)r™   Ú	bytearrayÚ	read_intor6   r   r¸   rc   Úreadingrp   rl   Úbytesrk   rS   )r8   r¬   r­   r(  Úbufrë   rf   s   `      r0   Útest_read_intoz!TestReadWriteMixin.test_read_inton  sÃ  øè ø€ à×.Ñ.Ó0Ñ0‰ˆˆBô	;ð!	Ü˜B“-ˆCØ—,‘,˜sÓ#ˆCØ�H‰H�XÔÜ—)‘)˜D“/Ò!Ø�O‰O˜BŸJ™J›LÔ)Ø�H‰H�ZÔ Ø‘9ˆDØ×Ñ˜RŸZ™Z›\Ô*Ø×Ñ˜T 2Ô&Ø×ÑœU 3›Z¨Ô7ð —,‘,˜sÓ#ˆCÜ—)‘)˜D“/Ò!Ø�O‰O˜BŸJ™J›LÔ)Ø�H‰H�]Ô#Ø‘9ˆDØ×Ñ˜RŸZ™Z›\Ô*Ø×Ñ˜T 2Ô&Ø×ÑœU 3›Z¨Ô7ô ˜A“,ˆCØ�H‰H�\Ô"ØŸ™ cÓ*Ñ*ˆDØ×Ñ˜T 1Ô%Ø×ÑœU 3›Z¨Ô1àŸ™ qÓ)Ñ)ˆDØ×Ñ˜T :Ô.à�H‰HŒJØ�H‰H�Jøð �H‰HŒJØ�H‰H�Jüs   ƒIŸG-H- È!IÈ-"IÉIc              #   óê  K  — | j                  «       –—\  }}	 t        d«      }|j                  |d¬«      }|j                  d«       |–—}| j	                  |j                  «       «       | j                  |d«       | j                  t        |«      d«       |j                  d«       |j                  |d¬«      –—}| j                  |d«       | j                  t        |«      d«       |j                  |d¬«      –—}| j                  |d	«       | j                  t        |«      d
«       |j                  «        |j                  «        y # |j                  «        |j                  «        w xY w­w)Nr)  Trï   rè   rý   s
   hello     s   world!1234567890s
   world!1234rù   s
   5678901234)	r™   r+  r,  r6   rp   r-  rl   r.  rS   )r8   r¬   r­   r/  rë   rf   s         r0   Útest_read_into_partialz)TestReadWriteMixin.test_read_into_partial˜  s3  è ø€ à×.Ñ.Ó0Ñ0‰ˆˆBð	ä˜B“-ˆCØ—,‘,˜s¨D�,Ó1ˆCØ�H‰H�XÔØ‘9ˆDØ×Ñ˜RŸZ™Z›\Ô*Ø×Ñ˜T 1Ô%Ø×ÑœU 3›ZÐ);Ô<ð �H‰HÐ(Ô)ØŸ™ c°4˜Ó8Ñ8ˆDØ×Ñ˜T 2Ô&Ø×ÑœU 3›Z¨Ô7ð Ÿ™ c°4˜Ó8Ñ8ˆDØ×Ñ˜T 1Ô%Ø×ÑœU 3›Z¨Ô7ð �H‰HŒJØ�H‰H�Jøð �H‰HŒJØ�H‰H�Jüs   ‚E3™DE Ä-!E3Å"E0Å0E3c              #   ó8  K  — | j                  «       –—\  }}	 t        «       }|j                  |«      }| j                  |j	                  «       d«       |j                  «        |j                  «        y # |j                  «        |j                  «        w xY w­w©Nr   )r™   r+  r,  rl   ÚresultrS   )r8   r¬   r­   r/  rë   s        r0   Útest_read_into_zero_bytesz,TestReadWriteMixin.test_read_into_zero_bytesµ  sr   è ø€ à×.Ñ.Ó0Ñ0‰ˆˆBð	Ü“+ˆCØ—,‘,˜sÓ#ˆCØ×Ñ˜SŸZ™Z›\¨1Ô-à�H‰HŒJØ�H‰H�Jøð �H‰HŒJØ�H‰H�Jüs   ‚B™;A5 Á!BÁ5"BÂBc              #   ó   ‡‡‡‡‡‡K  — t        j                  d«      ŠdŠ| j                  «       –—\  ŠŠt        j                  «       Št        j                  «       Št
        j                  ˆˆˆˆfd„«       }t
        j                  ˆˆˆˆfd„«       }	  |«        |«       g–— ‰j                  «       ‰j                  «       k(  sJ ‚	 ‰j                  «        ‰j                  «        y # ‰j                  «        ‰j                  «        w xY w­w)Né*   i@B c               3   óê   •K  — ‰} | dkD  r`‰j                  dt        d| «      «      }t        j                  |«      }‰j	                  |«       ‰j                  |«      –— | |z  } | dkD  rŒ`| dk(  sJ ‚y ­w)Nr   r�   éè  )ÚrandintÚminr)   ÚurandomÚupdater6   )Ú	remainingÚsizerf   ÚnbytesÚproduce_hashÚrr­   s      €€€€r0   Úproducez9TestReadWriteMixin.test_many_mixed_reads.<locals>.produceÌ  su   øè ø€ àˆIØ˜a’-Ø—y‘y ¤C¨¨iÓ$8Ó9�Ü—z‘z $Ó'�Ø×#Ñ# DÔ)Ø—h‘h˜t“nÒ$Ø˜TÑ!�	ð ˜a“-ð  ’>Ð!‘>ùs   ƒA'A3Á+A3c               3   ó–  •K  — ‰} | dkD  r¶‰j                  «       dkD  rF‰j                  dt        d| «      «      }‰j                  |«      –—}‰j	                  |«       | |z  } nW‰j                  dt        d| «      «      }t        |«      }‰j                  |«      –—}||k(  sJ ‚‰j	                  |«       | |z  } | dkD  rŒ¶| dk(  sJ ‚y ­w)Nr   g      à?r�   r:  )Úrandomr;  r<  rk   r>  r+  r,  )	r?  r@  rf   r/  ÚnÚconsume_hashrA  rC  r¬   s	        €€€€r0   Úconsumez9TestReadWriteMixin.test_many_mixed_reads.<locals>.consume×  sÏ   øè ø€ àˆIØ˜a’-Ø—8‘8“: Ò#àŸ9™9 Q¬¨D°)Ó(<Ó=�DØ!#§¡¨tÓ!4Ñ4�DØ ×'Ñ'¨Ô-Ø Ñ%‘Ið Ÿ9™9 Q¬¨D°)Ó(<Ó=�DÜ# D›/�CØ Ÿl™l¨3Ó/Ñ/�AØ š9Ð$˜9Ø ×'Ñ'¨Ô,Ø Ñ%�Ið ˜a“-ð  ’>Ð!‘>ùs   ƒB=C	ÃC	)	rF  ÚRandomr™   ÚhashlibÚsha1r   Ú	coroutineÚ	hexdigestrS   )	r8   rD  rI  rH  rA  rB  rC  r¬   r­   s	      @@@@@@r0   Útest_many_mixed_readsz(TestReadWriteMixin.test_many_mixed_readsÀ  sÐ   ýè ø€ ô
 �M‰M˜"ÓˆØˆØ×.Ñ.Ó0Ñ0‰ˆˆBä—|‘|“~ˆÜ—|‘|“~ˆä	�‰ö	"ó 
ð	"ô 
�‰ö	"ó 
ð	"ð&	Ù“9™g›iÐ(Ò(Ø×)Ñ)Ó+¨|×/EÑ/EÓ/GÒGÐGÑGà�H‰HŒJØ�H‰H�Jøð �H‰HŒJØ�H‰H�Jüs   ˆBDÂ3C) Ã!DÃ)"DÄDN)r:   r;   r<   r™   rª   r   r®   r´   rº   r¼   rÊ   rÓ   rÕ   rÝ   rå   rì   rò   r  r  r
  r  r  r  r  r  r   r0  r2  r6  rO  r.   r/   r0   r—   r—   Ç   sí  „ ò
"ò1ð* ñó ðð ñó ðð ñó ðð2 ñó ðð$ ñó ðð0 ñó ðð. ñó ðð ñó ðð. ñó ðð0 ñ	ó ð	ð ñó ðð0 ñó ðð6 ñó ðð$ ñó ðð  ñó ðð6 ñó ðð" ñó ðð  ñó ðð ñó ðð ñó ðð" ñ'ó ð'ðR ñó ðð8 ñó ðð ñ/ó ñ/r/   r—   c                   ó¦   — e Zd Zd„ Zd„ Zej                  d„ «       Zed„ «       Z	ed„ «       Z
ed„ «       Zeed„ «       «       Zed„ «       Zed	„ «       Zy
)ÚTestIOStreamMixinc                 ó   — t        «       ‚r@   rA   ©r8   Ú
connectionrL   s      r0   Ú_make_server_iostreamz'TestIOStreamMixin._make_server_iostreamõ  rD   r/   c                 ó   — t        «       ‚r@   rA   rS  s      r0   rC   z'TestIOStreamMixin._make_client_iostreamø  rD   r/   c              +   óš  ‡ ‡‡K  — t        «       \  }}t        «       Šˆˆ ˆfd„}t        j                  ||«        ‰ j                  t        j
                  «       fi ‰¤Ž}|j                  d|f«      }‰|g–—\  }}‰ j                  j                  |j                  «       «       |j                  «        t        j                  ||f«      ‚­w)Nc                 óJ   •— ‰j                   ‰j                  | fi ‰¤Ž«       y r@   )Ú
set_resultrU  )rT  ÚaddressrL   r8   Úserver_stream_futs     €€€r0   Úaccept_callbackz=TestIOStreamMixin.make_iostream_pair.<locals>.accept_callback   s&   ø€ Ø×(Ñ(Ø*�×*Ñ*¨:Ñ@¸Ñ@õr/   r^   )r   r   r   Úadd_accept_handlerrC   Úsocketra   r&  Úremove_handlerÚfilenorS   r   ÚReturn)	r8   rL   ÚlistenerÚportr\  Úclient_streamrv   Úserver_streamr[  s	   ``      @r0   r™   z$TestIOStreamMixin.make_iostream_pairû  s­   úè ø€ ä)Ó+‰ˆ�$Ü"›HÐö	ô
 	×"Ñ" 8¨_Ô=Ø2˜×2Ñ2´6·=±=³?ÑMÀfÑMˆØ#×+Ñ+¨[¸$Ð,?Ó@ˆØ.?ÀÐ-MÑ'MÑ$ˆ�}Ø�‰×#Ñ# H§O¡OÓ$5Ô6Ø�‰ÔÜ�j‰j˜-¨Ð7Ó8Ð8ùs   …CCc              #   óì  K  — t        «       \  }}| j                  |«       t        t        j                  «       «      }|j	                  | j
                  «       t        t        dd¬«      5  | j                  t        «      5  |j                  d|f«      –— d d d «       d d d «       | j                  t        |j                  t        «      |j                  «       y # 1 sw Y   ŒFxY w# 1 sw Y   ŒJxY w­w)Nz.*F)Úrequiredr^   )r   Ú
addCleanupr   r^  r×   Ústopr   r   rŒ   r
   ra   rc   rÂ   ÚerrorÚConnectionRefusedError)r8   Úcleanup_funcrc  re   s       r0   Útest_connection_refusedz)TestIOStreamMixin.test_connection_refused  sº   è ø€ ô
 +›_Ñˆ�dØ�‰˜Ô%Üœ&Ÿ-™-›/Ó*ˆà×!Ñ! $§)¡)Ô,ä”w ¨uÔ5ñ 	:Ø×"Ñ"Ô#4Ó5ñ :Ø—n‘n k°4Ð%8Ó9Ò9÷:÷	:ð 	�‰œ
 6§<¡<Ô1GÓHÈ&Ï,É,ÕW÷:ð :ú÷	:ð 	:üs6   ‚A)C4Á+C(ÂCÂC(Â=C4ÃC%	Ã!C(Ã(C1Ã-C4c              #   ó:  K  — t        j                   t         j                  t         j                  d«      }t        |«      }|j	                  | j
                  «       t        j                  dt        j                  t        j                  d«      ¬«      5  | j                  t        «      5  |j                  d«      –— d d d «       | j                  t        |j                   t         j                  «      «       d d d «       y # 1 sw Y   ŒExY w# 1 sw Y   y xY w­w)Nr   zsocket.socket.connectÚboom©Úside_effect)Ú	localhostéP   )r^  ÚAF_INETÚSOCK_STREAMr   r×   ri  r"   ÚpatchÚgaierrorÚerrnoÚEIOrŒ   r
   ra   rc   rÂ   rj  )r8   r§   re   s      r0   Útest_gaierrorzTestIOStreamMixin.test_gaierror  sÎ   è ø€ ô �M‰Mœ&Ÿ.™.¬&×*<Ñ*<¸aÓ@ˆÜ˜!“ˆØ×!Ñ! $§)¡)Ô,Ü�Z‰ZØ#´·±ÄÇÁÈFÓ1Sô
ñ 	Gð ×"Ñ"Ô#4Ó5ñ 8Ø—n‘nÐ%6Ó7Ò7÷8à�O‰OœJ v§|¡|´V·_±_ÓEÔF÷	Gð 	G÷8ð 8ú÷	Gð 	Güs6   ‚BDÂDÂ+DÂ?;DÃ:	DÄD	ÄDÄDÄDc              #   ó¢  K  — | j                  «       –—\  }}	 t        j                  dt        d«      ¬«      5  | j	                  t        d«      5  |j                  «        d d d «       d d d «       |j                  «        |j                  «        y # 1 sw Y   Œ2xY w# 1 sw Y   Œ6xY w# |j                  «        |j                  «        w xY w­w)Nz.tornado.iostream.BaseIOStream._try_inline_readro  rp  )r™   r"   rv  ÚIOErrorÚassertRaisesRegexrb   rS   )r8   ÚserverÚclients      r0   Ú test_read_until_close_with_errorz2TestIOStreamMixin.test_read_until_close_with_error/  s¦   è ø€ à#×6Ñ6Ó8Ñ8‰ˆ�ð		Ü—‘Ø@Ü# F›Oôñ .ð ×+Ñ+¬G°VÓ<ñ .Ø×+Ñ+Ô-÷.÷	.ð �L‰LŒNØ�L‰L�N÷	.ð .ú÷	.ð .ûð �L‰LŒNØ�L‰L�NüsK   ‚C™ B* ¹BÁBÁ!BÁ)B* Á1!CÂB	ÂBÂB'Â#B* Â*"CÃCc              #   ó$  K  — t        j                  «       }t        |j                  t        «      r| j                  d«       | j                  «       –—\  }}	 t        j                  |j                  j                  «       «       | j                  t        j                  «      5  |j                  d«       d d d «       |j                  «        |j                  «        y # 1 sw Y   Œ*xY w# |j                  «        |j                  «        w xY w­w)Nz(AddThreadSelectorEventLoop not supportedr�   )r   ÚcurrentrÂ   Úselector_loopr   rY   r™   r)   rS   r^  r`  rŒ   rj  rk   )r8   r&  r~  r  s       r0   Útest_inline_read_errorz(TestIOStreamMixin.test_inline_read_error=  sÇ   è ø€ ô& —.‘.Ó"ˆÜØ×!Ñ!Ü&ô
ð �M‰MÐDÔEØ#×6Ñ6Ó8Ñ8‰ˆ�ð	Ü�H‰H�V—]‘]×)Ñ)Ó+Ô,Ø×"Ñ"¤6§<¡<Ó0ñ %Ø×!Ñ! !Ô$÷%ð �L‰LŒNØ�L‰L�N÷	%ð %ûð �L‰LŒNØ�L‰L�Nüs7   ‚ADÁAC+ Â$CÂ6C+ Â>!DÃC(Ã$C+ Ã+"DÄDc              #   óØ  ‡K  — | j                  «       –—\  Š}t        «       }‰j                  |j                  «       	 ‰j	                  d«       |j                  d«       ˆfd„}|‰_        t        t        d«      5  |j                  «       –— d d d «       ‰j                  «        |j                  «        y # 1 sw Y   Œ*xY w# ‰j                  «        |j                  «        w xY w­w)Nr�   rä   c                  ó–   •— t        j                  ‰ j                  j                  «       «       ‰ j                  j                  ‰ «       y r@   )r)   rS   r^  r`  Ú	__class__Úread_from_fd)r~  s   €r0   Úfake_read_from_fdzJTestIOStreamMixin.test_async_read_error_logging.<locals>.fake_read_from_fdl  s0   ø€ Ü—‘˜Ÿ™×-Ñ-Ó/Ô0Ø× Ñ ×-Ñ-¨fÕ5r/   zerror on read)r™   r   r×   rØ   rk   r6   rˆ  r   r   rÙ   rS   )r8   r  rá   r‰  r~  s       @r0   Útest_async_read_error_loggingz/TestIOStreamMixin.test_async_read_error_logging_  s¸   øè ø€ ð  $×6Ñ6Ó8Ñ8‰ˆ�Ü“ˆØ×!Ñ! &§*¡*Ô-ð	à×Ñ˜aÔ Ø�L‰L˜Ôô6ð #4ˆFÔäœ7 OÓ4ñ $Ø—k‘k“mÒ#÷$ð �L‰LŒNØ�L‰L�N÷	$ð $ûð �L‰LŒNØ�L‰L�Nüs4   ƒ;C*¿>C Á=B9ÂC Â!C*Â9CÂ>C Ã"C'Ã'C*c              #   ó²  ‡‡‡‡‡	K  — d\  ŠŠd}‰‰z  |z  Š	| j                  ‰	¬«      –—\  ŠŠt        j                  ˆˆˆfd„«       }t        j                  ˆˆˆ	fd„«       }	 t        |«      D �cg c]	  } |«       ‘Œ c} |«       gz   –— ‰j	                  «        ‰j	                  «        yc c}w # ‰j	                  «        ‰j	                  «        w xY w­w)z?
        Test that write() Futures are never orphaned.
        )iˆ  r:  r)  r  c               3   ó^   •K  — d‰z  } t        ‰«      D ]  }‰j                  | «      –— Œ y ­w)Nó   x)rÆ   r6   )rf   rÉ   ÚmrG  r~  s     €€€r0   rD  z4TestIOStreamMixin.test_future_write.<locals>.produce„  s2   øè ø€ à˜!‘8ˆDÜ˜1“Xò )�Ø—l‘l 4Ó(Ó(ñ)ùs   ƒ*-c               3   ól   •K  — d} | ‰k  r(‰j                  ‰«      –—}| t        |«      z  } | ‰k  rŒ'y y ­wr4  )rk   rÇ   )ÚnreadrÜ   r  rŽ  Útotal_bytess     €€€r0   rI  z4TestIOStreamMixin.test_future_write.<locals>.consumeŠ  s?   øè ø€ àˆEØ˜+Ò%Ø"×-Ñ-¨aÓ0Ñ0�Øœ˜S›Ñ!�ð ˜+Õ%ùs   ƒ.4²4N)r™   r   rM  rÆ   rS   )
r8   Ú
nproducersrD  rI  rÉ   r  rŽ  rG  r~  r‘  s
        @@@@@r0   Útest_future_writez#TestIOStreamMixin.test_future_writex  s½   üè ø€ ð ‰ˆˆ1Øˆ
Ø˜!‘e˜jÑ(ˆØ#×6Ñ6À{Ð6ÓSÑS‰ˆ�ä	�‰õ	)ó 
ð	)ô
 
�‰õ	"ó 
ð	"ð	Ü&+¨JÓ&7Ö8 ‘7•9Ò8¹G»I¸;ÑFÒFà�L‰LŒNØ�L‰L�Nùò 9øà�L‰LŒNØ�L‰L�Nüs0   ‡ACÁ#B2 Á0B-Á>B2 Â!CÂ-B2 Â2"CÃCN)r:   r;   r<   rU  rC   r   rM  r™   r   rm  rz  r€  r   r„  rŠ  r“  r.   r/   r0   rQ  rQ  ó  s©   „ ò$ò$ð 	‡]�]ñ9ó ð9ð" ñXó ðXð  ñGó ðGð  ñó ðð Øñó ó ðð@ ñó ðð0 ñó ñr/   rQ  c                   ó   — e Zd Zd„ Zd„ Zy)ÚTestIOStreamWebHTTPc                 ó<   — t        t        j                  «       «      S r@   )r   r^  r7   s    r0   rC   z)TestIOStreamWebHTTP._make_client_iostream™  s   € ÜœŸ™›Ó(Ð(r/   c                 ó"   — | j                  «       S r@   ©rG   r7   s    r0   Úget_appzTestIOStreamWebHTTP.get_appœ  ó   € Ø×!Ñ!Ó#Ð#r/   N©r:   r;   r<   rC   r™  r.   r/   r0   r•  r•  ˜  s   „ ò)ó$r/   r•  c                   ó   — e Zd Zd„ Zd„ Zy)ÚTestIOStreamWebHTTPSc                 óp   — t        t        j                  «       t        t        j                  ¬«      ¬«      S )N©Ú	cert_reqs©Ússl_options)r   r^  r(   ÚsslÚ	CERT_NONEr7   s    r0   rC   z*TestIOStreamWebHTTPS._make_client_iostream¡  s   € Üœ6Ÿ=™=›?¼ÄsÇ}Á}Ô8UÔVÐVr/   c                 ó"   — | j                  «       S r@   r˜  r7   s    r0   r™  zTestIOStreamWebHTTPS.get_app¤  rš  r/   Nr›  r.   r/   r0   r�  r�     s   „ òWó$r/   r�  c                   ó   — e Zd Zd„ Zd„ Zy)ÚTestIOStreamc                 ó   — t        |fi |¤ŽS r@   ©r   rS  s      r0   rU  z"TestIOStream._make_server_iostream©  ó   € Ü˜
Ñ- fÑ-Ð-r/   c                 ó   — t        |fi |¤ŽS r@   r©  rS  s      r0   rC   z"TestIOStream._make_client_iostream¬  rª  r/   N©r:   r;   r<   rU  rC   r.   r/   r0   r§  r§  ¨  s   „ ò.ó.r/   r§  c                   ó   — e Zd Zd„ Zd„ Zy)ÚTestIOStreamSSLc                 ól   — t        t        «       d¬«      }|j                  |dd¬«      }t        |fi |¤ŽS )NT)Úserver_sideF©r°  Údo_handshake_on_connect)r   r1   Úwrap_socketr   )r8   rT  rL   Ússl_ctxs       r0   rU  z%TestIOStreamSSL._make_server_iostream±  sB   € Ü(Ô)<Ó)>ÈDÔQˆØ×(Ñ(ØØØ$)ð )ó 
ˆ
ô
 ˜:Ñ0¨Ñ0Ð0r/   c                 óN   — t        |fdt        t        j                  ¬«      i|¤ŽS )Nr¢  rŸ  )r   r(   r£  r¤  rS  s      r0   rC   z%TestIOStreamSSL._make_client_iostreamº  s+   € ÜØñ
Ü$(´3·=±=Ô$Að
ØEKñ
ð 	
r/   Nr¬  r.   r/   r0   r®  r®  °  s   „ ò1ó
r/   r®  c                   ó   — e Zd Zd„ Zd„ Zy)ÚTestIOStreamSSLContextc                 ó²  — t        j                  t         j                  j                  «      }|j	                  t
        j                  j                  t
        j                  j                  t        «      d«      t
        j                  j                  t
        j                  j                  t        «      d«      «       t        ||dd¬«      }t        |fi |¤ŽS ©Nr$   r%   TFr±  )r£  Úcreate_default_contextÚPurposeÚCLIENT_AUTHÚload_cert_chainr)   r*   r+   r,   r-   r   r   ©r8   rT  rL   Úcontexts       r0   rU  z,TestIOStreamSSLContext._make_server_iostreamÄ  s�   € Ü×,Ñ,¬S¯[©[×-DÑ-DÓEˆØ×ÑÜ�G‰G�L‰LœŸ™Ÿ™¬Ó2°JÓ?Ü�G‰G�L‰LœŸ™Ÿ™¬Ó2°JÓ?ô	
ô %Ø˜¨TÈ5ô
ˆ
ô ˜:Ñ0¨Ñ0Ð0r/   c                 ó°   — t        j                  t         j                  j                  «      }d|_        t         j
                  |_        t        |fd|i|¤ŽS )NFr¢  )r£  rº  r»  ÚSERVER_AUTHÚcheck_hostnamer¤  Úverify_moder   r¾  s       r0   rC   z,TestIOStreamSSLContext._make_client_iostreamÏ  sE   € Ü×,Ñ,¬S¯[©[×-DÑ-DÓEˆØ!&ˆÔÜ!Ÿm™mˆÔÜ˜:ÑE°7ÐE¸fÑEÐEr/   Nr¬  r.   r/   r0   r·  r·  Ã  s   „ ò	1óFr/   r·  c                   óÆ   ‡ — e Zd Zˆ fd„Zˆ fd„Zd„ Zej                  d„ «       Zej                  d„ «       Z	dd„Z
dd„Zed„ «       Zed	„ «       Zed
„ «       Zed„ «       Zˆ xZS )ÚTestIOStreamStartTLSc                 ó†  •— 	 t         ‰| �  «        t        «       \  | _        | _        d | _        t        «       | _        t        j                  | j                  | j                  «       t        t        j                  «       «      | _        | j                  j                  | j                  j!                  d| j                  f«      | j"                  «       | j%                  «        | j                  j                  | j                  | j"                  «       | j%                  «        y # t&        $ r}t)        |«       ‚ d }~ww xY w)Nr^   )ÚsuperÚsetUpr   rb  rc  re  r   Úserver_acceptedr   r]  Úacceptr   r^  rd  r&  Ú
add_futurera   ri  rÙ   Ú	ExceptionÚprint)r8   Úer‡  s     €r0   rÈ  zTestIOStreamStartTLS.setUp×  så   ø€ ð	Ü‰G‰MŒOÜ'7Ó'9Ñ$ˆDŒM˜4œ9Ø!%ˆDÔÜ#)£8ˆDÔ Ü×&Ñ& t§}¡}°d·k±kÔBÜ!)Ü—‘“ó"ˆDÔð �L‰L×#Ñ#Ø×"Ñ"×*Ñ*¨K¸¿¹Ð+CÓDÀdÇiÁiôð �I‰IŒKØ�L‰L×#Ñ# D×$8Ñ$8¸$¿)¹)ÔDØ�I‰I�KøÜò 	Ü�!ŒHØûð	ús   ƒD"D& Ä&	E Ä/D;Ä;E c                 óT  •— | j                   �| j                   j                  «        | j                  �| j                  j                  «        | j                  j	                  | j
                  j                  «       «       | j
                  j                  «        t        ‰| �!  «        y r@   )	re  rS   rd  r&  r_  rb  r`  rÇ  ÚtearDown©r8   r‡  s    €r0   rÐ  zTestIOStreamStartTLS.tearDownë  sy   ø€ Ø×ÑÐ)Ø×Ñ×$Ñ$Ô&Ø×ÑÐ)Ø×Ñ×$Ñ$Ô&Ø�‰×#Ñ# D§M¡M×$8Ñ$8Ó$:Ô;Ø�‰×ÑÔÜ‰ÑÕr/   c                 ó”   — | j                   �| j                  d«       t        |«      | _         | j                  j	                  d «       y )Nzshould only get one connection)re  Úfailr   rÉ  rY  )r8   rT  rZ  s      r0   rÊ  zTestIOStreamStartTLS.acceptô  s<   € Ø×ÑÐ)Ø�I‰IÐ6Ô7Ü% jÓ1ˆÔØ×Ñ×'Ñ'¨Õ-r/   c              #   óØ   K  — | j                   €J ‚| j                   j                  |«       | j                  €J ‚| j                  j                  d«      –—}| j	                  ||«       y ­w©Nr|   )rd  r6   re  r€   rl   ©r8   ÚlineÚ	recv_lines      r0   Úclient_send_linez%TestIOStreamStartTLS.client_send_lineú  óg   è ø€ à×!Ñ!Ð-Ð-Ð-Ø×Ñ× Ñ  Ô&Ø×!Ñ!Ð-Ð-Ð-Ø×,Ñ,×7Ñ7¸Ó@Ñ@ˆ	Ø×Ñ˜˜yÕ)ùó   ‚A(A*c              #   óØ   K  — | j                   €J ‚| j                   j                  |«       | j                  €J ‚| j                  j                  d«      –—}| j	                  ||«       y ­wrÕ  )re  r6   rd  r€   rl   rÖ  s      r0   Úserver_send_linez%TestIOStreamStartTLS.server_send_line  rÚ  rÛ  c                 ój   — | j                   €J ‚| j                   }d | _         |j                  d||«      S )NF)rd  Ú	start_tls)r8   r¢  Úserver_hostnamerd  s       r0   Úclient_start_tlsz%TestIOStreamStartTLS.client_start_tls
  s<   € Ø×!Ñ!Ð-Ð-Ð-Ø×*Ñ*ˆØ!ˆÔØ×&Ñ& u¨k¸?ÓKÐKr/   c                 óh   — | j                   €J ‚| j                   }d | _         |j                  d|«      S )NT)re  rß  )r8   r¢  re  s      r0   Úserver_start_tlsz%TestIOStreamStartTLS.server_start_tls  s:   € Ø×!Ñ!Ð-Ð-Ð-Ø×*Ñ*ˆØ!ˆÔØ×&Ñ& t¨[Ó9Ð9r/   c              #   óˆ  K  — | j                  d«      –— | j                  d«      –— | j                  d«      –— | j                  d«      –— | j                  d«      –— | j                  d«      –— | j                  t        t        j
                  ¬«      «      }| j                  t        «       «      }|–—| _        |–—| _	        | j                  t        | j                  t        «      «       | j                  t        | j                  t        «      «       | j                  d«      –— | j                  d«      –— y ­w)	Ns   220 mail.example.com ready
s   EHLO mail.example.com
s   250-mail.example.com welcome
s   250 STARTTLS
s
   STARTTLS
s   220 Go ahead
rŸ  s   250 mail.example.com welcome
)rÝ  rÙ  rá  r(   r£  r¤  rã  r1   rd  re  rc   rÂ   r   )r8   Úclient_futureÚserver_futures      r0   Útest_start_tls_smtpz(TestIOStreamStartTLS.test_start_tls_smtp  s  è ø€ ð ×#Ñ#Ð$EÓFÒFØ×#Ñ#Ð$@ÓAÒAØ×#Ñ#Ð$GÓHÒHØ×#Ñ#Ð$7Ó8Ò8Ø×#Ñ# OÓ4Ò4Ø×#Ñ#Ð$7Ó8Ò8Ø×-Ñ-¬d¼S¿]¹]Ô.KÓLˆØ×-Ñ-Ô.AÓ.CÓDˆØ#0Ñ0ˆÔØ#0Ñ0ˆÔØ�‰œ
 4×#5Ñ#5´{ÓCÔDØ�‰œ
 4×#5Ñ#5´{ÓCÔDØ×#Ñ#Ð$@ÓAÒAØ×#Ñ#Ð$GÓHÓHùs   ‚E Ec              #   ó¬  K  — | j                  t        «       «      }t        t        d«      5  | j	                  d¬«      }| j                  t        j                  «      5  |–— d d d «       | j                  t        j                  t        j                  f«      5  |–— d d d «       d d d «       y # 1 sw Y   ŒNxY w# 1 sw Y   ŒxY w# 1 sw Y   y xY w­w)Nú	SSL Errorrr  ©rà  )
rã  r1   r   r   rá  rŒ   r£  ÚSSLErrorr^  rj  ©r8   ræ  rå  s      r0   Útest_handshake_failz(TestIOStreamStartTLS.test_handshake_fail+  s³   è ø€ à×-Ñ-Ô.AÓ.CÓDˆä”w Ó,ñ 	$Ø ×1Ñ1À+Ð1ÓNˆMØ×"Ñ"¤3§<¡<Ó0ñ $Ø#Ò#÷$à×"Ñ"¤C§L¡L´&·,±,Ð#?Ó@ñ $Ø#Ò#÷$÷		$ð 	$÷$ð $ú÷$ð $ú÷		$ð 	$üsL   ‚*C¬2CÁB0Á#7CÂB<ÂCÂ'	CÂ0B9	Â5CÂ<C	ÃCÃCÃCc              #   óž  K  — | j                  t        «       «      }t        t        d«      5  | j	                  t        j                  «       d¬«      }| j                  t
        j                  «      5  |–— d d d «       | j                  t        «      5  |–— d d d «       d d d «       y # 1 sw Y   Œ4xY w# 1 sw Y   ŒxY w# 1 sw Y   y xY w­w)Nré  r^   rê  )
rã  r1   r   r   rá  r£  rº  rŒ   rë  rÌ  rì  s      r0   Útest_check_hostnamez(TestIOStreamStartTLS.test_check_hostname6  s¼   è ø€ ð ×-Ñ-Ô.AÓ.CÓDˆÜ”w Ó,ñ 		$Ø ×1Ñ1Ü×*Ñ*Ó,¸kð 2ó ˆMð ×"Ñ"¤3§<¡<Ó0ñ $à#Ò#÷$ð ×"Ñ"¤9Ó-ñ $à#Ò#÷$÷		$ð 		$÷$ð $ú÷$ð $ú÷		$ð 		$üsM   ‚*C¬ACÁ1B)Á6CÂB5ÂCÂ 	CÂ)B2	Â.CÂ5B>	Â:CÃC
ÃCc              #   óZ  K  — t        t        d«      «      j                  d«      }| j                  €J ‚| j                  j	                  |«      –— | j
                  €J ‚| j
                  j                  |j                  «      –—}| j                  t        |«      t        |«      «       y ­w)Nrs  ÚL)	ré   r.  Úcastre  r6   rd  rk   rA  rl   )r8   r/  Úrecvs      r0   Útest_typed_memoryviewz*TestIOStreamStartTLS.test_typed_memoryviewE  s‘   è ø€ ô œ˜r›Ó#×(Ñ(¨Ó-ˆØ×!Ñ!Ð-Ð-Ð-Ø× Ñ ×&Ñ& sÓ+Ò+Ø×!Ñ!Ð-Ð-Ð-à×'Ñ'×2Ñ2°3·:±:Ó>Ñ>ˆØ×Ñœ˜t›¤e¨C£jÕ1ùs   ‚B)B+)NNr@   )r:   r;   r<   rÈ  rÐ  rÊ  r   rM  rÙ  rÝ  rá  rã  r   rç  rí  rï  rô  Ú__classcell__©r‡  s   @r0   rÅ  rÅ  Ö  sŸ   ø„ ôô(ò.ð 	‡]�]ñ*ó ð*ð 	‡]�]ñ*ó ð*óLó:ð ñIó ðIð( ñ$ó ð$ð ñ$ó ð$ð ñ2ó ô2r/   rÅ  c                   ó`   — e Zd Zej                  d„ «       Zed„ «       Zed„ «       Zed„ «       Z	y)ÚWaitForHandshakeTestc              #   óä  K  — d x}}	 t        «       \  }} |t        «       ¬«      }|j                  |«       t        j                  t        j
                  j                  «      }d|_        t        j                  |_	        t        «       5  |xj                  t        t        dd«      z  c_        t        t        j                  «       |¬«      }d d d «       |j                  d|f«      –— | j!                  |j                  j#                  «       «       |�|j%                  «        |�|j'                  «        y y # 1 sw Y   ŒmxY w# |�|j%                  «        |�|j'                  «        w w xY w­w)Nr¡  FÚOP_NO_TLSv1_3r   r^   )r   r1   Ú
add_socketr£  rº  r»  rÁ  rÂ  r¤  rÃ  r   ÚoptionsÚgetattrr   r^  ra   ÚassertIsNotNoneÚcipherri  rS   )r8   Ú
server_clsr~  r  Úsockrc  r´  s          r0   Úconnect_to_serverz&WaitForHandshakeTest.connect_to_serverR  s.  è ø€ àÐˆ�ð	Ü)Ó+‰JˆD�$ÙÔ,?Ó,AÔBˆFØ×Ñ˜dÔ#ä×0Ñ0´·±×1HÑ1HÓIˆGØ%*ˆGÔ"Ü"%§-¡-ˆGÔô $Ó%ñ KØ—’¤7¬3°ÀÓ#CÑC•Ü$¤V§]¡]£_À'ÔJ�÷Kð —.‘. +¨tÐ!4Ó5Ò5Ø× Ñ  §¡×!5Ñ!5Ó!7Ô8àÐ!Ø—‘”ØÐ!Ø—‘•ð "÷Kð Kûð Ð!Ø—‘”ØÐ!Ø—‘•ð "üs7   ‚E0ˆBE Â
AD:ÃAE Ä&E0Ä:EÄ?E Å'E-Å-E0c              #   óz   ‡‡K  — | Št        «       Š G ˆˆfd„dt        «      }| j                  |«      –— ‰–— y ­w)Nc                   ó@   •— e Zd Zˆfd„Zej
                  ˆ fd„«       Zy)úGWaitForHandshakeTest.test_wait_for_handshake_future.<locals>.TestServerc                 ó¤   •— ‰j                  |j                  j                  «       «       ‰j                  j	                  | j
                  |«       y r@   )ÚassertIsNoner^  rÿ  r&  Úspawn_callbackÚhandle_connection)r8   re   rZ  rž   s      €r0   Úhandle_streamzUWaitForHandshakeTest.test_wait_for_handshake_future.<locals>.TestServer.handle_streamu  s8   ø€ Ø×!Ñ! &§-¡-×"6Ñ"6Ó"8Ô9Ø—‘×+Ñ+¨D×,BÑ,BÀFÕKr/   c              3   óT   •K  — |j                  «       –— ‰j                  d «       y ­wr@   ©Úwait_for_handshakerY  )r8   re   Úhandshake_futures     €r0   r	  zYWaitForHandshakeTest.test_wait_for_handshake_future.<locals>.TestServer.handle_connectiony  s$   øè ø€ à×/Ñ/Ó1Ò1Ø ×+Ñ+¨DÕ1ùs   ƒ%(N)r:   r;   r<   r
  r   rM  r	  ©r  rž   s   €€r0   Ú
TestServerr  t  s!   ø„ ôLð �]‰]ó2ó ñ2r/   r  ©r   r   r  ©r8   r  r  rž   s     @@r0   Útest_wait_for_handshake_futurez3WaitForHandshakeTest.test_wait_for_handshake_futureo  s9   ùè ø€ àˆÜ!›8Ð÷	2œô 	2ð ×$Ñ$ ZÓ0Ò0ØÓùó   „7;c              #   óz   ‡‡K  — | Št        «       Š G ˆˆfd„dt        «      }| j                  |«      –— ‰–— y ­w)Nc                   ó8   •— e Zd Zej                  ˆ ˆfd„«       Zy)úVWaitForHandshakeTest.test_wait_for_handshake_already_waiting_error.<locals>.TestServerc              3   ó˜   •K  — |j                  «       }‰j                  t        |j                   «       |–— ‰j                  d «       y ­wr@   )r  rŒ   ÚRuntimeErrorrY  )r8   re   rZ  rë   r  rž   s       €€r0   r
  zdWaitForHandshakeTest.test_wait_for_handshake_already_waiting_error.<locals>.TestServer.handle_stream‡  s>   øè ø€ à×/Ñ/Ó1�Ø×!Ñ!¤,°×0IÑ0IÔJØ’	à ×+Ñ+¨DÕ1ùs   ƒAA
N©r:   r;   r<   r   rM  r
  r  s   €€r0   r  r  †  s   ø„ Ø�]‰]ô2ó ñ2r/   r  r  r  s     @@r0   Ú-test_wait_for_handshake_already_waiting_errorzBWaitForHandshakeTest.test_wait_for_handshake_already_waiting_error�  s9   ùè ø€ àˆÜ!›8Ð÷	2œô 	2ð ×$Ñ$ ZÓ0Ò0ØÓùr  c              #   ór   ‡K  — t        «       Š G ˆfd„dt        «      }| j                  |«      –— ‰–— y ­w)Nc                   ó6   •— e Zd Zej                  ˆ fd„«       Zy)úRWaitForHandshakeTest.test_wait_for_handshake_already_connected.<locals>.TestServerc              3   óx   •K  — |j                  «       –— |j                  «       –— ‰j                  d «       y ­wr@   r  )r8   re   rZ  r  s      €r0   r
  z`WaitForHandshakeTest.test_wait_for_handshake_already_connected.<locals>.TestServer.handle_stream—  s3   øè ø€ à×/Ñ/Ó1Ò1Ø×/Ñ/Ó1Ò1Ø ×+Ñ+¨DÕ1ùs   ƒ7:Nr  )r  s   €r0   r  r  –  s   ø„ Ø�]‰]ó2ó ñ2r/   r  r  )r8   r  r  s     @r0   Ú)test_wait_for_handshake_already_connectedz>WaitForHandshakeTest.test_wait_for_handshake_already_connected’  s4   øè ø€ ä!›8Ðö	2œô 	2ð ×$Ñ$ ZÓ0Ò0ØÓùs   ƒ47N)
r:   r;   r<   r   rM  r  r   r  r  r   r.   r/   r0   rø  rø  Q  sT   „ Ø‡]�]ñó ðð8 ñó ðð" ñó ðð  ñó ñr/   rø  c                   óX   ‡ — e Zd Zˆ fd„Zˆ fd„Zed„ «       Zed„ «       Zed„ «       Zˆ xZ	S )ÚTestIOStreamCheckHostnamec                 ó®  •— t         ‰| �  «        t        «       \  | _        | _        d„ }t        j                  | j                  |«       t        j                  t        j                  j                  «      | _        | j                  j                  t        j                  j                  t        j                  j!                  t"        «      d«      «       y )Nc                 ó¼  — t        j                  t         j                  j                  «      }|j	                  t
        j                  j                  t
        j                  j                  t        «      d«      t
        j                  j                  t
        j                  j                  t        «      d«      «       |j                  | dd¬«      } t        | «       y r¹  )r£  rº  r»  r¼  r½  r)   r*   r+   r,   r-   r³  r   )rT  rZ  r´  s      r0   r\  z8TestIOStreamCheckHostname.setUp.<locals>.accept_callbackª  s’   € Ü×0Ñ0´·±×1HÑ1HÓIˆGØ×#Ñ#Ü—‘—‘œRŸW™WŸ_™_¬XÓ6¸
ÓCÜ—‘—‘œRŸW™WŸ_™_¬XÓ6¸
ÓCôð !×,Ñ,ØØ Ø(-ð -ó ˆJô
 ˜
Õ#r/   r$   )rÇ  rÈ  r   rb  rc  r   r]  r£  rº  r»  rÁ  Úclient_ssl_ctxÚload_verify_locationsr)   r*   r+   r,   r-   )r8   r\  r‡  s     €r0   rÈ  zTestIOStreamCheckHostname.setUp¦  sŠ   ø€ Ü‰‰ŒÜ#3Ó#5Ñ ˆŒ�t”yò	$ô 	×"Ñ" 4§=¡=°/ÔBô "×8Ñ8¼¿¹×9PÑ9PÓQˆÔØ×Ñ×1Ñ1Ü�G‰G�L‰LœŸ™Ÿ™¬Ó2°JÓ?õ	
r/   c                 ó¼   •— | j                   j                  | j                  j                  «       «       | j                  j	                  «        t
        ‰| �  «        y r@   )r&  r_  rb  r`  rS   rÇ  rÐ  rÑ  s    €r0   rÐ  z"TestIOStreamCheckHostname.tearDownÀ  s=   ø€ Ø�‰×#Ñ# D§M¡M×$8Ñ$8Ó$:Ô;Ø�‰×ÑÔÜ‰ÑÕr/   c              ƒ   óÐ   K  — t        t        j                  «       | j                  ¬«      }|j                  d| j                  fd¬«      ƒ d {  –—†  |j                  «        y 7 Œ­w)Nr¡  r^   zfoo.example.comrê  )r   r^  r%  ra   rc  rS   r�   s     r0   Ú
test_matchz$TestIOStreamCheckHostname.test_matchÅ  sX   è ø€ äœVŸ]™]›_¸$×:MÑ:MÔNˆØ�n‰nØ˜$Ÿ)™)Ð$Ø-ð ó 
÷ 	
ð 	
ð 	�‰�ð		
ús   ‚AA&ÁA$ÁA&c              ƒ   ó„  K  — t        t        j                  «       | j                  ¬«      }t        t        dt
        j                  t        j                  «       dk7  ¬«      5  | j                  t        j                  «      5  t        t        dt
        j                  ¬«      5  |j                  d| j                  fd¬	«      ƒ d {  –—†  d d d «       d d d «       t        j                  «       dk7  rt        j                  d
«      ƒ d {  –—†  d d d «       y 7 ŒQ# 1 sw Y   ŒPxY w# 1 sw Y   ŒTxY w7 Œ'# 1 sw Y   y xY w­w)Nr¡  z.*alert bad certificateÚWindows)rü   rg  z0.*(certificate verify failed: Hostname mismatch)rû   r^   úbar.example.comrê  rÍ   )r   r^  r%  r   r   rÿ   ÚWARNINGrW   rX   rŒ   r£  ÚSSLCertVerificationErrorra   rc  rÏ   r¸   r�   s     r0   Útest_no_matchz'TestIOStreamCheckHostname.test_no_matchÎ  s  è ø€ äœVŸ]™]›_¸$×:MÑ:MÔNˆÜÜØ%Ü—/‘/Ü—_‘_Ó&¨)Ñ3ô	
ñ 	)ð ×"Ñ"¤3×#?Ñ#?Ó@ñ 	ÜÜØFÜ!Ÿ/™/ôñ ð
 !Ÿ.™.Ø$ d§i¡iÐ0Ø(9ð )ó ÷ ð ÷÷	ô �‰Ó  IÒ-Ü—m‘m CÓ(×(Ð(÷)	)ð 	)ðø÷ð ú÷	ð 	úð )ø÷)	)ð 	)üsl   ‚A E Á" D4Â!D&Â##DÃD
ÃDÃD&Ã7D4Ä
D2ÄD4Ä	E ÄDÄD#ÄD&Ä&D/	Ä+D4Ä4D=Ä9E c              ƒ   óÒ   K  — d| j                   _        t        t        j                  «       | j                   ¬«      }|j	                  d| j
                  fd¬«      ƒ d {  –—†  y 7 Œ­w)NFr¡  r^   r,  rê  )r%  rÂ  r   r^  ra   rc  r�   s     r0   Útest_check_disabledz-TestIOStreamCheckHostname.test_check_disabledç  sX   è ø€ ð .3ˆ×ÑÔ*ÜœVŸ]™]›_¸$×:MÑ:MÔNˆØ�n‰nØ˜$Ÿ)™)Ð$Ø-ð ó 
÷ 	
ò 	
ús   ‚AA'ÁA%Á A')
r:   r;   r<   rÈ  rÐ  r   r)  r/  r1  rõ  rö  s   @r0   r"  r"  ¡  sI   ø„ ô

ô4ð
 ñó ðð ñ)ó ð)ð0 ñ
ó ô
r/   r"  c                   óP   — e Zd Zej                  d„ «       Zed„ «       Zed„ «       Zy)ÚTestPipeIOStreamc                 ó`   — t        j                  «       \  }}t        |fi |¤Žt        |fi |¤ŽfS r@   )r)   Úpiper	   )r8   rL   rC  Úws       r0   r™   z#TestPipeIOStream.make_iostream_pairõ  s0   € ä�w‰w‹y‰ˆˆ1ä˜AÑ( Ñ(¬,°qÑ*C¸FÑ*CÐCÐCr/   c              #   ó–  K  — | j                  «       –—\  }}|j                  d«       |j                  d«       |j                  d«      –—}| j                  |d«       |j	                  d«      –—}| j                  |d«       |j                  «        |j                  «       –—}| j                  |d«       |j                  «        y ­w)Ns   hels   lo worldó    s   hello rj   rñ   s   ld)r™   r6   r€   rl   rk   rS   rb   r¹   s       r0   Útest_pipe_iostreamz#TestPipeIOStream.test_pipe_iostreamû  s¨   è ø€ à×.Ñ.Ó0Ñ0‰ˆˆBà
�‰�ÔØ
�‰�Ôà—]‘] 4Ó(Ñ(ˆØ×Ñ˜˜yÔ)à—]‘] 1Ó%Ñ%ˆØ×Ñ˜˜vÔ&à
�‰Œ
à×(Ñ(Ó*Ñ*ˆØ×Ñ˜˜uÔ%à
�‰�
ùs   ‚CC	c              #   óò   K  — | j                  «       –—\  }}d}|j                  d|z  «       |j                  |«      –—}| j                  |d|z  «       |j	                  «        |j	                  «        y ­w)Nr‹   r±   )r™   r6   rk   rl   rS   )r8   r¬   r­   Ú	NUM_BYTESrf   s        r0   Útest_pipe_iostream_big_writez-TestPipeIOStream.test_pipe_iostream_big_write  sk   è ø€ à×.Ñ.Ó0Ñ0‰ˆˆBàˆ	ð 	�‰�˜	Ñ!Ô"à—]‘] 9Ó-Ñ-ˆØ×Ñ˜˜t iÑ/Ô0à
�‰Œ
Ø
�‰�
ùs   ‚A5A7N)	r:   r;   r<   r   rM  r™   r   r9  r<  r.   r/   r0   r3  r3  ó  sB   „ à‡]�]ñDó ðDð
 ñó ðð& ñó ñr/   r3  c                   ó<   — e Zd ZdZd„ Zd„ Zd
d„Zd„ Zd„ Zd„ Z	d„ Z
y	)ÚTestStreamBufferz9
    Unit tests for the private _StreamBuffer class.
    c                 ó8   — t        j                  d«      | _         y )Nr8  )rF  rJ  r7   s    r0   rÈ  zTestStreamBuffer.setUp$  s   € Ü—m‘m BÓ'ˆ�r/   c                 óš   — t        |t        t        f«      rt        |«      S t        |t        «      r|j	                  «       S t        |«      ‚r@   )rÂ   r.  r+  ré   ÚtobytesÚ	TypeError)r8   Úbs     r0   Úto_byteszTestStreamBuffer.to_bytes'  s:   € Ü�aœ%¤Ð+Ô,Ü˜“8ˆOÜ˜œ:Ô&Ø—9‘9“;Ðä˜A“,Ðr/   c                 óD   — t        «       }|j                  sJ ‚||_        |S r@   )r   Ú_large_buf_threshold)r8   Úlarge_buf_thresholdr/  s      r0   Úmake_streambufferz"TestStreamBuffer.make_streambuffer/  s%   € Ü‹oˆØ×'Ò'Ð'Ð'Ø#6ˆÔ Øˆ
r/   c                 óD  — d}|dt        |«      z  k  r�| j                  |j                  |«      «      }| j                  |«       | j	                  t        |«      |«       | j                  |j                  |«      ||f«       |dz  dz   dz  }|dt        |«      z  k  rŒŒy y )Nr�   rÁ   rj   )rÇ   rD  Úpeekrc   ÚassertLessEqualrd   )r8   r/  Úexpectedr@  Úgots        r0   Ú
check_peekzTestStreamBuffer.check_peek5  s�   € ØˆØ�Qœ˜X›Ñ&Ò&Ø—-‘- §¡¨£Ó/ˆCØ�O‰O˜CÔ Ø× Ñ ¤ S£¨4Ô0Ø�O‰O˜H×/Ñ/°Ó4°xÀ°oÔFØ˜1‘H˜q‘L QÑ&ˆDð �Qœ˜X›Ñ&Õ&r/   c                 ó  — | j                  t        |«      d«       d}|D ]T  }||z  }|j                   ||«      «       | j                  t        |«      t        |«      «       | j                  ||«       ŒV |rw| j                  j                  dt        |«      dz   «      }||d  }|j                  |«       | j                  t        |«      t        |«      «       | j                  ||«       |rŒw| j                  t        |«      d«       y )Nr   r/   r�   )rl   rÇ   rt   rN  rF  Ú	randrangeÚadvance)r8   r/  ÚobjsÚ
input_typerL  ÚorG  s          r0   Úcheck_append_all_then_skip_allz/TestStreamBuffer.check_append_all_then_skip_all>  sä   € Ø×Ñœ˜S› 1Ô%àˆàò 	+ˆAØ˜‰MˆHØ�J‰J‘z !“}Ô%Ø×ÑœS ›X¤s¨8£}Ô5Ø�O‰O˜C Õ*ð		+ñ Ø—‘×%Ñ% a¬¨X«¸Ñ):Ó;ˆAØ  �|ˆHØ�K‰K˜ŒNØ×ÑœS ›X¤s¨8£}Ô5Ø�O‰O˜C Ô*ò ð 	×Ñœ˜S› 1Õ%r/   c                 ó>  — g d¢}| j                  «       }| j                  ||t        «       | j                  «       }| j                  ||t        «       | j                  «       }| j                  ||t        «       | j                  d«      }t        d«      D ]  }|j                  d«       Œ | j                  t        |j                  «      d«       t        d«      D ]  }|j                  d«       Œ | j                  t        |j                  «      d«       |j                  d«       | j                  t        |j                  «      d«       |j                  d«       | j                  t        |j                  «      d«       | j                  t        |«      d«       y )	N)r°   s   345s   67s   89aó   bcdes   fghs   ijklmnr)  ri   r�  r�   rÁ   é   r   ©rH  rU  r.  r+  ré   rÆ   rt   rl   rÇ   Ú_buffersrQ  ©r8   rR  r/  rÉ   s       r0   Ú
test_smallzTestStreamBuffer.test_smallR  sE  € ÚIˆà×$Ñ$Ó&ˆØ×+Ñ+¨C°´uÔ=à×$Ñ$Ó&ˆØ×+Ñ+¨C°´yÔAà×$Ñ$Ó&ˆØ×+Ñ+¨C°´zÔBð ×$Ñ$ RÓ(ˆÜ�q“ò 	ˆAØ�J‰J�tÕð	à×Ñœ˜SŸ\™\Ó*¨AÔ.Ü�q“ò 	ˆAØ�J‰J�tÕð	à×Ñœ˜SŸ\™\Ó*¨AÔ.Ø�‰�BŒØ×Ñœ˜SŸ\™\Ó*¨AÔ.Ø�‰�AŒØ×Ñœ˜SŸ\™\Ó*¨AÔ.Ø×Ñœ˜S› 1Õ%r/   c                 óŠ  — g d¢}| j                  «       }| j                  ||t        «       | j                  «       }| j                  ||t        «       | j                  «       }| j                  ||t        «       | j                  d«      }t        d«      D ]  }|j                  d«       Œ | j                  t        |j                  «      d«       |j                  d«       | j                  t        |j                  «      d«       |j                  d«       | j                  t        |j                  «      d«       |j                  d«       | j                  t        |j                  «      d	«       |j                  d
«       | j                  t        |j                  «      d«       | j                  t        |«      d«       y )N)s
   1212121212s   345345s(   6767676767676767676767676767676767676767s$   89a89a89a89a89a89a89a89a89a89a89a89arW  s   fghfghfghfghfghfghfghs   ijklmnijklmnr)  rj   s   xxxxxxxxxxxó   yrç   ó   zé!   r�   rÁ   r   rY  r[  s       r0   Ú
test_largezTestStreamBuffer.test_largel  s[  € ò
ˆð ×$Ñ$Ó&ˆØ×+Ñ+¨C°´uÔ=à×$Ñ$Ó&ˆØ×+Ñ+¨C°´yÔAà×$Ñ$Ó&ˆØ×+Ñ+¨C°´zÔBð ×$Ñ$ RÓ(ˆÜ�q“ò 	"ˆAØ�J‰J�yÕ!ð	"à×Ñœ˜SŸ\™\Ó*¨AÔ.Ø�
‰
�4ÔØ×Ñœ˜SŸ\™\Ó*¨AÔ.Ø�
‰
�4ÔØ×Ñœ˜SŸ\™\Ó*¨AÔ.Ø�‰�BŒØ×Ñœ˜SŸ\™\Ó*¨AÔ.Ø�‰�AŒØ×Ñœ˜SŸ\™\Ó*¨AÔ.Ø×Ñœ˜S› 1Õ%r/   N)r)  )r:   r;   r<   Ú__doc__rÈ  rD  rH  rN  rU  r\  ra  r.   r/   r0   r>  r>    s*   „ ñò(òóò'ò&ò(&ó4!&r/   r>  )IÚtornado.concurrentr   Útornador   r   Útornado.ioloopr   Útornado.iostreamr   r   r	   r
   r   Útornado.httpclientr   r   Útornado.httputilr   Útornado.locksr   r   Útornado.logr   Útornado.netutilr   r   Útornado.platform.asyncior   Útornado.tcpserverr   Útornado.testingr   r   r   r   r   r   Útornado.test.utilr   r   r   r   Útornado.webr    r!   rÏ   rx  rK  rÿ   r)   rW   rF  r^  r£  r”   rÄ   r"   r1   r3   r>   r—   rQ  r•  r�  r§  r®  r·  rÅ  rø  r"  r3  ÚTestCaser>  r.   r/   r0   ú<module>rr     s‡  ðÝ %Ý Ý Ý !÷õ ÷ =Ý (ß *Ý ß CÝ ?Ý '÷÷ ÷ó ÷ 4Û Û Û Û Û 	Û Û Û Û 
Û Ý Û òô�>ô ð
 ôG!˜=ó G!ó ðG!ðT ôh˜ó hó ðhðV ôaÐ*ó aó ðaôH$Ð+Ð-Aô $ô$Ð-Ð/Cô $ô.Ð$ô .ô
Ð'ô 
ô&FÐ.ô Fô&x2˜=ô x2ôvM˜=ô Mô`O
 ô O
ðd ô(Ð)¨=ó (ó ð(ôVn&�x×(Ñ(õ n&r/   