+
    ~jF                       ^ RI Ht ^ RIt^ RIt^ RIt^ RIHtHt ^ RIHt ^ RI	H
t
HtHt ^ RIHt ^RIHt ^RIHt ^R	IHt ^R
IHtHtHt ^RIHt ^RIHt ^RIHtHtHtH t H!t!H"t" ]! ^ ]PF                  R7      t$] ! R R4      4       t%] ! R R4      4       t& ! R R]]R,          ,          4      t' ! R R]4      t( ! R R]!4      t)R# )    )annotationsN)AsyncGeneratorAsyncIterable)	dataclass)AnyClassVarLiteral)rtc)utils)APIConnectionErrorlogger)DEFAULT_API_CONNECT_OPTIONSUSERDATA_TIMED_TRANSCRIPTAPIConnectOptions)aio)StreamAdapter)TTSAudioEmitterChunkedStreamSynthesizedAudioSynthesizeStreamTTSCapabilities)	max_retrytimeoutc                  6    ] tR t^!t$ R]R&   R]R&   R]R&   RtR# )
_TTSStatusbool	availablezasyncio.Task[None] | Nonerecovering_taskneeds_resampling N__name__
__module____qualname____firstlineno____annotations____static_attributes__r"       x/Users/mitch_tango/dev/rabbit-r1-livekit/agent/.venv/lib/python3.14/site-packages/livekit/agents/tts/fallback_adapter.pyr   r   !   s    O..r*   r   c                  ,    ] tR t^(t$ R]R&   R]R&   RtR# )AvailabilityChangedEventr   ttsr   r   r"   Nr#   r"   r*   r+   r-   r-   (   s    	HOr*   r-   c                     a  ] tR t^.tRtR^RR/R V 3R lllt]R R l4       t]R	 R
 l4       tR]	/R R llt
R]	/R R lltR R ltR R ltR R ltRtV ;t# )FallbackAdapterzxAgent Fallback Adapter for TTS. Manages multiple STT instances with automatic fallback
when the primary provider fails.
max_retry_per_ttssample_rateNc               (    V ^8  d   QhRRRRRRRR/# )	   r.   z	list[TTS]r1   intr2   z
int | NonereturnNoner"   )formats   "r+   __annotate__FallbackAdapter.__annotate__5   s8     5B 5B5B 	5B
  5B 
5Br*   c          
     V  < \        V4      ^8  d   \        R4      h\        V Uu0 uF  qDP                  kK  	  up4      ^8w  d   \        R4      hVf   \        R V 4       4      pV^ ,          P                  p\        ST `  \        \        ;QJ d    R V 4       F  '       g   K   RM	  RM! R V 4       4      \        ;QJ d    R V 4       F  '       d   K   RM	  RM! R V 4       4      R	7      VVR
7       Wn	        W n
        . V n        V F  pW4P                  8g  pV'       d5   \        P                  ! RVP                   RVP                   RV R24       V P                  P!                  \#        RRVR7      4       VP%                  RV P&                  4       K  	  R# u upi )a  
Initialize a FallbackAdapter that manages multiple TTS instances.

Args:
    tts (list[TTS]): A list of TTS instances to use for fallback.
    max_retry_per_tts (int, optional): Maximum number of retries per TTS instance. Defaults to 2.
    sample_rate (int | None, optional): Desired sample rate for the synthesized audio. If None, uses the maximum sample rate among the TTS instances.

Raises:
    ValueError: If less than one TTS instance is provided.
    ValueError: If TTS instances have different numbers of channels.
z+at least one TTS instance must be provided.z-all TTS must have the same number of channelsNc              3  8   "   T F  qP                   x  K  	  R # 5iN)r2   .0ts   & r+   	<genexpr>+FallbackAdapter.__init__.<locals>.<genexpr>P   s     9SmmSs   c              3  L   "   T F  qP                   P                  x  K  	  R # 5ir=   )capabilities	streamingr>   s   & r+   rA   rB   V   s     D1nn66   "$TFc              3  L   "   T F  qP                   P                  x  K  	  R # 5ir=   )rD   aligned_transcriptr>   s   & r+   rA   rB   W   s     &VRUQ~~'H'HRUrF   )rE   rH   )rD   r2   num_channelszresampling z from zHz to Hz)r   r    r!   metrics_collected)len
ValueErrorrI   maxsuper__init__r   anyall_tts_instances_max_retry_per_tts_statusr2   r   infolabelappendr   on_on_metrics_collected)selfr.   r1   r2   r@   rI   r!   	__class__s   &&$$   r+   rP   FallbackAdapter.__init__5   s_   ( s8a<JKK,1,-2LMM9S99K1v**(#DD###DDD#&3&VRU&V333&VRU&V#V $% 	 	
 ""3)+A*mm;k!''&vk]Z\]^LLT4Rbc DD$d&@&@A + -s   F&c                   V ^8  d   QhRR/# r4   r6   strr"   )r8   s   "r+   r9   r:   m   s     ! !s !r*   c                	    R # )r0   r"   r[   s   &r+   modelFallbackAdapter.modell   s     r*   c                   V ^8  d   QhRR/# r_   r"   )r8   s   "r+   r9   r:   q   s      # r*   c                	    R # )livekitr"   rb   s   &r+   providerFallbackAdapter.providerp   s    r*   conn_optionsc               $    V ^8  d   QhRRRRRR/# )r4   textr`   rj   r   r6   FallbackChunkedStreamr"   )r8   s   "r+   r9   r:   t   s)     [ [[*;[	[r*   c               	    \        WVR 7      # )r.   
input_textrj   )rm   )r[   rl   rj   s   &&$r+   
synthesizeFallbackAdapter.synthesizet   s     %\ZZr*   c                    V ^8  d   QhRRRR/# )r4   rj   r   r6   FallbackSynthesizeStreamr"   )r8   s   "r+   r9   r:   y   s      M M0M	!Mr*   c               	    \        WR 7      # )r.   rj   )rt   )r[   rj   s   &$r+   streamFallbackAdapter.streamy   s     (DLLr*   c                   V ^8  d   QhRR/# r4   r6   r7   r"   )r8   s   "r+   r9   r:   ~   s     - - -r*   c                	p    V P                   '       d$   V P                   ^ ,          P                  4        R# R# )r   N)rS   prewarmrb   s   &r+   r|   FallbackAdapter.prewarm~   s*    "**, r*   c               $    V ^8  d   QhRRRRRR/# )r4   argsr   kwargsr6   r7   r"   )r8   s   "r+   r9   r:      s!     8 83 8# 8$ 8r*   c                	2    V P                   ! R .VO5/ VB  R# )rK   N)emit)r[   r   r   s   &*,r+   rZ   %FallbackAdapter._on_metrics_collected   s    		%777r*   c                   V ^8  d   QhRR/# rz   r"   )r8   s   "r+   r9   r:      s     C Cd Cr*   c                	  "   V P                    F;  pVP                  f   K  \        P                  ! VP                  4      G R j  xL
  K=  	  V P                   F  pVP                  RV P                  4       K!  	  R #  L95i)NrK   )rU   r    r   cancel_and_waitrS   offrZ   )r[   
tts_statusr@   s   &  r+   acloseFallbackAdapter.aclose   sf     ,,J))5))**D*DEEE ' $$AEE%t'A'AB % Fs   B#BA?:B)rT   rU   rS   )r$   r%   r&   r'   __doc__rP   propertyrc   rh   $DEFAULT_FALLBACK_API_CONNECT_OPTIONSrq   rw   r|   rZ   r   r)   __classcell__r\   s   @r+   r0   r0   .   s    5B "#	5B
 #'5B 5Bn ! !  [>b[
M3WM
-8C Cr*   r0   tts_availability_changedc                  v   a  ] tR t^t$ RtR]R&   R V 3R lltR R ltRR	/R
 R lltR R lt	R R lt
RtV ;t# )rm   tts_fallback_adapterClassVar[str]_tts_request_span_namec               (    V ^8  d   QhRRRRRRRR/# )	r4   r.   r0   rp   r`   rj   r   r6   r7   r"   )r8   s   "r+   r9   "FallbackChunkedStream.__annotate__   s,     % %%%36%FW%	%r*   c               	6   < \         SV `  WVR 7       Wn        R# )ro   N)rO   rP   _fallback_adapter)r[   r.   rp   rj   r\   s   &$$$r+   rP   FallbackChunkedStream.__init__   s     	SlS!$r*   c                    V ^8  d   QhRRRR/# r4   event_aiterzAsyncIterable[SynthesizedAudio]r6   r7   r"   )r8   s   "r+   r9   r            7V [_ r*   c                	   "   R # 5ir=   r"   r[   r   s   &&r+   _metrics_monitor_task+FallbackChunkedStream._metrics_monitor_task           
recoveringFc               $    V ^8  d   QhRRRRRR/# )r4   r.   r   r   r   r6   &AsyncGenerator[SynthesizedAudio, None]r"   )r8   s   "r+   r9   r      s$      '+	/r*   c          
    	  "    VP                  V P                  \        P                  ! V P                  V P
                  P                  V P                  P                  V P                  P                  R 7      R7      ;_uu_4       GRj  xL
 pV  Rj  xL
  pV5x  K   L LDRRR4      GRj  xL 
  R#   + GRj  xL 
 '       g   i     R# ; i  \         d_   pT'       d*   \        P                  ! TP                   R2RR/TR7       h \        P                  ! TP                   R2RR/R7       h Rp?ii ; i5i)	r   r   retry_intervalrj   N recovery failedstreamedFextraexc_info error, switching to next TTSr   )rq   _input_textdataclassesreplace_conn_optionsr   rT   r   r   	Exceptionr   warningrW   )r[   r.   r   rw   audioes   &$$   r+   _try_synthesize%FallbackChunkedStream._try_synthesize   s    	~~  (00&&"44GG ..66#'#5#5#D#D	 &    #)    %K 6       	yyk!12:u:MXY NN99+:;!5) 	s   EBC B#C B;B'B%
B'	B;#C %B''B;(C 3B64C 9E;C	C
C	C	C EC E#AD<<EEc                    V ^8  d   QhRRRR/# r4   r.   r   r6   r7   r"   )r8   s   "r+   r9   r      s     U U U Ur*   c                	  a a \        S P                  \        4      '       g   Q hS P                  P                  S P                  P                  P                  V4      ,          oSP                  e!   SP                  P                  4       '       d.   R V V3R llp\        P                  ! V! V4      4      Sn        R # R # )Nc                    V ^8  d   QhRRRR/# r   r"   )r8   s   "r+   r9   9FallbackChunkedStream._try_recovery.<locals>.__annotate__   s      S T r*   c                  <"    SP                  V R R7        Rj  xL
  pK   LDR Sn        \        P                  ! RT P                   R24       SP
                  P                  R\        T R R7      4       R#   \         d     R# i ; i5i)Tr.   r   Ntts.FallbackAdapter, 
 recoveredr   r.   r   )	r   r   r   rV   rW   _ttsr   r-   r   )r.   _r[   r   s   & r+   _recover_tts_task>FallbackChunkedStream._try_recovery.<locals>._recover_tts_task   s     #'#7#7CD#7#Q  a#Q ,0J(KK"7		{* MNIINN20SDI ! sC   BA; &$&A; &AA; 9B;B
B	B

B)

isinstancer   r0   rU   rS   indexr    doneasynciocreate_task)r[   r.   r   r   s   f& @r+   _try_recovery#FallbackChunkedStream._try_recovery   s    $))_5555YY&&tyy'?'?'E'Ec'JK
%%-1K1K1P1P1R1R  *1)<)<=Ns=S)TJ&! 2Sr*   c                    V ^8  d   QhRRRR/# r4   output_emitterr   r6   r7   r"   )r8   s   "r+   r9   r      s     =
 =
 =
$ =
r*   c           
     	  "   \        V P                  \        4      '       g   Q h\        P                  ! 4       p\        ;QJ d0    R  V P                  P
                   4       F  '       d   K   RM%	  RM!! R  V P                  P
                   4       4      pV'       d   \        P                  ! R4       VP                  \        P                  ! 4       V P                  P                  V P                  P                  RR7       \        V P                  P                  4       EF  w  rEV P                  P
                  V,          pVP                  '       g
   V'       Ed1    VP                   '       d7   \"        P$                  ! VP                  V P                  P                  R7      MRpV P'                  VRR7        Rj  xL
  pVP(                  P*                  P-                  \.        4      ;p	'       d   VP1                  V	4       VeN   VP3                  VP(                  4       F,  p
VP3                  V
P4                  P7                  4       4       K.  	  K  VP3                  VP(                  P4                  P7                  4       4       K  V PG                  V4       EK  	  \I        RV P                  P                   Uu. uF  qUPD                  NK  	  up R\        P                  ! 4       V,
           R24      h EL=ED?TeA   TP9                  4        F,  p
TP3                  T
P4                  P7                  4       4       K.  	   R#   \:         d    TP                  '       d/   RTn        T P                  P=                  R	\?        TRR
7      4       TPA                  4       R8  d(   \        PB                  ! TPD                   R24         R#  ELEi ; iu upi 5i)c              3  B   "   T F  qP                   '       * x  K  	  R # 5ir=   r   r?   r   s   & r+   rA   -FallbackChunkedStream._run.<locals>.<genexpr>   s     VDUj1111DU   FT$all TTSs are unavailable, retrying..	audio/pcm)
request_idr2   rI   	mime_type
input_rateoutput_rateNr   r   r           z0 already synthesized of audio, ignoring fallbackall TTSs failed () after  seconds)%r   r   r0   timerR   rU   r   error
initializer   	shortuuidr2   rI   	enumeraterS   r   r!   r
   AudioResamplerr   frameuserdatagetr   push_timed_transcriptpushdatatobytesflushr   r   r-   pushed_durationr   rW   r   r   )r[   r   
start_time
all_failedir.   r   	resamplersynthesized_audiotextsrfs   &&         r+   _runFallbackChunkedStream._run   s    $))_5555YY[
SVDIIDUDUVSSSVDIIDUDUVV
LL?@!!(		--//!	 	" 	
  		 8 89FA**1-J###zz$ &666	 **'*(,		(=(=
 "  483G3GC\a3G3b X X/$5$;$;$D$D$H$HIb$cc5c*@@G$0&/nn5F5L5L&M . 3 3BGGOO4E F 'N +//0A0G0G0L0L0T0T0VW* s#S :V !dii6N6N O6Ns6N OPPXY]YbYbYdgqYqXrrz{
 	
?X3b !,"+//"3B*//0AB #4   !+++/4
,		64N
 &557#="yyk)YZ 	 >" !Ps   AO%O-0OCO"M4AM?LL LC
M4OO
'O LAM	OO)A&OOOO)r   )r$   r%   r&   r'   r   r(   rP   r   r   r   r   r)   r   r   s   @r+   rm   rm      s:    ,BMB% %.3:U,=
 =
r*   rm   c                  v   a  ] tR tRt$ RtR]R&   R V 3R lltR R ltR	R
/R R lltR R lt	R R lt
RtV ;t# )rt   i  r   r   r   c                    V ^8  d   QhRRRR/# )r4   r.   r0   rj   r   r"   )r8   s   "r+   r9   %FallbackSynthesizeStream.__annotate__  s     , , ,>O ,r*   c               	B   < \         SV `  WR 7       Wn        . V n        R# )rv   N)rO   rP   r   _pushed_tokens)r[   r.   rj   r\   s   &$$r+   rP   !FallbackSynthesizeStream.__init__  s!    S<!$)+r*   c                    V ^8  d   QhRRRR/# r   r"   )r8   s   "r+   r9   r     r   r*   c                	   "   R # 5ir=   r"   r   s   &&r+   r   .FallbackSynthesizeStream._metrics_monitor_task  r   r   r   Fc          
     ,    V ^8  d   QhRRRRRRRRR	R
/# )r4   r.   r   input_chz7aio.ChanReceiver[str | SynthesizeStream._FlushSentinel]rj   r   r   r   r6   r   r"   )r8   s   "r+   r9   r     s?     48 48 48 J	48
 (48 48 
048r*   c              	  a aa"   VP                   P                  '       d   VP                  VR 7      oM?^RIHp \        VVP                  P                  RR7      R7      pVP                  VR 7      o\        P                  ! \        R7      R VV V3R ll4       p\        P                  ! V! 4       4      p S;_uu_4       GRj  xL
  S  Rj  xL
  p	V	5x  K   L LDRRR4      GRj  xL 
  M  + GRj  xL 
 '       g   i     Mo; i  \         d_   p
T'       d*   \        P                  ! TP                   R	2R
R/T
R7       h \        P                   ! TP                   R2R
R/R7       h Rp
?
ii ; i\        P"                  P%                  T4      G Rj  xL 
  R#   \        P"                  P%                  T4      G Rj  xL 
  i ; i5i)r   )tokenizeT)retain_format)r.   sentence_tokenizerr   c                   V ^8  d   QhRR/# rz   r"   )r8   s   "r+   r9   >FallbackSynthesizeStream._try_synthesize.<locals>.__annotate__-  s     	# 	#4 	#r*   c                 .  <"    S  R j  xL
  p \        V \        4      '       d   SP                  V 4       K3  \        V SP                  4      '       g   KQ  SP	                  4        Kc   L^D_ SP                  4        R #   SP                  4        i ; i5ir=   )r   r`   	push_text_FlushSentinelr   	end_input)r   r  r[   rw   s    r+   _forward_input_taskEFallbackSynthesizeStream._try_synthesize.<locals>._forward_input_task,  sr     #"* ' '$!$,,((.#D$*=*=>>	'(   "  "sC   BB  A,A*A,AB  B  *A,,B  .B BBNr   r   r   r   r   )rD   rE   rw    r	  r   	blingfireSentenceTokenizerr   log_exceptionsr   r   r   r   r   rW   	exceptionr   r   )r[   r.   r  rj   r   r	  wrapped_ttsr  
input_taskr   r   rw   s   f$d$$      @r+   r   (FallbackSynthesizeStream._try_synthesize  sv     %%%ZZ\Z:F#'#+#5#5#G#GVZ#G#[K !''\'BF			V	,	# 	# 
-	# (()<)>?
	8vv#)    %K  6 vvvvv  	yyk!12%t,
 99+:;!4( 	 ))++J777%))++J777s   B3G9D CD C6C#C!
C#	C6D !C##C6$D /C20D 5F( 6D	<C?=
D	D	
D F( D E;AE66E;;F( >"G F#!G(#GGGGc                    V ^8  d   QhRRRR/# r   r"   )r8   s   "r+   r9   r   N  s     d8 d8 d8$ d8r*   c                	
  a a"   \         P                   ! 4       p\        ;QJ d0    R  S P                  P                   4       F  '       d   K   RM%	  RM!! R  S P                  P                   4       4      pV'       d   \        P
                  ! R4       RoVP                  \        P                  ! 4       S P                  P                  S P                  P                  RRR7       VP                  \        P                  ! 4       R7       R VV 3R	 llp\        P                  ! V! 4       4      p \        S P                  P                  4       EF  w  rgS P                  P                  V,          pVP                   '       g
   V'       Ede    \"        P$                  \&        \(        P*                  ,          ,          ! 4       oS P,                   F  p	SP/                  V	4       K  	  VP1                  4       '       d   SP3                  4        VP4                  '       d7   \6        P8                  ! VP                  S P                  P                  R
7      MRp
S P;                  VS\<        P>                  ! S P@                  S P                  PB                  S P@                  PD                  S P@                  PF                  R7      RR7        Rj  xL
  pVPH                  PJ                  PM                  \N        4      ;p'       d   VPQ                  V4       V
e   V
PS                  VPH                  4       F,  pVPS                  VPT                  PW                  4       4       K.  	  VPX                  '       dC   V
P[                  4        F,  pVPS                  VPT                  PW                  4       4       K.  	  K  K  VPS                  VPH                  PT                  PW                  4       4       EK'  S Pm                  V4       EK  	  \o        RS P                  P                   Uu. uF  qwPj                  NK  	  up R\         P                   ! 4       V,
           R24      h ELED \        P"                  P]                  T4      G Rj  xL 
  R#   \^         d    TP                   '       d/   RTn        S P`                  Pc                  R\e        TRR7      4       TPg                  4       R8  dP   \        Ph                  ! TPj                   R24         \        P"                  P]                  T4      G Rj  xL 
  R#  ELQi ; iu upi   \        P"                  P]                  T4      G Rj  xL 
  i ; i5i)c              3  B   "   T F  qP                   '       * x  K  	  R # 5ir=   r   r   s   & r+   rA   0FallbackSynthesizeStream._run.<locals>.<genexpr>Q  s     cDbj1111Dbr   FTr   Nr   )r   r2   rI   r   rw   )
segment_idc                   V ^8  d   QhRR/# rz   r"   )r8   s   "r+   r9   3FallbackSynthesizeStream._run.<locals>.__annotate___  s     	% 	%4 	%r*   c                 &  <"   SP                     R j  xL
  p S'       d   SP                  V 4       \        V \        4      '       g   K;  V '       g   KE  SP                  P                  V 4       Kb   L]D^S'       d   SP                  4        R # R # 5ir=   )	_input_chsend_nowaitr   r`   r  rX   close)r   new_input_chr[   s    r+   r  :FallbackSynthesizeStream._run.<locals>._forward_input_task_  sn      #nn 5 5d ,,T2dC((TT''..t45n ""$ s7   BA4A2A4.BBB2A44B=Br   r   )r.   r  rj   r   r   r   r   zP already synthesized of audio, ignoring the current segment for the tts fallbackr   r   r   )8r   rR   r   rU   r   r   r   r   r   r2   rI   start_segmentr   r   r   rS   r   r   Chanr`   r   r  r  r%  r   r&  r!   r
   r   r   r   r   r   rT   r   r   r   r   r   r   r   r   r   r   is_finalr   r   r   r   r   r-   r   r   rW   r   r   )r[   r   r   r   r  r  r   r.   r   rl   r   r   r   resampled_framer'  s   f&            @r+   r   FallbackSynthesizeStream._runN  sj    YY[
ScDDZDZDbDbcSSScDDZDZDbDbcc
LL?@OS!!(..:://<<! 	" 	
 	$$0A$B	% 	% (()<)>?
D	8#D$:$:$I$IJ!33;;A>
'''::8#'*xx6F6U6U0U'V'X$($7$7D(44T: %8 &??,,(..0  *:::	  ..+.??,0,B,B,N,N
 "& " 8<7K7K #%1)4)<)< $ 2 2*.*@*@*S*S(,(:(:(B(B/3/A/A/P/P	* (- 8L 
8 \ \"3 ):(?(?(H(H(L(L 9)  u   !/ D DU K(47@~~FWF]F]7^O$2$7$78L8L8T8T8V$W 8_ $5#=#=#=;D??;L(6(;(;O<P<P<X<X<Z([ <M $> !/ 3 34E4K4K4P4P4X4X4Z [" ""3'{ K~ %#$:P:P:_:_$`:_3YY:_$`#aaijnjsjsju  yC  kC  jD  DL  M W\ 
84 * ))++J777) % #%///38J0 IINN : 8SE R
 *99;cA"NN#&99+-} ~ # ))++J777 B#" %a ))++J777s   AU:0U:>B3U:2AU A.R?!R!B+RQ%Q"Q%B$R9A:R34U 'U
;'U "Q%%R'U ("U:
RU:U/A&UU "U:9T<:U:U UU #U70U31U77U:c                    V ^8  d   QhRRRR/# r   r"   )r8   s   "r+   r9   r     s     (U (U (U (Ur*   c                	  a aa \        S P                  \        4      '       g   Q hS P                  P	                  4       oS'       g   R # S P                  P
                  S P                  P                  P                  V4      ,          oSP                  e!   SP                  P                  4       '       d/   R VV V3R llp\        P                  ! V! V4      4      Sn        R # R # )Nc                    V ^8  d   QhRRRR/# r   r"   )r8   s   "r+   r9   <FallbackSynthesizeStream._try_recovery.<locals>.__annotate__  s      S T r*   c                t  <"    \         P                  \        \        P                  ,          ,          ! 4       pS F  pVP                  V4       K  	  VP                  4        SP                  V VR \        P                  ! SP                  ^ SP                  P                  SP                  P                  R7      R7        Rj  xL
  pK   LDR Sn        \        P                  ! RT P                    R24       SP"                  P%                  R\'        T R R7      4       R#   \(         d     R# i ; i5i)Tr   )r.   r  r   rj   Nr   r   r   r   )r   r*  r`   r   r  r%  r&  r   r   r   r   r   r   r   r   rV   rW   r   r   r-   r   )r.   r  r@   r   
retry_textr[   r   s   &   r+   r   AFallbackSynthesizeStream._try_recovery.<locals>._recover_tts_task  s    "xx.>.M.M(MNPH' ,,Q/ ( NN$#'#7#7!)#'%0%8%8 ..&'$($6$6$>$>+/+=+=+L+L	&	 $8 
$  a  
$ ,0J(KK"7		{* MNIINN20SDI ! sN   D8B>D& CCCD& CAD& $D8&D51D84D55D8)r   r   r0   r  copyrU   rS   r   r    r   r   r   )r[   r.   r   r3  r   s   f& @@r+   r   &FallbackSynthesizeStream._try_recovery  s    $))_5555((--/
YY&&tyy'?'?'E'Ec'JK
%%-1K1K1P1P1R1R < *1)<)<=Ns=S)TJ&A 2Sr*   )r   r  )r$   r%   r&   r'   r   r(   rP   r   r   r   r   r)   r   r   s   @r+   rt   rt     s@    ,BMB, ,
48 !48ld8L(U (Ur*   rt   )*
__future__r   r   r   r   collections.abcr   r   r   typingr   r   r	   rg   r
   r  r   _exceptionsr   logr   typesr   r   r   r   stream_adapterr   r.   r   r   r   r   r   r   r   r   r   r-   r0   rm   rt   r"   r*   r+   <module>r>     s    "    9 ! ) )   ,  ] ]  )  (94<<( $
      
]C*+,]C@|
M |
~OU/ OUr*   