ibkM`{7a-B6*3UTdKKTnvAkvoDrF*Tv9iE$atiK`V z!2da%u|g?%ksKw@l3$WvK@@<0{oZ~snmKplw;vBL{c-)$we`=g4BvQnW94f9=+`@K z9EC{$F>Zl(gff-KdH|J7`jJl3&X@VeMI?o+g3s~|5pf}v#ANU9dny9ZID|_TR#!Kd zPgiGFJ-G)a$P$XZC@LUKeir8UB)CtD1ugHu7wDc$+=Ww0U?|))v=0W94}v%zy@wWQ zfBz2H$EJ=jm3APHnT^QfQ@svC1Ln}!K5_xrXW97;nYH+z_qEI2MfxP<_zDH|Ni!!0 zAiZXu=LVE}JP(=ZV^(E;08c^AFS+0=HegMkm%&$Zz?KWV0(x;5UlH)t#EjW_L_9On z;)Bo>`f)&B+WQ(Da+$tCR_F_al9w6BrE~_e$dgfrr)@}!Mw-L|Mp%8y&}5aGV%&&i z6l?U11=M0$I6fyjVxcQf+=n~hRxV+r|G*9uV<{pnGR*78As3>SI#Iv5bYwmK$ZZ7D zxWOL!efYbpH$J&gJ$mTjjW^H1v5VHfA<{~)+1E*1NQ6Kh0C8&7FnJ+@syTHXU p95*o2F9#7^Ht$;q#1n2_*ofBh` z3Uw=sRCy44-vLo`BvL?7$-oC@K)doA_}(J@ee7Ad%i|yZT^LqqkFYX32$b 8=6%1X>C}AW_H{kTjAkOp!ty2v8_c_->O#AY5;Tro(**&8HzWu_&-zX`~48 zRqEkKW;8PT^QE=RpRJ$!bolm?tif==qNsm60k8=bvdiR{Q{|7q*e%47O|If(AP#vq z%-O_T{ut+PBfTBirLi5*sKOXUlJM!hx6;Je ;++r!f$-? z=8fyi!)t$A|HEHze7>^w>ko{Jb*W!bn)jeqsro`oE%d*(ob8xum^{;eEb4Y!3FHv4 z`Q$4dUQfHCv(RqMrm`Jrbts*k1w!Fa2HUVlU3GyHxM~QY+pW5N+Cb=GVb1Ey;r^qy z!3e!>D~ FT_bAGSB_{Y84DLg6=P)Lzb@PX?#I|VxFdzXvTUYSFn(y6EeuUD4BIL1 zwFLCbVfb<{Y9Z%^q5Kw}14B>VgW?E^hfqwTuz|iUkX)n(0^zq85})}K9xdjf6`}ba zweMqizvG9TauS+CI@`M43TKW6uE=4CFS5Yn4iJEAN-v5tD$xQzPh#aA;ms65eiWYa zIEtU3z>~nu3$E2l;uKRj8znll48DD6+p{M>0dsx|&DI~E!dY>oR*>I=hdczrc-ak1 kVnLL6=nNaQZnv{5c7w(E$1{Xa;8J^6@Tt%Cv%Sau2L+-}UjP6A literal 0 HcmV?d00001 diff --git a/backend/pick_student/__pycache__/run.cpython-310.pyc b/backend/pick_student/__pycache__/run.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4428e2bf49d34236ccd054467b43c17398033276 GIT binary patch literal 745 zcmYjPJ8u**5MJ+kANNdhKqLx8y(u=iG)NIbK_DcG03uYYNGogY+&S?+ K4eC-?;b2wyduvSQH ?4aI>VkUIA31Trf`b~vH0U8( zn_1)4M=s D1 z9iI)|ZnP0?gpPI 0K7XpQBE4!DT%^r7e>*vy ze0(uI9Zx==oO9Mel4OMENiy{1Am4%^hqdnJ4Kqm8<=fX`GmggnqEZ@{g;d&;OcaEM zE$#2azDUU>yZ}r4gCm|6GS^oDl!7V6qHMmv2!2)4F^SDZ!V&`{U4uJtw{8 =uHoY7I=& e3Q!X*+aSoO_Y1o=!r)<0?`OyFpa88R{O2#Qi{wQB literal 0 HcmV?d00001 diff --git a/backend/pick_student/__pycache__/run.cpython-38.pyc b/backend/pick_student/__pycache__/run.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..cae1a787b97a5faa1a96a61970365128ed772cb5 GIT binary patch literal 749 zcmYjOJ8u&~5Wc a&`}_;*>ZZ#}yA0R8&yhmUve3joOvnBq;_P?lxwx!oK#Fk$-P-R#xL?D^;E%kk{v zWHvb&x$V|QYoqBHR|_q 3wZ?07Q$a {jFWK;?WegmG)t8>p5iiP z(5xAM7w5$?q44!B;}7>ml&ZvBL{LetHE+es0k-g0uAG8cJu6sIgp^z04%Rkx1`z&F zGj)+f5?c#ZI@DYhauXKwFf v1>|Grn*aa+ literal 0 HcmV?d00001 diff --git a/backend/pick_student/__pycache__/test.cpython-38-pytest-8.3.3.pyc b/backend/pick_student/__pycache__/test.cpython-38-pytest-8.3.3.pyc new file mode 100644 index 0000000000000000000000000000000000000000..04fcc6e4d4910e976a97f63c5b543d06876aaa0e GIT binary patch literal 2879 zcmcImOK%%D5GHq5(rUGmZP`xZG!G}~OF%0(1#$_3AdZth0M}^qXc8j8V!dSSmG_~L zR9y>p4|T3C(0dQb(f_2sf!CgL>7j=naws}OMNXU-&_gBc?2sICIp2Jo;q7KKAn^Np z+g #ua$fUm!T)G$V}Kx0AaLp(OWMg^ot5tO_GeR?B_n+dem|=K%|> z?q!WUWTDk7Su=03mes4-L_WzTtzOHf@-}N*-Or};88&0}dN!LMVMjm@*ijLPqrAbx zl=9}D!;XoN!(SZZtv#2`iB|7;?>%Tu>`}0v C8R_zsX96n&6gDdMQgqp`q1Gq=>bM zM6s3@0y;t^luFAYk2i#bws$pF*gv% 8}omK4QtDw1YzYnk0^X0UN zlXW47$JE0t)#Bp9!a{dJ!-pdjUB1euU_9A~RGf=Qufrzz7ahvNq$~=N=qQ$Js^hXC z9_TVD^E}n8j{1Xapw^AInihPYN{o4ej*Wi~DC16b3mTg2k{vR fk#~eAuP?A zBV10o^N0XtJnnK2$W-AKUWIp+*SHVw8ral%U~PQf06#<1LMImodi_Q@fXyWomK^`^ zJ9w;?;87oguvk+~Io+i@j&`=;i`x!&_guvGv1`eQ_<1YFA5+PM=rqv65~ky@`alU8 z6~GJD92<@J=E)GgBC9CsD4HN35^j IGeHh(aELugO^u`;PGuCPZn}0SA@GI)3^) zjG8b`5@2OyXPLmhBE8iY`!!Qd?9n$~zf{^(`Z6uF@p`H(OaovMQeS^K046t-j`cuA zNK)gEM!qigUE?W{Juto$s$Ujhe-bx^)P4!)wvB04LQaX)z;31s77Bwv9FIEG|EKDO zfVxjZIz00V@~_W+dju}Sif@Vl;0rP6xd*6wPl!bwDOsB%+(+b}qb=uP71rF8WwAD< zB5RGBV-CvWU?Wd}NPmT60LMn?IL(HqzAlndN=RDs L@bi(oc7{Rhw?aPNZc`OLS&_P-H#ID3e=Qmmy)3&|RV*gSwX#Kst* z7r@F>2*_y^^C-@scsoerwIjs+8rc3PejS>92q;W)nA~h)L&_q*dX9z^YHKm3FlR-= zH3L$a#1v@!9LRtNkojDe{V2{dQyte-c@#`ujdK%@x4c$v7B(Aw3l<8C7jcItUONph z8Lo8d#*b`zj3N_6QC{*vCO{9P2oEl%1ZXu9OmeWR^^(hD`29~%e2M~(qCAh{1^29m zzDle$@55sm=Q|D!YJTVke&|p;hM&)4IM`9=obgu&X$DnLnea+~D>`V+MNs3g(vK1c z6vD0)n-Z=9rhd?6YU92DCfh?FOGs=*s 7Qkppgv z5j%SGyXD2@rLV4kb1%BKcx& $Z#16Y%8))+5|J~p}*_F^`YgqT)z>x KzSBPM(|-XzeBoLE literal 0 HcmV?d00001 diff --git a/backend/pick_student/__pycache__/test_login.cpython-38-pytest-8.3.3.pyc b/backend/pick_student/__pycache__/test_login.cpython-38-pytest-8.3.3.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6c67ab4a4f163720244b534dfe51a9354ad0e173 GIT binary patch literal 2885 zcmcImOK%%D5GHq5(rUGmZP`xZG!G}~OF%0(1#$_3AdZthfYfO7Xc8j8V!dSSmG_~L zR9y>p4|T3C(0dQb(f_2sf!CgL>7j=naws}OSx%f6&_gBc?2sICIp2Jo;hknPAn^Np z%U%7YLC7E2c==a>#ua$fUm!T)G$V}Kx0AaLp(OWMg^ot5tO_GeR?B_n+dem|=K%|> z?q!WUWTDk7Su=03mes4-L_WzTtzOHf@-}N*-Or};88&0}dN!LMVMjm@*ijLPqrAbx zl=9}T!;XoN!(SZZtzDPRiB|7;?>%Tu>{76w RX;JN+-f`KyIKyYw9r>rIJ~{goJmd5h>C8R@zsYikn&7rjdMQgqp`q1Gq=>bM zM6sF{0y;t^luFAYkJp8Sws$pF*gv%@bkvWP+9)ND)?&2=omK4QE1(VyvEasf!NO@E^I$bC{c_h7~aGPbw}V*n;y?zm dEU8p@j-u6ua(7vq~zj3KSdPu zfI~bUScI|?LecGSnu+oUA!W)%G=g~s=BpM6LaWrH0iC2iJ?_Y9=sAP}nz-;>fk#~e zAuQRMBV10o^Oyi}JnnK2C{^JVUWIp+*SHVw8ral%U~PQf0B=LnLRS|DdhKR8fGs8z zmK^`^J9xO3;87ogu!vJlIo+Y#j&`=-i(3wNcU?sIiEAl|D0<7r9}~)i*7bebbR1S6 zC?TT)*uk1(qY>*o8Nyd&6-6CI69mM=O)@1XKxY%kPQee@YJne#HjJA<34N!(lmVGP zgtqcQ5Vs0ow&-x~u&>=0wr_X)Cd}8Q2QG7PlzYE9yt3 dVjDaA@pFTIg-)1zoO-LLPyy$ypG4j`0yDL}}Ck$CbxA ze)c PX4j9N|79zmK+@gH>2_LzcxV z {y>V0U^Y7a2hbsK?}BZA=G$TW--tV$Jw#k7R#T;gWQ{^>96%dl zV~o%XVC5+U Y!`#G0v8$^FV;RZW)qdID{Sh}0QxCwu$Xb>ppaNDUa?5z zfZJlkj^6t2#^Q~oudaV{Kf1Pfd-3Yxt?SX9n>XZVFl$t~7I1#Be^CO8*!s<8xaf-l zZUM<=G_L!~CJp1?2G5sp*BBM~ISAv~O}!y<#=kTo!(}9}t;jxU6U?xO{;mhthnCxN N{YK#WPW!x1{{^th XtmSkITV#Q9 6Tbt zV!4(ov0Ym|9d`^*Jt&72x1#D8K{c$oHI+7ldN}Tmt8^)t2q)diaLS!h?^bXmoOY*G z+74#IS$9^Yo#1GA%*9a9?^tj=oO9A>oyJ|vpR+4kWA*`Iw%A} nF+0SaNU8Pu7rW zQ6^tT%J92gG_Mc(Plb;jWL6!#w*$27A4@(6I;nW6)oL|cDaPfIY4T-v61Cgcy~GcN zm#$%q{8EFt)pi_3qMdraTumB=TlRZt+>XPrle%M+UI}{1T4pYHB7Tp_8m8Q)dGG$| zND!MSGg*R3wcFa3)_ 8|hjcU2Df&T U07j?< o5c(=A&NiC}{OyKbR=Rf=17sTiLKmYAtfB%#DGta*G_m4jW&&p~g zsdjP><+~YaC&Vgst+pyxeY}7^veH7(X^RH}RU4*!lv Gb$}vEZUhSSI;dln`39T2+u)y* 8!TUg9gY>-zSy$(mp4ADdhY; zJ+r#L^ur{x*Pw|)CJ+8d_3aQc !*93I%1h(xBFZX&Rmk+>2R-OiB}x6Xmv|&WnYo_C5x#6DB3Q{BDUxm+ zp)TQHaL GSuQm#t6$#nA7Kdn-o^`AK4qmhk=+(jfJaw&KH5(&<>l(SZK zEaeic#VuI-Qv*T)&EC}SvMnRkcZ|E*mbpn{0mtz%TI!qTP6-Z!zNgl@O=8AtD6Ov; zaP{~mgPq`$aIiCQ|J1g*Rl@t&W@)|5j||+8x19>yKMnWK?74q-Q4&GrJeeoRJWl3G zGNjTCL!P4aX)?5Cv9)C-Y+2%#Br)tiHJUuVZV>x?cQ;5{nYq#lM87szQAzVwklgAo zVB^ISSHx-Eh Y4NK>omG= zz+jP<=tGHYQdW!1H_1E)(?5MB-<;-yPLj^&Llk^I=_zup^nzfc*{EiEm%C#Z{M5e$ z_KHmJ#F>3=173gqP1i|dPhdw3h+^Wpe4aXgfy}qaoFVffnQy~1EcsnZ=gP&=qpR~3 zx2ihumU}BJ*cD%*8VC3}ttfT?!*i&ZkTW#h)GchB7U)@4l2TTLts<}f56c2&PmiMP zf&PXVJ0vhPseOR~zrb1WX;)sbbrs~r-s6( 0Z9)xOAK~?;~yQr0rmTL$tbixEU_2)++Qfzhzj=cr^4!YWhgTTP@wLdM< z0xiH&CRkEv?v8mEaf#C05)|0tmBA9Uc{MNHgRJ&Y$a-DyMR-X&mZBvUTC_5kF41O& zKl3b*B4Vkf>DoTxs~djcPJYm%U@ne4DY_Icb9Z7d3!O=Xq@!?mE%m7cdn36&GrGMT z|E$!NohVg=-sgAb
dT;v9a6P7~TkbFb8uSE|?!M|-B&^pI!vcEY#O-M(i= z6Lq9V6lvi*_=mhjp6swauap=2PmY$gP6AjF%O=9({syU9;IA%?!ZTN#*-I#&N3bxz zEJQSq-F<#Z_C&+Zh2vF>KPNfu=?5Sl3G5L?_u*j>BMQ*wgjdj>8b$iy#zWv5=xGmJ z^4R|Xt^#&T2gnG=vA^X(2!irFt%45#eQGq&(vNr?dK8fS2f^6ip9a*G7YR!x$D>ev z9i{h-T$q*i(k6XSRVEb7g+X*tDIt}H__AG5A&ebXW&M+*a4xhy1TqB(Dmb8F?t@%V z6LVWHh-^v0$0&Z=(iL>pV*l~c&_UEx94(U8J~10?e>23kq_(YnoQAh8`343x8W9rA zLFZejRFK*Fzbq4rc_b2rRzpbqe>WX20s#e8!yRzwBu(rqHXSQ(^WX0~#c$jh2IQ;u zono^?h|pO?abq5deQxA&zG4NVt(aTK>6~US_NVrEuzoXbsSsJkZt@s9z-i5)(;A(d z@(d=aceh#$sS)NWN~lPNLYGnEqhR?d3KMn9l?Tai`yr>3zl*&OO_8ET13xvzDI{o$ z>w1a _QgQ5c#|LXozk>#SUJ%Fc{qJ7f5-;b}XL z&Qv`bDBZ7kUgMd}S?+ZLT;U{H^=x+oq2=K1xQ7cGx~9r^YlH<&DQ-&KV`XD|S(&|? zS4Lx{e26B_VhEs4)JZAF#aS-mej>k*Y exL~%x{vzmvMimIN(kVl?5@b0M+^3og6A4MC2HK#E`v6 z5>XG-pgY3+&`&X KM?|T;(mKM$}T)F67efzRpLTP?YaE0oX2d71F zPhC^F(;V>?&OuRo!`r>yO7hsrSpqEQY3SroN%3Q5s*#Owdgi>Gv+NaG83~ 3 literal 0 HcmV?d00001 diff --git a/backend/pick_student/__pycache__/test_main.cpython-38.pyc b/backend/pick_student/__pycache__/test_main.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1f54c12bab8d548d96962327f2e570c15e17b420 GIT binary patch literal 3546 zcmai0TXP&o6`r2k&W?6hT3u|*abgjNkcDCw3Q~Z}80%s~svH54O`I;n)M&a_n$=u3 z-LtW@waWwYLy9UDypsyj6Xgf~K==dvhJFPT^aFTF0mV7JT1l&@irtzseVsn%J70g@ zkE>PRfZyi6wRK!GjK5*!{Lg{PJ$U3l!7zi7#Gs=$p+whBYQft~?9`zS!9FW-(-JM| zvYmKonU;0gN&Iw*PU*6nRMIM~>T)TmrPFj;m%U^rt<$ T9bVrj^pzhQ zY?jSEH`p8}og4cWeU-n)=66i-cTNs(9vLu~Y#5D&V~EyRZxH1_;<8vxVxARHt44x{ z1rK<(6=xh8Dw0bX=UE!=Z~=9DC6w4+-{M8k4W)dR3l?mLavK_5Y-F2Ivchf`UbU0Y z6+Dc#x#(Y$A0~0ZZ?{^lW~+dO12j#xN$b!b?F2GRc~ESF6YN2Q&`OkN8IOt}6kD=k zQ9tYzd6cJVT+lL>+euGuD|<7}*b5>s(-8(X{+Uo1H_As)DU5w%X!P&){ekfd0ONfl zYuZL(?)c&!F@^wbe`a7D5(H{MenZ|j-iCw^$*;*1;{zizpTLZ_jq!*l&<9|W^@gS9 z5XU&%+8E*WFpt7SIZ={JuFCg!Bi=0l#)hd(wy6kzVTd~T^Tk_hx1V bI>vY0uHg@ zxd)G21H%nuHZ{4$2s57>z#E%c%mzj|%waCPT~=Zqyi2Uie0X~>7PzU$mRS{ouBjSE z{4RL+Ufu&wBLbfu|8PCrS*!5Kx4>xNNkJIdCquI^2e9(MWY&R&Kp$F~nFyx6uDmg? zR7E3j!k&gn%RR|OkO4_(bv$T9K3h~^72%>Oqp5;{v{+Fh#Wa-ZG?J9FQ_^buM`jlK zl`nbmxVxGFr_o{QfiWx>K&_Gf;$*DNv#}FlBi~B!=&&C^p)fiSGJ`;2TieV5=9ovu zRRe17fi)yhw+5tRv(k|XK p*hexR9JnCr{)FX@dFHdHNIzj0|;_woJ?tSoaeXXbMU&FptR4Domv4&>mPF zdjQ#D-T~&zK6D^Upc;kSDKQ_n2=rFlnC;qtfSqQjC*DcU>j(DGDar%q&_9B0r!zh^ za5@z>dy;>sVIP}={Li1}e_>r*2QR6!oWv2Q)=Iv4%%S194F)vD#w`I19_dC9qj)L@ zM3L_b+?M?}FK17$o8%!I>kSadZpR7lS5H19o4bkJ?Jt9v!@8P2t&cL+%)30>O_O#m z(y)-<%-e17isex+1=VWGF3LCTHD07iQ@_O`I3Zp^a|1oLl!FUN@ftSWM6-nED`5J! zHb!AAC9y1)MlN!;Bzu}-?Ou}XH5*lBb{Q?Ng+=%PILwt9=c=@_2f2Uer_?L*fP>~H zNHo49UdNB$Lh}X~<#a`y72<2y@KrQ#f@!#-fn{`6*$h5RP1dFr{heU5*KULSejP_# zAnUy5+XX0Z!$6748m4W!#Qm>p`&vqT&D{#J_usBtL2 H`u=YavQLhS)I+xE$!KCI)4$iz(=7*aE>&UdoG5?+}lPyc>i`qTKP7QQ*bo zf~TqqhnHB(pJl6fP@!~5gx0Y7H@=jPa|72KzVZTno&|yOgCNaWFX2$G1Oc8dh$7Uc z^tlIKZRbo}!}Y&`<_Bo*puue~euU 9c?cA_uI;fAj7JG4I0fo=*^2W5#~Ch(ZMFd`B?rY}kK z>c-C>E g`kg6Gmq>H0wWF^GcTZlX-=vg$hKk@Ai={Rzz6_QyezQ* literal 0 HcmV?d00001 diff --git a/backend/pick_student/pick_student/__pycache__/__init__.cpython-38.pyc b/backend/pick_student/pick_student/__pycache__/__init__.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..49d22d1c69c8e19f811922b971357ce82f5d8d2a GIT binary patch literal 210 zcmWIL<>g`kg6Gmq>H0wWF^Gc TZlX-=vg$mU{@ H1w4!ZRN^s) literal 0 HcmV?d00001 diff --git a/backend/pick_student/pick_student/__pycache__/crud.cpython-310.pyc b/backend/pick_student/pick_student/__pycache__/crud.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..732bbfcded0b52918251eae9044266f43e4e39ad GIT binary patch literal 3365 zcmbVP%Wm676y@+GN|t3?R-CuvJX^Jn+oG@3O U3inOgaU-jp<+3b<;+kG94M<~ z+x|dNAO^b0AM{&h+f~-yb=7k(Nr|Fsv?vYTnK?5Y-shR|XmPP-;kkFe`uLB!W&KHm z; O{PVe~rdd_@(qsg7 z$y-2ud0XBAx|*Zd?;ZIrkXC8GwtNrhIr;u0t9|z^dATi2 mqM4r5at>sWC&a%to2p+5Z{;HS4C zCe~{!5&QPBc +r~| zJdTrmMYwx}&(N0IhS(OWiN?6(jfjx^p?>aylXVQvbb&`^Dk_JzuPE=?Ooghj)FO#h z5=#(mJ2i#@GJvg6E9jZkl9Hql`Qd~VSr_UYnzxcxy821~(0GIXu%AR8ko=*3uCl&| z!I>(jG0dZecp Whb*L=JoyA7vG#=&eQP3K+sD@L;urD4hQ-bVc`3+t z_t@eVb~0ik8|@ud1(BltI7r5o{V0J2QW`%R4dGT(QE^Yjdav!ICSAp1Q xHolv#;J2Re?%N&lxfj1V|&s(l@T zIk+0fhZ3g9u$!2L6br!;THU}N>Lx@UXL8D{Ce =QYy&EVhC85|nJ0c7TzEbOyPF4?u3E)L Sp>dHfXWP9v{*hC4H8tp3;vo!Er3sXyM1Chad6W zoEGHXJpB|AoVo^)7sf{fY>>E4Vix<%GgN?`00qGtm({6f<-n77Xag3XqIY(PDFOZ~ zW6fBqQV1(6&6GO}9C=P{ktn&0Plc(=h;Hv<74y)hP@kc10y-T}oeagiJR!%NsWeUo zP!ee8bbu>A#9f@$Dm@{H=+hWy?){uT@6zYXY6lc)nxHf|p>$g(cKMQCSUg11JR2z) z?sfIvoTq6a{T|?_$sNR=6Htv5Kie-Hm;lnrc+<%W$juN3_YQjphZn2)6axuHhS^!7%(Rw$I&-DFlMl>KR)llzQ! zsQL%f>(_J{F45_>A#GdsUN)JM0!5CaxoHPtQ#6PbzXL{@gntSwbsnO (SOo4HeO&sTZ$xX|hq!JFOzVm0frh@tAR-uW@vu(j$*9OnjZ-lUEVDFex)5DoQmj za;_Xjx^hHW!-83y9xIqN!F^n_$AkE5(w)h^j$^DYE;&tS!)`fO{Iz=1ZP{y;rnBZX H{Y%c@X3?S) literal 0 HcmV?d00001 diff --git a/backend/pick_student/pick_student/__pycache__/crud.cpython-38.pyc b/backend/pick_student/pick_student/__pycache__/crud.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..51defc58b937826cf27e2b09a9c2ec379e4eb565 GIT binary patch literal 3449 zcmbtXNpIUm6y|W3EXlI$ID70YO{*+!x}<2+G$`Pnb4hy<3=lGhj;TnNGefm7pq!d( z`wM)qkN!*3V^8@DJ@tFTp%&Icn}z~s<~=?R-}=qdPxX4$!u9x%@a0a;vi>Au_6k6J zk6T`0mc=d3`qqGT7^Ah_w+Bwg8Mqx+(@x(T_#K~F2}^<`OhWD+yWHdcTenjIFXX|o z%|l)RUF8pmgI|yYeCgQZHC}(~b(X+&do|vG -pP!?bzWL z_&PWZZ~}f2?_J`TK`-m~n*0hlSNSz?nltZQ=QqGvAr9Yw#3sK9x@9D8Vb|OI4mhh? z;v-1h kxYbM#x8AbE?U#Qjaxp!Ft$#t zjP>kOcH+?7bI0t}l=8;*4CRj fzJxaupaIh70&qf@&D1R^QXNgcy zPBWmK2q7UVB +nde zyiBq}BHBH|7id3eW3ZTLVLY=1WuJ1%AF+Nw4{_0Y;)EL@7CONrLj|RH+ZRiiw4nl- zZizY#Ycwp=uu20NlMgFcsnwE_qzSp8Q1b%T?>L4tPwP74Bv-yl50%$X2Wb|25GgKN zPn7=}#6soscoq>v>=5H%>|zY3W>wBLYZ@$nxVI;hOkBp7l+*3^#YL>jhSp{bmE@ Gshc?oI zQ7%v847zfz{CGHk163fBJ(0-$wv+q$I)qh~?-m(Uwx+<>^$K*yS_%0k@Y zHh67!y4^H(a|K7?qI;XRc#a{19b?vGV|(oU>b^m__3W`5*_a*74rUiK@jc8QW*@T; z>rr;v`jCQ%m0MU}(Frd|P36mY2vgNcJUoy|Jj&9alPE^uq^hJc0*>g)9365P$fIti zmU3PM#E@bWdx)DD+9oB*Ra4u &e2Zdld=u}Ex!S=2|Tii&x(6Al#E-=1tNH`Fi?`PBqc5OfQbi~3$O`u z2u}H2l7A@RC~un}Uqg W%{mkT?T-lS4@bKPFu? z3L-z4=$O$87m)WD4CT`2%f1dNXXpXN+@$plCaCs`m-V?_KSU1xG88=8@5=o-=Tj|A zigpVGq4*dW$JuZ88wch9?F@!HrchnOanSzQ&*31g@;CHVFF$6#!n&M225~2{=mdA8 z%vfG3-2%nUWAcDWqeg+^)B>5<= =Dxj4@klV8mS~)}(rdg?VFcG6hF))o{& %J*F_{K$#i(MhBGE<<8-GOK1H)X>L<@gcS*2W!{J$T)|{q&$!YoP RwU*noTS3cddM&@{{0*R8sg?i$ literal 0 HcmV?d00001 diff --git a/backend/pick_student/pick_student/__pycache__/database.cpython-310.pyc b/backend/pick_student/pick_student/__pycache__/database.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..31c22ca79f8082dea995fe092982b7ad5d18e796 GIT binary patch literal 717 zcmY+B&u-H|5XN`ywVSwZmG)3BNN~iL $s3{EsDO92fAS@(n;~f&K{u6dLq=^z# zC>;9^aO9Qt%86ItK$&e+2qSqs^UZqn?a$TLRzNVmEZyN#hmaq(Sq~qZ1AJ5;lOTfT zq@XdSwsvx-aAUV%F~i=CJ)qzTCOqM1RBT+ju@A2Bg%3WewM!On0J|V@P1Hs3nZ$Lm z*&|W-6E~BHnypj<*N{Lt%u0wH6Dm+DtIC3(f;0^QY0f3r*?UL^T*3UVdY5M!_FJu1 zvo+4r(?scsfKoSCgZuq>Cmn&+c>#$Y;ePQL7c)pll?l_TEFskimqQgX6Yz IBnAqR9nWlKGvvw;(SGC9g=i z%ZR44+mtMk-`ro2ug*7|Ea)dHQ2Riqbc*M0bU}K5>nQ>{j$9M=R!F*4%5ziioTV_< zh{$+pUMUOB5d%ZvJCO~v@$25v{+o3&|2KkbZb>%BGvg0ICt_f4q4qF2=RRdLpxd;D z@7lTZ+qv5F mno#H0Gd1|Ej@!8qz;H CtGjXl literal 0 HcmV?d00001 diff --git a/backend/pick_student/pick_student/__pycache__/database.cpython-38.pyc b/backend/pick_student/pick_student/__pycache__/database.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4bca33ba3baf4fb6b7d7b252e8c35dcc5143d35e GIT binary patch literal 725 zcmY+B&u$Yj5XNVAoo%vBsuUq1apIawa)4ecR5hhRAcabhmbR-%tBpM*tL&fD>!2oT zI8ZqD9pK0-`O1k`-~zLaD#}P6dA_knpMO4SG<@Lrx^l;_9e|%@aX&mR_IVY@oD?Wb zAjJT&+&hVrx`CUDKyd8_6+)^gp(@IYQEl9~fk&?Llt&(`)f*9Pkhq4Rs%pyr0zpk} z4xm;4#gn0hwjnh|hC<55aYil2)(a|%IM32(O4>FR$t2Q|i9b>}iV9jjDK3)O&~B&G zX?JF^oQ8#&E6PlJ-FSK&Y|9CidX!RVCOlug rficgXR)R*&%*T)S-QRpCI= l>JKP=47G{!XLzycY-skjxp&}ENT-&pS^~PjE zH7eg!Y;gkgP@s=Ztm0!wKVapk ;Kl9<$ZC$25!gSy1$pU%Xam7nyYz2d&pJskW-y433Si_ L2fRO?XtL42{93&O literal 0 HcmV?d00001 diff --git a/backend/pick_student/pick_student/__pycache__/login.cpython-310.pyc b/backend/pick_student/pick_student/__pycache__/login.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..efe9f841cc4496e155b99e4e1aa7a1431e36db15 GIT binary patch literal 3503 zcmaJ@TW{OQ73K`@v?R;-IL f>XlGoT2uWcD@ zn$3JP{3~o0EXwBC1+cENc|OT5LLY3k*aEu*t=HH+_6@%dy%yQ!kEVZv&+p!3HNMEM z3@A4bHE!~mLjvEgatCLC*{`wdAI(GJ-%@>V{NKJe*)7%gHh0-=Rv!?*Ud#w(UCoPL z-BDiOW#57acNkgI>Pw#yt7e_%4htohQNnW KQ+bqk= z&)3)AG(NO=M@DHI#?HTf+?6}aZ^A6wO9gw&-* _6kF{ (sY12t~rP++(~Wcnjjg@=7NTqju04!j_NkgxL;fCk-tM zvyL9D8}P2co0XuD+7an%eR53Kv`++6Xsolxf>wcGZvDhXwAHIqaTz*`8Wtz}6PLiu z$BQl}>&-!9hU>sCu44yh U2g7jUz)diuhJiSw2YO%6TqKqxecIP| z=^@P~(C%Xb(dN^-E~+q~*k1XJ19d~(#!q!D(C6I1)z5oA1H=gc)g8!+2ys+NkMUHf zc*KBTNtNPTH46|sJOd^AZ^Ekr_ybh>+L3mw9nd}zWl4_cG3;heJJ8#1VM(14MhB{` zPmc@+`;5pjA(}LItv;2ubeJ)~J(|tWa0);| 0Lv7{hxK;+J4RiU3=7@ui14gqmhkMOc~6jEFFEp#PmnLz>JQ zkON&>% 1M!Jh_J=D45K)=cX-IS$i#hcIoGr9<|nG6EPjU#*5**Y z#Wa{=28z0)vg~Wt3Y4M(%!S7*D~+|aVEy%rMl)#q8BUT$@M^XBZoRRlVw=0@w$jVG zDgKB96$S1>EuTJ(PcQ_zSooZd%ql$$0EyuA7@Q?TwpFP?CW%KVyw(>_7cZc3zpQW- zd^^e@;m#1mhVLin{SAx}dO&eNPE;gCLNI+m0W%#iH4YIobBHk@I?xXcX-OM!B?l(Z z!|EHmE}&^L8_=}+7IUzLxj!Rqyk>;=qy2? f2rhYNT{tAo_T!Uyu z?QJDGg{Whg1**vZ#HKv*Uyb+;bj#4El8z$f(W>t01uPX)AW!xu?+?%IGqiIQ|K5o> zH&yKnT(}blUJOjuhC;$M6X6*V>wxahO0o<3CUt4RRn7u S{oiz{h2W;Hm|Yd?i?ghEyW zt- GEH?-XDguOToS;0~T*f|PK;d$8Vf|j)9=;HJWX3X#$robFZEMone zn#d#6NaIThSVg~-bY&5-h7PIY_ik=y92}9E68J(3?5z+42ZS0AAA#gjd-SWr_9Yn7 zh0~!YkbDB+^o`vV*nm+`+x5p$*y3n&X?VvFWAF(s2|X6#St#&Ul2@|#aTw!mr?&*s zEXvq8bNVi|glfGBw@XpMsqwh-C(d+ei7qRcf~
xEGU literal 0 HcmV?d00001 diff --git a/backend/pick_student/pick_student/__pycache__/login.cpython-38.pyc b/backend/pick_student/pick_student/__pycache__/login.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..271bca05d616a9400a61de1038a0536bc2aea05e GIT binary patch literal 3521 zcmaJ@TXWM$8dbM0mL1zMCgDE8Tn7Uac2l*tDT)O`xC{^|5|$YiRa(W}Bo2~gTJ3?P zoR 2;s@3sbeVd%l((5*}76ed@38{hdCi`(>?GvGCk_=B<_{E$iRp z9DH0jxAA2knPmw}u-FRd&tsObfF(TOjC?z`6DM#IH*ga#@JyZ)ml8kllX6ftz8hDP ziC`kB236yGaV@C_b(1c|lSw0Jn6w`sNt!{^q|5QqWGa|Srh{qYSK?#I@!)uJA~?Y; z>1 ;EKw8nkCv#*# V;!~aynN^RqZjEwOO==I$-eA~EU!IW zUVgstp(FdcoA%K5 o8{Gcwb9q}X-~@!8h-h1l*y+l<^iX)B(tm-t2# N$ z);mgKEuofCXHBZWeYiCDhd+Lq!9qK<+Jlb`=Qh5KN~IMrVFmo9C2i>lcC+~No7j 08;$t5K(e`Gned74r-AMqe(r-P{kuUX;i%%qwA-q+$?Lx*CS>22ngJu`{jm z$uNw1y;MgO#4HRyTk13>Va#v8zxU(o{)S#ld#^i)!Rvmv^ES-%K**jx?8ND6w>R70 zP)E_2zRZECFrS&6z>Cys+MCOrXrR+J4@wz=lE^Ht2-#P%gGh tNkFRQ|6YnKhJA=~3i)@MfBX`=sLgq;G--1}9k?wbvD7FEA4 zQk{XDPZnkS10AP6&0tJjMEWz!{qd|ikd6I^(gdHG1nEvOi9Kv Zl_{0jA9=UlAhKJ6>QPF+T3hejPg6o&m-P^q>k5Zipq9@<%x zNT%745AAin&9n354{0;;#rthrHPFDUGOrz)N83?tD!NLBdd(f0!nX^U28lx8x`tiR zB_s_2D69q*i&dC|w~9~wfLt)i0nMXBVA2Xmm`xmiLSks`T6@+OA2M}Hvt7Q2^&Gdh z>|V3*v@Mw6J0@?)cO8M1cG(_dmUh>@A=f4C3ulK`=`Mc3IY1bel5P(wlI6Di(8oN= zQM{U}u3k&p<=p9{*uVsO?hSOOm%djNQ#gH6B~><#>=706%F@F8i-qOz@xm`qrza1d zy?C_z@F^lTOSNj~zN=&w8UYK+It@qdyrSgW7# n7LK{f~;iZn%eKhjU&V6T8S>-6z$8xiN( hgkCfr9j5J+M!Bx{RZQpFSuiIC7RAewceP@1tVQDE`e)f1_F 4#t?9X2isgjFIf}D z;tfFC1VuRWE&gB6Rs_jr%>b f*p$trS>@7!ox&&m|mJ6PELub7VJY7)&p5D+CKIMq=C*n_KvHMTL^z_S-0JWkR zhnv`FjVCAtbdIR2?!iD(Ost5;ik50HQ}-$LfXqV}RN6;MQO$Ox5F(>C1}V}$qdV#d zr3g6nhzxO{XjA$MO#sp%THW5N(I3^KN(7gBOvViM4LY^){7s8Lp;~qf# %nZ;WXyh7T>(C**X+Y z+uFhP&I3+RwOydH#|+D?x4ybL1g@{F-U-Lj-rI`$8?)%8++VC7|Jl+dXuo5a=>kz| z)2Gs*3oOfv>aQ4kb7npr#G-|hzx8VrcS+z{&>%Y5yHT8}+o+`Okhu#3k*VxUWoD3U zGeazp%wScBqmaZ|^=E4L7nt0};if9&(jn9KijDCM>0tW6aNyAB9+#K;(MFs`qM)t8 z?;F&P(t+6-KwNrye7z!UvKEX5BGK#p$8)(MmXAwFomF@hf1E(esME&f;96eFB&MJ< zBl(3al-@+p9!NJGM~YZxRu?oz`Lk#;z = z(g8mg7S}ct!~;i|0m$5={F}vP^A_~N%I08v*5FgDfwxL8^sd1@PEa_kVb|&7%~Hd! LvY82dQx*0 2nlEmanT1wOXx~5Qo4(V~}y%AOXHG#x@v?VFt^1z%%0-Z}c>sB~haKa8@-2 zZ7V_s9|9vF))=rkEV0<&u{n0a%YA&<|Drxkj8!e^(?;y44R&U|zn9f5wS*^PTT!X3 z%=cbpzT=ngWxk;yBH_3B<+|=aFOj65=%w}-$ICiA_IXv3n8ajD%F4Q&RdhwBcg0e( zny!hyY6Y@EJ(vyYp=?+WXY2I3Y($S_>-G9 v8-KSWVex zy;;x%tr^)Cy(K$SpDEr$)~xJoeRg(^J}29%w`S++bH#WVbo2CiqF-k{mYuK97yXE} zAiGdsm`&&jSu&yrBz=*gv3eF|4TFmQIExvNv&OZOF{fv7&l01R#Rp~3EgEWLO~W#4 zW-~sL4#@fw#-g63tcA^Fvj!C-V$3}tqn&?1?o!xn<4HCLPpi?)<{I;Ql3igok3IHL z0DMmgzWHo{;0v*Zf^U*r6`TnpJcWA^dt7io4emC!7&4c!C9G{wHR{ L|RbtDh%Yx3^r^pKkSsjqM0?*{mB5WmFC1iF$<_h)< zdzN;_boQK~7%N*P=;L|TC@5BmufD)mi@pEjl~2`OkiE#(2>xfp7hYm(AK@oiFSA#K z7O4L!TQ|{P&ten(*VqQOk-g3~4F;y{E+lsM26ndDSjo2F`IYf(%`Ri?*KDg;!*gN} zZwk#l56yK7&DCmN5qxh6yK8J4dt30m0KV1iH*C9DyH7t=1LQlZ;HCZheiLLn*gJy% zMZy1D_Pa;+Ui)p|dnT zwr)sgb{WZ#8`_k%o%P$cxY{PuGTg{J1uLIsqTjH2$Bu2U@68y3(+zDj3Pz6EZs6^r z!S}g!;QCFz=oq{cGDF)9+r|gzgBf0AZZMl?hGi!;H(Ht6n$M&yS9>jO8*b3Zb(=Z- z?>3wi+erd!EGV0{(VanqnIh*#&Ph22t&~G<6zo>Yc8Uz+ZtDkz*}cm#Sc<1}ET2u; zhGk@EkK-~nZuY+|)9ypr^j_QSHFVW+tW9prv{T&JV{qF@vGhKCOxtPZ*h9G^L+Yyi zDR|j{#}1=mGE+<$YE?TS5?f7o8@ +xOXy zkzMqi#OFiGWb<&z#x?I1%*^iUex|-;(`K%{03CB9jSc4WPAjd1mK0X_Lj3D(=*VEw zF;W>TZQI3}81n{Bdv|V+-0UB@`KR)UYokXmkKVqBE!H!`&T!K=V?@xW95V}R`~6%R zeTD6G8>cBfqd{u*7ept3N9be|I*v3Xmz0uRQhStPwNEQ)JnpEZDW(o8`(;P#3HY-m z!2F=v7XU{99D!jvG6F0pG#ct0KL(459r#Q3jt!1pyyo5bvv>KFcjnS}id%0xX{TtX zGVm!k$P6cKT1k~Zj#apIMcd#h+5=yNcm5cfVl$eGFrk$4z%lR8*U2Dnz=Yl;9E|jq z+PTkXO%f|vn$IALXsvR=CM476_+n~sKuUVd*o(+AbKSlP^k7D)bJECs0m$5Vttgl> zOQUuaO }3!a#3RM^VII)hq0d;zo>*+&naLcgVZ^?db8ZM;;89KfL;% zcMp4qKQ4dvgLm ?7LMSb%Y^dIGC~|4=Kaa7M$~&r9RD3hcqWJ6f9}O^03?& zC`qLN3#^sk2qE->Yb6$9;a$p5xD@EA8 U*Lr zYD%ThP{XivK|Uh)g`L6pj)mM|uBw7Gd?mRT?^b*QW~w%gm%H&^z|zSbH9zv^Q&Y z<#{&k*vs=>U1r8$`Am`GuiY+C1lhX`!^v9h;y-W0MteK9 zC6-RoFU7o7%;xNN;jz7otLS0DsVZwQSi&x5GJu<|qGj!C7p|3T1QJ5D07tA_c&)3^ zK3%22^oYO=gUs$KX5J0Gw$Cx_EpPej4x0drownh)q00C5un7$3`44R0^ U_|6N`f<5Mj>%z_zliDHSVu*y-SN*R>njpZdFWPo@QTUCj@ma!E^p0tZU4^E+9XX8br%@L^Nc4RU!W z(UmXenDD%ZO>OTkZ_6%kV~MuSYuesi)3&_=X08CUs+s|3CKKX(w}=!A&^!*wG*STD z;a!CL$pBxAMf;YVG-8D9tm4jeOVtx#R=)8nSZ%5mT9h#0D<*3)e;u!|N(~i|YXt^t zt>F!v92>p_gc`qdYV68|u?NS!)91W{gDY38AP5uaHqOB0YW8lk;07!+YdRTHcJ&uR zhaRE$*U%A)SB2u0lGdX@^#K4 y!wqY`k0ysbQTBXy{SwDx;igW~e0~g9CE|1(f z *eELUZtG+9e6)s+do+r|rk^5(X>u}Do`}fDL-uH&~|J46s#V3V-f~9= 09t5At1U{L?}2!l3WKV-HS`4Idu6cA)&lk4S`&QBHgd)+FJ#KL;?4+`L@AamPC} z JK|HcIBFP?~6+0JUBOc=W-=}khNkdKMX@CedgZh z<*$z+6R)Klxp@!-6ZGD#>mxUhj~}>)FoPG4-2UWA-^IKO7e{U%S(PN8yY_D*cfZ0O zypO;6YyX+iufG|)`U&Q}n*)FCKRbHpdb$5Y!qhJZ;fUoke=48-X4+S1RU)vLdEf3Y zpF1-V?%w%x*zQVv5+r_r)4~POWL#DuW5WOO9ikU_?HxS~K&ZsR`R~hz?!i(-dF#3m zc+E!)q8G;Uw^wY0D@+&x9b~TN8+&I5i*qI>d^^_KeTSI!P5-Esi_e1fANj@D)sOIH ztZU@XXHe`4z}UdGXGU&)Hh%KQQSjmSmsiIrio3;&q^(1sCD3=3Zk+#?!C%6QA5ft* z=O&Uzx9R<&fdU|(LrGbnT8z2zi6I0XM?IP$D5(CZzL pcwxm^NAssW(-P!>KIlDx;Jx0X3hw0X@p%m%?Pfr~l z%=AQjc`SA&2ncKJ R0|4BbDJIsWVa4SB`zG0{JQo2{}f6|TL@0p z`)IkI1c;PC)P@9)oUo0*NevaDlfnC@aG=M ztn`JHSylL`Zm--7k eC}Duh^V zj+Mdyiga9T8Mt|=CTktVc^LNwhQ`0VP(IjSK67va+x){~N`62nLpg%bXaXH^k3yvb z@`GU&p@bZvB%hX;dR7%>uh!`&Lh<#MHJOp3vh1CKv}ljv=SBXaSUV1Xy5w+YR90DY zX=V#o27z!t;hf}H)AYdqh_PdMMB)@z MXc8Q$u zkzEEikd+d>&66qL^sPl}7gF7m*pArPFYPIf{hX-Tlgw!(DQ`-? y%7!Q^B)PPHE=Aop*K>ZnH*5wAz12MZ|m(>AC2hp$BAhKhSk zgmO-g+3#Cvi!M6%wd2BqlY_a@+Iv7Bc48!FX6<-870^2oB%IDp9;c>>8oKH73-{(J z^j01hth@!Y`hqDF1)lFlK4_=9iaBv#DqxILBIs(kU0Erx%?)R9%SIoCGW?51IFhR( z2F3lOs}=INR#s6{>eU;AN ;`J=!S?kMb6 e;}ny;%5wOWl3HyCIR8QKF9V0(-ib__PgFk{Pjz%x4)p6zILmPCoF?sir+ z25l=sMm_{aK#Vb9Be3Mf2FB*t2@m)2u>VCpZH!edX &x?T8++qk7bC&>QTS99H< zTwiV{^`tBr@c~I+VQ8$8#aYvkqOW8LV 4zwt}r3QjJFT3|qxkvsTpWXI72%wV9s< zhc#@i;Ls*GqzsvOERxuBGr2&+KbyuW1U~EW3#3>#9AfKPo8Z+BUK?0D+dxvVcMZkZ z2#y l|rb!eL5^Xd#8ZT6&+A$nqud|(E-WSE1-w+!5Ipo %LQS NokKYw!;6 zjO;ZW2NTeQSzcsb*v>PqY<8*Z9)5(5VdvNH~< zbEq*} 7|Q81Y)rVO>J z9bgGjGu=jS>UV~f&D%!O%_rUcMsjbkwB%cv9J+0+GP(D#;~Msgs}f%ZE>p#m4Li2H zS2*nM&*$FDLQ(G(% #I&!W>c(pf9x zIK_Er^9RrS_wS9}=^wlEr}CMb<0r3;-@6QP8=2u`xhYHv+r$J#+BI$1KB(t1s4J|~ zn>E7(Sq*%vPZ*UDUZJ6#sJPOITvAGMN$pWa)jqAH@uaJg-k3V19FbkEClvISkidu3 zz7Qxvpa_l9W)Nawq2EZy fI7kMG{u?L`rdRljiBi#yOhcIVjGgAxDQcjKqO9(z1m{_w_sKRE6m z|G50w5B}xPp)UWA$I =-ztwh@E@EUyK|4i+4`yfNLxw^^rdwn?5D(- zX5$7-MmGKryv{ikCAkNYa6skrU13+)5tc2 8yosAsZVp&5zP&agiG3}JSz8v zN>VArLR%&HMFh3*R*6MebiXnZErog-MrEf{@M@^=3XQ}@r5(~AR==n8h5I6IV^6$G zDn&+`Mx_&SU(`*E#Njhh@|pL0Sd29auZef`ZqF17mYK~^253K+V{Lh4t3$TcmFITG zb=K#*y3DM>^4TH aB}t=hHG1G;-5bY5qsNr=MH8plO;(pN%wHUXiM&~3?!{& zV2xxZmlSFgBii^HPzhaf@)}PQ@e`}0skF&@H&2aD+C|4rX7f3?Y%aNmhOPlWmRvJ6 zehvDqqMdWvg!A^Us-_hS{#99n!IDlfn?)Y#Dq7azw$v>6D7cD*i6sl)^)wREQwq$B zQ7vtd@jb=Ndy!WUyN0v-?O@4K6G@}fF q+Vb+z-86S9Z+Ec+&k5^@788 qHgV#%fAUOyykK8QaKkC& zbJzyNKE+pnph#g@pLB|p@iw9*rHBDu#5k0(3zmV*shBJfyC(6p*rB+g94YeS7F1lR zhw>w0h%zLThcwEOOga$dYmq0BB`Xo2^=KoAm{GZ;r7;3~PPpT$EG#v78maNg?5acL z@@}##U(7M#gHL9+{(gO{y&hn&b=Q{Gx3;wItz jxRT88st#R3e0eKZ4< z;JCbtHiJ}%zlufAkkE^<&T2B6X}CtpqLn$wBu)&4q|Al6;&MXfzs48LR5uFgYy%qW z&EpTAofy4>v^9DE+{E=u6OT{(=P&w4hc<55KzU81yh#QktWTtS%{gEeypUzuraR?( zS<-&>iJ(HSumlMuETIZZC?!qUB7{5@a-N-LhY+$*OJBGYuGu4;*4}@v6cQG}e)AT1 z@eV44GIyZ%WK~B#S@p!gHpx6sik%=y=E5f71{s6)%&L9j^;(%S4c|q~chkT~V2PBu&J-&eiHI&J?R6plzEs_ |!ZD zjDjgm^YHWX*QWsC>qm~=If?Wpx?hU_}Bgm 6Lq3P&X@Smi%xkVSA@(@Vwo}2BrQA?`=$ul^75{|~ zkt^u1C1LXlphlz=`8!ZU;af@(P3l4Zcu7(uzzvmmR9eD8OD<6zu{ju_vB&|f7d z2PEE$Ei=k0;61mg6zK`^6IF_UgBxbCMH0UVipH05KnQwETBR2&Lr?sGHlP6ROLQzi zi&*(6-3&H?Cun*ah&SF?z>g({!^mp0IymheT%<0_&B5lnfNGRJDwc?DGl!8Rij?Cg zZrq-D^f>}yx&h(eB96rtP$B!@S0)uu^fv9K><8>EfD(3XI#r4^=god9w!H>yr?|)f zfc6@L|1=Jzj$oW>3=-%Y#6Z9Xamu8O$vdfdmkK(->xpWPt8D5S>dB%&5?)1hav=T( zD*lCvG!?6 $my|@JJ{@}>umzT;%`^&>eYgsSY zMgS#9y@6Md@v|z5>O=JqUZLV7D&nSw&LMyjqbfoSaH1rimza7%6{l&fBY;rN+bwGf z&Emk?I|qR3pb;RdV3n*5vp0dOH>a}fx=T7IaB&meGnBy(pzRc1hpaED&5CHj0inW0 z=&4 O(MkZKatKCiyLjSk+O zhzL$wC~u}>HWhSF7999nrj57qxUA)K(W@_;)=}X3Zoon(-BrwqyH}CAIN?E0!-dR7 zk -VMh0c6lKEgg#GHwEeub4g%{n5 z>w%(W{F3bH Z-^5`@N1@#Pc&Jn{j?{E6?5g45sVAP<^KcUH>mpn literal 0 HcmV?d00001 diff --git a/backend/pick_student/pick_student/__pycache__/models.cpython-310.pyc b/backend/pick_student/pick_student/__pycache__/models.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0615bd8beafa1c14557658a66ddf4a69129379f7 GIT binary patch literal 2272 zcmbtVOK;p%6t?GO&x}2fOrC9d3JS9s-Vap>m9`2(ps+|*7Lw)6y-lq8F}b!|h83u& z$|h g^{c+#)A86(T9B4ElcBrDCKKh z$jWjm{Af*<7eD&=y%lMm^HRRzhg=$G;yB=5ge^*EyoAdNkJkK%_vw3+R|UdpJjw4M zTyu1$IR&OWMPA}%R#10wtK?LaTw-Nb*(y2)B$Jhxp` AoGkkVu?t6_*u@3y_k2GWbG@C)3 z3v8BGeBC+5=8)fcX)LE1<54P&BxhFkin2Zse&~szdw~yS*^e0iRN7va#(vZnJcRpV zMu{2S_+fPQ_Fh4nQ5FQ=YJkM{5Fl?1a zYsP|M>FRK)dt92X3d40}&2__=WdR3ox$Z{h1r$0Y+jUb)NiGU%FhNO^1)s^ 6WQ*g%y~ac{fpe~dqI#0>S0;+6F2k{1SaeG+eKm$Q6^*UD1EYe zm@iRO8|OArg&+!~DMs-nED;>XWUiOWT7G2WohFXv4F+ToYl-XbY2po9N#y>?bEiHT z_(=HpApaDQ5*{SI!BE(6rUNEVf|y!KZ|MznTRPoSxQWh#D&NO9puh(I(trk Qgh4w%jqCITbYq@5u$M8XWG ^yikaxV8hnt{msDq1B z#1THKBE>7jJp#uieDlAe_Y(Ga(3>fKK&n|4rV1 Fh#>*-ujIrMK2bi3d5P1P=f6xw7|>jk;aQN_prl8kPZi^ zF`8_7q0$V?PobvO%;c2lVV-)c_}_{;c@YqKj;S2;zIenjrTI=iW8bCUhpJdhvrwle L@U#l8)^z=E$__gk literal 0 HcmV?d00001 diff --git a/backend/pick_student/pick_student/__pycache__/models.cpython-38.pyc b/backend/pick_student/pick_student/__pycache__/models.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..db6f7b51a3702063fd743c602e020ccdcbdc94b7 GIT binary patch literal 2276 zcmbtVOK;p%6dupZo*CQo$h$31@tRG5@>GRTX{#Uv3X6n|70Ghu-X>Q4m|WW}!wOVX zWfQd$j|g=WHiRrHx~M2>5x;@;T_K@K)E~g6E536*O@^u!NZ9i6dEM)C&v(x8Cze$& z;7b3{*XF?eNy7M5hHx5BvI)WpObZI3=4cx6#h@6LoRZ>8K{>2Am9Xkmm0S+=&~S{f z=G4NvQx6+XBQzaT*(!k*+KwGIou*cJzrd *)+s){GxL3cb=U;_XOA=^{Un=0 zoO5iNSAESn#%7S;S*b6j8RJnZ^(1GO_e!$S7k=o8fqQ`uWW|pd|5RFDmd1Y66Fh|b zLPm)h-uPj7_4Zy-8c`Mm-fDov_TrEna{KOA!)seP``h+#^NP^0s#_FOcuAe{^IjID zT}@0w{;bstyd;@d)Q!B5?`dKZhWqW5d%blo=CgzgWs#M$ CtYzf3G0ZeAbWy|cgl^S$j`2-C*;i`ZiHVHJk*+rNHm|J$1*zmj;0!ZYG1>oaVX zM{C4_Vd?5%v3pz^t_s6-W!-hdm}LP6Z@TVA<^>cwB+GSEN=YsXYA``blSQA&`Y3SM zXF?}sncRdyY&Gejm=oFVq0D(NOZ|)7?Ri0v2 X*z{V091 zc9<_wQXA(sQG+0gq$x%5B`gsf$7HUT%6fie;+-ar=Joqz5NnC+?iIuvw35jEljlyY z^atsB9If S&w16%8~3Nn@?Z8#^W%1r3Qtv0$&~nvou32#sR%CNr6a<|{faW}{h}QeVys zQR<_LToz5lvXBwo|K_{lFPjHn|G2+-8&xkRpvz1Drz;0LUx+6lizkUZP2?FOb3~4V zEOy)CITD^H@&b_;i5ymqc!@;Ho_GaBT7A_2CDf$5?j`F-kcyM!@*0uXi74Q81w2aR z5Wk#zlRVx6nZc9TAV;Vu9LV-~9InCoKXA}#D5`NrI5fCPKLBPT-xhd_*@~yJ*yOF9 zHW0(OgJ 2u4s@K!H{Q|$}R7SM;uZb@8pyAUHXZr RYNgY)v=dsZ*lM*Je*-8)Kdk@& literal 0 HcmV?d00001 diff --git a/backend/pick_student/pick_student/__pycache__/progress_function.cpython-310.pyc b/backend/pick_student/pick_student/__pycache__/progress_function.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7d431897dbb5ee67d43cde3b22b7607e75dc46da GIT binary patch literal 1096 zcmZ`&F>ezw6!!D^d}-5EC6t!Z4h%4y5EV?IsuU!uj$OhOQ61^oq?cTBseLH|U8Z(r zV1x-q7IyxMS0tqT1&|Q$-8E9FilzJf?Dzca_r343Mq{4g_ ESO+DQ1F;>76I;o;(ahp 1Y_dkn$el l|<&Zu8a)I$of^jiC=i1Md5z|V8@Nz z@5zD{C=gY9?!2S7&a>lzA-9nP3kXhjMk75`PFC09e{hr~ zF}^%-wR5dl7Z`n_jn(aXp5+}B1r^tBj7)aeIZV T=m@|E+Hs zpJP`LnkcRsEWrj!Y=f_O3$V-un00i8uontLd^vHLWofCo(sSV+61*unu5Ax8HBR*o Ob @OkOmhVh9SDUGi6{j{nuO+*u)3_xW$*UZ7uy$ jVM>X3zwQf_+Be3IED(G7$+b!Ygcg0{5XYF``J=YhW2BN^6 ;1m>jn7GL4i+!L5y@pDY~fFg;zif1?qz;f(d-$A{a$5;dcYw6lBLt1TIeagqZXC ztN<#9?~RbMXa~C^m-(RKl@qCndo5$7E~n}>9vErLdx^@8Oa?YRlX23@GSgsXXzW19 z+-g_*H_#Kb{C>Xk?67}sPgH)GC?OB~Y0{0a18;4#YHMjs{C1EhHdXmX|Gb=bmyhFp zy3i~W0CJqgN#xA0SK3F6Gd)GV-G6ut>4X|q^Z1<%OU)7Niul}tOT5G(Yr~M(+kvBt zp ;k8CH>tclm}v;eGLo z;431WKD0rH7f_H?MD*Sh-U R z=Az_vI{G6{RGLujVHsU(#gw6zXHpy4oU+QcNEGgQ&6&Pd$F1WuOKmDm^~{pj3F+Ia zY$ ?twG $4yhp8^lXUC=%+46N*p;2u|bzT%t;r>)jR$Coa1VsEAwnGyO{| z4oI9hbK}G}>o|4OM8eU|?(Ab`_xolh<;F(D@csB190o39zes6+m}9$W>Kg=S+$z|F zjhRJbyRatq*tXbf#vSf{XWSL`i8FSfd)$Za3kSLjJ>Vhq(C8lY4v(NmX1@=;%VX%V z(F5okya&B!^pJ19WrO~2+<*-%9rCmiRX!0Icb=z8yeYXTGFoka4wPLqwF4p8*y3z# zzh}Y`F1LnEc KSK(R`5PT)WeBB6O4$sZxm m z`E>6n&ptNyIIpPegP5dh=jd1xPt+9A8L`l!Uu>EA_0YV+=Kp}k2ULK@K ? 3GQ`NW6G1XlG~V&S4doj zxNvU^le=ht=&8-UxixmU4PVaJ?Y6I-7v=OIKYTYjb(bL4n+LL-z+WZv{aGc{DqOW+ zpT9}|DC|N+oV #<)NTbS;c$-@?~ $4yhp`&n^8kx(yiLJ^7p!HHa;m#C6uyxZ2oiNme~D&kiDO#jk~ z0}?0x0w=!NIBk+9Y7_13&OT;#zi(!|x3Lj1{C@oo4g;65Kcvk6Fvogm>IVd8+$z|R z4VXn^yRe4#z_!>s#vShdWZV_@i8FAZd)$Za3kSLjJ>Vhq(C8lY29KaeX1@=;$z$lT z(F5okyal~w^pJ0UV4e0~+<>sBTO+$5@+a51WMR1cDzYj>0mg^sc!RVp###zYBe zhJBn36EjQ_9VN-I dMm@LMK-DOuOi9PqENbtCscqE zcq-k 3d3576~HjU{tSe94>GC2x_S{i|%t+gKoG6d|z481ZJ-FTCEt z-X0x#4l#TET-MK6qaIlgHoz7tjR!VRvw%>b<2v_Ef=f!GY24NsPo?LA-%C-Sw|R!T zyhp~*(tR#m36&kRMO6J|R4JIJS+EwyhuCtTEG<+6n!WIdGw^72J$T#!Ozv5UtVD|1 zBMneG9HS_HD<$uDy!Dq|_2M1)e2k{3bP?T>X4c=ai`5l(TvOITbp1&J(LN9Gf>1{$ z6{a-bfjL97q+phhR{6e+ TYETgtq=+>tTVfTd0QH?xL7fJJ!k2ZSH ybIj9Gm1mN;Hs1tO8BH=tqTQfw4y}qy9d@T5w3md1sim 3.0 or question_correct<0.5: + raise HTTPException(status_code=412, detail="请输入0.5到3之间的数据") + else: + if db_student.is_master: + db_student.scores += 1 + if flag_cache["is_reverse_day"]: + question_correct*=1.5 + db_student.scores += question_correct + + db_student=call_student(db_student,question_correct>2) + # 根据回答正确性加分 + crud.update_student(db, db_student,class_name,current_teacher.user_name) + return {"message": "Score updated", "scores": db_student.scores,"consecutive_calls":db_student.consecutive_calls, "is_master": db_student.is_master,"master_uses":db_student.master_uses,"is_reverse_day":flag_cache["is_reverse_day"]} + +@app1.get("/getclasses",response_model=List[schemas.read_class],description="根据教师用户名获取全部班级") +def get_classes(db: Session = Depends(get_db),user: schemas.create_teacher= Depends(get_current_teacher)): + classes = crud.get_classes_by_teacher_username(db, user.user_name) + if not classes: + raise HTTPException(status_code=404, detail="No classes found,please create class") + for class_ in classes: + class_.updated_at = class_.updated_at.strftime('%Y-%m-%d %H:%M:%S') + return classes +@app1.delete("/delete_students/", description="删除所有学生的记录") +def delete_all_students(db: Session = Depends(get_db),class_name: str = Query(..., description="班级名称", example="1班"),current_teacher: schemas.create_teacher = Depends(get_current_teacher)): + # 调用 crud 删除所有学生函数 + crud.delete_all_students(db, class_name,current_teacher.user_name) + + return {"message": f"All students in {class_name} have been deleted."} +@app1.delete("/delete_class/", description="删除班级") +def delete_class(class_name: str = Query(..., description="班级名称", example="1班"),db: Session = Depends(get_db),current_teacher: schemas.create_teacher = Depends(get_current_teacher)): + # 调用 crud 删除所有学生函数 + crud.delete_class(db, class_name,current_teacher.user_name) + return {"message": f"Class {class_name} has been deleted."} +# if __name__ == "__main__": +# uvicorn.run(app, host="127.0.0.1", port=8000) diff --git a/backend/pick_student/pick_student/models.py b/backend/pick_student/pick_student/models.py new file mode 100644 index 0000000..ee57b34 --- /dev/null +++ b/backend/pick_student/pick_student/models.py @@ -0,0 +1,43 @@ +from sqlalchemy import func +from sqlalchemy.orm import relationship +from sqlalchemy.sql.schema import Column, ForeignKey +from sqlalchemy.sql.sqltypes import Integer, String, FLOAT, DateTime, Boolean +from pick_student.database import Base, engine + +class Student(Base): # 类名使用大写 + __tablename__ = "student" + id = Column(Integer, primary_key=True, index=True, autoincrement=True) + student_id = Column(Integer, nullable=False, comment='学号') + name = Column(String, nullable=False, comment='姓名') + scores = Column(FLOAT, comment='得分', default=0) + consecutive_calls = Column(Integer, default=0) # 记录连续被点名的次数 + is_master = Column(Boolean, default=False) # 是否进入知识大师状态 + master_uses = Column(Integer, default=0) # 知识大师状态下的剩余次数 + class_name = Column(String, ForeignKey('class.class_name'), nullable=False) + user_name = Column(String, ForeignKey('teacher.user_name'), nullable=False)# 外键引用修正 + class_ = relationship("Class", back_populates="students") + created_at = Column(DateTime, server_default=func.now(), comment='创建时间') + updated_at = Column(DateTime, server_default=func.now(), onupdate=func.now(), comment='更新时间') + __mapped_args__ = {"order_by": id} + +class Teacher(Base): + __tablename__ = "teacher" + id = Column(Integer, primary_key=True, index=True, autoincrement=True) + user_name = Column(String, nullable=False, comment='教师用户名') + password_hash = Column(String, nullable=False, comment='密码') + created_at = Column(DateTime, server_default=func.now(), comment='创建时间') + updated_at = Column(DateTime, server_default=func.now(), onupdate=func.now(), comment='更新时间') + classes = relationship("Class", back_populates="teacher") + + +# 班级表 +class Class(Base): + __tablename__ = "class" + id = Column(Integer, primary_key=True, index=True, autoincrement=True) + class_name = Column(String, nullable=False, comment='班级名称') + class_time = Column(String, nullable=False, comment='开班时间') + user_name = Column(String, ForeignKey('teacher.user_name'), nullable=False) + teacher = relationship("Teacher", back_populates="classes") + students = relationship("Student", back_populates="class_") # 使用 class_ 避免与类名冲突 + created_at = Column(DateTime, server_default=func.now(), comment='创建时间') + updated_at = Column(DateTime, server_default=func.now(), onupdate=func.now(), comment='更新时间') diff --git a/backend/pick_student/pick_student/progress_function.py b/backend/pick_student/pick_student/progress_function.py new file mode 100644 index 0000000..a72faea --- /dev/null +++ b/backend/pick_student/pick_student/progress_function.py @@ -0,0 +1,40 @@ +import random + + +def call_student(student, correct: bool): + if student.is_master: + student.master_uses -= 1 + if student.master_uses <= 0: + student.is_master = False # 退出知识大师状态 + + if correct: + student.consecutive_calls += 1 + if student.consecutive_calls >= 3: + student.consecutive_calls = 0 + student.is_master = True + student.master_uses = 3 # 未来三次被点名概率降低 + else: + student.consecutive_calls = 0 + + return student +def weighted_random_selection(students,reverse=False): + total_score = sum([student.scores for student in students]) + # 计算每个学生的权重 + probabilities = [] + for student in students: + if student.is_master and student.master_uses > 0: + # 如果是知识大师,概率大幅降低 + weight = (total_score - student.scores + 1) / (total_score + 1) * 0.1 + elif reverse and student.scores <= 5: + # 反转机制:低分学生被点名概率增加 + weight = (total_score - student.scores + 1) / (total_score + 1) * 2 # 概率翻倍 + else: + # 正常情况下的加权选择,分数越高概率越低 + weight = (total_score - student.scores + 1) / (total_score + 1) + probabilities.append(weight) + # 使用随机加权选择 + selected = random.choices(students, weights=probabilities, k=1)[0] + return selected + + + diff --git a/backend/pick_student/pick_student/schemas.py b/backend/pick_student/pick_student/schemas.py new file mode 100644 index 0000000..a824a01 --- /dev/null +++ b/backend/pick_student/pick_student/schemas.py @@ -0,0 +1,45 @@ +from datetime import datetime + +from pydantic import BaseModel +class create_student(BaseModel): + student_id: int + name: str + class_name: str + user_name: str +class update_student(create_student): + student_id : int + name: str + class_name: str + scores: float + consecutive_calls: int + master_uses: int + is_master: bool +class read_student(create_student): + id: int + student_id: int + name: str + scores: float + updated_at: str + consecutive_calls: int + is_master:bool + master_uses: int + class Config: + from_attributes = True +class create_class(BaseModel): + user_name: str + class_name: str + class_time: str + class Config: + from_attributes = True # 使模型与 SQLAlchemy ORM 模型兼容 +class create_teacher(BaseModel): + user_name: str + password: str + + +class read_class(BaseModel): + id: int + class_name: str + updated_at: str + class_time: str + class Config: + from_attributes = True \ No newline at end of file diff --git a/backend/pick_student/run.py b/backend/pick_student/run.py new file mode 100644 index 0000000..d16b5db --- /dev/null +++ b/backend/pick_student/run.py @@ -0,0 +1,22 @@ +from fastapi import FastAPI +import uvicorn +from starlette.middleware.cors import CORSMiddleware + +from pick_student import app1,app2 + +app=FastAPI( + title="学生点名系统", + description="学生点名系统", + version="1.0.0", +) +app.add_middleware( + CORSMiddleware, + allow_origins=["*"], + allow_credentials=True, + allow_methods=["*"], # 允许所有方法 + allow_headers=["*"], +) +app.include_router(app1, prefix="/teacher/pick_student",tags=["学生点名系统"]) +app.include_router(app2, prefix="/teacher",tags=["教师登录系统"]) +if __name__=='__main__': + uvicorn.run('run:app',host='127.0.0.1',port=8000,reload=True) diff --git a/backend/pick_student/stduents.xlsx b/backend/pick_student/stduents.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..9612b78e72e133660332ba72252e57e40c66969b GIT binary patch literal 9554 zcma)iWk4Lu(l)^fws>%N53a$32X}X0+$F)C-~?IRAwbaJ!QI^#2*KS$;DzMgb58Q! z_kLghn3 byS7%4iX42Ol54< zcv>_-(a|&rG;*}o)+B}6@Xkz^SMK0)s2DuRFf6J~=csM7NSNASiC~8sIcK^({4j@e zdb3h#dhV*-f@c9Xsiq-FobUyKj+?EBmR9Mt*Q*l~CDF_}O!Z8Vh`#$e<%wPH`3-c~ zn`hvijr*W#FyAYv`DI SX{4aA$-4kPb3oz&F zKW TDoP5xbIQMw)ZJ$M}+s**8&5O0Fp1w=dKxFa|q z3Nl1n@7Ei4)VaRj*qy-q&aQ;3CB4EUyZVppqWzOyW1yqy6TMM!qtcx$1ieT8M~~Wx zuQ^1`J`ggchV#eh)|T{L47b&a+pdEHc*CH!hENlmuW6^$X&;OQ^lpA1rp~;R EHd*^_lLGezZsWF@B@p#mO0H`=o&USY4S;7R=xym XON)x zI<+lJ`D>O -lpV8nd>$3SzM+u_-OQV-bh$uj-od15k00JHS;ek3Cfs*S(Tkkc z48+FAQ==#|a>dx7d2LEC31gh1I_?<-VwGQW<9~+}<@Y=YC%dWFYqmP$^YAxc3+rsZ zYc#R27^yW7-WpB8IFR$$x%`Z|8uf|V|Lk6%9;tP=`RQ2xGXUimzzyhV?POtU>ink@ z!Yp3NHF(s~dl(3a7yk?UQ-t;B+mavyTxS9F9?>7TReA%7FtvmNOJK5fE!9gdJvc`K zHEK7?Y~g=g@ ?} ^}Bs`_^-ot69dz=S^QC)fg7k1s&k>idSO RT>A=3( z{Ms3Dm#`+Gt@}C9Ix%>PsWd$=KAsn=4MNv4$!N=TafPIzdwoXa`PD+Qmn8fWU*TS3 zp0#a9T0KKFUczeO8n*Ucjn>QFZSR@Y_G+nb)k+39Kc+FDRE3Gpb|yn}T4Jurv#MWP zug~35ORk|v6JSZ-!I#zgp1ji^Pw;RhUJHxls|tXT)EqMv>|(v0jkxBJ&QsiQ_Zic^ zFg~-9M8H~ qs zloMDhhvgoF@{T@BtjdRmHFWDHY&VaYBz<@AI4WZ_@(><{kf@&V> E9d>eTxM~-K$MRnEz^je79eC;O~IkpXk&=43}rEi#8wgRF6oxE zN5O7rfVCGG;QDbl$SW?tc@&^PNDMhiJ1bR3$m1 cU$CFxpLTnoIUIw}f!RiW z@+xv`<&a{y*LB*a_GVYaZBaG8Zg*TNJraM^-Gr}c7`gT}1%;Tf&ie)jA)$P=b*1~% zATk=I2N=*nf0sN#4t8Lcl{_10)ytQ-?dmR;UY(eNox58Hki^+B(M^M7&uc;+Cyxg{ z@V)A=djTIdftJJ29c3Ra?(XvN 56uVKEU9i17^b{J D+uXX5sD^_h|pBMVFgs56nm zrRWo_@?90SXCdfj9Wp!%XNs|I*&&ca)(Wb+$3JUV)THvvKz?`~b2wu6dCBEC>0ZW~ z(`|4#plE-Mqi?&S47@jO*0jFP(YID=eJ!I%Z>2`?1JC5RmczSH%TkpOMK8cedSVBU zH+-O0p5rynd)C|#J@*#nU7{MNYjhYJnxg!I7u71BVM$rvBi+EIB8n7Jczqthy%z8_ zwxrUq>CmrD&}BH_7CQTG?Sg}iY$fGzLP@DV*aQ-r!9O=FzL-8c(i8B*Yxca~yaQLC zg}eg2@^rpGhRYp9;}_fM!uGxyF7)%hP(1!VS)ng@zZ8SRd7pgr>i(v1^iGH-CtsYo z)%|p@nwq)wZnGXp?6n3*fNbNQNudGFb*yP0LAjQO5^2ptbUYis-5bh{P6NA4G);)h z*N*Qb=F>ps8sHWp`f&WLV)&4+?$SswzKiYbg4^M3Z{#@D#tMXvx|1f_;pjw|pQB*4 zLp^}^Vt84kIDTP-A>gBwH=Q=C>kxl7O`?UrG6U2_lpO1&yITx^`eUz2-v D>IoFs1{Z1^N2tG{S;k5kYkRsj&|8F^&98+d}3DwS}pa;YeC z@Rpbq_j~02@Xc6{OJJbv8x~Vx^T43v{-w>eip2B1F~K{_R|RKX;*L@Uf*G$vS@Gx1 zCe {DVZ7n>6 A@swZ7>9myIg1uaAcLat3(8&H z5Z~GC&iYnSV98g%R%T{xR%gpvT=qrVmK*syuOrs%8tQMD#0V`vuq$sP8(E41&xJ8? z;HnscU#s?HEq{^YrZb@;n`K86?tvyi?Tjj!g5#C3i|*ZW*DO)bwP1ZG7}pW#*%&5R z%%qYu6y}txXPguFOa?K)fE>_%nT?jTCqX0+7rGw%k~O*VM`fn|WTAU7VkT2UsXgXH zOhdj!Rh)h5!cL*3J**ohorocem?k+v=Q|{#c%*fTDKnUH1RY}}N-hr{j8+q!K2G$i z{>FkhO+s`sR#X}(Jn+Z SPulRFWlSOJsH@U@Trh_b z*i#*$<6aphd`av~iVm{CCKuIBF%mV!q1s{BnDH;wQ?IG8208E-0N@*V0_i)TzJ{g( z4pCnpJJR~`E841g)gITErR!X%58;D@nq9V3`QJLtl^hkUugtA?oR~6|TqxB_itjj@ z=;={oT~23&LvR<0n3_ZSD<-^sx7UZWWiuF%mYl8;5T^Cq7LRvNPtiIU8Gp9-Kx6>F z;VMpI+%(Z_5)CG<*Ty7R#&dbV`eTYV-_}s&HUoVz<4y|JAlQg?xx;m^L_E~+qQ3lP zI`l%jd!z*Sl`x0>1{A}I3^Cbsd9z@Hb@O;hB9kkmYl1ptUHTBKoMtn8p6P<)6o)OC z#QqC%h4n(+L9aB06=E&D!}mSgXLAa9C3BxKTddDUU^dk>5k)t;FW*#)Ka?9hz_i0& zWe?VX2V5lbSqOy!E+3$OUyV}9TE3iq{6H{2u1KFYV2>XPCksPIQxj!pM@u_%r>7N; z?P!%WlrW&@MDLg|X=hlE!N2dY0B{PeHR#B-g>7d(n#MD(1??rw9l53qjd)_KGo FyzcGb3>n_7{54I?0*r#Yb$Hy)5`hN{ zW1J#8D4x-oc_HvdDS~}KbvGy3!BuA1Hl%eOPthnhCc>y77ZtihRv;`0w+PhX5@YVS zh>J23YP>^F@fj&`d_D5MT$_~Gq29-**=M!l^tc%@4b0l+yLA;JQ0bv{Q0$@c?PBoN z_KD#Y)bBLl_V+mqK2osqxNJoIMZ?p=& nGL3vS{Jd zko9Jhy-nLfndLolf)NhNU)WNK Ni}z+}ad7U8Y8m&~ zu7)oX3{6|w!Ro0*QlD>u=s6c#t C;@6p4J|Fj@O}IRUdxv`A92bN~%0)V^NKO z87C<@&*>;WUI*B6e#ISBt;nzvl~eFxEe^*j=>!j1*_}(lJm}WKUzPqGB(^8a$YS9s ztlw?~!Ib}SAyoNBmNt3&0gd<^q-H|KBOp(qw|aom6t=W@0A5t)O>Ca;?l ;RB4?iEeaEyw7y)hek5AnO+$pJ;{(nt^xEP4 7<@bWe9~IvGW9yJ>i{We&xoWtA7^Da!X4JvSVQ5uv25w=Kcp{`FJSGeR47^Gr zO}WUm5H?MyM84&N?Eb#*I`c7zE!iph+mQRG6VoM$-ROg}mCP%FdLHxd11IfhcA6ky zQ>U7ED}ySu^_+{><#DCz%^`B`LK(cT0g6|_21>cw*RE4~b=TJ0MB7)~4rP0Sf_hr6dlTK5lr5Kv+JrZ(l_keuq_;l77E?Qw`TJ z9lLY$UXC=oB>TvoNt_XmlLS8k)im&dI9H9pa>cMvl@$r$o()NiLp`qs@J H2&r*Dm(byr zwsY| _#NIhE}Ui!xl0ATNEzIIhEr_Y3dJjm!9-q1>{HAOFrY7x|(T+@7H ze7}3Z8MhebTNxs-H|HPgLKqV!CJoLRFdeX}ckvPbgb8(DE-_<={6jmc%=JgR1#y`K zHc4(3uO^(=?I(v9ro25D=wMJN8YKR(cK#r;?rfT4%e>8QDqV%1FY@M|m2w4rR&b3? zQNe+_uy?MS^^A$`_@-&{Tgm(Ip)%DOd^72Ltq$3KeVLS#Ec2UrBx?-o;lJoD5L3Jgpacyg zDyhiOA@PYtXG$VGCnX9~SQwu+Jh`^&TeP7$*B4`}n>6#UI;k}oPEy=SBl)yed+7DQ3Ij}W$xE_^r#`L2vS<7pIgW_kP1ZakE-Geit8eHUf~Bt=G8b-w-O$JI zs1|fy$5bld3Iu=Uy{oLY<-G*k8z37ZPM< cQL=7(5~YCUd42PRE=2hx0uLXo zg537K3avz`Km2a+%?!)^DiJDglKC1=pybCFrSeSD#+zHi6Df3|S^Tu2YhF4fFTIBn zswpuU1`3M??2_InRxL9`8TLDMvP%HfPP~ywMmibazn8AkS?cIe?&k>P!1x&a-huMO zFezAp=(%-+KNw53eC(LAgR&uZO1TJu2ag#i?4|0aFlr8F-jCaa98Wii;#$w}-S#g$ zUCIh}GvA8KhyZl5(MmnftqJ!bs4L+r(b|L|lf}hLVgfACvCgdfS5B$TRW9Ba+ac#@ zD^V7Mkk_A1AEB%qr4sWz5moZIgk*{qD5v9|Hw?*|N++(>Bn?4it7uI$nDBm^u mpv zlD-~zZHFe;A7$4v09Qp{6M(p~N&@s{N+_`$Y9CSMrXJsko+s}vd?$)siABBoR$T7! zRfO-X!{H%E`+OW>|1*AO74(WxqK-`)p*BjL5;J9G1qB5NZLEJw&GhtqXMV$NE%;p@ zZ#G*Uq5Eg%8Z5mHNwlT5v%C2p{mj0;_bWi-m(VgI*r3>`)v(ab^dH|(Hh10_Lk0pw z-lEzK4S1aNjtcjkAB6$f)kxT{F*_KB11ApPCSr^%iyo*FuDdTa2NVRtVJ`{-VcRG( za&AVK&)_oO`2C GU5g^{- z@-V* @LGUfM`o=mrCbiHcAk6(F5WO!-OAOi~JX9mHZ>dsTY>b`E2u$j< zfsH0S85-LC+WpduQ^P#-Rmzgw*gG{<+KNt_5FAF5&sUaYLE?cO$W!w>nfmF1vXUCI z?fh@aO>f5!b~1_N4j=3suSU)TM$xsfah`K2kZvm1xSvX_=i57Z-i~@rE e`H-%oB)!4T=apTYTkpe=a4`VI&MTGCZ9xG=FG-dXdTR;eHSP zZr*m6(vBS+{gTrmUL&@ZN+n2#lR?eExg#uxGZQ(2I58sg)|-=|Aj|KYMJFqDzf2Ge zHo@XomcDc84p`I)_@0jMv}W;4lk|be5qyaeO|lgL&SSB!)dL~Mc=S@>XIv~u4c9~G z&kZ|`)V>;V{>14dMl3zy7#um69C 8Sun$Q+amya>nSrO-P||+=4K|f|x}>ma zM|LjauyfgThcQCG lIPp z{2)}^ReC(zbDqLtM2;;zOA`N2__-vl7bO_Wx cz#8Su16?}=>!k^$&C_$AZ Fcs5@ z-MEf56yu|bG*tl)W{!IEaxx4S<)iKg##ziSvOY?wI3?3nSnu0zNMuXQ(YkVaKDRTN z%1;n6wD@=P%|u+Pmr7lJZkL%_!+PjgmS;-VDe~1M(4_z}uTv&)upFX{MKxb%>3=Ff zIV%QDbM?yGliyUSl8(;uBif0o0uNosaRpPl#LFw@>z5#^tyKG*=Cq`=CdqPL&IxA7 zyD&28L*-*Ty`euMt>7)%Zyr-~`1n< g8S$h _4UCp`D|6CGYeU|FL>Tq?K^n``TS|?M(YRmUZtu4<<0<}#c2?zslV-Y70c?m}9aMfV6Uvvz2~5dUDptV^1X>up z3xkR})xsnOyu2SRSV7Qg#a!o})yriw$i{6YwbPz1^~*`6w_iTm><
a;m9eCXAYCl05~8om*l zocz}DC3al9W>AthkTPfQf#PLv*JhH3AcwxB<0)gQ+y65j{-5aVvzd3?f26VTkxsnF z^JAFf7wn(A{C}}4XVu992)YVd5guwy%1Ba@-n5Y>U7Qhk`@SbBj1gh@ytlr>p45RP z4<85(gl)MRmRwvO t*!TjC&H4ItSkir>ww%A zBguUiv0|<#dF`yd=Cu9X1RPkTIinezd5TU+#qo-10f$fQDi-9!O__s?fLM7gJ`m%w ztke%jgbQ_C*XTpvLP5-8lIxazP@xiqD4Jg~nO>6j4W3+;_V8tlwK@$f>MAh|&Khu9 zci8)q^OqYXISQ6qBTc6wt&$S jDa9O<_(^5 z2HK)PJ7-fnXMGh9ds8Rfr#MJ?!k|1PD`xN&RcmLSHk-1&VWgn}*tD2p9ct>bo&7us z |vj5t2|6oi!$sNCTW z$Ds}NY5e%sibWHy-M@rzrc8>K-#+@&Gy2NYX9UBtJ~d?HEF dJ%?-%*fK zA-@7Wn8*-=9j}>k>u!zKA>-?l*--J4G`D202kdRcpf5mV8It?5y#Qev8;CfLY0%|i z5kW-DMeGdh{jw0YfUvxC@!M~}HYW(pE$HLH-kZX!vysZq8rqA2=LaKe-xx&}d`fm! zE?Q&j+8CP8zML6z-oYx!JcGpi8IJo^5AmmF9+d;}41(nGm_hs>_4KQQ|J&m{b?~dS z0+#S^|MUBxe|n%NiC=@#{U!7BjrnhbJ*B9AwWm6cr}mGMkKf1pv*_aq{A)bwe~SI9 z1msVO{w!+vTRP~`r2iW9-z5%zivO9E|63gTF(UZ4_+Kgd|Mt*Nspntq>7n(Zf4ZCh zCh$8;N<{zgPk&DIPe=AN&M%fc{wemq+}fZ0{2BNCyPvqnIM{!R0{_{=pP{qAdx(8} z?57_73Z(u2Kf4IrPtkv;G=H~{Ka-k&k7)T%vA gQN*@M$Y)u1I4gu <=PH7Baqro z6Y;E@ru}&`?Op82)F;!lSJ20M(3h}jd$>n?v mP6L-^{On@SYf|JJ9TN8pl5!dw(h#x)cexQo$0lPW9gn{ zYV?!B2Gvx{TQb>@OVUnNC5y!!MUiW!4Hiw6&dP_d7i?|7eqKrMx96`{b^??@tH| zQ>rU+d9%jK7LDN$(nOI cEBv?c$RY|FOkF~L{fs&BH9ULDLK+Tg z;xhYpOz5zWFP@i5X!Jo3CXYT}!I>~VHy2m1*%?lDe}4Q2{lor)9#jQcXk?Ct&8E)M za10ZjPv}E;)^$v+rMs<(SNt @X6n&eb~SapR> &4aD; zgT~Ev-s#=ne1E(8_TgEox3_m+&3B6>bGNG;y<2|htTtAq-rb|jQK8u`R?iO3cXLk3 zEcc9+%*u`BY-Tx|C7GMIGMQWX{Dh)79T%Vcm7^~t2tWV=5P$##AOHafKmY;|fB*zu zLIFXD#n}G8kbHwnew}R53<&}dfB*y_009U<00Izz00bcLzZ0kkQSR#XYq?zZ$Irj| z;fpW7|MpXoUoQOg*$2;W &LOA zwryCq6a8+p?ef_XC;W$ep(4