o
    e{w                     @   s  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 d dlmZmZmZ d dlmZ d dlmZmZmZ d dlmZ d dlmZ d dlmZmZmZ d	d
lmZm Z  d	dl!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z( G dd deZ)G dd deZ*G dd deZ+G dd deZ,G dd deZ-G dd deZ.G dd deZ/G dd deZ0G dd deZ1G dd deZ2G d d! d!eZ3G d"d# d#eZ4G d$d% d%eZ5G d&d' d'eZ6G d(d) d)eZ7G d*d+ d+eZ8G d,d- d-eZ9G d.d/ d/eZ:G d0d1 d1eZ;G d2d3 d3eZ<G d4d5 d5eZ=G d6d7 d7eZ>G d8d9 d9eZ?G d:d; d;eZ@G d<d= d=eZAG d>d? d?eZBG d@dA dAeZCG dBdC dCeZDG dDdE dEeZEG dFdG dGeZFG dHdI dIeZGG dJdK dKeZHG dLdM dMeZIG dNdO dOeZJG dPdQ dQeZKG dRdS dSeZLdTS )U    )Serialisable)	TypedBoolFloatSetNoneSetStringIntegerDateTimeSequence)	HexBinaryExtensionListRelation)NestedInteger)NestedSequenceMultiSequenceMultiSequencePart)SHEET_MAIN_NS)tostring)RelationshipListRelationshipget_rels_path   )	PivotArea	Reference)BooleanErrorMissingNumberText	TupleListDateTimeFieldc                   @   2   e Zd ZdZeddZeddZ		dddZdS )MeasureDimensionMapmapT
allow_noneNc                 C      || _ || _d S N)measureGroup	dimension)selfr)   r*    r,   DD:\Projects\ConvertPro\env\Lib\site-packages\openpyxl/pivot/cache.py__init__8      
zMeasureDimensionMap.__init__NN)__name__
__module____qualname__tagnamer	   r)   r*   r.   r,   r,   r,   r-   r#   1       

r#   c                   @   s*   e Zd ZdZe Ze Z		dddZdS )MeasureGroupr)   Nc                 C   r'   r(   )namecaption)r+   r7   r8   r,   r,   r-   r.   G   r/   zMeasureGroup.__init__r0   )r1   r2   r3   r4   r   r7   r8   r.   r,   r,   r,   r-   r6   @       r6   c                   @   s:   e Zd ZdZe Ze Ze Ze Z					dddZ
dS )PivotDimensionr*   Nc                 C      || _ || _|| _|| _d S r(   )measurer7   
uniqueNamer8   )r+   r<   r7   r=   r8   r,   r,   r-   r.   X      
zPivotDimension.__init__NNNN)r1   r2   r3   r4   r   r<   r   r7   r=   r8   r.   r,   r,   r,   r-   r:   O   s    r:   c                   @   sd   e Zd ZdZe Ze Ze Ze Ze Z	e
 Ze ZeeddZdZ								dddZdS )	CalculatedMemberZcalculatedMemberTexpected_typer&   r,   Nc	           	      C   .   || _ || _|| _|| _|| _|| _|| _d S r(   )r7   mdx
memberName	hierarchyparent
solveOrderset)	r+   r7   rD   rE   rF   rG   rH   rI   extLstr,   r,   r-   r.   s   s   

zCalculatedMember.__init__)NNNNNNNN)r1   r2   r3   r4   r   r7   rD   rE   rF   rG   r	   rH   r   rI   r   r   rJ   __elements__r.   r,   r,   r,   r-   r@   d   s(    r@   c                   @   sL   e Zd ZdZeddZe Zee	dZ
eeddZdZ				d
dd	ZdS )CalculatedItemZcalculatedItemTr%   rB   rA   )	pivotArearJ   Nc                 C   r;   r(   )fieldformularN   rJ   )r+   rO   rP   rN   rJ   r,   r,   r-   r.      r>   zCalculatedItem.__init__r?   )r1   r2   r3   r4   r	   rO   r   rP   r   r   rN   r   rJ   rK   r.   r,   r,   r,   r-   rL      s    

rL   c                   @   r"   )ServerFormatserverFormatTr%   Nc                 C   r'   r(   )cultureformat)r+   rS   rT   r,   r,   r-   r.      r/   zServerFormat.__init__r0   )r1   r2   r3   r4   r   rS   rT   r.   r,   r,   r,   r-   rQ      r5   rQ   c                   @   s>   e Zd ZdZeeddZdZdZ		dddZ	e
d	d
 ZdS )ServerFormatListserverFormatsTrA   rR   countNc                 C   
   || _ d S r(   rW   )r+   rY   rR   r,   r,   r-   r.         
zServerFormatList.__init__c                 C   
   t | jS r(   )lenrR   r+   r,   r,   r-   rY         
zServerFormatList.countr0   )r1   r2   r3   r4   r   rQ   rR   rK   	__attrs__r.   propertyrY   r,   r,   r,   r-   rU      s    
rU   c                   @   s4   e Zd ZdZe ZeeddZdZ			dddZ
dS )	QueryqueryTrA   )tplsNc                 C   r'   r(   )rD   rd   )r+   rD   rd   r,   r,   r-   r.      r/   zQuery.__init__r0   )r1   r2   r3   r4   r   rD   r   r    rd   rK   r.   r,   r,   r,   r-   rb      s    rb   c                   @   2   e Zd ZdZe ZeedZdZ			dddZ
dS )
QueryCache
queryCacherM   )rc   Nc                 C   r'   r(   )rY   rc   )r+   rY   rc   r,   r,   r-   r.      r/   zQueryCache.__init__r0   )r1   r2   r3   r4   r	   rY   r   rb   rc   rK   r.   r,   r,   r,   r-   rf          
rf   c                   @   sj   e Zd ZdZe Ze Ze Ze	g ddZ
e ZeeddZeeddZdZ							d
dd	ZdS )OLAPSetrI   )Z	ascendingZ
descendingZascendingAlphaZdescendingAlphaZascendingNaturalZdescendingNaturalvaluesTrA   )rd   sortByTupleNc                 C   rC   r(   )rY   maxRanksetDefinitionsortTypequeryFailedrd   rl   )r+   rY   rm   rn   ro   rp   rd   rl   r,   r,   r-   r.         	
zOLAPSet.__init__NNNNNNN)r1   r2   r3   r4   r	   rY   rm   r   rn   r   ro   r   rp   r   r    rd   rl   rK   r.   r,   r,   r,   r-   ri      s$    ri   c                   @   .   e Zd Ze ZeedZdZ		dddZ	dS )OLAPSetsrM   )rI   Nc                 C   r'   r(   )rY   rI   )r+   rY   rI   r,   r,   r-   r.     r/   zOLAPSets.__init__r0   )
r1   r2   r3   r	   rY   r   ri   rI   rK   r.   r,   r,   r,   r-   rt         
rt   c                   @   sV   e Zd ZdZe ZeedZee	dZ
eedZeedZdZ					dddZdS )PCDSDTCEntriesZpCDSDTCEntriesrM   )mnesNc                 C   "   || _ || _|| _|| _|| _d S r(   )rY   rw   rx   ry   rz   )r+   rY   rw   rx   ry   rz   r,   r,   r-   r.   !  
   
zPCDSDTCEntries.__init__NNNNN)r1   r2   r3   r4   r	   rY   r   r   rw   r   rx   r   ry   r   rz   rK   r.   r,   r,   r,   r-   rv     s    



rv   c                   @   sd   e Zd ZdZeeddZeeddZee	ddZ
eeddZeeddZdZ					dddZdS )	
TupleCache
tupleCacheTrA   entriessetsrg   rV   rJ   Nc                 C   r{   r(   r   )r+   r   r   rg   rV   rJ   r,   r,   r-   r.   ;  r|   zTupleCache.__init__r}   )r1   r2   r3   r4   r   rv   r   rt   r   rf   rg   rU   rV   r   rJ   rK   r.   r,   r,   r,   r-   r~   /  s    r~   c                   @   sv   e Zd ZdZe ZeddZe Ze Ze Z	e Z
e Ze Ze Ze Ze Z											dddZdS )PCDKPIZpCDKPITr%   Nc                 C   sF   || _ || _|| _|| _|| _|| _|| _|| _|	| _|
| _	|| _
d S r(   )r=   r8   displayFolderr)   rG   valuegoalstatustrendweighttime)r+   r=   r8   r   r)   rG   r   r   r   r   r   r   r,   r,   r-   r.   Y  s   
zPCDKPI.__init__)NNNNNNNNNNN)r1   r2   r3   r4   r   r=   r8   r   r)   rG   r   r   r   r   r   r   r.   r,   r,   r,   r-   r   I  s2    
r   c                   @   s*   e Zd ZdZe Ze Z		dddZdS )GroupMembergroupMemberNc                 C   r'   r(   )r=   group)r+   r=   r   r,   r,   r-   r.   z  r/   zGroupMember.__init__r0   )	r1   r2   r3   r4   r   r=   r   r   r.   r,   r,   r,   r-   r   s  r9   r   c                   @   rs   )GroupMembersrM   )r   Nc                 C   r'   r(   )rY   r   )r+   rY   r   r,   r,   r-   r.     r/   zGroupMembers.__init__r0   )
r1   r2   r3   r	   rY   r   r   r   rK   r.   r,   r,   r,   r-   r     ru   r   c                   @   sR   e Zd ZdZe Ze Ze Ze Ze	 Z
eedZdZ						dddZdS )
LevelGroupZ
levelGrouprM   )groupMembersNc                 C   (   || _ || _|| _|| _|| _|| _d S r(   )r7   r=   r8   uniqueParentidr   )r+   r7   r=   r8   r   r   r   r,   r,   r-   r.        
zLevelGroup.__init__NNNNNN)r1   r2   r3   r4   r   r7   r=   r8   r   r	   r   r   r   r   rK   r.   r,   r,   r,   r-   r     s     
r   c                   @   re   )GroupsgroupsrM   )r   Nc                 C   r'   r(   )rY   r   )r+   rY   r   r,   r,   r-   r.     r/   zGroups.__init__r0   )r1   r2   r3   r4   r	   rY   r   r   r   rK   r.   r,   r,   r,   r-   r     rh   r   c                   @   sZ   e Zd ZdZe Ze Ze Ze Z	e
eddZe
eddZdZ						dddZdS )	
GroupLevel
groupLevelTrA   )r   rJ   Nc                 C   r   r(   )r=   r8   usercustomRollUpr   rJ   )r+   r=   r8   r   r   r   rJ   r,   r,   r-   r.     r   zGroupLevel.__init__r   )r1   r2   r3   r4   r   r=   r8   r   r   r   r   r   r   r   rJ   rK   r.   r,   r,   r,   r-   r     s     r   c                   @   rs   )GroupLevelsrM   )r   Nc                 C   r'   r(   )rY   r   )r+   rY   r   r,   r,   r-   r.     r/   zGroupLevels.__init__r0   )
r1   r2   r3   r	   rY   r   r   r   rK   r.   r,   r,   r,   r-   r     ru   r   c                   @   "   e Zd ZdZe Z	dddZdS )
FieldUsage
fieldUsageNc                 C   
   || _ d S r(   x)r+   r   r,   r,   r-   r.        
zFieldUsage.__init__r(   )r1   r2   r3   r4   r	   r   r.   r,   r,   r,   r-   r     
    r   c                   @   s0   e Zd Ze ZeeddZdZ		dddZ	dS )FieldsUsageTrA   )r   Nc                 C   r'   r(   )rY   r   )r+   rY   r   r,   r,   r-   r.     r/   zFieldsUsage.__init__r0   )
r1   r2   r3   r	   rY   r   r   r   rK   r.   r,   r,   r,   r-   r     s    r   c                   @   s$  e Zd ZdZe ZeddZe Ze Z	e
ddZe
 Ze Ze Ze ZeddZeddZeddZeddZeddZeddZe Ze
 Ze Ze
ddZeddZeddZe ZeeddZee ddZ!ee"ddZ#dZ$																									dd	d
Z%dS )CacheHierarchyZcacheHierarchyTr%   rA   )fieldsUsagegroupLevels Nr   c                 C   s   || _ || _|| _|| _|| _|| _|| _|| _|	| _|
| _	|| _
|| _|| _|| _|| _|| _|| _|| _|| _|| _|| _|| _|| _|| _|| _d S r(   )r=   r8   r<   rI   	parentSeticonSet	attributer   keyAttributedefaultMemberUniqueNameallUniqueName
allCaptiondimensionUniqueNamer   r)   measuresrY   oneFieldmemberValueDatatype
unbalancedunbalancedGrouphiddenr   r   rJ   )r+   r=   r8   r<   rI   r   r   r   r   r   r   r   r   r   r   r)   r   rY   r   r   r   r   r   r   r   rJ   r,   r,   r-   r.   &  s2   
zCacheHierarchy.__init__)r   NNNNr   NNNNNNNNNNNNNNNNNNN)&r1   r2   r3   r4   r   r=   r8   r   r<   rI   r	   r   r   r   r   r   r   r   r   r   r   r)   r   rY   r   r   r   r   r   r   r   r   r   r   r   rJ   rK   r.   r,   r,   r,   r-   r     sl    










r   c                   @   sx   e Zd ZdZeedZeedZee	dZ
eedZeedZeedZdZdZ							dddZed	d
 ZdS )
GroupItems
groupItemsrM   rw   rx   bry   rz   drX   Nr,   c                 C   s(   || _ || _|| _|| _|| _|| _d S r(   r   )r+   rY   rw   rx   r   ry   rz   r   r,   r,   r-   r.   j  s   	
zGroupItems.__init__c                 C   s(   t | j| j | j | j | j | j S r(   )r]   rw   rx   r   ry   rz   r   r^   r,   r,   r-   rY   {  s   (zGroupItems.count)Nr,   r,   r,   r,   r,   r,   )r1   r2   r3   r4   r   r   rw   r   rx   r   r   r   ry   r   rz   r!   r   rK   r`   r.   ra   rY   r,   r,   r,   r-   r   \  s(    






r   c                   @   s2   e Zd ZdZe ZeddZdZ		dddZ	dS )	
DiscretePr
discretePrTr%   r   Nc                 C   r'   r(   )rY   r   )r+   rY   r   r,   r,   r-   r.     r/   zDiscretePr.__init__r0   )
r1   r2   r3   r4   r	   rY   r   r   rK   r.   r,   r,   r,   r-   r     rh   r   c                   @   s~   e Zd ZdZeddZeddZeg ddZe	ddZ
e	ddZeddZeddZe	ddZ								dd	d
ZdS )RangePrrangePrTr%   )rangesecondsminuteshoursdaysmonthsZquartersZyearsrj   r   Nr   c	           	      C   s4   || _ || _|| _|| _|| _|| _|| _|| _d S r(   )	autoStartautoEndgroupBystartNumendNum	startDateendDategroupInterval)	r+   r   r   r   r   r   r   r   r   r,   r,   r-   r.     s   

zRangePr.__init__)TTr   NNNNr   )r1   r2   r3   r4   r   r   r   r   r   r   r   r   r
   r   r   r   r.   r,   r,   r,   r-   r     s&    






r   c                   @   s`   e Zd ZdZeddZeddZeeddZ	ee
ddZeeddZdZ					d	ddZdS )

FieldGroup
fieldGroupTr%   rA   )r   r   r   Nc                 C   r{   r(   )parbaser   r   r   )r+   r   r   r   r   r   r,   r,   r-   r.     r|   zFieldGroup.__init__r}   )r1   r2   r3   r4   r	   r   r   r   r   r   r   r   r   r   rK   r.   r,   r,   r,   r-   r     s    

r   c                   @   s  e Zd ZdZe ZeeddZee	ddZ
eeddZeeddZeeddZeeddZeddZeddZeddZeddZeddZeddZeddZeddZeddZeddZeddZ eddZ!eddZ"dZ#															dd	d
Z$e%dd Z&dS )SharedItemssharedItems_fields)rB   storeTr%   )rY   containsBlankcontainsDatecontainsIntegercontainsMixedTypescontainsNonDatecontainsNumbercontainsSemiMixedTypescontainsStringminValuemaxValueminDatemaxDatelongTextr,   Nc                 C   sX   || _ || _|| _|| _|| _|| _|| _|| _|	| _|
| _	|| _
|| _|| _|| _d 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   r   r   r   rY   r   r,   r,   r-   r.     s   
zSharedItems.__init__c                 C   r\   r(   )r]   r   r^   r,   r,   r-   rY     r_   zSharedItems.count)r,   NNNNNNNNNNNNNN)'r1   r2   r3   r4   r   r   r   r   rw   r   rx   r   r   r   ry   r   rz   r!   r   r   r   r   r   r   r   r   r   r   r   r   r   r
   r   r   r   r`   r.   ra   rY   r,   r,   r,   r-   r     sR    













!r   c                   @   s   e Zd ZdZeeddZeeddZe	dddZ
eeddZe ZeddZeddZeddZeddZeddZeddZeddZeddZeddZeddZeddZeddZdZ																				dd
dZdS )
CacheFieldZ
cacheFieldTrA   v)r&   r   r%   )r   r   mpMapNr   c                 C   sj   || _ || _|| _|| _|| _|| _|| _|| _|	| _|
| _	|| _
|| _|| _|| _|| _|| _|| _d S r(   )r   r   r   rJ   r7   r8   propertyNameserverField
uniqueListnumFmtIdrP   sqlTyperF   leveldatabaseFieldmappingCountmemberPropertyField)r+   r   r   r   rJ   r7   r8   r   r   r   r   rP   r   rF   r   r   r   r   r,   r,   r-   r.   *  s"   
zCacheField.__init__)NNNNNNNNTNNr   r   r   TNN)r1   r2   r3   r4   r   r   r   r   r   r   r   r   rJ   r   r7   r8   r   r   r   r   r	   r   rP   r   rF   r   r   r   r   rK   r.   r,   r,   r,   r-   r     sL    











r   c                   @   sj   e Zd ZdZeddZeddZeddZeddZe	 Z
e	ddZe	ddZ							dddZdS )RangeSetZrangeSetTr%   Nc                 C   rC   r(   )i1i2i3i4refr7   sheet)r+   r   r   r   r   r   r7   r   r,   r,   r-   r.   \  rq   zRangeSet.__init__rr   )r1   r2   r3   r4   r	   r   r   r   r   r   r   r7   r   r.   r,   r,   r,   r-   r   P  s"    





r   c                   @   r   )PageItempageItemNc                 C   r   r(   )r7   )r+   r7   r,   r,   r-   r.   t  r   zPageItem.__init__r(   )r1   r2   r3   r4   r   r7   r.   r,   r,   r,   r-   r   n  r   r   c                   @   s8   e Zd ZdZeedZdZ		d	ddZe	dd Z
dS )
PageZ	PCDSCPagerM   r   Nc                 C   rZ   r(   r   )r+   rY   r   r,   r,   r-   r.     r[   zPage.__init__c                 C   r\   r(   )r]   r   r^   r,   r,   r-   rY     r_   z
Page.countr0   )r1   r2   r3   r4   r   r   r   rK   r.   ra   rY   r,   r,   r,   r-   r   z  s    

r   c                   @   sF   e Zd ZdZeddZeeddZee	ddZ
dZ			d
dd	ZdS )ConsolidationconsolidationTr%   rB   rY   )pages	rangeSetsNr,   c                 C      || _ || _|| _d S r(   )autoPager   r   )r+   r  r   r   r,   r,   r-   r.        
zConsolidation.__init__)Nr,   r,   )r1   r2   r3   r4   r   r  r   r   r   r   r   rK   r.   r,   r,   r,   r-   r     s    
r   c                   @   s>   e Zd ZdZeddZeddZeddZ			dddZdS )WorksheetSourceworksheetSourceTr%   Nc                 C   r   r(   )r   r7   r   )r+   r   r7   r   r,   r,   r-   r.     r  zWorksheetSource.__init__)NNN)	r1   r2   r3   r4   r   r   r7   r   r.   r,   r,   r,   r-   r    s    


r  c                   @   sd   e Zd ZdZeg ddZeddZee	ddZ
eeddZeeddZdZ					dd	d
ZdS )CacheSourcecacheSource)Z	worksheetZexternalr   Zscenariorj   Tr%   rA   )r  r   Nc                 C   r;   r(   )typeconnectionIdr  r   )r+   r  r  r  r   rJ   r,   r,   r-   r.     s   
zCacheSource.__init__r}   )r1   r2   r3   r4   r   r  r	   r  r   r  r  r   r   r   rJ   rK   r.   r,   r,   r,   r-   r    s    
r  c                       s  e Zd ZdZdZdZdZdZdZe	ddZ
e	ddZe	ddZe	ddZe	ddZeddZeddZeddZe	ddZeddZeddZeddZeddZeddZe	ddZe	ddZe	ddZe	ddZe e!d	Z"e#e$dd
Z%e#e&ddZ'e#e(ddZ)e e*ddZe#e+dd
Z,e#e-dd
Z.e#e/ddZ0e#e1dd
Z2e#e3dd
Z4e e5ddZ6e7 Z8dZ9																													dddZ: fddZ;e<dd Z=dd Z>dd Z?  Z@S )CacheDefinitionzTapplication/vnd.openxmlformats-officedocument.spreadsheetml.pivotCacheDefinition+xmlzXhttp://schemas.openxmlformats.org/officeDocument/2006/relationships/pivotCacheDefinitionr   z*/xl/pivotCache/pivotCacheDefinition{0}.xmlNZpivotCacheDefinitionTr%   rM   r   rA   )
r  cacheFieldscacheHierarchieskpisr   calculatedItemscalculatedMembers
dimensionsmeasureGroupsmapsr,   c                 C   s   || _ || _|| _|| _|| _|| _|| _|| _|	| _|
| _	|| _
|| _|| _|| _|| _|| _|| _|| _|| _|| _|| _|| _|| _|| _|| _|| _|| _|| _|| _d S r(   )invalidsaveDatarefreshOnLoadoptimizeMemoryenableRefreshrefreshedByrefreshedDaterefreshedDateIsobackgroundQuerymissingItemsLimitcreatedVersionrefreshedVersionminRefreshableVersionrecordCountupgradeOnRefreshr   supportSubquerysupportAdvancedDrillr  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   r!  r"  r  r
  r  r  r  r  r  r  r  rJ   r   r,   r,   r-   r.     s:   
zCacheDefinition.__init__c                    s   t t|  }|dt |S )NZxmlns)superr	  to_treerI   r   )r+   node	__class__r,   r-   r$  :  s   zCacheDefinition.to_treec                 C   s   | j | jS r(   )_pathrT   _idr^   r,   r,   r-   path@  s   zCacheDefinition.pathc                 C   s<   |  || t|  }|| jdd | ||  dS )z4
        Add to zipfile and update manifest
        r   N)_write_relsr   r$  writestrr*  append)r+   archivemanifestxmlr,   r,   r-   _writeE  s   zCacheDefinition._writec                 C   s   | j du rdS t }t| j j| j jd}|| |j| _| j| j _| j || t	| j}t
| }||dd | dS )z@
        Write the relevant child objects and add links
        N)TypeZTargetr   )recordsr   r   rel_typer*  r-  r   r)  r1  r   r   r$  r,  )r+   r.  r/  Zrelsrr*  r0  r,   r,   r-   r+  O  s   



zCacheDefinition._write_rels)NNNNNNNNNNNNNNNNNNNr,   r,   r,   r,   r,   r,   r,   r,   NN)Ar1   r2   r3   Z	mime_typer4  r)  r(  r3  r4   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  r   r   r
  r   r  r   r  r~   rL   r  r@   r  r:   r  r6   r  r#   r  r   rJ   r   r   rK   r.   r$  ra   r*  r1  r+  __classcell__r,   r,   r&  r-   r	    s    



















>

r	  N)MZ!openpyxl.descriptors.serialisabler   Zopenpyxl.descriptorsr   r   r   r   r   r   r	   r
   r   Zopenpyxl.descriptors.excelr   r   r   Zopenpyxl.descriptors.nestedr   Zopenpyxl.descriptors.sequencer   r   r   Zopenpyxl.xml.constantsr   Zopenpyxl.xml.functionsr   Zopenpyxl.packaging.relationshipr   r   r   tabler   r   fieldsr   r   r   r   r   r    r!   r#   r6   r:   r@   rL   rQ   rU   rb   rf   ri   rt   rv   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,   r,   r-   <module>   s\   ,$
#!*V$"E>