From f746ba1672fbf49be81ae2da44eb1657d531af07 Mon Sep 17 00:00:00 2001 From: xdrm-brackets Date: Mon, 2 Nov 2015 12:20:01 +0100 Subject: [PATCH] Modification design tableaux --- css/global.css | 90 +++++--------------- css/global2.css | 163 ++++++++++++++++++++++++++++++++++++ manager/database.php | 2 +- page/groups.php | 87 ++++++++++--------- test.php | 12 +++ xdoc/flat_table_design.jpg | Bin 0 -> 27635 bytes xdoc/requêtes_sql_types.sql | 2 +- 7 files changed, 242 insertions(+), 114 deletions(-) create mode 100755 css/global2.css create mode 100644 xdoc/flat_table_design.jpg diff --git a/css/global.css b/css/global.css index 6b6aba3..1f7e51b 100755 --- a/css/global.css +++ b/css/global.css @@ -30,34 +30,28 @@ /* STYLE "BASIC" DES TABLEAUX */ table.basic{ /* position */ - /*width: calc( 100% - 2*1em );*/ - margin: 2em 1em; + width: 100%; + margin-bottom: 1em; /* border */ border-radius: 5px; border-spacing: 0; - box-shadow: 0 0 4px #e3e3e3; + /*box-shadow: 0 0 4px #e3e3e3;*/ } -/* affichage du corps si tête activée */ -table.basic thead + tbody td{ display: none; } -table.basic thead + tbody td.more{ display: block; } -table.basic thead.active + tbody td{ display: table-cell; } - - - - table.basic tr td, table.basic tr th, #DRAGNDROP td, #DRAGNDROP th{ /* position */ - padding: 1em 1.5em; + padding: 1.5em 1.5em; + + width: 25%; /* border */ - border-width: 1px 1px 0 0; - border-style: solid; - border-color: #e0e1e3; + /*border-width: 1px 0 0 0;*/ + /*border-style: solid;*/ + /*border-color: #e0e1e3;*/ /* backgroud */ background-color: #fff; @@ -76,64 +70,24 @@ table.basic tr th, cursor: default; } -/* la ligne "Voir plus" */ -table.basic tr td.more{ - /* background */ - background: #f7f8fc url(../src/more.svg) right 1em center no-repeat; - background-size: auto 1.5em; +/* titre aligné à gauche */ +table.basic th{ text-align: left; } - /* foreground */ - color: #b7b7b7; - text-align: right; - padding-right: 3em; +/* sans background */ +table.basic thead tr th{ background-color: transparent; } - /* extra */ - cursor: pointer; -} - -table.basic tr td.more:before{ content: 'Voir plus'; } -table.basic thead.active + tbody tr td.more:before{ content: 'Voir moins'; } - -/* on cache "voir plus" quand le tableau est déroulé */ -table.basic thead.active + td.more{ display: none; } - - -/* différence avec */ -table.basic tr th{ background-color: #f7f8fc; font-size: 1.05em; } -table.basic tr th:first-letter{ text-transform: uppercase; } - - -/* on ajoute les rebords pour ceux à gauche */ -table.basic tr td:first-child, -table.basic tr th:first-child{ border-left-width: 1px; } -/* on ajoute les rebords pour ceux en bas */ -table.basic tr:last-child td { border-bottom-width: 1px; } - - -/* angle haut gauche */ -table.basic tr:first-child th:first-child{ border-radius: 5px 0 0 0; } -/* angle haut droit */ -table.basic tr:first-child th:last-child { border-radius: 0 5px 0 0; } -/* angle bas gauche */ -table.basic tr:last-child td:first-child { border-radius: 0 0 0 5px; } -/* angle bas droit */ -table.basic tr:last-child td:last-child { border-radius: 0 0 5px 0; } +table.basic:nth-child(4n+0) tr td:first-child{ border-left: 10px solid #e63c54; } +table.basic:nth-child(4n+1) tr td:first-child{ border-left: 10px solid #3c73e6; } +table.basic:nth-child(4n+2) tr td:first-child{ border-left: 10px solid #e6983c; } +table.basic:nth-child(4n+3) tr td:first-child{ border-left: 10px solid #2dcc70; } /* @hover */ -table.basic tr:hover td:not(.more){ - background-color: #2dcc70; - color: #fff; -} +table.basic tr:hover td{ color: #fff; } - -table.basic:nth-child(4n+0) thead th{ color: #e63c54; } -table.basic:nth-child(4n+0) tr:hover td:not(.more) { background-color: #e63c54; } -table.basic:nth-child(4n+1) thead th{ color: #3c73e6; } -table.basic:nth-child(4n+1) tr:hover td:not(.more) { background-color: #3c73e6; } -table.basic:nth-child(4n+2) thead th{ color: #e6983c; } -table.basic:nth-child(4n+2) tr:hover td:not(.more) { background-color: #e6983c; } -table.basic:nth-child(4n+3) thead th{ color: #2dcc70; } -table.basic:nth-child(4n+3) tr:hover td:not(.more) { background-color: #2dcc70; } +table.basic:nth-child(4n+0) tr:hover td{ background-color: rgba(230, 60, 84, 1); } +table.basic:nth-child(4n+1) tr:hover td{ background-color: rgba(60, 115, 230, 1); } +table.basic:nth-child(4n+2) tr:hover td{ background-color: rgba(230, 152, 60, 1); } +table.basic:nth-child(4n+3) tr:hover td{ background-color: rgba(45, 204, 112, 1); } diff --git a/css/global2.css b/css/global2.css new file mode 100755 index 0000000..6b6aba3 --- /dev/null +++ b/css/global2.css @@ -0,0 +1,163 @@ +.no-select{ + user-select: none; + -moz-user-select: none; + -webkit-user-select: none; + -ms-user-select: none; + -o-user-select: none; +} + +.hidden{ display: none !important; } + + + + + + + + + + + + + + + + +/**********************/ +/*** TABLEAU .BASIC ***/ +/**********************/ + +/* STYLE "BASIC" DES TABLEAUX */ +table.basic{ + /* position */ + /*width: calc( 100% - 2*1em );*/ + margin: 2em 1em; + + /* border */ + border-radius: 5px; + border-spacing: 0; + box-shadow: 0 0 4px #e3e3e3; +} + +/* affichage du corps si tête activée */ +table.basic thead + tbody td{ display: none; } +table.basic thead + tbody td.more{ display: block; } +table.basic thead.active + tbody td{ display: table-cell; } + + + + +table.basic tr td, +table.basic tr th, +#DRAGNDROP td, +#DRAGNDROP th{ + /* position */ + padding: 1em 1.5em; + + /* border */ + border-width: 1px 1px 0 0; + border-style: solid; + border-color: #e0e1e3; + + /* backgroud */ + background-color: #fff; + + /* foreground */ + color: #4e4e4e; + + /* animation */ + transition: all .2s ease-in-out; + -moz-transition: all .2s ease-in-out; + -webkit-transition: all .2s ease-in-out; + -ms-transition: all .2s ease-in-out; + -o-transition: all .2s ease-in-out; + + /* extra */ + cursor: default; +} + +/* la ligne "Voir plus" */ +table.basic tr td.more{ + /* background */ + background: #f7f8fc url(../src/more.svg) right 1em center no-repeat; + background-size: auto 1.5em; + + /* foreground */ + color: #b7b7b7; + text-align: right; + padding-right: 3em; + + /* extra */ + cursor: pointer; +} + +table.basic tr td.more:before{ content: 'Voir plus'; } +table.basic thead.active + tbody tr td.more:before{ content: 'Voir moins'; } + +/* on cache "voir plus" quand le tableau est déroulé */ +table.basic thead.active + td.more{ display: none; } + + +/* différence avec */ +table.basic tr th{ background-color: #f7f8fc; font-size: 1.05em; } +table.basic tr th:first-letter{ text-transform: uppercase; } + + +/* on ajoute les rebords pour ceux à gauche */ +table.basic tr td:first-child, +table.basic tr th:first-child{ border-left-width: 1px; } +/* on ajoute les rebords pour ceux en bas */ +table.basic tr:last-child td { border-bottom-width: 1px; } + + +/* angle haut gauche */ +table.basic tr:first-child th:first-child{ border-radius: 5px 0 0 0; } +/* angle haut droit */ +table.basic tr:first-child th:last-child { border-radius: 0 5px 0 0; } +/* angle bas gauche */ +table.basic tr:last-child td:first-child { border-radius: 0 0 0 5px; } +/* angle bas droit */ +table.basic tr:last-child td:last-child { border-radius: 0 0 5px 0; } + +/* @hover */ +table.basic tr:hover td:not(.more){ + background-color: #2dcc70; + color: #fff; +} + + +table.basic:nth-child(4n+0) thead th{ color: #e63c54; } +table.basic:nth-child(4n+0) tr:hover td:not(.more) { background-color: #e63c54; } +table.basic:nth-child(4n+1) thead th{ color: #3c73e6; } +table.basic:nth-child(4n+1) tr:hover td:not(.more) { background-color: #3c73e6; } +table.basic:nth-child(4n+2) thead th{ color: #e6983c; } +table.basic:nth-child(4n+2) tr:hover td:not(.more) { background-color: #e6983c; } +table.basic:nth-child(4n+3) thead th{ color: #2dcc70; } +table.basic:nth-child(4n+3) tr:hover td:not(.more) { background-color: #2dcc70; } + + + + +/******************/ +/*** PARAGRAPHS ***/ +/******************/ +#CONTAINER section > p{ + /* position */ + padding: 1em; + margin: 1em; + + /* border */ + border-radius: 3px; + border: 1px solid #ddd; + + /* background */ + background-color: #fff; +} + +#CONTAINER section > p:hover{ + box-shadow: 1px 1px 3px #ddd; +} + + + + diff --git a/manager/database.php b/manager/database.php index 146ea32..5511964 100755 --- a/manager/database.php +++ b/manager/database.php @@ -761,7 +761,7 @@ class DataBase{ /******************************************************/ /***** déplace un étudiant d'un groupe à un autre *****/ /******************************************************/ - public function deplacerEtudiant($etudiant,$groupe, $semestre, $annee){ + public function deplacerEtudiant($etudiant, $groupe, $semestre, $annee){ /*** on cherche un semestre avec ce rang et cette année (qui est unique) ***/ $getSemestreUID = $this->pdo->prepare("SELECT id_semestre as id FROM semestre WHERE rang = :rang AND annee = :annee"); $getSemestreUID->execute(array( diff --git a/page/groups.php b/page/groups.php index 3bfe11f..0feb587 100755 --- a/page/groups.php +++ b/page/groups.php @@ -34,6 +34,13 @@ require_once __ROOT__.'/manager/groups.php'; if( $answer->request == 'success' ){ // si pas d'erreur ////////////////////////////////////////////////////////////// + + echo ""; + echo '
Identifiant'; + echo 'Prenom'; + echo 'Nom'; + echo 'Groupe'; + echo '
'; foreach($answer->grouplist as $group){ // pour chaque groupe @@ -41,31 +48,20 @@ require_once __ROOT__.'/manager/groups.php'; echo ""; - echo ''; - echo ''; - echo ''; - echo ''; - echo ''; - - - - echo ''; + echo ''; // pour chaque utilisateur foreach($group->userlist as $user){ - echo ''; - - foreach($user as $key=>$value) - if( $key == 'identifiant' ) - echo "'; - elseif( $key == 'prenom' || $key == 'nom' ) - echo ''; + echo "'; + echo ''; + echo ''; + echo ''; echo ''; } - echo ''; + // echo ''; echo ''; @@ -119,30 +115,32 @@ if( $_SESSION['identifiant'] != null && $_SESSION['droits'] == 'student' ){ // s if( $answer->request == 'success' ){ // si on a bien récupéré les membres du groupe //////////////////////////////////////////////////////////////////////////////// - echo "
Groupe '.$group->nom.'
'.$value.'".$user['identifiant'].''.$user['prenom'].''.$user['nom'].'Groupe '.$group->nom.'
"; - echo ""; - echo ''; - echo ''; + echo "
Groupe '.$monGroupe.'
"; + echo ''; + echo ''; + echo ''; + echo '
'; + echo 'Groupe '.$group->nom; + echo '
'; - echo ''; + echo ""; - // pour chaque utilisateur - foreach($answer->userlist as $user){ - echo ''; - foreach($user as $key=>$value) - if( $key == 'identifiant' ) - echo "'; - elseif( $key == 'prenom' || $key == 'nom' ) - echo ''; - echo ''; - } + // pour chaque utilisateur + foreach($answer->userlist as $user){ + echo ''; + echo "'; + echo ''; + echo ''; + echo ''; + echo ''; + } - // echo ''; + // echo ''; - echo ''; + echo ''; - echo '
'.$value.'
".$user['identifiant'].''.$user['prenom'].''.$user['nom'].'Groupe '.$group->nom.'
'; + echo ''; //////////////////////////////////////////////////////////////////////////////// }else echo "Erreur interne."; @@ -176,6 +174,7 @@ if( $_SESSION['identifiant'] != null && $_SESSION['droits'] == 'admin' ){ // si if( $answer->request == 'success' ){ // si pas d'erreur ////////////////////////////////////////////////////////////// + foreach($answer->grouplist as $group){ // pour chaque groupe @@ -185,7 +184,10 @@ if( $_SESSION['identifiant'] != null && $_SESSION['droits'] == 'admin' ){ // si echo ''; echo ''; - echo 'Groupe '.$group->nom.''; + echo ''; + echo 'Groupe '.$group->nom; + echo "(glisser-déposer étudiant pour le déplacer)"; + echo ''; echo ''; echo ''; @@ -196,18 +198,15 @@ if( $_SESSION['identifiant'] != null && $_SESSION['droits'] == 'admin' ){ // si // pour chaque utilisateur foreach($group->userlist as $user){ - echo ''; - - foreach($user as $key=>$value) - if( $key == 'identifiant' ) - echo "".$value.''; - elseif( $key == 'prenom' || $key == 'nom' ) - echo ''.$value.''; + echo "".$user['identifiant'].''; + echo ''.$user['prenom'].''; + echo ''.$user['nom'].''; + echo ''.$group->nom.''; echo ''; } - echo ''; + // echo ''; echo ''; diff --git a/test.php b/test.php index b96d412..6bfd1dc 100755 --- a/test.php +++ b/test.php @@ -1,6 +1,18 @@ >p4IYKtV!A zK}JGBK}JDEML~nYpip#lC;>JOCXASXgoK!Yh=`1Wfr{)F9XSyZH7hk8!15D_e1jxt` zO=PuTh`1&cnE*-+Fl*_F5kZlI8==rdG(AmdA^_+IWEV3-{Q$uN=R;{Ax4n?xe#iBj zEBouphY1xF>E$4DSnl*%dE|V2lQSn6cY}u6u3xjCVZVGvT*%?L{TxK+ZCU4S^#wuo z1;f~9c0VyX@)?Mgp}%n?sO2z+;v&0yZ&8b*v{kLOVjZ>2U3_Oz&7=7;dTpkJ(l;Lp z050ZBnM?$Uz|_?I(YqVx+?#v`SK()UV1jOI^kqz*D(d%buieQQ&ZE^KVg5rL6?oT_>+?X*?pCZl z)IiUU<;8tBzGlk*TZU$ZaxIhet89p8+)Cz}o7LBd!=iDF!=~{&heczr*7iBPR1r?P z+P`{=$hYA3ZUImx-1pd-j{fq}1mCV6PrALH8MoZpAAV+#fwt$cjrw?cTqNo68mO%z zrZSFhVsCf(;g>CBSJW7tU{n`Z)ba6K`UCP?7(F8-^TEGF)XS<;l_FIBX~>M5+}&Iv znd#*VM@pLq&&pR0`JGlr;b?|b*>0lllQZwJTdM(GeeC+T%Rqj%#+mQ!UHH&;Z}c&i zHQyO_&Fr$v@}5ZCp>Mu|l|!%T_^@j`V(qRcT7URmQxMEj38ei)`~NS{m#y?nr0{|X4#a?f> zXIorTybM!nW=X3-_+s@{ysU#FLN@Yq+RNQO03c&LR7Cnr1`nBxiBq-%Q@Rv^Mse=g z_^EmL-Z?$4cJ;0*%*}p0_A2iR!diFFhLe+b62yhDS+L7(Fp$N?P(qhzKm#^nTWfh5 z?~DupLZkU!OWSyZB~=tjW6zCudyQAubZn=N$0G;Pof4I9Y%O3VHXJCX?*pneNovuh zQlSCa;arax$4|w?A0jM|KqO=(vJW32v;zp(o&E+6X4}Td>8!Ax%rEQleWHbk9oIQp*u=R<> z&e5PlZ}IZWl_Q74u%l?YjcY(_+cVK8=t11L5pM4ldn zNvHvkITzu2XCKjREBomMa&n>k$w5m^HgPwBkd{pbi79fgTW0s!;x*a2Xv*&OS4EF4 ze+VvS#%6V&ok4u5X~T;w?&kgqzr=Kj^+n{1$b3Rn1m1Au&}?0JTm1J{`7yG;#w;is zKy2Lcv^*5yd){k$6*Z_BbHB#&zI(x&Y=8&rIE?S5K`ErGGJP0xxILFJFU_{z9V^cfklruaE^a!MJrPTj%kl)Uy7 zx90V>pWpj*xO=!j=Jqt2-BLeb>uZ$28x;{<{lEw#=QM#Y;lb5B?)Sn9`fHhqvWt0N z38C=iHT2cy=@m0$RMk{wKn2fspaD6|m+X$dmh&mw))Ualj8!_AY9# z-aX2{89;pSSWghiS9L4NQ{!80)+AlnZiyB`@f^`NzEV5EHvfGm37Xq#Lj11PVi`*X6g zlTXk3eWEIw!tEWtL_ImPdZ9)($4~b92|hCuxq*;wVXIf-5K~B{SN_asaw;-_Wydxf zwX^z0pKk~tn-lEcjGGw{S3`y+F~OkKnnh^`twn<>|D+-*_sS>Edmog|;)3rw9K=bf z69=t3U~3D+Nhx8=5cEqKD0GrXatY{efaCA5l0NdO!H~jaHUm^rF6>M0PD^ ztY&V9np&&Pphp&4=0B-KR&`Y*apd$>V~XJE7knK%a75YL_?Mj`odUAEB8+Vw`l}gO z&OE^;cSR-U0mT~CDvL__gb+eCi=KDl8WrLinKpyxF&vr8 z|3q-HyDs<6T+b0Bbc!f0X4ana9uoj0>&3Rp3hB}8TENP(^809+Wp(KInsQ;X#h4n< zOU_@@l3p=r(4`BY6fPEwrkZ|P?GGIg*C6F04^8$rE@ta?U*g!l?C}gV22kCPV$y%m zs)1gK>w>B+iCInshg&WaIHCLp0hwpoGZ8(CX002oNE!;Wh6WVq2acS@C~r8--}-lk zeRd*$6kTYfn)e~0DkF3(!*AvT0ZQSA-MU5kT>p-aW@XG1fLT4KzfqY|IU5R)HB&^~ z8sFSh1DCDI`N`J@p?fQ!g#g%^%0KnceUEqB>%BMR-oG>KcPWW$t8E&qle^I!MV+q7 zxXlIOv^%$yF%w)A31o@h*wxqFORO=rvPf5k4=1sz6Ua27@O|KUy_>4vtxmwxbz>&%;4%81-}N;k9?dcW7Gd#$F|*sF$lo<<=Gi%KgRnKAPDU@{yT2+ysu+SdIC7WRK?4;+uYxT=Mz!CBeY$yPvMajdaq8+7WV@ zHM09Lej2PCNE4ILMIuC2V7-}Bijfon2FFpz#XT#_CDXB_PUW?Hc4tUn#o zfb433wiKGE8xEF{Xa}H)uxcP6RvZJg^P9EwCJ3a@23QH$#HDb5DgsysOcN|k$b_q= zMh(!YYazoRgvQi<5&*cai2s~HP(jC?4F*6E5fKrPk^XY+LB|~z4<8AcfQA!BeV12^ zir_tjBpKfF=$F0r_{F;eBrQ)E0jqkd-OXpi3^b-C3*CBq)n=8 zZju!8ucF97(qwK{3(KML)I4q(i^yTpG;W?>Spi(~&}b=HTDmygzR)!(N7`QmNrtH1 zZ?}JZ{2}C_+JBmGDlzz6ToS5(TvO5hk<~Kjb59!u*_^}sCy35FtUR(EmYez&57PH% zw&+#kpY@t0lz!Oxuwv$57D2IGTx=zJ`;+R*tuOfMGx0&Si;THpeG>8;vmNtR>{(Zj4IeZ+HKLX*i5t^3)^Op#1?q9>WBrXY&dDk|h2 z$pK1Mm{uxe@)Ra%&{U@>Q)t}zw zb8a&&h@=ii$XPExQa|-2@9)YOksdl@{EyRd7^T1AfdZV z;)q@12)C~deKF3R7NpmRnXbEjE- z-t_VPx6PC>8t}VrnM5>*M3XLb29!^9PX;2uB>G6yp)?X%=u5IPF(iYxtgNh_Dk>@v zFsWsaR(_sgEk0AnWss=L`W$xkE?(f^M_X8{hqSax&)`>zvWWlc6-Im|!g#hFk++~3 zeFwL^9C?hmGcTSYqRadQ!7EA6oIOdKSgvIUth{Jcib*X;A{h1j=7Gv6+L&$PAt)@k}?QC*E^ z${ziZm-6A{?1z@V>HP5ZjfRnjw$5eDT^H^?OWjM}!Wj|sl@e?0|A6~meKVCMq0NbP zsia8TT+hzkXEeHR6-!G^(>BE?g+B?OG03l@xBhWozkG^rL_vd8L({BsKTRrJL{W2{ z)1rW~tRf2g(POrJ)xI9VJ>nhQ=!Xwr2^t@k2BLd*($=FNdt4T}>1ujgRyg&BXA-wBI{3C}p#^EW zs|D#Qu63q#9Im!&b{%zu<~OJDLJJIT1VO24pfRfSk^%bywHcpn|R8rhQ{S?A=eV|&z1GYT&_-H@_oOCNSzMxR z$G@d(hT%3_kXvB-R~RvOhrd$mPC5_{J&c}=o5^3QPv$H>k=Qt~oTV>YdL<0`s9AxHDG>T&BIYq?S< zD1R@rsVI^Z6CoGd7g{4HNX(LsKkhXlQE9+pKtXF8`7JJd6@RA&-t*mvu!6H$cfP#) zT$ZfHYogb)`sfK!R6xXL7FZoHLT6 z>`!y6y?FlANh`vALG&X9_anQ-GF}^D_M``TmDhlWRHYL8;VQ~nO&d$)e~t7(IG z=33v3iY_pc^sc62*t{lrcQ$I(AF$C$%bb0udi?2W<}V>i;g0k<*L0sJF>97+6e#?w z$O!B2*4WAGk;K>dniOA%;(Pv7zAw8TU+o^m#XQ5h?frmzx?+lr*0BXX8aM1&;DN!i zwOH{jZeWtTw5}wrY?Zc5FV#9hu!QC1RO*@r%giA6%Ne>w!wXX#4zv5mB8(@$>~{Wm zV^_xZKu~pN$EUY@@rQ6m%Dhkp6r9JvDePZHs#vNYPScl)>TZPR=sBK7AycTV_%h1I z1yg&|yke?GMe31b-om% zenwYQazXW{t9$x)8q`0}xwc|yF(=nI)PrjrZpG77{b^R~@b{(eOyM^xA1^#SNl{<_ zqy9Kq*kaGJsY2Od8*iavWO@BUJPa=ne2ZT&R2q^-!l4$5iJ=}0@Xy)CpEFU6EaG%(PCg0ep{N8nmb6lk#jzgiY}w8LNCz_7C1|e>tG@6Zbxhl9IXymbRCg>Yr9kLL#p0ao?Gq{3+7LHJiAo zN4EbNwZ75({pl;w?nQ9T0u{{T%M*Q`Njvp{tg81ue1E8(hiPB5qskN1_4(-gW+{YE zhUnwRskrbn_gHET*I#%H+@9=_b|fCu@+vrBJ}n(*f1x99elWos-)dF$CPC+iZOD%M z_pGRId@-tz%}=lw+oUOLg(*kL@vhqRPM7fAeo3J3n6pgX@;{~C62WlZ8-Bh&`OQx! zc+BJ{;0g9kYRU?atYef&#$5x3Its;?JFEi{YjMZqL8Uvek)&^0xsJ%`SKI}3$=?r^ zzMItv6W^V~nBLyJ>FdHT6Z2>xvQ^mHbZz^7zSMJ?-Zpt-LVLVzQQzpJYH#BqhC#ah zK8ZO{^T(3QVbi1HAuySRof(?DCvE7Y{vGuvt_?Vv3*3E~s-o1(ct3&bCxKA_pBy9< zfrL9CLCMiVfSWuu8Z2Q3mUyu?^xq(eSW#x3QQY|ZxZsC*WYFVBM27r&;Q+tR;}LLj zspArAAX1AV(W=pinVA5Ev@_F(;Bdbv>o>6t>V0~DuQSVs;9|dMDOlw4&dG}EZ{k0c zJXzs>-!g)z;8S*?u$`Hixwh%teolK8r#fk5tE}I!ZDKR|PIdBQuZ!^R3~$uV*7O&{ zDd!9JtYfIRs*FcvgjQ3g;!}9?qB~pj!2^f2#?^k?-uSr~h9*iyJ9zR(ceeV22Ucs1 zll`_u@pGySjhTwJ|AhRj^t?OUtDj5``)xPl<1Q0p*7AMnN2PPH!_#f|Da1r~T+krF z*_}sbXZLMe1sYE`=2nASQH|#GO{b1vz^ic&YB2$`C*Hr`&lb>Fsm z`N0W>_Ug@TCC)5tyd2@1dk*Pt4urU$T}o=FKB8ojU|r5^~~|EWR4EI8*L_jNo0`fZzD5SkAtNzL#kCyJ6v=8sB_V;^^~?(N`A@BDwCKRI0-iBb&aF zM$ws+9Lxc)4Jvh5&i?>6h8bt$zYMsxhCH|_BYX3>wyHoFqT`J0q@oacUpaer)&Y9B z8rOiqxly-`I2D)km*oI9-OJe%I%36o*Z43a^6mudF9PZVmAZvb)<3JTRqBaWSlmgR zPVZos4iO|Q<8m;WZ8m);44saF`q&Yc)!PuQnJ(q%*L+eKO(h@9(XS;==a*&P(k}1* z=xX~3-y1`DTPSH03}i#3pXazwdMJG|TdQ-MAfi7f&fv@MDH!fNG(m!iBf%tSV4+fA zf)*Do=x6#*!szGdh}^u?Ly*vrkPuN&5O2&JG;&-nL_C_i)U=%3V&V>QFno0rBsKpW z$C`0E2@R+CTuIZ|j+K3a`^LZD@=-*=w|q%ft-mg9^HdAH~RfyXNE$#T8N?srmQMAs83l^0{TE~=;zJY=~e3H?-?lz6<~ z4NL8eAtOvIWhPAg#)E8_VO`RdZ(L1ROVBk%r|__dp1}Tj$8vuy|KgE0-@^+oz0x=> zElptkb7^UT4W37#ect9{%Mqf^Z907Ej34j6Elt(6y&1XM6}l+j`}!wYsBg#~C}Ev; z4Ct@WAt$=($(sNB;MVM;r{-}j$uh@!{}V~|@JLP5JVKJJcnN+OB$fv*wS@ z<1&(~>nKdLdq0<%9c$HGFn{=w^u%ZIlB$-TEBk2WiC`jP@MlcE(-`UsCF_Rl=R^-_ zmO9heZawz6#Iu3<9m<^~j&JnvfAX^}p?@Plb1&m%`TT@Siw6#|(Zb@?HQ>yiASuqD zcOgha_hp)Dw)_^EcB2v2deZ>H)3Esa&0APDnV8t(+1a-&4i0vkq&yU|7_M}ZHdF;W zaR@|~zhPss5lgKO^C7b1)$9j{h>%#-?Uz4wOxV8j?V>EjnK!7rbMQn*l{N;$Wa<=$ zYtPvuBak&!hhXlWxut(yi{+#Ttz>9ylTVuidTP|9n_}3p1Y!`zEB+W4*C7+`RTW~r z+RCtCX=!O#ZK+jt$g7n;nhQGGkd>rBTiLOyZ=Qs>HWbi;D$^SC9MPb>&JW*3NCK-L zOV;K7moI+%MqvfCr8Fn_6xAp4*UVHG*MP!#)v1b;y$I`;*RA!@H~lfv#Ae&lIOJti z{BX9I`?ZfH>xrSDy`)D{nyL}MHqCJP;Ii*mSM2mHt@x!cL;0ig%YYT%+C=7> z0=C;aX%i9=g=)ldaqdD|ox)ys2Gn6n=pDBzIFZVu*TR5E6AB&dR^$;~^fYEN1xN*N zkUc-Ui>631KV9hxWh*;!5pp?N=^Jkb!*$MVMCMZ{8YSC{=eIE`ad&<<^a~eIiYzTw zjc6uTTujKrg~9Y?)o*No5VbTnTN8t6yqg(Wte6nNfs+I&iH-d#picB03U+1d&g3KA zMU~*xYhWz2`5M?(HZ#~}yt|()tkR!>NdOPzl!Qk^$g3sL!%W?^~}0VjVc6;9~YgEj`b zcuRqo9H#CbNiJ zdABdyQoPOQA$|_NTVJ_FiX+xMC5Du4P3d@bxrWw^CTA-AT@^_;UAY?K3{~pfH2^+^ zvL*5kLsio6LG?>JOfguKve=oew(RBV;R>rqMuH$ko^n*o3oN;{@)u7iDj7cyWGb}w z8FC4cG&5LGMsQAqX^r=G-X_$-BO((cOVZNh+Gn#*jzePWJ$d{6LCoH>ohGWqy=gnq zmZj2pU(Ys8x$3JEpOPxuA6l(zHAX9uCbs?jOZ_->4*{#WZl0mi0D z!eJ*gN;3s5h0WdE+wmKvn*A9FlM+RQ!?-&%P8vMv@ER>9?bsrUz*oO?d9!lm$Z0slqwYjfyKI^NZEW>EA`gp^sO;0;hdD6!N5^ng0N>R&OfWDs3a^1& zE2j;fg($UnSRon~1ck=*dxq%`Oy-ale1GSGkvgmDp@%GZEO!xLU)B7x8aw{*WNk3^ zRHbDwtgber*g+kl0Ot@PMrR@ACr16bB>{__6MaG_F&r<1f@^kMm9|_{UMh;)Avxc7 zIWNNJ%hBVz6t}>A!+D~q(gl+iD9>dugCKlEIv96WZDi8IRDDCdo6YW~u7UErDzL>n zg`rCMp23>;ee>QoB&(EV4~)MO{Zyil2KCaz^jS`asNf_7+5q;L5f{&i*4ZD~Se0MY z5PQ;jOpJwwa-lBpes`JGolRTze;wJ`Gc>>#WHqU+K7AiX_d+ZKf?)ng59&9WEr+L$ z9Q>#Q@0K_VBNW37i}7LpY5-x?e&O=tT)sx^-@?u_pnUS>fh-bE_k$(lo@Lyd7KlDf z5Twd{`@6$|1Kz!=7mTQLyq_`+q)lXKKC?N0|QMAom z<}gb}I32}354zeR#G`ml4>8(Y^XiJB&L$mpE=wN zZ?(d!LpE}G!PIy zZ)Q(RTXz2X_gnE1KG6Q*$5*|LbPERjp~2E4aavM5!wx69l|H2?ewl{kQ>!^B;b!eI z280ArG@kLB3x=E1_l>WJ25%;Sv)$7N9F;d?<|W!0*1*ff+caB$N}{6M-m%y5DF7N|+)~PprqcGSMUo5Va^*V#QIJT95pBo(Hc8|cxg1L8KLZV#GvlTDSXieOe!N)xKBYGj@x6@9^#zw-Ov zzAl)0S-$?5ML=%=lx$tnKg}!>zN}bz(AgCH6uL;*%;KiK|DVZ9X3Bw^^4Gwxoj3#t zA_5XB1OVT;Z(hzJxBv~8y0{6aL(V>oTFgJLjf4TW?4NR_zv$K zd~#_sOkTpErhZZtpjQ&Q@-cw3v)H~Gxo3BDgmS-7Z|BkBR>$PhJMv* zMpSQ5SGE-%<7st&zfY&ufU3h{3QVBg6C-&@Eki_^P`EGWBcU}Vi{s!Ir z+r)r1HHTW59a<0#ngq-^;t>D81u#FI71aU!gP_YCQKo;Bkh(m&0i+t?IBB~+$|q(d z?KEO>{}Z!QA{d%SHoV?y#Y$$bo9n*V^8ty_G_QNp1^?k(@e!`RbW@6eGa&VzS)4{ z@%RT2$3(uN;=Cb&=D{*fot+0kMTSVfx#RwN0>Oa1TLVE;b5!n8Na5nMH;a#$5hPgd zRK`LfVZMDK%(%Cawnt)ju!46G?;*aBq`*S4@BRw7Eu3J*D+CP}QM4~-Bdc}0($gk8wL5Z`~u*e`UJKHg5A^SOIH;{2b&-#z4xPRH zhv3DShYqM!OtI`?W7|Y>5GYs6I?a6j*Yl{HO_ZacAmkTnEuvpmaB)>FL_-k#(hwA# z8)v@lx$XDLjSqS4${`q|C6au2rh6w!M<`2B$IUf5!Sv0U^eIB2(}?@1z>2!BVTZsb zeDmdDCfU>NBKx`E#c!R&`;3;#(@I{GcM^1o7qJG^7I(52oanAQJWgnWJT4lB2Fywp{|4 zXdy_F2sHk%_E2LfPFfONkbsI(UCsjSeC=_*C6^RzqN`09?08eU`%EXFeW9#iB}sEa z!Cxj;ycni-1pSVl^RZPt*Yg@!efnfBNQ_|kHJ`=jh4eZ{JLUe@h#boX=2C-X9j_lC zJ*&sM6F2rowAyi6#J5i&8t5o+qkto<%fw>H86}uuZI5-@1K7DoOK#KC1xiJSascu} z7U}Rb6CXn~q$pV%<#6M<3lceo4;6CfoT2Q=n(vqFksyv7Cd`SKtZO`E?SX!AT!z)w z2=7XTCUm};iG#b7In2OLqt1^Ywp^9M=Hd-*wXIrvGbzN>Oa=uXp=?*q6#_{~GFQ`F zrwE(N#Asa}YbyD-22d!l0ffom1R)7hA($v*F?iGi4Gc#FotG`VpVRH%F2d0vcM*&H z3obiX+ZSJyQsbJ;7j}KpoA^jXkKlqB=&66yjDUu)&irOpqfRvx(8Y8s5Z5*Z3S`Cr zUG!=?DO8Q;VZgj^e)itVvu69? zUOxjgZnbM57DnKgh99xhK<=m{(U zdCfaqw(7a@08_}D7n5$;%%*5>&A9Nj#CfT0|#k)#E~aK@|;I0 zgzjQU#b1DlT=29VMIe((L-t_)Q1*$Zie@mxlj*}f%`IN`xfgOs&e~C2m{Nt7gBe94 zzsH(F!z{aMBo;@*Y*vciP7K{WxHs5|B{Tl@_WwpexwjP+>w=7y98OK04d^-s0JfQH z;zk;1NY_AhHEo&#)W478r67RWXSGd{U`OoPi)P?PwrbKFg%X0#;~zrUKQ4h1i~9;2 zf)J+SnCZ;t4?%+2lJrGB9+G(!67!hF&MTW1h1c6F9|FXp2T_ZS#0IRmps~xwV$xG{ zOKDg}Mf1QA5U6{x0aAo}hhz&dg1R^w+IiMsdly(WGYk@DvO)ExgE|~*Ryv;riTw$7QbF&SAFgre%SuNoH z;kPT8xOB1ctg&M&8%Nfr>IB*i1A^Aq+j#jA>|&E?xcPO;4(#w0vSq#iLbjKFtGp-x zmchlBo}>D*joaGwGWYfKmkc_Jsd;()3DHU{PJJ3(m0vyFBd2j#F;G}mSS_y<9Qa=i zI@${V5(A2#2Aj2&vdMtoK**~hrYD%>G5bLXk5I*dTeuLYNe^@Q`Skp6ll3>?%ny<1gI_tr#B*;CFOG3+<1(p!d09-b_B2^iM`%#8!Ri~8Jb8%Mt{#$!<*QCtJBhOjDj&{ z(=Kxj9Dbs$<6A3f(bFA6{)Qokr8A|d==$u+9W#I$uRS1^spoZm@g0d1r*!QHMycT< z4oMBH_+EswbHPZ|Xzn(Ib{6Y7qyA&(h8@4fhuPWDA#;oVnD&uWUsxPIEu)lDXe#dA z|EcUkk?OW5%5UN1Pw2?My#=nApi|ZLa2&6W#iCkgvj=IdUhYBQRPmS& z^|R(zVrs_Eu`twZ7%7>chsj7{W3@EaR4B<+hH+vLv=Bbk3rs&+NkfT~PtiyZqKxnL zQPQE5Kiyl?rR{`FJcholdnj5RBL3<AC0ig6dov9& zR9Kj}2{GrWrR(>UgjwP%*X>~J?=O^L3?MOy_8y6(6rcZUXuE&;!$`R}TB$HR`hOV# z_d%|Kzq#TBkQp{8^=0~b=b(#OAWif^%2wloL*?69pK_FU+S|ZLANYQN$Frz!pa+W4 zjp|~(L)olDVn>9age-k1ufgeaETS(ZMAbq&kbFgEfs(7pUN&f;Wm_*Kr*MDfQx=yq zu+^Jk8A1Cn2dcld?wZVJa}7|N3SVX|yrSSJ`21VY?d_k&_+dT`k*P?CPWjQiK`=!B zl!hvKxdMBgBuZs&HLI26WE4)i;1Dk@r&}#L|K53hhu<@@;>W9v@npjVpN#&<2J7DMdp|SAZ-WyRH zu$Esac%fqB<6v(+U0y2fafTH;-;FR-;-hR}f@ZuILD(dpCmnsjRxM&nB7V1!Z;56wGfYz%tC zWGdK};`%vJ>G|&<#5Q%N>>>`G^=Nq&#f+*44M=|e$l-bo)W`=xVoVK4V8dtaTdhAh z9vuC0Ed4`!UXgGbvxvpw{^x8Lj~;m>>mSO0k%AXS^<)DQljtM#&} zYcS)W*(at@ycq#k36vB+x@>GT7f(!gda~y{QgW6(P5uD8U`Ig>&cHLMJjC4a#9wWD zRw^7b7BlkEvjehni<&&U!LODB4Mys6)HZQ#hka|g+DK3gox-sIt706zkJ=RSpA|H0?~@~qMLuY82QnH zzHV0#H!y@Kt+jvE{=#$-S^~b0&s_Ltz~(iInTW)ceZ9H|G%;qwbh&s{qFxUyix=kN zB$W+&!;6weTA+zXbh(&tU52_a*2n2!E(I zxzE1<35=0GOZ{{BD)kp2{Y-%+|4?S#?3ch-qAYL={^!4Dft$U1*a@Nb+oWV1djUtR z-Q6VevTNWyj*D0Pn8n=QHIVnIc5pBELExdMh4eY~wxc25HMpT?*53NVc;@kYLI#0G zaCdTOc{N(#Gx;E0ji6=VBY8J6pL1tYIL6+`3QzCahw|7Q={H{jBRK~#FFreP=cWyF z9w^WQGUVcZm;gFc*ATo*m8X{EBAS2m8o1bNwK2`36tv!`1`i_KAZkwR*3SeIq1R_- zKaOkQ>H;&6!qsbY$s7D0a0BGEgRH+0{PK1Kuewy=`!|WNA{57u9xZn5mEkK>w=~2P zIE}&&N8tzM!{$`*JcUo2pg`)dku2sRobh7WwE-CAhod*o{VW9*1o33=wC#q}YN5@z z2>#6&{2wns8x7NG-tWTX{Da^ZubiKyPB^Wu`a!YY8pY&(csMu;--RD7UGa~K?jJUv zOuo8$dwC5&ioipoAQvcAbaji`O(m>OgRG9d%dXmrK{naT0T}PC zyoKS}CvXa1{t;jJ0RwXtkrNjD@Il+|`3(~~H0qW>CH}(^{=*^8!y%BH!13U)uo)(2 zd!ym^pG>GhCfGl&0r<+@U~unn z6zkb2JYt9wiD0s#kL5R?C7wN1_^K~_w2gnX1%B89vMr~ki{3JxG|2wl8ufn|gkRP5 zb9TWiTHTC0|1_rPDcGBuXK=eVxadvy+~9`;;iu)o^zcf{KWy?ML6LAC4)Yw2@*j@! z&5go+C!Eo%-XzY`{${hN)G`XM>xI|tu?qFV_h&8-`%ZjBIoU))cK$FKHk>~kx#iTk zbQrL7IEp?w3g4JikBzB)dC~Qo$pl!-zr|jk3#K5RB{zWccZcrI+{lIFaB%OZSU9*x z;UIrW4)`h#^=~edbxXeRRj?~dqHr*E*bG1H#es8nozr2``u%3}qZjjV6hzj)DqPO5 z?Lxde$ezFT`5M@yP*q%>8};brJlZ{_4v;gOK3P)cnLIt2Q-)xoeED7r15hrO+f)wI zGwZ?^s(V>EXUrtpe-pZ#;{ zuL6TUifm`BO>4DF@jsJnO>2!y@pC?kwr61S4+pSp^-|o5oGnL{u;`YroW5`uqxKat zl*UIG`|E{ZG;+#E-vy=bY2chtc<`usa(DBqIR(A6i4}=2J(f3H+(`{oK-A^O(IOG| z(+=CB+BsG8#>_!m;jlKDn<)9CCtLmT1FO%Cle6YI|1tc-lRqC}tG`u**7p= zYN_vg=t|K=mTH4Sfk~G75rIwC73|RJ?x9IUEs@clAG1#Ug&RVFJ4cfrvpRjQRiX-> z%H1%ja&x?}PT4uqoq?p)zGOLXca5;nLT+yEJVEYWZb9lhdSiF*lG4X3Ltkq&OTD{8 zWOxTlY(8F|{%BpH6OA^s2dxJ!hfTu#qYxFy7AKYd=yCSTs13>|ws|$D2nFZ^6wT4! z=;P&uximta?}#I*lXQ@D5Qw2;>sqNVcFNOdzATa0FzfH&8M&)+R~a3x8>>myEwi~q zl7Ujz6Ma`9DcZvMv5ecsV+kwP(S#F0p(%M@*AmSfq#0qUqnFRv#uw=`W9*U?sMRPR zF`I(T$+=BG_%(VPtdd`uB2A0QcCJg%Y3FWY9Zat-@9n-kc!THIO0(*A8L|}UD&rdvv*rtGJtHo-tRmbT zT>R_sA_UZWE*K4`n7a7BvAus>&M$?(IkyPA>QcpuOHXY{*K7D2XIs+$4K}3D{&n~F zt!OM!Dp*E)7rOc91C>wS*MR6aOBVfSZlRU4%d;t+qtZ6G}2~0SOI8FE?e)i>A-+^^|x!ZtiwRzg#P>mq45N#k(!XI|}OGTWgO59!2IFC(+Su zladO`s6VufjB*ax9CPQWpvU8d@6ootJ7*Wli2mT()nwTFgsh3m%<}d2{N6a4gxgZB zwL{%AIr_Mh!{(`i&hG`gih*VoWcvo^IJZxQZ-=;%89WTQ24({`^KU1uMF(eE6?-L=D zxvD3+b~tOgj)r_A9CY$84|oKWU;WI`-p{u;up_Qu$6ENvW77Ya)9cd#EkhUX9Oa@E zmH7wrlZVx7&0aM=hkijc-0KnhckEvo*1yuSq5k6L06Kgw­+?%oH_1?k-(rNqB! z0*MSy1UBmi`8RjGkjrEKX8Ta^3P7VA3z8fxW$Cb10S z06O^X_8@Dpl*(Ymgr!Yr&Ttmm_%$)nMu(Oq9Q zdmr~ce)o9zasT6flN0Xcx*OQ2+pOE<-sE28Ugf;7^iDieI#Uwa@hSuX_2UhOfY9S5 zLuDmG_Y=&%fDsr-ei6BU17Ae&{{g|Q({IFSJ4KMRmy+Fep~3 zWq~(7Y0S20AAe1}Zk>@s{!q|Gb@K;?If9rTce%PLT!n(@jRn>~-p2i*y8<8S9v94* zKkRjaA*mIt1iIJ-5f*>!2G3}ey+4a3e5d1~&J4#WdjsyGo{*y(Ic5RjL~jpxHdzh4 z19CQQvpoqZsOHlhk#5G0pry?wYU5p#YB{>8|UETl!}tlcJ#hs=+m0YA0sC^0PRQU+=(ej4Ykx0Z*W9LYR+70h1c zxzNCw>};HfkXQ0X9W8qd3ontjVvn_yT|Ps9($krKijl?D`YEgr)?t%v70+(MbpJK3 z3zWm?Ow^$x#khE5eAJ8d-Mm7nka~DecDR(9a{ilVkz-K(i176ZH6}i1MRnrodPWzC z4DQ_k(^=^3BKTcD{0Sb@z3=LJ9%96dQdkIQsvoX_D)s`mQe=B}-03R?SI_?lrIe+T z?G*VK(&LBwE!OHB^Sx8ZNtisYQ-tj4m=XJ7bpKIR@5bY z^m=jw9igOrPQO7BTD<|GFrfPyG+Z@Igbc3=rr zlJC87E>pr{X;QD$4nDng$1BVzu55H~V&}GI$bG1Zc(kgeTg0=Rvy^PTiLweMSKWd) zbGlKB(Xr5l!}V)`_)PS}^q`};w*r?=bJ+%l+PlVSyf`|Rts_2*r^-7o`k4nY-dzLn z@B97CBo<6Ogu*p!x9`Fb7Wj_8S)JcaZSpN1G@f!|HKKld&&I#R&eX=1puoxM3yilH zrNg7vcrrsaa*3f{dD>}WBg!91{B3LfLmQ1wzD@HeldO^-2RML3C2wbr0|rvHm`ryK z4K=Rpw=#1f;escg3LlP>>T0!n>ut4}ncjBXnf*d&&k|{KTde6D^Ahq%^i!>do&6?v zZ}U@Mw-tAWC&Y$AdR-nhc#P={@X`eBU{f*{pV=A(V~P69uBzRKE>H|*#qkLS4U7s) zLY;I(F>kYLAeiu&F@kVG6BB`a_li27s5kxt)^}!>F6%&>q}$RD`Vp(2x*;K9<#=Lv zt{IFvM?hJivXiQXS;``5-aLefghR;zZ+P4}IhWx|x2#Ja@Z`QM7%>(+7I-yMF2{m9 zSf^6uc0^?>5~(0gfbcCb{YlF*LdFxKvj)-o7wbl3`!iG-bAIZ)tZKD-Z5Syt9s6%D zt3EKCoc#Zc;0v+hHL#X)4fKQGG2)G`0s6KpdEd*pMd`HJwiE-KU^ky zGW6suEVl) zuHp9C>VEnu+@HBDBu>GeFn4*kmbGI=&^eOC~<>GQ%uOeS%D4S+;JU0gX^hebZ96 z+w9|~tfHl9HD1>IqmRczqS(x1X7chqcB=W4ac>ua`vvoAQSz3|`!=J7amc2F$n}-B zhs=s(4}`Hq_n-)c2aX|F#wUbK4+ ztf;}Mgqjjhz2_;zv0j)n)s?@gSEoBQK%_4yEiKi+QGx*tjnU6uJnTxDF#Q;6|6PrXAJ<+Yz zJ4;mzxTV}GxN+db>BI2&Ybzp znc2a)Z>$O&>iAF!*+FYrUk)rLL(%lB4HY-I42i2NYs>ufA1(>jD$(bpeSWzqipDut z^Dkuwx)Ph-g>|^TX(+T#Rd6HAu`8QJsNGV)`QaZ|5Pcqq(EX+rNIR3jCX{#0dw~dw z(M%-z=z$V1RUpYm86=fbwerX?2nL`9&8{kwNeE{I&}w42T%4gwmb0~$Dej)4=(A)z8>T*;M~ot{%u zx!Ns1_N{Q6fU|r<=|8jHeDQ*THrWg1pSVhfB`QWxcK%)>d2v|&@ydn1i-ScbRO#=M ztWcS9d%hL4g4KVcu2|$>24*2Oc!OmkNHTgdD%kZFNVQ(Z+Re8K| zU){6tB4mDvUq`BFWkWyboHQY@WeEhCSg8@RsG>IBdE^0gayI-FlD)9sOFy@MT7@-M9R3r1`t%e-b4bT;m+m*B(@@^$FB*OfJ;+TTpkdOJ-W-BcV(h=)GnZm=0;{0Zt<;r90?w3&4?{a79to`Vh{&a{U-wdk zQBI-1Mo%Jao&?_dU8`jDyJVpoV~=FJK@TcT=&H%Bcn|{>V^y7{?{Jq;aat_0V9n$U z_b8>5>?muxt|XCBH6cA#FyQIhSzUowFzMS&LsiBI>JFPKr0v-Kk%^HRNIK#ETk7Zm z7^L>@uy;|1LXhwjx}f`JTtx*mr<}Ac*fLi?{$?o$-9fV}#=w{g+fJ&y4H` zP1n}aJQfc>V0!f!2Kjcg#j<8Og;j>~l}ZvOEo`{hUs;28QpuRIGu2s>rM#N&ee4q% zZ&=@CQFlR(04E2Iafom#T@&C!F3y?bY$TOX?6@Vu76v0-@-i}WcBx{-It%HQ6mN4z z(1Nn4ElDOU3Lf(d`tAY`CW1HB43WNv^_vkyTlLYzFmDW^CVP0IJqG~Z#!y5#56M9B`Z)9hs#vOS zc-^oMFAu2)WB%%;n})#}#bzdcz9Htq)VXXb_)^wFnS8%ZkQR?ol;c$ivCtHaWvn7q zDQ~0L{^ebd9(s6PG6<4X-Bm~>al576^SxW7#k71dr0cv<2TOIe>>H^t<9(tZcQO`V zvKKF2Fl}P7QQNt=NTMlZG}RvE9~~u#A`F(&D_44l)E2jLI!H4R#d@cu_a{G9c>b*3 z_J?K53l{->u=?HuP;Z1nC=rS8APou@VvTcixt7uIc4X23ras%oqlFWG;e$7^0>~;l z&XH~1Rm3_oe^^&yxIz!2E>#osQ8+csY8CZcTX2RZ-8x4y<8!Ab7+93Yre3nXZpBNz zHe-?az6R zZ)whoB>82C#okk~NAozlWVIqhiXTpy*HgOrUQs7sfHf@R_-OQvXzwdi$$@uO6>r(Z|?xKMa6_k@*zuzEx-{FpfNO)*FkKpBq}Xm;5s_rE#5Go!mzqe|uug;^(zrBj z`0&cZ(ZA>qzMRs#atw8V$r>4HTz4SGlThnpV~?O~-{bZFtoiAE(z`~%25%GhrSh46 zi{^ypTmND9+lxg8->e9K*w}!n_aVsL{4ai4PQ#wfzp{JO*@lpsd5%&px|MFk46w*8t@BMPL}lM zXk&XP9(o?yk80>veHR=Ve=S)?LGz96Xi_39YOp$t+=Z(PcXyba8J}%{PGIYY}^z6twpsyVKZw= zb|w{XvZlx$QsYRL_K@dW=FxbbD6`Jp_iapn2>=E)ZV~V?b4i4VRAY7StIwx`cQ@)Y zZ^}*It=)Io8U2@%kgPq4?F$6P6T>Oo3P1_~V>gdiKtQ8*?<;k7ZK0ZH&uRJ zwmX-ExsUbg_xl8aYEFdBKkbjVTsvnL4bFzgSi0+{P!uNSr*5#kQE_55zU>O@6&RUS zLsPj1;sw&8L8@8vWiA8@hi(u=3OSo*)G(j7(fS@6UuR&a^QFwizS%k%ol%s%m#w?fv9# z*wynaD^UC_9W4bYOa8|%P%-fDvFd~76p_x$ub&(4^b+n+2E4HE5Kf^F_>*3nC2LP9(NEz$3yHY@VM|NXE=+V8bwto=&OVf zr*I`>muJ6!l5II)cZ(>H3{^ml7dqAA>gpu9oX3~E)>Pp}O1_CE?9sFqaYkqS7ON-+ zjEGuUR#1W3`fCNYrDfU>@;c8%7898bOcw3IGZ0+_Mno>dH?EDL0i5?NZ`p!d0j78_ zwjqpJlnf#C^8l*UQTrKplSQs>I0vN;!!VYUni$-rGPNXM%+zc=Yy*JvcF8ok) zkFk9TQJd`N%=q5TWk9qY6-Pd}J{q9iN$O*nO)(mL&x2>%iU1t;Y?!w(Ewqz$eZtF~ zyO*@zOF2W9H-8SBq?yHUUnPR;76rYnGYWKA(^E%c=`G7l;9qXFkYDzz&>I%CtuJpU zOV^;ng)>)dT@emrc;fwJ)92-cAgdd#i?j3P4ori3_Aqb}0n0%~7d>F1lFMBx!`NSh z6g9HjAn}rY9%V@sIfi*aMKOR{0whC>mOA@dn%fgWj`91`_4SaZ-S^08t@@?l=^2{K z0B#3k%qW|OQg)4-_W<+okt7{yA-Gl8fr;G3Q}Kgr3@6@re$n7<#tmD)t5IV+{~uA3 zak-jrbA(P{B>{#wMWiDb3Rt>;o$ybSFYFQm#SgTMAdJP|@$_%Emgb1v{j2SjL%g)^ zgD7k!LS2LS;&JO&SO7DfN;9iex#fyCXv|ZZWwPdjh8S`RUiiw?FRvrao0;{DLlYCE zv6T9zc}b3NYLmUnwS-LK-?A zgy5<|-h{^Hwx1xnSgOTHfB2Zw&AK~PpO%f1(DGd-dvya&Gofd6fF0cd&8rstH}>ew zhjtB7zdacb+e`njr0ZB&Y`$Fh2{MWxMzzo=*Fs8^1Djndr$+k@odAN5b}8;wVff89 zdFUxS#peroAP5Hb8|$(|5S4FI=GZT)b#=i{V*aEvd~GSp(H3 zHE{kaaemE{`Xq_BvwS2jiXt97-{uzoSg_68WR81jzI*o+IOB^o_%S`vM3(jGsn2Yd zlgdGt_|0Ca)twVXM>FTR#8B7MI|#hC^q(J^975C?$2M8Z({=Xy6QwRSjvdf5uYeq* zki|5EAK*e#<-${_$rKn@7S3lJCu5^?QIr=#rA3@h+BBHnD=kfmuCVyNLC1!_nB}&&O*6z7e+8892&3svNURF!yB}TwH?n$CXX{Uz z^>q223JwEh$isP|s1!*>qttmBZsV=mSw75XHRNq^cn<3dFjmVq*lk59U|5K#VkoAw zWXT60AP9miey?Kli1rg`8O#Pq(yh(SKU6NUnV-J28YRDnA|I9>J)AR@p;m)<=;+5W zw01Rh?2bg?j+5TU|1?`v^4{a^_CNXdN59+TFP;iLiK05!$h0nLa-kz@0q1YEP^^Re z-i7R6Ai5I@Pj`JlN{;4KHItDL_-y@@3FlF7i)xrn1xH=GL*wI9cpU#b8Ca=Exd;o4XjqIKMoJe|O!7hAKgzGAaE{ z8G=BRGKwl!hWRa%84vtZxZjQsBHEIDpb)896dtEwpRC|G>2`?euNLh@_vQi)u$ z_%xa9K-=>5g803;O<*P1{8I$B?i|@|j!HpYK?AW_)0UdsP8vtfaqFbm7brY(e-xf(|1-I;C%<{3u}|d? z;8Lc@DND%;hHvSzmQ=AjIP2DT?YV4^5(@r2K>L@H;4F@a!wb7Hseh9XU|QUD7|awt z?FVciCHcN{@#F$%+yYEyU|qx9MO496!pbyoQOSC30qrg6Gb{ImS;0hRS**p2$c&M| z=4v6m*R>+bdKN4e^kq}KHGwOJbeyp7-OjK~K4ugkm}XdVp379wSjw}{ieJT4vCkZX z4i1t+#Hv2U?>qDr`D;4AXlwdfs>#dE6ZTe`ePf2bcnvN<)XQUX3#&UlmX&x;l+GHs zx-nRS7lL66Ntr6tXst7z6gf66SL9BH`e#+r2d?xKH14hH{rm-r$FcF9gOruK2k3|e zp3M@%vdAXKY5SA^1}1mre`cFQSPE`GP(4~qjupW%H-LLLe`o_D1euFY+^hhHL6&QvrX56bQ}32a4qzU>Le9&Z5QCDS zRZ(QQh9g$~DKZLJGu8o~|0Q=R1HC6O`#SQX4Nx8kw5+-G@yV_T&iP zIgb4^!VVAt!Xv*bkW^Kv>F1w$<=6@BWD1?SM46v*qlCl9fA_1$$&(PsUpw}HuW+0R zJZkxJ=SI%4&)&IFvZMA3ba6^9=YRQ{DY?J-3kR?5_ip^tTb(9>$UjTbanpqyykO4}_z0O~mk7fze)nqOe({`ySh zXcSN8mQ||v?)%0d5zGcl@agA(Mo<6_?gE*|l{yb(M0z#@#J-+3I&K>d)Y`E6>z9s9 zO<;*ePk3LmhWH$DC6siNKe61(gEcS<(qQjUnTiUVpa*v(rqiTo7YqGl3#3FHD7 pt8U?~*f! 18 * + base (20) => /20 * - * [ETUDIANT] membre d'un [GROUPE] associé à un [SEMESTRE] = appartenance_groupe [id_etudiant, id_groupe, id_semestre] + * [ETUDIANT] membre d'un [GROUPE] associé à un [SEMESTRE] = appartenance [id_etudiant, id_groupe, id_semestre] * * [UE] contient des [MODULES] en fonction du [SEMESTRE] = programme [id_semestre, id_ue, id_module] *