
    jXh                         S SK rS SKrS SKrS SKrS SKJr  S SK	J
r
Jr  S rS rSS jrSS jrS rS	 rS
 rS rS rS rS rS rS rS rS rS rS rS rS rS rg)    Ndefaultdict)log10floorc           
         U R                   [        R                  :w  a  [        S5      eUR                   [        R                  :w  a  [        S5      eU VVs0 s H  u  p#X#_M	     nnn[        R
                  " U  VVs/ s H  u  p#UR                  X#5      PM     snnSS9n[        R
                  " [        [        U S   U5      5      U R                   S9$ s  snnf s  snnf )NzAarray1 must have LCAdType [('Parameter', object), ('Wert', 'f8')]zAarray2 must have LCAdType [('Parameter', object), ('Wert', 'f8')]f8dtype	Parameter)	r
   mznLCAdType
ValueErrornparraygetlistzip)array1array2parammasseupdate_dictupdated_masses         N/var/www/oekobilanz-rechner-gitlab-dev2026v8/cgi-bin/../pyscripts/functions.pyupdateMasser   	   s    ||s||#\]]||s||#\]]4:;FLE5<FK;HHPVWPVkooe;PVW_cdM88DVK0-@AVV <Ws   C>C
c                      [         R                  R                  [         R                  R                  [        5      5      n [         R                  R                  [         R                  R                  U 5      S5      $ )Ndata)ospathdirnamerealpath__file__join)
script_dirs    r   get_data_dirr%      sE    !1!1(!;<J77<<
3V<<    c                    Uc  0 nUc  / n[        U [        5      (       a  U R                  5        H  u  pE[        U[        5      (       d  M  SU;   a7  XS   ;   a/  [        R                  S   S   U   S    H  nX4/-   X$ SU 3'   M     SU;   a7  XS   ;   a/  [        R                  S   S   U   S    H  nX4/-   X$ SU 3'   M     [        XQX#U/-   5        M     U$ )NselectUsedAsInputIn
rechnertypoptionsselColNames_valUsedAsInputInvalColNames)
isinstancedictitemsr   
input_metafindInputKeys)r   r)   resultskeyskeyvaluecolNames          r   r3   r3      s    |$**,JC%&&(E1jJ_D`6`#&>>,#?	#J:#VWd#e6:Ul%q	 23 $f%.:GYAZ3Z#&>>,#?	#J:#VWd#e6:Ul%q	 23 $fe#,G ' Nr&   c                 6   Uc  0 n[        U [        5      (       Ga}  U R                  5        GHh  u  pV[        U[        5      (       d  M  SU;   ab  XS   ;   aZ  [        [        R
                  S   S   U   S   5       H1  u  pxU[        US   5      :  a  US   U   XE SU 3'   M(  SXE SU 3'   M3     SU;   a  XS   ;   a  [        [        R
                  S   S   U   S	   5       H  u  pxUS
:X  a1  US   US   [        R
                  S   U   S   :H     S   XE SU 3'   M<  SU;   a1  US   US   [        R
                  S   U   S   :H     S   XE SU 3'   Ms  U[        US   5      :  a  US   U   XE SU 3'   M  SXE SU 3'   M     [        XaX#U5        GMk     U$ )Nr(   r)   r*   r+   selectStdValuesr,   r   r-   r.   lkwWertr   bestandteile
resultNamebahnvalStdValues)r/   r0   r1   	enumerater   r2   lensetStdInputValues)	r   r)   transStdStrArraytransStdBahnArrayr4   r6   r7   idxr8   s	            r   rC   rC   *   s    $**,JC%&&(E1jJ_D`6`(1|4Y?
KMZ)\U+<%=!>>:?@Q:RSV:WGe1WI$67:;Ge1WI$67)\ &.:GYAZ3Z(1|4Y?
KMZ)\"e+ !1 8:J;:WNN>:3?M;N !PPQ!S $e1WI$67 $w. 1& 9;L[;YNN>:3?M<N !PPQ!S $e1WI$67
  #S~)>%??>CN>STW>X%q	(: ;>?%q	(: ;#)\$ "%5EZab= '> Nr&   c                 z   [        [        R                  U5      nU R                  5        H  u  p4X2R	                  5       ;  a  SS[
         S34s  $ X#   n[        R                  nU H  nXg   nM	     SU;  a  SU;  a
  SSU S34s  $ UR                  S5      (       a  S	U;   a  XFS	   ;  a  SS
US   S    S34s  $ UR                  S5      (       d.  UR                  S5      (       d  UR                  S5      (       d  M  X   b  X   S:X  a  SX'   M   [        X   5        M     g!   SSUS   S    S34s s  $ = f)NFzDer input name "z'" ist nicht erlaubt, bitte korrigieren.r(   r-   u   Keine gültige Definition für uT    gefunden. Wir würden uns freuen über eine Meldung dieses Fehlers an team@pawis.ch_valuer*   zDie Auswahl "labeltextu,   " enthält keinen Wert aus der Auswahlliste._masse_lkw_bahn         z"Bitte eine Zahl eingeben im Feld "z".)TrN   )r3   r   r2   r1   r5   	input_keyendswithfloat)	inputDatar)   keysDictinputKey
inputValuedictPathcurDictmetaKeys           r   
inputCheckrZ   Q   sp   S^^Z8H ) 1==?*.yk9abbb%..G&G   !/4Fg4U;H:  FZ  [  [  [X&&G#
):L(Lgg.>v.F-GGstttX&&(*;*;F*C*CxGXGXY`GaGa"*i.AR.G&)	#d)-.+ !20 d $FwwGWX^G_F``b"cccs   D&&D:c                    [        U [        R                  5      (       a  U R                  R                  c  [        S5      eU R                  R                  c  [        S5      eU R                  R                  nU R                  R                  US      S   R                  S:w  a  [        SUS    S[         S35      eUSS   HA  nU R                  R                  U   S   R                  nUS	;  d  M1  [        S
U SU S35      e   g)NzInput is not a NumPy array.z<Input is not a structured NumPy array (missing field names).r   OzFirst field 'z/' must be of object type (kind='O'), got kind='z'.   fizField 'z<' must be of type int or float (kind='f' or 'i'), got kind='T)	r/   r   ndarrayr
   namesr   fieldskindfirst_field_kind)arr
fieldNamesnamerb   s       r   isValidArray4MatrixMultrg   n   s   c2::&&#))//*A677
yyWXXJ
yy
1&q)..#5JqM?*YZjYkkmn
 	
 12yy%a(--t$[\`[aacd   r&   c                 n   [        U 5      (       a  [        U5      (       d  gU R                  R                  SS   Vs/ s H&  nX!UR                  R                  S      ;   d  M$  UPM(     nnU(       d  g[        R                  " U Vs/ s H  o U   PM	     sn5      R
                  nUU Vs/ s H;  n[        R                  " XR                  R                  S      U:H  5      S   S   PM=     sn   n[        R                  " U VVs/ s H/  nUR                  R                  SS   Vs/ s H  o&U   PM	     snPM1     snn5      nXG-  nS/[        UR                  R                  SS  5      -   n	S/UR                  R                  SS   Vs/ s H  o"S4PM     sn-   n
UR                  S   n[        R                  " XS9nX R                  R                  S      US'   [        UR                  R                  SS  5       H  u  pUS S 2U4   X'   M     U$ s  snf s  snf s  snf s  snf s  snnf s  snf )	NFr]   r   zMfunctions::matrixMult(npStructArray1, npStructArray2): no common params foundr   )r   r\   <f8r	   )rg   r
   r`   r   vstackTwherer   shapeemptyrA   )npStructArray1npStructArray2rf   common_paramsmatrix1array2_orderedrowmatrix2result_matrixoutput_field_namesoutput_dtypenum_rowsstructured_resultis                 r   
matrixMultr|      s9   ">22:QR`:a:a&4&:&:&@&@&D P&Dd0D0D0J0J10M!NN &DM P^ii-H-$--HIKKG#!%#!D 	 4 4 : :1 =>$FGJ1M!%# $N ii!$!C 2@1E1E1K1KAB1OP1Ot91OP!$ %G %M%n.B.B.H.H.L)MM&'^EYEYE_E_`a`bEc*dEcT%=Ec*ddL""1%H>%34H4H4N4Nq4Q%Rk"^1177;<"/1"5 =)P I%# Q $ +es6   #H$HH,AH"!H,
)H'7H,
H2'H,
c                     U  Vs0 s H  o"S   US   _M     nnUR                   R                  SS   H  nXC;  d  M
  SX4'   M     UR                   R                  SS   H  nX==   X5   -  ss'   M     U$ s  snf )Nr   r<   r]   r   )r
   r`   )npStructArrayVectnpStructArrayMatrixrt   
scale_dictr   col_names         r   
vectMatrixr      s     <MM;LCk"CK/;LJM$**004"!"J 5 (--33AB7%)==% 8 Ns   A4c                    U R                   n[        U 5       VVs0 s H  u  p4US   U_M     nnnUR                   R                  SS  nU Vs/ s H  owS4PM     nn[        U R                   R                  5      n	U R                   R                   V
s/ s H  oS   U;  d  M  U
PM     nn
X Vs/ s H  owS4PM     sn-  n[
        R                  " U R                  US9nU R                   R                   H  nXv;  d  M
  X   X'   M     U H%  nUS   nX;   d  M  X]   nU H  nXN   X   U'   M     M'     U$ s  snnf s  snf s  sn
f s  snf )Nr   r]   ri   r   r	   )r
   rA   r`   setdescrr   zerosrm   )	lciaArrayaddLciaArray	origDtyperF   rt   	param2IdxnewColsrf   	newDtypesexistingColsdtcombiDtypesextendedLciaArrayr   cols                  r   addAdditionalLCIADatar      sG   I7@7KL7K83[!3&7KIL  &&qr*G+23747I3y,,-L ) 5 5N 5"Ag9M2 5KNg6gd5Mg66KD%%&/o# & K "C.1h!&s+ 	  ! M3N6s   D7D=E#E/Ec                 p   U R                   R                  nU S   nU Vs/ s H  o3S:w  d  M
  UPM     nnS[        4/U Vs/ s H  oUS4PM     sn-   n[        R                  " [        U5      US9n[        U5       H,  u  pXU   S'   [        U5       H  u  pX
   U	   Xx   U'   M     M.     U$ s  snf s  snf )Nr   ri   r	   )r
   r`   objectr   r   rB   rA   )rd   
orig_names
row_labelsrf   
col_labelsrI   	new_dtypetransposed_arrr{   r   js              r   transposeNamedArrayr      s    J[!J#-E:41D$:JEv&'z*Rze5>z*RRIXXc*oY?NJ'),q+&!*-HA'*vc{Ne$ . (  F*Rs   	B.B.B3c                  r    0 n [         R                  S   S   R                  5        H  u  pXUS   '   M     U $ )Numwindikatorr*   	Datensatz)r   r2   r1   )umwindLookupr6   r7   s      r   createUmwindLookupr      s>    Lnn^4Y?EEG
+.U;'( Hr&   c                 V   [        5       n[        R                  " [        U S   5      [        R
                  S9n/ n/ n[        U S   5       H  u  pVUS   n [        R                  S   S   X      S   X%   S'   [        R                  S   S   X      S   X%   S'   [        R                  S   S   X      S	   (       a  UR                  X%   S   5        U S   R                  R                  S
S   Vs/ s H  oU   PM	     n	n[        R                  " U	5      X%   S'   M     U[        R                  " US   U5      )    n[        U S   5       H0  u  pV [        R                  S   S   XS         S   U S   U   S'   M2     [        U S   5       H  u  pVU S   R                  R                  S
S   Vs/ s H  oU   PM	     n	nUS   US   ;   d  MA  US   U;   aY  [        R                  " U	5      US   US   US   :H  '   US   US   US   :H     US   US   US   :H     -   US   US   US   :H  '   M  [        R                  US   US   US   :H  '   [        R                  US   US   US   :H  '   M     U$ !   UR                  U5        XrU   S'    GN= fs  snf !    GMT  = fs  snf )NHerstellungr	   r   r   r*   menutextzLCIA-FaktorEinheitshowEntsr]   
EntsorgungTotal)r   r   r   rB   r   ResdTyperA   r2   appendr
   r`   sumisinnan)
npNamedArrayDictr   sumArrremoveParamListshowEntsListr{   rt   r   rf   valuess
             r   lciaSumr      s	   %'LXXc*=9:#,,OFOL,];<K 	-'*~~n'Ei'PQ]Qd'efp'qFIm$#&>>.#A)#L\M`#abk#lFIi ~~n-i89LMjY##FIm$<=
 )9(G(M(M(S(STUTV(WX(Wd)(WX#%66&>	-  = RWWVM2ODDEF,\:;	~.y9,;GW:XYZde \*1-k: < ,\:;(8(F(L(L(R(RSTSU(VW(Vd)(VW{vm44;</RTRXRXY_R`|$VM%:c+>N%NO=)&*?3{CS*ST<()>#kBR)RST w} 5[9I IJ SURXRX|$VM%:c+>N%NOMOVVw} 5[9I IJ < M5	-""5)',1Im$X	 Xs%   A?I84J*J4J&8JJ#c                 F   [         R                  S   S   US      S   n[         R                  S   S   US      S   n0 n[        R                  " S[         R                  S9US'   U S   U S   S	   U:H     US'   [        US   5      US'   [        R                  " [        US   5      [         R                  S9n[        US   5       H  u  pgUS	   XV   S
'   Xr   XV   S'   X5U   S'   M!     [        R                  " S[         R                  S9US'   U S   U S   S	   U:H     US'   [        US   5      US'   [        US   5       HX  u  pgUS	   US
   ;   d  M  Xr   US   US
   US	   :H  '   US   US
   US	   :H     US   US
   US	   :H     -   US   US
   US	   :H  '   MZ     U$ )Nr   r*   umwindikator_selectr   r   r   r	   r   r   Bestandteil / Prozessr   r   )
r   r2   r   rn   r   r   r   rB   ResDetailsdTyperA   )r   inData
curLCIAColcurLCIAEinhinternalDictretArrr{   rt   s           r   lciaDetailsr      s   /	:6BW;XYZefJ..0;FCX<YZ[deKL"$((1CLL"AL"2="ABRS`BabmBnr|B|"}L"5l=6Q"RLXXc,}56c>Q>QRFL78-0-=	)*#&?	- *q	) 9 "$!3<<!@L!1,!?@PQ]@^_j@koy@y!zL!4\,5O!PL L67{v&=>>X[XgF< (?!@CDT!TU}%f-D&E[IY&YZ|$V,C%DKHX%XYZ 7OF#:;s;?OOP 8 Mr&   c                    0 n[         R                  S   R                  5        H  nUS   XS   '   M     SSKJn  U" S 5      nSSSS.nU  Hj  nUS	   nXq;  a  S
nOX   nXH   S==   US   -  ss'   US==   US   -  ss'   XH   S==   US   -  ss'   US==   US   -  ss'   XH   S==   US   -  ss'   Ml     US   US   S'   US   S==   US   -  ss'   US   S==   US   S   US   S   -   -  ss'   [
        R                  " UR                  5        V	V
s/ s H  u  pXS   U
S   U
S   S4PM     sn
n	[         R                  S9nU S   S   US'   U$ s  sn
n	f )Nr=   zZuordnung Bestandteiler>   r   r   c                      SSSS.$ )NrO   r   r   r    r   r&   r   <lambda>'gruppiereBestandteile.<locals>.<lambda>  s    3QT Ur&   rO   r   r   u   Übriges Betonherstellungr   r   r   rN   r	   r   )	r   r2   r   collectionsr   r   r   r1   r   )npNamedArraymappingDictr7   defDict	groupSumsgroupTotalsrt   r   groupKeygroupvalsresArrs               r   gruppiereBestandteiler     s   K/668+01I+J,'( 9 3UVI"%S3GK+,#2H")HM*c-.@@*M"c-&88"L)S->>)L!S%66!G$G4$  )4M(BIg}%g|$L(AA$gw9W#5m#DyQXGYZfGg#ggXX/8/@B/@ ] 3T,5GgXZ[/@BILI\I\_F$Q	2F9MBs   E
c                    SnSU ;   a  [        U S   5      nOSnX-  nSU ;   a  [        U S   5      nOSnX-  nSU ;   a  [        U S   5      nOSnX-  nSU ;   a  [        U S   5      nOSnX-  nSU ;   a  [        U S   5      nOSnX-  nUS:X  a  SnX!-  nX1-  nUS:X  a  US:  a  g	US
:  a  ggUS:  a  gUS:  a  gXx-   S
:  a  gg)Nr   Betongranulat CMischgranulat M	Kies rundKies gebrochenSandr]   g      ?RCbC50g      ?RCbC25Pbg?RCbM40g?RCbM10nNormRec)rR   )	
resultDictaggregateAll
aggregateC
aggregateMaggregateGravelRoundaggregateGravelBrokenaggregateSandshareCshareMs	            r   calcConcreteNormLabelr   +  s!   LJ&:&789

LJ&:&789

Lj #(K)@#A #$ (L:%$)*5E*F$G!$%!)L!*V"45MM!Lq&F&F{S=T>}}$r&   c                    0 n[         R                  S   S   S   US'   U S   US'   U S   US'   U S   US'   U S   US'   U S	   US	'   U S
   US
'   U S   US'   U S   US'   U S   US'   SS KnUR                  X5      u  pVUS    Vs0 s H  owS   US   _M     nnU[         R                  S   S   S   :X  a  [	        U5      US'   U$ U[         R                  S   S   S   :X  Ga   US   US'   SUS'   SU;   a	  US   US'   OSUS'   SU;   a	  US   US'   OSUS'   SU;   a	  US   US'   OSUS'   SU;   a	  US   US'   OSUS'   SU;   a	  US   US'   OSUS'   SU;   a	  US   US '   OSUS '   S!U;   a	  US!   US"'   OSUS"'   UR                  0 S#S$_S%S&_S'S$_S(S&_S)S$_S*S+_S,S$_S-S+_S.S$_S/S+_S0S$_S1S+_S2S$_S3S+_S4S5_S6S$_S7S+_0 S8S5_S9S$_S:S+_S;S<_S=S>_S?S5_S@S<_SAS>_SBS+_SCS+_SDS<_SES>_SFSG_SHS+_SIS+_SJS+_E5        U$ U$ s  snf !   UR                  0 SS_S#S$_S%S&_SS_S'S$_S(S&_SS_S)S$_S*S+_SS_S,S$_S-S+_SS_S.S$_S/S+_SS_S0S$_0 S1S+_SS_S2S$_S3S+_S4S_S6S$_S7S+_S8S_S9S$_S:S+_S S_S;S<_S=S>_S?S_S@S<_SAS>_S"S_ES+S+S<S>SGS+S+S+SK.E5         U$ = f)LNr)   r:   r   rechnertyp_selectanwendung_selectcemtyp_selectcemtyp2_selectbewehrung_selectbewehrung_masseeinspeicherungKohle_masseeinspeicherungGranulat_masser   actTabInput_selecttabZusBetonUnbewehrtr]   sorte_selectZementcemtyp_masserN   cemtyp2_masser   betongranulat_masser   mischgranulat_masser   kies_rund_masser   kies_gebrochen_masser   
sand_masseFliessmittelfliessmittel_masseWasserwasser_masse
cemtyp_lkwz20.0cemtyp_bahnz100.0cemtyp2_lkwcemtyp2_bahnbetongranulat_lkwbetongranulat_bahnz0.0mischgranulat_lkwmischgranulat_bahnkies_rund_lkwkies_rund_bahnkies_gebrochen_lkwkies_gebrochen_bahnsand_lkw	sand_bahnkalksteinmehl_masse0kalksteinmehl_lkwkalksteinmehl_bahnflugasche_masseflugasche_lkwflugasche_bahnfliessmittel_lkwz50.0fliessmittel_bahnz600.0weitere_zusaetze_masseweitere_zusaetze_lkwweitere_zusaetze_bahn
wasser_lkwwasser_bahnbewehrung_lkwbewehrung_bahneinspeicherungKohle_lkwz70.0einspeicherungKohle_bahneinspeicherungGranulat_lkweinspeicherungGranulat_bahn)r  r  r  r  r  r  r  r  )r   r2   betonrechner_mainrechneBilanzr   update)	r   inRechnertyptestRechnertypretDictbrMaininputDataTmptabDicttr   s	            r   createInput4Changer(  Z  s   G#&>>,#?@Q#RST#UG "();"<G%o6GO & 7G"();"<G!'(9!:G+12M+NG'(.45S.TG*+%+,A%BG!"$*+?$@G !&#00HL&-.D&EF&EA$!*&EJFs~~l34EFqII"7
"CR NQ 
56GHK	KF	&0&:GN#')GO$ J.1;<M1N-.13-. J.1;<M1N-.13-.j(-7-D)*-/)*:-2<=M2N./24./#(26(:%(*%+0:>0J,-02,-:%*4X*>'*,'NN f&3Wv'5w $V .B5 $V	 .B5	
  
 *:5 %f /DU F %0 &s -@ J^_d "3 )8 BRSX #F -@ )# 0Fv Pgho e &3E   *:7 *6 4Nu -e 6STY N N7NY Gn	 NN $0&:G%2F<JG &r ,? I]^c &r	 ,?	 I]^c	
 "2
 (7
 AQRW ' -A& K`af b #-f 7B5 &r ,? I]^c "2 (7 AQRW %b +=f GZ[b )" /Ef Ofgn  38!'7+1u.3TY " Ns   G8%DG= =BJc                 V   0 nU R                   S:  Ga  [        R                  " U R                  R                  R                  5        Vs/ s H  nUS   [        R                  :H  PM     sn5      nU  H  n[        U5       H  u  pxXW   (       a  [        R                  " U5      (       a   [        UR                  US5      S5      X7'   MI  [        X5      n	[        U	5      n	SU	;   a=  U	R                  S5      n
[        UR                  US5      [        U
S   5      5      X7'   M  [        UR                  US5      S5      X7'   M  SX7'   M     M     Sn[        U R                  R                  5       H4  u  pX;   a  USR!                  U5      -  nM   USR!                  U5      -  nM6     US-  nU  Hh  nUS-  n[        U5       HL  u  pxXq;   a"  US	R!                  [#        XX7   5      5      -  nM,  US
R!                  [#        XX7   5      5      -  nMN     US-  nMj     US-  nU$ SnU$ s  snf )Nr   .r]   zZ<table class="table shiny-table table-striped spacing-s" style="width:auto;">
<thead><tr>
z%<th style="text-align: left;">{}</th>z&<th style="text-align: right;">{}</th>z  </tr></thead>
<tbody>
z<tr>z<td>{}</td>z<td align="right">{}</td>z</tr>
z</tbody></table>
zV<table class="table shiny-table table-striped spacing-s" style="width:auto;">
</table>)sizer   r   r
   ra   r   float64rA   isnanmaxr   signifstrsplitrB   r`   formatsignifPretty)r   alignLeftListstellenRundenstellenDictr
   floatColInArrayrt   r{   celltest	testParts
html_tablecolIdxr8   s                 r   npArray2HTMLResultTabr=    s   KzzA~ (([[''..0$30E 	aBJJ0$3 4 C$S>#&xx~~),[__Qq-A1)E%d9"4y$;(,

3I-011Es9UV<GX-YKN-011Eq-IKN%&KN *   x
():):;OF&GNNwWW
HOOPWXX
	  <
 	22
C& J$S>%-"6"6|DWbWe7f"ggJ"?"F"F|TXgrguGv"wwJ	 *
 )#J  	**
  s
K$3s   
 H&c                 0    [         R                  " U S5      $ )N   )r   round)xs    r   	roundKg2grB    s    88Aq>r&   c                 X    [        U 5      n [        R                  " U 5      (       a  gU S:X  a  g[	        X[        [        [        [        U 5      5      5      5      -
  S-
  5      nUS-  S:X  a  [        U5      nSR                  U5      R                  SS5      $ ! [         a    U s $ f = f)NrN   r   r]   z{:,},')rR   r   r   r-  r@  intr   r   absr2  replace)rA  num_figretXs      r   r/  r/    s    !H 
xx{{AvQE%A-$8 99!;<!8q=t9D}}T"**3t44  s   B B)(B)c                    [        X5      n[        U5      nUR                  S5      nSnSn[        U5      S:  a  [        US   5      nOUS:  a  US-  nSn[	        X%-
  5       H  nU(       d  US-  nSnUS-  nM     U(       a  US	-  nU$ )
Nr*  r   Fr]   z$<span style="color:rgba(0,0,0,0);">.Tz#<span style="color:rgba(0,0,0,0);">r  z</span>)r/  r0  r1  rB   range)rA  numFig	decPlacessignXsplitXdecNums	spanAddedr{   s           r   r3  r3    s    1EJE[[FGI
6{QfQi.q=;;EI9$%::EI	 &
 Lr&   )npkDefinitionNN)N) numpyr   matrizenr   r   sysr   r   r   mathr   r   r   r%   r3   rC   rZ   rg   r|   r   r   r   r   r   r   r   r   r(  r=  rB  r/  r3  r   r&   r   <module>rX     s      	 
 . W="%N:$4
(
(T26,^Zx+`5r&   