
    ^jr                     d   d Z ddlmZ ddlmZmZ ddlZddlmZ ddl	m
Z
mZmZmZ ddlmZ ddlmZmZ d	gZ G d
 dej(                        Z G d dej(                        Z G d dej(                        Z G d dej(                        Z G d dej(                        Z G d dej(                        Z G d dej(                        Z G d dej(                        Z G d dej(                        Z G d d	ej(                        Zd-dZ eddd d!d"d#d$d%d%d&d'd(d)d*i      Z ed-d+efd,       Z!y).z NasNet-A (Large)
 nasnetalarge implementation grabbed from Cadene's pretrained models
 https://github.com/Cadene/pretrained-models.pytorch
    )partial)OptionalTypeN)ConvNormActcreate_conv2dcreate_pool2dcreate_classifier   )build_model_with_cfg)register_modelgenerate_default_cfgsNASNetALargec                   D     e Zd Z	 	 	 	 ddededededef
 fdZd Z xZS )		ActConvBnin_channelsout_channelskernel_sizestridepaddingc                     ||d}t         	|           t        j                         | _        t        ||f|||d|| _        t        j                  |fddd|| _        y )Ndevicedtype)r   r   r   MbP?皙?epsmomentum)	super__init__nnReLUactr   convBatchNorm2dbn
selfr   r   r   r   r   r   r   dd	__class__s
            ]/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/timm/models/nasnet.pyr    zActConvBn.__init__   sl     /779!f3>vW^fbdf	..M53M"M    c                 l    | j                  |      }| j                  |      }| j                  |      }|S N)r#   r$   r&   r(   xs     r+   forwardzActConvBn.forward&   s.    HHQKIIaLGGAJr,   )r
    NN__name__
__module____qualname__intstrr    r1   __classcell__r*   s   @r+   r   r      sQ     NN N 	N
 N N"r,   r   c                   B     e Zd Z	 	 	 ddededededef
 fdZd Z xZS )	SeparableConv2dr   r   r   r   r   c                     ||d}t         	|           t        ||f||||d|| _        t        ||fddd|| _        y )Nr   )r   r   r   groupsr
   r   )r   r   )r   r    r   depthwise_conv2dpointwise_conv2dr'   s
            r+   r    zSeparableConv2d.__init__/   sv     / -!
 $!
 !
 !.!
 	!

 !
r,   c                 J    | j                  |      }| j                  |      }|S r.   )r?   r@   r/   s     r+   r1   zSeparableConv2d.forwardL   s'    !!!$!!!$r,   r2   NNr3   r:   s   @r+   r<   r<   -   sH     

 
 	

 
 
:r,   r<   c                   J     e Zd Z	 	 	 	 	 d	dedededededef fdZd Z xZS )
BranchSeparablesr   r   r   r   pad_type	stem_cellc	                 p   ||d}	t         |           |r|n|}
t        j                         | _        t        ||
|f||d|	| _        t        j                  |
fddd|	| _        t        j                  d      | _	        t        |
||fd|d|	| _
        t        j                  |fddd|	| _        y )	Nr   r   r   r   r   r   Tinplacer
   )r   r    r!   r"   act_1r<   separable_1r%   bn_sep_1act_2separable_2bn_sep_2)r(   r   r   r   r   rE   rF   r   r   r)   middle_channelsr*   s              r+   r    zBranchSeparables.__init__T   s     /*3,WWY
*+^>Dh^Z\^VECVSUVWWT*
*\;Z?@(ZVXZ|SSPRSr,   c                     | j                  |      }| j                  |      }| j                  |      }| j                  |      }| j	                  |      }| j                  |      }|S r.   )rK   rL   rM   rN   rO   rP   r/   s     r+   r1   zBranchSeparables.forwardk   s]    JJqMQMM!JJqMQMM!r,   )r
   r2   FNN)	r4   r5   r6   r7   r8   boolr    r1   r9   r:   s   @r+   rD   rD   R   s_     #TT T 	T
 T T T.r,   rD   c                   <     e Zd Z	 	 	 	 ddededef fdZd Z xZS )	CellStem0	stem_sizenum_channelsrE   c                    ||d}t         |           || _        || _        t	        | j                  | j                  dfddi|| _        t        | j                  | j                  dd|fi || _        t        | j                  | j                  dd|fddi|| _        t        d	d
d|      | _
        t        | j                  | j                  dd|fddi|| _        t        dd
dd|      | _        t        | j                  | j                  dd|fddi|| _        t        dd
dd|      | _        t        | j                  | j                  d
d|fi || _        t        d	d
d|      | _        y )Nr   r
   r            rF   Tmax   r   avgFcount_include_padr   )r   r    rW   rV   r   conv_1x1rD   comb_iter_0_leftcomb_iter_0_rightr   comb_iter_1_leftcomb_iter_1_rightcomb_iter_2_leftcomb_iter_2_rightcomb_iter_3_rightcomb_iter_4_leftcomb_iter_4_rightr(   rV   rW   rE   r   r   r)   r*   s          r+   r    zCellStem0.__init__v   s    /("!$..$2C2CQWqWTVW 0t00!Q!HDF!H!1NND--q!X"UIM"UQS"U !.eQ8 L!1NND--q!X"UIM"UQS"U !.eQU\d e!1NND--q!X"UIM"UQS"U "/uae]e!f 0t00!Q!HDF!H!.uaH!Mr,   c                    | j                  |      }| j                  |      }| j                  |      }||z   }| j                  |      }| j	                  |      }||z   }| j                  |      }	| j                  |      }
|	|
z   }| j                  |      }||z   }| j                  |      }| j                  |      }||z   }t        j                  ||||gd      }|S Nr
   )rb   rc   rd   re   rf   rg   rh   ri   rj   rk   torchcat)r(   r0   x1x_comb_iter_0_leftx_comb_iter_0_rightx_comb_iter_0x_comb_iter_1_leftx_comb_iter_1_rightx_comb_iter_1x_comb_iter_2_leftx_comb_iter_2_rightx_comb_iter_2x_comb_iter_3_rightx_comb_iter_3x_comb_iter_4_leftx_comb_iter_4_rightx_comb_iter_4x_outs                     r+   r1   zCellStem0.forward   s    ]]1!2226"44Q7*-@@!2226"44Q7*-@@!2226"44Q7*-@@"44]C+m;!22=A"44R8*-@@		=-VXYZr,   )*   r2   NNr3   r:   s   @r+   rU   rU   u   s<     !#NN N 	NBr,   rU   c                   :     e Zd Z	 	 	 ddededef fdZd Z xZS )	CellStem1rV   rW   rE   c           	         ||d}t         |           || _        || _        t	        d| j                  z  | j                  dfddi|| _        t        j                         | _        t        j                         | _
        | j                  j                  dt        j                  ddd             | j                  j                  dt        j                  | j                  | j                  dz  dfddd	|       t        j                         | _        | j                  j                  d
t        j                  d             | j                  j                  dt        j                  ddd             | j                  j                  dt        j                  | j                  | j                  dz  dfddd	|       t        j                   | j                  fddd|| _        t%        | j                  | j                  dd|fi || _        t%        | j                  | j                  dd|fi || _        t+        ddd|      | _        t%        | j                  | j                  dd|fi || _        t+        dddd|      | _        t%        | j                  | j                  dd|fi || _        t+        dddd|      | _        t%        | j                  | j                  dd|fi || _        t+        ddd|      | _        y )Nr   rZ   r
   r   avgpoolFr   ra   r$   r   biaspadr
   r   r
   r   r   r   rY   r[   r\   r]   r^   r_   r`   )r   r    rW   rV   r   rb   r!   r"   r#   
Sequentialpath_1
add_module	AvgPool2dConv2dpath_2	ZeroPad2dr%   final_path_bnrD   rc   rd   r   re   rf   rg   rh   ri   rj   rk   rl   s          r+   r    zCellStem1.__init__   s    /("!!d&7&7"79J9JA^VW^[]^779mmoy",,qV[*\]vryyARARVWAWYZ'wcdkp'wtv'wxmmoubll>&BCy",,qV[*\]vryyARARVWAWYZ'wcdkp'wtv'wx^^D,=,=]5SV]Z\] 01B1BDDUDUWXZ[]e lik l!1$2C2CTEVEVXY[\^f!mjl!m -eQ8 L!1$2C2CTEVEVXY[\^f!mjl!m -eQU\d e!1$2C2CTEVEVXY[\^f!mjl!m!.uae]e!f 01B1BDDUDUWXZ[]e lik l!.uaH!Mr,   c                 t   | j                  |      }| j                  |      }| j                  |      }| j                  |      }| j	                  t        j                  ||gd            }| j                  |      }| j                  |      }	||	z   }
| j                  |      }| j                  |      }||z   }| j                  |      }| j                  |      }||z   }| j                  |
      }||z   }| j                  |
      }| j                  |      }||z   }t        j                  ||||gd      }|S rn   )rb   r#   r   r   r   ro   rp   rc   rd   re   rf   rg   rh   ri   rj   rk   )r(   x_conv0x_stem_0x_leftx_relux_path1x_path2x_rightrr   rs   rt   ru   rv   rw   rx   ry   rz   r{   r|   r}   r~   r   r   s                          r+   r1   zCellStem1.forward   sH   x('"++f%++f%$$UYY/A1%EF!226:"44W=*-@@!226:"44W=*-@@!226:"44W=*-@@"44]C+m;!22=A"44V<*-@@		=-VXYZr,   rB   r3   r:   s   @r+   r   r      s9     &N&N &N 	&NPr,   r   c                   B     e Zd Z	 	 	 ddededededef
 fdZd Z xZS )		FirstCellin_chs_leftout_chs_leftin_chs_rightout_chs_rightrE   c           	      x   ||d}t         	|           t        ||dfddi|| _        t	        j
                         | _        t	        j                         | _        | j                  j                  dt	        j                  ddd             | j                  j                  dt	        j                  ||dfddd	|       t	        j                         | _        | j                  j                  d
t	        j                  d             | j                  j                  dt	        j                  ddd             | j                  j                  dt	        j                  ||dfddd	|       t	        j                  |dz  fddd|| _        t!        ||dd|fi || _        t!        ||dd|fi || _        t!        ||dd|fi || _        t!        ||dd|fi || _        t+        dddd|      | _        t+        dddd|      | _        t+        dddd|      | _        t!        ||dd|fi || _        y )Nr   r
   r   r   rZ   Fr   r$   r   r   r   r   r   r   rY   r]   r_   r`   )r   r    r   rb   r!   r"   r#   r   r   r   r   r   r   r   r%   r   rD   rc   rd   re   rf   r   rg   comb_iter_3_leftri   rj   
r(   r   r   r   r   rE   r   r   r)   r*   s
            r+   r    zFirstCell.__init__   s    /!,qQQbQ779mmoy",,qV[*\]vryylA'jVW^c'jgi'jkmmoubll>&BCy",,qV[*\]vryylA'jVW^c'jgi'jk^^L1,<\%RU\Y[\ 0qRSU] dac d!1-PQSTV^!ebd!e 0qRSU] dac d!1-PQSTV^!ebd!e -eQU\d e -eQU\d e!.uae]e!f 0qRSU] dac dr,   c                 V   | j                  |      }| j                  |      }| j                  |      }| j                  t	        j
                  ||gd            }| j                  |      }| j                  |      }| j                  |      }	||	z   }
| j                  |      }| j                  |      }||z   }| j                  |      }||z   }| j                  |      }| j                  |      }||z   }| j                  |      }||z   }t	        j
                  ||
||||gd      }|S rn   )r#   r   r   r   ro   rp   rb   rc   rd   re   rf   rg   r   ri   rj   )r(   r0   x_prevr   r   r   r   r   rr   rs   rt   ru   rv   rw   rx   rz   x_comb_iter_3_leftr{   r|   r}   r   r   s                         r+   r1   zFirstCell.forward&  s<   &!++f%++f%##EIIw.@!$DE--"!227;"44V<*-@@!226:"44V<*-@@!227;*V3!226:"44V<*-@@!227;*W4		6=-P]_lmopqr,   rB   r3   r:   s   @r+   r   r      sO     %e%e %e 	%e
 %e %eNr,   r   c                   B     e Zd Z	 	 	 ddededededef
 fdZd Z xZS )	
NormalCellr   r   r   r   rE   c                    ||d}t         	|           t        ||dfd|d|| _        t        ||dfd|d|| _        t        ||dd|fi || _        t        ||dd|fi || _        t        ||dd|fi || _        t        ||dd|fi || _	        t        dddd|      | _        t        dddd|      | _        t        dddd|      | _        t        ||dd|fi || _        y )	Nr   r
   rH   rY   r]   r_   Fr`   )r   r    r   conv_prev_1x1rb   rD   rc   rd   re   rf   r   rg   r   ri   rj   r   s
            r+   r    zNormalCell.__init__E  s*    /&{L!fAW_fcef!,qcT\c`bc 0qRSU] dac d!1,aQRT\!c`b!c 0|QPQS[ b_a b!1,aQRT\!c`b!c -eQU\d e -eQU\d e!.uae]e!f 0qRSU] dac dr,   c                    | j                  |      }| j                  |      }| j                  |      }| j                  |      }||z   }| j	                  |      }| j                  |      }	||	z   }
| j                  |      }||z   }| j                  |      }| j                  |      }||z   }| j                  |      }||z   }t        j                  |||
|||gd      }|S rn   )r   rb   rc   rd   re   rf   rg   r   ri   rj   ro   rp   )r(   r0   r   r   r   rr   rs   rt   ru   rv   rw   rx   rz   r   r{   r|   r}   r   r   s                      r+   r1   zNormalCell.forwarda  s   ##F+--"!227;"44V<*-@@!226:"44V<*-@@!227;*V3!226:"44V<*-@@!227;*W4		6=-P]_lmopqr,   rB   r3   r:   s   @r+   r   r   C  sN     ee e 	e
 e e8r,   r   c                   B     e Zd Z	 	 	 ddededededef
 fdZd Z xZS )	ReductionCell0r   r   r   r   rE   c                    ||d}t         	|           t        ||dfd|d|| _        t        ||dfd|d|| _        t        ||dd|fi || _        t        ||dd|fi || _        t        ddd|	      | _	        t        ||dd|fi || _
        t        d
ddd|      | _        t        ||dd|fi || _        t        d
ddd|      | _        t        ||dd|fi || _        t        ddd|	      | _        y Nr   r
   rH   rY   rZ   r[   r\   r]   r^   r_   Fr`   r   r    r   r   rb   rD   rc   rd   r   re   rf   rg   rh   ri   rj   rk   r   s
            r+   r    zReductionCell0.__init__}  =    /&{L!fAW_fcef!,qcT\c`bc 0qRSU] dac d!1-PQSTV^!ebd!e -eQ8 L!1-PQSTV^!ebd!e -eQU\d e!1-PQSTV^!ebd!e!.uae]e!f 0qRSU] dac d!.uaH!Mr,   c                    | j                  |      }| j                  |      }| j                  |      }| j                  |      }||z   }| j	                  |      }| j                  |      }	||	z   }
| j                  |      }| j                  |      }||z   }| j                  |      }||
z   }| j                  |      }| j                  |      }||z   }t        j                  |
|||gd      }|S rn   r   rb   rc   rd   re   rf   rg   rh   ri   rj   rk   ro   rp   r(   r0   r   r   r   rr   rs   rt   ru   rv   rw   rx   ry   rz   r{   r|   r}   r~   r   r   s                       r+   r1   zReductionCell0.forward     ##F+--"!227;"44V<*-@@!227;"44V<*-@@!227;"44V<*-@@"44]C+m;!22=A"44W=*-@@		=-VXYZr,   rB   r3   r:   s   @r+   r   r   {  N     NN N 	N
 N N:r,   r   c                   B     e Zd Z	 	 	 ddededededef
 fdZd Z xZS )	ReductionCell1r   r   r   r   rE   c                    ||d}t         	|           t        ||dfd|d|| _        t        ||dfd|d|| _        t        ||dd|fi || _        t        ||dd|fi || _        t        ddd|	      | _	        t        ||dd|fi || _
        t        d
ddd|      | _        t        ||dd|fi || _        t        d
ddd|      | _        t        ||dd|fi || _        t        ddd|	      | _        y r   r   r   s
            r+   r    zReductionCell1.__init__  r   r,   c                    | j                  |      }| j                  |      }| j                  |      }| j                  |      }||z   }| j	                  |      }| j                  |      }	||	z   }
| j                  |      }| j                  |      }||z   }| j                  |      }||
z   }| j                  |      }| j                  |      }||z   }t        j                  |
|||gd      }|S rn   r   r   s                       r+   r1   zReductionCell1.forward  r   r,   rB   r3   r:   s   @r+   r   r     r   r,   r   c                   R    e Zd ZdZ	 	 	 	 	 	 	 	 	 	 	 ddededededededed	ed
ef fdZej                  j                  dd       Zej                  j                  dd       Zej                  j                  dej                  fd       Zdded	efdZd ZddefdZd Z xZS )r   zNASNetALarge (6 @ 4032) num_classesin_chansrV   channel_multipliernum_featuresoutput_stride	drop_rateglobal_poolrE   c                    t         |           |
|d}|| _        || _        || _        |x| _        | _        || _        |dk(  sJ | j
                  dz  }t        d!|| j                  dddt        t        j                  dd	      d
d|| _        t        | j                  f||dz  z  |	d|| _        t        | j                  f||z  |	d|| _        t#        d!||dz  d|z  ||	d|| _        t'        d!d|z  |d|z  ||	d|| _        t'        d!d|z  |d|z  ||	d|| _        t'        d!d|z  |d|z  ||	d|| _        t'        d!d|z  |d|z  ||	d|| _        t'        d!d|z  |d|z  ||	d|| _        t3        d!d|z  d|z  d|z  d|z  |	d|| _        t#        d!d|z  |d|z  d|z  |	d|| _        t'        d!d|z  d|z  d|z  d|z  |	d|| _        t'        d!d|z  d|z  d|z  d|z  |	d|| _        t'        d!d|z  d|z  d|z  d|z  |	d|| _        t'        d!d|z  d|z  d|z  d|z  |	d|| _        t'        d!d|z  d|z  d|z  d|z  |	d|| _         tC        d!d|z  d|z  d|z  d|z  |	d|| _"        t#        d!d|z  d|z  d|z  d|z  |	d|| _#        t'        d!d|z  d|z  d|z  d|z  |	d|| _$        t'        d!d|z  d|z  d|z  d|z  |	d|| _%        t'        d!d|z  d|z  d|z  d|z  |	d|| _&        t'        d!d|z  d|z  d|z  d|z  |	d|| _'        t'        d!d|z  d|z  d|z  d|z  |	d|| _(        t        jR                  d      | _*        tW        ddd      tW        ddd      tW        ddd      tW        ddd      tW        ddd      g| _,        t[        | j
                  | j                  f||d |\  | _.        | _/        | _0        y )"Nr          r]   r   rZ   r   r   r   F)r   r   r   r   r   
norm_layer	apply_act)rW   rE   )r   r   r   r   rE                  TrI   `   conv0)num_chs	reductionmodule   zcell_stem_1.conv_1x1.acti  zreduction_cell_0.conv_1x1.acti  zreduction_cell_1.conv_1x1.act  r#   )	pool_typer    )1r   r    r   r   rV   r   head_hidden_sizer   r   r   r!   r%   r   rU   cell_stem_0r   cell_stem_1r   cell_0r   cell_1cell_2cell_3cell_4cell_5r   reduction_cell_0cell_6cell_7cell_8cell_9cell_10cell_11r   reduction_cell_1cell_12cell_13cell_14cell_15cell_16cell_17r"   r#   dictfeature_infor	   r   	head_droplast_linear)r(   r   r   rV   r   r   r   r   r   rE   r   r   r)   channelsr*   s                 r+   r    zNASNetALarge.__init__  s    	/& "4@@D1"4"""$$* ! 	
 r~~53G	
 	

 %NNi)16HA6M)NYaiegi$NNb)15G)GRZb^`b   X x1}XXXTVX ! XH8XXXTVX ! XH8XXXTVX ! XH8XXXTVX ! XH8XXXTVX ! XH8XXXTVX !/ !\H1x<XQ\H!\XZ!\   \H8XQ\H\XZ\ ! ]H1x<ha(lX]Y[] ! ]XALha(lX]Y[] ! ]XALha(lX]Y[] " ]XALha(lX]Y[] " ]XALha(lX]Y[] !/ !]XALha(lX!]Y[!] ! ]XALha(lX]Y[] " ]XALha(lX]Y[] " ]XALha(lX]Y[] " ]XALha(lX]Y[] " ]XALha(lX]Y[] " ]XALha(lX]Y[] 774(q92LM3RS4STE:
 >O>
 "	>

 >
:$.$*:r,   c                 $    t        dg d      }|S )Nz^conv0|cell_stem_[01]))z^cell_(\d+)N)z^reduction_cell_0)r   )z^reduction_cell_1)r   )stemblocks)r   )r(   coarsematchers      r+   group_matcherzNASNetALarge.group_matcherk  s    )
 r,   c                     |rJ d       y )Nz$gradient checkpointing not supportedr   )r(   enables     r+   set_grad_checkpointingz#NASNetALarge.set_grad_checkpointingw  s    AAAz6r,   returnc                     | j                   S r.   )r   )r(   s    r+   get_classifierzNASNetALarge.get_classifier{  s    r,   c                 p    || _         t        | j                  | j                   |      \  | _        | _        y )N)r   )r   r	   r   r   r   )r(   r   r   s      r+   reset_classifierzNASNetALarge.reset_classifier  s3    &->t//;.H*$*r,   c                 `   | j                  |      }| j                  |      }| j                  ||      }| j                  ||      }| j	                  ||      }| j                  ||      }| j                  ||      }| j                  ||      }	| j                  |	|      }
| j                  |
|	      }| j                  ||	      }| j                  ||      }| j                  ||      }| j                  ||      }| j                  ||      }| j                  ||      }| j!                  ||      }| j#                  ||      }| j%                  ||      }| j'                  ||      }| j)                  ||      }| j+                  ||      }| j-                  ||      }| j/                  |      }|S 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   r   r   x_stem_1x_cell_0x_cell_1x_cell_2x_cell_3x_cell_4x_cell_5x_reduction_cell_0x_cell_6x_cell_7x_cell_8x_cell_9	x_cell_10	x_cell_11x_reduction_cell_1	x_cell_12	x_cell_13	x_cell_14	x_cell_15	x_cell_16	x_cell_17s                            r+   forward_featureszNASNetALarge.forward_features  s   **Q-##G,##GX6;;x2;;x2;;x2;;x2;;x2;;x2!228XF;;18<;;x);<;;x2;;x2LL84	LLH5	!229iHLL!3Y?	LL,>?	LLI6	LLI6	LLI6	LLI6	HHYr,   
pre_logitsc                 p    | j                  |      }| j                  |      }|r|S | j                  |      S r.   )r   r   r   )r(   r0   r  s      r+   forward_headzNASNetALarge.forward_head  s8    QNN1q7D$4$4Q$77r,   c                 J    | j                  |      }| j                  |      }|S r.   )r  r  r/   s     r+   r1   zNASNetALarge.forward  s'    !!!$a r,   )  r]   r   rZ   r   r   g        r_   sameNNF)T)r_   )r4   r5   r6   __doc__r7   floatr8   r    ro   jitignorer   r   r!   Moduler   r   r  rS   r  r1   r9   r:   s   @r+   r   r     s$   "  $&' $!#!$"w
w
 w
 	w

 !$w
 w
 w
 w
 w
 w
r YY	 	 YYB B YY 		    HC Hc H
>8$ 8
r,   c                 @    t        t        | |fdt        dd      i|S )Nfeature_cfghookT)feature_cls
no_rewrite)r   r   r   )variant
pretrainedkwargss      r+   _create_nasnetr,    s3     V=	
  r,   znasnetalarge.tf_in1kztimm/zjhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/nasnetalarge-dc4a7b8b.pth)r]   K  r-  )   r.  gx&?bicubic)      ?r0  r0  r  z
conv0.convr   z
apache-2.0)	hf_hub_idurl
input_size	pool_sizecrop_pctinterpolationmeanstdr   
first_conv
classifierlicenser   c                 6    t        dddi|}t        d| fi |S )z'NASNet-A large model architecture.
    rE   r  nasnetalarger   )r   r,  )r*  r+  model_kwargss      r+   r=  r=    s(     2262L.*EEEr,   r  )"r  	functoolsr   typingr   r   ro   torch.nnr!   timm.layersr   r   r   r	   _builderr   	_registryr   r   __all__r#  r   r<   rD   rU   r   r   r   r   r   r   r,  default_cfgsr=  r   r,   r+   <module>rG     s;    !   T T * <
		 4"bii "J ryy  F9		 9xI		 IXC		 CL5 5p7RYY 7t7RYY 7t|299 |~ %{#""#& $ F F Fr,   