Ë
    aQbjÈŒ  ã                  óD  — d dl mZ d dlZd dlmZ d dlmZ d dlmZm	Z	 d dl
Z
d dlZd dlmZ 	 d dlZd dlmZ d dlZd dlZd dlmZmZ d d	lmZmZ d
dlmZmZmZ erd dlmZ  ej@                  «       Z!e!jE                  d«      Z#ejH                  d:d„«       Z%d:d„Z&ejH                  d:d„«       Z'ejP                  jS                  dd ejT                  de¬«      gddg¬«      Z+d;d„Z,eddddœ	 	 	 	 	 	 	 	 	 d<d„«       Z-e+	 	 	 	 	 	 	 	 d=d„«       Z.e	 	 	 	 	 	 d>d„«       Z/	 	 	 	 	 	 d?d„Z0d?d„Z1	 	 	 	 	 	 d?d„Z2d@d„Z3d@d „Z4dAd!„Z5d@d"„Z6	 	 	 	 	 	 dBd#„Z7ejP                  jS                  d$d%d&g«      	 	 	 	 	 	 	 	 	 	 dCd'„«       Z8	 	 	 	 	 	 dDd(„Z9	 	 	 	 	 	 	 	 dEd)„Z:	 	 	 	 	 	 dDd*„Z;d@d+„Z<e	 	 	 	 	 	 d?d,„«       Z=	 	 	 	 	 	 dDd-„Z>	 	 	 	 	 	 d?d.„Z?e+	 	 	 	 	 	 	 	 	 	 dFd/„«       Z@ejP                  jƒ                  d0«      dGd1„«       ZBejP                  jƒ                  d0«      dAd2„«       ZCejP                  jƒ                  d0«      dAd3„«       ZDejP                  jƒ                  d0«      dAd4„«       ZEdAd5„ZF	 	 	 	 	 	 	 	 dEd6„ZG	 	 	 	 	 	 dDd7„ZH	 	 	 	 d@d8„ZId@d9„ZJy# e$ rZ ee«       Y dZ[�ŒbdZ[ww xY w)Hé    )ÚannotationsN)Úasynccontextmanager)Úcount)ÚTYPE_CHECKINGÚNoReturn)Úskip_if_optional_else_raise)ÚSSL)ÚDTLSChannelÚDTLSEndpoint)ÚFakeNetÚ	UDPPacketé   )Ú
binds_ipv6Úgc_collect_harderÚslow)ÚAsyncGeneratorzexample.comc                 óv   — t        j                  t         j                  «      } t        j	                  | «       | S ©N)r	   ÚContextÚDTLS_METHODÚserver_certÚconfigure_cert©Úctxs    úH/var/www/html/venv/lib/python3.12/site-packages/trio/_tests/test_dtls.pyÚ
server_ctxr   "   s'   € ä
�+‰+”c—o‘oÓ
&€CÜ×Ñ˜sÔ#Ø€Jó    c                 óv   — t        j                  t         j                  «      } t        j	                  | «       | S r   )r	   r   r   ÚcaÚconfigure_trustr   s    r   Úclient_ctx_fnr!   )   s'   € Ü
�+‰+”c—o‘oÓ
&€CÜ×Ñ�sÔØ€Jr   c                 ó   — t        «       S r   )r!   © r   r   Ú
client_ctxr$   /   s
   € ä‹?Ðr   Úipv6FT)ÚmarksÚipv4)Úidsc                 ó  — | j                  dd«      }|rt        j                  j                  nt        j                  j                  }t        j                  j                  t        j                  j
                  |¬«      }t        |fi | ¤ŽS )Nr%   F)ÚtypeÚfamily)ÚpopÚtrioÚsocketÚAF_INET6ÚAF_INETÚ
SOCK_DGRAMr   )Úkwargsr%   r+   Úsocks       r   Úendpointr4   ;   sb   € Ø�:‰:�f˜eÓ$€DÙ%)ŒT�[‰[×!Ò!¬t¯{©{×/BÑ/B€FÜ�;‰;×Ñ¤4§;¡;×#9Ñ#9À&ÐÓI€DÜ˜Ñ' Ñ'Ð'r   )Ú
autocancelÚmtur%   c               ó  ‡K  — t        |¬«      5 }|rdnd}|j                  j                  |df«      ƒ d {  –—†  t        j                  «       4 ƒd {  –—† }dˆfd„}|j                  |j                  | |«      ƒ d {  –—†  ||j                  j                  «       f­–— |r|j                  j                  «        d d d «      ƒd {  –—†  d d d «       y 7 Œ 7 Œ…7 Œ\7 Œ# 1 ƒd {  –—†7  sw Y   Œ#xY w# 1 sw Y   y xY w­w)N©r%   z::1ú	127.0.0.1r   c              “  óâ  •K  — t        d| j                  j                  j                  «       ›d| j                  ›�«       ‰�| j                  ‰«       	 t        d«       | j                  «       ƒ d {  –—†  t        d«       | 2 3 d {  –—† }t        d|›d| j                  ›�«       | j                  |«      ƒ d {  –—†  Œ>7 ŒO7 Œ;7 Œ	6 y # t        j                  $ r t        d«       Y y w xY w­w)Nzecho handler started: server z client zserver starting do_handshakezserver finished do_handshakezechoing ú -> zecho handler channel broken)
Úprintr4   r.   ÚgetsocknameÚpeer_addressÚset_ciphertext_mtuÚdo_handshakeÚsendr-   ÚBrokenResourceError)Údtls_channelÚpacketr6   s     €r   Úecho_handlerz&dtls_echo_server.<locals>.echo_handlerO   sù   øè ø€ ÜðØ*×3Ñ3×:Ñ:×FÑFÓHÐKð LØ*×7Ñ7Ð:ð<ôð
 �?Ø ×3Ñ3°CÔ8ð
9ÜÐ8Ô9Ø&×3Ñ3Ó5×5Ð5ÜÐ8Ô9ð )5÷ 8ð 8˜fÜ ¨¨
°$°|×7PÑ7PÐ6SÐTÔUØ*×/Ñ/°Ó7×7Ñ7ð 6øð8øà7øñ )5øô ×/Ñ/ò 9ÜÐ7Ö8ð9üsl   ƒAC/ÁC Á3CÁ4C ÂC	Â	CÂ
C	Â0C Â=CÂ>C ÃC	ÃC Ã	C Ã
C/ÃC,Ã)C/Ã+C,Ã,C/)rC   r
   ÚreturnÚNone)
r4   r.   Úbindr-   Úopen_nurseryÚstartÚserver=   Úcancel_scopeÚcancel)r   r5   r6   r%   ÚserverÚ	localhostÚnurseryrE   s     `     r   Údtls_echo_serverrQ   B   sè   øè ø€ ô 
�tÔ	ð . Ù!‘E {ˆ	Ø�m‰m× Ñ  )¨Q Ó0×0Ð0Ü×$Ñ$Ó&÷ 	.ð 	.¨'õ9ð( —-‘- §¡¨j¸,ÓG×GÐGà˜&Ÿ-™-×3Ñ3Ó5Ð5Ó5áØ×$Ñ$×+Ñ+Ô-÷7	.÷ 	.÷.ð .à0øð	.øð, Høð-	.ø÷ 	.÷ 	.ñ 	.ú÷.ð .üs†   ƒD�'C5·C¸C5ÁCÁC5Á'C Á?CÂ ?C Â?C5Ã
CÃC5Ã	DÃC5ÃC5ÃC ÃC5Ã C2	Ã&C)Ã'C2	Ã.C5Ã5C>Ã:Dc              ƒ  ó  K  — t        | |¬«      4 ƒd {  –—† \  }}t        | ¬«      5 }|j                  ||«      }t        j                  t
        j                  «      5  |j                  «        d d d «       |j                  «       ƒ d {  –—†  |j                  d«      ƒ d {  –—†  |j                  «       ƒ d {  –—† dk(  sJ ‚|j                  d«      ƒ d {  –—†  |j                  «       ƒ d {  –—† dk(  sJ ‚t        j                  t        d¬«      5  |j                  d«      ƒ d {  –—†  d d d «       |j                  d«       |j                  «       }|j                  d	«       |j                  «       |kD  sJ ‚|j                  d«       |j                  «       |k(  sJ ‚	 d d d «       d d d «      ƒd {  –—†  y 7 �Œ«# 1 sw Y   �ŒUxY w7 �ŒE7 �Œ/7 �Œ7 Œþ7 Œè7 Œ°# 1 sw Y   Œ¯xY w# 1 sw Y   ŒExY w7 Œ<# 1 ƒd {  –—†7  sw Y   y xY w­w)
N©r%   r   r8   ó   hellos   goodbyez4^openssl doesn't support sending empty DTLS packets$©Úmatchr   iÒ  iá  )rQ   r4   ÚconnectÚpytestÚraisesr-   ÚNeedHandshakeErrorÚget_cleartext_mtur@   rA   ÚreceiveÚ
ValueErrorr?   )r%   r   r$   Ú_server_endpointÚaddressÚclient_endpointÚclient_channelÚcleartext_mtu_1234s           r   Ú
test_smokerc   k   sò  è ø€ ô   T°jÔA÷ Lð Lñ FØØä˜4Ô ð 	L OØ,×4Ñ4°W¸jÓIˆNÜ—‘œt×6Ñ6Ó7ñ 3Ø×0Ñ0Ô2÷3ð !×-Ñ-Ó/×/Ð/Ø ×%Ñ% hÓ/×/Ð/Ø'×/Ñ/Ó1×1°XÒ=Ð=Ð=Ø ×%Ñ% jÓ1×1Ð1Ø'×/Ñ/Ó1×1°ZÒ?Ð?Ð?ä—‘ÜØMôñ /ð %×)Ñ)¨#Ó.×.Ð.÷	/ð ×-Ñ-¨dÔ3Ø!/×!AÑ!AÓ!CÐØ×-Ñ-¨dÔ3Ø!×3Ñ3Ó5Ð8JÒJÐJÐJØ×-Ñ-¨dÔ3Ø!×3Ñ3Ó5Ð9KÒKÐKÑK÷-	L÷	L÷ Lñ Lù÷3ñ 3úð 0ùØ/ùØ1ùØ1øØ1øð /ø÷	/ð /ú÷	Lð 	Lúð	Lø÷ L÷ Lñ Lüsò   ‚H”F?•H˜G8¨6G*ÁGÁ/G*Â
GÂG*Â#GÂ$G*Â;GÂ<G*ÃGÃG*Ã1GÃ2$G*ÄGÄ+G
Ä,GÄ0A5G*Æ&G8Æ.HÆ9G6Æ:HÇGÇ	G*ÇG*ÇG*ÇG*ÇG*ÇGÇG'Ç#G*Ç*G3	Ç/G8Ç6HÇ8H
Ç>HÇ?H
ÈHc           
   ƒ  ó  ‡‡‡‡K  — d}t        j                  d«      Št        «       Š‰j                  «        d| _        t        |¬«      4 ƒd {  –—† \  }}t        j                  «       4 ƒd {  –—† Šdˆˆfd„Šdˆˆfd„}|‰_        t        |«      D ]ü  }t        d«       t        d«       t        d«       t        «       5 }|j                  |t        «       «      }t        d«       |j                  «       ƒ d {  –—†  t        d	«       t        |«      j!                  «       }		 t        j"                  d
«      5 }
|j%                  |	«      ƒ d {  –—†  |j'                  «       ƒ d {  –—† |	k(  sJ ‚	 d d d «       
j(                  snŒc	 d d d «       Œþ d d d «      ƒd {  –—†  d d d «      ƒd {  –—†  y 7 �Œe7 �ŒH7 Œ¾7 Œl7 ŒV# 1 sw Y   ŒOxY w# 1 sw Y   �ŒBxY w7 Œ:# 1 ƒd {  –—†7  sw Y   ŒJxY w7 ŒA# 1 ƒd {  –—†7  sw Y   y xY w­w)Néd   r   gü©ñÒMbP?©r   c              “  óè  •K  — 	 ‰j                  g d¢g d¢¬«      d   }t        | j                  › d| j                  › d|› �«       |dk(  ry |dk(  r‰j	                  | «       nŒ|d	k(  r/t        j                  ‰j                  «       d
z  «      ƒ d {  –—†  nX|dk(  sJ ‚t        | j                  › d| j                  › d| j                  j                  «       › �«       ‰j                  | «       y Œë7 Œ^­w)N)ÚdeliverÚdropÚdupeÚdelay)gffffffæ?çš™™™™™¹?rl   rl   )Úweightsr   r;   z: ri   rj   rk   é   rh   z: delivered )Úchoicesr<   ÚsourceÚdestinationÚsend_packetr-   ÚsleepÚrandomÚpayloadÚhexÚdeliver_packet)rD   ÚopÚfnÚrs     €€r   Úroute_packetz:test_handshake_over_terrible_network.<locals>.route_packet›   sû   øè ø€ ØØŸ™Ú<Ú 4ð #ó ð ñ�Bô ˜VŸ]™]˜O¨4°×0BÑ0BÐ/CÀ2ÀbÀTÐJÔKØ˜V’|ØØ˜všØŸ™ vÕ.Ø˜wšÜ"Ÿj™j¨¯©«°a©Ó8×8Ñ8ð2  " YšÐ.˜ÜØ%Ÿ}™}˜o¨T°&×2DÑ2DÐ1Eð F Ø &§¡× 2Ñ 2Ó 4Ð5ð7ôð ×)Ñ)¨&Ô1ØðU ð 9ús   ƒBC2ÂC0ÂAC2c                óJ   •— 	 ‰j                  ‰| «       y # t        $ r Y y w xY wr   )Ú
start_soonÚRuntimeError)rD   rP   r{   s    €€r   Úroute_packet_wrapperzBtest_handshake_over_terrible_network.<locals>.route_packet_wrapperÈ   s,   ø€ ðØ×&Ñ& |°VÕ<øÜ#ò ñ ðús   ƒ –	"¡"zP################################################################################zclient starting do_handshakezclient finished do_handshakeé
   ©rD   r   rF   rG   )rt   ÚRandomr   ÚenableÚautojump_thresholdrQ   r-   rI   r{   Úranger<   r4   rW   r!   r@   ÚstrÚencodeÚmove_on_afterrA   r\   Úcancelled_caught)Úautojump_clockr   Ú
HANDSHAKESÚ_r_   r   Úir`   ÚclientÚmsgÚcscopery   rP   rz   r{   s              @@@@r   Ú$test_handshake_over_terrible_networkr‘   Œ   sé  ûè ø€ ð
 €JÜ�‰�aÓ€AÜ	‹€BØ‡I�I„Kà(-€NÔ%ä¨:Ô6÷ K"ð K"¹,¸1¸gÜ×$Ñ$Ó&÷ J	"ð J	"¨'ö+öZð 3ˆBŒOä˜:Ó&ò "�Ü�h”Ü�h”Ü�h”Ü“Zð " ?Ø,×4Ñ4°W¼m»oÓN�FÜÐ8Ô9Ø ×-Ñ-Ó/×/Ð/ÜÐ8Ô9Ü˜a›&Ÿ-™-›/�Cð Ü!×/Ñ/°Ó3ð A°vØ"(§+¡+¨cÓ"2×2Ð2Ø)/¯©Ó)9×#9¸SÒ#@Ð@Ñ#@÷Að  &×6Ò6Ø!ð ð
 "÷"ð "ð	"÷sJ	"÷ J	"÷K"÷ K"ñ K"ùðJ	"ùð@ 0øð 3øØ#9ø÷Að Aú÷"ñ "úð{J	"ø÷ J	"÷ J	"ñ J	"úðK"ø÷ K"÷ K"ñ K"üs÷   †A	HÁF4ÁHÁG2Á/F7Á0G2Á3AGÃ9G	Ã;F:Ã<>G	Ä:G ÅF<ÅG Å'F>Å(	G Å2G	Æ	
GÆG2ÆGÆG2Æ#HÆ.G0Æ/HÆ7G2Æ:G	Æ<G Æ>G Ç G	ÇG	ÇGÇGÇG2ÇG-	Ç!G$Ç"G-	Ç)G2Ç0HÇ2HÇ8G;Ç9HÈ Hc              ƒ  óf  K  — t        | ¬«      4 ƒd {  –—† \  }}t        «       5 }|j                  ||«      }|j                  d«      ƒ d {  –—†  |j	                  «       ƒ d {  –—† dk(  sJ ‚	 d d d «       d d d «      ƒd {  –—†  y 7 Œt7 Œ=7 Œ'# 1 sw Y   Œ xY w7 Œ# 1 ƒd {  –—†7  sw Y   y xY w­w)Nrf   ó   xyz)rQ   r4   rW   rA   r\   ©r   r$   rŒ   r_   r`   rŽ   s         r   Útest_implicit_handshaker•   æ   s©   è ø€ ô  ¨:Ô6÷ 4ð 4¹,¸1¸gÜ‹Zð 	4˜?Ø$×,Ñ,¨W°jÓAˆFð —+‘+˜fÓ%×%Ð%ØŸ™Ó)×)¨VÒ3Ð3Ñ3÷	4÷4÷ 4ñ 4øð
 &øØ)ø÷	4ð 	4úð4ø÷ 4÷ 4ñ 4üs   ‚B1“B”B1—B¥'BÁB
ÁBÁ$BÁ%	BÁ/BÁ7B1ÂBÂB1Â
BÂBÂB	ÂBÂB1ÂB.Â"B%Â#B.Â*B1c           
   ƒ  ó8  K  — t        «       5 }t        «       5 }|j                  j                  d«      ƒ d {  –—†  t        j                  «       4 ƒd {  –—† }dd„}|j                  |j                  | |«      ƒ d {  –—†  |j                  |j                  j                  «       |«      }t        j                  «       4 ƒd {  –—† }|j                  |j                  d«       |j                  |j                  «       d d d «      ƒd {  –—†  |j                  j                  «        d d d «      ƒd {  –—†  d d d «       d d d «       y 7 �Œ7 Œù7 ŒÒ7 Œ�7 ŒH# 1 ƒd {  –—†7  sw Y   ŒXxY w7 Œ5# 1 ƒd {  –—†7  sw Y   ŒExY w# 1 sw Y   ŒIxY w# 1 sw Y   y xY w­w)N©r9   r   c              “  ó  K  — t        j                  «       4 ƒd {  –—† }|j                  | j                  d«       |j                  | j                  «       d d d «      ƒd {  –—†  y 7 ŒL7 Œ# 1 ƒd {  –—†7  sw Y   y xY w­w)Ns   from server)r-   rI   r}   rA   r\   )ÚchannelrP   s     r   Úhandlerz!test_full_duplex.<locals>.handlerù   si   è ø€ Ü×,Ñ,Ó.÷ 8ð 8°'Ø×&Ñ& w§|¡|°^ÔDØ×&Ñ& w§¡Ô7÷8÷ 8ñ 8øð 8ø÷ 8÷ 8ñ 8üsD   ‚B›A(œBŸ8A,ÁBÁ"A*Á#BÁ*BÁ,A>Á2A5Á3A>Á:Bs   from client©r™   r
   rF   rG   )r4   r.   rH   r-   rI   rJ   rK   rW   r=   r}   rA   r\   rL   rM   )r   r$   Úserver_endpointr`   Úserver_nurseryrš   rŽ   rP   s           r   Útest_full_duplexrž   ò   sk  è ø€ ô 
‹ð 1�¬«
ð 1°oØ×$Ñ$×)Ñ)Ð*:Ó;×;Ð;Ü×$Ñ$Ó&÷ 	1ð 	1¨.ó8ð
 !×&Ñ& ×'<Ñ'<¸jÈ'ÓR×RÐRà$×,Ñ,Ø×&Ñ&×2Ñ2Ó4ØóˆFô ×(Ñ(Ó*÷ 3ð 3¨gØ×"Ñ" 6§;¡;°Ô?Ø×"Ñ" 6§>¡>Ô2÷3÷ 3ð ×'Ñ'×.Ñ.Ô0÷#	1÷ 	1÷1÷ 1ð 1Ø;ùð	1øð Søð3øð 3ø÷ 3÷ 3ñ 3úð	1ø÷ 	1÷ 	1ñ 	1ú÷1ð 1ú÷ 1ð 1üsæ   ‚F�F˜F·E¸FÁE
ÁFÁ%E-Á=E
Á>AE-ÃEÃE-Ã8E	Ä E-ÄE
ÄE-Ä*FÄ5E+Ä6FÄ:FÅ	FÅFÅFÅE-ÅE-ÅE-ÅE(ÅEÅE(Å$E-Å+FÅ-E?Å3E6Å4E?Å;FÆF	ÆFÆFÆFc              ƒ  óä  K  — t        | ¬«      4 ƒd {  –—† \  }}t        «       5 }|j                  ||«      }|j                  «       ƒ d {  –—†  |j	                  «        t        j                  t        j                  «      5  |j                  d«      ƒ d {  –—†  d d d «       t        j                  t        j                  «      5  |j                  «       ƒ d {  –—†  d d d «       |j	                  «        |j                  «       ƒ d {  –—†  d d d «       d d d «      ƒd {  –—†  y 7 �Œ7 Œá7 Œ–# 1 sw Y   Œ•xY w7 Œ`# 1 sw Y   Œ_xY w7 Œ># 1 sw Y   Œ=xY w7 Œ4# 1 ƒd {  –—†7  sw Y   y xY w­w)Nrf   ó   abc)rQ   r4   rW   r@   ÚcloserX   rY   r-   ÚClosedResourceErrorrA   r\   Úacloser”   s         r   Útest_channel_closingr¤     s0  è ø€ ô  ¨:Ô6÷ "ð "¹,¸1¸gÜ‹Zð 	"˜?Ø$×,Ñ,¨W°jÓAˆFØ×%Ñ%Ó'×'Ð'Ø�L‰LŒNä—‘œt×7Ñ7Ó8ñ *Ø—k‘k &Ó)×)Ð)÷*ä—‘œt×7Ñ7Ó8ñ 'Ø—n‘nÓ&×&Ð&÷'ð �L‰LŒNà—-‘-“/×!Ð!÷	"÷"÷ "ñ "ùð (øð *ø÷*ð *úð 'ø÷'ð 'úð "ø÷	"ð 	"úð"ø÷ "÷ "ñ "üsÍ   ‚E0“D*”E0—E¥&EÁD-Á7EÂD1ÂD/
ÂD1Â+EÃD?ÃD=
ÃD?Ã!+EÄEÄEÄEÄE0Ä$EÄ%E0Ä-EÄ/D1Ä1D:Ä6EÄ=D?Ä?EÅEÅE	ÅEÅE0ÅE-Å!E$Å"E-Å)E0c              ƒ  óÐ   K  — t        d| ¬«      4 ƒd {  –—† \  }}|j                  «        d d d «      ƒd {  –—†  j                  «        y 7 Œ87 Œ# 1 ƒd {  –—†7  sw Y   Œ'xY w­w)NF)r5   r   )rQ   r¡   )r   rœ   Ú_addresss      r   Ú!test_serve_exits_cleanly_on_closer§     se   è ø€ Ü¨5¸ZÔH÷  ð  ñ MØØà×ÑÔ÷	 ÷  ð ×ÑÕð øð  ø÷  ÷  ñ  üsA   ‚A&”A•A&˜A¬A&·A¸A&ÁA&ÁA#ÁAÁA#ÁA&c           
   ƒ  ó  K  — t        | ¬«      4 ƒd {  –—† \  }}t        | ¬«      4 ƒd {  –—† \  }}t        «       5 }|j                  |t        «       «      }|j                  |t        «       «      }|j	                  d«      ƒ d {  –—†  |j	                  d«      ƒ d {  –—†  |j                  «       ƒ d {  –—† dk(  sJ ‚|j                  «       ƒ d {  –—† dk(  sJ ‚|j                  «        t        j                  t        j                  «      5  |j	                  d«      ƒ d {  –—†  d d d «       t        j                  t        j                  «      5  |j                  «       ƒ d {  –—†  d d d «       t        j                  t        j                  «      5  |j                  |t        «       «       d d d «       dd„}t        j                  «       4 ƒd {  –—† }t        j                  t        j                  «      5  |j                  |j                  | |«      ƒ d {  –—†  d d d «       d d d «      ƒd {  –—†  d d d «       d d d «      ƒd {  –—†  d d d «      ƒd {  –—†  y 7 �ŒU7 �Œ@7 �Œè7 �ŒÒ7 �Œ½7 �Œ£7 �ŒT# 1 sw Y   �ŒTxY w7 �Œ # 1 sw Y   �Œ xY w# 1 sw Y   ŒæxY w7 ŒÌ7 Œ…# 1 sw Y   Œ„xY w7 Œ{# 1 ƒd {  –—†7  sw Y   Œ‹xY w# 1 sw Y   Œ�xY w7 Œ†# 1 ƒd {  –—†7  sw Y   Œ–xY w7 Œ�# 1 ƒd {  –—†7  sw Y   y xY w­w)Nrf   r    r“   ó   xxxc              “  ó   K  — y ­wr   r#   ©rŒ   s    r   Únull_handlerz+test_client_multiplex.<locals>.null_handlerA  s	   è ø€ Øùó   ‚©rŒ   ÚobjectrF   rG   )rQ   r4   rW   r!   rA   r\   r¡   rX   rY   r-   r¢   rI   rJ   rK   )	r   rŒ   Úaddress1Úaddress2r`   Úclient1Úclient2r¬   rP   s	            r   Útest_client_multiplexr´   *  s¡  è ø€ ä JÔ/÷Yð YÙ3@°A°xÜ JÔ/÷Yð Yá3@°A°xä‹Zð 	Y˜?Ø%×-Ñ-¨h¼»ÓHˆGØ%×-Ñ-¨h¼»ÓHˆGà—,‘,˜vÓ&×&Ð&Ø—,‘,˜vÓ&×&Ð&Ø Ÿ™Ó*×*¨fÒ4Ð4Ð4Ø Ÿ™Ó*×*¨fÒ4Ð4Ð4à×!Ñ!Ô#ä—‘œt×7Ñ7Ó8ñ +Ø—l‘l 6Ó*×*Ð*÷+ä—‘œt×7Ñ7Ó8ñ (Ø—o‘oÓ'×'Ð'÷(ä—‘œt×7Ñ7Ó8ñ CØ×'Ñ'¨´-³/ÔB÷Cóô ×(Ñ(Ó*÷ Yð Y¨gÜ—]‘]¤4×#;Ñ#;Ó<ñ YØ!Ÿ-™-¨×(=Ñ(=¸zÈ<ÓX×XÐX÷Y÷Y÷ Y÷+	Y÷	Y÷ Y÷ Y÷ Yñ Yùð Yùð 'ùØ&ùØ*ùØ*ùð
 +ù÷+ñ +úð (ù÷(ñ (ú÷Cð CúðYøàXø÷Yð YúðYø÷ Y÷ Yñ Yú÷+	Yð 	Yúð	Yø÷ Y÷ Yñ Yúð Yø÷ Y÷ Yñ YüsÁ  ‚L“I(”L—K2«I+¬K2¯K½A	KÂI.
ÂKÂI1
Â KÂ7I4
Â8KÃI7
Ã<KÄI=	Ä&I:Ä'I=	Ä++KÅJ	Å*J
Å+J	Å/+KÆJ	Æ5$KÇJ&ÇKÇ$J8	È!J*È"J(È#J*È'J8	È/KÈ:J6
È;KÈ?KÉK2ÉKÉK2ÉLÉ"K0É#LÉ+K2É.KÉ1KÉ4KÉ7KÉ:I=	É=JÊKÊ
J	ÊJÊKÊJ#ÊKÊ(J*Ê*J3Ê/J8	Ê6KÊ8K
Ê>KÊ?K
ËKËKËKËK2ËK-	Ë!K$Ë"K-	Ë)K2Ë0LË2LË8K;Ë9LÌ Lc               ƒ  óè   K  — t         j                  j                  «       5 } t        j                  t        d¬«      5  t        | «       d d d «       d d d «       y # 1 sw Y   ŒxY w# 1 sw Y   y xY w­w)Nz#^DTLS requires a SOCK_DGRAM socket$rU   )r-   r.   rX   rY   r]   r   )Úss    r   Útest_dtls_over_dgram_onlyr·   I  s\   è ø€ Ü	�‰×	Ñ	Ó	ð  Ü�]‰]œ:Ð-SÔTñ 	Ü˜ŒO÷	÷ð ÷	ð 	ú÷ð üs3   ‚A2¡A&½AÁ	A&Á	A2ÁA#	ÁA&Á&A/Á+A2c              ƒ  óz  K  — dd„}t        «       5 }|j                  j                  d«      ƒ d {  –—†  t        j                  «       4 ƒd {  –—† }|j                  |j                  | |«      ƒ d {  –—†  t        j                  t        j                  «      5  |j                  |j                  | |«      ƒ d {  –—†  d d d «       |j                  j                  «        d d d «      ƒd {  –—†  t        j                  «       4 ƒd {  –—† }|j                  |j                  | |«      ƒ d {  –—†  |j                  j                  «        d d d «      ƒd {  –—†  d d d «       y 7 �Œ77 �Œ7 Œú7 Œ³# 1 sw Y   Œ²xY w7 Œ�# 1 ƒd {  –—†7  sw Y   ŒŸxY w7 Œ‰7 Œf7 Œ># 1 ƒd {  –—†7  sw Y   ŒNxY w# 1 sw Y   y xY w­w)Nc              “  ó   K  — y ­wr   r#   r«   s    r   r¬   z'test_double_serve.<locals>.null_handlerP  s	   è ø€ Øùr­   r—   r®   )r4   r.   rH   r-   rI   rJ   rK   rX   rY   ÚBusyResourceErrorrL   rM   )r   r¬   rœ   rP   s       r   Útest_double_server»   O  s{  è ø€ óô 
‹ð *�Ø×$Ñ$×)Ñ)Ð*:Ó;×;Ð;Ü×$Ñ$Ó&÷ 	*ð 	*¨'Ø—-‘- × 5Ñ 5°zÀ<ÓP×PÐPÜ—‘œt×5Ñ5Ó6ñ UØ—m‘m O×$9Ñ$9¸:À|ÓT×TÐT÷Uð × Ñ ×'Ñ'Ô)÷	*÷ 	*ô ×$Ñ$Ó&÷ 	*ð 	*¨'Ø—-‘- × 5Ñ 5°zÀ<ÓP×PÐPØ× Ñ ×'Ñ'Ô)÷	*÷ 	*÷*ð *Ø;ùð	*ùØPøàTø÷Uð Uúð	*ø÷ 	*÷ 	*ñ 	*úð	*øØPøð	*ø÷ 	*÷ 	*ñ 	*ú÷*ð *üs  ‚F;‘F/°E'±F/ÁE*ÁF/Á!E?Á2E-Á3'E?Â!E1Â;E/
Â<E1Ã "E?Ã"F/Ã-E=Ã.F/Ä
FÄF/Ä!FÄ/FÄ0FÅF/ÅFÅF/Å	F;Å'F/Å*F/Å-E?Å/E1Å1E:Å6E?Å=F/Å?F	ÆFÆF	ÆF/ÆFÆF/ÆF,	Æ F#Æ!F,	Æ(F/Æ/F8Æ4F;c              ƒ  ó   K  — t        «       }|j                  «        t        «       5 }t        «       5 }|j                  j	                  d«      ƒ d {  –—†  t        j                  d«      5 }|j                  |j                  j                  «       |«      }|j                  «       ƒ d {  –—†  d d d «       j                  sJ ‚	 d d d «       d d d «       y 7 Œ„7 Œ.# 1 sw Y   Œ-xY w# 1 sw Y   Œ"xY w# 1 sw Y   y xY w­w)Nr—   re   )r   rƒ   r4   r.   rH   r-   rˆ   rW   r=   r@   r‰   )rŠ   r$   ry   r²   r³   r�   r™   s          r   Útest_connect_to_non_serverr½   a  sÛ   è ø€ ô 
‹€BØ‡I�I„KÜ	‹ð '�w¤£
ð '¨gØ�n‰n×!Ñ!Ð"2Ó3×3Ð3ä×Ñ Ó$ð 	)¨Ø—o‘o g§n¡n×&@Ñ&@Ó&BÀJÓOˆGØ×&Ñ&Ó(×(Ð(÷	)ð ×&Ò&Ð&Ñ&÷'÷ 'ð 'Ø3øð )ø÷	)ð 	)ú÷'ð 'ú÷ 'ð 'üso   ‚%C>§C2²C&ÁCÁC&Á+>CÂ)C
Â*CÂ.C&ÃC2Ã	C>ÃC&ÃCÃC#ÃC&Ã&C/	Ã+C2Ã2C;Ã7C>Úbuffer_sizer€   é   c              ƒ  óX  K  — t        «       }|j                  «        t        |¬«      4 ƒd {  –—† \  }}t        |¬«      5 }|j                  |k(  sJ ‚|j                  ||«      }t        |dz   «      D ]O  }	|j                  t        |	«      j                  «       «      ƒ d {  –—†  t        j                  d«      ƒ d {  –—†  ŒQ |j                  «       }
|
j                  dk(  sJ ‚t        |«      D ]6  }	|j                  «       ƒ d {  –—† t        |	«      j                  «       k(  rŒ6J ‚ |j                  d«      ƒ d {  –—†  |j                  «       ƒ d {  –—† dk(  sJ ‚	 d d d «       d d d «      ƒd {  –—†  y 7 �ŒM7 ŒÛ7 ŒÀ7 Œy7 ŒD7 Œ.# 1 sw Y   Œ'xY w7 Œ# 1 ƒd {  –—†7  sw Y   y xY w­w)Nrf   )Úincoming_packets_bufferé   é   s   buffer clear now)r   rƒ   rQ   r4   rÁ   rW   r…   rA   r†   r‡   r-   rs   Ú
statisticsÚ incoming_packets_dropped_in_trior\   )rŠ   r   r$   r¾   ry   rŒ   r_   r`   rŽ   r�   Ústatss              r   Útest_incoming_buffer_overflowrÇ   o  s�  è ø€ ô 
‹€BØ‡I�I„KÜ¨:Ô6÷ Að A¹,¸1¸gÜ¨kÔ:ð 	A¸oØ"×:Ñ:¸kÒIÐIÐIØ$×,Ñ,¨W°jÓAˆFÜ˜;¨Ñ+Ó,ò $�Ø—k‘k¤# a£&§-¡-£/Ó2×2Ð2Ü—j‘j “m×#Ñ#ð$ð ×%Ñ%Ó'ˆEØ×9Ñ9¸RÒ?Ð?Ð?Ü˜;Ó'ò A�Ø#Ÿ^™^Ó-×-´°Q³·±³Ó@Ð@Ð@ðAà—+‘+Ð1Ó2×2Ð2ØŸ™Ó)×)Ð-@Ò@Ð@Ñ@÷	A÷A÷ Añ Aùð
 3øØ#øð .øØ2øØ)ø÷	Að 	AúðAø÷ A÷ Añ Aüs¾   ‚+F*­E:®F*±FÁA FÂ!E=
Â"FÂ>E?
Â?AFÄF
ÄFÄ'FÄ>FÄ?FÅFÅ	FÅ!FÅ)F*Å4FÅ5F*Å=FÅ?FÆFÆFÆFÆF	ÆFÆF*ÆF'ÆFÆF'Æ#F*c              ƒ  óÐ  K  — t        «       }|j                  «        ddlm}m}m}m}m}m}m	}	  |	 ||j                  |j                  d | ||j                  ddddt        d«      ¬«      «      ¬«      «      }
|
dz   }|
d d }|
d d }t        |
«      }d	|d
<    |	 ||j                  |j                  d | ||j                  ddddt        d«      ¬«      «      ¬«      «      } |	 ||j                  |j                  d | ||j                  ddddt        d«      ¬«      «      dz   ¬«      «      } |	 ||j                  |j                  dd¬«      «      } |	 ||j                  |j                  dt        d«      dz   ¬«      «      }t        |¬«      4 ƒd {  –—† \  }}t         j"                  j#                  t         j"                  j$                  ¬«      5 }dd||||||||f
D ]9  }|j'                  ||«      ƒ d {  –—†  t!        j(                  d«      ƒ 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   )ÚContentTypeÚHandshakeFragmentÚHandshakeTypeÚProtocolVersionÚRecordÚencode_handshake_fragmentÚencode_recordr€   )Úmsg_typeÚmsg_lenÚmsg_seqÚfrag_offsetÚfrag_lenÚfrag)Úcontent_typeÚversionÚepoch_seqnoru   ó    éÿÿÿÿé   éÿ   é   r¿   r   é#   ó   ÿrf   ©r*   r“   rÃ   )r   rƒ   Ú
trio._dtlsrÉ   rÊ   rË   rÌ   rÍ   rÎ   rÏ   Ú	handshakeÚDTLS10Úclient_helloÚbytesÚ	bytearrayrQ   r-   r.   r1   Úsendtors   )rŠ   r   ry   rÉ   rÊ   rË   rÌ   rÍ   rÎ   rÏ   rä   Úclient_hello_extendedÚclient_hello_shortÚclient_hello_really_shortÚclient_hello_corrupt_record_lenÚclient_hello_fragmentedÚ$client_hello_trailing_data_in_recordÚhandshake_emptyÚ client_hello_truncated_in_cookierŒ   r_   r3   Ú
bad_packets                          r   Ú*test_server_socket_doesnt_crash_on_garbagerñ   ‡  s¥  è ø€ ô 
‹€BØ‡I�I„K÷÷ ñ ñ !ÙØ$×.Ñ.Ø#×*Ñ*ØÙ-Ù!Ø*×7Ñ7ØØØ !ØÜ˜r›ôó	ô		
ó€Lð$ )¨7Ñ2ÐØ% c rÐ*Ðà ,¨S¨bÐ 1ÐÜ&/°Ó&=Ð#Ø*.Ð# BÑ'á+ÙØ$×.Ñ.Ø#×*Ñ*ØÙ-Ù!Ø*×7Ñ7ØØØ !ØÜ˜r›ôó	ô		
óÐñ$ ,9ÙØ$×.Ñ.Ø#×*Ñ*ØÙ-Ù!Ø*×7Ñ7ØØØ !ØÜ˜r›ôó	ð ñ
ô		
ó,Ð(ñ& $ÙØ$×.Ñ.Ø#×*Ñ*ØØô		
ó€Oñ (5ÙØ$×.Ñ.Ø#×*Ñ*ØÜ˜*Ó%¨Ñ/ô		
ó(Ð$ô  ¨:Ô6÷ $ð $¹,¸1¸gÜ�[‰[×Ñ¤T§[¡[×%;Ñ%;ÐÓ<ð 	$ÀàØØ%Ø"Ø)Ø/Ø'Ø4ØØ0ðò $�
ð —k‘k *¨gÓ6×6Ð6Ü—j‘j “m×#Ñ#ñ$÷	$÷$÷ $ñ $øð 7øØ#ø÷	$ð 	$úð$ø÷ $÷ $ñ $üs„   ‚FI&ÆH=ÆI&Æ<IÇ%IÇ?H?
È IÈI
ÈIÈ$IÈ,I&È7IÈ8I&È?IÉIÉI	ÉIÉI&ÉI#ÉIÉI#ÉI&c              ƒ  óü  ‡‡	‡
‡‡K  — t        «       Š‰j                  «        ddlmŠmŠ
 t        j                  «       5 Š	t        d«      Šdˆˆ	ˆ
ˆˆfd„}|‰_        t        |¬«      4 ƒd {  –—† \  }}	 t        «       5 }|j                  ||«      }|j                  «       ƒ d {  –—†  d d d «       Œ>7 ŒF7 Œ# 1 sw Y   ŒxY w# 1 ƒd {  –—†7  sw Y   nxY w	 d d d «       n# 1 sw Y   nxY w‰	j                  sJ ‚y ­w)Nr   )Ú	BadPacketÚdecode_client_hello_untrustedrÝ   c                ój  •— 	  ‰| j                   «      \  }}}t        |«      dk7  rqt        | j                   «      }t        ‰	«      }|t        |«      k\  rt        |«      dz
  }‰j	                  «        ||xx   dz  cc<   t        j                  | |¬«      } 	 ‰j                  | «       y # ‰$ r Y Œw xY w)Nr   rÃ   )ru   )ru   Úlenræ   ÚnextrM   ÚattrsÚevolverw   )
rD   rŒ   Úcookieru   Úoffsetró   r�   rô   ry   Úoffset_to_corrupts
        €€€€€r   r{   z2test_invalid_cookie_rejected.<locals>.route_packet  s«   ø€ ðCÙ<¸V¿^¹^ÓL‘��6˜1ô �v“; !Ò#ô (¨¯©Ó7�GÜ!Ð"3Ó4�FØ¤ W£Ò-ô "% W£°Ñ!1˜ØŸ™œØ˜F“O tÑ+“OÜ"Ÿ\™\¨&¸'ÔB‘Fà×Ñ˜fÕ%øð! ò Ùðús   ƒB* Â*B2Â1B2rf   r�   )r   rƒ   rá   ró   rô   r-   ÚCancelScoper   r{   rQ   r4   rW   r@   r‰   )rŠ   r   r$   r{   rŒ   r_   rŽ   r™   ró   r�   rô   ry   rü   s           @@@@@r   Útest_invalid_cookie_rejectedrþ   ù  sï   üè ø€ ô 
‹€BØ‡I�I„KçCä	×	Ñ	Ó	ð  1˜vô " "›IÐ÷	&ñ 	&ð* 'ˆŒä#¨zÔ:÷ 	1ð 	1¹l¸qÀ'ØÜ“Zð 1 6Ø$Ÿn™n¨W°jÓA�GØ!×.Ñ.Ó0×0Ð0÷1ð ð	1øð 1ø÷1ð 1ú÷	1÷ 	1ñ 	1úð 	1÷9 1÷  1ñ  1úðB ×"Ò"Ð"Ñ"ùsv   ‡7C<¾-C!Á+B2Á,C!Á/CÁ>&B6Â$B4
Â%B6Â)	CÂ2C!Â4B6Â6B?Â;CÃC	ÃCÃ	C	ÃC!Ã	C<Ã!C*Ã&C<c           	   ƒ  óB  ‡‡	K  — t        «       }|j                  «        t        «       5 }t        «       5 }|j                  j	                  d«      ƒ d {  –—†  t        j                  «       4 ƒd {  –—† }dŠ	dˆˆ	fd„}|j                  |j                  ||«      ƒ d {  –—†  t        d«       t        j                  «       5 Š|j                  |j                  j                  «       t        «       «      }|j                  «       ƒ d {  –—†  d d d «       ‰j                  sJ ‚t        d«       |j                  |j                  j                  «       t        «       «      }|j!                  «       ƒ d {  –—† dk(  sJ ‚t        j"                  d«      ƒ d {  –—†  |j$                  j'                  «        d d d «      ƒd {  –—†  d d d «       d d d «       y 7 �Œ‚7 �Œh7 �Œ=7 ŒÕ# 1 sw Y   ŒÔxY w7 Œx7 ŒX7 Œ0# 1 ƒd {  –—†7  sw Y   Œ@xY w# 1 sw Y   ŒDxY w# 1 sw Y   y xY w­w)	Nr—   Tc              “  ó’  •K  — ‰rŠdŠt        d«       ‰j                  «        t        j                  d«      ƒ d {  –—†  t        d«       t	        j
                  t        j                  «      5  | j                  «       ƒ d {  –—†  d d d «       y t        d«       | j                  d«      ƒ d {  –—†  y 7 Œy7 Œ4# 1 sw Y   y xY w7 Œ­w)NFz'handler: first time, cancelling connectg      à?z"handler: handshake should fail nowz&handler: not first time, sending hellorT   )	r<   rM   r-   rs   rX   rY   rB   r@   rA   )r™   Úconnect_cscopeÚ
first_times    €€r   rš   zAtest_client_cancels_handshake_and_starts_new_one.<locals>.handler3  sª   øè ø€ áØ!&�JÜÐCÔDØ"×)Ñ)Ô+ÜŸ*™* S›/×)Ð)ÜÐ>Ô?ÜŸ™¤t×'?Ñ'?Ó@ñ 5Ø%×2Ñ2Ó4×4Ð4÷5ð 5ô ÐBÔCØ!Ÿ,™, xÓ0×0Ñ0ð *øð 5ø÷5ð 5úð 1úsE   ƒ8C»B5¼2CÁ.B9ÂB7ÂB9Â(CÂ/CÂ0CÂ7B9Â9CÂ>Czclient: starting first connectzclient: starting second connectrT   r€   r›   )r   rƒ   r4   r.   rH   r-   rI   rJ   rK   r<   rý   rW   r=   r!   r@   r‰   r\   rs   rL   rM   )
rŠ   r   ry   rN   rŽ   rP   rš   r™   r  r  s
           @@r   Ú0test_client_cancels_handshake_and_starts_new_oner  %  sÁ  ùè ø€ ô 
‹€BØ‡I�I„Kä	‹ð !*�vœx›zð !*¨VØ�m‰m× Ñ Ð!1Ó2×2Ð2Ü×$Ñ$Ó&÷ 	*ð 	*¨'ØˆJö1ð —-‘- §¡¨j¸'ÓB×BÐBäÐ2Ô3Ü×!Ñ!Ó#ð - ~Ø Ÿ.™.¨¯©×)BÑ)BÓ)DÄmÃoÓV�Ø×*Ñ*Ó,×,Ð,÷-ð "×2Ò2Ð2Ð2äÐ3Ô4Ø—n‘n V§]¡]×%>Ñ%>Ó%@Ä-Ã/ÓRˆGØ Ÿ™Ó*×*¨hÒ6Ð6Ð6ô —*‘*˜R“.× Ð Ø× Ñ ×'Ñ'Ô)÷?	*÷ 	*÷!*÷ !*ð !*Ø2ùð	*ùð" Cùð
 -ø÷-ð -úð +øð !øð=	*ø÷ 	*÷ 	*ñ 	*ú÷!*ð !*ú÷ !*ð !*üsé   „%H©H´HÁGÁHÁ0G
Á1HÁ4*G2ÂG
Â#G2ÃAG 	ÄGÄ	G 	ÄA&G2Å3G,
Å4!G2ÆG.
ÆG2Æ4HÆ?G0Ç HÇHÇ	HÇHÇHÇG2ÇG 	Ç G)Ç%G2Ç.G2Ç0HÇ2HÇ8G;Ç9HÈ HÈH	ÈHÈHÈHc           	   ƒ  ó&  ‡K  — t        «       5 }t        «       5 }|j                  j                  d«      ƒ d {  –—†  |j                  j                  d«      ƒ d {  –—†  dd„Šdˆfd„}t        j                  «       4 ƒd {  –—† }|j                  |j                  | |«      ƒ d {  –—†  |j                  |j                  | ‰«      ƒ d {  –—†  |j                  |j                  j                  «       t        «       «      }|j                  d«      ƒ d {  –—†  |j                  «       ƒ d {  –—† dk(  sJ ‚|j                  |j                  j                  «       t        «       «      }|j                  «       ƒ d {  –—†  t        j                  t        j                  «      5  |j                  d«      ƒ d {  –—†  d d d «       |j                  d«      ƒ d {  –—†  |j                  «       ƒ d {  –—† dk(  sJ ‚|j                   j#                  «        d d d «      ƒd {  –—†  d d d «       d d d «       y 7 �Œ7 �Œá7 �Œ½7 �Œ›7 �Œy7 �Œ17 �Œ7 ŒÏ7 Œ”# 1 sw Y   Œ“xY w7 Œ�7 Œk7 Œ># 1 ƒd {  –—†7  sw Y   ŒNxY w# 1 sw Y   ŒRxY w# 1 sw Y   y xY w­w)Nr—   c              “  ó`   K  — | 2 3 d {  –—† }| j                  |«      ƒ d {  –—†  Œ#7 Œ7 Œ6 y ­wr   )rA   )r™   rD   s     r   rE   z-test_swap_client_server.<locals>.echo_handlerW  s6   è ø€ Ø '÷ +ð +�fØ—l‘l 6Ó*×*Ñ*ð+øØ*øñ !(ùs(   ‚.…,‰(Š,�.¢*£.¨,ª.¬.c              “  ó¢   •K  — t        j                  t        j                  «      5   ‰| «      ƒ d {  –—†  d d d «       y 7 Œ# 1 sw Y   y xY w­wr   )rX   rY   r-   rB   )r™   rE   s    €r   Úcrashing_echo_handlerz6test_swap_client_server.<locals>.crashing_echo_handler[  sD   øè ø€ Ü—‘œt×7Ñ7Ó8ñ ,Ù" 7Ó+×+Ð+÷,ð ,Ø+ø÷,ð ,üs+   ƒ$A§A³A´A¸	AÁAÁAÁAs   b as clients   association brokens   a as clientr›   )r4   r.   rH   r-   rI   rJ   rK   rW   r=   r!   rA   r\   r@   rX   rY   rB   rL   rM   )r   ÚaÚbr  rP   Úb_to_aÚa_to_brE   s          @r   Útest_swap_client_serverr  R  s  øè ø€ Ü	‹ð *�qœ(›*ð *¨Ø�h‰h�m‰mÐ,Ó-×-Ð-Ø�h‰h�m‰mÐ,Ó-×-Ð-ó	+õ	,ô ×$Ñ$Ó&÷ 	*ð 	*¨'Ø—-‘- §¡¨Ð5JÓK×KÐKØ—-‘- §¡¨°\ÓB×BÐBà—Y‘Y˜qŸx™x×3Ñ3Ó5´}³ÓGˆFØ—+‘+˜nÓ-×-Ð-ØŸ™Ó)×)¨^Ò;Ð;Ð;à—Y‘Y˜qŸx™x×3Ñ3Ó5´}³ÓGˆFØ×%Ñ%Ó'×'Ð'Ü—‘œt×7Ñ7Ó8ñ 9Ø—k‘kÐ"7Ó8×8Ð8÷9à—+‘+˜nÓ-×-Ð-ØŸ™Ó)×)¨^Ò;Ð;Ð;à× Ñ ×'Ñ'Ô)÷	*÷ 	*÷*÷ *ð *Ø-ùØ-ùð	*ùØKùØBùð .ùØ)ùð (øà8ø÷9ð 9úà-øØ)øð	*ø÷ 	*÷ 	*ñ 	*ú÷*ð *ú÷ *ð *üsA  ƒJŽJ™I9¸H9¹"I9ÁH<Á&I9ÂH?
ÂI9Â!I$Â'I
Â($I$ÃI
ÃA
I$ÄI
ÄI$Ä/I
Ä0AI$Å>I
Å?'I$Æ&I	Æ;IÆ<I	Ç I$ÇI
ÇI$Ç4I 
Ç5#I$ÈI9È#I"È$I9È(JÈ0	JÈ9I9È<I9È?I9ÉI$ÉI$ÉI$ÉI$ÉI$ÉI	ÉIÉI$É I$É"I9É$I6É*I-É+I6É2I9É9J	É>JÊJÊ
Jc           	   ƒ  ó¦  ‡‡‡‡‡	K  — t        «       Š	‰	j                  «        dŠdˆˆ	fd„}|‰	_        t        | ¬«      4 ƒd {  –—† \  }Št	        «       5 Št        j                  «       4 ƒd {  –—† }d	ˆˆˆfd„}|j                  |«       t        j                  d«      ƒ d {  –—†  dŠ|j                  j                  d‰j                  j                  «       «      ƒ d {  –—†  d d d «      ƒd {  –—†  d d d «       d d d «      ƒd {  –—†  y 7 ŒÌ7 Œ£7 Œo7 Œ37 Œ%# 1 ƒd {  –—†7  sw Y   Œ5xY w# 1 sw Y   Œ9xY w7 Œ0# 1 ƒd {  –—†7  sw Y   y xY w­w)
NTc                ó^   •— ‰rt        d| «       y t        d| «       ‰j                  | «       y )Nzdropped packetzdelivered packet)r<   rw   ©rD   Ú
blackholedry   s    €€r   r{   z@test_openssl_retransmit_doesnt_break_stuff.<locals>.route_packet}  s/   ø€ ÙÜÐ" FÔ+ØÜÐ  &Ô)ð 	×Ñ˜&Õ!r   rf   c               “  óÞ   •K  — ‰j                  ‰‰«      } | j                  d¬«      ƒ d {  –—†  | j                  d«      ƒ d {  –—†  | j                  «       ƒ d {  –—† dk(  sJ ‚y 7 Œ;7 Œ$7 Œ­w)Ng      ø?©Úinitial_retransmit_timeoutó   hi)rW   r@   rA   r\   )rŽ   r_   r$   r`   s    €€€r   Ú	connecterz=test_openssl_retransmit_doesnt_break_stuff.<locals>.connecter‘  sh   øè ø€ Ø,×4Ñ4°W¸jÓI�FØ ×-Ñ-ÈÐ-ÓM×MÐMØ Ÿ+™+ eÓ,×,Ð,Ø!'§¡Ó!1×1°UÒ:Ð:Ñ:ð NøØ,øØ1ús3   ƒ(A-«A'¬A-ÁA)ÁA-ÁA+ÁA-Á)A-Á+A-gš™™™™™ñ?Fr©   r�   ©rF   rG   )r   rƒ   r{   rQ   r4   r-   rI   r}   rs   r.   rç   r=   )
r   r$   r{   rœ   rP   r  r_   r  r`   ry   s
    `    @@@@r   Ú*test_openssl_retransmit_doesnt_break_stuffr  q  s2  üè ø€ ô 
‹€BØ‡I�I„Kà€Jö"ð #€B„Oä¨:Ô6÷ ð Ñ:T¸?ÈGÜ‹Zð 	˜?Ü×(Ñ(Ó*÷ ð ¨g÷;ð ×"Ñ" 9Ô-ô —j‘j “o×%Ð%ð #�
Ø%×,Ñ,×3Ñ3ØØ#×*Ñ*×6Ñ6Ó8ó÷ ð ÷!÷ ÷	÷÷ ñ øðøð &øðøð!ø÷ ÷ ñ ú÷	ð 	úðø÷ ÷ ñ üsË   ‡;EÁDÁEÁD<ÁD.Á-D
Á.D.Á12DÂ#D
Â$=DÃ!D
Ã"DÃ&D.Ã1DÃ2D.Ã6D<Ã>EÄ	D:Ä
EÄD.ÄDÄDÄD.ÄD+ÄD"Ä D+Ä'D.Ä.D7	Ä3D<Ä:EÄ<EÅEÅEÅ
Ec              ƒ  ó  ‡
‡K  — t        «       Š‰j                  «        dŠ
dˆ
ˆfd„}|‰_        t        |¬«      4 ƒd {  –—† \  }}dD ]~  }t	        «       5 }t        j                  «       }dŠ
|j                  |t        «       «      }|j                  |¬«      ƒ d {  –—†  t        j                  «       }	|	|z
  |k(  sJ ‚	 d d d «       Œ€ d d d «      ƒd {  –—†  y 7 Œ›7 Œ@# 1 sw Y   ŒŸxY w7 Œ# 1 ƒd {  –—†7  sw Y   y xY w­w)NTc                ó2   •— ‰rdŠy ‰j                  | «       y )NF)rw   r  s    €€r   r{   zCtest_initial_retransmit_timeout_configuration.<locals>.route_packet°  s   ø€ áØ‰Jà×Ñ˜fÕ%r   rf   )rÃ   r   é   r  r�   )
r   rƒ   r{   rQ   r4   r-   Úcurrent_timerW   r!   r@   )rŠ   r   r{   rŒ   r_   ÚtrŽ   Úbeforer™   Úafterr  ry   s             @@r   Ú-test_initial_retransmit_timeout_configurationr  ¨  sü   ùè ø€ ô 
‹€BØ‡I�I„Kà€Jö&ð #€B„Oä¨:Ô6÷ +ð +¹,¸1¸gØò 	+ˆAÜ“ð +˜vÜ×*Ñ*Ó,�Ø!�
Ø Ÿ.™.¨´-³/ÓB�Ø×*Ñ*ÀaÐ*ÓH×HÐHÜ×)Ñ)Ó+�Ø˜v‘~¨Ò*Ð*Ñ*÷+ð +ð	+÷+÷ +ñ +øð Iø÷	+ð +úð+ø÷ +÷ +ñ +üsq   „;D¿CÁ DÁC-ÁACÂC
Â"CÃ 
C-Ã
DÃC+ÃDÃCÃC(Ã$C-Ã+DÃ-C?Ã3C6Ã4C?Ã;Dc              ƒ  ó  ‡‡K  — dŠt        «       Š‰j                  «        dˆˆfd„}|‰_        t        ‰| ¬«      4 ƒd {  –—† \  }}t	        «       5 }|j                  ||«      }|j                  ‰«       |j                  «       ƒ d {  –—†  |j                  d«      ƒ d {  –—†  |j                  «       ƒ d {  –—† dk(  sJ ‚	 d d d «       d d d «      ƒd {  –—†  y 7 Œ�7 ŒV7 Œ?7 Œ)# 1 sw Y   Œ"xY w7 Œ# 1 ƒd {  –—†7  sw Y   y xY w­w)Ni,  c                óº   •— t        d| › �«       t        dt        | j                  «      › �«       t        | j                  «      ‰k  sJ ‚‰j                  | «       y )Núdelivering zpayload size: )r<   rö   ru   rw   )rD   ÚMTUry   s    €€r   r{   z9test_explicit_tiny_mtu_is_respected.<locals>.route_packetÎ  sP   ø€ Ü�˜F˜8Ð$Ô%Ü�œs 6§>¡>Ó2Ð3Ð4Ô5Ü�6—>‘>Ó" cÒ)Ð)Ð)Ø
×Ñ˜&Õ!r   )r6   r   r  r�   )
r   rƒ   r{   rQ   r4   rW   r?   r@   rA   r\   )	r   r$   r{   Ú_serverr_   rŽ   r™   r#  ry   s	          @@r   Ú#test_explicit_tiny_mtu_is_respectedr%  Ä  sð   ùè ø€ ð
 €Cä	‹€BØ‡I�I„Kö"ð #€B„Oä C°JÔ?÷ 4ð 4ÑCUÀGÈWÜ‹Zð 	4˜6Ø—n‘n W¨jÓ9ˆGØ×&Ñ& sÔ+Ø×&Ñ&Ó(×(Ð(Ø—,‘,˜uÓ%×%Ð%Ø Ÿ™Ó*×*¨eÒ3Ð3Ñ3÷	4÷4÷ 4ñ 4øð )øØ%øØ*ø÷	4ð 	4úð4ø÷ 4÷ 4ñ 4üs•   „<D	Á CÁD	ÁC4Á7C&Â	C Â
C&Â"C"Â#C&Â:C$Â;	C&ÃC4ÃD	ÃC2ÃD	Ã C&Ã"C&Ã$C&Ã&C/	Ã+C4Ã2D	Ã4DÃ:C=Ã;DÄD	c              ƒ  ó  ‡	‡
K  — t        «       Š	‰	j                  «        | rdndŠ
d	ˆ	ˆ
fd„}|‰	_        t        | |¬«      4 ƒd {  –—† \  }}t	        | ¬«      5 }|j                  ||«      }|j                  d«       |j                  d«      ƒ d {  –—†  |j                  «       ƒ d {  –—† dk(  sJ ‚|j                  «       dkD  sJ ‚	 d d d «       d d d «      ƒd {  –—†  y 7 Œœ7 ŒR7 Œ<# 1 sw Y   Œ xY w7 Œ# 1 ƒd {  –—†7  sw Y   y xY w­w)
NiÐ  i$  c                ó’   •— t        | j                  «      ‰kD  rt        d| › �«       y t        d| › �«       ‰j                  | «       y )Nz	dropping r"  )rö   ru   r<   rw   )rD   ry   r6   s    €€r   r{   z@test_handshake_handles_minimum_network_mtu.<locals>.route_packetì  s@   ø€ Üˆv�~‰~Ó Ò$Ü�I˜f˜XÐ&Õ'ä�K ˜xÐ(Ô)Ø×Ñ˜fÕ%r   rS   r8   i'  r“   i(#  r�   )
r   rƒ   r{   rQ   r4   rW   r?   rA   r\   r[   )r%   rŠ   r   r$   r{   rŒ   r_   r`   rŽ   ry   r6   s            @@r   Ú*test_handshake_handles_minimum_network_mtur(  ß  sý   ùè ø€ ô 
‹€BØ‡I�I„Ká‰) €Cö&ð #€B„Oô
   T°jÔA÷ 	5ð 	5Á\ÀaÈÜ˜4Ô ð 	5 OØ$×,Ñ,¨W°jÓAˆFð ×%Ñ% dÔ+Ø—+‘+˜fÓ%×%Ð%ØŸ™Ó)×)¨VÒ3Ð3Ð3Ø×+Ñ+Ó-°Ò4Ð4Ñ4÷	5÷	5÷ 	5ñ 	5øð &øØ)ø÷	5ð 	5úð	5ø÷ 	5÷ 	5ñ 	5üs„   „A D
ÁC!ÁD
ÁC5Á8C'ÂC#ÂC'Â(C%Â)C'ÃC5ÃD
ÃC3ÃD
Ã#C'Ã%C'Ã'C0	Ã,C5Ã3D
Ã5DÃ;C>Ã<DÄD
z$always:unclosed DTLS:ResourceWarningc              ƒ  ó  ‡ K  — t         j                  j                  «       j                  }dˆ fd„}t	        j
                  t        «      5   |«       ƒ d {  –—† }t         j                  j                  «       ƒ d {  –—†  t        «        d d d «       t         j                  j                  «       ƒ d {  –—†  t         j                  j                  «       j                  }|k  sJ ‚||k(  sJ ‚y 7 Œ™7 Œu# 1 sw Y   ŒjxY w7 ŒK­w)Nc               “  óÊ  •K  — t        «       } t        j                  j                  t        j                  j                  ¬«      5 }|j	                  d«      ƒ d {  –—†  | j                  |j                  «       ‰«      }t        j                  «       4 ƒd {  –—† }|j                  |j                  «       t        j                  j                  «       ƒ d {  –—†  |j                  j                  «        d d d «      ƒd {  –—†  d d d «       t        j                  j                  «       j                   }|S 7 ŒÞ7 Œ£7 Œd7 Œ<# 1 ƒd {  –—†7  sw Y   ŒLxY w# 1 sw Y   ŒPxY w­w)Nrà   r—   )r4   r-   r.   r1   rH   rW   r=   rI   r}   r@   ÚtestingÚwait_all_tasks_blockedrL   rM   ÚlowlevelÚcurrent_statisticsÚtasks_living)Úer¶   ÚcrP   Úduring_tasksr$   s        €r   Ústart_and_forget_endpointzDtest_system_task_cleaned_up_on_gc.<locals>.start_and_forget_endpoint  s  øè ø€ Ü‹Jˆô �[‰[×Ñ¤T§[¡[×%;Ñ%;ÐÓ<ð 	.ÀØ—&‘&Ð)Ó*×*Ð*Ø—	‘	˜!Ÿ-™-›/¨:Ó6ˆAÜ×(Ñ(Ó*÷ .ð .¨gØ×"Ñ" 1§>¡>Ô2Ü—l‘l×9Ñ9Ó;×;Ð;Ø×$Ñ$×+Ñ+Ô-÷.÷ .÷	.ô —}‘}×7Ñ7Ó9×FÑFˆØÐð +øð.øà;øð.ø÷ .÷ .ñ .ú÷	.ð 	.üsŠ   ƒAE#ÁEÁD:Á<EÂD<ÂEÂ=EÃD>ÃEÃ8EÄE ÄEÄ2E#Ä:EÄ<EÄ>EÅ EÅE	ÅEÅ	E	ÅEÅE ÅE#)rF   Úint)
r-   r-  r.  r/  rX   ÚwarnsÚResourceWarningr+  r,  r   )r$   Úbefore_tasksr3  r2  Úafter_taskss   `    r   Ú!test_system_task_cleaned_up_on_gcr9    sÉ   øè ø€ ä—=‘=×3Ñ3Ó5×BÑB€Lõô  
�‰”oÓ	&ñ Ù6Ó8×8ˆÜ�l‰l×1Ñ1Ó3×3Ð3ÜÔ÷ô
 �,‰,×
-Ñ
-Ó
/×/Ð/ä—-‘-×2Ñ2Ó4×AÑA€KØ˜,Ò&Ð&Ð&Ø˜;Ò&Ð&Ñ&ð 9øØ3ø÷ð úð
 0úsN   ƒADÁC4ÁC0Á%C4Á<C2Á=C4Â)DÂ4D Â5;DÃ0C4Ã2C4Ã4C=Ã9Dc               ƒ  óâ   K  — t        «       } t        j                  t        «      5  ~ t	        «        d d d «       t
        j                  j                  «       ƒ d {  –—†  y # 1 sw Y   Œ0xY w7 Œ­wr   )r4   rX   r5  r6  r   r-   r+  r,  ©r0  s    r   Ú!test_gc_before_system_task_startsr<  (  sT   è ø€ ä‹
€Aä	�‰”oÓ	&ñ ØÜÔ÷ô �,‰,×
-Ñ
-Ó
/×/Ñ/÷	ð úð 0ús'   ‚$A/¦A!²)A/ÁA-ÁA/Á!A*Á&A/c               ƒ  ó‚  K  — t        «       } | j                  «        t        «       }|j                  j	                  d«      ƒ d {  –—†  |j                  «        t        j                  j                  «       ƒ d {  –—†  t        j                  j                  t        j                  j                  ¬«      5 }|j                  d|j                  j                  «       «      ƒ d {  –—†  d d d «       t        j                  t        «      5  ~t        «        d d d «       y 7 ŒÛ7 Œ§7 Œ># 1 sw Y   Œ=xY w# 1 sw Y   y xY w­w)Nr—   rà   r©   )r   rƒ   r4   r.   rH   Ú_ensure_receive_loopr-   r+  r,  r1   rç   r=   rX   r5  r6  r   )ry   r0  r¶   s      r   Útest_gc_as_packet_receivedr?  3  sï   è ø€ ä	‹€BØ‡I�I„Kä‹
€AØ
�(‰(�-‰-Ð(Ó
)×)Ð)Ø×ÑÔä
�,‰,×
-Ñ
-Ó
/×/Ð/ä	�‰×	Ñ	¤§¡×!7Ñ!7Ð	Ó	8ð 7¸AØ�h‰h�v˜qŸx™x×3Ñ3Ó5Ó6×6Ð6÷7ô
 
�‰”oÓ	&ñ ØÜÔ÷ð ð *øð 0øð 	7ø÷7ð 7ú÷
ð üsf   ‚AD?ÁD!Á5D?Á;D#Á<<D?Â8.D'Ã&D%Ã'D'Ã+!D?ÄD3Ä
D?Ä#D?Ä%D'Ä'D0Ä,D?Ä3D<Ä8D?c                 ó¨   — dd„} t        j                  | «      }t        j                  t        «      5  ~t        «        d d d «       y # 1 sw Y   y xY w)Nc               “  óR   K  — t        «       } | j                  «        t        «       S ­wr   )r   rƒ   r4   )ry   s    r   Úmainz&test_gc_after_trio_exits.<locals>.mainJ  s    è ø€ ô
 ‹YˆØ
�	‰	ŒÜ‹zÐùs   ‚%')rF   r   )r-   ÚrunrX   r5  r6  r   )rB  r0  s     r   Útest_gc_after_trio_exitsrD  H  s@   € óô 	�‰�‹€AÜ	�‰”oÓ	&ñ ØÜÔ÷÷ ñ ús   ³AÁAc               ƒ  óÎ   K  — t        «       5 } | j                  j                  «        t        j                  j                  «       ƒ d {  –—†  d d d «       y 7 Œ# 1 sw Y   y xY w­wr   )r4   r.   r¡   r-   r+  r,  r;  s    r   Ú'test_already_closed_socket_doesnt_crashrF  Y  sR   è ø€ Ü	‹ð 4�qð 	
�‰�‰Ôä�l‰l×1Ñ1Ó3×3Ð3÷4ð 4ð
 	4ø÷4ð 4üs.   ‚A%�<AÁ	AÁ
AÁ	A%ÁAÁA"ÁA%c              ƒ  óÌ  ‡‡K  — t        «       Š‰j                  «        t        |¬«      4 ƒd {  –—† \  Š}dˆˆfd„}|‰_        t	        «       5 }t        j                  d«      5  |j                  ||«      }|j                  «       ƒ d {  –—†  d d d «       d d d «       d d d «      ƒd {  –—†  y 7 Œ�7 Œ'# 1 sw Y   Œ&xY w# 1 sw Y   Œ*xY w7 Œ!# 1 ƒd {  –—†7  sw Y   y xY w­w)Nrf   c                ó\   •— ‰j                  | «       ‰j                  j                  «        y r   )rw   r.   r¡   )rD   ry   rN   s    €€r   r{   zEtest_socket_closed_while_processing_clienthello.<locals>.route_packetl  s!   ø€ Ø×Ñ˜fÔ%Ø�M‰M×ÑÕ!r   r€   r�   )	r   rƒ   rQ   r{   r4   r-   rˆ   rW   r@   )	rŠ   r   r$   r_   r{   r`   rŽ   ry   rN   s	          @@r   Ú/test_socket_closed_while_processing_clienthellorI  b  sÐ   ùè ø€ ô 
‹€BØ‡I�I„Kô  ¨:Ô6÷ ,ð ,Ñ:K¸6À7ö	"ð 'ˆŒä‹Zð 	,˜?Ü×#Ñ# BÓ'ñ ,Ø(×0Ñ0°¸*ÓE�Ø×)Ñ)Ó+×+Ð+÷,÷	,÷,÷ ,ñ ,øð ,ø÷,ð ,ú÷	,ð 	,úð,ø÷ ,÷ ,ñ ,üs†   „+C$¯B1°C$³CÁCÁ%&B5ÂB3
ÂB5ÂCÂCÂ C$Â+CÂ,C$Â3B5Â5B>Â:CÃC
	ÃCÃC$ÃC!ÃCÃC!ÃC$c           	   ƒ  óx  ‡	K  — t        «       }|j                  «        dd„}||_        t        |¬«      4 ƒd {  –—† \  }}t	        «       5 }|j                  |t        «       «      Š	t        j                  «       4 ƒd {  –—† }dˆ	fd„}|j                  |«       t        j                  d«      ƒ d {  –—†  |j                  |t        «       «       d d d «      ƒd {  –—†  d d d «       d d d «      ƒd {  –—†  y 7 ŒÀ7 Œ}7 ŒK7 Œ## 1 ƒd {  –—†7  sw Y   Œ3xY w# 1 sw Y   Œ7xY w7 Œ.# 1 ƒd {  –—†7  sw Y   y xY w­w)Nc                 ó   — y r   r#   ©rD   s    r   r{   zGtest_association_replaced_while_handshake_running.<locals>.route_packet~  s   € Ør   rf   c               “  ó²   •K  — t        j                  t        j                  «      5  ‰ j	                  «       ƒ d {  –—†  d d d «       y 7 Œ# 1 sw Y   y xY w­wr   )rX   rY   r-   rB   r@   )Úc1s   €r   Údoomed_handshakezKtest_association_replaced_while_handshake_running.<locals>.doomed_handshake‰  sF   øè ø€ ÜŸ™¤t×'?Ñ'?Ó@ñ 0Ø Ÿo™oÓ/×/Ð/÷0ð 0Ø/ø÷0ð 0üs,   ƒ$A§A»A	¼AÁ 	AÁ	AÁAÁAr€   r�   r  )r   rƒ   r{   rQ   r4   rW   r!   r-   rI   r}   rs   )
rŠ   r   ry   r{   rŒ   r_   r`   rP   rO  rN  s
            @r   Ú1test_association_replaced_while_handshake_runningrP  x  s'  øè ø€ ô 
‹€BØ‡I�I„Kóð #€B„Oä¨:Ô6÷ Bð B¹,¸1¸gÜ‹Zð 	B˜?à ×(Ñ(¨´-³/ÓBˆBÜ×(Ñ(Ó*÷ 
Bð 
B¨gõ0ð ×"Ñ"Ð#3Ô4ä—j‘j “n×$Ð$à×'Ñ'¨´³ÔA÷
B÷ 
B÷	B÷B÷ Bñ Bøð
Bøð %øð
Bø÷ 
B÷ 
Bñ 
Bú÷	Bð 	BúðBø÷ B÷ Bñ Büs¶   ƒ6D:¹C:ºD:½D%Á3DÁ>C<
Á?DÂ0DÂ2C>
Â3DÃDÃD ÃDÃ!D%Ã)D:Ã4D#Ã5D:Ã<DÃ>DÄ DÄDÄDÄ	DÄDÄD 	ÄD%Ä#D:Ä%D7Ä+D.Ä,D7Ä3D:c              ƒ  ó"  K  — t        «       }|j                  «        dd„}||_        t        | ¬«      4 ƒd {  –—† \  }}t	        «       5 }|j                  |t        «       «      }|j                  |t        «       «       t        j                  t        j                  «      5  |j                  «       ƒ d {  –—†  d d d «       d d d «       d d d «      ƒd {  –—†  y 7 Œ£7 Œ'# 1 sw Y   Œ&xY w# 1 sw Y   Œ*xY w7 Œ!# 1 ƒd {  –—†7  sw Y   y xY w­w)Nc                ó   — t        «       ‚r   )ÚAssertionErrorrL  s    r   r{   zGtest_association_replaced_before_handshake_starts.<locals>.route_packet›  s   € ÜÓÐr   rf   )rD   r   rF   r   )r   rƒ   r{   rQ   r4   rW   r!   rX   rY   r-   rB   r@   )r   ry   r{   rŒ   r_   r`   rN  s          r   Ú1test_association_replaced_before_handshake_startsrT  ”  sâ   è ø€ ô 
‹€BØ‡I�I„Kóð #€B„Oä¨:Ô6÷ (ð (¹,¸1¸gÜ‹Zð 	(˜?à ×(Ñ(¨´-³/ÓBˆBØ×#Ñ# G¬]«_Ô=Ü—‘œt×7Ñ7Ó8ñ (Ø—o‘oÓ'×'Ð'÷(÷		(÷(÷ (ñ (øð (ø÷(ð (ú÷		(ð 	(úð(ø÷ (÷ (ñ (üs‡   ‚6D¸C¹D¼C:Á
AC,Â"C Â6C
Â7C Â;C,ÃC:ÃDÃC8ÃDÃC Ã C)Ã%C,Ã,C5	Ã1C:Ã8DÃ:DÄ DÄDÄDc           	   ƒ  óÆ  K  — t        | ¬«      4 ƒd {  –—† \  }}t        «       5 }t        j                  «       4 ƒd {  –—† }t	        dd«      D ]9  }|j                  d|ft        «       «      }|j                  |j                  «       Œ; |j                  |t        «       «      }|j                  d«      ƒ d {  –—†  |j                  «       ƒ d {  –—† dk(  sJ ‚|j                  j                  «        d d d «      ƒd {  –—†  d d d «       d d d «      ƒd {  –—†  y 7 �Œ7 Œâ7 Œi7 ŒS7 Œ&# 1 ƒd {  –—†7  sw Y   Œ6xY w# 1 sw Y   Œ:xY w7 Œ1# 1 ƒd {  –—†7  sw Y   y xY w­w)Nrf   rÃ   r€   r9   r©   )rQ   r4   r-   rI   r…   rW   r!   r}   r@   rA   r\   rL   rM   )r   rŒ   r_   r`   rP   r�   r™   s          r   Útest_send_to_closed_local_portrV  ©  s=  è ø€ ô  ¨:Ô6÷ 	.ð 	.¹,¸1¸gÜ‹Zð 	.˜?Ü×(Ñ(Ó*÷ .ð .¨gÜ˜q "›ò =�AØ-×5Ñ5°{ÀAÐ6FÌËÓX�GØ×&Ñ& w×';Ñ';Õ<ð=ð *×1Ñ1°'¼=»?ÓK�Ø—l‘l 6Ó*×*Ð*Ø$Ÿ_™_Ó.×.°&Ò8Ð8Ð8Ø×$Ñ$×+Ñ+Ô-÷.÷ .÷	.÷	.÷ 	.ñ 	.ùð.øð
 +øØ.øð.ø÷ .÷ .ñ .ú÷	.ð 	.úð	.ø÷ 	.÷ 	.ñ 	.üsÆ   ‚E!“D”E!—E¥D>¾D!
¿D>ÁA7D)Â9D#
Â:D)ÃD%
Ã#D)Ã5D>Ä D'ÄD>ÄEÄE!ÄE
ÄE!Ä!D>Ä#D)Ä%D)Ä'D>Ä)D;Ä/D2Ä0D;Ä7D>Ä>E	ÅEÅ
E!ÅEÅEÅEÅE!)rF   úSSL.Context)r2   z
int | boolrF   r   )
r   rW  r5   Úboolr6   z
int | Noner%   rX  rF   z:AsyncGenerator[tuple[DTLSEndpoint, tuple[str, int]], None])r%   rX  r   rW  r$   rW  rF   rG   )rŠ   ztrio.testing.MockClockr   rW  rF   rG   )r   rW  r$   rW  rF   rG   )r   rW  rF   rG   r  )rŠ   útrio.abc.Clockr$   rW  rF   rG   )
rŠ   rY  r   rW  r$   rW  r¾   r4  rF   rG   )rŠ   rY  r   rW  rF   rG   )rŠ   rY  r   rW  r$   rW  rF   rG   )
r%   rX  rŠ   rY  r   rW  r$   rW  rF   rG   )r$   rW  rF   rG   )KÚ
__future__r   rt   Ú
contextlibr   Ú	itertoolsr   Útypingr   r   rø   rX   Útrio._tests.pytest_pluginr   ÚtrustmeÚOpenSSLr	   ÚImportErrorÚerrorr-   Útrio.testingr
   r   Útrio.testing._fake_netr   r   Ú_core._tests.tutilr   r   r   Úcollections.abcr   ÚCAr   Ú
issue_certr   Úfixturer   r!   r$   ÚmarkÚparametrizeÚparamÚparametrize_ipv6r4   rQ   rc   r‘   r•   rž   r¤   r§   r´   r·   r»   r½   rÇ   rñ   rþ   r  r  r  r  r%  r(  Úfilterwarningsr9  r<  r?  rD  rF  rI  rP  rT  rV  r#   r   r   ú<module>ro     s�  ðÝ "ã Ý *Ý ß *ã Û å Að'ÛÝó
 Û ß *ß 5ç DÑ DáÝ.à€W‡Z�Zƒ\€Ø�m‰m˜MÓ*€ð ‡�òó ðóð ‡�òó ðð —;‘;×*Ñ*Ø
Ø
ˆLˆF�L‰L˜ ZÔ0Ð1Ø	�Ðð +ó Ð ó(ð ð ØØñ%.àð%.ð ð%.ð 
ð	%.ð
 ð%.ð @ò%.ó ð%.ðP ðLØ
ðLØ'ðLØ5@ðLà	òLó ðLð@ ðV"Ø*ðV"àðV"ð 
òV"ó ðV"ðr	4Øð	4Ø)4ð	4à	ó	4ó1ð2"Øð"Ø)4ð"à	ó"ó(óYó>ó*ð$'Ø"ð'Ø0;ð'à	ó'ð ‡�×Ñ˜¨¨R¨Ó1ðAØ"ðAàðAð ðAð ð	Að
 
òAó 2ðAð.o$Ø"ðo$Ø0;ðo$à	óo$ðd)#Ø"ð)#Ø0;ð)#ØITð)#à	ó)#ðX**Ø"ð**Ø0;ð**à	ó**óZ*ð> ð0Øð0Ø)4ð0à	ò0ó ð0ðl+Ø"ð+Ø0;ð+à	ó+ð84Øð4Ø)4ð4à	ó4ð6 ð!5Ø
ð!5à"ð!5ð ð!5ð ð	!5ð
 
ò!5ó ð!5ðH ‡�×ÑÐBÓCò 'ó Dð 'ðF ‡�×ÑÐBÓCò0ó Dð0ð ‡�×ÑÐBÓCòó Dðð( ‡�×ÑÐBÓCòó Dðó 4ð,Ø"ð,Ø0;ð,ØITð,à	ó,ð,BØ"ðBØ0;ðBà	óBð8(Øð(à	ó(ô*.øðs ò 'Ù ×&Ò&ûð'ús   ®
J ÊJÊJÊJ