
    rii}[                        U d Z ddlZddlZddlZddlmZmZ ddlmZ	 ddl
mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZ ddlZddlmZmZm Z m!Z!m"Z"m#Z# ddl$m%Z%m&Z&m'Z' erddl(Z)ddl*Z+ G d	 d
e          Z, G d de          Z- edee.e/f         e0ed         eee.df                  ee.df         edde,f         d          Z1 edee.e/f         e0ed         eee.df                  ee.df         edde,f         e.d          Z2 ede1e1d          Z3 ede2e2d          Z4de de/fdZ5de-de2fdZ6de-de7fdZ8d\de1de/de#fdZ9dZ:d eee.f         d!ee.df         d"eej;                 d#e/de1f
d$Z<deded%         fd&Z= G d' d(e          Z>dedee>         fd)Z?e	deeeej;                 f         fd*            Z@ed+e.d,e0d-e.d.dde1f
d/            ZAed+e.d,e0d-e.d.e.de2f
d0            ZAd+e.d,e0d-e.d.ee.         dee1e2f         f
d1ZAd2d3dee3ef         fd4ZBd5d6de1fd7ZCd2d3d8ee,e-d9f         dee3e1ef         fd:ZDde d"ee"         deejE        ee"         f         fd;ZFdejE        de1fd<ZGd2e>d8d=deee3e1f         e1ef         fd>ZHdejE        de7fd?ZIde-d@e0ddfdAZJ G dB dCejK                  ZL G dD dEejK                  ZMdFejN        fdGejN        fdHejN        fdIejN        fdJejN        fdK ejO        ejP                  fdL ejO         ejO        eM                    fdM ejO        eM          fdNejP        fdOejP        fg
eM_Q         G dP dQejK                  ZRejS        jT        ZTejU        eT_V        ejW        geT_X        ejS        jY        ZYejP        eY_V        ejW        ejU        geY_X        dRe.ddfdSZZd2e>d8d=deee2e4f         e1ef         fdTZ[ G dU dV          Z\dWeee!e\f                  deee!         ee\         f         fdXZ]eeee1e2f         eee1e2e3e4f         ee1e2f         f         f                  Z^ee_dY<    G dZ d[e          Z`dS )]z+Helpers for interfacing array like objects.    N)ABCabstractmethod)cache)TYPE_CHECKINGAnyCallableDictListLiteralOptionalProtocolTupleType	TypeAlias	TypedDict	TypeGuardUnioncastoverload   )ArrowCatListCNumericPtrDataTypeFeatureTypes
NumpyDTypeNumpyOrCupy)import_cupyimport_pyarrowlazy_isinstancec                   &    e Zd Zedd            ZdS )_ArrayLikeArgreturnArrayInfc                     d S N selfs    Y/var/www/html/bet.cuttalo.com/ml/venv/lib/python3.11/site-packages/xgboost/_data_utils.py__array_interface__z!_ArrayLikeArg.__array_interface__.   s    14    N)r"   r#   )__name__
__module____qualname__propertyr*   r&   r+   r)   r!   r!   -   s&        444 X444r+   r!   c                   &    e Zd Zedd            ZdS )_CudaArrayLikeArgr"   CudaArrayInfc                     d S r%   r&   r'   s    r)   __cuda_array_interface__z*_CudaArrayLikeArg.__cuda_array_interface__3   s    :=#r+   N)r"   r2   )r,   r-   r.   r/   r4   r&   r+   r)   r1   r1   2   s&        === X===r+   r1   r#      .datatypestrversionstridesshapemaskr2   r7   r8   r9   r:   r;   r<   streamStringArrayoffsetsvaluesCudaStringArrayr7   r"   c                 d    t          | d          o t          | j        d          o| j        j        S )z)Whether the numpy array has object dtype.dtype	hasobject)hasattrrE   rF   r7   s    r)   array_hasobjectrI   V   s7     	g 	!DJ,,	!J r+   c                 x    t          |           rt          d          | j        }d|v r|d         j        |d<   |S )z6Returns a dictionary storing the CUDA array interface.<Input data contains `object` dtype.  Expecting numeric data.r<   )rI   
ValueErrorr4   r7   ainfs     r)   cuda_array_interface_dictrO   _   sH    t YWXXX(D~~F|<VKr+   c                 h    t          |           }t          t          j        |          d          }|S )zMake cuda array interface str.utf-8)rO   bytesjsondumpsr7   	interfaceinterface_strs      r)   cuda_array_interfacerX   i   s.    )$//I$*Y//99Mr+   FrV   	zero_copyc                      G d d          } |            }d| v r,| |_         t                                          ||           }n| |_        t	          j        ||           }|S )z.Convert array interface to numpy or cupy arrayc                       e Zd ZU dZdZee         ed<   edee         fd            Z	e	j
        deddfd            Z	edee         fd            Zej
        deddfd	            ZdS )
#from_array_interface.<locals>.Arrayz3Wrapper type for communicating with numpy and cupy.N
_interfacer"   c                     | j         S r%   )r]   r'   s    r)   r*   z7from_array_interface.<locals>.Array.__array_interface__x   s
    ?"r+   rV   c                 D   t          j         |          | _        t          | j        d                   | j        d<   | j        d         d         | j        d         d         f| j        d<   | j                            dd           }|t          |          | j        d<   d S d S )Nr;   r7   r   r   r:   )copyr]   tupleget)r(   rV   r:   s      r)   r*   z7from_array_interface.<locals>.Array.__array_interface__|   s    "i	22DO',T_W-E'F'FDOG$'*'*'DOF# o)))T::G"-27^^	*** #"r+   c                     | j         S r%   r*   r'   s    r)   r4   z<from_array_interface.<locals>.Array.__cuda_array_interface__   s    ++r+   c                     || _         d S r%   rd   )r(   rV   s     r)   r4   z<from_array_interface.<locals>.Array.__cuda_array_interface__   s    '0D$$$r+   )r,   r-   r.   __doc__r]   r   r#   __annotations__r/   r*   setterr4   r&   r+   r)   Arrayr\   s   s         AA)-
HX&---		#(); 	# 	# 	# 
	# 
	#
	< 
	<d 
	< 
	< 
	< 
$	#
	< 
	,hx.@ 	, 	, 	, 
	, 
"	(	1h 	14 	1 	1 	1 
)	(	1 	1 	1r+   ri   r>   r`   )r4   r   arrayr*   np)rV   rY   ri   arrouts        r)   from_array_interfacero   p   s    1 1 1 1 1 1 1 1< %''C9'0$mm!!#	M!::"+hsY///Jr+      ptrr;   rE   is_cudac                    |r+t                                          d|          }|j        }nt          j        d|          }|j        }t          | t                    s%t          j        | t          j	                  j
        }n| }t          t          j        |                    }||dk    sJ ||S |df|d<   |rd|vr
t          |d<   ||d<   d|d	<   |S )
z2Make an __(cuda)_array_interface__ from a pointer.)r   )r;   rE   Nr   Tr7   r>   r;   r:   )r   emptyr4   rl   r*   
isinstanceintctypesr   c_void_pvalueprodSTREAM_PER_THREAD)rq   r;   rE   rr   rt   rk   addrlengths           r)   make_array_interfacer~      s      *##$e#<<.t5111)c3 {3006  Fv{{{{|4LE&M ,85((+hE'NE)Lr+   zpa.DictionaryArrayc                 $    t          | dd          S )z"Is this an arrow dictionary array?zpyarrow.libDictionaryArray)r   rH   s    r)   is_arrow_dictr      s    40ABBBr+   c                       e Zd ZdZe	 	 dd            Zedd            Zedej        fd            Zedej	        fd            Z
ded	         fd
Zedefd            Zedefd            ZdS )DfCatAccessorz!Protocol for pandas cat accessor.r"   pd.Indexc                     d S r%   r&   r'   s    r)   
categorieszDfCatAccessor.categories   s	     Sr+   	pd.Seriesc                     d S r%   r&   r'   s    r)   codeszDfCatAccessor.codes       $'Cr+   c                     d S r%   r&   r'   s    r)   rE   zDfCatAccessor.dtype   s    !$r+   c                     d S r%   r&   r'   s    r)   rB   zDfCatAccessor.values   r   r+   )pa.StringArraypa.IntegerArrayc                     d S r%   r&   r'   s    r)   to_arrowzDfCatAccessor.to_arrow   s    58Sr+   c                     d S r%   r&   r'   s    r)   r4   z&DfCatAccessor.__cuda_array_interface__   s    8;r+   c                     d S r%   r&   r'   s    r)   _columnzDfCatAccessor._column   s    !cr+   N)r"   r   )r"   r   )r,   r-   r.   rf   r/   r   r   rl   rE   ndarrayrB   r   r   r2   r4   r   r   r&   r+   r)   r   r      s        ++	   X ''' X'$rx$$$ X$'
''' X'9	2	39 9 9 9 ;,;;; X;!!!! X!!!r+   r   c                 B    t          | d          ot          | d          S )Nr   r   )rG   rH   s    r)   
_is_df_catr      s!    4&&A74+A+AAr+   c                  8   dd l }  | j                    t          j         | j                    t          j         | j                    t          j         | j                    t          j         | j                    t          j         | j                    t          j         | j                    t          j         | j	                    t          j	         | j
                    t          j
         | j                    t          j         | j                    t          j        i}|S )Nr   )pyarrowint8rl   int16int32int64uint8uint16uint32uint64float16float32float64)pamappings     r)   _arrow_npdtyper      s     			27

BH

BH

BH

BH	RY	RY	RY
bj
bj
bj+G Nr+   addressr8   sizer>   c                     d S r%   r&   r   r8   r   r>   s       r)   _arrow_buf_infr     s    UXUXr+   c                     d S r%   r&   r   s       r)   r   r     s	     3r+   c                 @    || df|dd |fd |d}|S | df|dd |fd d}|S )NTr5   r=   r6   r&   )r   r8   r   r>   jcuaifjaifs         r)   r   r     se     dOW 
  
  $ D Kr+   catsr   c                    t           st                      }| j        dk    sJ |                                 }|\  }}}|j        sJ t          |           dz   dt          dt          ffd}|j         |t          j
                  k    rtt          | |j                  s%d}t          |dt          |            dz             |                      |j                              }|                                \  }}}|j         |t          j                  k    rt          d	          t%          |j        d
d           }	t%          |j        d|j        d           }
|J |	|
d}||||ffS )Nr   r   typr"   c                 B    t          j        |           j        dz  z  S )N   )rl   iinfobits)r   off_lens    r)   get_n_bytesz)_arrow_cat_names_inf.<locals>.get_n_bytes2  s    "(3--,122r+   zExpecting a `pyarrow.Array`.z Got: .z?Arrow dictionary type offsets is required to be 32-bit integer.<i4|i1r@   )r   r   offsetbuffersis_cpulenr   rv   r   rl   r   ru   LargeStringArray	TypeErrortyper   stringr   r   r   )r   r   r   r<   r   r7   r   arrow_str_errori32catsjoffsetjdatajnamesr   s               @r)   _arrow_cat_names_infr   %  s     ;!#||~~G D&$=$ii!mG3 3# 3 3 3 3 3 3 {kk"(++++$ 344 	F<OO.DtDzz.D.D.DDEEE ))IBIKK(($__..fd{kk"(++++M
 
 	
 V^UGTBBG4<	4@@E<<<&-??FD&$'''r+   rk   zpa.Arrayc                    t           st                      }t          | |j                  st	          dt          |                      |                                 \  }}t          |j        t          |           ft                      | j                 |j                   }|0|j        dfdddt          |           fdd}|j        s
t          |d<   nd}||d	<   |S )
z&Helper for handling categorical codes.zInvalid input type: )r;   rE   rr   NTz<t1r5   r6   r>   r<   )r   r   ru   ri   r   r   r   r~   r   r   r   r   r{   )rk   r   r<   r7   r   jmasks         r)   _arrow_array_infr   L  s      eRX&& ><tE{{<<===JD$ 5zzmuz*K	  E \4(%jj]%
 %
 { 	0/E(OE&MLr+   r   r   c                 R    t          |           \  }}t          |          }|||dffS )zHGet the array interface representation of a string-based category array.N)r   r   )r   r   r   cats_tmpjcodess        r)   arrow_cat_infr   o  s5    
 ,D11FHe$$F6Hd+++r+   c                     t          |           s| j        t          j        t          j        fv r#t          j        }|                     |d          } | j        j        st          j	        | d          } | |fS )z7Ensure the np array has correct type and is contiguous.Frj   A)requirements)
rI   rE   rl   r   bool_r   astypeflagsalignedrequire)r7   rE   s     r)   _ensure_np_dtyper   z  sp     t .
rz28.D D D
{{5u{--: 2z$S111;r+   c                     t          |           rt          d          | j        }d|v r|d         j        |d<   t          t          |          S )z*Returns an array interface from the input.rK   r<   )rI   rL   r*   r   r#   rM   s     r)   array_interface_dictr     sS    t YWXXX#D~~F|7V$r+   r   c                 .   |                     dt          j                  }t          j        | j        t          j                  s$t          j        | j        t          j                  r3| j        }t          |          }|j        }t          |          }||||ffS dt          j	        dt          t          j	        t          f         fd} || j                  \  }}t          |t          j                  \  }}	t          |          }
|                    d          }t          j                            t          j        |                    j        }|J |dfdt)          |          fdd	dd
}|
|d}|j        }t          |          }||||f}|||fS )zCGet the array interface representation of pandas category accessor.strarrr"   c                 J   t          j        t                    }t          j        t          j        t          j        dgt           j                   ||           g                    }|                                 }d|vsJ |                    t           j	                  |fS )z6Convert a numpy string array to an arrow string array.r   )rE    )
rl   	vectorizer   cumsumconcatenaterk   r   sumr   r   )r   lenarrrA   rB   s       r)   npstr_to_arrow_strarrz)pd_cat_inf.<locals>.npstr_to_arrow_strarr  s    c"")NBHaS99966&>>JKK
 
 6!!!!~~bh''//r+   rQ   NTr   r5   )r7   r8   r;   r:   r9   r<   r@   )replacerl   nan
issubdtyperE   floatingintegerrB   r   r   r   strr   r   encoderw   rx   from_bufferc_char_pry   r   )r   r   name_values_numjarr_valuescode_values
jarr_codesr   name_offsetsname_values_joffsetsbvaluesrq   jvaluesr   r   bufs                    r)   
pd_cat_infr     s   
 MM"bf%%E	}TZ-- Gtz2:1V1V G+*?;;l)+66
J+(FFF0bj 0U2:s?5K 0 0 0 0 !6 5dk B BL+&|RX>>OL!#L11H  ))G
/
%
%fog&>&>
?
?
EC??? dk""$ G '/'BBF,K!+..F 		C 63r+   c                 h    t          |           }t          t          j        |          d          }|S )zMake array interface str.rQ   )r   rR   rS   rT   rU   s      r)   array_interfacer     s.    $T**I$*Y//99Mr+   fieldc                 Z    d| j         v r| j         d         t          d|           dS dS )z(Make sure no missing value in meta data.r<   Nz"Missing value is not allowed for: )r4   rL   )r7   r   s     r)   check_cudf_metar     sE     	$///)&1=EeEEFFF 	0/==r+   c            
           e Zd ZdZdej        fdej        fdej        fdej        fdej        fd ej        ej                  fdej        fd	ej        fd
ej        fg	Z	dS )ArrowSchemaz#The Schema type from arrow C array.formatnamemetadatar   
n_childrenchildren
dictionaryreleaseprivate_dataN)
r,   r-   r.   rf   rw   r   c_int64POINTERrx   _fields_r&   r+   r)   r  r    s        -- 
6?#	!	V_%	&.!	v~&	^V^FO445	v'	FO$	)
HHHr+   r  c                       e Zd ZdZdS )
ArrowArrayz"The Array type from arrow C array.N)r,   r-   r.   rf   r&   r+   r)   r  r    s        ,,,,r+   r  r}   
null_countr   	n_buffersr  r   r  r  r	  r
  c                   b    e Zd ZdZdefdej        fdej        fdej        fdej        dz  fgZ	dS )	ArrowDeviceArrayz)The Array type from arrow C device array.rk   	device_iddevice_type
sync_eventreservedr5   N)
r,   r-   r.   rf   r  rw   r  c_int32rx   r  r&   r+   r)   r  r    sR        33 
*	fn%	'	v'	V^a'(HHHr+   r  	event_hdlc                 <   ddl m} t          j        | t          j        t          j                            }|                    t          |j        j	        |j
                  \  }||j        j        k    r'|                    |          \  }}t          |          dS )z&Wait for CUDA event exported by arrow.r   )runtimeN)cuda.bindingsr  rw   r   r  r  cudaStreamWaitEventr{   contentsry   cudaEventWaitDefaultcudaError_tcudaSuccesscudaGetErrorStringrL   )r  cudarteventstatusr   msgs         r)   
wait_eventr'    s     0/////K	6>&.#A#ABBE**# IV
 #///**6223oo 0/r+   c                    t                      }|                    | j        |j                  p|                    | j        |j                  }|r%t          |           }t          |          }||| |ffS | j                            d          }|                                \  }}t          |t          |                    }	t          |t          |                    }
t          j        |	t          j        t                              j        }t!          |j                   |j        dk    sJ |j        }|j        d         |j        d         |j        d         }}}|J |j        dk    sJ |j        dk    sJ |j        dk    sJ t          j        |
t          j        t0                              j        }|j        dv sJ |j        d	v r t5          |d
|j        dz   t8                    }n)|j        dk    rt;          d          t;          d          t5          |ddt8                    }||d}t          |          }|||ffS )z4Obtain the cuda array interface for cuDF categories.read)moderp   r   r   Nr5   )   u   U   vu)r+  r-  r   r,  z9Large string for category index (names) is not supported.zDUnexpected type for category index. It's neither numeric nor string.r   r@   )r   r   rE   r   r   rO   r   to_pylibcudf__arrow_c_device_array__PyCapsule_GetPointerPyCapsule_GetNamerw   r   r  r  r  r'  r  r  rk   r   r  r  r   r  r  r   r}   r{   r   )r   r   cp
is_num_idx	cats_ainf
codes_ainf	arrow_colschemark   	array_ptr
schema_ptrarrow_device_arrayarrow_arrayr<   r   r7   arrow_schemar   r   r   r   s                        r)   cudf_cat_infr=     s    
Btz2;77 2==
BJ< <J  4-d33	.u55
*tUm33 ))v)66I6688MFE$U,=e,D,DEEI%f.?.G.GHHJ  6>"233   !,---)Q....$*KAAA &D <<<!Q&&&& A%%%%"""" ;z6>++F+FGGPL"55555m++ .E;-13D!
 !
 
		$	$STTTR
 
 	
 )ua9JKKE F
 'u--F6I<''r+   c                       e Zd ZdZdeej        eg df         f         dee	         ddfdZ
de	fdZdefdZdefd	Zdd
ZdS )
Categoriesa  An internal storage class for categories returned by the DMatrix and the
    Booster. This class is designed to be opaque. It is intended to be used exclusively
    by XGBoost as an intermediate storage for re-coding categorical data.

    The categories are saved along with the booster object. As a result, users don't
    need to preserve this class for re-coding. Use the booster model IO instead if you
    want to preserve the categories in a stable format.

    .. versionadded:: 3.1.0

    .. warning::

        This class is internal.

    .. code-block:: python

        Xy = xgboost.QuantileDMatrix(X, y, enable_categorical=True)
        booster = xgboost.train({}, Xy)

        categories = booster.get_categories() # Get categories

        # Use categories as a reference for re-coding
        Xy_new = xgboost.QuantileDMatrix(
            X_new, y_new, feature_types=categories, enable_categorical=True, ref=Xy
        )

        # Categories will be part of the `model.json`.
        booster.save_model("model.json")

    handleNarrow_arraysr"   c                 2    |\  | _         | _        || _        d S r%   )_handle_free_arrow_arrays)r(   r@  rA  s      r)   __init__zCategories.__init__  s      $* dj)r+   c                 <    | j         t          d          | j         S )ao  Get the categories in the dataset. The results are stored in a list of
        (feature name, arrow array) pairs, with one array for each categorical
        feature. If a feature is numerical, then the corresponding column in the list is
        None. A value error will be raised if this container was created without the
        `export_to_arrow` option.

        NzHThe `export_to_arrow` option of the `get_categories` method is required.)rE  rL   r'   s    r)   r   zCategories.to_arrow  s/     %    !!r+   c                     | j         j        du S )z$Returns True if there's no category.NrC  ry   r'   s    r)   rt   zCategories.empty  s    |!T))r+   c                 6    | j         j        sJ | j         j        S )z*Internal method for retrieving the handle.rI  r'   s    r)   
get_handlezCategories.get_handle  s    |!!!!|!!r+   c                 J    | j         j        d S |                                  d S r%   )rC  ry   rD  r'   s    r)   __del__zCategories.__del__  s#    <%F

r+   )r"   N)r,   r-   r.   rf   r   rw   rx   r   r   r   rF  r   boolrt   rv   rK  rM  r&   r+   r)   r?  r?  `  s         >*foxD'99:* |,* 
	* * * *", " " " "*t * * * *"C " " " "
     r+   r?  feature_typesc                 B    t          | t                    r| }d} nd}| |fS )zGet the optional reference categories from the `feature_types`. This is used by
    various `DMatrix` where the `feature_types` is reused for specifying the reference
    categories.

    N)ru   r?  )rO  ref_categoriess     r)   get_ref_categoriesrR    s2     -,, &.((r+   AifTypec                       e Zd ZU dZg Zee         ed<   dee	         de
ddfdZdefdZeedeeef         fd	                        ZdS )
TransformedDfzInternal class for storing transformed dataframe.

    Parameters
    ----------
    ref_categories :
        Optional reference categories used for re-coding.

    aitfs :
        Array interface for each column.

    temporary_buffersrQ  aitfsr"   Nc                     || _         |0|                                |                                }|| _        nd | _        || _        d S r%   )rQ  rK  ref_aifrW  )r(   rQ  rW  aifs       r)   rF  zTransformedDf.__init__  sM    ,%.*C*C*E*E*Q ++--C*-DLLDL


r+   c                     | j         2| j        | j        d}t          t	          j        |          d          }n't          t	          j        | j                  d          }|S )z6Return a byte string for JSON encoded array interface.N)rQ  columnsrQ   )rQ  rY  rW  rR   rS   rT   )r(   ref_infinfs      r)   r   zTransformedDf.array_interface  sW    */3|
SSG
7++W55CC
4:..88C
r+   c                     dS )z"Return the shape of the dataframe.Nr&   r'   s    r)   r;   zTransformedDf.shape  s      r+   )r,   r-   r.   rf   rV  r
   r   rg   r   r?  rS  rF  rR   r   r/   r   rv   r;   r&   r+   r)   rU  rU    s         
 
 &(tE{'''x
'; G PT         1uS#X 1 1 1 ^ X1 1 1r+   rU  )F)arf   r`   rw   rS   abcr   r   	functoolsr   fcachetypingr   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   numpyrl   _typingr   r   r   r   r   r   compatr   r   r   pandaspdr   r   r!   r1   rv   rN  r   r#   r2   r?   rC   rI   rO   rR   rX   ro   r{   numberr~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   	Structurer  r  r  r  rx   r  r  	pythonapir1  r   restype	py_objectargtypesr0  r'  r=  r?  rR  rS  rg   rU  r&   r+   r)   <module>ro     s	   1 1 1    # # # # # # # # % % % % % %                                   &                    A @ @ @ @ @ @ @ @ @ 5 5 5 5 5H 5 5 5
> > > > > > > >
 9c4i 1:E#s(O,sCxj$56 
 
 yc4i 1:E#s(O,sCxj$56   i8x'P'PQQ)<<HH 
( t    $5 ,    0 U    + +H + ++ + + + +^  
	{C	 c? 	? 	
    DC C	*> ? C C C C
" " " " "H " " "8BS BY}5 B B B B
 S$ry/12    ( 
 XC X# XS X$ X8 X X X 
 X 
&)36   

&)3;C=
8\!"   4$(/ $(E+s:J4K $( $( $( $(N         F,
, 13DDE, ;%'(, , , ,	
	#J/	
2:x
++,	 	 	 	 rz  h        5
5 +5
5h&'5895 5 5 5p"*     G+ GC GD G G G G    &"    - - - - -! - - -
 v~6>"v~&.!6>"v//0z : :;;<>6>*--. V_%
 	 	 	 	 	v' 	 	 	 $6 "O  $./   '< %  !'!16? C  # $     =(
=( +=(
5./5@A=( =( =( =(@H H H H H H H HV)E,
":;<)
8L!8J#778) ) ) )" 	h$%(L+FG(L()+	
		   %1 %1 %1 %1 %1C %1 %1 %1 %1 %1r+   