Ë
    ÷g÷j~  ã                  ó^   — d Z ddlmZ ddlZddlZddlZddlmZ dZd
d„Z	dd„Z
ddd„Zdd	„Zy)zEMinimal RFC6455 WebSocket helpers for text frames (Intake chat host).é    )ÚannotationsN)ÚIteratorz$258EAFA5-E914-47DA-95CA-C5AB0DC85B11c                óØ   — t        j                  | j                  «       t        z   j	                  d«      «      j                  «       }t        j                  |«      j                  d«      S )Núutf-8Úascii)	ÚhashlibÚsha1ÚstripÚGUIDÚencodeÚdigestÚbase64Ú	b64encodeÚdecode)Úsec_websocket_keyr   s     ú/app/clevertree_chat/wsutil.pyÚ
accept_keyr      sO   € Ü�\‰\Ð,×2Ñ2Ó4´tÑ;×CÑCÀGÓLÓM×TÑTÓV€FÜ×Ñ˜FÓ#×*Ñ*¨7Ó3Ð3ó    c                óú   — | j                  d«      }t        |«      }|dk  rt        j                  dd|«      }||z   S |dk  rt        j                  ddd|«      }||z   S t        j                  ddd|«      }||z   S )	Nr   é~   z!BBé�   i   ú!BBHz!BBQé   )r   ÚlenÚstructÚpack)ÚmessageÚpayloadÚnÚheaders       r   Úencode_textr!      sŠ   € Ø�n‰n˜WÓ%€GÜˆG‹€AØˆ3‚wÜ—‘˜U D¨!Ó,ˆð
 �GÑÐð	 
ˆUŠÜ—‘˜V T¨3°Ó2ˆð �GÑÐô —‘˜V T¨3°Ó2ˆØ�GÑÐr   c                ó2   — t        j                  ddd| «      S )Nr   éˆ   é   )r   r   )Úcodes    r   Úencode_closer&      s   € Ü�;‰;�v˜t Q¨Ó-Ð-r   c              #  óô  ‡K  — 	 t        | «      dk  ry| d   | d   }}|dz  }|dz  dk7  }|dz  }d}|dk(  r.t        | «      d	k  ryt        j                  d
| dd	 «      d   }d	}n2|dk(  r-t        | «      dk  ryt        j                  d| dd «      d   }d}|rd	nd}||z   |z   }t        | «      |k  ryt        | || «      }	| d|…= |r&|	dd	 Št        ˆfd„t	        |	d	d «      D «       «      }
n|	}
||
f–— Œó­w)zGYield (opcode, payload) for complete frames; leave remainder in buffer.r$   Nr   é   é   é€   r   r   é   z!Hé
   z!Qc              3  ó:   •K  — | ]  \  }}|‰|d z     z  –— Œ y­w)r+   N© )Ú.0ÚiÚbÚmasks      €r   Ú	<genexpr>ziter_frames.<locals>.<genexpr>?   s$   øè ø€ ÐLÑ8K±°°1˜A  Q¨¡U¡�OÑ8Kùs   ƒ)r   r   ÚunpackÚbytesÚ	enumerate)ÚbufferÚb0Úb1ÚopcodeÚmaskedÚlengthÚoffsetÚmask_lenÚtotalÚdatar   r2   s              @r   Úiter_framesrA   #   s9  øè ø€ à
Üˆv‹;˜Š?ØØ˜‘˜F 1™IˆBˆØ�d‘ˆØ�t‘) Ñ!ˆØ�d‘ˆØˆØ�SŠ=Ü�6‹{˜QŠØÜ—]‘] 4¨°°!¨Ó5°aÑ8ˆFØ‰FØ�sŠ]Ü�6‹{˜RÒØÜ—]‘] 4¨°°"¨Ó6°qÑ9ˆFØˆFÙ‘1 AˆØ˜Ñ! FÑ*ˆÜˆv‹;˜ÒØÜ�V˜F 5Ð)Ó*ˆØ�6�E�6ˆNÙØ˜˜�8ˆDÜÓL¼	À$ÀqÀrÀ(Ô8KÓLÓL‰GàˆGØ�gˆoÒð; ùs   ƒC5C8)r   ÚstrÚreturnrB   )r   rB   rC   r5   )iè  )r%   ÚintrC   r5   )r7   Ú	bytearrayrC   zIterator[tuple[int, bytes]])Ú__doc__Ú
__future__r   r   r   r   Útypingr   r   r   r!   r&   rA   r.   r   r   Ú<module>rI      s2   ðÙ Kå "ã Û Û Ý ð .€ó4ó
	ô.ôr   