Changeset 0b7a8a6 in git
- Timestamp:
- Jan 21, 2014, 2:35:27 PM (10 years ago)
- Branches:
- (u'fieker-DuVal', '117eb8c30fc9e991c4decca4832b1d19036c4c65')(u'spielwiese', 'c5facdfddea2addfd91babd8b9019161dea4b695')
- Children:
- 14086c27fce747357cca9d5e71f0bc75f2331f09
- Parents:
- e82b5f24416c3e4012e8327bb435a9438a1d18216ad45ecb1e4b83e70dc5eb5f944786e3d2f9a25d
- Files:
-
- 20 edited
Legend:
- Unmodified
- Added
- Removed
-
Singular/links/ssiLink.cc
r6ad45e r0b7a8a6 826 826 d->fd_read=pc[0]; 827 827 d->fd_write=cp[1]; 828 d->r=currRing; 829 if (d->r!=NULL) d->r->ref++; 828 830 l->data=d; 829 831 omFree(l->mode); … … 863 865 SI_LINK_SET_RW_OPEN_P(l); 864 866 d->send_quit_at_exit=1; 867 d->r=currRing; 868 if (d->r!=NULL) d->r->ref++; 865 869 } 866 870 else -
Tst/Long/factorizep_l.res.gz.uu
re82b5f2 r0b7a8a6 1 1 begin 644 factorizep_l.res.gz 2 M'XL(" )Y225(``V9A8W1O<FEZ97!?;"YR97,`G/U+KRU-<AT(SODK+FI$?B=/2 M'XL("";1SE(``V9A8W1O<FEZ97!?;"YR97,`G/U+KRU-<AT(SODK+FI$?B=/ 3 3 M(OSM7NSDH%$3`8V:J&8"4U"K28$`(0J\V5WG?(W^[^UK+3/SB+VO5`*1R,P; 4 4 M?F);^,/<W9[+_OW_\;_]N__]QX\?Z>]^_#_^W?_]Q__REY]_^>,__]/_\W_Y … … 1223 1223 MIO?E3P]J9NAY+L=Z:8LUOGZQF-<[VUR_8)KKT1,9=9ZO:?Z>7^7LH0A?>V2: 1224 1224 MK3=.6^^KN=YY;+TSV/K%(L[W)9QO[#;?EW2^K\I\7^/YSF+SG;_F+0;\EIV_ 1225 M_JTHH9^IE/*K0H$G"/S_W]J[[4B2(]NA[^<K^N$\S$14#IQW$@=;?Z(2!`@0 1226 M!FI(&Q,94D9\_7%>S&P9S;-GJZ<P@Z[T17,ZG4$WVIWOJYS?5Z^L_N5?]Z^W 1227 MO[_.OWM1<\=9P"7[8U5C/QEY\K->05=6R^%61=%[+S4ZCS\>E11Z.:Q>9[23 1228 M/L)';"VO$@R]K$*<?W^X<O2P:HH`K^<K!+^*8-4/=\328[?K/->PQ-9+M)=W 1229 MO7_5'GG>0^I'?84^VB/5^M4CUGO1T1S<*[U'"09_=C$*L]^#.\KY7'I8^SY8 1230 M6X=LQT,2M^.QBHJNL&KR7"[#&,1QD^F:8K9U`=HO8MQ0TVR)(5<AUR;:VY3V 1231 MI^#M<7Z`-B<.I>ED">8,ET/C)`CL.*I!'=YL=TU3TZ:YX-U.5^TSLX6Y#A[! 1232 M$-H:!=_M<D2.P4"<=`LXE[&[H.>D6R?U72GI)V_T:/[9A\E)M]MS\P6.5A7L 1233 M1R5-.Q4,(LG=QZ8Z$+I[9)W7.,\.-9C3>!9^<7"0H++*O'TLYW9V>LJ$5;H\ 1234 M=!2N\0U5J;#IHINXXYOP>_78B`^`26;?QCYM!1HNS]]4OTJYZD:9*&"<<<>O 1235 MCD["K&7].1_&=G4U3HU+>%NTX^</>L=!QMGGOUB89/2F'\H_(^$0]0?P;G3: 1236 MJ)DO[#@<5;WW?@'S5%*2!]9W3A?TQ$>N<$KCVV888.X>@W_VM[K",2YH?VRR 1237 MCV4VM>,D\N6+:2@7.%:^P7[0B@XKD],^5XH\NH:Y_D53+N@+F)G=ECC/GV$P 1238 MO5S`\KE-G+A1T[#EC1<X^XZ;>E6`5=9_`?*=-VI8]`YOGPJX-J%M0Q'&Z.VT 1239 MLP-ZFYEZ@:NREFT_U\WISA7S;I9I.1RXL""WO4^\>AYSX6;L0QO,HSC4*'A+ 1240 M.+:>+2C;V;$-38['V:T\S8RA`*U\^EG04!NYOO/>[Q7&S+R9:4B&%FM'-\.N 1241 M=4H/UL1OAH?7;0Z*N9^79C7#M:C?T&T+4$]C5E_-NR73!6U=NH>HT*MZ_TVS 1242 M^&)A8ALZ`TF5/6AFTRIVBJ+`,&:;#<0,)MMQ%(8I1I\91C;CL"AO&]F^>;+4 1243 MM+=E^V-1['ZS6T8R[U@L,;HF+Y;2EBB$CLAF-[N-&F,H-'\NM(E4M5EPZ&"U 1244 M['G!9N/2..]SP73.T4=5[3C5PK*?>=6+;%S>]'X!\V[IS1`E5DF3-X'58*K@ 1245 M*TP-3$YF+!>P4]R_VCUW(^<]U]EIY^"C>K%Q'>9=ZP6YVC,N?FS=BU-[2;W8 1246 MBS=ZWG9U568R$,Q<%_"ED--!E74..X@!,E):&@-D*OIX@I#"\\D*;HI0^_W^ 1247 MR"`Z@X)!,;*\*%^0'%$/3B8#8L!WV4>5]ML-2$.=(+H$XTZ*!<842#ZCHEX* 1248 MT-4KA@"4_6=1H,XQ@4=%\RBL6*;GCWQ!ZEWS#FZ)*^O^+7%E*W`^H^.W^N8) 1249 MP;UZB_Y5->IA7E6OY+;+IA"Z1M%%E_<?-NZ]&A`-;WI4Y'A3I!!8#\^78'GR 1250 M'Z/C+.]K4($8"IS-&E2DM`:#F5>)G]]^;6]>*^^DZ,DR/Z&^'^.`\[XR-2FM 1251 MS%62D<YZI>V-S[BY0;FJA.FT!KQ!9?($1]5Z`2&Q%4$Z9Y;E<?6@G\'"E,?" 1252 M,"?C`KC5O%UG"FTU;Y-"D37I^/IH:#&4*9E*N!/%D%B)=-_KXVK:"I]!VJOF 1253 MKHCT_;#<8)Z6#6U2*![6(O'O^\&ZNM\&BSZ9XV.\>8ML4!W4KDYTD?CU^6MR 1254 M6;>HLJ>YK%M<B^$">DN=MVA74E`W&P@6UX3'2M;0]AE,<#NWA2KYP^,CPN,= 1255 M$9+D\V!NOP1_<O:I?93?'\4?G8Z*)9?8"DO'@V4@6AU_@(1P5<QP@[G(DNZ$ 1256 M$NBV1W)`S@HRA]-T(")]#SQ9,,P]A)CCVT`L^1[\T;`+K&HOQ4[18"@H?>LS 1257 ME!R/2;`HVO)T!'TTM/159].O1>FK7L6[%A<*&H442RGTA<'SR?0;+VGQF`Q- 1258 M2[JBGC-!:604!Y3,[`BZ\Y!%6TK%BI3)C"&;'HC?+!2RL9(9;]*T&S=.YI>7 1259 M0'O\+2JC^[%9$VU8#S.J89&^M#KU>55!1E2=5)$NGR4H)DU$@^+A=7K&BD%9 1260 M&PJJ"U:&D`/2E[GB8Q>C"P)!!6].\^-PT4M0F.J"%_...\2,,L##@2,B_&4? 1261 MPXS"^6U,%R@O@@4OAN4U:CBJ5V^0!*)])FZ0[%QX*VQ3ND<#O87O;V_*R4Y! 1262 M?CH$UQM)#I$S/\H5KA+3]2/;_D1AY$XMEXP0_;))0)F9")2K!@SOH4[-C(%@ 1263 M!W7J)_"6$LH_J!4L25IZ84B2EIX8V>),,#51[YOM87[VN%-OT+;_'ML\!OLP 1264 MWI2/_:TUK$2)!4(:-YPW";M`870_ZM&<"BF9&[CM58/2AK$Z@.TT"^VV36<S 1265 ML+0/@5/75H:#G$$)21K;$9+)#!>.(8+]N#**.V\QM%&ANTROGY8N4:_0??=/ 1266 M9B*3H<4\^>V`33E,"0_8-,=N<CQ:-+..,!Z\B>=QRN`$W;,1HYDV07&KQRR4 1267 M&7N6%+H+6+H'/'5#:+-"=[%+CY>$$/L6R?0;+VFQD$`P::_!K'9!+\[SW)9/ 1268 M-3UXA>(\%--#OD2#0BE'E?BZ?IH^+PMG)YM^XR4MRT+!_/3)/"YIVDW*"^:+ 1269 MD7R6BZ-,MQ^C&%J6F[SY-;+I@J4I;\:6##'Q?,RJX>U%!9GS9J0CK&7W5F'/ 1270 MO$LCBK*+ZI<W2H_BC\@0'M4XD15L`+Z&+T$1`IT>FN1/;V_G!<=A.($I7%VG 1271 M27LC^.G.59:T-X*?)F;![]BGF5.GO94<VO:*SI"J!.F+GW4=RU920E[1S-C: 1272 M]C1FI)0D-3DT[X'K[&"I\F)1/+W:FVVBF`X,RIO'.GQM;L-%HYO48$#(<((B 1273 M:@J>_7(,<]Y?PJ(2W)S-\P[S//3];E,)F4[PSGY'G2H%#^=TJ%+PVQNNM#4U 1274 MQRNUS+Q=&>'LVV^,8);Y51TNMX[Z<;S&L":G^6GSUM^&0=%:_7)++%$OLB93 1275 M/7=-)5=.PM*79O4!)K]PVM[NT(10:];^M'%[8RJS;%9BW)_L-(C%92]^_:C' 1276 MP]B^`D^,8]#CX2'.^<^?I)QBN@A!AP.0_RC</(TCE^.,^%Y%OGO@^3AL[[PG 1277 M].+?XS0^B28?A_2]Z62^@=_'F7_^[-RO$_]>_1G]N+\WQ[VO$YCCJ[[KH]S[ 1278 MV7_OULN"C_.4>R'T'H0^SF7N\>9Y'JY<7N7]F*<OAU'SO!_0W(_E&X<VCY'T 1279 M6NG]H.8^P,1A]"\.<O\^[MQ#U'F$7V.=P(R^(XX,=.C1X;@]M[N4LJ'E&L=. 1280 M>3LA<AE<31"W?)7[IY]7#8JF+>@"K5@`D\"\XCG1.<5!Y,?NW],H39%&\4Q/ 1281 MW8-%:<@+1<=A,<0)?Q&%0BUM?#V$5\^DP&3S(A;%8T3U\XI]'NJ_VW3R7J'? 1282 MNQD4#QV%/O#440C459$U$KZE8F($5C$QFEJ$0PE[4U$K$N03-,RGSJA@EJ:& 1283 M*#*?'HQ(=Q(0&39<]=\L?=0PGW:CPE:V[DF<DQ!2ED";HH9#-;89<%1O4(^$ 1284 M-O^M#Q;2I!-=^QN7K(0/7E0`:?MZ+>I^6IG%])KW#E0!CZ:^NV90^J`S]D!? 1285 M;MZ[-2#:@/2P6+A2M/RYZ!%(R6H*)*!O.>U#,"!]R<F\;=E)T:S3[&<<]SF0 1286 MLM0[YXG[".H.1@7NGWO<AU4,*9I"9/ES3;H9$(4GGX^/A4KNRN'I%S!S%PW+ 1287 MEQM,+U>X?+D+7_RE:I@^#+]1[\S+PJ)?5S4!B//!6RQ?4H/A@CJF+^[X^JS] 1288 M-_U(8JTW`VVVFZ!A9E\J`E[_@*+V;W,LBG^U3&G#_8:KX5_%,*8-)\X9-ER= 1289 M6=:N!_0-+!8#O1H0QU-I95NIEK]ON)21.^QS#_M<962H>/JWI>4J<LW.F#<P 1290 M:SU-=<)?3UL/G"X`.K!.HPWJQR,EE<NMRT/3;E@]'D]:`U#.-2=?N'H01R#J 1291 M#GYZ@->)9PX*P*L/\2`N4C2W</1!EXOO<.*&=6F8&=V$E46[V-Y93Q[?55&\ 1292 M2-A%T<O/67KA@5[U+[S.F^<"C"IGM=15PT2MTESD!+]R=7HA*^;.V>GU@BM^ 1293 M`+AZ46?IPX93K@7P5V=G'G#+7S6]\%%GIJS9<=:->M],5N'X=1*J2L8I=H_1 1294 MCU0I.C+O]'$Q/#^.<@U7+&"O9IWMI^6"S:^S)Y'97IU)*>S_L,O`V8[BCEOV 1295 M?]@/"AOL]WJH5TO?X'[#[7YQF$7?[&/;1KUOIX?Y!>O%,P^-\\NJ)--BN.$& 1296 MEVN8N>3")TNN&M0<G8:-W(=RC+9O#TX@Q=]4SB-8V02J.'RQ^[^&5<WX8C=Y 1297 M38TA7'J6(J!R;(J@ZW!/.L97=U`O44=G^]JG>?.TM<4URVK@((5]GZYV\KVA 1298 M1A/O%3_4G3#7JV;B`,;3-IKI(RD4N4\"%-9<M#"=:*S[<!1@L(9Q=7B4P!AA 1299 ML!&3H;[H`UX.AJ^.8=+OS<9W_4#6#W4?K"!*)Q@04)0%=GS),X)>F7!9M\EH 1300 M++:H"!,:9M84]CXL*BQHPK03'1HV6_V$H191OB86822K=U?X>J:*D<IV9]6P 1301 M"IW2#ZWVF;)9+AQJ-UW`*K]J^WE$O-"S*-*"'F03F/M1\4UZ-``O%Z)*L!)B 1302 M%1"5%4,+`L-/Q!M0YL69-(RO7RVLDJ6X:Z=RHK+:?J*%B8LRO$DMQ_XV=M1* 1303 M)\G\`:9K&)V<>G2)4=D#XX;1WJKOYCW4=FK1"J>-&!Y2[2M86+E9,S.SK.&= 1304 M(5:S+C*@\FLD1N65X=23%3['FV(UKVQ1WA3K-KW>D#8X#\6<557,:@78'&%5 1305 MS.]^`2LO\O;(PSP2_<C9;'(7)X5'0UPV=-OZBOD]@NF"-\2R3YU"E8RAWX/U 1306 MKFP7EC>P\GU+)TZYN?->F=%1)HQV,J[C/:#H=1%TKQ:\P;RSK'2:S5N\DI+, 1307 M3A'40&1/"*KS>@UG#9\SPD7!BL!;@=Z+KK,9H#8*)K79RH:8E#K8`(;.`=[C 1308 M1;V:$Y5XDN[M"!3<4&W/98-SRJJXVL5`BAF(JCBDEX-H\LFZMQ>.+R];JEH_ 1309 M"),C7]OU9.Q-PT9Z6-0E'U7)/1-OYYLJN<?9E27Z:KJ0!PX["8>E5_KAQ8+6 1310 MO8CXH,F=AJWL,W'%3DG72GH/(CZ=+#NMJA.E220C6%3;-;&WI/<Q;V",1H%. 1311 MU-&RR>[^Q0R["8JO3BDKVSL&AM5`/,-4?T$=+IOL'JYA=8ILLGNXIH9`EWVR 1312 M*48H62Z>[$MZ0ZU.>[WX?74GPIR2&2#"VWZI4R4QB5B?Q603'?5!/TAKTQ3U 1313 M,3T8)6H3$C'A5C_-)B1NY^EL"9^&[;)JIH^`X*TH6@:KD@-5U:)HME5[E(9L 1314 M%A$WHF909;&-5I#WINL+F#=AOP]/^+:F%@:M1@(IA11BJ4R;T>[!&I:-R.WO 1315 M7BPU;\)NGVQAP7I.(*7P*@MC&TBU>-$P:4A89W8;8#'4O'\N8@A19NU&9Y<Q 1316 M6Q98J08;-7%:2;]3HK)0*YE8\KLHUZ38\1'OW`;B#:SB**43%3$I3Z3O7*<= 1317 MADL4RU!$\YTGTX-%Z>O7Z8'Q=I4(B+4H-"J9?#AO-K\/'>71\#N-8L*X?II- 1318 M[\-Z%'HF;7H?QNOKI]GL/DP-UZF/\M4'E3(N`I*.V;_"]V0HLXR:[<;"ZJPI 1319 M2<1(&C;?R@5,JJW.I`"8^F89H=KWL3"+#M4^TIE'*AEKFULY;D>]?#`P"PDZ 1320 M$XNE@96*!6M5LJ/P>[%)2/H$FOV;3:;?:'H@:5SGV.BS8G#/M]DT.F]FYQ#1 1321 MC-?FS9`('@RMS7K1![!0)HO.3MEYC,V\L<DI\7:5AD(\)ICYM6DH.N%DYSQ_ 1322 ME&^R_YJZ!YUNLG,>F_0B22CJNX'<"_4)DX7-VP]GP3L_T;"*D]OZ)E.6UWP@ 1323 M&)AYC#ZN19GJO.5@U8Y;<A_4`,EDM%%'AM5(`L.4H*;,8MXR00WOJ14[$]34 1324 MRKGB+8_)=D[D"!G#&[,=B3=PVN"=(V4[0&>HE4/'__7VEUE3&[_P686;DG7I 1325 MBW,%+F=9[I5G/0E&&>X'%_4>'^`JN[U*?'-9;LJY]E2&>UY#:'V&8.[RIT/K 1326 M6XOU(K;^#R/JXW_^MQA"Z7'TC_Z)^IQ[D/KY]]<KG/?-':R'P8?NV6MM5'0_ 1327 M_W8UGA2/@;K48^\_2BFY5W8_I?=6VH-#]C]".Y_0*[6G1_IHU<>O?%Z41_AP 1328 MX7SZ5SJOXL-_N%1S^ZJO?)*=6G0,O7S[^WS(AS]B\U^M!_O?3W+_?I0/YV*M 1329 MKW1V&L]^BG=?X2UEZU\<6?_FR/K'/ZWM[L?_),J^P@_39I0]+2`Y=%%^9UWJ 1330 M79+PHRPJ/B)G+H61%?W@BNU,3DMNK<I1^7VMT]"7H*H#/Q9?7]N2)T*B5@^; 1331 MUT=[NT/!X$'1M,1S>ZESJ92D8$ES\8)*8@E00@(+E&+'G'.`(8DE6.*D8<AC 1332 M\4`L!K7KQT'A]^E]H%VT:%J:B6)G`FO!P]B2A>FUL^Z$7C#K,2<I,C'.T=#G 1333 MG3NJI*X/EM_@+,%5`BK7G^X"8<C7OR+G2!`BGZL@;[!>7@84UU]/(LA<%Q;A 1334 MR^(%\D3E*52OKN#+P@9"KAR+>H@(0Z[6!8K>0GADNH:#AF%>HR7.&IZ+-6H0 1335 M7B5<CP)A#(WRU^20&H.K`>`Y#BS#NTWU!4P_>[4/C/:!]#MN,*8*;-.4+4P_ 1336 M3-&=8-3HEJYBDVG09BDH6::2H744;0_).Y!1!]1L)HIV'$.6">:1H_-@>VD" 1337 M4R]L[]\X"7_OJP2X<`$HL+U_3!,US$C#23YVU2]4TL;EA+`PD6A0%:C6#!\Z 1338 M]L=9-,M7JT;[4VIIX\<I*$Q#,J11HS+8"*2R:@4EIQ1&C+6='3<S7X84@\C: 1339 MSH@59>'=N*GL.DG:P?>72M[";J0T]\[TD#(I;.-L^D%9H_"C6-J@T(W=U:L% 1340 M6\TO%<RSF`/6;:H`U'Q?9SW11ZWRD\H52(REF-\441FKY$+)M$HF%(5<T*HL 1341 M9JXLBE$&;=M%-"6M/_4"RCNEWM6BS(]T+E95Z,9%L_E:"J":Q6<SB=G0TMK, 1342 M9FJ3Z8&69S;3$`TM+2_S$NP:T]\7PFL>M,>LF9U#H>SC3_L#FWD>[R;)K%*N 1343 MOZ-_).<,C#GBV#>YSW6^EN*VDHV#+$Q09$R:ECYMR7?"SUBG:DE>B)IG,DU4 1344 M+,D(*(XX,8I#BP:E?4?W0/O.1/%+(.M#U>4V!-Y_:DV<-;QSF6Q>NNX=LP$H 1345 MV5$(C!\DK\^*YW4"B@(,+\]JO7FJ@CES@+2/SH`5UNSVDTJY<_Q)31%TMAY% 1346 M.YL"J_=PAKIHF/(TY5M5`ZD:W;FA0OD+CF;RVTY+W#":!>#HT+AJ/^!@I\X9 1347 M:OZNP^5*U'WPUQ[VT35+2UPGJ*]$59F5U`4E3TI:1+R&5='78KY6=YA.+N`M 1348 MS8$X3-K@C4DM>#_PMAGBQ"B^NJ#T/)U(L',_C>I,`GR:H&B[#V8,:),IQB6_ 1349 MPNGW\D$:5I9J_0MF1G&2DT%1\"O*XQ%-ORC-%>5M"&9H*B!H>Q$+JSBA@F<S 1350 M`VJ8<#%C3H*"/R8:6A2@MH[E5`-<6'#6@00LL.6[6#ZN815GM#W0[0_<$ARN 1351 M_'EZ]I-!43(JRJMC7@]K[^R_2#"PBE,J&.\`Z11\3*I$1:[4!'62+(=10L.> 1352 M<$!!2:HFZMX1\Y^LSZ7%,']U5JRXN;,])6_"%"2E+&R9I])KF*A5V=&\302& 1353 MS*OW]1<-DAYZZ*YT%8M\?496-MQKP7LX%U'#VP),R\GO\+93K"&N>+BH8?P^ 1354 M@WVDDD^SW9SL6Y+JG]5&(9D`^Z?1S$JRM%[3@H@;#6U2*/[T0+O83]"TVWYG 1355 MDQ\`+=DYF$W]%BBH9[,93Q3YEP3MXP071J_._<K&H5S--R`HSIFD(^QA?M4L 1356 M"4$IT1=MD%FYQ07%V8GF+3!A/=]3:ZCQ:%*:R)71@-L4!/'OW+W@!&]9"KL\ 1357 M4LR'5QC==^QB%IJ@^SY>S/0DTV]4Z+[GZY'I)(>=?^A^,7D_&^E'TY*<4^P, 1358 MTQ:5U8X?=E0%H&4K-&3;LX595LKF5Y(C<Q2QG)F#XY`S<R@`4JETV8HZ&E8J 1359 M73:BCB9F42>9!2<'ZI@M.YHW#(98J607*USUH32R;,471:QTK*QC`L:^M7), 1360 MU('N8Z?3AZBT;W"0*F8#\41UBDBZVF.#?<`%#GOOBC_&$^JQX4)L"6I(O!4N 1361 M>'%Z?PVK\TGVWMD=D/24`L[CE)(+_F+JKAJDZ(*_>+:SSP8YRJN78,G"FU>^ 1362 M@)6C0T+J@X:->.4OEA`+;_LO&2X:I-R!TUWIJC;ZT0E@6',`T_B5IR99\4K# 1363 M2N/6CPSVD4KCUDN-8X[U!">!<>].EEJI[3II`0YK0J&)A+%D-O6F'HCB43)B 1364 M=#/]DFB2E"B5#8I^3)N!4$V_%J6U5LW(R/"O:8N@,(;,*,42HADS&4%3HVC< 1365 M3$9XU+2T+(J97[+'V]R(;-XM&UJ2(/+EKZE[(%DAFY%%0TN?>+:\B[EUU$R9 1366 M>6.\8ETZ;!DXE&[0*891?;+1/J`Q#YDY$IKIAXL&V5>\'JHN[1,O=C1_\6Z0 1367 M$(),,UF8V8A7+\;\PIOWQ5'B]."93VHP<.J3?M\@#133"-N-L^][@<-NXR[F 1368 MVEW<H5,)]0Q!@@CN'\G"2L>/=A.R?5_`O$N[BW7(S'-?#@$:S/9]7$R/OV@X 1369 M]@:[:QT7\^8N[MA/Y<+5`@DM^-*8T0(3F@2FM#IE=(A6!M"P,B-$*P-H:F48 1370 MB&;[:^:738)NFW8SPX@K=-L1FAA8,+2KE417I9&X65`T8_H8%5I%EFAJ. 1371 MR:&:.BJ(3*A55%A0(X'C:/"1T<(JHDLZ42%:0168&?"J?0ZU:P+Q?J_*Y5S` 1372 M/%4:Y@$&T\D%S..>,$U5UK"9;PLS/_;J+0&FODG-)NK]1]-PPU]>/S+81U9< 1373 M$'IBF1WJET\6;KA\I!-WX/K1KQG7[Z"F.ZV9LJ\XP/U'1S#!1*L^*5M1_5)I 1374 M!PO,I?VI_=:G`3/,HAH2I2(J2II8]72:5BJ*56%.[9I$L,$LV_6(E!C*97_J 1375 M8WOUQ."^/(_MZ7$'LP+-<CBV,86=%..])'3>'1*A[=S??OM\?/Z7Q^=__7P^ 1376 M_@)$4+K>A;_]]C_^_OOOO_U#FN-_^NT??_^?__VW?_S;;_['7[Y^O'Z\?SQ_ 1377 M_.\?_^?'X\?G7W_\MW\7T@0]Y;_]]OO?'Y^__2[-Y3_]]N__Z_?7"!3?I*-Z 1378 MWW;]#JC]GBB8,W9`;4E$01L,=1'A&C>*?HU;1+_>\CYT<!)=0]Z%R;C0H3Q$ 1379 M4+=V.*L"9:^$),=.4G<*,D3Q,`(`(K(PPB))Q%[<WLNQ]]+V3NK6QU`R[O() 1380 MIKM\9.DN'T>\PZ*.=\DR#G>I"Q.(*-(%57OI4?SZ^.ITIY/3PKKB!).QY]," 1381 MF$.%A(,[))@XR&-P[4\FF#C)+9EG,*2>5!)Z_L5(%AE`&.<QW+]ZN[^_)`FE 1382 MO<9Q"%]Y_OO*CWK_>F<Y]X'31=X7.1Q7^1HC4T-R-3QP`N_^MCY!3F5?9PAL 1383 M%9D'XE3552;B=/E)I,J8,I'H#=)5TY"JVCDA59IS0`&7I2`<!.SN8/4/BF:D 1384 M%A'"EFBO:$;."/3BY9JLPW1-9F&\EGC"/0QO#[63%,.TKNG+2-`NI<,E.S\" 1385 M?89K/`BMW5%5G%DUJ!T%0E@M"HI&DA%)$PJ(#)J\,KRHER3783V'KJ-,;;B# 1386 M:$$LC'=[^CQYIX]`P8O1W[=:>40!1VM![0,/MQ0$5'4ZOS@*F?G7D9C,62@3 1387 M?F4:K;\GCQFO!2R9^-+LE[F+A^W5_]F3882["--XI9.7Q)-7]$-3>MY73TN; 1388 M)[A\^7<\6=S)<5[OAQ<NXE_N.!E,NW_U8UO.5N=&RMB)#!95Y""9P5*(U;R9 1389 MU3SD(!:3(!9^Q/-_B5\6#F'QZQ`6.BHSK1G&VB;GJ\SY)=:_%@[S]_O*[N)= 1390 M@&5Y_I19U.:/.=YV1L+*-'_@42%D:6S8349`9:X0%X@(L'P:X#OF58<?/@.J 1391 M#@=^V@RH^AC41T%`5;]HQ'$3(ERJG3;$2A=0A0"_+'?'BLMW/,C\#BX_=]Q5 1392 M'>`[EO^X2RXX7\S\9&"QX\+CA=06P#V`IJ*MOR/\31RCP?<'Z:/^SZ:/RO?W 1393 MD$V[GZX4YT<7WWV;CSWU\OR>1@[H^?]'P(.;^E?V?IRS]I7Z1Q<OMG3XZ@IO 1394 M^K5_]/NWYL?7Y@Y^,Y!A?,/]??P"(Y4GJUTY$R2[<E94CICUI.)Z:DE1L7E` 1395 M^A+7H=PI7L.)\8H2**W]9>RE+C'$A_(,*!-5UE2<;32@0E1)4W&6D?15%53H 1396 MB0)5ZDL@2<<?W,?C=K>XC>=G>HVQ^WUR',\#\1IC_WC3W44%L6-<(':*-]N_ 1397 M9RXG=SKF6G(K8.SR=I4Q*3A?-5WBQ2;]18VQ^@.8K"3&F!W.\!#@?F4!S/T* 1398 M4/`ZI@5:$)#R2@DZ:0BP`$R`R+\36<VS0@%\7O[^QA'V-OG0%+/-U,Q?V+Q7 1399 M1D;D#8&`(YN""S'5&?Q'V\[\FS3=N(26F>65UJ:ZG'QWECYAC_)H0@B@.`3W 1400 MKRM'/2<]/G)G@J7_DT]F6>X]X?WDFVEJ08$8:WHE8;?IY<+;#>FEO5UZN'"? 1401 M`DU[N#AHWRX^SOVE2S5EJ%U.\OB!M2;FXEJ+VIAL&"RV\,N#'!>"B#.1Q<(E 1402 M`"[!D/[NO^V+A)>EPFZ%[H$MMP4P4VY((7'(P)`K4DB`+S+C@O=``"\PX@6` 1403 M>C&E8:K4DN_B\@G<2C54,LA6GEO;F(`L:Q\H"U\M\6I=)7AOTN<YT#J!5%&1 1404 M0`H=ZAPS)I`"A%OL+]W!`4IDK^`"@O`M@$0;TJ\P%.1WG0O^_"CN(%K,XA)? 1405 ML:_B82KH4KT<`_GZI[+#]W+Z-`RD'YG?!`2D4,;"UJ>+)1"*:88PQ3\!<THP 1406 MZ7F[3G"-AVE1?Q6N23F,\)OEK3UO[>GB_@`_<;II,Q$M7KJ_P#66]T$+UKQ& 1407 MQY0$08CJ4E<+S2`IC1&N_<5UX&N9[<@?98:>TDVIINH:"RJ("4S3[^UAZU\* 1408 MNTG_=$VF?[JFG2;!_5*J;2_2)FPD0G\)KL-V35;%",_#:R@,POU+63.9V7IC 1409 MA9(#3\/V2X2[&)4+M-/\AFT^`[P_79,)<EP+\P`)/?P"*V,_H'7RA:^360CK 1410 M.'6/CE^8#E_?\HH_-!U&D``BFPXQMF0:UBF25S.#_`=+'W\0G,`5YS.V2A:_ 1411 MAD3*`AFE9HN&411"VR<K/FQ5+(J&V;Y6<K*ZK2H$6:&;&YV#LB;C&DY\73IM 1412 M`N2&.@9;(1,@MZ68!-5'N>W6S7S;+:`)$16PUN!387.`RNAJ\%NUFQ@=/%SK 1413 M'/8]45W7I2$;A8=K'N0ZQ7"I-1F12*^V#BE<>WA"Q"GS824-1-T5:=+6^8)K 1414 MZT^(.&5DK*2U9$0B_1SLJF+%E!'62QDI_"R/SVH*4?9*?KKJV2F+925)CZS( 1415 M+/K1]BFB7T&$S<`1;Z*412$I!DF(\/%%`;KQ9%.79S=$'(W/JVZ*H<F(D$%Y 1416 MHYF2H_22Y9J^([HF7;M?BQ@709*/_[I%]JN^IV^G&U"G$:A7_AH%PE*_7@+< 1417 MI"%S[#0@G9K*J;/<OUSH?YZ,>Z@QK>LX+KW>]?S'OT^5IA,,8V_II<#^T"VD 1418 M>;L<G&VY?%=P\H_*4P'2;4Q+#DQ<V0&=:R059CXL@5HEW)#*:F1H):F!)"XT 1419 M!1.CH>O*^BK)A[2G?B=S^)N625!&(#Z',H048I71!:`/<$VC"]OS40:@MPLP 1420 M%PG:I9BF]!^A70I="IL-0(]&\0+C0QEFEG`4F:7>Q'@0X9ID,')K8[(FM=,F 1421 M1_=GN,;D1P_SMZYO[!5#Z57+4JQ>IJ4=@RWBQMH`C"4R7>8KF%=^4N&>46D5 1422 MA35!+XD4519,ZOJ;"P[#KQ.%AX#2%/]UJ[+4(WR+DC>-R>?_I5C@X"PG&_D/ 1423 M.H&7&8,'"B)H;"#)[0(`;O@9BN/H5*[&WWB]:>$!O:$!KC$AJ?$W3E?*]$9; 1424 M"QN)>6NIB.A08]XD*B(Z^%>VJ$-!ZKP0WEW@Q$ZLZ8N5?&G9I=4BM7BUJA/N 1425 M6".7%B-^P.6FO%Z*(8AWAA;DBKPF:>2@*S!.W\&'(CZ>::2F^SQ=L5F$[:_+ 1426 M&W09=;%^:F"'7OE'E[+,K/+<VCHBNW`"M2+]`L.BIZB+\)I!%WTC3MW)^1YF 1427 ME.D2A=VWO-JYTYZ_:^L%-N_G[=U#\Y70:_.M[G2QE_++@'B1PMI'5<4\,D5+ 1428 M<JD^$YC:4:?"4W^I7?(+]\S"/4]P+7D/@%(%<(MC`%6!N`T9]TBZQE?`95!O 1429 MVFY0M_[H&E\1[1#EINT$!9Z/US@%^+P"_8>-'J_5%*$APAW;+DB[+.8Y4SOI 1430 MH7Z;`33AXZY;X!K?V&]OZ)G1#!>JC(UWNX8C!.;3<*3,>"J.%^ZL.&[>'0N. 1431 M'G;*@F\!/19\&]A!"[Z5\`(0/=._;EA]RV[:0R.ZB80_Z<D,@@0Z?"LX7[E< 1432 MV1N08/]/Y6\0TL@1T.P19QV0?[BH$)5)P?[QJ!"5',#]9(6HE("!Z.`&["<C 1433 M`)4:=9EZ!B3XBNYI"-`*B.H>J-&XAV>I8(&`=[7]IHH`FG7E01SC1202X\4T 1434 M*\8+HP_4'4ZN,<;K&)L?67[)VAO6=DXQ17&&J.#6!QL=2%WI7S?\00#0N5OE 1435 M]XCYD1TK34TSC>K38P><\8=]!R3-\3\4<[#KBS;F(,,.GIU2&%$-(K4KL#`9 1436 M;UI)`J7FIE4@TOY19?)"_=/#]10FL967/@6"(:_&BK(86T:\&@]RQ$`R#`1& 1437 M7HW'&G+D+*I4:.4DYH^!Q'BZ@[]KE9;:285$E0VCY3``&%5>W+PPF,[#-9OA 1438 MW!#;..I_7K*Y[6!?<9)+CKOA6PM?T<3.JRH_PUV\?75<P?''_/5DD*;R+S#6 1439 M\-<CWK3A?F/W6AJR9!<;[VQ7_Z9B^O=UTD$<S+"W93"K\&)"=Q2Z*-'=1O.$ 1440 MQI)RT^:1W=W&/!N]IA$Z0'\;!5.@/PZO=W\;<F;TSP5H)Q/@G_&WH604X'GH 1441 M8RDW;7^A"0K0/]I?>$("S"@:9%!SP\!;]%&LS)RM8`]]C^&V28O(<>@#11N- 1442 MOVGI$3D0)EBCC86NL0PDAK>CM.FW=F1(Z.="F]'.D/+V@FCS008F^1OP,-Z! 1443 M`UUPB@9TB>)JA:DCZWL$P72\HO`'$,3R+S#$<`C?75EJAS_^%?]0,X1=])N` 1444 M?#@\(8-4D)<M!HL>2C#GO`992:3R`*0%KAV=*AWH7K>^+<J1:7!-=A=V.#CX 1445 M&,?=4UB:SUV2$G6T!"7JI_%54%=DN<%'%+E<OST_A!/3*>38%<MH8>=MA 1446 MPPIRB<E#;)!<VY7*MM)I1?<MP4IGP\)7`UW)?@:U"8$I5K5E5J:,:N=;GRX' 1447 M=DD<NN>_)@OH?Y.DH_=X8AD0M%)`2BO_NIWE=;6!IFYC2=-YT2TO_2B3'IP5 1448 MN^=CN$%>_@$Z5YR&EU=YY_M7.?]\-1!(_ZE)$SZC`N)!06,+J=G$R\FKNR1% 1449 MM9G0YY.!GM.O.!T)MQ-5$96Z5/L+FRI5'@;N**I@/=_2$,`:]9QS@59">A-9 1450 M4\OI#9_UO.)7*+PT*08*AS\O>:Q9B)<H2L2.+XN^Q%JXV'.2GJM<>IE8>A!E 1451 M:*&9-NJNH_35Y-+?T&O`?OHH72\/"@TZ\"6;B,/VX"`OL72/.T3:>:!V<LU1 1452 M=AX$V0)R8/D%P6/GI^$OOL41$?(:>UBXV*.TM@>B[*6VE\7@46"?+06C0*0\ 1453 M&-J!T<5'84SLGKNA,XSLR%[?,:,_V,S%"4YL]Z#4"L=VCX`T[$,?B$H49QI. 1454 M/.-^5`:&0Y5H(J@5L=-"152J?%#M;,A((J4\<<4HCSYI<]*+1T2E<XH__&`$ 1455 M2_QA/3MPSXV6`K\@"H$4["RY446N6%ZC:W#@2;#UV#A)0)1P<)7&&A"1J`F3 1456 MV<H(1_=S'ECENP+>%1%Q4DZ&((F!9[M/O$F&B2/1E,-&*HY9A7T4''LALK@N 1457 M^!T@#*&`!%C^=;L01H^.0.H1'IWF5CR0816:/L5A!>U9*R/(5)A'>;LPTL/. 1458 M#;F,K+*Y4_>3QO+]]<C?)(C)GFWMICW8E)/"*D@CE8/)Y!,>$5R!OL;Q&Q>& 1459 M^",NBHI#_"?$GVA65.Q9E+Z*ACA^2"`V<RSHB\?HE^0UQS*,\W"U),:\VG[. 1460 M<\KH>DF;B>_\&?!:I%Q&9@X<W@$)-9[E\F5XIC[$,4HT.F=%"MIZH-$Y++K" 1461 MD-SF%`2Y8P2Q_6M+)19K..?_ZCP^5EZVE&"=R2=I&8?J2V?W.55M;4)*<6=? 1462 M)W%6!L@P.0!R;06D(.,DISNK7./"(CSW$.5R"?SJ;2#M&%5SVE=I)R7GW;[O 1463 MDNTPW\7VEZ"==ER,R(Q`'^`:9R2S1D)/).<.<7MRZE"`RAX`+LXX-L:PL#1^ 1464 M66&*%>3Y^BNS9;_BR0)'@%8:?W2K>,^<+9TYAJF^]&S]833O.?K@!8XO%WN< 1465 MUJ!M;W=TXM933QXG4W0CG>5DEVD:VB]<2[MEX(]L[$/NXBD`H;%2#JU20;49 1466 M95P[=64C.K!R[Z2&`,Z;CN_`(KWH1RQ\+V:__[/X#[]=ZW@0E3D/8@C=&>$: 1467 MC>F8"DLAI*08H3&EP#6I2LIB@B84UEO02H)6$U;PE-FD`(`GI*!+`M50'?8L 1468 MGQ0IB!A#1C92U#DQIHP\%DH%Y2"S\RM68?PW"H8CKXE$9HOW6Y2<A$>R5E`& 1469 MZB\PNIV?Y(C8F`GM,YEVG*3:PS<&]L9$L'?M%H651_::__7O\NM"WBN(9I4# 1470 MI42@Y1ARD6@Y/EQ$VJRH1(S@W-F@()%JH^HK*4CDVBWI-BB,-[DQ5!7,D`EA 1471 M+W-&&I&`,`9$$-:M(O:3%<*"&B-L<6.$5B]+:>108^FKP??`%.QFYA6>$*'O 1472 M/F`G!0%E&W5L9DF(8'4J%O-5:2(L#,44JC21.H&/*+`T$9YY0C=@:2(\OV[9 1473 MOF_:PT,[M(3BHKN&!!@)Q<6]F807U-/1&>/A6CRKG$DMADQ6DI>="6)64,Y> 1474 MAB6HAT*M8`T"KPT19[F$6BD<DD9"6>$IH'3$PA*6Y(>AV]GF_DS9=CE$5=`; 1475 M4=+?M`&'P4:7>Z@_>ZD!4R1^W;^$9390?-HO"'=#;2^\PRPV%*<P0R4(7ATX 1476 M_^JQZ!`",R/DNN;W*J-]QL=UW;#;<'N<W%<8641!,F:_G'^Y3NJ&.NG\R+^- 1477 MO:>NT<23MO][:I!=R.J,_-L859%^QE^MRT??.%%%<6P@&+:@6+)C/L?&`<]L 1478 M396Y$DAX.>M86]$#;;"(JJ^@H*T.@M@:G,)8O22AGE:[2D_/"'!V"*:K9P2X 1479 MQ@9*[A4!3I,G@(N$(.#@7!.8"HI&%!M60Q(,2!0;%H8LPE$.:,,JZB:'""NN 1480 MH/O<M%,4G9:)0XBO7)294Q`P8@(C++`0&VI-GKEF@KL;<R-T*-^5.YD:Q9Q, 1481 M/U*01A2LE/&8XW4]VZF7U'ER),D_Q7Q-6EA^N];YB#:LV&O:P?$\1S(M?M?% 1482 MPW'U6G=WGH=\#324]@O,VLC7!B,;["P,;M8O3TU+&%D^5;A5-RV_5S&!8?C* 1483 MHYQ19U33#G9RJ9Z#\P#ES!V=GX59D*7_Z:=6MRQF]>1^5]$?D%@MS.Q;%C9" 1484 MIGAZ0&IN!92YVS*2Q-LG*UE2-WJ!20XM1SJ62@C,<LPPTK%L`OU)N`+<##'` 1485 M"RR2(#`A+,)U`O6.);8&P*&J'FC8VKYH=.`C47%=!.FI;I".AB10!43NC\@+ 1486 MP]R6!!CG@VQT7.EP89P)LM&1+HG]U0TC6R5B";_'C@TUC</<;D\*KY\NDGD] 1487 M?\[S[UE;XHFL;ZEZ]"6?J_[^U<=X=_#-@GK3?D$JLGRSP_O4O]/SL5![XQV? 1488 M<=8Y>,Z"2;.\1WP_3^JG1"7.]+;/8:0IGZ-(B.=O\,'?X.<WWZ"U/>_?8#I$ 1489 M#$N'P[C=N:G/\]3/'T*R;D6-8IR+XVTX9_I.08-Q2;O(EEX4+MU_LKC4#M)X 1490 MTM(,X1WE--'Y,7>($T77]\VYF%'3<6[HH@M$%Q2=)']B?VT#`ST904[017#( 1491 M!"S`T8?,14!=0E29RA4MBVV,<D1(W&G%<X3]1H-R*(A"F5TCJD2W\8L8<8U1 1492 M);,I6K#@$TP:KD8E><?O/8.%'_MH!N7\*X6*H?T<W8EQI@0-@C`N`1HT'3V( 1493 M,&;>7M.Q_P`[;!O&.5F`L45",!*MS_T*?HLPKBBR+W#;7*N?("Q[;AOQ371; 1494 M6W^OWV#\O0P,MT\VL,W/XXEJ^CFPYX@>)_M</:^[.^D4<6_/.^Y1SUV,[<@2 1495 M<I]**T57T=@),,RX7Z]V-N;!'I`.#XSP5QK:WZAG=BUT9$8/X]XTZ@W_XS"S 1496 MGR(=[1(G\W^*K>[4)I_+W!Z?OM?"]:>`%V>9RR'PG7KGLVNHY7TGIZ3>&)SK 1497 M1ON'.SY[^G3NZ=6I7Z7[:Z14SVW&I=>C?-8A`?9"4I^]Z!39&AMO;>[X/AAI 1498 MS[),1X2999L]?W+3(-<Y-%G!G-3C8YQ3'[,E%QV5<?G0DJ47U51U#^JI[@=< 1499 MB]+`'R/B+$%^=@\ZF;/&!3D2&K5-B]&GQ(`&`<B`Q'<FN`0;S:<.)V6`V5S4 1500 M8JODH!"HSG16E&3P(I"U8K]33BE+]>@51+,+$$\L8K*=3Z\A;BAR0(S@7/]O 1501 MPZ5>QJ%P*=UW6'HI<:JZSP;FX`<-LVU$P1)1,8VI)TS>07A3@L4*XPVUO#_! 1502 M8GIQAEK>7O6=#%SUG!"L3X1AV(%>_Y/C!G34'FCW0$(!MQQ&T!!(LFBXC[5B 1503 M^(:U6L;UXAXLW+-G]=Q&Z&4Y+G!L+1HK6DF8IH&QU=#'%7CSX>ILXRHMN_+8 1504 M>M3&PQO0V&SZ?]W\:^*PU61@B+_`6]2WE;X#K+)H7_.JJQVR"SUE%RH]"^K9 1505 M=Y/YUXSD/E62/#(!1QGED^V7]V/D##^FT0&B57,O/%@?+GYVEG=N+'44&G1] 1506 MWW#'J[WSPX6^FY1>=O!S9&6YX4G.Y^;SQQDDLM-\&^OJU>9282Z59XK]+<BK 1507 M6$]';I5V4)6<02:6=I`E5;?U67:0K8P(2@"(VSJ-.'HI90D#I8\W[J`JK1SA 1508 M>XX[6/:!4I]Y!]L^3@[!BY>HL(Z@8.*/C')Y]F9H*5:/4=9*JZ&E6#[=;]I1 1509 MUE\5RMJKH543SO*VFER6N)-!_3Z]D3:;9%"6XX^]WV)0]B\JE'V,B,KVX]>[ 1510 M<9@?_W"$RN;C=MJ$OZ:V^A\[;88?4P4PMOW^N(%M7PO#^+-X<3HY-CERR<D% 1511 MYJ#!P=/B]'Y=$^?'S+^\.#\7QR&ST8P-(E,1N;.6BXN5"G%LT4CZ7\+;X829 1512 MY'Y)%8<P]82N,DPGUO)NG4,(8FCJU1[R8.4GLXW/,*(:.^ESI+L^IU7X[9^A 1513 M!PKX9Z^5E]Y8VJ&]XV>/V#F5A,Z[>X#CX]-W"[`?(0B?B7>`SW^:+"LVJ(=H 1514 M#-]5[<X05YW@])WDV*_%RG1;AA%]6$95*'UWU=!R85=&.3_?T$J$LNJX&91, 1515 MFQHEXZ9&V4XP'.FX"_`Q((RJDT`4K3BG&%;\0Q.3WTIUS+XKU4/;07HW!+'H 1516 M%7%++'6%<JC?,"QZA8*IWS!B9G'K+VX8A10A5N%KGQBG3'URK=(AH">)-76K 1517 M;7&ZSY5G!`I=NE/:+MV8Y(K%1KHFE8RN>:\L:R99NZ28#P;)6)=W2A)R&?0P 1518 MFXJ2([NPS[R#'B:9P7!#H\P)JA-!PN+"9.+SBX.N*9`KD:`7!WX-[NSOY'JC 1519 M\$Z_..X*%E@<]>P+C3,.3`CN%SC53G;*I4+)XC)/$.F<<K+7DXOV(*P>*/X< 1520 MA/,RO(FYCO\B!\V]XO;QJ)\C\\N_G7N4SDJ'>>54!D\1N-M37NGS(B3RNS)U 1521 MG]\P3;;@.]`F7$'S"BTB-@O@X3H,-EA$BI+6"X.\AN-.BD9P[C3O("]WC=)Z 1522 M5RCSLQ'!@V@CF8Q1SEP).ZV8>AGFT'=OB.6L;>Q9PKA5'\V@7#A3H1SV-(J$ 1523 MW\3>S%(9@7QPI=\H65(CD**C-8HG[JE.XPYR(*1&V<]P;+VJ"(M_'C^A+/+\ 1524 MO(R(,K@;6[LVLS/"X>R>)#60!>,R*).K,"[9<,IR+.<MC?^I$K;G4B#M?Y8K 1525 MZ<9KT>DYE*F'^$+D9X*STM*O."O-OZ9?G^.3PDAA._7U-'C/"$UZ^?'O$.,B 1526 MGW%T,BR/S*@.2V\<^G@W#)_B7.[,Z!0%60W_#YZV(L+<-\R(XY(2'*R6O'(H 1527 M2O#?N;0P@JP!1N)]V^@H(ILPVH#J1D<J'_87-XR,/HBA4+,PD9WX<CY1GN:< 1528 M`*)$RI-7)`^W3XX,]P<`N'1/AG&NS+G/L6.R*-?=,1!N-+PS,AQNIY><WALO 1529 M`V(*+F=`/00$?GH9$D%!!C4@E0Q!/GK\=0G#DB\S"N+)XE=<QK49F/$$D6`) 1530 M!#>)NG$JCC#!<6+I%QPG]L:O;FSSPY;VFCY\_KR>XJ(_=;*I=YU_/=>_TVC6 1531 MXP8]*6F9U::^O9\4=2A7[_%?*JU@//A??Z0]R2ECF6<`!"4^8XSM/&@W43GA 1532 M(#F7#5.YXF`-*ANF<\2AP[9AQ.D18V9_13AX1EK?!/F!&F"L5;6-D*/OF!(5 1533 M1D7)!V9@GQQVI^YO.^AA*@ED=S<6T.4=+\(/P(#XM]U-"O)5!,2KC44*11V, 1534 M,.<,J'F,\+VR`>6F32K(<_WPU**I?*I59!CG[;='XRUC]]?]C<(['#B6?L&! 1535 M8\.\W3\2$-R[U2(\>VF[,`)K7F$(Z:]U;$B7YG%O')D4_I3%W\/2D:#2D<KB 1536 M?%S(X_AM7AWXEWZ4'XU?%Z0#ST5-)(BA+W7'G)UM="Y`2J-7="SU$1W(N4Y1 1537 M*NN<@PU,@2#Y*CBH=<6P6"37)C*56Y;`,Z(J%U71RCE.A*KT4T4KWE?5<3,H 1538 MR]\*Y:!B1-D./(.1<4?FO`="N>IZ,+049,HH.S"]H9W%772O66/DYD2,7)R7 1539 M3W'$+CW</=^44'&1QITVXRK49N&PTQ9<B=QOWE$Q%B,J4>.F!W;=\[NR<YZX 1540 MJ+CEF8;]J>36DUS?H-X92^6!&?P.+FY&))1@($N]F#^\F)[)7I*8<VX(1D02 1541 MS4V9FMGBXT$-&1HXJC3WX:F_B^@L:=,2V^*U,@)GDZ5?<#:9R$*#@PXKM)^. 1542 MQJ_A;#S%(F&JZ<2?(VTTOP8;[D:0`?1$C.<0B7H)XI[7]AP9:D^,/QZ'F87/ 1543 MD4S1'I^=AY4>I!*'$;J<C-P=GR/#8D2N7/!HG4SQ^@,^[=:13VQTAK/,$I]E 1544 MQGL@EH$@VUY<?W-!Z[N$%9/:66Z<"S.-(7>HLP^_^UIKR\7\@M/F$IRPE7[% 1545 M"5OO)^R:4N?@_<T&^'T9@\T(!6=FI5!4-HJDBXQ=A&MILV]-\*H8T$;/S$;P 1546 MIC[TC9X];UO_V>*-QZ-Q\5GN#1(@.X_=O($1'0)2&9<`V63I)3.0<0F0C9:> 1547 M&??6?[)XU#/*N&:C&STYZ[H34<?35$3Y#)IJ:$F)8)0WAF)HR76B^RT[JLXY 1548 M9917$J+R,X_H971L.Y9='+JV739PI;%)Q)EV-VM\D.N`,W40C88='T>SX7SH 1549 MB\:QY/!-'`P4S;4@+"F,5$LS7Q#6`T:J$<6%/7D`I"3P`J0F,(A462UPVKR* 1550 M6L;($#7*)M^`*#N[PTXK`;O8;S4HBZ$*Y5)&@JY((BC$.3;^J2K5Y>6`A,VQ 1551 M@2=^2PEP78MW"02DZ$DX*WFR"L00D8\Y\#8?[A)=1%YG]CC?OD@`@,T"M(U? 1552 M<*+:"[?_,)(F1X31\CY_O<X_AE>:"V]%WE/2JKR<GWF6V\GO\DR4F52>*W+U 1553 MG8:<X$?AN[.]C@R'9Y(-J*SH5!>[\;+G*,497A1[$1YWC'3+'GC4$Y7<J>V- 1554 M@%8W3D"-[T]_%6.D+"R?$-%Z:6&9>9>LTL'I;TE.?R.#/@GD'&R*#DN.-`T[ 1555 M2*;[@"!;Z<-.2GJ'ZC3M(+MK-$IY`PJ5\S,*:1I2QP:21PD7X3U;>D@C)5P$ 1556 M^63I(:%4]1\LSI7W-ER4`(T'2=5R%!.#)F8&(Y_JHN@HVHA!.?])T9&)&?MC 1557 M&S/>S$9F!R$Z.Z0"P);Y60>`$:@"P)"261N!*@`,*:7"&_29=U`%@!&H`\`F 1558 MJM;%,70]^LF20&^]'IA.?O)%!_:)J"A%J($>PPZ*!5O#4K))P9+\0E6-Q>E$ 1559 M58QU"26FH>`43^(85CI6=D?N!$_&<'NQ8XX3&P#G.9#[-JU`5PQ7#6L+`@L[ 1560 M1RV(B^R]2A\\><LDSI-6*!24XAZV^*5Q3LL[39]L.W!\7/H5Q\?)MC.VFJEG 1561 M7MK>1_VV,+>8TL.9AN.]6P+'.7-#'QW)K\]>WVC9!D_]]2E)="OM-8[$"#]W 1562 M&#=M\V'4?"N?(U^V/GJPZZB4=.XWXS2=_';NGZ;!7EOM50H>G#.7(MOL\9#8 1563 MBNR/B_(@[\L[2/9GCR#N'8IRU27&'JN&EFL`H>7W%8CX6+G-S%4NCW5;B:OJ 1564 M6C;,U;[$G@04&&Q0T5N$]W"P#V&!2W_@2,BC2.%`E:_)YE*!`GV&!9Y3@`8C 1565 M=PI77\[;76'#:/M!C((2YI<M&%>HOTE85-TP=9`(@9+AM1%2&#[VR%D=>'?; 1566 ML`(+BC#VL>3)_N_@3$D,B2LE:3+ZW189AZ5%348B$/;F-<95$P!3QZFTY:BD 1567 M/9U8*(9JS0"-)V\;$-]TU^X/K]P?>!X%L]Z[JC&G$I"E),IP9P(C!2/*KSA# 1568 M;WHP9UZ95]Z2\'[.<U!.5CCE<R+USU'FY'$?KLRWF(@@9FD4T_SL=0+:>4?K 1569 M'977>PCHKQ[CE'NI`/]9F,G^<5`!,,PNA=L8`Y+!I0Y<@I/[$I_<=Q-/Y3+T 1570 MX\)#VW_3&*T>=!$$^/R`C`\(@=YXY>&]O/0(I.]YQ]C2L?$!$A@+7"-/T&F= 1571 MTB[97'<IPX%>R`K7F!,3V>3-;L"YHOGO51]M?AEDM)3U"R?8I5]R@ET/M1N[ 1572 M[UJK09U7YT]5K_OQ+JR88A[^+JQNU_7\?II/@F/K4F*;\%+$R27MD*.[ANBJ 1573 M8]%V2DZK9W15LJ@[)2?:8Y\_@T%)K=!HE@*LC(F];!5CZPV9&\1^(PU2<BU= 1574 MW"&V'6D0:VJ\N$,L/-LSRD6#V.9T@^<$D;V!;A"#,WK@?@8%DQ-N@SV-TRN8 1575 MK:#>4D\!:NNY;B"91A5(CC0%<B@>2W\<EDX[E:"<K6!H2?D7%&H8;K1))#FL 1576 M,&ON#ALF%<X94TFV"B3]C$"I%!4V2E)5^3F\[2,JB]-MG<8-A*PD1!WWBJA8 1577 M0\9/'6_@=Q8/O.!B#7&67I(H&==A'!L]IY#J[H.!V1:B83:%*%C\G7R.G>3[ 1578 M1(*V]&BF`F5[_]6`2BH9'_O/"#<&!>G?]><Z7PY/*^HB&1U[(Q5I!)N+M$#B 1579 M)\7B4#(H^>4H)6CNO-+3-*O)!CC$O+NN=*>JV]V48?9GX,H"0<6J?6%B$!SI 1580 MF'[!D8X0'2HNV/"*[SNE#,TJ`^$5[BM!=-:/&D;<,#)$1:*KO4S=<Q0X+R,] 1581 MJ/8=-[_2LW9-]UFF0IU/J?'4@9_GA/&IZT.'CL-*FQXN?;IIIJWO41&O^W/= 1582 M,-%VAVZO07"\<Q<=7RZ?N_JG*Q-U\ZS97ES]$[3J_YOZ>$Y+B'`@99(#*9T8 1583 M?K+FN$%_(-(@S"!=W"'?CS0(.X@7=VS^S:`91;CHRE\T"`O!!G"@+!,HN$G( 1584 M*'H#)PE32001VTZQM`@0,M^"_B122-W=#,H>&H6*D6T4^KM!)1KVD3&J'$V* 1585 M5LK\$:H<38J6LPA4O]6@'.^D4.64(A3+2H]\(CQ5N"*(1:05)9N1"<2"T(J2 1586 M*\5BGW$'*3U*@921H$`V-]*N@:]9`<,C?)&.3(:$X5&]2$>>,.RO;!@6[",, 1587 M_6Z$\1KCHKZB]4L17XDXRYH,ZH;0Z)J&Q'H<56_P=?.M6"6$7@P*A/"^%F%G 1588 MFLH5%*R_B5F"=BVRW))BB15UI@I'=X6UKPV1G].V`MNW=#4<VK>&1D-V7=BO 1589 M0,/^!:>TSNUHYJZ>?]Y71%$'AY57U+I$M6[BV)+BK*7Z7$>8]S]2SV;H_QV) 1590 MKN>_SPQIK//,#N=6"-'<B$;L4>D96;$["\,H6.`_^QX7N]VW;S^?<)C'17C1 1591 M=P[$JZQ6K_<B.!@V98=G!8FOK"J%@+T_#$L(6S34K`@Q++)=,-3L&M)])P/K 1592 MN#V&19)7<%CVW25$BW5L`7%9=Z%]VM,60(4UH'TN?[E_*3]RP])[%I"79P/: 1593 M>5.A"!<59TJ@.N@$*54&FJHA$3=*E95&?=8=9'\;@NQOVV_G-(O!I;FT"]D< 1594 M&<4#QS9:LE@RRE&.T=!RC*OJ-^PHZP@*Q0/#!!6!AXQRK!RS2>$ZJG6/D_W) 1595 M\;OV&U&T/+VJW[RC^KLA5$?`#G0D@DW.G%>-,DDP6R$:\^J^"L/<)29TFMSX 1596 M8*_^<PX=@Y)=B0-SJ9B[*A0#9_VF7WK6[V#!KU5T[`M+Q8SC/4ZNVFVXLW1L 1597 M/SF[F]^&#^TK/,?%.-H#'''.O]K(:>DI9Z>,/QAP7&7$_".-X(WPZF7&[I_U 1598 MRC"L)/W//_2?35LP^\_@0.&4D^*N;$'+)&K*[YX1SFJA:FHE;&YEL).AEM1( 1599 MU7<VL#[8B^&JEC;#G.LMKW,0K%_G("$E6MC(SA/F>KC)4.O7X;ZSA;FNB8;Y 1600 MP`0%DW2X'$>*"R?`\`@0I".C-V%X]`?2D:T;^RL;1OP7,0IW0&R3!CU)SA(+ 1601 M&A`6A3(8:MY4&1;3DC?4$I"@^HX&%C52P:)$(BSCJ\/TQ1@9F!<F(RN:CM87 1602 M:"4<*H1TQ.FQOZ@Q)0J!0L,*.6+(GXWPXKDVI9ID]1DZQNH^CT2'Q93O&(!\ 1603 MZ'N3QL3TN##.MEH%BI;<3\J:G]+_*)P@T1M?;-'BY.,;1V<H[S87).L]<Z5D 1604 MD?@QF%#7QB0GCNPU8"_Y%>=&K\3)D2@P$@9X\Y%29!`LF(<%*L^28^_TG)5H 1605 MQG%4/8ZC'XG;TRM/>,9T]`-V+Q(K9_S&V'&&D<F]V_GG.,"O]G*6:40-^F&6 1606 M.L;9##V&\=RWZC?2/3@F*1?3_7$NIASNE^!,ZY2;VIDX!8P%8K$:>80E*]`; 1607 M:OZF&99T0&>HV1"M^_8&EF`Z!4MI3@.SW4R%VK.VH@+MO4%5$)L.OO<&YBH' 1608 M?N\X&E3J'&B8"QUHF#F3U`SEG<WQJ3J"LX@1+^C9K22XEK(W>HHYWOO/%F>. 1609 MM^',]12."^5&@2J\&&X2J,(K0:B6+P*E>8\0#:3JCJ*">%,1B/<4@2#TG4/R 1610 MV!4F^6>"2RJ$M_1LMQ1<-`EGZ=E2N?5?+2Y:AL:WHJ.$D_R#"A">%8BJ1]PP 1611 MTF!1R:'8T%T=PD+ZU%_>,)*F$*./#Q4>.-#G)J&&)/?YM3EEVEQ6I/N+E2+4 1612 MWB7MK=RHO+.\69FQ,;!=A;5=2<6-L07*1@7GMZ=?<'X[)+EQ;/N%3I1'GG_N 1613 M1ZN-@X6F9:KO6FD:J%81@![;GN:>=<Y(CU]`)6E8ID9I3!>[9>IXK*TI#KM4 1614 M5Y;*PZ\ZFOESG$*$&YWD8TF\X;>!-+9RD)BFN'XFG!>?2L!P=JB7?)]N4MX# 1615 M>%LB*7L04.H-EZV91RG2%K%H/5=$G;?K7'$X%#S]BD/!77SWR?3CO\?Z[_D; 1616 MUG$ZRFSKEL8Z8CSO[ZZ^CK_/<9T4<113[9GF,)4\/I"8Y`1P7:6^*260=W>& 1617 M=3UZ3<V[.\.R`SM#S;N[[ML;6/)<%:P//5*=P.Y!.A1L'Z1">0W!:6Z@4WF% 1618 M$#^JJJ.H$,J7$(0%`X!423LV/TE<8%4P.PFJI5;>%BD/>AB8*Y=FV[<WL"J; 1619 M(C`[#A1,DYYY=Z0Y3XS0E"=%LW:&FQCEO$)@!X!^HD)HQ@7A&0]ZG^?*>1P' 1620 MLW0?L,<%1%B=I0P"UE@;4DR?TV8LQ.H]2\(`4QX53Z?MBRI7Y#MMJ\\5$"?9 1621 MVK1-2O[@D]E4(HO?78X#7#1WK'?S5"E<<$BHUK<H7H`\+L#Q0$?X!:>>3X<_ 1622 M'2LP8C^ISMUE,>@TZMM1X>=1`;K_,\Q_:0:'QE=\CK/SNO=_;$@Z<"`^VM2P 1623 MPJEA#;/?.#-JF/S<*W7?RF>\V,+^`QE9UP?8;/8_.$(]]2/4_\???__]MW_P 1624 M!/<3E#\?G__E\?E?/Y^/O\C,UP#WQ;_]]H^__\___ML__NVW&([D?OSVEZ\? 1625 MKQ_O'\\?__O'__GQ^/'YUQ^__;=_EYL3W)S/G^WOC\_??I?F`LWU;[_]^__Z 1626 M_34VB)J.?%,.R&.R6I_2*6TB`VE;`[.0O<'C!W`VE%83W^`%YQLXI&$UJ$%- 1627 M#^+%H\-%`POR1??$RNS"LTOE!LF<O,<<=U=C<3>)A6VVB:3%BR9R*5=I"KE% 1628 M?Q.IN-J[2#B&)A@A%?BY&$6];B*39#']D<,(;\JY'C3=NY$VM]JHC5TD6QL; 1629 M=R_:V,(+YE876N&?<3?1THUL`\8;<:0J"F(;3?ZFC6W"X:)3M@Q#8W0EAML; 1630 ME\EJ"<WY<GO#(M$-/STL$G,/+1%J2/X(-TE/KK8[S,<R@Z,5<C&$>MV$=89U 1631 M=V@>E#FJI3=QQ"<<FE12KM3$Q@?=1&DG%TWJ:-_9Y)(+&==CL+=AC@3=AF-D 1632 M*X4=2+INHD7L+WHD5R^T>9?]6%('_V0]L-&[.L=^\-0KV/&T&^J9*M#A[!W1 1633 M5@:9EM8(P3".E5M@GM@L3$LCZ5YH64S8A1K3ZIP^C)D3&ET*U"*FJZW-Z1,1 1634 MM[O8+[#:CL,U&K#?VN@^K\].C&J$/]G0;<?!"L)%CZPI['U"LNYJ:><F?:/S 1635 MEAT?"A/.-7NRF!LH'LZV-1G\Q5T2ECO;PLDE\PU,E(>]CWX7;)(ADKIS,8Z? 1636 MX;J)?\YF>UP_)[2$DI._B4%OY=+=?:XIWL2LES0.QKUD[V">WW%WY$2,3()- 1637 ML"_Q&E$+C(I9O7EZO&H1_2#HOL#GQ/=$Y_(-O1_M[IMOQ%LY(8S1R$=\:TIB 1638 M+.W\%1(S8,\HT28^/;OATU<L@'K.B@%0]ZZ@>+DW+[].ISIB4V\YSQEVQ_@. 1639 M0"<"E`W^S=!2;=232Q[MN"F-"&C9J+!H<104J:<?%W>4+0U%=<&6A@F?XD9H 1640 ML.>=([Z'X%RZ20!H!8PDO[K1K5WV[H,K--*UO3(="7D#@^>24JT>TC:,)+H, 1641 M-Y,H-P\`CH<KL&;R\-%%[]:*]QP7<O+T7!)UFB"2+SI_T(^"4><GNX\ASGX" 1642 M8#Y&6+T#\[72^T]3<M==?0D^<D[M3%R,1RHT>UZ>=;[PT3H[[/6EO"\)Q^/[ 1643 MR]?6W(UBUF]_"<YG=UN9XOW-AE1/"8S>AWJC+,9<?;\8^.$&DU\\?C#]@^;I 1644 M?@H[CCJY+W'I=;YOS>-K.=\R'WZ._5QNI0W!#;2U)AI5._ZLGES/_UT4.)$R 1645 M9J[DEGJ"Y$<X-<=9\<R=+-F/Y,B/''T>U>-K;JY#'^[4`,*JB18^RE%<5[KK 1646 M<:J^)[VK+;>O4R]RYS\2</]Q,EK?ALJ=>EF4#^=];>/T^![?^.%2'3533L7[ 1647 MHV^/L:OR9\OY(;9P-IR*>1X9<1W*AZO#))T^DG?E:U2Q?_A[R[&.T/_T^,CG 1648 M`'H^72_!XDM_L3ZX\\;V%.ORAVOM:.,P^QXIF5<PSTAT[T&2YTA\&&5;PJGR 1649 M=S&UM9Q'_+Y_E,]3^2O]+*C2C0"A_[*E]+GJU5N.S_SAS_O;.*]P])QC*_W> 1650 MWEOG7,FG5^O9I)_QGF*+/33SW3[31\A''+7U_>.CBQ&]J&>[R"C]_D!"+_;N 1651 MYF`9^6FTI1V7>9YG5VOAK9H#A[RSC>S9NVH4-QYD#9*X(;Z\P]XI#CULQ-$. 1652 MI:Q],Z#\3:-$'C7;K81$8.,0T?:`_K+$.C"]*IPT)=,`1EG"IS1*7573U4^* 1653 M]88F&A5O/>;ISEVV_&0#<-E[4SL/-TW%A"8<$R&G.G/[DE.$=<M/3CVT;;<O 1654 M.5.86D@98^]CL%VR!U+=R&/D\X>O1M*NVRA?4;61/J;]T]S8U?BU5BB,Z\2' 1655 MZK_65]I@%CCWAB])VESPLEE03W'O2<1*O(G&A"%>ZN'YJD',TF'O:RO_2FTI 1656 M)](5)`-O+);4-?YR@URW:MLDZ>VBD6.("K25&B+?&+9&ZE7[+U:C&BLG4%R- 1657 M)W[3J!T=6[>;OV.UBJ5$CM5<*4IBDW%DE-F:Y).Y:*0U7+`)K#FN[HU@@.&Z 1658 MA-0HX_3LA+D:3/NFD3^;;#N5ST8U'D=PLMZGC2ATZ8N7+6"P9C7E_%0'YF,+ 1659 M3N;:J_O%G[)P?OXXNGE[4MTP_B7P7JA=O)X_]!M:!IZ9!*M#M'[&YJB;1#>] 1660 M:%2[WVHBG8TU5&Q$-6]VBHTR3M[[K@83OVD4;;693D&5@T;29G4@[3SED71@ 1661 MG7:VM:GDLXO[I)[\G)NEO3M5!W&[3U5#C':<XE^^&$S[IHT/U7&V4\ZX@#91 1662 MU&@D@W,4I?Z)74>W1;#KV+O$KC/;4'GT6QOH@7L+J))LUC'#$+..Z>^GWYI$ 1663 MO=0-I$.+_YTVTT):MQQ.G?8F,4/:-DG3CMRT#`2.#X:#-NJ2?>EX'XZ23387 1664 M0_'7;>R(AS;J$Y:=-)YMPT!6III)0='G7<4-!=F1D]P[VS8-AE<MK,T?W.:< 1665 M#V7=]=/K-KZO2=T/OP_P)[,,.XR?X9LVMC.VO4M_2.40OFF:"]6Q2=T"GD_5 1666 M?3)$IX-#ML:&'^_5C1P0LAKC,>VU.BQ$W^GYW$)I4T-EV>AB-%RBX*)/5B=T 1667 MGYYLZ](4SRDKQ($<E<:99U>=FF)B+Y2GJCA;6T(A_.H^*IB5UU!R+G0?"]K; 1668 M?1D%[6S'Z<EL9$;BW55+7L^RO17:R:EE>1VW0[V[]R.RLY(#UYMM8^'SHHW+ 1669 M*E=I(U\K2Y?5WB?2)33B0%DJNQA+OFYS7`"FF#XGLXFZC1S3*DO%CR;ES%:) 1670 M8M#&I^M>M*DM=;:1"UY5&=YNH]`3:,-1JM3[;23EFS9.9'2F2RX?*DW=XL8& 1671 M"LH?G$VA5!]O8'6.IHDCVFP3VY]ELH)/0XIB(W0P=W'8>;@>(7D++X81+IO8 1672 M+.U-A\SSX'<AGQQS=%8_@OCQ>!K+12,'LE\U<NIHEL;E>>28]GQQ'X>VJT88 1673 MJY01OQA._JZ1"[HFVZUG[YXT_O7V%[)-3]?X#`*NR[9,,154FR4>-7@6\0@O 1674 MRVI-+GG*B"$+-Y0RFM2Y#'LV[=JS^F*/ZEJV<Q:UTHV"DGT,>6HI7*ROKXEE 1675 MX:98KKAZ"FR?1]_0#&-NI=:;F-WG8`,;^J7"P>BF>PK(XC6CR\*YU8<;QX!, 1676 MLLR32T/PY%#@2`":7#'H8T6$>9@:F?%)UE\5#<^?R8<Z+!=<L;`KZ\[!]$:: 1677 M)+XFX_LP=(`A?QQ$XL6L/[[!^W(/\!/()?#3"[!\!E1O8%G_EUQ/!OZY/,11 1678 M(`Z!\Z^4NH5T.@M>YS-;)1TM+*\#UBMH$,W5XI_T#R27VS\OL=,GM(1I6^]; 1679 M4CCJR%KRW6)VN'$6M_]P+;HR_N[OY&>-Q8[68Q1#^#C[R-UNWRV/9P_]B.^/ 1680 M6GT9)7J<.WRO;GO>46K+HU#"N1R/GE.5O(OGI<OA*%^OCW.5N?1Z?YR_<FDO 1681 M]C$\)>0NO,HHOWY^EM7[48(]/A_EP]4:VOG@Z84H']ZYZ$9,7\_$\K'3CB(, 1682 M)VEQ1QUOWYT/]7QH:L?H*3\?H;L2<OGJ%Z5[,U(LZ>RG5\M-YRN'\_53K_'^ 1683 M])WE':,60S\2YN[*4>)7]P&,$\K/5PIAE')_]HLV8@_/I\56^K#/E^A>B"/Z 1684 M6>1HC/(H1QB3VR/PXSF2F.LX#HQ+`XZ\L/!R]9UZ7EA?[<?YF.ZWJ.^'R]TW 1685 M<?921[ABCV'TG\Y_I)I<]X7$MRL/=[YB/>?@RYVCZ+=TH)T?<^\XO^O#E<\/ 1686 M%]KY;CV<W]5'_3PINKFYWY+>/>S?'>=SSH5ZOJ#K=3/;9_Q(V9_/K;T>1?[L 1687 M'#B$VH?E>AY`_(@QA_/%W=&K6/0*FRZ6FOI#?7?!G`O&G0LF#H)XWG&NS);Z 1688 M&,8AGWVA'KX/:%8M_O"MCR=]=G-_.U_/':]S3OSGMY&8WZ6YB3\%XB!;7OX4 1689 M#!(1K<\Y'9`BZ:[8(IKBWJ(JN(T6#&&1<'F\1\(L5XL>FXC(^PC"58O*DE*] 1690 M25$8OF<:`=41?HT-A^J0/H'547V:FG6BQO9./`M1B#D4:L(X$/:ZZ">RRV7K 1691 MI#%,G7",U(3104".D48N!9)A(X(DO,:=DE2PQAX0<LX'),4"V/KYCI0Q]:RV 1692 M@U@76SH@,8HB0*9A(K&MIF)8!-GM*T1%"#3=:(C(G2S"D!V&"D%-</GG-#;O 1693 M+GQ(`),M=_SJ3X;,V68X/HY?QZ>$G1#R#KI@MUR47J'TI,J"G8PH($83P4$/ 1694 M:N0<U:CN9E&.[_])96,&MGPR7/!T5N!'(RS[&\FW0_.N0)KW"0X5"0$,[1%_ 1695 MI(KN85<D/B<R2"&W-/6K@Z&G(;)N+K"L.+I:8S@D]FJR.9R=L$514R'O10S3 1696 MEQB%*8G2P1IIW,E0$J=(<P710RHL8PD8]QK=K>?9S#/GS.B7XIP9Z00/JN7? 1697 M-`D93VK<,5Z/<*NNT^[9?DNJVBSZ309?TK2B0DG%BH:6DS79/$V'J`=%.]AP 1698 M$A@&04Q,/ZX8U-'9ZUYUP8'`"^8@/MH2(49PV8I41%_4V(V#I54,X;((J8B_ 1699 M]9'`(RE^"_O/&T:AZT7N1,6,55?BY!)Z2Q5!(R/T"T1%,W:@I9'3!(N^3),; 1700 MU)/FIJ,Z;@JA#=W;`&8_PLN&>K?6B$1_8?EYCBR#U125UCJCS>)2(RD^,JA( 1701 M+UF'I#DO%93U=WIF(AV=V6Q<^OF*#E^J[OR!>[#8<1SX;0\1O1Q\!=H=AWE] 1702 M*3URTIVR)`2(S1BSEX2"<:P95JUHD&?3ZI^-"CMWFG!5)6FD47V<OTE7DKKN 1703 M=APC#NPC)-=&S->Y%,O4ZW+I4"<J7:=Z?Y1RQ%-9.W^F`.=C?3@?\G%J0[$+ 1704 MWJ?&=2I<_>+1HYV+=^/\DE.-"7X$FL6>7CR&<2I2_LA^T':=*I^J1M?<SCYJ 1705 MB%TK?7R4VL<0NSYV_@)=+^A:XG&J<8F&D&:-C)%[?(JIW5;P588&TS[.U=(5 1706 MOGC^&5TH7W7TZC]"SG&,MY[JQJF(Q9/ZU(_.'^^D+J=JG^/72/GJO_SYP_7S 1707 M`^J]YN)'A-OCHYZZ;!^7E(Q];86?+M.\^(>5T+]\''_#;"[WU__O__U__G_D 1708 'A38(MM8#```` 1225 M_JTHH9^IE/*K0H$G"/S_W]J[[MBR(^EA_^<I-@S_Z*YUJI&\DQ9&+V+,$0:6 1226 M9`S<EH2IVO:J>GHSOF!<F%R[1^XYZ,;9E9%<S$@F&??+]ZN<WR^JK/Z,7X_G 1227 M=WQ\S;^IJ'G0+.!6X[6JL4]"7B+7*R!EM5UA511]4*E1;G^,2@I4#HOJC-+0 1228 MC_2>QZBK!`.55<C\]WMH%X552P1XGZ^0XBJ"U=_#E1O%;G?N:]CRH!+M[;L_ 1229 MGITBSRFD'O45"-NK]/ZDB'4J.EI3^"K?*,$0YQ0HS/Y(X6KSN?*P\>M@[3UD 1230 M.U^6N)VO551TA56+YW(9QEP<MYBN)69[+T#[%,+M:IHM,>15R/41[7V4]I?@ 1231 M;?0/V,V)4)HF23AZN%P[7`2!.]RK002^V>[&/EJ8Y@+?[73]?&8]P5H'3\`N 1232 MM#4;_&Z7D^$^&$B3;AU<R]B]&*])M\'JNTK23[V-]^:?.YJ:='M[;GT!]U85 1233 M/\^6-!VV8!!+[KYNJH-`[Q[9$'>XKH[<.+KQ+/B+QD$&M5T6S\=J;B>-ETS8 1234 M39=W$Z77\!MT2X4M+Z;)=_A-^'WUV.P?X!99?1OW96ONQLO^F]M7::^FV4P4 1235 M#L]\A[]JG>2SEO?C?!VVJU=X[G`+;\LG_GJ@[W`GX]S7OYU@D=''_E#]C`)W 1236 M47\.?#<ZW48K7;C#7:OJ^^POP+J4DN3AZSN7%^.%CKR"2QK?;84=6*?WP3_W 1237 MMWH%]W%!]\>6\[%*INYP$?GJBV5H+^"^\HV?QUO1W<[4M,^5(N]=PUK_8FPN 1238 MZ!=@)7:WQ'D]ANF8Y078CAO#A1J-'7S2QA=P]1V/[54=>,OZ;V[XG3;N8-,[ 1239 MXOE4!]]-:#=4C##&<]G5`7U;F?X"OI6U'/>^;F&??"/>XR1:P2-N)"C<WB>_ 1240 M>IY2X7'8AVY@Q>+:L%"6<-UF/H'&SJX;:M8>YV[E&0<.S8VUHU\-FOH0UW>] 1241 MS_L*IL1\',M0CK&^=O0XR/6>TN-KXH^#AO?;&K3C][HU^X'N"8TWZ(T%;$]3 1242 M4M^/=RO'%,*Z]AGR!GU5[W_L)+Z=8"$;>P;25O9@'$RKG4N4#>QP/K.!E,#4 1243 M$X^F8(G15X)1#SQ.J+*->KYY.4<+;ZOGQY+8_7&RC'*\8SL'>]?DBZUT2Q3R 1244 MCLAQ,KO;:!]#L=/G)DRD;\Q"0P?[29X7^&!<.USY7#HFU^BCOG&<?H*-G\5M 1245 M%F-<\9C]!5BY93Q0M%BE??@P\(9,-_@*4W,FIP.7%^"P4?]^\MS;<.6YX5QV 1246 M#3[J+QC7=;QK?S%\XQDO/O8^2]AX27_!BV_CE>WN59G%0,"Y+LZ7(DZ'K:QS 1247 MN@-]@(R5EO8!,MW[>)(-=<\7*_A1A#K>?Y\5Z)U!Z8#ZR/*V^8*L1;US,AU` 1248 M'_#=[EB5^\\/H*#*0.\2S/>AOL#8!A2?4=M>RD'7K#X$H-T_RP;<<TS<H_+Q 1249 M*%^Q;%\_\05M[UKOP%OBROK]+7'E5N"<H^-O]<V+!]ZKM^Q?=8=&MZ[;K.*V 1250 MJT<A]!WJ773U_F'S?=8#Z`UO.U;B>-N&NL!Z]WP+EA?_L7><U?L>W(`^%+@> 1251 M>W`;*GLP'>MJ\?.WKQV/UZKWH=Z3=7S"_?<^#KC>=^8^5';F*LDHO5Z%O6F/ 1252 MFS=7KJKX=-H#^.8JDQ?7JC8:T"6V>J#TF55Y?'O0[^D$2QZ+@C49UP%O-6]7 1253 M3Z%;S=NR03UIVN/K\S'6AS*5HQ(N0WU(K$6ZW^OC[F.[.P;E7C5W1:3?F^6F 1254 MXVGU&%LVJ&_68O'O]\:Z^[S#;?IRM(^)QUO4`[H'M6\=72Q^G;^FEG7+6_:T 1255 MEG7+:S.\`'U;G;=\[J2T_?@`N<W%8.SD'70[!@R\]6V12O[N\=F#\8X>9,GG 1256 MZ?CY2^#OFGUZ/BK>'Z6';H^*%9?8"DOWC65<M+K_`,6#^T8,;V`MLK1/(@ET 1257 MMT=J0,X*,G?==%Q$^CWP9('=VKL0<_\V+I;\'OPQ_!2^JKT5._4&0X/*6>=0 1258 M<M\FX81Z6]X>09^/L7*JZS'O"953O8IW+2J4=JA+L;1"7SYXOASSYI=C?9N, 1259 M?:SHBON:&50PDSB@<JR.0>\T9(UMK?N*E.7`H1XS"+U94)>-50Y\RS[V1HW+ 1260 M\>4MT-Y_BZ[0>]LLA@Y?#S-O:(F^M":-=55!]M"M4T5Y^2R#^J2)?$!]\[I] 1261 MQ=H!56TH;5.H,N0IH)S,%1^["%TRD*O@K6E^&B[Z$FA$=8$7\<YWD!+*Y![N 1262 M**('/\_'**$(\8;3"ZAN@@5>!"ONT(.BQNT-BH&$S^0;R#B7_ZEC4_N,!^C; 1263 MZ/[M3379*=FG\\#U1I9#%(Z/\@J^):;OCQSW)QHA#]MVJ1XD7[88T%8FNY&K 1264 M!HSRT+"MS`%R'#1LGR">(UWYAVT'6Y+6OC$L26M?&&-Q1S"UC+XSV^OX[/D^ 1265 M^@:Z\=_KMH[I?)@RY>O^UCMX$R46T*5QNWZ3C@LTA=Y;/1Y=(2USP[.]?D"% 1266 M8:P)'#NM-O;&INN!6+FCH*EK*\/!>E"Z)(U;"\ERH.O:$#E^W!7J.6\[QN8- 1267 M>I?I]Z>5E]"X0>_<OQP+68ZQ/D_^UF#3FBGY!IM'VTV-1\O'JGNP;[SI^W$: 1268 M<@:]9R/F8]D,ZEF]ST+AV+.R0>\"UCZ#[[IA8^L&O8M=.[XBA)QO48YY\\NQ 1269 MOI!`.M)>T[';#?JBG^=M^_1CAKA!_3JT8X;Z$IHVJ.2H"EW?G[;WR_*K4X]Y 1270 M\\NQ*@NEX].7XW%E'WN3\M)Q8BR?Y44KT]O':,=8E9OB\37J,85*4_'`K1R# 1271 MA>;[K!IE+UN0N3*C/<+:N/<6]JQ<VD.][++-JXPR>O''9(CHU3B3%<X`_!W\ 1272 M$FA"8-A1L_SIV]M%@WLT@H$E7'U/DXZ'X+=/OF5)QT/PVP>KX'?=EUE3I^,I 1273 M.8S;*X9CZ)8@_>*SKK9LK11/*\:!V[@]30FI)$DQA58>N'H'6Y67$^J[5\># 1274 M3;1C@@.JS&,U7V,VW';H36HX@"[#R151V\`\K\8PU_M+G%`+;J['\Z[C>=[W 1275 M>UM*E^GDWCG>H6$K!>_Z=&REX&]ON-+6MC5>J67'VS6$L]^^L0=66]]MPN76 1276 MV3Y.W&&^)N?Q:>MMOAO,%:W=7VZ))=N+K,7<GKN64BLG^=*7Q^YS,/O"Y?9V 1277 MUS[0U9H]/VV^O;&463YV8KX_.>Q`7USVQ=?/.SX*N^_`"=,8]'Q%%^?\]W=2 1278 M+KF\"$%W#9#_5KAY0<OES!'?J\@W!9ZCV=[\3:+BW^C&9]'D:-+W+9WY`'^@ 1279 MYU^<D\?5\>^+GD'M_KXU[GUU8,Y?_;M_M`?U_OL>5!8<_92I$#H%H:,O,\6; 1280 M5VZNW+[:]P=W7TZH>4X-FJDM'YHV`Q.JE4Z-F@G!HF'T7QKD_NNX\^BBSK/[ 1281 M&JL#L_<=:61@\!X=C=L+=Y=2/<9JC>.P>3M=Y+)S-;FXY5>Y?_OS^@'UIBTW 1282 MA;=B.;`(S"N>TSNG-(C\NOOW=J@LT0[U/3WW&4ZHH+R@WG'8CL'%?Y$-ZFII 1283 M^]?SX#6S*##U>)$3ZMN([L]KY_.\_GM;3N45^WN/`^J;CKHY?-=1%ZB[1=98 1284 M^-86$V/@+29F'VW"H86];5$K%N23=K!VG=F"6<:&HLE\.S(FW5E`9+K!M_G' 1285 M.3[O8.UVLX6MW*87<<Y"2%4"'=MHUU3CM@)!Z@WNF`CSO\VA0II-LM?^]EO6 1286 MP@=?5``9]_W:MM_+SFS'K/4^P5;`8VSG;AQ0.=#5SR`GM]ZG/8#>!K2CI<+5 1287 M-E:/RXZ!E:R60`(YR^6.P@&4DUR.MVWWH=ZL,\YCG.]K8&6I[Y0GWS'H=V#> 1288 M@/?CGN]HM6.H-X78]M>:=!P0Y3N?X[!(R5UKGOX"K-1E!]O)3<<LK^!V<A=\ 1289 MT9>^@^5@Q-OH._$ZP:9?]VT!/%P;;ZE\*3<.*KC'].4[?!WK^(MY++$V'HB. 1290 M<YJT@Y5\;1'P^P<TM?^VQJ;X]Y,HW>#Q!M_0?Q7#6&YPH9SI!M]ZEHW7"/T" 1291 M;!:#?3=XN.]*:VREG_3]!K<R<M?YW.M\[F9DZ+[[]SE6J\B-<\7B`5:M9VR3 1292 MZ.D9ZX'L`I"&=3MTN/KQ?J24R^W+0S/>?/5XWVG-`:VON?C"MP=I!.(^P>_1 1293 M@5?'L^`*P&\'\1(JTG9J$>1`MQ?GD.$'Z=K!2N@8O%FTVSF[ZLDX5VVC148N 1294 MVK[]PCG>:&#<YC=:%X_G.K!7.?LYNN]@&;VEN5@'O_:J>Z$JYB&<RQL-OM$# 1295 M!]]>-)SCTPTNN1:.OH9SY1W\I*_[>*.CX5BR<>+9;Z/OS&05CE^=4+=DG';R 1296 MF/V16XJ.K;L<+@7SX6BOP=T7L-]67>VG[0697[TG/;%]U9/2R/]U;H-P3I3O 1297 M\)/\7^>!\C?.\WIMKU9^`8\W^,DOKF/3C_.QXS;ZSDZOXPOV%\^\=KB^[)9D 1298 MV@YJ>`.WUV"ED@O.)+GOP)VB"]J>^DB.T>WLN0ZD_IM:/X*53;`5AV\G_]_! 1299 M6\WX=C+Y?;0/X=I7*3NHM4TQZ&KN*6U\]PGZ2VB0WK[GT^+QM,7BQDEJ7".% 1300 M.Y_NY^+'8[0W\;ZBA_LD2O7ZL7`.[+MMC&..LD$]]2D.ZO9</L'2T7B?(TB` 1301 MP4+C5?,H`_L(@]M@,=2WO<'+I>!7;9CV]U;C^_Y`U0_W.51!M$E\0$#;++`X 1302 MR1Q!OYEP5;>IWEA\0DV8V,%*FM)]CA-J)(C!PHFN'7RP>@:[6D3U]6`31NKV 1303 M[AM\/7.+D:HG9]W!6^C4_M!^/M.8Y8*[VDTOP%M^U>WSF'BQKZ))"SN2P\`Z 1304 MSQ;?M&/CP,N%N"58V>`M(*IN!"T9V'TB94!5-V?9P?[U^PG>DJ5TZK#E1-6- 1305 M_>03+%14P3>IY;J_S8GUII-4/8#E-=@[.7?LBD*-!^8;3'CK_FOEH>>D)[2[ 1306 M;B,'#>GG*YS@S<U:E9C5'7PGB/W8%]5![6L4A=HKNZXG*WQ.F6(_7OF$*E/L 1307 MM^6-Q]#A^J$<O:K:L5L=^&AAU8[O_@*\>9%OC[R.1WH_<CV8W(M.X?D8W&[0 1308 M&^MKQ_=(QQ3*$-M]Z3;H)F/L[Z%Z5STW5CS`F^_;)@F;F[O>*S,&R839G8RK 1309 MO8<K>MT,>J\6?`,K9UGI-#=O\4I*.CA%VA`QGI"VR?MK<-W!<T6T*%@S\*U` 1310 M[XNIZX'@;A0L&[,UAE@V=7`XL)O<@>_QHG%;DRWQI#S&E22XH9\SMQNXEKH5 1311 M5WN!2#L0V2H.[=O!-/ERNK<7W+^\L=1M_WBP./)WNY[A/G;P(3VLT:U>?9-[ 1312 M&#[FFVYR3SAWENFKY84\<)V+<)WC-_WPQ8;>9S'Q81\>=O`I^S!\(Z>B:Y6= 1313 M!PF=+B<Y[=LDFR91#L&BGU,+>2L['XL'V$>CN$FVUK+EY/[M0'L8U+^ZI*S< 1314 MWC$I>$,D*ECJ+VS-9<O)PW?PUD6VG#Q\'^T"7>Z++3%"Y:3BY7S)>(S>NKV^ 1315 M^+[[)$:<RH&@!]_XY9XJZ9.(]UY,9Z+CWNC'CSW3%/<V/3Y*]$Q(]`FW^]/. 1316 MA,1;/YU;PN=!=E4UVUM`*"O*)X'=D@.WJD7Y8*MG*PUC%MDSHG%`-XMM/@7Y 1317 M>$S]`JQ,.-[1,[J]CS8"O6'B4@HEQ'(S;>:3!^]@8T3A_N[M'*U,.-P7VTCP 1318 MOB8NI?!5%L8-D7["VPX6#<G7F;TAV([1RC_78!>BK-K-GEVF9-G`FVIP&RV4 1319 MUM+O-E'91F\RL>5W2:Y)._$3VGE#)![@+8[2)MDB)NV)<L[WM,/T$NK+4.3C 1320 MG)=CAA,JIW]/#\QOKQ(!?2V*'6J9?'[=SOP^[RC/![W;H3YA?'_:F=[GZU'L 1321 M*WFF]_EX_?UI9W:?3PW?4Q_MU*<M9=P$I#UF_Q7\G@QU;*-Q3G."MUY3EHA1 1322 M=O!Q5EZ`1;7=,RD<6.96&:&?[W."573HYR/#\<A-QKJMK;7;V5X^'6`5$O9, 1323 M+)4&5BJ6VZN6'>7/RYF$M'>@N9_9<LR;CQE$&M]S;/9>,9[GG]DT>][,G4+D 1324 M`]\S;T9$\'2,/;->]@8LDLFR9Z?<:<R9>7,FI^2W5VDH0F/2L;YG&LJ><'*G 1325 M/'\KW^3^-?<9]G23.^4YDUXL"64[-R[W8CO"8F&+Y\%9X#L]V<%;G-QM;C%E 1326 MQ9T.I`.L-&9OU[*9ZN))P?J)M^4^;`B*R>@V.BMXPR0I6!+4-K-8/(G@#KZG 1327 M5MR)X#YZ<Z[$D\;4<TVLA<Q!&^N)23S`Y0:^4Z1Z(AB.T9M#)_[Y[4]<4]N? 1328 M<*["+<FZ<N)"<Y=<EGOE6?,`E.'^T*+>.("K[/8J\:UEN27G.DH9;KYVH?75 1329 M!7.WOSNT?HS<7\36_\V(^OQ/_YA3:A1'_T%'--9*0>KS[^=7FK]C#D9A\(D\ 1330 M>V.@HOO\._0\1WP`&@K%WK^WUBI5=I_2^VCC0T/VW].83Z!*[>6CO(\>\[/. 1331 MB_:1WD.:3W^6>94_XGLHO8YG_ZISV-2B<Z+R[=_S(>_QRB,^!P7[/^;P^/W1 1332 MWD/(O7^5.6F>\[08GNG;RM9_:63]MT;6?_R;M=TC_F=1]MU]F,%1]K*!K.FB 1333 M?>>]U+LEX6?;5-HBA[<"LJ(_M&*[#I<MMW8E*K^O?9IH"VYUX+'Y:&];GHB( 1334 M6A0VO[?V#M<&=AZ4?:S07"IU;I62-K"EN42#6F*)&^D26%PI=I]S[L`NB26= 1335 M@\L.=GDLT0TV@]KKQ[G"[^Q]$"[:]K&R$NU<"5\+WN%63K"\=MTGD1>L.\[% 1336 MBDR@C\;>[SQ()?6]L?P-7"VXRH";ZV^?PH-=OOZKX1H)(L-Y%]0;>-]>!]!< 1337 M?Y1$4+4NK`>_+%Y@3]P\A=NK;^"7A0UL^.98W%'T8)>K]0+JO87ND>4U..U@ 1338 MMZ[Y'%QW,&_6O`/=JZ376'BP#XV*KX>[U!B_&QR8\?!E>&]+_0(LG[V?#\SG 1339 M`^4[WL`^5>"V3/4$RX=I^R0^:O26KG(FTWB;I4'%,E6.L4&B[5WRCLNH<Z/5 1340 M3)1//"#+I..1F#R=LPP#RRQJ[[]1$CWOJP2X40%78/M^F!AZ$*,=7.RP;_.Z 1341 M2MI^.WFP$9%\0+=`M7'0H>O^N!-:[=1NV/YNM;3]X32H6X9R#,T[U)#-;JCM 1342 M6H.*4\I'C(T[.1['>AU#?1#9N!/B;613;CRV[#I+VO'O;Y6\C=Q8:>X[T?,C 1343 MRP:[4;;]076'NH]RCDT;]$;N^JL-VX\OE8YG*07LMZ5RP)WN[UE/<JBW_*3V 1344 M"BB$I1W?U$,-5\N%LF6U3"@)N9!=V8ZU.J$^RF#<N,@^4O;?]@*;=VI[UQ.J 1345 M]&C/Q>H;]$9%ZW%:FH/N)+X>BUB/L;(WZ[&TY9A!MF<]EB$?8V5['2^AKK'] 1346 M?'GP6H?=8S8.SK%!U<=?[@\<Q_.4FY1CEVK]G?TCA7"`?8ZXGUO<YWN^UD9M 1347 M+1O'DS"#>L*TCY6C;?E._ACOJ5J6%[*MLY@FNB_)Z*`>XZ)0CUH^H,)W]AF$ 1348 M[S#4GP2Q/O2]W(:![Y]Z'UQW\)W*U..E^WUB-0"5$PL#^P.I^[/[?IT.Z@48 1349 MW9[]].9M%<R5`I0[=@>PNSU[^Z16[MQ_TJ,(NEJ/\KF:!M[>(QRCVPZ6/$T[ 1350 MJQLB?8?>J>$&U1.<C\4?][%"#?.Q`8(TC>OG`4[GTH5CM)[K]'(G[G/H:4]W 1351 M[,8Y5JA.VD[)5F764A<V>=+2(O)K\%;TM1VG-5S')"_`MS0'H3#E!KX1J06^ 1352 M-[P=Q^"B4/_J!I7G[8D$=^JW0_=,`O\T@WK;?3IP\#:9=KCD5SC]O7S0#MXL 1353 MU?L7K`KUBUP.J!?\VN;QR,>\7IIKF[<A':AM`4&W%SG!6YQ0\[V9'?0@PNW` 1354 MN1C4^6/R,=8+4+>)K:N!WUBNUX$%+*CENYUT?`=O<4:W!X;[`V\)#J_\>?OJ 1355 MEP/J):.V>76.U_.U=^Y?)!W@+4ZI^7@'ETZA;5(M*G*E)FR=9#6,TMVX)QQ( 1356 M4-)6$_4^D=*?NO>E]6'^6Z]8<W/7LTL>@R5(:K.P55W*N(-E]%9VM-X6PH?, 1357 M;^\;7]RP]-!KGVJO8E%?]\BJ!_5:X'LXEXQV;^O`LIWB'7SC%`O%%0^7=[`_ 1358 MG^E\Y":?UI,YG6\IJG_=&(5E`MR/QCAVTCDV[F.=B)N/L66#^D_OQB[RD_:Q 1359 M-WYW)C\X:*LAN-7<W\(+ZO5@Q@SU],N"]OT"-X6^ZOM5#X=R/\Z`0?V:63K" 1360 M/<RO'UO"H)+HZVV0=7.+&]2O3C[>PB>LUT<9PVL\^U!9R)71X-F4"^*_4_?F 1361 M%_B6I7"71]IQ\)I"[QR['1O-H'<^WH[E*<>\>8/>>?Z.V9[D<*<?^[P^>;\> 1362 MTL\^5N2<=JZPL*BZ<?QTAVX!:/44&NHY\PE66:D>7\E:YFR#K6>.Q\-ZYD@` 1363 MY*;2U5/4V<&;2E</46<?K*)..3:<-=0Y6'8^WC`=@S>5[,4.W^;8-+)ZBB_; 1364 MX$W'JGM,`/C6RC'9&KJ#T^U-5,8OX$ZJX!M"$[<N(N45CTWG`U[`'>]=\<>^ 1365 M0[V_\4)L21M*R@H7>%'Z^!J\]2>YSZ[N@+(OJ8,KGE9R(;Y8NE<WK.A"?/'L 1366 M<#[;R5%Q>PF5+.+QRB_`FZ/#0NK3#C[$J_AB"ZGP=O^2Z<4-*W<0]JGVJC;[ 1367 MHXL#NSWGP(+_YJDIIWBU@S>->W]D.A^Y:=S[5M.8XWV!BX$][R[GZ$UMWY,6 1368 M7+,F+S2),%8.ICZV!WKQJ!QB]#CF%=&D;*)4/:#>CWEF(/1CWA,J>ZT?F(GA 1369 M?Q_;#.IPJ`J56$)OQBR'H+E#O7&S',+C/E:V13O65^SQ9VY$/=ZM'F-%@J@O 1370 MO^8^@\@*]<`L'V/EB->3=BFUSCM15MJ87Y&N/6S94:C]QIYBF+<CF\\'#*4A 1371 MG".Q$_WTXH;QE;BCNI?VR2\X6GSQ;BXAQ!/-<H*5C,3MQ91>Q.-]/99^>7S/ 1372 MIPT9U_5I?]]D-R2FT;&;<+[O"[CC-N'%6H<7O]A3"?<5<@DBGG^4$[SI^/ED 1373 M0N?<+\#*I<.+?:C$\[X=DKMQL._KQ?+$%S>N^XV3:UTOUBV\^,6]*Y??+2ZA 1374 MQ;^TSVAQ"UH,+&EUF]$AGS+`#M[,"/F4`?;1FV$@'^QO'%^V&/3&M,>!1CZ@ 1375 M:8?>&.(X4$O'6*^4YZU(IU*SM-6`T3-LX"VR;!_MVN1(39TMB,Q&;U%A:</$ 1376 MM:/QC\PG>(OHLDFV$*VT%9@!>-4^=[5KDM#^N)7+>0'6I=K!BF`Z)GD!5KP9 1377 M+$M5=_"QWB=8Z7'<WM*!96Y1LV7T_:/MX.&__/[(=#ZR^PVQ+ZR2P_WERPD> 1378 M?OO8).'R^V=_S;R^P[;<9:W4^8H`WC^Z!Q:WT-N<DJVX?:ER!S:WEN>GCK<Y 1379 M#V!UJ[BA)*F(VTA9V.WILJQ2%*N[-3WWI`<.M\KG?O0C?2C7^:FOVZL7!=ZW 1380 MYW5[>KX#ZP8\ML-UPRG=A_IX+PN=#Y=%:(?PEQ^?'Y__Z>/SGS]_?OS)#7*E 1381 MZT/ZRX__ZU_^^M<?_VJW\W_\\:__\M_^SQ__^H\_XF]_>O[V]=OW;S]_^W]^ 1382 M^W]_^_CM\\^__>?_84.+FZG^Y<=?_^7C\\=?[7;[CS_^QW__ZQ<"Q6_247_< 1383 MN#X!-GXO(Y0R$F!C23)"&(Q,D=VU9Q1T[5D$7=_R/O;@)+EV>1='QL4>RB,# 1384 M^NV^ZU7A9:_BAUSW(?T^0@Q1BD9R`!-9%*(B2?:SA/LLUWV6<9^DW^:`DO&P 1385 M(U@>=LC*PPY'?KA-G1^699P>5A<FR:`L%U+MA:+X]_;5Y2&=T]*ZT@03\'S9 1386 M`(RJ2SAXN`23X/(8PO@[$TR"Y99P#X9"226)\B^0+`)`0C^&QY/NQ\>7):&, 1387 M+[1#>%;^]ZM^],?SNUK?!TT7^7Z1P_$J7P.9&I:K$1TEB.$OZPAJ*OOJ(7"K 1388 MR`Q(V*JNZB!-E^=!6QE3'61Z@TTU=M!6M9-!6VE.@)+?E@;1(.#P<%;_M(U! 1389 M:I%`U!(=MS'(&7&S1+L6Z[!<BUG87UL\X3T,[QYJ9RF&95W+R2CNOI4.M^S\ 1390 M[,97=^T;H8V'5Q4YJ\9K1TD@JA:E;8PE(XHFE#P$8^K*\))9BEVG]1RYSK:T 1391 MZ>%$"R%ARNWE>"JGSVZ$;L;XN-7*DQ&NM9:K?1#=3YH';-7IXJ(H8N9?+3&5 1392 MLD@F_,HT6G\SC<%K.9(L=(GG5>H2'7N-?V]G&*,N1C2^RJ0E>=(*:II">5^4 1393 MEL8=7)[Q.T\2-RG.U_='-"H2O\(U"<QX/*EMR[P;`E+&)@0DJEDC&9`4(37? 1394 M2FH^K!'+D2"6?LOS?T5?UC5AB:L)B[3*+&N%?6V3^2J\OD+ZU\91^OY8V5W* 1395 M!526UZ.LHK8>YOQV)R2J3.L!SQM$+(W#3U,]8,M<$2J0/4#ET^3.L>XZ?_`5 1396 ML-7A\$=;`5M]#)FC><!6_6((Q2T>HJ7:A2%VN7!5"/S)"@]?<?GA&YD_G,LO 1397 M7(^M#O##E_]X6"ZX7G!^LB.QN(C^PFH+>!X@2S'6W]G]+11CN//GTD?CWYL^ 1398 M:N?OPY@V=5?*?.CR-['Y3*F7\SPA!W3^_R/YQDUTRKX_YJH]"QVZ_(*ENU/7 1399 ME.EW.O3WLQ9QVL*E;^9DF#@\?\<70"I/W;AR%9!QY;J-"D*L>9364RO;*#4/ 1400 MV%SF.K1?FM>08;JC#%06?P$O#45!VI0'H"JCZCY*LXT`:C*J[*,TR\CFZANH 1401 MR1,-U&4N`UDZ/JA/].QN49NHSXP[3-WO3'&B(A)WF/K'QSY=WD#J&#>0.L7' 1402 M.7]4*F>_#$JU[*<.IB[OT!5F!>?[/J[H9K/Y\@Y3]<?!;"<I3,DAAX<XZM<6 1403 M0*E?<R-T'\L&;1Y@Y96*FV1X@`K``C#YER'K-E<H<,<K/KX]AG3/#MI&;*O< 1404 MUA/&OS7,9/CP@.0Q8\%%B"H'_PG;X;]%T\U+:.$LK[*8ZG+R/53Z=#PJ>A-" 1405 M<HI#"O]^Y8ARTO-')2+8Z)\ZB65[4,+[I)N%M:`DA+5\%2.WY2ND[P#I97R' 1406 M\A'2@P6:\1$RQGZ'_#'Y"TDU#6I7L#Q^1UJ+4O%=B[H1V002V_3EG1R7DHDS 1407 M6<7")0`NP5#^IF_[)<++4F%OA>X=61X+H$1Y^!$6A^P(<O<C+,#7$^/F?^," 1408 M>!TA7@"G7K`T+)5:ZL-</DGO2@V5ZF2KJ'<'%J#:WG<CFUXM\6I=%??>HL]K 1409 MH'5Q4D7W`ZS0X9YCI@.L`.$M]E=^H0%*8J_0`H+N+#B)-I4_PE!0OSMO^'DH 1410 M'DZTX.(2STR[&*8"DNJM#>37ORD[_%I.9\-`^:WJFS@!*35L[+V[6'%"L:R0 1411 M3_$OCC@5M^CU=EW<M6^F)?-U=RW*87;?K-[NU]O]\N+WR7WB\K:;B63SRN^; 1412 MN_;E?;P%BZ^]8\J"($QUZ>N.K*`HC=E=QQ?72:]MM;,>RNIF*F^;:KI=^X(* 1413 M9@+;Q]_OI]O\5MC-YI=K,?W+M7":XGYOI=KN1=J,C&0W7W'7Z78M5L7LGN>O 1414 M76$0G=_*FMG*]C=5*#7P--V^1'J84;FY^[*^Z;:>R;V_7(L)$M=&/)R$GOX` 1415 M*R,U:&6Z\)S$PDC'U#T(_L)T^/5+6O$W38?920!938<^MH0-ZQ+)NQ.#^C>V 1416 MOO\@?@%7G`]8I8I?D$A5()/4;-,PV@81]JF*CUH5VS9&R?ZNY-3M9WV#>%(8 1417 MF-$%5]8$UZ[CZ])IBX.\>1U#K9#%0=Z68I*V.=K;W;I9W^X6T.(A6\#:<$=% 1418 MS0%;1M=PWVJ\F=$ANNL]A_V>J+[7I1$;1737BN3J8KC4FNHA65YM-2E</+QX 1419 M2-C,AUTTD.U7619M]1=<K+]X2-B,C%VTENHA63Z'NJI4,56(ZJ4*:?JLZ)\U 1420 M-LAFK]2G;S.'S6+91=(3*[**?L(^3?1K'J)FX.Q_)"F+-J0=D.(AVKXHN6FB 1421 MV-3MV<-#@N`7MVG:,:9ZB!B4;V-8<K19JEW+.9)KT;7IVL2X["3Y_.^WR#[[ 1422 M-_MVR(#*1B"J_(4"886NEP#'8\0<RP:DJ:E,G>7Q#(G^G(0;:LP@'2>4K^\^ 1423 M_XG?4Z6A`3#V-BH%]C?=0CMMM\;9)Y4G!:?^UG4IG'2;RY(#BU9V\,XUD0JK 1424 M-DN0NQ9N*&4UJKLK4H-(7-X4+(1&KKOJJR(?"D_]E<P1WW:9Q,L(0N>\#&&% 1425 M6`V[Y,8G=RW8I=OSO0P@;Y?<6A1WWXIIVOS9W;="ET9FDQOOC>+-X>=E&"[A 1426 M:#)+?S/C07;7(H.)6]LG:\I]87+R^^JN??)C=.NWKM_4*^:EUUV64O6R+.W8 1427 MV2+>5!MPN&0=5_7*K:L^J>G,7FDUA;6X68HHJBJ8]/6W%AQV7R<;#7%*4_[W 1428 M6Y6M'N&W*7EL3)[_MV*!H"R3C/Q/.H&7&4,1=2)H'DZ2NPL`GN%75QQG3^4: 1429 M>L;[VRX\>&]H<M<^(6GH&9>KS?0FK$6-Q,I:NH?LH<;*)+J'[,&_QJ*N#;3U 1430 M"U'NXCIV^IJ^OI*O;+NR[E@MWEW520]?(U<VHS_`[6WS>FT$P;PSLB%7Y+5( 1431 M(Y=<.>/TP_E0S,?#1FKY790K-8NH_75Y@UY&7:Q/[<AAW/RC2UE64CE9&T&, 1432 M"Q>G5I0_P+`8)>HB?7'0!3'B0D[.;YA1V"7JN&_[&I/3SN\ZJ,#F8_Z</#3/ 1433 MXKTVO]2=7O!2?1DG7I2T^.A6,4],T99<NO<$EOM>I_)=?^6^Y1?>,POO>8)K 1434 MRT<'V%0!S^(4X%6!?$/9\TBY]J_@MT%_V^T&_3:?7/M7]':(]K;;"9I[OK_V 1435 M2^"?U]S\Z3;>7V]+Y`T1X;IQ0>&R/L]9[HL>&F\KX$WXGNLV=^W?.-[>,"JA 1436 M@0O5<%-N-SR&CO@,CZD2GN[Q=;_L'F_ECLUC[SAE\V_A9FS^;1P';?ZMC!8X 1437 MT;/\^PVKW\9-*32"3"1ZI)D8)`MT^*7@_,KEJMZ`XOA_:7]Q(8T:`:T><=4! 1438 M]</E#;)E4JA_/&^0+3E`YZD;9$L)`&0/;O#S5`]PE1KW,O4*L.`K^<WP`-D! 1439 M>?N-J]%X#\_:@@62_]6X_ZA[@#?KVH,TQDN&6(R7CEDQ7C[Z8/M%L&L?XW6! 1440 M^8GE5ZR]:;%SB2G*'*+B69]C=$[J*O]^PY\+`)K<JGXCYL<X5F%-LZ#Z-#@@ 1441 MQQ\2!Q3-\7\JYN"N+YXQ!]5Q\!HVA=&K0:)V)14F\]NN)#FEYFU7@43[]RI3 1442 MM-&_1W?-PJ2_JUM?`L$\K?8597ULF=!JW\C1!Y+Y0&!/JWU;0XV<]2J5MW(* 1443 M\?>!Q+Z[0WSL*JW<%Q72JVP^6LX'`'N5US,O'TP7W;6:X0+$-HWZYTLUMUWJ 1444 M*RYVJ7$W^M.F5[*P?-7M,SS,V]=QY=H?Z^FI3IJJ?X"Q1D^/>=/@?E/W6H$L 1445 M26+C0^WJOZB8_NLZZ4X<K(ZW56=6T<WDW5'>1>G=;;).WEC2WG;SR-W=IC3; 1446 M>TVSF\#[VR28POOC_/7=W^8IL_?/)7=?3(!_C[_-2T;)/<_[6-K;;G^1!4IN 1447 M?F]_T05);D6]0<9K;C[PUOLH5F;.K6"/G,?T=I,6/<61`^IM-/%MEQX]!?() 1448 MUM[&(M>^#*0/;_?29KS=]P3)^[F\S>A.D.KM!;W-QQ,PR]]P#U,.G.1"4S3< 1449 ME%Y<[6[IQ/J>G6"*5S3ZX`2Q^@<88C2$[[%9:N&/_\I_4S-T7/07`?FN>4)U 1450 M4D%=MAA?]-"".?G:R4HFE2<WM+GK(%VED_PVK+,E.3+#78O=11T.P1U&_)J% 1451 M)7[NDI1DHB4HR3Q#K])V)98;_XAFE^O;ZT,T,4T"AD-44Z"FC8FWW3&L9)<^ 1452 M>4@-DHM=;=E6>UK1XY9@M6?#NE/CIC)^YFH3.J+8-Y;9=63>.-\ZNAK897'H 1453 M4?]B$D!_BZ2S\W@A&2YHI3DIK?W[[2Q?KQAH(1M+8><%65ZHE0D%9V7R?,`- 1454 M\A4_G,Z5V?#RU;[KX]GFGU_#":3_IDG3':/FQ(/FC2VB9@LM%Z_NDA0W9B+' 1455 MI[KQFGZEZ4B>G6P5467*C;^HJ7++P_`<92M8KS\9'N!KU&O.A;<2RIO8GEI. 1456 M;W>L^4I?H>G6E!@HCSY?*J[5!B]15`8'O6S[I:^%ZV<N-G.WRV@+*P^2#"UO 1457 MILW[U-GF&G89W[S70/WTV:9>'A1!.NFEFHC3[<')7F+I'@\7:1?=Z&F47 1458 MG2#;G!S8_H#@L7DTXHNSB(B0+_"P]()'[=J>$V5?:GO5#![-\=G6?!2(E0?S 1459 M=F#OXI,P)G7/O7EGF-B1X_X+COY0,Y<F.*G=0U(K@MH]DA^C/G1`MD1Q':.) 1460 M9SK/EH$1O$K$$*\5J=-BBZC<\D%W9T/U0ZR4I]\QFT=?M#F;)7K(ELYI_O!+ 1461 M(;[$GZ]GY]QSN-/<%_1"H`0[6VY4LRN5U^3:.?`LV!J,4P1$"P??TEB3AUC4 1462 MQ)'9JA"-[M<\L*Z_2OY7V4."E9,1D,7`J]TGOUF&21#15,-&NL=Y"_MH'O<F 1463 MP_*ZT'=P80C-28#MWV\7\M&C"*1&>'1A5@P(K$+L4X05E+)6$&1JQ*-]AX3T 1464 ML,F0&[+*F%-3I['Z^/JHOT@0,YY]VDTIV%23PKJ31KH&D]D11@17DM.(;]P4 1465 MI(>X;:,TQ)]!>D3K-DH]BS97VT$:/V0@-7,LT%-QC$OR8EQ@G'=72V*LZ][O 1466 MW*=,KI>T6?27OR=_;5*N0C@'SO_")=1$E<N7X5GF,,>HC-ES5JR@;71C]AR6 1467 MO<*0_2QL()<[)B"U?]U2B<T:KOF_>QZ?*B^WE.`]D\_2,JYMKCV[+VS5UABT 1468 M*>[JZQ3*J@`Q3`(@KJWD1XAQ4M.=MUSCIB*\SI#M<@G\V]NXM&.OF@M?%4XJ 1469 MSKL[WQ7;87V8[:^X^\)Q?41F=N.3N_8K4E4CD2>*<T>HO3AU)$#E'@!NSC@U 1470 MQJBPA"]K1+$[>;[_D=FRSSQ)(`*T"OX@JSAESC8BCHG5%\K6A]&<<O2=%SA_ 1471 MA4QQ6A@[OL-%@P>EGGQ,HAB0SC+)96%#^PO7TMTR\+=L[)"[=`F<T-@EAW93 1472 M07<S"J[#=G5&=/C*O3S:!7"^[?$=ODBO]R,V_:W/?O^WXC_B[7J/!]DRYYT8 1473 M(K_,[MH;TWTJK(20BF+DC2G-78NJM%E,O`E%]19O)?%6$U7P-K-)<P#?(<6[ 1474 M)+P:NH<]VY$2!=''D(F-U.N</J9,/!:;"JI!9O,4;V'\;Q(,)UX3B\PV[[<I 1475 M.<6W9.U.&>A_@-%M'DE$;'!".R?3HI,JA6\`]NT3P;X[6116'MD7_S=^MS\N 1476 MY+T[T:QKH)0)M!I#;A*MQH>;2%NW429&:.YLVD`FU>9MKK*!3*Z])=VF#:9, 1477 M#JANP0Q5(.IEKGZ,24`^!L0@JEME/T_=("JH*40M;@J1W:M2FCC45/H:[CSH 1478 M"'4SZPXO'B+G/OE)F@=LMM&@9I;B(;XZE8KY6VDB7QA*1VREB;8.?#+"ER;R 1479 M/4_D![XTD>]?MVS?;[N'1SBTA>)Z=XT(,!:*ZWFS""]>3_?.F.BNS;.JF=1F 1480 MR%0E>=F97,R*E[.78<G50Y&[SAKDO#8RN-JEJY6B(6DBE#5=`DE';"IA67Z8 1481 M=SN?N3\LVRZ'Z!;T)B/E;V'`"61TN8?HV4L-8)'XZ_$TDCF<XC/^@'`WK^VE 1482 M[\3%AC(+,U*"X(L`\R^*17<A,!PA1YK?5\-]CH\CW9!LN!0G]TS((DJ6,?L, 1483 M\2O0T`!U,D3DWV::B32:/,?2OU.#)"&+"/DO8U1-^L%?@^2C7SA137$<3C`< 1484 M:2/)0>F<&@>BDK6MS)6!C):KCG4K>K`;+/(V5]I`MSH(9FL(&TS52Q'J9;=O 1485 MZ>G5`S0[Q*>K5P_0&AM><N\>H&GR`M`B(1X07%\3MQ02C6@VK.&'^(!$LV'Y 1486 MD$77RL';L-KVH^`AJK@ZW>=M=XIZIV71$.)7+LJJ*0@^8L)'6/A";%YKBDHU 1487 MB_OU4&KD'<J/S9TL-\V<+!\IV4TO6&W&8XW7C6JG7E+GI$B6?^KS-65CQ=OU 1488 MGH]XAA7'?2PH7M1(ID7O2#S$U=?Z-=$\3]><AC+^`+.VIVL@9"!G"=2,+J>F 1489 M982L3A5NU4VKWZN8``Q?%>6,B%"Q'6Q2*<K!^7#*6;B(GB4NR$)_1M;JEL6L 1490 M3^KW*OK#)58;,?LE"4/(E"Z/DYI'<\K<VS*2Y+=/5;*L;O0"%FM:[L>I5"+` 1491 M:FV&_3B53=Q\%J[@?NQB@!>P68(`@WP1K@GH#U]B"P`-58UNC%K;UY@]\%%& 1492 M:5T$FZG?0'LTI`"W@,C[(^J"^=R6XF":#W(;IY4.%TPS06[C1)?T\_4;3&R5 1493 M'E;\>208U#0-<WO[*>'U["+A:_Z<\V^N+?'3D[ZEZLE)GKO^\20<'\&=6:?> 1494 MC#\@%=G.++Q/=$[G8UWMC>_\,W.=@Y]<,(G+>^3OGW/T3XM*Y/2V3QAIVB>* 1495 MA$0]@Q]Z!C]_<09/V_/]#);+Q+!R!1^WRTR=^ZG/#V%9MZ9&*5R+X]W@FNG+ 1496 M@H;"+>VBGN--X=KG+R?<:@?M\+)+,P(GJ*:)\F$FD":*KO.MN9AY'Z>YH6M< 1497 MDG%I&V?)GWZ^<0,F>;(':H*N!T(F4`%.#K(6`0W%0S=3^396Q3:%:D1(OH\U 1498 MSY&?-Q]0#079H$JN/703W?!%#G%-H9O,MHUU%GP!BX:[0RUY)]YG=A9^/\<X 1499 MH)I_M4'-T#ZQFS#-E!`D!*8E0-,^3AXD,"7><1^G_@,_X;C!-"?+P=0B83`1 1500 MK2>_<M\BX4HB^Y+>X[WZZ83EJ/<0WR0_&^OO]0WP]S(PO'VJ@8V/QT^OID_$ 1501 M?B)Z7.QS?5Z3.VF*N&\_'YY'_;R+L0190N[/32OUKB)P`A]F3-?KOAKS'`\H 1502 M5W2$\(\TM'][/9.T4&1&P[C'1CWX'V%FGR*=<(E)_'^:K6YJDS^7N3W_C%0+ 1503 M-TX!+W.92PA\4^_\21IJ^WZ(4W)G#"&0T?XC7)^4/ETIO;K057E\(:6:V4PH 1504 M7Q_MLT,"I$)2GU1T2FR-0UE;N'X=C'3/LBQ7=BNK-GL]<FR0(PHM5K!@]?@4 1505 MKJF/]1QN.JK"[:"5<[RIIMOT3CW=YW&N1;NAA]'#58+\)`^ZF+-P(8Z$(??8 1506 M8O1I,:#)`&)`TE\6=^EL-)][.*D"E,SE76RU'!0!;CV=MY%B\!*@:L7Q/I*E 1507 MK&W&N(%D=1U(%];#C)VSU]`S%&L08W"M_W>#6[V,:X-;Z;[K'&\E3K?IZP'6 1508 MX(<=K+:1#6P1%6Q,G6#Q#KHW%;!98>(QVMY?P&9Z"<=H>_MM[G*`^[XF`MX[ 1509 MPB@X.+W^=XT;V*/VG';OADC`K881#`\HMFETCK5C]`=KM^!Z40\5[M6S.MF( 1510 MO*S&!8*U[+"V*PEL&@"KD<.5E/EH=39<E657!NO9&(\R(#`;^F_@OQCN6$UU 1511 M!/$/\!816R$.L,JB/?F*U`[C0C^-"S7*@OI)W(3_XDCNJ9)49`*BC/(D^^W[ 1512 M`SG#'VQT<-&JE0H/]H^0/XGD3<;246@P$-\(U]?XKA\A$3=I5';P$UE9`9[D 1513 M.IG/W\X@,4[SRUC7N#&7[M9R\TRIO\73*M73/;4J=^!6<L83L7('JJ0:;G.V 1514 M.U"MC!YH`2#A-FGVV%LI2X>H'-Y\!VZEE;,[S_D.;'=$9<YZ!XX[GAJ"EU]" 1515 MC72D#2ST4:%:GGT<8R563Z&JE?9CK,3R[?.6.U3UUPVJVNLQ=EMPE;>WQ56) 1516 MNQS0>%_>+,RF'%"5XZ_[O.V`JG]Q@ZJ/T4.-_<3U;AKFIQ].H,9\PGUL\5]S 1517 MM_I?]['5?<PM@''<?Y]OP''?"S#^+%I<)L461ZXXN9PY"!2\+$H?U[50?I_Y 1518 M5Q?EU^(X8C;BV"`Q%8D[:[FX5*DPQY9@0G\9;7<=9DKX0ZHX)-832&5@)];R 1519 M;DT4DAF:J-I#!2F?Q#;_3(AJI*$_D>[ZDZW"W_%GHD"!^)-JY95O7]IA?.=/ 1520 MBMB92@+1;@IP_/B,9`&."$'X+,H!/O_-9%FS07V8QO"KJMW5Q547UWVG!/5K 1521 MJ3(]EF%D;Y;1-ZB<NWZ,U<*N"M7\_&.L12AO$X\#*J;-'2K&S1VJ=@(XTCT7 1522 MT#8@"MTZ@6QCS3FEX(U^[(/%;[5-K+ZK;89Q!\J[>:`O>B74TI>Z\G)HO,%\ 1523 MT2LOF,8;3(A9OLV7;S`)*?*P[DX[PS1EZE-KE4)`+Q9K&M:]1>D^5YZ14^C* 1524 M0])VY8?%KE1LE&M1R>1:>65;*ZG:I<1\*%",=?4^4H1<!4:WFMM(C>SR<]8[ 1525 M,+I%5F!Z\T:9"=PZ@J1%A<7$%Q<%74M@5R9!+PK\!>H<'^)ZD_#.N"CN"A98 1526 M%'7.Y8TSP9D0PA_@5)OD5$N%BL6%.X@0I63R.JDH!6%1H/A/#.3+]"W$%?_U 1527 M%+12Q>WKHW\B\RM^A_#1B)3"O#*5P2D"DSWEJWR^"(G\59FZSU\03;7@!Z=- 1528 MA.;-*[*)U"S@F^LH<+A-M(V4_:)`W</Y/M0;P772>@?J=M^ALM\WJ-(S1/!X 1529 MZ!"93*&:N9+N8\W4JV`-?8_'8.NU[6>V,.YMCG%`M7#F!M6P)Q0)?S-[LTIE 1530 M`M3&E?$V4B4U`4IT]`[U'?>V2?,=J(&0.U3]#-=MUBW"XM^.G]@L\OJ\ZB&; 1531 MP?VPM>]F=H5H.'L42<W)@GD9E,55F)=LR+*<RGE+X_^Y)6SS5A#MG\N5D/': 1532 M='H-9:(07Q?Y65ROM/)']$J+7^S7U_BDA!2VJ:\7T!Z$)GU%_`LQ+FN/HTFP 1533 MHB=&'9;>#'V<#,-3G*M$C*8HJ&KX_V2W%1/F?D&,-"ZIN,9J)6X.10O^FUO+ 1534 M1Y`-!Q/Q?MS&242VP(0!]=LX4?G\?/D&$Z./AWFA9L%,=M)+?J(]+00#F!)I 1535 M3UZ1/'J?*;+[?7(`+=U3'9XK<^X3'%-%.7+'N'`C>&<,';TO+\G>FV@(Z0@M 1536 M9R`S)`_X/1I*`DJ&%$!;,H3XZ/W7%9@O^<)1$#]5_,K+N,:!&3^=2+`$@C>+ 1537 MN@E;'&%Q[<3*']!.[-N?.K!YV-*^V(>OQ^NGN>BG3L9ZU_SKY_J7C684-QA% 1538 M2:NJ-A%[GR,ZE*MO_%=**QP>_.??TIZLRUC5%7""DO884SN/MYML.>%.<FXW 1539 MV)8K[JQ![0;;<\3=A.,&$TKO84KL7PT$S2CK3(@?:#B8:E7C-E"C[W2D5QBW 1540 MD=HPP\^I87?;[\<=&-U2"E#=W;Z`KG*\[#Z``LR_'=ZL(%_W`/-J^R*%I@YF 1541 MM^8*V-8QN_.J!I2WW:3B:6Z$I]:;REFM$L.XLE^*QEO&[N?CVPOOKN%8^0,: 1542 MCL&\38?$">YDM4@_J;1=0F#-5X*0_K7:AI`T[WDC,BGBE,6_8>DHKM+1EL7Y 1543 M\4(>]V?S5<._\EO[;>CK.ND@:E$3"V*@K1Z4LJN-+B27TABW<2KUR3@GYX9M 1544 MY&:="XZ!;4`G^6[@M.TK!9M%<C$15FY5`J\>NN6B;F.MCY-`M_33;:QY7[>) 1545 MQP%5^7N#:E"QAZH=F(.1/4?6O`>!:M7U=(R5(%.%J@,S'F.YN,L^:]UAXN;T 1546 M,'%QOGQ*$'(9W:_Y305J+M)\'UO]+MS-PND^MOF=J//6.]2,Q1YJ4>/'#.JZ 1547 MUW=5Y[Q047/+ZQCUIXI;SW)]T_;.OE2>,X,_G(M;(19*`,A2+_C#F^E9["5% 1548 M*><-XB,B9<S;9FI6BT]T:@@T<*_2/."I?YCH;&G3%ML2=V7$]28K?T!O,I.% 1549 M0$%AA8[L:'S"V3C%(B.J9<)_(FVT?H$,DQ$$`$K$^`F1B$H04U[;3V2H_?3Q 1550 MQVAFECZ13#$^/HF&-0I2R3!"MTG(P_6)#`M$KKR@T7LRQ=??H--AM7Q2H[/K 1551 M95:TEYGR0%\&0FQ[>?VM!:T?%E8L:F=[TUP8-H8\7)U]]]W77ELNYB_7;:ZX 1552 M#EOEC^BP]?W3<4VK<_#]"P;XZS(&-R.4ZYE54MNR42Q=!%Q$:VFK;\W@?2-` 1553 MM_%*;`P^MH-^&Z^>M]O\]80/Q6>'F\_R?L,"9+GMYILSHKN`5(5;@&PYQUMF 1554 MH,(M0#:?XY5PW^8O)SSO*ZKPG8S>QHNSCIR(>SQ-]U#M0=./L:)$*%090SO& 1555 MBNMDG[?=H5N?4X7J3O)0^\R(7O:.[:"R2_"N[5`/<!?<+.)L=S?O<`S?`\ZV 1556 M1C0[.&@[FAM<F[[L<%]R^,T<#!+-M4"^I+`?M33S!?+U@/TH1''YF:(#6$G@ 1557 M!;":P$ZDJML&%^;5MFWL">(.59-O\E!U=J?[6`O8]?/V`ZIBZ`;54D8&79%$ 1558 MKA`G&#^K2GUY.5S")AAXT;>T`->U>9=`((J>A;.*)ZNY&"+Q,2=E\^EAT47B 1559 M=5:/\]M3!`#'+)RV\0=T5/OR[#\A:1(11LO[_/R:?\`KK86WLO*4LBHOUY^5 1560 MR^W4[_:S2&92^[DB5[\+Y(2(PG?S?D>&P\]B#*BMZ-20R7A).4J9PXLR%>$) 1561 M%](M*?"($I7"U/80T!K0`35_?\97,4:;A>731;2^M+!PWJ6J=*[[6['N;V+0 1562 M%X%<@TV]PU(C3=,=**;[Y(%JI4_WH:)W;).6.U#=-3M4\@8VJ/7/:*)I6!T; 1563 MESPJ<!/>ZSG>I9$*W`3Y<HYW":7;_.F$:^6]&]R4@!V>+%4K2$R,-S$K,&M7 1564 MEVV<1!LIT/H_;>/$Q.SG4QNS_[$:F8,+T;F#M@"P97[>`\`$N`6`^9%*V@2X 1565 M!8#YD5;AS<U9[\`M`$R`>P`80[=]<4'7DT]6#/2][P<=9Y]\C7/VB;R--*'& 1566 MS9CN0+-@[V`KV;2!+?E%JAJ;TTFJ&.\EE'2,!*=$$<=\I>/-[JB3^,X8X5[L 1567 M6./$`-`\!W'?EA7HZL-5TV)!SL*N40OF(OM>I0]^*LL4RE-6*)0KQ0U;_-(X 1568 MV?(NRV=LQ[6/*W]$^SAC.V`UK&>^M+VC?EMB%M,HG`F.=[($HL\<]%$DO_ZD 1569 M^D;+-CCUUY^61+?27C,2(R)SF,"V^82:;^T3^;+]@X)=42EI\AMTTZG?(?R; 1570 M:;"OK?9;"I[K,U>RVNQ]D]CNR9\6Y?&TK]Z!8G^.'NAYQS9RU27V,_8=M%P# 1571 M'K3\O@82.M;>.'-5RV.]K<35[=H8YKJ_Q)[B1OA@@^Z]1?XW&NPCL*2E/SPF 1572 MXE&4<*"NUV)SZ6Z$]QDV]YSFQOC(G:;5E^OM5^D&$_;C81*4P"?;8%JA_LW" 1573 MHOH-MC42$:!E>-T&2AB^GU&S.OROQPW6W(82F/I8*I/_AW.F%`69*Z7LP^2[ 1574 MK6$:EI;W82("^=GB#M.J"0ZVM5,9RU$I/%U(J`_5X@"-G\HV7'S38W=_Q,W] 1575 MX?M1*.E];#7FM@1D*XD"=Z8CI,Z(\D?TT&,/)N>5Q<U;DKY_<A^420I9/I>A 1576 M\2?*G'P\X,K\-A.1BUE",<U/JA,PYB\&3=2^OB&@?U&,4Z52`?&S*9']VT$% 1577 MCF"2%'[&&(@,;G7@BNO<5[1SWYMY*I>AWV\\;_L?.TQVCW<1)'?\W#!M$.)F 1578 MTYWG?ZM;3X!RGN\PM73<Z(`(C,U=>YJPIW7:?<OF>E@9#N^%[.[:Y\1D-7FK 1579 M&Y!WM/Z]ZJ/QR1"CI>U?U\&N_"$=["C4#MQW[=6T]:N+4]4C/]X+*Z:9AW\5 1580 M5G?7]>*]FT]Q;>M*49OP4L3%)1T\10_#0U<=BW$?J6GU"EV5+/I]I";:^SE_ 1581 M3P=4U(H=6JT`J\+,7K:*L=&-JC?,?F,WK.1:>?$+L^W8#;.FYA>_,`O/[1GM 1582 MQ0VSS>TWHB:(W&_(#\S@[#UPOZ<-+$ZX&S@*GG$#JQ4TGJ-9@+K-W&]`,8UN 1583 M0'&D;4`-Q5/I3\/2A5,95+,5CK&B_!O4U3"\C2TFR?D*L\>OTPUF%<X5MB79 1584 M;D#1SP1HE:+2;:2HJOH<9?L>:ILSW";--Z#+2O+0H+-ZJ%E#\*GSF_,[FP?> 1585 MX&8-">=X2Z)4^![&<1NO*:3[].D`JRUD!ZLI9`.;OU/[V%F^3Q;0+3U:1SEE 1586 M^_[5W"BK9'S=/Z/[8=I`^W?]??67\]V*2"23MC=6D<9@O$F;2_R46!Q)!A6_ 1587 MG*0$,>>UF=BL9@P08MYCKW2W5;=[VPRSOR>M+)"V6+6G3PQR+1W+']#2T46' 1588 MF@LV?>7OAZ0,<96!])4>*T&4ZT?!B)N0(6H27:<R=3]1X+PA/:@3QZU?Y6<G 1589 M3?=G8X6Z3JEQZL`_YX)IUW7HT!E6VO(1RF=@,VW_1D4\\N<&F&C)H4LU"*[O 1590 M2J+C5ZB3JW^&QM#`O6:IN/JGTZK__]3'"[N$Z!I2%FM(&<SP4W>*F_8#8C>, 1591 M&)07O[#S8S>,'.07O[CY-]-.*-*+J>*+&T9"_`WG0%DF4.<F$:/HFW.2Z"B+ 1592 M(%+;J2\MX@8JW7+S6:30]NMQ0-5#LT'-R(9"?V^N$HWZR!2Z.9JVL5;F3Z"; 1593 MHVD;JUD$V[S]@&J\TP;=G%("]66ED4_DNPIW#_1%I+>1:D86H"\(O8W42K%^ 1594 MSGP'2GK4!I2,A`VHYD;A&OXUNX/Y%KY^G)@,!>9;]?IQX@GS\[4;S!?L$YCW 1595 MNPE,]Y@6]36MWXKX6L19W8>YNB&"W=A!9CW.VVSN=.M/?940>3%7($3Y6G:< 1596 MB94K5[#^S<P2PK7$<BN*I:^HPRJ<_"HMO@:17].VDMJW]FHXPK>@T8A=U_$K 1597 MIV'_`5U:F1UQ[NK\\[$BB@@(*Z^I=45JW62PI,RU5'^N%N;T1Z%L!OHO$EWG 1598 MOS^K2V/EGATAK!`B9D2(/6J4D97)69A0L"!^$H_+9/<E]O/IFGF\""_ZE0/Q 1599 M559KW'F1:PQ;:O"]@LQ7UC>%0+T_"K80MGR,5D5(P2;;I6.TNH;VN<L!WN/V 1600 M%&R2_`9.R[Z[A&BSCBU`7M9==Y_M:0L@A37<?=[^]ONE_-@/EMZS`'5Y-MQ] 1601 M92H2X;+%F0IP:W3B1VX9:%L-B7P;N66ER9S]#E1_FP>JO^W^<TVS`)76TBYB 1602 M<U2H;SAV&RL62X5JE&,^QFJ,ZS9OND-51]B@OF&804W@$:.<*L=J4G@=U7J/ 1603 MD_U=XW?/,[*-U>7=YJUWZ'YN!+I'P`**1#"FS'75*+,$LQ6BP5>/51CF83&A 1604 M;'+3QE[T.:%C2+*K4&`M%?/8"L6X7K_E#^WU"Q+\M8J./7VI&+3WF%25;+A< 1605 M.I8Z9Y/Y#3ZT9_J)"[3V<(ZX$+\&<EHHY6S*^"#`>941BQ\%P1OIB\J,/3[[ 1606 M*\/P)NE__DW_&=N"U7_F&@J76C;JJA:T*J*F???JP77;J/OH3=B\E<$NQVA+ 1607 MC=SFK@=X;^REX+YM;05KKK>]SB7@_74N$5+R"3YD9P9K/=QRC-Y?1^>N)UCK 1608 MFNQ@;9BP@44Z7(ZCC0H7!_,M0/PX,7H+S+?^\./$UNWG:S>8T%\/DW`'#[M) 1609 M@U$D9XL%31YL"F4Z1BM35;"9EN(QV@(2MKGS`38U<@.;$NG!AE^'Z4MA8F!> 1610 M,,.L[>-D?SFM1$.%_#BA]'Z^O,,V4<@I-*J0>YBGSX?P$K4VY;;(VS$,"NOW 1611 M=91QOICRPP<@7_MORPXST^.":;;5*E"TY'Y1UB)+_RB<8-$;3[5H:?+QFT9G 1612 M;-YM+4A&,VNE9)/X?3#A7AM3G#C&:YR]Y(_H&[T2)Y$H@(0!93Y6BLP%"U98 1613 MH"J7'/LN/[D2#=I141P'M<2E],H)YI@.:K#[(K&2XS?`<6!D"M]C_HD&?IW* 1614 M619$#4:8I2[T9J`8QLFW^B^D>^>8E%S,\+=S,:VY7W$]K4L=&V?2%#`5B,UJ 1615 M%#W8L@+C,5K/M((M'3`<H]40O<\=#[`%TVU@*\UY@-5NMH7:J[:R!=K'`[H% 1616 ML>W!]_$`:Y6#>)\X'U"K<["#M=#!#E;*9#5#E;,%[:IC<!4Q\HOQZE8R^"YE 1617 MW\9+S/%]_GK"E>+=X$KU-KC?*&\2J**;X<T"570GV*CEB_#2?/0@0:3O$^4- 1618 MI$S%0,I3#.1"WS4D3UUAEG]F<$N%B.=XM5L:W#2)<(Y72^5M_G["3<O8X;>B 1619 MHP(7^<<K0+Y7H%<]\@TF&JQ7<B0V]*X.^4+Z,E^]P42:\C`Y?%[A<0U]WBS4 1620 M4.2^N)A3%>:R(MV_5"GRVKNEO;4W*>]L;]8X-L:QJ[38E57<``LT1N7ZMY<_ 1621 MH'^[2W+3V/87.E%%GG^EUFIH+,26*>):A0U4JP@`Q;87YEES12A^P2M)L$RA 1622 M-&;(9)FZ/A9KRK!+D;+4/N*JHUD_T87(,SK+Q[)XPU\&TIR5@\PTI?4S7;_X 1623 MTI(/9W?UDA_L)E4>H&Q)I&P,D-0;+5O#K12%1:RQ42NB\L_W7''7%+S\$4W! 1624 M0_ZFQ8SX[[7^.[]A1W<4OD>6QHX8S\<WJ:_X>^(U1V044Z5,<[>4BI^3F*P# 1625 M^%ZE?FQ*H')W!>_UZ/?1RMT5;!PX'*.5N^]SQP-L>:X;>&]ZM$WBN(?H4(Y] 1626 MB`H5=Y#KYN9TJKA!A![U;:*\021?PB`J&#C05M).S4\6%]@WL#H)^CEZ\[98 1627 M>=#K`&OETGK.'0_P5C;%P.HXV,"RZ%6YHZQY48@L>=G&+,[P9D:YN$$<!W#S 1628 MY`TB*VX07?&T\WFMG*=Q,$OW<?:XY"&JSDH&@6JLPX]@G]/-6.BK]RP)PYGR 1629 MI'BZL"^I7%$?PE9_KH`XR]86-FGY@S^53!6Q^#VL'>`:\_#U;GYN*5RN2>BN 1630 M;TF\@'A<',5S.L(?T/6<'?[25@"QGU+G[F4QZ(+Z=E+X&16@Z1^8_PH'A^:O 1631 M_!.]\\C[#X:T!P[DC\$:5IH:%LQ^Z!D%DU_X*N1;^<PO6-C_1$;6ZP8V-_N? 1632 M:Z%>J(7Z__4O?_WKCW_5!:8.RI\?G__IX_.?/W]^_,E6OB?WN_R7'__Z+__M 1633 M__SQK__X(Z>KA-]^_.GYV]=OW[_]_.W_^>W__>WCM\\___;C/_\/^W%Q/Z[S 1634 ML_W+Q^>/O]KMYF[WO_SX'__]KU]@$+U<]6US0%Y,:F,I4]KT!&3<;B@)N=^( 1635 M_@#,&VWTHC^(!M<?:$C#NK$AQ1[$%X].+VZH(-_VF5297?`:2GMSR9S*8ZY' 1636 MZ+F%-XN%'><MD19?W!*7<K=;J8X<WTPJ[N>O1#AVMQR&4N#G!1;]]2TQ2;9C 1637 M/G$8^1_5VB]9[KN1MHX^Y)ZZ2&[WU+C[XIY:>)VY-:31]#/>3;3R0[4!^Q]Z 1638 M3+<HB!LV]1?WU":<7DRJEF%W,X>6T]NWWR;K3AHAMK=OMTGV&[]'MTF.W\@6 1639 MD1LE7NG-TI/[.9W/QSJ0DQWR`H7^^I:O,[Q/Y\V#MD:]T2V-^'1-DUJI76ZI 1640 M\6&_)6DG+VYMK7WY5B@A5;\?T_DSGR,A/_,XJI7B1*2\OB6;.+Z845R][EX, 1641 M-6)+7?K)*+`QALZX7[KT&SCHLA^C.56`P#4&&=L5J&-ECPC8X;%R"XXGCA,L 1642 M6Z/LL\BV8'!(/9<UN1P,S@G-H22Y8Z:KV[VP=T2\_4K]`NO>=84A",?;/?E= 1643 MW'LGY@W#W]70?>*A"L*+&553N,_IDG77G3&9])OT6P[:%";-/3M)S)M3/,)Y 1644 M;QCR+WYE8;E\+TTJ6=^<B?(Z?R??Q=\R%$7=>8''[^GU+?V<XYQQ?4YW)[5: 1645 MXIL9]%8NW2/67O*;F?7*#G?&O7+^0FD^P<-5BQ`R"S;Q<YG72.XXK)34'T_/ 1646 MK^Z8?I#VN9S/27^30ZAOWOLQ'G'$(;15$\(4FK7%]SY2",N87Z$H`8X*E;%% 1647 MNV</__05"[`]9\4`;+]=0?'VV[K\.C3JRF-[2^XS'"Z<`Z<3.:@:_,<Q5FJC 1648 M3BIYC>MMTXC<6#4JK+$>"XG4VQ^7[U"U-+1M"K4T,'B*&VDXGC<Q?J040GFS 1649 M`-#N8"+Y]=NXQ64?,84FF"[VJN-$R`/,/5>4ZNTAXP83B:ZZ'XLHQPV`\Q6: 1650 MVS,5/KH<P]KQ4>-")DVOK<BDQ47RY1`O^2@^ZGR2^YPRSY,<+.;L=B]@L7=Y 1651 M?S8ED^X:6XI9<VHY<3%?I<GJ17O6?.%K$#FD^E(QMN+QB?3R?8SP)C'K;W]* 1652 M(=;PMC+%Z<T@U4L"8XRIOTD68^V1+@"_`HC\HO$@^I>LTV,*.T$F>2QQZ6N^ 1653 M;Z\X+?,MZQ49][G=VH#@YK2U81K5N/Y>/;G/_[TH<&)ES$*KHU""Y'N:FB-7 1654 M/`N3)$<D1[[7'"NJQ_<Z`H'>P]0`TJJ)EM[;U0(IW?V:JN\<'_JHXSGUHC#_ 1655 ML8#[]TEHXX#*7:@LRGN(L0]TCZ?XQO=0.FJF3,7[G=AC)E5^WID'<:1Y8RKF 1656 M%1EQ!*I7Z#!)E_<20WNBBOU'?(R:.T+_R\=[G0A0/AV58(F-7HR0FS\</\VZ 1657 M_![&N`::V5.D9%W!/$ATIR#)B4E,*-N2ILI/8NH8M2)^/WZTSZG\->H%U<@( 1658 MD.C+MD9K1=5;KL_Z'N?O!_H58N::1Z/?TFQ$N4HL7X.R23_SH^21*33S>WR6 1659 M]U2OC-KZ\>.=Q`@JZCE>9)3^NB%A-'OW"&X;13;:"L=5FA?5U=J456O@4`SG 1660 M3?7LO;II;CR7-2CBAOGRKO.7YM#S-SVV4,K&+Q"JO[AID4?CG-9"(OQ-B&CW 1661 M@/ZVQ#IG>MW@HBD=-YQ15N`LC<I4_9CJ=XGU=K<$*V4]Q]-#>'GG=S4`M_ML 1662 M&^?16ZR8R(+[1$A69]Z>UD5XO_.[IAZ>]]Z>UE-8[H@RIM['=$ZI'LCMAXJC 1663 M]A]^A<EX?4_R%;=[HH_M_FF]26K\VBL2QC7A4/W7_BHWL`J<]QM/2]I<X&6S 1664 MD)GR?283*_V/!"<?XK4]O+ZZ86;I=)_K5OY5[I5:1%>P##QLED(:?WMSN6[] 1665 MO&=);R]N:@Q1<_=:3UE_F&XW9=;=?[%N;KAJ`L4K?/(O;NZ.CMNT-W_'NFN6 1666 M$FNKN5*4S"83Q"ASNV5'YL5-V</-WW+6G-#O-YT!1NL2RDW#,ZH3YA4RXQ<W 1667 M]=C4<U([-MO-ZTK!]CO;B!))7[IM'<SMV7TD'U7`8AXIV%K'[??F3UEP?3Y: 1668 M-]^>U&\P_1+^MZYV\7H^]!O9!E&)A*I#LG_`'/=;IIN^N+EQOW5+=#;54/U- 1669 MK^;QI/ZFX:F\[Q4R^1<W35L=QZ1.E7,W19O=`VFYRZ/HP'O:V>W>EGSVXG=6 1670 M3Y[79FGO8:N#>/O=5@TQGWB:?_D%,N,7][2I3C@GU8P+=\\4-<$$E*-MZI_9 1671 M=?9[V=EUSE^978?O>>4QWNXY/?!^QZF2:M8YT#"SSC'?[_%VR]3+_8;HT.9_ 1672 M%V;:1.NVYM3E?LO,D.<]2]/.>FL9"((VAG/W9$KUI?O?>2S59/,"E?CZGCKB 1673 MW3V9TVT[NSGOP4#66,V4H.CYJQ:@(`=QDL=PWF.#X:L[JLU?>B^$F-KZU>]Q 1674 MOZ>_&U;W(]X1_%U)QHG&[^D7]]3...Y3QLLJA^B/V%RXM4TB"WB=JCL3Q+`' 1675 MA]QN#G]X7_U0`T+6S7RQO78/"]E_&;5OH=W;4%79Z`4V6J+@Q9RJ3NQS1K&M 1676 MVZT\EZP)!0I2&H=[5TU-L:@7*DI5G-N]XH7P5[^3@EEUH5)KD]^IH'W[7?6" 1677 M=CWQC&(V.C")X=6=NIYUSM:$D\N=Y76\-?4F[T=69Z4&KH_SG@J?+^YI6>5N 1678 M]\37JM)E/W]GTJ6[Z1%5J>P%+O7UO:`%8-HQ)Q.;O-\3Q_26I1)Q:W-F;XEB 1679 M[IYVUWUQ;V.I?$]<\%N5X=O/)/3$W?-8;JGW-TS:+^YI(F,XIM3RH7:++&YJ 1680 MH)#\0;Z56H_YS5F=\W%+(]K.6VI_ML5*L4"*4B-T.GZE8>?I-8;B+7R!1GIY 1681 M2\W2\9A0:9[[+N*34XJNZD<R/YXN8WMQ4P/97]W4U-%J-Y?G46/:ZXO?:6C[ 1682 M=M/A:F7$7Z!3?W53"[J6<]JHWCV[^>>W/XEMFEWC'`3<EVU98BJD-DN^>HHJ 1683 MX@F\+:NUN.0E(T8LW*Z4$8^N#?9LX=I<?9&BNI;M7$6M\B9!R3&GREJ*%NNC 1684 M/;$LW!++E==,2>WSWC?$8<RC]?YF9G=&-JFAWRH<8!KR%(C%BZ/+TF3UZ4UC 1685 M0'A8U<45%*(X%#020!;7#/J^(@(W4Q,SOLCZJZ+A_$PQ=5@NM&(A*>LAN.7- 1686 MLDAZ+<9W&#J<(1^-2**9]7$&'\L]H$\0E\#OT0#+9R#U!I;U?\GU8N#G[6&. 1687 M`G,(S+]*(0LI.PN^YC-'%QTM+:^#KU<P7#37R'^G?Z"$.O[M$CNTH"VQ;9U8 1688 M4KHZLI8B6<RN@%[<\3V,'!K^IG>*7&.1H/U",83W.4<ENSU9'N<,U.+[O??8 1689 M4*(GA"M2==OYB]9'1:&$N1TORJDJ,>1Y&6JZVO/K?>ZR4+Z^W^=7;N-+?0P_ 1690 M+>0N?3647Y_'LL>($NSYYT=[#[VG,1_,7HCV'D/(`3%]E(D5,XU%$88YM(6K 1691 MX^W)^=#G0\NX,%/]^9'(E5#;DRX:>3-*;F7.0]5RRWSE-%^_4(WWGY%(WH5: 1692 M#-02YA':U?*3?`#H4#Y?*264<O])%P.QA_-I>31">[X$>2&N'+G($;"\VI6P 1693 MN!2!GR<FN7:T`]/2@,@+2U^A?Q?*"Z/=?LW'D-^B?W^$2KZ).4M'N"+%,,;/ 1694 M$-]++X%\(?D[M(\P7['/-7B&B07]A`!C'F::N'[WC]`^WT,:\]THG#_TC_XY 1695 M1Y"YF7Y2OBGL/USS.7.CSA<,5#=S?.;W4N-\;J=Z%/63*'!*G=`*E`>0WW.N 1696 M:;YXN*B*!578#+GU0@^-Y(*9&R;,#9,Q(,]?S)TY"N&`)I^T4:]("''5XO<X 1697 M")_R2>;^,5\O7%]S3>+G+R,Q?Y7F9OX4%P<YZO*G^"`1T_I"V`-2+-W5WS%- 1698 M\7YGJ^"&.SZ$Q<+E_6\LS'+=V7$S$?F.07IU9\N2VF:SHC#Z&S8";BW\AAH. 1699 MMR9]!MY:]>VC52<::N_TO1!ML(9",=@CHEZ7_8GJ<KE-,A0LDVB,%(.]@T`< 1700 M(T-<"B+#9@\4X37?1XH*-M0#(L[YY(?Z`MC[\X,H8]NSQAWHZV+;!")&200( 1701 M&R:*VFJZ#XL0NWUW41$&8C>:A]@O5801.XP4@F+@\L_M,/YUTR8!.FRYX]=\ 1702 MAK)FFWG\-'[=/R7=![J\`Q+LEHLR;E!Y4E?!SC!*'B8+H4$/&^8:U;C]6D4Y 1703 M_?WO4C8&L.63T8*G7('?&V'5WRB^'5GW#2CKSD"H2![@0WO,'[E%]Z@KTC\G 1704 M*U!";F7IUP30TSQD_;BY;:71U3O,HZ1>336'JQ.V;:.ED/<:[):O*-0M2;8) 1705 M%J;Y/LQ+XA)IOH'D(=UM8PL8CSOT;CVOQSIKSLS^4IHS8Y/X1K7Z38L-TT7- 1706 M=YCN1_?3O4Y[5/NMJ&I<]%L,OJ)IY0TJ*E8^QFJRIIJGI8EZVL:"#!<#.R2$ 1707 MB.V/:P<T2._UN$VA@<`+K$%\PA)=C."R%6T1?7F'O6FP]!9#N"Q"6\3?.B3N 1708 MD1*_Y>>O-YB$KC?[I5?,5'452FZAMU(1-"M$OD#>QH`#+8U<%MCT95G<M#V) 1709 MF<XV\=@@PM#C&<`<$5X&]6[M$8O^\N7G-;+,[::\::T<;9:7&BGQD6F+]+)] 1710 M*)KS4D%5?Y=G%M'1E<SFI9^OZ/"EZO('IF"QZ[K\V8:(WBZ]<MJ=AGD]-SV2 1711 MQTU9T@6(<8S9EX6"::R9KUHQ7)[-Z']O5-CD-.E5E22D4;W/;T)*$NENUX4X 1712 ML/=4PD#,U]R*C?6ZV@A$@QKI5-_OK5UY*FOS,R77'^L]Q%2OJ0UE$KRGQC45 1713 M+KKXH&CG%@/ZETPU)D4$FF5*+P8:4Y&*5XT82SI5G:H&:6YSCIXR::4?[ZT3 1714 M#IGTL?D%2"\@+?&::EP1%`K7R$#N\113R5;P;-!@QOO<+:3PY?EG#JD].V:- 1715 M[ZG6#'S[5#>F(I;GZ*D?S8\W1[>IVM?\1,H7??GYX:A_0'_TVB(BW#[>^]1E 1716 M"2\K&?MU*_ST,LU+/ZR%_M7K(AU#K\)??DQ9N+[]Z?GGN7'^],7__;U0VYM( 1717 M[=5T9/S+CPD"(6QS=Y4+V[6LZQHB'#)Y78_(5O?$URE3_`5;[NDZS-6_WG3N 1718 MA+G#&AO(12#>`=*T+G,(T*-#!V/K,E5M6DH]4HC2->9]G3O_Y<=RX%,`U]P] 1719 M;\OP3=<Y#S5VS^M2FBHO=#L,RP&C1X>4Z5KG+G_Y$03KV(,R5JS`5.*%G`%K 1720 ME?UI]#7U4*%C]`Y-TF5T[JD+8F!7'H:!4Y-?="3"*3I$'J)73T-#L6D=BQ"* 1721 M^<.6>].YVU]^"!X=;!KK0\%,'%!?^')2L:H?M=)R]*P?M4[N7U.5CZIS3R)" 1722 M8\O`2O-'K8^2HWY2BGLN21L^TG4MQ8K&DPDR-PN:JCKW^,N/1^Y9*U',H76> 1723 M+?VB$^4K-3-V$XZQJL\U(@VFJ0E]7LO481Z+-,5UM:'3.]2<U9>+Z]:$T6%U 1724 MIO8CG[32MM4X!3_Q/&%SE2]M'43K&)NP8[H<(ZMID#Q07:V`Y*D:0V1K?LC\ 1725 M&CHWG<GU*WF_*Y6BG["0U0_/XF\X6=,4`8-^0V)5\_SHP2R&]CR2J>86]1O. 1726 MN4KK]A7G;W-M]A7G_>OB(]#Y.L^-IA_133U/9`XC:TTHH!F&NM7F]22ZEX;F 1727 MT_55DT6LS.O>JPJ]?FXZD>U*YIXHM`4L39R>U:<J*Y^Q/":749VVT,=H(M[0 1728 MY>1/.O<\D?(1*4(KJT\+"*:N1:D*:)8H3G390M#$9GJ[22QP,G7N>2+QN%X6 1729 M(H4I$W\W,K^O;Y'6=6G8U_S=8*$>YF[-MB"=]G4:]MWFV)"-H)+]]2J7?C:2 1730 M54+4V-AY/2G995%0;NIY&N=:9OMN)$&UH@%_\[K6H=5.::I)(]5R1=>!Y9QP 1731 MPSI>M$5J,A&1N'L-^MDRD>Y+O]N<*>6FG4<AEZJ_R,]+[*[TK!257'^7?3B: 1732 MIS7]<#3/E`'EPV6*_.XK-(*&%GIMG7L>1L8SEZ%?*CTF\V=6&?DZ@A3P=R+? 1733 M0"_&[.@Z=_TX.O4\C/3+*?EH5UVZGMJ7?J?YH!R3A4I3_'@:ZN6=UZ5WC<^* 1734 M2>>>IW&*L(L>+YQSC%T]E_.ZUV&?:3[IXK4/"VF2=\7>-2]U:CJ,M3>5X2D# 1735 M*TE&(5U-<4L<,WAJ*-J(<SXT9FW`2;Z@0.$+.O<\C+_+"I=KZ.FB]VYI?21" 1736 ME3@<_FS,^_D[3%FX..(6#>EY$OMP=(Y4OM(TS&%>Q]ZJ22"4MC&*AEQ&TG^S 1737 M-CGV,Q-G+,.XU9SY:LEBU*?TUV-5*RU=CY%,`)DS(PME?0<W\SR)<2R^*$C/ 1738 M@ZC'!?:4+)XN?I#$QLVKG)+FH)+G9*H)RF/21;)9D3<O0]->R$<5BWK]2$-K 1739 M57D5*=!76O('/9",`AO6:1Y&XD[V%0+)C=V.0YASU*;UI>C^Q2('+WUX#!8[ 1740 M>>6#33W/8JT:;S'OS&\_-$J9KOO\:KKR8>Z]*VJY7KI_M6@K[V:>1W%N_DN= 1741 M]X14"$5#L.BZCRC1A9AZ7!*D2'>G^J)K[R:>YW`^M*N<P.9YM3($HE2:\DT8 1742 M3N:K_L/P:'Q$%[HADWU4YRY+3J`%+H+F)$PL&N":<O&GRJ1K?3U&*A8J>]%A 1743 MM3Y#\=*YYT$DZ3)KM`F-G=POZ&I?DPT4(SW7(^>LP:#S<G(%JX,PKW5J8HJM 1744 MF6^`D,RIVUI3(GI.:J>>M^?1TVT^9VXE*C=W$Q-3+-DXQ`5[@[+SBT3;KFM] 1745 M0261I::;655U>E?L>IU[L&R-'Y7UX%C)6[R6-HRYU*XZ&CD-NA5%FY>385BQ 1746 MM:%HYWD4(YT06=EY;Z)IA7H'O7"V:D847LM[;X76TC<OUH_#33W/XE3)+7)Q 1747 MT%=I6M&?8F-'TE#;.5%*7=M+T`O%KG4,:/"49'3N"+EI(9Q*U+H%\XH2RMXD 1748 MR`^&&DVG'H_).E9*-OWNDO71B>=9[)>QQ-`G[6I-"<*\GOO.,GDZL9_+*L+2 1749 M\%"MG&JWF>DPIF::`_UVK)T7^9I,3^8=ZQ`5K3)E)QTFB+;@IRZD#X2NGJH. 1750 MM5+,8WA0J!KK0IZ.JI98>@Q55Y$%)&]"[<K+,TNH"^$0E1H#'8@]\D1*/N!1 1751 MDPXK\PJ-?.-6K+49VHTDLFZE$^>]^<W-"=@>(SL/(P5C7M8-B33-'*TNIIL8 1752 M^F)2UD790CE5#9:>$U6Q0-*]T#1DAZ)CHUAG`ZG<DUO12NG<?!:1N=6R5OUH 1753 MRK$7JFFJ%QK>C"CDE?H^WS%?\N0I75UVSLLE=H4`I[(5N0P5TKJ%$%8Z[\&J 1754 M_G.PID6\S_NM-S]WH+G#&CM8HUNQS8^2+!B5XBE98NAK\%621M,17C4LP[C. 1755 M'8'W7*R4+&R*^'/3N*WYD#HDZY[&EJMI'3/2SLEK\>0+G9<8XQ0`Y(VF^*X< 1756 M()"NR`=]%2Z>4YK`.2^7]K*2[">9(INEK4?6]9@Z4N`#L(*V'[S+Q_KA9`_J 1757 M,:9Y6&MJZ[*P=.'M+-1*"B.#*QE#BUZMJ#=MD*S[A5Z&[40+VQC)A_3D"YVW 1758 MDN)%IC6>@;7,52U@R@0YVOMGR.JN=QA1/J,MF0XIK8_.W6@].,*<D!EZ6EA; 1759 MT^A'7-H*S.=6"Z/+B+810X3./<]C('V3):N%;RQDKY.*M+";J0\QPWRUNB7F 1760 M1PEI@6-BK5>G'D15Z1Z9P)=MA>/=Z42X6`/2."Z+S$]$3+/N^BGBAU*8S<O< 1761 M=1Y''CF564O[F-\F5RWIDTAT[_J9YU,CL\.\'FJFEV!J##4<(7%12V5`&<GK 1762 M!*3'Z&T]+,WM9TD#)(/'8KD'\SJF]5(Z=P3:Y`B,RFQ)DLY=/V*<--GX`PGA 1763 MW>)4YZ2U)WTEDZZIW0&9I/3U2-M(2<08S#/L5).XWO,J5T(ISDU>8KYJ7\J? 1764 MSIV!-4O-UKJ')%;6X,:ZK$6[>%"LQ[@L]I;6OFETK\G!%><QV%<B)2`V4='Q 1765 MD-BT0DJ`^\6*+#Y*+HO-D8@\K]S>KI7LM21^&M)3.!O=<G-(GBM#20BE:,>J 1766 M6)-$V9(*.B914L'OR2#L0U"R5Y8*0S1-&T.;CU[D]HC*G$GTOE:B!LH:$7EU 1767 M6-.)I#%,4>&@GQ,PR^I\U=GLTOCJ8NT.Q9PFWQI-Y`<2$$-QTBH5U697))Q= 1768 MFI)#RRB+2@]+@PD<27JE\$/+J"+$]$=/2F9D[C:/9'_,TZA=L,A>'0673K:6 1769 M+DO4U0R5>&3O5J82-G^LC\Y-'))"9TOCY]>H]G1X$+J<$#)]QR)1ZYRE+-;6 1770 M1C81>:9:Q]L\DV0)U]9A1$0CT[=&PG_BWV9*JUA/J="WM<768XH#0CV-15)Y 1771 MV#JB1I/0AU*EK=)&+OP42EVH/?!?;(R#RYRD;CT)QFK:/(YQ,CZM<4E>J:KU 1772 M+>=D89WLR6@GI\$?4T\:6@&+C"%O$NPZR416HR?5D'T3+^94ZR[>IGE*>VD! 1773 MIV:@K87F\G1EC8DDLB5*$<4O')QN>,_CV+*:UR;6^%#X.XT*UCGI3TL!RT)Z 1774 MT=S\CSY/DG-,4>78N3YXJT2G!#.6R-=36H8N7L*ZGE(IUO/BZ]@C/EL>?$VO 1775 M.)30M4YSY[[&9A:9<EMCIQJ+Z[J>/<\X1/.RK@-;T7)>OY_DM]C<`W,GF8L5 1776 MF;SPGB.Q,W.0]TJ@.UGQ9E=46GA/23@8WAU&F[3PG@0%PD9:>$_>!3Z4%MY4 1777 M6X,N!>V+72I)T.[9DPRJ$/E[2KJ<J""0%.T+HGO2Y4Z<,;;03ITMT8)UKSCE 1778 M.O<\>E&PGLL%H5RPGB(T=I:L=@YL*A*T!]L6XT)[BOS@/CHWC*A\;S`-B`OK 1779 M><2:.JL*V#LLN++689G6%M:34BY[N<X-ADBWRA).98OT;#V8L05B5`6TX(`, 1780 MM9?3^%;*TM]U[K+FGJJJ>2-I@;+%>M)4;5DI+WG_4,0H6R@N0_6$H@HC%=ZD 1781 M'Q91Y?$*X1(9D3"*0[D:7B@54:1H(87D)')80"34N=G)R'NSLAZ/M4UUH52* 1782 M.ZHDGES)CBK))UD/*D5=]*1&)ZH(JH>6@N<KQ`X^J)%V,*@L'U2ZOPYY74_J 1783 M`TO#!Y62!$;).O?@N3/?&[SH?$Y),ENRB"`=.$XJ!QD.Z3M?BDEQSFBJN[.. 1784 M+-UCG30MK/.4GO240E@$2TT+Z2GR0M9*19<'"K7.38[&A71<9J&TL%[G/<HO 1785 M![YP"O+Z;-U:.,=KN9Z,G@R(J?@ICG>4A8YL;HE-9HJL2"^<Y]9R9Q3Q8NJ, 1786 MU+GGN9RWZF4!`T""A3I9YE$X(&:AG#+;FZ*L<V,W`Q]1W8.4QT`A\E']6T!R 1787 MZ9Y-D2IJ\L"SKFP5..@EBW6><',7.CM7*6KT*)#XD_68XP50M0;/=LH\;9>8 1788 M1>PO)KM3'/B4)K.(H7CAKI%9=,6>^(7QY,JBQO%:)0D]Q">#X4?G;LMQ0K^K 1789 M38.6(LD<C:4\[',R(,MFPMKRN0SDVP1KXI-IDCN%#TU]`._/)Y-D]09#"Y], 1790 M$KWY>#2^G'L8[\$'DZ9.8$5\,-W4Y.`([+_A@QG`'^QD!NCH>C`I?GS`?)D% 1791 MZP+I.>](-PJ'F9SE,EX*VS\SQ(5T;$NV$JR7^38)U@7&GE1N4].!'*ETY:6! 1792 M*!'4T91D`3H?\H7U)+;#^.=\J2EB%CV;;NYY(`<KEU&PCNQ"CPOKJ8SP$5E8 1793 M3\W?V">[#_1DNHD3.65"T+@/FFD2)HW[P,KG9(=S3M78RAH%Z:MDXY]N;I)3 1794 M1V#F*5A7]MT%V2#\T]#D4<W<.-A/XU)#FY^:K*JYJB^-L*CY4H\./:FS!RQ$ 1795 M_127)6Z&1V.1.=R1IK-8VA`G`V9F*TK7U]>81-YH39PX>,$2Q=V,%YBOH',W 1796 M9C6RS5H6982>4GH2%9$7=<4FTE`$E*P5&LU.XV5XS]-8.G@^'\:+[#$0UO@P 1797 M7H_!@55\&"\B,<P5Z[KN9=AA=#,/<H$E-@]EOC?5?BP^'\;KT2*?MLB7>3** 1798 MJ(=Q7C-OSS><$8336&!/@G1C=UE:2'>V%*8F,PW')<G3<N')Z89T@!%G0"5/ 1799 M67Y;["S2^S=8Y5/4]<AV%JD*=&/,[EA'T#W6%Q?64Z(&88\+ZS98FY6EOBZF 1800 MO`OK$5ATO2.=$,W"<E66K](MO(">%%B/BPOKSDL;9:6O%7ER1YH\'/72!'C& 1801 M*E5CE.27BUD##+!>''P6%M9A;D,39MW<9,)A-(+LCQJ[VCMIZMPM$`1KZX79 1802 MB[Q-3IAU4[-5U9@FO7"23!>:.";-Z:57FE11#^-%[%H]JL!B\OXWG1N*9)9] 1803 M%-0QA7DXEDG0C?#8K'OCBO8:[-U"(85A:)/#<;Y1D].7R1*3(7;C^,WK,)03 1804 MTMW,-!6';UZ/WE25]!,/6/GX'">^1^4.E1/2Q)V]KSA\-/5@4SQ.']TO%;LO 1805 MW9"F()PI[D)&3POIR2C9?K&0E@"&)&@O]2`MM*>Z`R:4;GA3($Z^.A_E)`L0 1806 M^'@*WA2().=O7D_RGN7XX5$L2\0[VA&1?$GEU'FO,@./@G5D4U-<6`>*=Y'S 1807 MAQ5B#3C>L2:;ZA0655`EK*[!E2>B7.=+)56L/I=%65C/#=F5__FIYWF<JL*0 1808 MXT=#$VM>0;!NK``$6>M%&4.1;],N98!^:N*-L0XM*D"_K;GH^:/KTJRH2&:# 1809 MHIX_6L"J(7-^9HI1#>9QG[<*Q^DME+N&,]#*3#E*(^DGNHGCHK)L^)&=*:!1 1810 M'(YMZ$M#Z>>DU[(2T:^N2\[:G+VIJ)G[W)J1Y</&U[4TG7NICY7OD)4JZUGK 1811 MR(@->MA@I^2SF=;,O.?Y?,V)*PGJ.C<LJD%FXM`Y/FIDQTQ81SYJG70\DS0S 1812 MN6PSEB\MG..4-)+-G:`^"M:!O0)I8;W4_21(LVR?%L[S)FAWBO(.`TJ"3DW" 1813 MZL*:#/XJ=`+K?JG5AGX[(M8GZDJSI!4%ZZGT)C\W,<B%=9K\7>-3L;97T\!Q 1814 MO!4+L;+4DP5KT-:\;BL<+^C<"58&S-29$5Z"957FAA?F`,$@2$_%4T.,L?3Q 1815 M6J$".C>L.EB`,+3F)XV]8K;>A;AOP4/SFF)#U9LWK[LU#-&YYZ$D+,)(&G2! 1816 M]V6OP4*ZIJ)9H(R&.'=QV=2;F37`H%%`3KI8RI:M,;0F!]X\1'%ST<L,-DG) 1817 MQIB,FJW0>$3UP=V-(G*`);<Z`")D$A]LYZQ\G6H/*CAF,KE'MFWF=7\2FR[G 1818 M2:>>9Y+FFES!#A?YXC,+FF%==W:<\HEJ<*0V/5$-<69=3I3./3!WOU2+HR=U 1819 MMK"FA76@Y=7SU."C5]6-GD1E'/1$*2VAH)SYAHEYT\*:(Q=3$)R6-6;A/!EV 1820 MTN-$0?SK>'6^UIG!([FXL^`<EF8E*UVX7F<4G.4D+ISG%B]ZFMS,Q"(;6S6B 1821 M+'3H105'0OI*CG%1W9%L?*O!"V_'R4U-UIS1U;Y"0^<>,KY%J1#+*RK;8Q2+ 1822 M8:+[5\IVFMS4Q"*OJ@Y6#+V*1H?1^T8+V*?;HR0]3?2%.?KRCG*AN,RH@:E8 1823 MYZRM(VD_YZK]L>GCYJ2>$]HG?6A1%-KL9"W7N2LR6]8.NH".H%J[;/%U//&X 1824 M.A51YAF%+S.E-.CIJ88V1<==S)>9,Y$3:GGM(U]3>).)?I1J4*-Z$>A1P[B1 1825 MFYD<CBMBC3E3I=W/-L3&UU.(+";X53VW:6%="ML4[TC/DSA1"GJ.D.'`)I(H 1826 M[Y#8O2LX=S;'I4O>@9,IX@UK"L@I'80H+J0G->7HTB9(%<UVH2>OSQP7SE,' 1827 M`2;QAC2%XTR!B!6\)%-I)3+\=#2K=D9(-M8MHR"=LE5*\U.3':<XQ@377S2Q 1828 MC[!B,3C(2O<KV/&AM^#,@W#'FOP=C86S(/MC2MQ6D:JB,HV)?0@*RAI=";3Y 1829 M*-ZQSJ`?0^(!,7)$,8)D>#:[^$;Y;E)^1$DX;8@385Z.;/'&C>)QUF&B=ZM% 1830 M'*3TNW:M]A6T#2[9,6)4Y1-#04`<V,HGIAC:%?O:>`^-G:N9],1P#DO7$U,> 1831 MC>5@/C"4N<%4DH^,FQKY&YT-]%VGNM14D2E,Z')'!B%!^'!IH4T.?CLS;FY2 1832 M'B]FH6FA3<9/];O-Z]$N-57,R]Z;6O3I22$W-17ZF8DOYJ)60T*"ER,*SK6P 1833 M([G*]?)8RU)/"J=.-S<SA>.$J<^HV9"6,EG\/>'(,9!QH5Q9&XZ"\M3RC=^X 1834 MB2F#H[H,P(QPK,L83H%,J0'XF7S>P?2D>7NLF-@[SB2FIC55DK&A&<.A1Z6H 1835 M1D/"VD)FZ2N,HJ?%S0O'(YM496N$7C2)FGSQ+4N\`O!OFJ&"/<=.E"S;9#(8 1836 MG3MKQ"=VV!*!!=FX`O!Q,:Z%]*1RIM[D*1:9Z2YG0[M`_$CJ[9KWRE"?=,[P 1837 MG9LLAMJ"W0X'E67B8"L^$&YF4AMK&>KMRA1O=D%HX,.1YV9AX:RLVY,_#ST; 1838 M<^J+P]'N.(,GCFYF!`IYR^KLHID:9]NEA71GPU,<^@YJM_,3DW0Z>9X:\3*" 1839 M\JH>#<K["9<9$0C%8-F3M%KS9"4]#FYJF'"Z&?$RJD(6M:C3.[1FLA@M_,7Q 1840 M]`OIQE)`N"%-`3B1-`H]&Q3(5R\3QC)XGG&3C/(&FA%+3[Z0=K,.A)L[L"'. 1841 MC`CH-I6MJ&%&Q(>>C@SZ)W%6M/"I:&4!-V^D&$'V3RK*.4H('R][$6\77;;+ 1842 MXEAHU7L4(SI?]J)S)XMER:0@K^AR7'1Y8W)#%ST/"0%@:LN>UV54.P1)YR9/ 1843 M8RP7DDKX0*!^'1:7#P0YO(>:LFEF\J3I&4APE@T]`\G6!`)J-2<3IFYZ'"B, 1844 M()A(10$+PQR^]*"+`U?X#+B)B2&N4.1TR6\3VYL7SHFB'_1$).3+Z2%`?E4T 1845 M4YJ;FLPWM4?U_F*J9DGB&<E@Q4QI"4?33@%B0JN9TMS<2*3*EE%,KU@N2VID 1846 M-(/:LK%"_-E"\^L7[EA3A.I(U91]9.2Y$X&(TF;J27K,=S(.@8B.2W/EW-04 1847 MDD,U+=3'A,6K54(T@%.-8LK.'!(D07UT.3B\\(8RA>/D965=&,?,=K<L&[@E 1848 M,67CKAG3:#>OF#/:?VEM&)V;(N&F8,<;'O<H)RVQMA_XFM)<;-/#-\VIKT.N 1849 MB[-Q19T[P7V>S)N3J4(--[/@$Q`?4R8P:W*<M#JI_R8CV@!,E;=]M"6A!./H 1850 M`I,(Z[:P"'+-;I2TL&YL\HJ"]&C5='(W]3R*K4:-2Z*9IOAA6@5EVK&6&1?2 1851 M9*$P$8GB=5>.RQUK&%.7?B]8!U8Z%M+D#-7L.+R$2Q:EJ2>IT&P8/S62-SB" 1852 M(BRT<PO61@&Y>\UV?:3L#;,E4_1-L>0./S/QQ6$J1;0,)%GHPB;.L'".G7G9 1853 M0CFP/+D0GII,M!W"@3BRS+EJ5@Q-DSG&=:$[2723@,O,5454)X^P,'`XI,P] 1854 M$"Z>$6?2ES690J"C[N):G:P3$$1BFC-?F^YL[F**PIF\Q%1G]K07W>0!;K.B 1855 MFQPI>5%=ECD@MB7J-G=3S]/8VV4[GL(#KF&$'D[BRW1G\GF'8<(.^92#DW;< 1856 MU.38&!Q6'1?:A5,>XL)Z$M1JIJ>`3`O3!,)*79=M[J:>AW%49]2E!6#U)$;# 1857 MTJ0=BN3@&*LH6'<V6(8[UO`SKC2CA34U\S#MF:(@.)HMR&)+C0)!>RD\X8XV 1858 M65$')].$A?=$>YB\$QZC5C,^T8IPP&%8:.>ISJG3Q,U,G#%QK%Z7%T:ZR^^R 1859 M0>;>4K\)?;05;[.P$&^$_'9^-YV[FSI`H0'A4G4@H-0X[W1Z1!_ZG2$K\,:^ 1860 MX/PP\FV>UP&O?TAJ7,589K*\L\G-S^8EWMG4!26:@DLYEB%I8*E-W2D&)U4N 1861 MTL`[&[[F;%8AQ"IDW=@4/\_:PT*:BA-7W==NYGD:&_=KB8*SR#<+YU#9`A\7 1862 MSN2A2;JOK\>2E^,=YPC1J9E-B&+\.1,C1L&*<T]BD/LC:5P,7:=B]3/\W&1# 1863 MO:Q/38:7OVM<#%9ZV5`7UI4CD<-"FEKO&?EV,Y/AI@<KI4%3<[K\VM7TVS*, 1864 M@)-'?;GN=:VK]D[Q4R.OD:/=%M*K!E"3>?+074UOD+/$R^.SY*@FH0LF<PT_ 1865 M[%=5FQ"E:V1)]L<^X2T-C[TL_)1_@SH%$E6IC%GW;1J&,[(V>E#JG+@'C&SA 1866 M>4FZ>)0]G)"^JGKHO*SL9\:N]1//<UB#.=P2,F2+[N!Y72)KL->ZG5UD-#TG 1867 M<C9NO*-,D7"-_4!14*90)MG"=%TRF_87SIWKH<0LK\2E">,-Z0!_?[,MG`8" 1868 M.G4+$UI<=B4*UF@ZL78P8YUUV_JIB2NRQ2H(TI6%W2`+':M%=M%U8;T]9%F@ 1869 MRY+&_=3P9>2N,CC06/ZYA?6D)55+B6#!M&(JXC#4D#DOR6NJ<\^#^'L3N"9= 1870 M84DO"8K&,EQ6W8T"%S@^+LF6"4T"N=+0N1&:VN/*I"1$>FT+P2E1JN$DL>]2 1871 MZ6PBEQV;"WB3DK^1,])U;CJ+A>\-]K7QANT4><6&E,37RX3#NY0<?BLQ-JPG 1872 MC\HGY]*Y*QRN-+:OJ*4AOV6E*BZL8V'-*"ZL:=\II27,NLC).G<CJ2PAE]HB 1873 M$`F-PI0R+JS3I`^J*6+\"FX4M,.0JBHZ=U]SMQ7MN[!>P:Q!ECI5"^#'2W(\ 1874 M65A(1W%FN0RMSI5P4"%!'5F$52Q-,\CI4=E*3]'MWJ,26IHZLY2*72I34Q`. 1875 M31W9I[:0GJ13J_N2;[\+G<5FX6!%03@P/UO;0><-G*XK>B*^%R_ZPK:T)*;W 1876 M><5=!F4-:I%7X#I=J7F4<2(1DJW"P+R>VGY6DUY"[;*F`0N)^DQ=02,6Z/>D 1877 MQLK6U+D3YDXK/8VW:4.E]:[4E'QR:^N-=1VXE@5O3?+E+@ETPSLSWH7Y8UQX 1878 M3X6^::D[NC\X<S4*WLL1$@5OMOK'#>V"J><!L=@@H,W9(E'0+L&<K'ATKFK8 1879 M2ZBBUU2XU;DK+TFHU@<2K[BJ>2RTJZMW0E@N73H(UJ689TBG;I@ZKY(`03Y, 1880 M=-04'ZY(="S6@_UY7=YQ9-V=S?9?1U)ME+HS^&A)TO2P%NR[EE4NG*2YT(U7 1881 M#9IF!A=SU8R93B$X3QD7QL)KRAN.LY/++FLZ1:(&W=T12LK&RT-5K20&]TXA 1882 M.&04->$TP849U/U"OXU^.U84:E+K`EVW,HQ2VMP!<[.8Q%03?3HNVXXH-9!M 1883 M.\(]BF,3%]Y3?F</S0UO,N4$5Z\/:'-P>0QRW2ZUJ=%4,5GQG7G=6!MBI/5+ 1884 M)K@W5JV,A32)"<;<ZR3U28L!S,O2+#@4KU2K[44W<T8D7]?*`(03%4/5S4B5 1885 M`X?&J25VX8I%C1=+Z:2;ET[CRJ=;"',TJBQQX5I`LL*#O^;"-@>K'4&_Y".J 1886 M<Y,59_V.?%A,,RF-D[/$L:PAJ:L\D4]M66\S7T]%7(VYJ1C6=!BOFC5$.5G5 1887 M`MYX-!5K'+SQR%?$(8&\\<@)M&A;O\W=(?IUVWCE45+75)Z$$@@@('%A/2<V 1888 MH;)0V)#5%?0SL]K8-%\@<9$&=9;S=;5]1T5\<[)]1]7SKJ0Y`F[NC'!Q-HF% 1889 MA35EO6GMG'F=QU#?'V&=JOK*@76\5!?R,Q-WY-B1L)">\KCE\B<X2B^C@N51 1890 M>]*-![]H$KN6GQ>1<"U*%!?-.R[;>_3QJPJ65)VQJ59$+\/UB7]/,G8BJE0O 1891 M)PDUP8=>5BW"-)'_D"<P!W/*D))4YZ;K*0JIYRQEPSI3230N'1#XUA3.37NA 1892 M,GG!V"TY\\IE]`U%*)3;^GF1M,'69=YF>5**;KL,WIVD`4TI(ZO'F"T5OUB; 1893 M]HYR)1,P!S/$A7.(O#7BI:]O+F:ZCL'J(-)UT:),?F;2&>=0$PK)>\2.C+"P 1894 M)A>!;;.,+!XC</G1V`0:[DC3*8PK`506F@T;019ZRN,2T83EX$HY@O'%9_2. 1895 M\D#=*,W#Q[HV+;5'TY:FQ0KF95V9B&O6RAZB*#\EKYG,76!(Q3N.MK":RVR1 1896 M<HG\&ARQPOL*>=+9J!9R2IO&QR5U;?0"&96C?WAK4:V_4FUK)>0>J9F2KJ=4 1897 M;60+)0:#6N/]W)'HTK+'Y#6VL9$E+KSG(2JF#".WW,SQ='UQH'V\XTVE<)9+ 1898 M=J$=(AMF@Z"=.1@B"-IQQ0<MM"FO4MVR?NH,LU/5^(6$E'O3,I`'S.*98%U[ 1899 M-64X(5)'8WS\U'0:4];*2UC<H.UUL;8Q*\^DO/"ATAN<>UDI%V5ONS"X7JJD 1900 M5B24L90*FS2P7ZIFD`NT9ZXP,"]*&H+(%-BK[J!H.--AS!STQ;N)JJ6GI)X= 1901 MNKYZM!T443E5-U!$J28-7O93S\,XY=.B>XE^F<R?F<C5P:E7O'_(1;&2?M*Z 1902 M+M<PXN2F)IX8.(8E!D&CF3^3YI9RT@OKR<F')@?0>-ZZX88UQ=V4)9X+UM%* 1903 M7F.BI<`NI+74LB`=+S,'^ID#Q_IKEDZBHC5)73OSLK"_?V$<2]60%Z#!S&8A 1904 M'*@`L,X=M;(NC0R7T:;X&%PI6-98))SU2':@+ESS6&4Z/-ZH@T."['I=#N+@ 1905 MW4*YGAQ?S+L%SIBNP;ET72I_X\[75-.RZ-P<?<-;ARK:+&FK\G5>\4]E77)X 1906 M&.\6*M$8BEJ/Z4E<9D?G)J=_7+=J2QHK10]*B^M=<IV'<3+RQ2SQ6Y"F\F=^ 1907 M;O+[-WUL,UY&[@4NT!>*+$"RRE4T=PB6\3RO"X<:Z-0PJ:ZA;8G]0:>R$NF8 1908 MRBF.R!76@C*$]$K#;DI%*IMPPI2U-+@0GRR;,8Z>FH;42,':<4I6TN_;Q'R< 1909 M@NT2LN!0]^#G&D96']D`W72Y"X5!C9S0=>QF6J"DN;8"Z&3NQBR2D@"+;8]K 1910 MOD4U18YRRIR?.,'N7FU_D$F<L_@WPP+"<"@];523J"EI\K+]<:&JJF;'8^KB 1911 M5#GR@2RAP]L5*!(']Y+56Z??YFQ5A>=UT=@(&IR"E74CO%IWDHXY"R@2)T56 1912 MSL+">03KP$S/21SHOU"F6!*E)N1*X>2OMI8R:7'[WK(1$TK.8UE$%CD$K:&Z 1913 M+I6:()./<ROEF>"D?DT*+W?,,L'%WF[LA@A[.4=:=KY>_E=0B$C97QQ_R_7V 1914 M89E7#;UQ\48NW$[MMI+RED@V_1[5`DHSC:5_1;Z>BDRW>OM4O\EKI0UQ<>N7 1915 MJQA&&#+S*D6W4)Z[+FB@`(VO_$IAX9R70J5S=RYX2DW.:K:B[8-D,TOZI)D: 1916 MV\7#PKGS40E!$&E255KG'G1TZ-[4F;7"-#EIF&GI*A=QG](+!*ZKL?`MO8HR 1917 M'\UMT.%SY$B.A>[4Q(J(O5CA;)7WR:B/DK;VB#4]-6A87USG#L":#,*<?<J? 1918 M'\;EK*$BL6MY9_[F_=%-G*#1M5851W5N5,AYM&SE,6)'U27UH-/$5U/!=%[F 1919 ME1@XUF58CNO.USHWI1OG9"9&0B(TJT5+3ZJ7JV#-EG8M`DJ(<7`0?W(W-9ER 1920 M,E?="0OIM"JKA84T20A6P1I3"P&@J\9A_W><Z41.14[4'D)QF;5ED0L'/R^$ 1921 M`Y<\S/(Z*_E`?DH:L,ZMR1MT*\,(L2XF[5H_:2Q]\R>F%AQ5:3RU_5A%8J5/ 1922 MBD[=D!`<['M3>I+9D>FG)>XM4Y;2*6U20G!6$S\U+*LK3'FLL7$TE1[1(R6Y 1923 MTO%DF^>D>^F30MG8*C3ZN2D^[EK^X(7VU$`M0A0]5:(EOV%N=KY*HY0I0EX: 1924 M%NKFII"<N$JG#T&C:RW+>3F"U@^<5[6JW02K$2\]YI1CU%W=G4Y1.=(S99+H 1925 MK$7+X0H8DOY&/\S(:UD7"`Y>;]6S?5BS)5)0SJ2HP7IN4*^3KAG[U,+#)0Q3 1926 M"X_!SDG^KK!H=C53^)DYV;AJ5#QF+E8-O4XJ$(QR5U2%,,I-22C58E_\S*1$ 1927 MQKSW35D>,^F;(F9HZ9L2TB+."^LIO29-:O1SHR4.AX%(WY2T.O@LK%=%TH7T 1928 MJ-9O@Q(^+NV$@VXMW?(Q^ZA:BKY20(@6Z*:!11DY;A8I?Q>1%;4,L83X9(;Y 1929 MAC/)K%-65=T._3R8SVG?E+;B0-*ZSIQ>*GU3)EULJL]90Y*.HCBK2-+J/S*7 1930 MSKP\]-/$A<VD;<KD&I=*8S0^1O/L^*GI,"Y/@O1-H8PF#6<"VD/+@:^W,A), 1931 ME0'K96=3IQY<%6=Y1J5MRI3');N!IEH=6Q;2>16-6SBO;*DJ6%W:M&903(ZV 1932 M35G:W,*6A:.%:S8/#Y[>N`H@YKNRK#.%I76;FYM48;J,Z#C[9NB98E'VZ$92 1933 M@\E,*&-;56RFZQ:CPQOV56F:$INKE4&-3RZV<6K3%,XCD)XI28JKEW6=8>?5 1934 MN5'@>*%-T=I6'I_&UF@$%6B[CX88]Z9J%?J20(/7N>>)E*8I*0W-@(PP^%9) 1935 MVL*#6A8;(3JL!`VTCVB8ER3(0><F;P=ZJ&BX981Y4SY<AA>D2\N4%&N2AW6N 1936 MKB)M4J@&N$M('Q2;HRU3YG?K^J$0PIS5DDL=/[A0#7\;JP2H?5(N;L6E4_>E 1937 M_LY[E7.NI&?*)#_1OA-%P[."L)JF3)'54458+MES%77N5?Z?K(E>O"%KX67) 1938 M0NCTPD5*!>G4M"9\1%W*(,Q.YD:`#JT&-U=8*!,_E?!`_'!D\591TY>J154) 1939 MI\$ZUUI7G3B``"X//W"CE-R%5[6(H!B)N=F9H2)V_3+B%JD*`?;]T+DC+P@9 1940 MYCBR4-JF3)6NJ.N&VH>DI5I4OIXT7`T1Z&!2XY(T=>X$09NL8=EU^8K()+`C 1941 MPY8ZM:K3_5A=`QMZ"XY9'UIA=E!\#F.9@AX9LEMU+4#/$S4E=%3",#:50B)4 1942 M)]<N1:<FT\[%]K^%,)7I464C$F,OTCDEH?45OT;F)=!N*?.(+A%0YZY8DO!@ 1943 M=Y3T39DTQ5*$Z*X3\LG:$8N=`I2PLJ0@K;4P*#R'4HBM8B7&YJCV0[H>?6B9 1944 MK7E=V/HJO5(:5Z^7'B0Z-;')S%Z3(4BU)KX-;JHBRPX#F+5EG<]H$CA`]SIW 1945 M<,HZ]SJ2@=S04K`2F$<MDAM1?FL5/L#3<I%N+A>79I<V*8.<DS)WO(PI();4 1946 MI&P*?UW%_AI?1RX/JTU20K"F`30Q5Y+4J>E0YG6+@\VE80I5O+8UIB#(I$4& 1947 M&8VHIA2ZOC@X?AC:J.>(7VKL&P:VKOR`:D>Q1K+P+6Q36-BF&+04L;56&1$Z 1948 M)(?<+FS#9#IBI.5>*'%5^;V0PB$/E^58#4<HJ@3DH>O<F=LYC+D>UG")VH:4 1949 M8-X3[A5B4A'U$>'WD"8I%.$C)DR=F[@DAEX:;D!#5W+#:I<R2:\K'4Z!A54; 1950 MO=-SIWH>WK1'BLY-YM852"<8+ZJR$(Z)LY*+S!.J;Y(RE7"A%;CL;@,VT5'1 1951 MLB5+CP\JC2//"JM(`M"B8+K+Z&[0$$#ID:(S<^>X2XU]:"G2S7F`?BHKGSRM 1952 MZ[1<JG&-GT*26H#]W&A8M1SJE\Y=):X8+4JL<5B`,<#6CTK.#+$`TT_+%$!D 1953 M;HK0D:7LU-'3=TNIEXJ8:)Y25/>C::XA;0QHSM;BCC7%YZQN1$"CH:"_:EB! 1954 ME,EF05?<9R2K?31`H6PJ/U@3E)$XFKQKP$%`B]6F85=HH#*J\BSJ3,(E7E:3 1955 ME,F^U7CN)Z:2XRS5+917"SOIF4*EL*0B6K!VHPO?L"Q'"UU*Q%!U;%!XSM-Z 1956 MIJ05<4#/H(/`?ZX.$](H93*SIB7CJ)5(]3UDJN%-:F1VB79H.\*5[K1I2DBN 1957 MHPRJ`UA?D$KFLRS>!3\S>@!TZQ*"<"T-4:-Y4]7R^0'U***X%[AU2Q`QF"[# 1958 MI*TZ=[/^.Q2+5-6UR0U76I6N*93H)2NPFH=A?HK6X*ZBTBA%YR:AE7H]Z(J@ 1959 MAKOJY-2'Y(J6D(*N)<'UU2$=-5BG$#<SU>3@R(^^<`A5VPG,R\%IOG7-6JO* 1960 MFW0S"Q<`0ER&0/=(YK8<A80YL:S3N!"E7TJL8^%3LML*U*6R[RU2+G8\Z=1A 1961 M>9H"!V`8G89*9&)&@/IE+1XH0('=R7W]^BHK&U_GYK8<W%):6""U3[F2&I.I 1962 MU4E4^W%`K(IP/310:=HE+&@LQJ`HG?E5I$<%H;XFH_*3MMVI5+CO$82,U:A< 1963 MGGJ@Y+JZB>C<BS]28JG[TI1)RA'_?5TV+@C8^'**.LJ*Z+%<;[+PI<Z-:@"< 1964 MSIP7`@@_>DJ[%)63UD,2RK?S14:'/!XVAH0GZ-QU-4$9JW&BM$NI,=I7)-^O 1965 M43QD+"9]*1*9E<B9I(VN52LCO/*MR@V"RIHR5VW4@+8GU3AMQ%I(Y`L-+E3N 1966 M0>?N'&4:J']B6TC59>+&&U`&%F<P2W\4*BPO-I3`A74E2LQ:H`S$ZY1A1Y!< 1967 MRT'#=]#S)&A+"VI"WH)1;?*`!K5PTETJ>BESETMSX&F>7E9%%?RL%^GCLA1J 1968 MZ9`R^=80M"\$G.CQ,=&OH+GJL+9P$/V,=%!%U:K-K&F>B[,1\[K;5G+CNASS 1969 MB.O<T=`F?)!TOL9=O2U,*.%-7`8#C;.DP@"Y@2[9\\C0T$SD49(Z#`<2($3* 1970 MI1J%W#4R\]55@^R.0>*ZJ-)CU47GQ\[-H")KX2-)S5*2L&=X=H((,R0D<2I0 1971 MQ57G,.Z""SZV&7_GE7"J&["@,0!U<.-@O,AS#]AT^._%9JC1'3NSZ(D(O9<' 1972 MHA6[)F*I$$4!.Y0KHDT021[ACC.)IY!@NC5A'-=JD$*Q"0R=$F@6XFD,&#$[ 1973 ME:,V"^ZL'.","RJ[)HM,Q9!"DE6N4&S"ZI`RD4,&HYNXX[!7+?#ZD,=D7%&; 1974 M+O'U4,6<(N29.-PZ!F2=I;)P7]9>9:!M50])^!R%.^:LZ<5H+:IIEN1K7WLS 1975 MKZ)(]%?FZ@/P,^O$E3T>&L>.K,S5+85:A<!G377JJMK3*.!Q97$BK9E5/D2I 1976 M0+:PN>=A[,1`O\CB7:\_O_UIOE-YT)BY/(6N'TL.PM]4H";RW[^C!^R`!8+* 1977 MCW$)IC_KQJ-P'8P"%']1@D6]CZ<[S9[V_//O\3_H'.D__M"_YR'Y^/KX_"__ 1978 M]X\__2_O[__ZS__M/__W__M_^8V:P[8_VR_*?_SQUW_\\5__^?_X_.__^B_? 1979 M_^7'G_[KG__#C\__\O')H(\??_KK;S\F[!_"/_SOX9_^MW_X\>/'?YI__&,D 1980 M)SLNXC_](U[Y^?AB0/JG?WPGR%!(_J=_?,;'5^2K,N\_UVH\OQ1<`7Z_@]O\ 1981 M[5SBK]CXNM-<]2M"K$[XL[Y'*H[^C(7`5#@<?]9WVMKQ&?,7G(93F@&<(I1S 1982 M!7@.H=X;SYCFD/GHJ:H#3M+:9,2`U_>I?[9GC#0+-1#'B/Q..=(71I3W0+8E 1983 M#*'S%*X)#S1C+FU@2'X/5$8-0RB>>JKT&#(1H-Y)SWC1[.ARC?'IO4VM$,/S 1984 M>\4LX0L-S"/&HE17?89!3YGJ\\#0Q!W+,3;/&>K`X(D?'7F,IK7J=?ZR8ZT" 1985 MX3%_23G[';]+[W-3\.\FTGT*ZOC=G&,R]8'?T3O6UIZAT1S4\AF_C-QW&S]- 1986 MZ(>.7\Y9TEQ[_'+.0NF]^.5\]4D1GZ'RFT^%`+.$!S6*QB21&W=CEL2MK#`+ 1987 ME1^Z>)(I]?:<,`FE&-#KA()O.>4Q7M;P3EW,,4F<+S^%?4R2N"4[9LGTZ3-F 1988 M*>0"S9BDHB-?>(:,14ZT-^9\U_M4&R[,%][#I)B\F&AY$3!=>B<6/3`?3=T+ 1989 M8S7?/E9"A78>*=%S>,+;4Y-@S'AQ,V;,&+BC)J:,[]2?#C.F=RI>B`G)NW(1 1990 MXIDW89L+1S.2&C?H@T<L!55=H-G)QI,(QTX/HB[/F#N@MS;FCMS?').G]S@Z 1991 MIB;1OR:>NKQ3HD7!U!5-5N=C`K]$B#1U&.]YJLB8FIH4=\Q,,5^#US6B:3IF 1992 M3NAECXFI2E2GE:<3\CZN>2@"'Y`KTN[!`:'&M'@&6#*>0?8D:I2,IUS<DAJ/ 1993 MF1^':O/C.?%]X`#@9%%6<,!S.!2^XT'$V'(.>!#(PFC/@?>B[K=X4G^G&@+T 1994 MH/F.<VM>O%`7][W&@P)W&\>3XGNC@X9S&:F.-)XS-P1Y1?$<>F9K>`Z=RRG6 1995 M/7$LT3X6CVQHMHM']CEB[>^`VM&\A!<M4,8#`\>^X)$1[>7Q1'IC6@><Z#Q% 1996 ML2>?YZO/%>QXVREHY"=.,W6JQ>/:>VFTJH46FSK?T-/F@ZG--)[&47O\M(`F 1997 MZGA:I$V>^8.1.E/GMB4J\&C7)`A,`VB3T>,JFEP^F0)0E3@\F?"A+UZ^T)HV 1998 M5'S#^?YDD2KT;%K^N<<:GGV]QTS/"_CDB>@8/7OB45H*3Z8=.5]X."F?8Q[D 1999 MQJ<Q9CR]XL_P!/]`VUD\O:(9+Q[>T(EXX.$3D1YH:2(0*6GMH(M[EN/IX9VR 2000 MT^CAI&'UN8$Z/@0UO:>'HXY;?59F-7$N`A.<26/;,S,:DY$`C4)L)`&-BG[` 2001 MP**]4S45(-$G<9H_FSC`N)HZXW#1=Y]G?&!G4*OZ)^A4HF4!F8I4<O_)5(JH 2002 M#ICC7*#)9,`<4YR4BUECCXE1*-QW%SA4]",&#NV=A"C@0!+VP$&:R]/6]R=D 2003 ML`@X(>D)FI9I6X&D334\8/WAJ9TD%4QX"O3Q"7HV-\RDYLSU,R@H^J<FQH-6 2004 MZ,)NP.:I$;1C?31L1?IHN>.HP5:=+RS&Q&HJ^-@.@2HU!<)FTMI)0@JC-9GA 2005 MDTG@Y+?ER13P(DF"F3?)'6`/$:>"[!?$@0F5PAV(@4J%*Q:8T&+6N>SC:UE' 2006 MX[/S1BJ\+NPRZ$]0S;G].Y"9!WI2',*%MM'4J9],-*>6FIYQ':O8GMA&;;XK 2007 M/MND![Q$B;OA`K$I44RI'7B5N8M&!5Z56T037O.'9#<FO/H4!^8[-/Z6O%NN 2008 M=ZI1]V0:.\\>OA9);B-=A!61NSA180I;8P]/?$T(4['2!HZ$$?7C!1:9^P\# 2009 MC8)>S(0%PE@(A\;-O`F)SDW1GR#!\RD!FW9^1@KZ)#0F1G6JBD^FOU-](2SF 2010 MBI6YP9]\[GH!%9J4*0*1N0]+XJV;N"DP$"$K$FW=N4;4JB80)A7<@!"9QZ]W 2011 M6@U\Q#GIL^`C4BX<X7&A0E$F/`(AVK%C(A<&>2Y:D'#TBBQ#1(->/'S>[E-G 2012 MHL?G]RFOT6XE1&()>'Q%EVYZ?.->YD_0:0HS?X),I\GUGZ#2C?A`Q,I<5Z#= 2013 M2B1ZU+ZDM,X[-,#NCH='VJ%7I(>S*(.OL.30AHU-+;"?3*NIE.Z3:36I*4\F 2014 MU=2W]4F4&I4&Z?E4%.6:J#`)*!=.VGP+L,+Y>&K62X^,W(B8'DE/[_S,*<Z2 2015 M0%>Q"A1[]`2!1@MR>B1)?*G2=Z>GUT0B.+-I6GILD50RY$OJ5(MG3LY!)WW0 2016 MT]$<F)X9N=DQ/3.ALS,]<[[[F%ND,/DC"1;$F.6SA'>GS4*TF';UW._T:%HZ 2017 M?G),^)07FO?24P+:#]-#2"8M'8N9N'<T/2;/<]GQ%+3Q'O00(C>CT[$"#2&" 2018 M22\[?X$OCE:V\RD037C]+FX/3(^!J)J(VM+GS:0:%%K@3!H24=-W*OJ$YY`D 2019 M.1J16[*WTV$$>:<2/_2\0CCTK\%-?&EN$D&8F\W'U!@P-7W;!&860$>GW)GP 2020 MF$X[+N(Q4YRK3_#9?.&<4_?;.7<G,86H,MAK(%)([T(-C&GJ``D"4T>TEWXN 2021 M`I<'G;)`NEF9?(E/3`<IH5:Z<\).&R+2A!3^G!+FFQ)]:]BX)#.V0&0^(*F' 2022 M="+^+O-</X'^/$/8!M0;=T[8T(MWSM>Y)_"<#^U*`DTW-UCK1!*Q_!>O*0CE 2023 M1;,EM/7&K"%5^C:3JDR>.^<@8:</PFEPEV.:9.(Y"N8([X,D3L*2&F73$M.[ 2024 MU"\NDIWG#`U<@A@&"8X3M3G#>)]G$4MTH:7S$XA-`8:.'4DL],/*W7SG#]O2 2025 MN=)\.:H-,7\XN*OR$]^#&D&#<`3@7-"@=_ZNH@/P_-E4@$FLBA.%4B<UH^\Y 2026 M/SG>I&+%J=AO)$)5T1QX#FU04/.3%I2Z(L_?S*-%[T%[AW2S]$6?E39[_"+Z 2027 M,^;3Y\\FF2)$)Y&:(^;8$<@\,,>.00:%.7+*(HW6A:2P.2;1Q[YH.29Q&;2< 2028 MY;VE=F%HP":E(40MOC)Z_-(K9O`U(GMSP;\26O;B<?/,3#KS/E?_^DK<8/?Y 2029 M]4ZY\U\177:YR2Y;,099->9\J[?NL\2OU;L3?\YIYB$*$T;*<^"_"3C/2[D` 2030 MGN\2`49<!:!TL.=LSSPP,15A`3QPGT_`(]YH?MU.LTS.3`-(ZXS$/^>`R:TN 2031 M4J%H`#$"(K6Y`;M>>8ZYK>,D230B<%M0C)AR4Z7!%4^GIDTT.@^20N9^I^$7 2032 M>A5B-#T'R,[AD;O\/N=VFDBE.+?['$T-FO##1H\,4\YH&!W>IPP<,#AR.^!G 2033 MSEB3.0)H93H^Q$KG3^?SYSD.^.7%O1#Q4WH^D:>,UYSL<#XH898IKW3\DG() 2034 M@."<8XHY$;^#E#\%-?IA0"-3_(Z$QKG?,KXCN70Q`ZPCF(&4!C#G0K/%1E0W 2035 MTWLU>EC"9Z0*?9@AOM>IA#PS;X!&5)+F:-AU#7-T-*^B.=!LBB0EFN5"QT9, 2036 M$B"=%LP2N=7Q,V/OC#D-)JPDMN*UT/:AT3)EX$IB'4V8![K.84(B\\3Y`K\X 2037 M/69MNC;I9,*FHS8+F*]R@Q+,!U)4@."<&[:;.1]M#-*L:;X+G20Q7^#VKI@O 2038 M<@?F9\)FC22ITMSS^&=,7.=Y35C_C%(X/&_GYEPT,1HD=484P3"3N]+$@?O$ 2039 M8N((8>69&@X$67EHZH*&.]@3\S&ACXI5I2]:I\)`<W<P=BSJ?)<I,`W,?7&K 2040 M2\R-WIP!<T?N$/U,?#Q*Y[5&Z67>`O.]"KAQI$>.&OD5&C<\PF,Z]Q6CY]#R 2041 M%=)=Z#D7[7<BC3A8<P'GNB8<+&I#_4QTKE"2',^9(B=9/>@YA;M9X$%U?IK( 2042 MKT-$F,RP]!QNBM3H.=0GBK2;A!-)VB,_)G`?73PG<JOK9\I"O7@1Y_<C&RD] 2043 ME"V""0\MW#X#3Z7MF/',1N]`?+WCG:D_&CUTOO-ZL0O]0?%`8JWX'9_D7`AO 2044 M)JUC;5V4Y+WPO(SF`WA<H4X=>%SE#C=X7.-^47A<7R:D!!)`@6@7'GF1UI3P 2045 M1-(W`DT#&C#%SOEG!!4C,9">'5'<&@^'[2GPRV9N>X#G%Q21"7A^I8XZ>#I9 2046 M[J8RCZ>3^DJ6LE1PWJGG(AX_O\+4%0<>'Q[87TP_QE0@4^!52!U4(!,YOS+O 2047 MI,2%Y?%X,DF1OD:/+Y`L\?Q*RMTD0_3\QIVQ\/Q.=(!$[<SGBT3@Q"0ZT.=A 2048 MVD.E"('!9%MMTIL$TH/7)%P"Q&/&A4[@W/G`A6-V^<MCGV1>#)+ZB1H3,I7; 2049 M"@&9AA9=P&7*.8$8>V*:/_77Q%2+VKX#E8"(>J""?M53+V%6275H@4J8XG3G 2050 M31%161R($+N=9`N(D'`Y%B)E$09"I)(-`GN"%JLV+`I82*!O%1<C8D2N]](+ 2051 M(Q*X-30PB=R[_1D[^.U%/'LB=7%A7&`U$<QK>2+7.@=6),A/)9&0(DF^D*F" 2052 M*"5:Q@`I(F*TF4`KT;@,2'7N"$A8H7T<,:8$:DF=<(%5@",62$V5FH0TB`.H 2053 M:0J<*.LV\.[ER$Y0B/E9IY@0@5-"ZP&@E+DE!W"B5`7:;(GY19H",N'4WBFR 2054 M!"AU-"@DC-"7#HX8IK'4TPPX!6Z8#:PB-[0GKQ`Q#"J-2ABFR7')'DX8LF)> 2055 M@"'9"Z_**$;2W5L"CNF]$0<G%&DUVV3L"?1Y?OH$%-&;!Q@V[NP&%'%*,U"D 2056 MQ:1VI4"1%(QY8"*+/8UT.)9ZJ&0:^:30B#XR,4^#2\`"0^X'6H!A0.5N($B^ 2057 MP0;\$`)_`;TIQ090'V(DM3-ZE1ME`3VBZG2(";W^3JG!A!VQ^$&;CH@Z&AH# 2058 M.U(,,KE0F*93]#\YOB:F5$<1B"*\,&`ITX`K!'A"U4[\M0/*BP/3B(+ZP#2A 2059 M0C2?BHPV*\"U<%LBX%K1T`NHDJFEX%"@>5O'!B1Z3/EWP)6_*5`-:(<.3"FV 2060 MI,U3%B'6%>*XA&F'@$&84AE)<)9"2'<P[4R[@AIN`M%(>R@RH@E-+X!H1B\8 2061 MX%FX=1(0)8,I+6\'[8Z5OCYS$=(:"5,2:0,M9&%A=#)?H!K0J1V8DD:7X?F# 2062 M<I`;#A-*Y)';@M">$XYT@?[19N%=GFFS4"5K(`YC#V^&R)T*@/A<AG#Q`I/2 2063 M"<\=^`\[)\%^J#L:\&[<<Q!X=V[G28C3SJ;VN4!\[NRI^@-QN*O@)^7V[@T> 2064 M3E#7WD":TER5LO"&K0KK/;=.)8<(H3WIXJB\W(&KRP/MB)JH3`82FHL`[?R@ 2065 M/CM`>^YX4I,BV!:5'(I`>VJ%B5R]S+42]DZ&.!^(^(-KU<G@(WA6RD0Z("Y3 2066 M3!%Y^TKB$G=`O[Z71CNXT.>@$J!`OZ->+:%/;W(Q?;B("!<^@AP$Q*L>N50R 2067 MT,?G!8'@QB8)Z!<TU`+V)-XV;!:(T*/!ESW?9"JA\%FCGVLBYA&QGZAE.%X@ 2068 MT&Z&NY+8;X!/!)R.ZO/A!6BO=AS,1+8=<"MZE<!\(4'W`@-'X6!:+L(_H*8_ 2069 MT"<#3Y\2902#)#S!'2>G9+=\)B\>KWV5T\#,$90[,<.>6F>,$"Q)3H_@C537 2070 M!QY@]`$G`V``<XQDSPBL"UPC\(L4+C*(-R$GVI4@#<TO1"'8>)?.=8+I9>C( 2071 MDV!&[S)U+_*X17#5N1I\<B.:<>!E8`VN>!=Z+U@<H'[T/D!BJ,U6ROPIVI2> 2072 MB:!&O%<MV$FDZI$%GMZ%R&*?2QY8_VADOPVL?[1&/HVV]/H,<2;-Y2L%9(C* 2073 MWE'=3KP,$7'RM='+=!0\II>96R_#*T'L^)W2NO$R\W.1:!S!C4GH9BJ4N*\. 2074 MWF8J`R0;T]N4]YP2@A[F%YN;$.$*\X-!.(R!-:N`MP%[(T-08&Y,#>?Q-I-X 2075 MPM,*>T"&UQ@*3V:63S6M!K/\^8)Q\'&9'ZZ1=YC>:5)[<L[0.W4NX$PO1;6" 2076 M@3TX.%71QTL%;A2!EYI";XS@5V"*@4,\(&>7PF]5T&$.;T7&5-KK]%ITN.8; 2077 MX+V(6+>&KP064P?\Y62Y(%=/8`6KY8%P`9@.>H2;E#Y>@%@UWRW#/PP)-,%E 2078 M#OJ;2`@C[Q>]72./6,3^(XI.68/T>J#H(!$-9*0A&@+L'TTP\((PKG)H"YCI 2079 M)&UXP8Q^8'C!\CY58WZ_RGTG\7X-+5SQ>F0K*XCHH#>=M._"ZY%5'!$59&BY 2080 M+CC3Z3U3*@@'@/::`E,\,I?$`JTC+2,YO2>\R^L]IV`\Z1)>D_8NZ0+TFK!P 2081 M%O!R%*X>:V].1EP7T0M37>"=&:=`,_B<T2KC8T%VH'YG>,?"W0'QCA5]-?&. 2082 M4Y0DCVOH2^+!%YRO2SN"7I&TV,G40V$YL@3X%N?K%K(EAV40NA)_R<E[QB0( 2083 M](9$$,AL3V](!O-"A&+@"\^CS5^RT<DNV*F0E2)][0I9:=!QIG>\V"&%M\3[ 2084 M(J2(7C@$?LFI-(';0NZ@AFYXQ\+=#_&2E1N'XBW;Y&<!L3'SA:=2#F<^G59J 2085 M*X_W1,1HPVLBC+7`GUQ0!8IC1LJJ#89WCEQ9#B^=4*(0[YRY#";>F1QDN?!G 2086 MQ?MC\]+K4^PQ7KES_71Z92K37B]F!E/+J(L9!&';)+*\(_"&7CFA31=>.4\I 2087 MNO#)I-#WQB]<']09%2_<N-\PWK@OZTA@@8682X"\4HD1T0N'J8,%!++,=\\D 2088 M4P065ZCT&5Z7"!B+>0E)JY"<Z<M/00S,@HXVF'4#C29K/MZVH0PW7K:C4#R] 2089 M+%=V;Q"6(->3"!E9TJ%/%EE#;_-KXW7)6#`&>!_8SXK:F@>[98[<H0\/FA<J 2090 M"_=D3PB%32;T<0);!VOL<`(3H>X4!A"BR/=P>]+I+HB18M-ROTCKGPM`E"Z` 2091 M\2=R4UU\BJ>N65ANF6LQ18?*"U"XJBX6@,SRJ2$B+S4N/(XEZ/!Z@E;1<E!K 2092 M!RP!BQB073(\$AR[A4XW%\>1D0Y)!KG`A@&JD8\U(&Z<$/U#DM_5./H'O79C 2093 M1M`*#!:)?@K+`#T)X3\PGG2:'1)37(YPZ`UD4V#3`)4RPPK,$3'R"DPUF&PG 2094 MM`)H$U:Q`!G57?'^A2L*X_TK%[?&^S<2W?CU(?P$Q.T1\RZ+CEW@/P5O'[@7 2095 M$=Z>;3?@11D!`)D/.7D>2)4*;(XH1*H"VU\A/H3,6V-PC!"M19V,F]X?^K[L 2096 M^VL*=A61,V3<C9E<L7,E*@4S=39#4W``+00),KE"Y:&*8G00:24BEXW$4J1W 2097 M>$%I*>!87$M1N+`REJ*":"#:D2@%44VL12<%&6N!'4(<)4)8F\R2#\,\N)&E 2098 M#19J!J+N:%5:SDSO,MI38B'*//&\#)6;(&,9R+;&D5*T(HV<9X$M().#(Q"! 2099 M38P(E@)KF,K!DZ6U23$I(`*;HT4F"L2H4X=\,C=*+@U"%TKR];4G$LJP8ATR 2100 M"OUB&0K7EL8R5)0YQRHTKKZ/9>BH_$RK0"M"[4VP##`-7`B'HS-#N@LM`YL& 2101 M:!$2R:F\&\B2AI"ES+N$3-@!5A?J_8QEH-PWQ(1D>%]Q%.BT7-=%43-$.7,B 2102 M#WD)*)G^;"RZDD+!)FVJVD6+@5)2<2T&2?,M\@$)#ZK]B,6([XC?HL5(7(\6 2103 MJT'^U<!1M:DLZ1OBX=SD+%%CKUR#EZ,_%AV`@%@NEM7H#'5A]0$]N;`>Z+)6 2104 MP>PS_*4([<()*AS31A)PN!"SA]UR%00W9NS/B.`(DIJ(#`W66::,W)?J%;`I 2105 MR(!8*6:`%N<*\(63OM)(>>NT-E3+#LL!MWGFS1'>YP#F&&QSP'(DLK3R$9F4 2106 MMC?>&Y/ID/$P+GF2=`=:C(8F#%@+(GADT@D0)]'F!HM!#N3,[`)!*8W91>1V 2107 M?%@-BOI,D`BP:7I#C`R)&R258C4J.H)C,1JIW40IX27@H"K2>2#EM>77:>1N 2108 MAXD#86[0"R;39_]`)`<4+4Q'63=:&*K31AY:6I<+]1ZQ+L07KLYTE.3!"@6> 2109 MUJB#!4$"G4P2G)06B4*&(@301H8G6IB&SA18%S(E)83_DCP&MD'2)_>RPK($ 2110 M]&O#JB!(HS$%38@!8`I*C(AV-RT+XE(H#!2>C'E.(Q:FS><4.C=SB0KI0VR[ 2111 M(G_<<YFN:"0<&8C2AN6*`C'F\F0:14M":@GM3`IW'RARB#6Y4/\22Q*X4BK6 2112 M)(+),6^9JOG%Y)16I_.2%`1"0T0&KYZ2.!:%O.BLBJ;.S61H5:@E#SDB`LNK 2113 M,%70J@3N8(=5B6C9B$5)W+,4BY(?E4,!(;`2]65Y%<'`7:06(B9S>3J"WF#H 2114 M+8@&)`X-[Q1[%"CB!9)JX4`/\C>";R+6;>KR'>L#D0NB)FK<D869%NCBXJ!8 2115 MH,!E9+%`D4L08XD2U[/&&F4NF8XUHAKG&2M4WWO@<&!6X`9B5HEK79D5B;F= 2116 M&H2R#%6<HAIH@28A&I`VP;1(C`\LWEZ%%RBCTS&M3WD'9^S81ZU'(BQLO$4$ 2117 MU"30"7%O$&;(AY79`YAX?>9)(_=#7/[3&IY0P(GTQ15L3P8K6I^.BHA(:,"I 2118 MY90'%*3LS(X#@BZP.)%K,V-QH(6Q,+X*BH,ADRHP*'&!U@>Y#17GBM:*^I9B 2119 M?8CA9HY:)\F'9.D`VQ^%)?&Y"A+KNXQ_B463#,//H%@J%GQ`?K&U!J]21;&F 2120 M)SO+(YE;6!Q.%,^6EQ</D6GD>H\!VRB0G:T_V14\T5Q:0.;UJEQO;F674$`G 2121 M+5?GXI%(UAA<1A3K=;US\':$^)P3"_-41A?"ZV"B/BYPJGDD(>K2:DW6DUEW 2122 M`56/"(">ZY9)XPR9K2$7\RET;J(XPA!9AZK,IP(WAL124:`'F08A.5-;X"<+ 2123 MSA2E^62'6IR:P9/#`$HGTDS>M!$HL`KQ"@'["=0*WYUM<Y0%PN$*\S68S?5U 2124 MW.KDJBSI(F&B@T)/VD7]CY%F0E-=G<_:9$:@VRQ:<Y#_P"ZCLMY8'JI,#BD? 2125 M]<_I8`8(U]3Y`LM3T8$%R].X,Q"6AS3?"L9%AS$7WDC7>Z?@]W"QO$1!URQ8 2126 MT[ZCU4$9[PO$:+);BF6L:W,E(M!PH<WG/2%25Q)'5T`#<6!6,XGG<#Q-O_JR 2127 M7[*<@^2=7CCM",4S..L(52>Q.$1#1N4LG(%JLUB<N4X4&Q$@;:-B-=8F<KES 2128 MK$[B.H98G8SN#%B=@IX@6)W*O6FP.@T]D[`ZL#M=(-4)!*`B1ADNG$ZB+QI) 2129 M#E(!,B)<*"@/DG:-%+*(4YA`J\D[-K\`\77RA08R74(-&]":0-^GA/B$]?U: 2130 M3CRJ![<2KC+T"(0(SS63A"M20!N,'Y%BT"#IT"Y*C;[O`%5/2#?H4$9(70@L 2131 M>"/<@%8D(0.&SU-&LPHL2>$6*5B2RJUZL":->TAA31"UTQ$M2J2*TA9@8,4" 2132 M0N[.I!["O$K]")YU68T+CE/F-O-/N#H'_+;LZ:28Z<AA#G/$$^+3%/W9YM@H 2133 MD(ASS,B&T5:.6:(/M5+,\+4CI]T@K/""B("`*DHCHF\)QL,2^"06T!:ILG2L 2134 MT`Y(1BAD,*-521!OH"5!!.^9SQ$L^(BKIQ8MR`QA";S3=PLL@2-J-R'J%,&; 2135 M4&')W,[V6>HP^X1YECP2;)RE[N)/MLUV6@J6O,E%!B6>Y"%F>)E=E64PWT9& 2136 M&F4&10YX[[UR8ESEPITKC2[#]C&82)-7,D#P1D%F+`,4A,Z<.Z!V+Y8!;J:* 2137 MM)JY)`AWHU7(Y/$$7TIXYD"Z!XSR6$RVY5X78N=AURS@WN1#H0#U)AY\2#?$ 2138 M4,F3QE;<3D[.Y<8E1I\XP``&3@0AD6^41>X*<2DC)G5E"+(9%-D;%'J*%,%) 2139 M[\8E.8)4L70E"9+S`0N!\.C,F6J#*U%C(2@7`KE&A0G-DF%0=+[S?DAHLH&5 2140 M(,O/Q7'KW&T'A)4UM4'J$;6X(C<51&W$WH+"D+FLLN^E@6Q0``UI&9D5-.)J 2141 M::T'8N8A8W<*0H:O]4ILO*\4EQ@YMC^3<(J<QP='`EQ,;5D^H76`IYA3'E&+ 2142 M%R_?WRMI990W1H)4X70;J/(4V4#O'B1?D87J0E:?$/G`0)P+8$W4M0:O7R:- 2143 MO(CGPKQ!/I$.@C+WTK/Q0@2*DZ;C0C90.)Y7<!P,&Y1:!VF:&HH_(X>>T'?F 2144 M=9AS,D>J;#A#EA.,_P'1_'5Y_;C0(-O`8T%)4\[<?(=Q.G!RR"0CG)S7'YE9 2145 M!E5VAA[(9;S9-)P"]R_`FT=N?8$W3VBD@A?/:-7S',OTA<].[#(@^GR>CTEK 2146 M\.(=71Z?RW.=(W;_!?V:(GN)8E!?Z><*G)H_6FN`V!L4RN-DT_>`W*.5;,H2 2147 M-V>;CLYN0M2T[.MU*P?H(=N4CDN!+$J'(;..1V>!"JWCC2]4X,<+(S7@@K1. 2148 M+T]]/O#&%-N6H?N2%%<CY8>0$$=N838'4R.V9V7_*IG["QLLKDXQTK`&PRL, 2149 M?E)PW@-WSG[2NU/?>+PZ^#9GQJ(NH*3&%K8-([EE>:DHOZ_GLC)C4:F64V/G 2150 MMF3]#9^=HF<#R[!43!S9?.-]\@L8Q!+WW.4W#FA'@1>F',I.HC<8:B=K&+P@ 2151 M*9+$-+\[T4N27M%S[@GA-9`KB6571.Q#=*5>LT\(KM0\^4G[?G26]%%[C[-V 2152 M4?20LW97]`FR=LEJNI)VN8;KRMI%Z5U)V[U@\$8:'97.Q@M2"'K@]%*R:L%] 2153 M$-9IY_Q2XHZDC+$02EU:Z!41PYA!O\@@,@:^:>%^9D]XTJG$QC.SOX=L"I!` 2154 M&X7GPI$^?\P<8'(.B9!:J<144%`RB2E082427WCUADRJS@8;I'J5T221P 2155 M)!)/*L8&F_EM.0\U0@<F,U.`*(E('WK!B[M#T!O"B0GU"49*2H1L3-<"4E[@ 2156 MJ*TXJ(6;M3W9:-O@52>J1KTLG^)>IR0;4+4!%S0*^JV,YF5\I]R_]THQ?$AH 2157 M1I'0E=#<P&J1_8=:NRNA&;Z5E<],]:]7/O/4U?#MP-YIZ0/+A(@CA2TVD@H* 2158 M2RS5!\7VC.BL\ZQL;YPK26]&`E;B-R./)=)LT.VODGA%[T@=.I]@ZI/'L$F: 2159 M*NJM;&J*"%W9U'TQE?#.](NSJ5'Y=&53X^!S.C45$.9L:BX!S=G44^*X5C(U 2160 M\.8\ULYE^I^0ZBK93R'3P3,+B0Y-7YXLT5VD;T*@H_P#TE3(ZL/O5=!5[PE9 2161 M#JT=G_2"U'84[Q?ATD8FXH`GI'$V>EPY^@&E0U<"-RJXK@QN5-:5%&XJA<PI 2162 MW%S,>N5P1R)PG,)-!>B?+)M1OX$GBV8P")!DAC8D3UA$YXLA#Y.L?4B%F9^N 2163 M(IR:WFJ*P-A]A5L"/OG#S9_@K0),MT@4I[*&*U&<JN-)GCA5X^0\<2Z"RGGB 2164 M#Q;O(%_UO+*;\Y2I5IH[XJ5CDBSQ3'8JB%<E<GIM1]^$)V0KQ*JQ9#5U%'R8 2165 M@,X[3Q:K(M.*--5O\J1^H?4:D7_:C?,89K9=\HFAM+8&6P"GGP?D/W/Z.54/ 2166 MY?3S=VI2OK+/,Q+`141:+T"IEC"!<EV(0-:2P44ND.;'#`+T+L)%=2$1=;Q3 2167 M'Z]G8>Z08'.BO4>EIND=(EI./2,?K_"$6$0M\F`[XX"0L$)R.)F]#796!A3] 2168 MX:((%Q<^Y61V"E5;N>SO18Y\XL+,DLQ.[A)(.%3^'+GLJ&>/5'9D72*]NZ-= 2169 MQ9/M@236$/)DJ*E(/2*Z7R%PD^U]"G9/B/_SZ+(VU)@"A[;\S\BTA`+/&?%4 2170 M1U0RXJE.*V?$D_S7."T]<IEB3HDG/VI(G!*/<M_(B4?%=DZ)IQ+\*R6>FBP\ 2171 M(:542NW-\@)8<KCAR(M$+T!-FI[T&:B]%PX*:,G*T(R:34^E)CF;G@MV2C8] 2172 MV?XXFQZU926;_LHKDS]R965DTT^E$-8DJH&2X`BB;%I8^:&(S;E6)CWAD)>0 2173 M=2$U>.XC.M20,J@UT),/^L06]"N2TYA3[U'ED7/O:2=43KU'*5'.O$>!UI5X 2174 M3P5P.>^>JPZOQ'NJ_KP2[ZGS.R?>4Q5U)-XC@:$@\9[8'O8TA$,$^<)N53C1 2175 M>Q)>/I<HS\&.\4IDE=/SJ8@#HPJ2T-)*T!^PD"(I-"QM@9E&[)*@WTGM!O^O 2176 ME+[2(=AFLJ<A07^*!\`UH]H[Y^=3C7Y.SX\4>)K65H<$25256JH\O]"3)K,@ 2177 M3\4/)7<_9U9G`G(>.N/7N*8H9^^3FL/J#"%+56Z?JS#)%)16!C_5:^84?AJ, 2178 M[9JXM#GG\(,LP*R#'@+/M)+EQY.-.E-)HB1H)C"L=N15:8'H!FJT<"9JI]/` 2179 MB?T1_`*)_7#[1DGL[^1>'[PE!L@`=8Q"A8F`U-3,:?V1?(B<UX\$+<)T9$[J 2180 M1W>#E=3?24C!LLZ-WGE1R=;+^?U4KE#R^ZE8)N?WOW.<-A+\N>HJ$ORGOIXN 2181 MY/=S'6#D]U-0*BH-(-VTX;O29P]\7)`N"ST0E6X@BD3D!M%WK8@QOUC:JUF2 2182 M^R\H:Q%IZU2QDK/[4;YS9?=3:5-.[I_<NW%R_P,5=#F[G^JV(KN?*C]S<O_< 2183 MUYS;CXKGG-I/]4K`$ZD0,_+ZT?QAU?-951C8Y%8YN9]X%0N@\X-6,G(C(Q?% 2184 M59'>_\Z)6<SC<`Z(Q:$T,F?WY\AXD.P<>N'D?@X\P,:C.JE([D</`RYX=+&J 2185 MCG3;%#6]GVI8<GH_'6'.L"]<LXL3_*FP*Q+\40X7"?Z4W)G22O"_D':'`CH4 2186 M=\+Y_>2(X/1^*OC.Z?U79F$/,5"<WH_JDBN_OPW."2?-^0HKO?_JG*U=5\$" 2187 MY/>C$"_R^Z=VA](8*/-!X9#,=*CD-C+\4>+\R=1ZDB[4UZ%@<N3WO]?.JBLM 2188 M25ROGKAL)_+[N4+I2O"G<JTKP1\)!F`?B*5#?O]`_#L0H4+4R.\G@R(9,[&M 2189 M,]=;RJL02$"=2:3WOW>*`*+L?JX1BNQ^E$/E[/Y",16%CU3D/.H&LP4>V%&I 2190 M>>7VUX:"%^0YFN0+N?W0BI';3W674%`@(-(&CYR2Q$27<_M1A70E]V<0!M01 2191 M29%S^U&E%[G]<-<-)/?3@P)G]T_9(J'XS!6Y5`*%PN?`R?UK#T64`45J__O\ 2192 M1AF9_53<%8G]A&&+G-F?!^=E-ZZ73(G]1'`AC>?$6?V-;.H=K]8NI,?3JT44 2193 M+:%O.LA:4I!63M:0S,3J2IS3WQ$Y2,\:9)'EC=4:W@IZ>,<S+B[V<2&"``<Q 2194 MH+HGI_1'2M/*6+UV<4(_BM"N?/Y$2=WX<F-R.4[H3TCH1Z5(2NCGZI5/S@&G 2195 M&DO(($?%4,[G1P%4)/0O[QE>8Y)KD+/);FC^FA-MU,XU)RF;_QU,`,G\D\WP 2196 MMD$D&>_3*%HW<*=2L4^N\#'6^<^C(IL?=2,IG1]AU@7I_"BIB7Q^K@*Z$OKA 2197 MK@6%&0TI\=1O`U^82D%2-C_J3E(V/]>\I&S^N0'!<5"ILX"VA\!%4)]<>6,, 2198 M/AHMKX3^B@1QJC1`>:)?G4MF(IT_(4B47GKN,RIX$%`V%>M(91HIG9](,9+Y 2199 M,W+(YN^IR";E\I,)-P7.Y:<RI7Q4!H(1V.V3OU"7JM-!:%P3D[+Y.2$,E2:F 2200 M,L"U`+A<!2KQ()^?B!D6?"KL)'O-%9U[/*&"0$"M%B[3`%\L16A4I///[Q4H 2201 MFY]^31\852')2(;:DN2#Y(*5E-!?:),UE($D@9AK1I)E":4G*9U_?O^Y@E0. 2202 MDI/Y$]FUOC+7HZ3[&7%\7R#<I.BS)QFE!L@H^S6_[51VOJ!/T][F\I!?I"?& 2203 MOJI`KIJ(US_]XQ?5@I1"A2&LRH4$7(400YRP]6>:X]>?5!_Q\?4/_WOD`HOA 2204 MMU?_B_0_K=M87:7']I<?GQ^?_^GC\Y\_?W[\*?SY/_RO__#_`;/A,#\SJ00` 1709 2205 ` 1710 2206 end -
Tst/Long/factorizep_l.stat
re82b5f2 r0b7a8a6 1 1 >> tst_memory_0 :: 138 0536990:3170:3-1-7:ix86-Linux:mamawutz:6484002 1 >> tst_memory_1 :: 138 0536990:3170:3-1-7:ix86-Linux:mamawutz:43131003 1 >> tst_memory_2 :: 138 0536990:3170:3-1-7:ix86-Linux:mamawutz:64512244 1 >> tst_timer :: 138 0536990:3170:3-1-7:ix86-Linux:mamawutz:8465 2 >> tst_memory_0 :: 138 0536990:3170:3-1-7:ix86-Linux:mamawutz:6680646 2 >> tst_memory_1 :: 138 0536990:3170:3-1-7:ix86-Linux:mamawutz:45015047 2 >> tst_memory_2 :: 138 0536990:3170:3-1-7:ix86-Linux:mamawutz:66058128 2 >> tst_timer :: 138 0536990:3170:3-1-7:ix86-Linux:mamawutz:29019 3 >> tst_memory_0 :: 138 0536990:3170:3-1-7:ix86-Linux:mamawutz:88553210 3 >> tst_memory_1 :: 138 0536990:3170:3-1-7:ix86-Linux:mamawutz:659865611 3 >> tst_memory_2 :: 138 0536990:3170:3-1-7:ix86-Linux:mamawutz:1499470812 3 >> tst_timer_1 :: 138 0536990:3170:3-1-7:ix86-Linux:mamawutz:62891 1 >> tst_memory_0 :: 1389285670:3170:3-1-7:ix86-Linux:mamawutz:647736 2 1 >> tst_memory_1 :: 1389285670:3170:3-1-7:ix86-Linux:mamawutz:4587520 3 1 >> tst_memory_2 :: 1389285670:3170:3-1-7:ix86-Linux:mamawutz:6684672 4 1 >> tst_timer :: 1389285670:3170:3-1-7:ix86-Linux:mamawutz:867 5 2 >> tst_memory_0 :: 1389285670:3170:3-1-7:ix86-Linux:mamawutz:666760 6 2 >> tst_memory_1 :: 1389285670:3170:3-1-7:ix86-Linux:mamawutz:4587520 7 2 >> tst_memory_2 :: 1389285670:3170:3-1-7:ix86-Linux:mamawutz:6684672 8 2 >> tst_timer :: 1389285670:3170:3-1-7:ix86-Linux:mamawutz:3067 9 3 >> tst_memory_0 :: 1389285670:3170:3-1-7:ix86-Linux:mamawutz:1746692 10 3 >> tst_memory_1 :: 1389285670:3170:3-1-7:ix86-Linux:mamawutz:11812864 11 3 >> tst_memory_2 :: 1389285670:3170:3-1-7:ix86-Linux:mamawutz:18104320 12 3 >> tst_timer_1 :: 1389285670:3170:3-1-7:ix86-Linux:mamawutz:12373 -
Tst/Long/factorizep_l.tst
re82b5f2 r0b7a8a6 591 591 l= factorize (f); testfactors (l, f); 592 592 593 f= 594 2036*(x)^2*(y)^2*(y^55+x^27)*( 595 x^26*y^27+22502*x^25*y^27+26129*x^24*y^27+29216*x^23*y^27+34834*x^22*y^27+16100* 596 x^21*y^27+31667*x^20*y^27+1906*x^19*y^27+22185*x^18*y^27+16677*x^17*y^27+41095*x 597 ^16*y^27+15123*x^15*y^27+14491*x^14*y^27+5571*x^13*y^27+11913*x^12*y^27+21343*x^ 598 11*y^27+32816*x^10*y^27+29154*x^9*y^27+22111*x^8*y^27+30147*x^7*y^27+1673*x^6*y^ 599 27+30810*x^5*y^27+16497*x^4*y^27+39798*x^3*y^27+4394*x^2*y^27+31502*x*y^27+17487 600 *y^27+3083*x^26*y^26+7510*x^25*y^26+3246*x^24*y^26+11984*x^23*y^26+25636*x^22*y^ 601 26+15923*x^21*y^26+542*x^20*y^26+29538*x^19*y^26+26552*x^18*y^26+24474*x^17*y^26 602 +4843*x^16*y^26+6664*x^15*y^26+30375*x^14*y^26+25269*x^13*y^26+21676*x^12*y^26+ 603 33967*x^11*y^26+16441*x^10*y^26+16777*x^9*y^26+32168*x^8*y^26+31612*x^7*y^26+ 604 30808*x^6*y^26+11273*x^5*y^26+19942*x^4*y^26+6182*x^3*y^26+40996*x^2*y^26+31624* 605 x*y^26+63*y^26+20355*x^25*y^25+31973*x^24*y^25+22971*x^23*y^25+27166*x^22*y^25+ 606 36472*x^21*y^25+35782*x^20*y^25+24678*x^19*y^25+30016*x^18*y^25+4607*x^17*y^25+ 607 41947*x^16*y^25+31198*x^15*y^25+16004*x^14*y^25+10632*x^13*y^25+18864*x^12*y^25+ 608 17038*x^11*y^25+25214*x^10*y^25+38756*x^9*y^25+7046*x^8*y^25+19978*x^7*y^25+1376 609 *x^6*y^25+41415*x^5*y^25+10386*x^4*y^25+19065*x^3*y^25+17113*x^2*y^25+16281*x*y^ 610 25+13858*y^25+5491*x^24*y^24+38472*x^23*y^24+35769*x^22*y^24+15694*x^21*y^24+ 611 33392*x^20*y^24+1146*x^19*y^24+18050*x^18*y^24+12125*x^17*y^24+29102*x^16*y^24+ 612 38748*x^15*y^24+42753*x^14*y^24+6698*x^13*y^24+28160*x^12*y^24+21070*x^11*y^24+ 613 41637*x^10*y^24+19616*x^9*y^24+14406*x^8*y^24+23476*x^7*y^24+21817*x^6*y^24+ 614 25840*x^5*y^24+25086*x^4*y^24+23775*x^3*y^24+21227*x^2*y^24+27888*x*y^24+23515*y 615 ^24+19459*x^23*y^23+36602*x^22*y^23+208*x^21*y^23+12857*x^20*y^23+12486*x^19*y^ 616 23+22368*x^18*y^23+2551*x^17*y^23+34235*x^16*y^23+14390*x^15*y^23+5882*x^14*y^23 617 +33538*x^13*y^23+42285*x^12*y^23+8690*x^11*y^23+30406*x^10*y^23+27320*x^9*y^23+ 618 16879*x^8*y^23+3731*x^7*y^23+38196*x^6*y^23+42159*x^5*y^23+8240*x^4*y^23+31121*x 619 ^3*y^23+35093*x^2*y^23+14738*x*y^23+30083*y^23+7123*x^22*y^22+6572*x^21*y^22+ 620 8982*x^20*y^22+39575*x^19*y^22+28765*x^18*y^22+20952*x^17*y^22+8540*x^16*y^22+ 621 2594*x^15*y^22+30737*x^14*y^22+18260*x^13*y^22+19933*x^12*y^22+8099*x^11*y^22+ 622 29843*x^10*y^22+37536*x^9*y^22+13943*x^8*y^22+1823*x^7*y^22+4331*x^6*y^22+11682* 623 x^5*y^22+28595*x^4*y^22+26253*x^3*y^22+21766*x^2*y^22+33032*x*y^22+18506*y^22+ 624 19732*x^21*y^21+29287*x^20*y^21+33671*x^19*y^21+20636*x^18*y^21+9129*x^17*y^21+ 625 668*x^16*y^21+12392*x^15*y^21+18209*x^14*y^21+42027*x^13*y^21+10723*x^12*y^21+ 626 40606*x^11*y^21+21152*x^10*y^21+28922*x^9*y^21+42902*x^8*y^21+23603*x^7*y^21+ 627 10788*x^6*y^21+40011*x^5*y^21+25015*x^4*y^21+16784*x^3*y^21+7690*x^2*y^21+14090* 628 x*y^21+29510*y^21+36673*x^20*y^20+18226*x^19*y^20+9351*x^18*y^20+38118*x^17*y^20 629 +17449*x^16*y^20+30651*x^15*y^20+6652*x^14*y^20+4443*x^13*y^20+28114*x^12*y^20+ 630 27713*x^11*y^20+14382*x^10*y^20+35435*x^9*y^20+15403*x^8*y^20+27528*x^7*y^20+ 631 35417*x^6*y^20+21835*x^5*y^20+25685*x^4*y^20+3166*x^3*y^20+2542*x^2*y^20+30766*x 632 *y^20+31657*y^20+26361*x^19*y^19+1812*x^18*y^19+3983*x^17*y^19+36023*x^16*y^19+ 633 22928*x^15*y^19+6855*x^14*y^19+27546*x^13*y^19+24902*x^12*y^19+36654*x^11*y^19+ 634 5191*x^10*y^19+28174*x^9*y^19+10932*x^8*y^19+33381*x^7*y^19+18283*x^6*y^19+10138 635 *x^5*y^19+3525*x^4*y^19+31818*x^3*y^19+26751*x^2*y^19+8791*x*y^19+35017*y^19+ 636 8068*x^18*y^18+11779*x^17*y^18+6526*x^16*y^18+37302*x^15*y^18+11164*x^14*y^18+ 637 13769*x^13*y^18+39382*x^12*y^18+40572*x^11*y^18+13765*x^10*y^18+24417*x^9*y^18+ 638 30189*x^8*y^18+21349*x^7*y^18+39167*x^6*y^18+20606*x^5*y^18+14305*x^4*y^18+29683 639 *x^3*y^18+1266*x^2*y^18+24840*x*y^18+21656*y^18+16312*x^17*y^17+5217*x^16*y^17+ 640 41816*x^15*y^17+8280*x^14*y^17+9410*x^13*y^17+9008*x^12*y^17+30427*x^11*y^17+ 641 2633*x^10*y^17+14363*x^9*y^17+967*x^8*y^17+1177*x^7*y^17+1020*x^6*y^17+29630*x^5 642 *y^17+15743*x^4*y^17+20952*x^3*y^17+31064*x^2*y^17+3319*x*y^17+8408*y^17+12350*x 643 ^16*y^16+14714*x^15*y^16+38478*x^14*y^16+18118*x^13*y^16+38544*x^12*y^16+17870*x 644 ^11*y^16+39355*x^10*y^16+5319*x^9*y^16+27260*x^8*y^16+30534*x^7*y^16+14619*x^6*y 645 ^16+29338*x^5*y^16+18577*x^4*y^16+5699*x^3*y^16+25077*x^2*y^16+24985*x*y^16+ 646 41762*y^16+14161*x^15*y^15+24818*x^14*y^15+2538*x^13*y^15+5694*x^12*y^15+36797*x 647 ^11*y^15+11305*x^10*y^15+266*x^9*y^15+34388*x^8*y^15+36472*x^7*y^15+35287*x^6*y^ 648 15+36112*x^5*y^15+39364*x^4*y^15+31042*x^3*y^15+24571*x^2*y^15+22543*x*y^15+ 649 33036*y^15+3046*x^14*y^14+42428*x^13*y^14+14398*x^12*y^14+8792*x^11*y^14+16394*x 650 ^10*y^14+24593*x^9*y^14+29104*x^8*y^14+29172*x^7*y^14+4617*x^6*y^14+16803*x^5*y^ 651 14+38129*x^4*y^14+25100*x^3*y^14+14495*x^2*y^14+16736*x*y^14+5132*y^14+23113*x^ 652 13*y^13+40441*x^12*y^13+38512*x^11*y^13+8600*x^10*y^13+24449*x^9*y^13+11553*x^8* 653 y^13+20503*x^7*y^13+22462*x^6*y^13+28782*x^5*y^13+32654*x^4*y^13+8182*x^3*y^13+ 654 18208*x^2*y^13+31145*x*y^13+9877*y^13+33439*x^12*y^12+37259*x^11*y^12+3230*x^10* 655 y^12+7924*x^9*y^12+21484*x^8*y^12+5249*x^7*y^12+28816*x^6*y^12+36832*x^5*y^12+ 656 31614*x^4*y^12+30336*x^3*y^12+28977*x^2*y^12+33842*x*y^12+27712*y^12+11480*x^11* 657 y^11+42024*x^10*y^11+40159*x^9*y^11+4656*x^8*y^11+13905*x^7*y^11+32675*x^6*y^11+ 658 15182*x^5*y^11+33276*x^4*y^11+40271*x^3*y^11+33097*x^2*y^11+5450*x*y^11+16545*y^ 659 11+4444*x^10*y^10+29813*x^9*y^10+30598*x^8*y^10+19265*x^7*y^10+27733*x^6*y^10+ 660 12332*x^5*y^10+4041*x^4*y^10+17994*x^3*y^10+37626*x^2*y^10+18017*x*y^10+41985*y^ 661 10+18161*x^9*y^9+37064*x^8*y^9+38753*x^7*y^9+30823*x^6*y^9+12976*x^5*y^9+27156*x 662 ^4*y^9+22754*x^3*y^9+5457*x^2*y^9+37393*x*y^9+18558*y^9+5969*x^8*y^8+8372*x^7*y^ 663 8+5034*x^6*y^8+39726*x^5*y^8+23781*x^4*y^8+18050*x^3*y^8+38810*x^2*y^8+22187*x*y 664 ^8+33578*y^8+6247*x^7*y^7+31686*x^6*y^7+17254*x^5*y^7+13842*x^4*y^7+5880*x^3*y^7 665 +7517*x^2*y^7+29126*x*y^7+25434*y^7+42719*x^6*y^6+37537*x^5*y^6+7149*x^4*y^6+ 666 6926*x^3*y^6+30890*x^2*y^6+33056*x*y^6+35681*y^6+3125*x^5*y^5+33376*x^4*y^5+ 667 24387*x^3*y^5+23868*x^2*y^5+35142*x*y^5+5143*y^5+40391*x^4*y^4+657*x^3*y^4+30346 668 *x^2*y^4+30607*x*y^4+9432*y^4+31094*x^3*y^3+25871*x^2*y^3+29619*x*y^3+40511*y^3+ 669 747*x^2*y^2+23254*x*y^2+39636*y^2+17316*x*y+3609*y+8994)*( 670 x^53*y^53+18147*x^52*y^53+43022*x^51*y^53+40085*x^50*y^53+28237*x^49*y^53+30609* 671 x^48*y^53+24338*x^47*y^53+34438*x^46*y^53+17995*x^45*y^53+11285*x^44*y^53+23365* 672 x^43*y^53+34068*x^42*y^53+36580*x^41*y^53+18333*x^40*y^53+28343*x^39*y^53+10219* 673 x^38*y^53+41928*x^37*y^53+14530*x^36*y^53+8169*x^35*y^53+10664*x^34*y^53+28456*x 674 ^33*y^53+40045*x^32*y^53+36063*x^31*y^53+40317*x^30*y^53+3892*x^29*y^53+18610*x^ 675 28*y^53+42334*x^27*y^53+11181*x^26*y^53+14187*x^25*y^53+19731*x^24*y^53+15756*x^ 676 23*y^53+9842*x^22*y^53+12573*x^21*y^53+3119*x^20*y^53+21843*x^19*y^53+2270*x^18* 677 y^53+25305*x^17*y^53+38419*x^16*y^53+23222*x^15*y^53+29693*x^14*y^53+37556*x^13* 678 y^53+16413*x^12*y^53+4411*x^11*y^53+27575*x^10*y^53+15150*x^9*y^53+6260*x^8*y^53 679 +27551*x^7*y^53+25107*x^6*y^53+32932*x^5*y^53+38353*x^4*y^53+9*x^3*y^53+5495*x^2 680 *y^53+10261*x*y^53+31369*y^53+5547*x^52*y^52+30032*x^51*y^52+284*x^50*y^52+14830 681 *x^49*y^52+22659*x^48*y^52+10626*x^47*y^52+22237*x^46*y^52+38950*x^45*y^52+40954 682 *x^44*y^52+9413*x^43*y^52+21276*x^42*y^52+31506*x^41*y^52+9404*x^40*y^52+10655*x 683 ^39*y^52+10743*x^38*y^52+4401*x^37*y^52+32372*x^36*y^52+15524*x^35*y^52+28427*x^ 684 34*y^52+26855*x^33*y^52+530*x^32*y^52+28907*x^31*y^52+4066*x^30*y^52+20491*x^29* 685 y^52+2863*x^28*y^52+12779*x^27*y^52+40264*x^26*y^52+27587*x^25*y^52+2553*x^24*y^ 686 52+6016*x^23*y^52+2097*x^22*y^52+39570*x^21*y^52+34283*x^20*y^52+17879*x^19*y^52 687 +17020*x^18*y^52+40538*x^17*y^52+25557*x^16*y^52+39049*x^15*y^52+12516*x^14*y^52 688 +20550*x^13*y^52+37236*x^12*y^52+27582*x^11*y^52+40355*x^10*y^52+9244*x^9*y^52+ 689 12348*x^8*y^52+3487*x^7*y^52+34984*x^6*y^52+6073*x^5*y^52+39538*x^4*y^52+28840*x 690 ^3*y^52+6672*x^2*y^52+35673*x*y^52+21090*y^52+26879*x^51*y^51+19080*x^50*y^51+ 691 20236*x^49*y^51+40752*x^48*y^51+4404*x^47*y^51+28484*x^46*y^51+19369*x^45*y^51+ 692 21123*x^44*y^51+42333*x^43*y^51+3104*x^42*y^51+41974*x^41*y^51+1561*x^40*y^51+ 693 11103*x^39*y^51+10769*x^38*y^51+27387*x^37*y^51+21812*x^36*y^51+1578*x^35*y^51+ 694 39358*x^34*y^51+22262*x^33*y^51+28872*x^32*y^51+29393*x^31*y^51+37195*x^30*y^51+ 695 9259*x^29*y^51+12198*x^28*y^51+33283*x^27*y^51+6171*x^26*y^51+1678*x^25*y^51+ 696 19116*x^24*y^51+34014*x^23*y^51+42437*x^22*y^51+17526*x^21*y^51+30549*x^20*y^51+ 697 29170*x^19*y^51+16093*x^18*y^51+4549*x^17*y^51+42768*x^16*y^51+40904*x^15*y^51+ 698 3467*x^14*y^51+36407*x^13*y^51+18943*x^12*y^51+22205*x^11*y^51+7868*x^10*y^51+ 699 15795*x^9*y^51+36617*x^8*y^51+17510*x^7*y^51+15678*x^6*y^51+16520*x^5*y^51+40409 700 *x^4*y^51+27740*x^3*y^51+35836*x^2*y^51+30552*x*y^51+20808*y^51+42970*x^50*y^50+ 701 5860*x^49*y^50+23145*x^48*y^50+9906*x^47*y^50+34850*x^46*y^50+38599*x^45*y^50+ 702 40329*x^44*y^50+15967*x^43*y^50+7261*x^42*y^50+41272*x^41*y^50+4284*x^40*y^50+ 703 37022*x^39*y^50+27603*x^38*y^50+8694*x^37*y^50+42972*x^36*y^50+26061*x^35*y^50+ 704 18941*x^34*y^50+4252*x^33*y^50+34789*x^32*y^50+34843*x^31*y^50+13722*x^30*y^50+ 705 20217*x^29*y^50+16944*x^28*y^50+7910*x^27*y^50+30072*x^26*y^50+9131*x^25*y^50+ 706 17095*x^24*y^50+38859*x^23*y^50+11391*x^22*y^50+8284*x^21*y^50+40113*x^20*y^50+ 707 16017*x^19*y^50+30360*x^18*y^50+28241*x^17*y^50+42497*x^16*y^50+12082*x^15*y^50+ 708 1284*x^14*y^50+16288*x^13*y^50+24860*x^12*y^50+13411*x^11*y^50+10975*x^10*y^50+ 709 33044*x^9*y^50+8235*x^8*y^50+22317*x^7*y^50+31218*x^6*y^50+20511*x^5*y^50+24255* 710 x^4*y^50+26118*x^3*y^50+31607*x^2*y^50+12349*x*y^50+39022*y^50+13425*x^49*y^49+ 711 39757*x^48*y^49+27451*x^47*y^49+194*x^46*y^49+24526*x^45*y^49+9875*x^44*y^49+ 712 31606*x^43*y^49+38444*x^42*y^49+18652*x^41*y^49+29818*x^40*y^49+15631*x^39*y^49+ 713 21247*x^38*y^49+10326*x^37*y^49+30737*x^36*y^49+28353*x^35*y^49+32283*x^34*y^49+ 714 40894*x^33*y^49+19141*x^32*y^49+11212*x^31*y^49+4674*x^30*y^49+28404*x^29*y^49+ 715 33933*x^28*y^49+6387*x^27*y^49+32050*x^26*y^49+14228*x^25*y^49+29664*x^24*y^49+ 716 35576*x^23*y^49+40915*x^22*y^49+40400*x^21*y^49+1818*x^20*y^49+31280*x^19*y^49+ 717 6559*x^18*y^49+33932*x^17*y^49+37524*x^16*y^49+27603*x^15*y^49+10707*x^14*y^49+ 718 32695*x^13*y^49+26450*x^12*y^49+25719*x^11*y^49+38755*x^10*y^49+6656*x^9*y^49+ 719 21403*x^8*y^49+5632*x^7*y^49+888*x^6*y^49+42735*x^5*y^49+13602*x^4*y^49+24940*x^ 720 3*y^49+38405*x^2*y^49+8054*x*y^49+20049*y^49+27372*x^48*y^48+30233*x^47*y^48+657 721 *x^46*y^48+29614*x^45*y^48+20701*x^44*y^48+23794*x^43*y^48+3737*x^42*y^48+6648*x 722 ^41*y^48+20102*x^40*y^48+22356*x^39*y^48+32369*x^38*y^48+12432*x^37*y^48+26613*x 723 ^36*y^48+21249*x^35*y^48+5150*x^34*y^48+2672*x^33*y^48+15097*x^32*y^48+37938*x^ 724 31*y^48+14805*x^30*y^48+22802*x^29*y^48+39201*x^28*y^48+30407*x^27*y^48+20653*x^ 725 26*y^48+33705*x^25*y^48+23079*x^24*y^48+2198*x^23*y^48+38433*x^22*y^48+7227*x^21 726 *y^48+23891*x^20*y^48+3967*x^19*y^48+37476*x^18*y^48+36934*x^17*y^48+12206*x^16* 727 y^48+22197*x^15*y^48+10245*x^14*y^48+22127*x^13*y^48+41418*x^12*y^48+814*x^11*y^ 728 48+31931*x^10*y^48+38041*x^9*y^48+6354*x^8*y^48+22194*x^7*y^48+22787*x^6*y^48+ 729 30170*x^5*y^48+5917*x^4*y^48+36122*x^3*y^48+19222*x^2*y^48+32886*x*y^48+22622*y^ 730 48+3812*x^47*y^47+25985*x^46*y^47+36819*x^45*y^47+13268*x^44*y^47+35718*x^43*y^ 731 47+24087*x^42*y^47+33429*x^41*y^47+38428*x^40*y^47+42427*x^39*y^47+18508*x^38*y^ 732 47+807*x^37*y^47+28580*x^36*y^47+12219*x^35*y^47+38548*x^34*y^47+41213*x^33*y^47 733 +13374*x^32*y^47+240*x^31*y^47+18855*x^30*y^47+3163*x^29*y^47+39802*x^28*y^47+ 734 4065*x^27*y^47+21549*x^26*y^47+35680*x^25*y^47+30407*x^24*y^47+9345*x^23*y^47+ 735 37516*x^22*y^47+31854*x^21*y^47+10318*x^20*y^47+2740*x^19*y^47+11306*x^18*y^47+ 736 5988*x^17*y^47+16224*x^16*y^47+22259*x^15*y^47+19555*x^14*y^47+20347*x^13*y^47+ 737 6069*x^12*y^47+20053*x^11*y^47+9241*x^10*y^47+29531*x^9*y^47+12594*x^8*y^47+ 738 25231*x^7*y^47+2145*x^6*y^47+36468*x^5*y^47+24431*x^4*y^47+38896*x^3*y^47+13456* 739 x^2*y^47+40531*x*y^47+9268*y^47+33917*x^46*y^46+7802*x^45*y^46+43037*x^44*y^46+ 740 20656*x^43*y^46+37129*x^42*y^46+11642*x^41*y^46+19623*x^40*y^46+796*x^39*y^46+ 741 16361*x^38*y^46+41230*x^37*y^46+29857*x^36*y^46+24087*x^35*y^46+5566*x^34*y^46+ 742 6421*x^33*y^46+40958*x^32*y^46+37371*x^31*y^46+18049*x^30*y^46+19808*x^29*y^46+ 743 5885*x^28*y^46+38032*x^27*y^46+5553*x^26*y^46+42145*x^25*y^46+34158*x^24*y^46+ 744 38717*x^23*y^46+5514*x^22*y^46+39714*x^21*y^46+17252*x^20*y^46+13415*x^19*y^46+ 745 9576*x^18*y^46+35622*x^17*y^46+34212*x^16*y^46+28019*x^15*y^46+42386*x^14*y^46+ 746 27403*x^13*y^46+38945*x^12*y^46+12139*x^11*y^46+29342*x^10*y^46+13347*x^9*y^46+ 747 37592*x^8*y^46+13920*x^7*y^46+30889*x^6*y^46+13930*x^5*y^46+21793*x^4*y^46+9482* 748 x^3*y^46+42650*x^2*y^46+2703*x*y^46+19032*y^46+40355*x^45*y^45+34673*x^44*y^45+ 749 16318*x^43*y^45+38013*x^42*y^45+30018*x^41*y^45+7755*x^40*y^45+16854*x^39*y^45+ 750 25824*x^38*y^45+30004*x^37*y^45+22057*x^36*y^45+30486*x^35*y^45+18166*x^34*y^45+ 751 30268*x^33*y^45+42335*x^32*y^45+9703*x^31*y^45+8876*x^30*y^45+31479*x^29*y^45+ 752 4458*x^28*y^45+1013*x^27*y^45+26568*x^26*y^45+26890*x^25*y^45+37461*x^24*y^45+ 753 16554*x^23*y^45+7323*x^22*y^45+8189*x^21*y^45+6451*x^20*y^45+33300*x^19*y^45+ 754 26185*x^18*y^45+24508*x^17*y^45+23070*x^16*y^45+5113*x^15*y^45+29902*x^14*y^45+ 755 23508*x^13*y^45+29179*x^12*y^45+24325*x^11*y^45+691*x^10*y^45+9957*x^9*y^45+ 756 23116*x^8*y^45+31858*x^7*y^45+40746*x^6*y^45+23740*x^5*y^45+16587*x^4*y^45+18456 757 *x^3*y^45+22891*x^2*y^45+24232*x*y^45+24901*y^45+1581*x^44*y^44+8067*x^43*y^44+ 758 40636*x^42*y^44+590*x^41*y^44+28238*x^40*y^44+18484*x^39*y^44+13782*x^38*y^44+ 759 26591*x^37*y^44+38088*x^36*y^44+7380*x^35*y^44+35239*x^34*y^44+1000*x^33*y^44+ 760 20981*x^32*y^44+4647*x^31*y^44+37942*x^30*y^44+8411*x^29*y^44+1844*x^28*y^44+ 761 42980*x^27*y^44+1636*x^26*y^44+19108*x^25*y^44+10146*x^24*y^44+20133*x^23*y^44+ 762 31891*x^22*y^44+36956*x^21*y^44+4778*x^20*y^44+28052*x^19*y^44+7656*x^18*y^44+ 763 23804*x^17*y^44+25604*x^16*y^44+34159*x^15*y^44+39731*x^14*y^44+40121*x^13*y^44+ 764 33040*x^12*y^44+19546*x^11*y^44+4051*x^10*y^44+22053*x^9*y^44+8357*x^8*y^44+ 765 13907*x^7*y^44+25422*x^6*y^44+16353*x^5*y^44+17091*x^4*y^44+10820*x^3*y^44+10885 766 *x^2*y^44+26791*x*y^44+26814*y^44+30035*x^43*y^43+19261*x^42*y^43+5960*x^41*y^43 767 +25009*x^40*y^43+31459*x^39*y^43+5593*x^38*y^43+11908*x^37*y^43+40759*x^36*y^43+ 768 25678*x^35*y^43+317*x^34*y^43+2911*x^33*y^43+21930*x^32*y^43+10338*x^31*y^43+ 769 18544*x^30*y^43+21395*x^29*y^43+32184*x^28*y^43+2508*x^27*y^43+30020*x^26*y^43+ 770 36827*x^25*y^43+32729*x^24*y^43+37356*x^23*y^43+37941*x^22*y^43+38560*x^21*y^43+ 771 25442*x^20*y^43+15046*x^19*y^43+25010*x^18*y^43+29960*x^17*y^43+317*x^16*y^43+ 772 19367*x^15*y^43+12431*x^14*y^43+22477*x^13*y^43+7299*x^12*y^43+29600*x^11*y^43+ 773 18368*x^10*y^43+30660*x^9*y^43+31625*x^8*y^43+34063*x^7*y^43+39332*x^6*y^43+ 774 42283*x^5*y^43+24888*x^4*y^43+19738*x^3*y^43+2405*x^2*y^43+5956*x*y^43+4332*y^43 775 +39260*x^42*y^42+19385*x^41*y^42+31659*x^40*y^42+34965*x^39*y^42+34569*x^38*y^42 776 +20394*x^37*y^42+29989*x^36*y^42+4513*x^35*y^42+8431*x^34*y^42+40216*x^33*y^42+ 777 42045*x^32*y^42+17569*x^31*y^42+17859*x^30*y^42+7805*x^29*y^42+39762*x^28*y^42+ 778 7624*x^27*y^42+12453*x^26*y^42+13594*x^25*y^42+42421*x^24*y^42+36751*x^23*y^42+ 779 21549*x^22*y^42+1117*x^21*y^42+27687*x^20*y^42+17486*x^19*y^42+37758*x^18*y^42+ 780 41570*x^17*y^42+4711*x^16*y^42+21777*x^15*y^42+9007*x^14*y^42+14510*x^13*y^42+ 781 495*x^12*y^42+27546*x^11*y^42+15369*x^10*y^42+28778*x^9*y^42+1890*x^8*y^42+38622 782 *x^7*y^42+14667*x^6*y^42+24823*x^5*y^42+26179*x^4*y^42+37676*x^3*y^42+19558*x^2* 783 y^42+20984*x*y^42+33240*y^42+36690*x^41*y^41+17023*x^40*y^41+17026*x^39*y^41+ 784 6811*x^38*y^41+16785*x^37*y^41+12085*x^36*y^41+29521*x^35*y^41+34282*x^34*y^41+ 785 8706*x^33*y^41+37090*x^32*y^41+30501*x^31*y^41+18192*x^30*y^41+35111*x^29*y^41+ 786 39271*x^28*y^41+5042*x^27*y^41+25069*x^26*y^41+34380*x^25*y^41+13858*x^24*y^41+ 787 9698*x^23*y^41+12876*x^22*y^41+18196*x^21*y^41+31276*x^20*y^41+38122*x^19*y^41+ 788 12008*x^18*y^41+24932*x^17*y^41+33107*x^16*y^41+20016*x^15*y^41+11013*x^14*y^41+ 789 39534*x^13*y^41+28790*x^12*y^41+9663*x^11*y^41+34756*x^10*y^41+41666*x^9*y^41+ 790 33575*x^8*y^41+31797*x^7*y^41+17028*x^6*y^41+35080*x^5*y^41+23794*x^4*y^41+31927 791 *x^3*y^41+42101*x^2*y^41+3694*x*y^41+17898*y^41+5030*x^40*y^40+20705*x^39*y^40+ 792 40138*x^38*y^40+20010*x^37*y^40+41623*x^36*y^40+3326*x^35*y^40+21134*x^34*y^40+ 793 36214*x^33*y^40+42448*x^32*y^40+9904*x^31*y^40+3791*x^30*y^40+38996*x^29*y^40+ 794 7031*x^28*y^40+21395*x^27*y^40+16931*x^26*y^40+23563*x^25*y^40+5604*x^24*y^40+ 795 18577*x^23*y^40+17832*x^22*y^40+38462*x^21*y^40+17939*x^20*y^40+13578*x^19*y^40+ 796 5091*x^18*y^40+11389*x^17*y^40+41259*x^16*y^40+6438*x^15*y^40+35827*x^14*y^40+ 797 38132*x^13*y^40+14738*x^12*y^40+35596*x^11*y^40+22288*x^10*y^40+38612*x^9*y^40+ 798 30582*x^8*y^40+9216*x^7*y^40+22498*x^6*y^40+41447*x^5*y^40+21423*x^4*y^40+18859* 799 x^3*y^40+2943*x^2*y^40+42*x*y^40+26122*y^40+21917*x^39*y^39+16248*x^38*y^39+ 800 12815*x^37*y^39+1065*x^36*y^39+23742*x^35*y^39+3529*x^34*y^39+6933*x^33*y^39+ 801 6197*x^32*y^39+18254*x^31*y^39+5200*x^30*y^39+14892*x^29*y^39+32191*x^28*y^39+ 802 27194*x^27*y^39+12220*x^26*y^39+15416*x^25*y^39+8038*x^24*y^39+23518*x^23*y^39+ 803 21732*x^22*y^39+40262*x^21*y^39+3864*x^20*y^39+18543*x^19*y^39+32141*x^18*y^39+ 804 6335*x^17*y^39+16625*x^16*y^39+22604*x^15*y^39+25647*x^14*y^39+14043*x^13*y^39+ 805 37489*x^12*y^39+32245*x^11*y^39+24467*x^10*y^39+124*x^9*y^39+27492*x^8*y^39+72*x 806 ^7*y^39+7216*x^6*y^39+8002*x^5*y^39+18089*x^4*y^39+11437*x^3*y^39+35176*x^2*y^39 807 +18285*x*y^39+28670*y^39+4532*x^38*y^38+37470*x^37*y^38+19891*x^36*y^38+41542*x^ 808 35*y^38+9718*x^34*y^38+42839*x^33*y^38+8238*x^32*y^38+22952*x^31*y^38+39648*x^30 809 *y^38+28131*x^29*y^38+22317*x^28*y^38+25299*x^27*y^38+23511*x^26*y^38+9894*x^25* 810 y^38+13716*x^24*y^38+35578*x^23*y^38+31881*x^22*y^38+13171*x^21*y^38+31957*x^20* 811 y^38+7557*x^19*y^38+9080*x^18*y^38+33605*x^17*y^38+28061*x^16*y^38+26224*x^15*y^ 812 38+38115*x^14*y^38+12579*x^13*y^38+9476*x^12*y^38+18826*x^11*y^38+24558*x^10*y^ 813 38+32988*x^9*y^38+4475*x^8*y^38+1586*x^7*y^38+37795*x^6*y^38+21563*x^5*y^38+ 814 41768*x^4*y^38+25716*x^3*y^38+5730*x^2*y^38+6989*x*y^38+2665*y^38+18474*x^37*y^ 815 37+17873*x^36*y^37+37340*x^35*y^37+39770*x^34*y^37+23012*x^33*y^37+12488*x^32*y^ 816 37+35457*x^31*y^37+24228*x^30*y^37+38299*x^29*y^37+31351*x^28*y^37+41876*x^27*y^ 817 37+15132*x^26*y^37+29672*x^25*y^37+19441*x^24*y^37+27592*x^23*y^37+1004*x^22*y^ 818 37+23100*x^21*y^37+24305*x^20*y^37+35140*x^19*y^37+29466*x^18*y^37+34872*x^17*y^ 819 37+31689*x^16*y^37+41226*x^15*y^37+6209*x^14*y^37+18431*x^13*y^37+15545*x^12*y^ 820 37+4217*x^11*y^37+12267*x^10*y^37+23055*x^9*y^37+27958*x^8*y^37+24946*x^7*y^37+ 821 18221*x^6*y^37+3834*x^5*y^37+35345*x^4*y^37+25813*x^3*y^37+20611*x^2*y^37+16263* 822 x*y^37+20199*y^37+14465*x^36*y^36+3944*x^35*y^36+10818*x^34*y^36+33496*x^33*y^36 823 +40148*x^32*y^36+40913*x^31*y^36+32228*x^30*y^36+25515*x^29*y^36+27597*x^28*y^36 824 +40498*x^27*y^36+14302*x^26*y^36+14742*x^25*y^36+18012*x^24*y^36+20790*x^23*y^36 825 +1636*x^22*y^36+40195*x^21*y^36+40702*x^20*y^36+22371*x^19*y^36+734*x^18*y^36+ 826 23769*x^17*y^36+38645*x^16*y^36+9831*x^15*y^36+5784*x^14*y^36+14661*x^13*y^36+ 827 33984*x^12*y^36+24153*x^11*y^36+2695*x^10*y^36+34150*x^9*y^36+1475*x^8*y^36+ 828 38333*x^7*y^36+860*x^6*y^36+15027*x^5*y^36+19228*x^4*y^36+41952*x^3*y^36+8466*x^ 829 2*y^36+13330*x*y^36+31877*y^36+22137*x^35*y^35+26911*x^34*y^35+3921*x^33*y^35+ 830 30649*x^32*y^35+36112*x^31*y^35+26462*x^30*y^35+18707*x^29*y^35+24132*x^28*y^35+ 831 21788*x^27*y^35+5384*x^26*y^35+31009*x^25*y^35+7078*x^24*y^35+32871*x^23*y^35+ 832 40177*x^22*y^35+34384*x^21*y^35+34362*x^20*y^35+14431*x^19*y^35+17033*x^18*y^35+ 833 37687*x^17*y^35+15153*x^16*y^35+4993*x^15*y^35+7366*x^14*y^35+32202*x^13*y^35+ 834 4531*x^12*y^35+21959*x^11*y^35+10107*x^10*y^35+6830*x^9*y^35+37430*x^8*y^35+ 835 26724*x^7*y^35+29060*x^6*y^35+3962*x^5*y^35+27723*x^4*y^35+42152*x^3*y^35+39841* 836 x^2*y^35+2484*x*y^35+13587*y^35+466*x^34*y^34+31954*x^33*y^34+30801*x^32*y^34+ 837 8936*x^31*y^34+5640*x^30*y^34+2119*x^29*y^34+38507*x^28*y^34+2916*x^27*y^34+ 838 34260*x^26*y^34+9889*x^25*y^34+17037*x^24*y^34+41972*x^23*y^34+24788*x^22*y^34+ 839 42342*x^21*y^34+12153*x^20*y^34+31900*x^19*y^34+32150*x^18*y^34+353*x^17*y^34+ 840 13211*x^16*y^34+26356*x^15*y^34+22476*x^14*y^34+37191*x^13*y^34+7778*x^12*y^34+ 841 22556*x^11*y^34+5996*x^10*y^34+29641*x^9*y^34+41363*x^8*y^34+30009*x^7*y^34+ 842 22934*x^6*y^34+17759*x^5*y^34+25741*x^4*y^34+6401*x^3*y^34+36544*x^2*y^34+171*x* 843 y^34+37979*y^34+15313*x^33*y^33+31019*x^32*y^33+17942*x^31*y^33+38375*x^30*y^33+ 844 41049*x^29*y^33+35567*x^28*y^33+17522*x^27*y^33+11884*x^26*y^33+38114*x^25*y^33+ 845 40939*x^24*y^33+37389*x^23*y^33+24852*x^22*y^33+18117*x^21*y^33+10444*x^20*y^33+ 846 4656*x^19*y^33+12501*x^18*y^33+14323*x^17*y^33+12415*x^16*y^33+27799*x^15*y^33+ 847 18562*x^14*y^33+2589*x^13*y^33+27567*x^12*y^33+16865*x^11*y^33+13922*x^10*y^33+ 848 33463*x^9*y^33+17112*x^8*y^33+11243*x^7*y^33+2891*x^6*y^33+32742*x^5*y^33+42456* 849 x^4*y^33+2235*x^3*y^33+4800*x^2*y^33+40847*x*y^33+5399*y^33+14186*x^32*y^32+ 850 14885*x^31*y^32+41339*x^30*y^32+40829*x^29*y^32+3576*x^28*y^32+38477*x^27*y^32+ 851 8225*x^26*y^32+35327*x^25*y^32+27970*x^24*y^32+14944*x^23*y^32+15098*x^22*y^32+ 852 41185*x^21*y^32+38742*x^20*y^32+22816*x^19*y^32+18799*x^18*y^32+3939*x^17*y^32+ 853 5267*x^16*y^32+3223*x^15*y^32+18224*x^14*y^32+24474*x^13*y^32+12038*x^12*y^32+ 854 21401*x^11*y^32+7939*x^10*y^32+5051*x^9*y^32+25616*x^8*y^32+32954*x^7*y^32+11947 855 *x^6*y^32+31059*x^5*y^32+9947*x^4*y^32+16462*x^3*y^32+5660*x^2*y^32+4926*x*y^32+ 856 31371*y^32+24980*x^31*y^31+10429*x^30*y^31+29583*x^29*y^31+25670*x^28*y^31+30325 857 *x^27*y^31+32707*x^26*y^31+4554*x^25*y^31+4824*x^24*y^31+14157*x^23*y^31+2480*x^ 858 22*y^31+26739*x^21*y^31+33788*x^20*y^31+33490*x^19*y^31+13645*x^18*y^31+31574*x^ 859 17*y^31+24871*x^16*y^31+23525*x^15*y^31+25346*x^14*y^31+11150*x^13*y^31+5930*x^ 860 12*y^31+17831*x^11*y^31+25316*x^10*y^31+11055*x^9*y^31+40769*x^8*y^31+39049*x^7* 861 y^31+6889*x^6*y^31+29402*x^5*y^31+17396*x^4*y^31+26425*x^3*y^31+29573*x^2*y^31+ 862 3048*x*y^31+2061*y^31+25688*x^30*y^30+10729*x^29*y^30+10281*x^28*y^30+2873*x^27* 863 y^30+7957*x^26*y^30+6862*x^25*y^30+12421*x^24*y^30+22267*x^23*y^30+18530*x^22*y^ 864 30+31964*x^21*y^30+2708*x^20*y^30+29289*x^19*y^30+22534*x^18*y^30+16556*x^17*y^ 865 30+16343*x^16*y^30+24490*x^15*y^30+51*x^14*y^30+13138*x^13*y^30+37878*x^12*y^30+ 866 32475*x^11*y^30+9118*x^10*y^30+23428*x^9*y^30+36826*x^8*y^30+17404*x^7*y^30+6387 867 *x^6*y^30+39313*x^5*y^30+11115*x^4*y^30+11112*x^3*y^30+39059*x^2*y^30+36567*x*y^ 868 30+3244*y^30+10546*x^29*y^29+40279*x^28*y^29+8192*x^27*y^29+31945*x^26*y^29+8036 869 *x^25*y^29+7530*x^24*y^29+15828*x^23*y^29+39078*x^22*y^29+22083*x^21*y^29+546*x^ 870 20*y^29+32237*x^19*y^29+15428*x^18*y^29+26710*x^17*y^29+36279*x^16*y^29+493*x^15 871 *y^29+41644*x^14*y^29+17588*x^13*y^29+37437*x^12*y^29+8873*x^11*y^29+15706*x^10* 872 y^29+12130*x^9*y^29+10474*x^8*y^29+8157*x^7*y^29+21743*x^6*y^29+5867*x^5*y^29+ 873 36624*x^4*y^29+29051*x^3*y^29+39496*x^2*y^29+11651*x*y^29+21746*y^29+30819*x^28* 874 y^28+38218*x^27*y^28+33643*x^26*y^28+19933*x^25*y^28+870*x^24*y^28+36669*x^23*y^ 875 28+7497*x^22*y^28+25876*x^21*y^28+1074*x^20*y^28+4707*x^19*y^28+41663*x^18*y^28+ 876 14372*x^17*y^28+31723*x^16*y^28+26094*x^15*y^28+31950*x^14*y^28+7385*x^13*y^28+ 877 34842*x^12*y^28+39265*x^11*y^28+32953*x^10*y^28+3198*x^9*y^28+37808*x^8*y^28+ 878 31909*x^7*y^28+21768*x^6*y^28+15479*x^5*y^28+1803*x^4*y^28+26958*x^3*y^28+21801* 879 x^2*y^28+24033*x*y^28+22473*y^28+7589*x^27*y^27+4367*x^26*y^27+20572*x^25*y^27+ 880 39710*x^24*y^27+8092*x^23*y^27+25234*x^22*y^27+13211*x^21*y^27+11362*x^20*y^27+ 881 18325*x^19*y^27+12979*x^18*y^27+41351*x^17*y^27+37022*x^16*y^27+34113*x^15*y^27+ 882 10288*x^14*y^27+36321*x^13*y^27+14218*x^12*y^27+37248*x^11*y^27+40101*x^10*y^27+ 883 28540*x^9*y^27+34804*x^8*y^27+9105*x^7*y^27+6660*x^6*y^27+11207*x^5*y^27+22855*x 884 ^4*y^27+40243*x^3*y^27+41892*x^2*y^27+24857*x*y^27+28411*y^27+14847*x^26*y^26+ 885 32215*x^25*y^26+5485*x^24*y^26+4576*x^23*y^26+39245*x^22*y^26+24182*x^21*y^26+ 886 35561*x^20*y^26+5451*x^19*y^26+7418*x^18*y^26+20800*x^17*y^26+17607*x^16*y^26+ 887 12464*x^15*y^26+31957*x^14*y^26+40498*x^13*y^26+13706*x^12*y^26+14134*x^11*y^26+ 888 11623*x^10*y^26+31906*x^9*y^26+9172*x^8*y^26+9678*x^7*y^26+42073*x^6*y^26+21816* 889 x^5*y^26+9905*x^4*y^26+21512*x^3*y^26+9958*x^2*y^26+37130*x*y^26+18774*y^26+ 890 17837*x^25*y^25+10493*x^24*y^25+27604*x^23*y^25+24967*x^22*y^25+26075*x^21*y^25+ 891 2779*x^20*y^25+14140*x^19*y^25+23181*x^18*y^25+38206*x^17*y^25+12289*x^16*y^25+ 892 17597*x^15*y^25+21453*x^14*y^25+2796*x^13*y^25+10492*x^12*y^25+35608*x^11*y^25+ 893 11080*x^10*y^25+39047*x^9*y^25+11198*x^8*y^25+40664*x^7*y^25+8717*x^6*y^25+2104* 894 x^5*y^25+6462*x^4*y^25+945*x^3*y^25+4611*x^2*y^25+39716*x*y^25+20421*y^25+25068* 895 x^24*y^24+37094*x^23*y^24+35791*x^22*y^24+28613*x^21*y^24+16768*x^20*y^24+17224* 896 x^19*y^24+27360*x^18*y^24+40916*x^17*y^24+2844*x^16*y^24+35191*x^15*y^24+34962*x 897 ^14*y^24+10333*x^13*y^24+34628*x^12*y^24+28608*x^11*y^24+10876*x^10*y^24+23038*x 898 ^9*y^24+33994*x^8*y^24+30860*x^7*y^24+34744*x^6*y^24+14153*x^5*y^24+41239*x^4*y^ 899 24+25076*x^3*y^24+777*x^2*y^24+13338*x*y^24+32637*y^24+38843*x^23*y^23+26338*x^ 900 22*y^23+27918*x^21*y^23+24043*x^20*y^23+1599*x^19*y^23+19731*x^18*y^23+20154*x^ 901 17*y^23+6166*x^16*y^23+20721*x^15*y^23+21112*x^14*y^23+8898*x^13*y^23+38361*x^12 902 *y^23+37265*x^11*y^23+10091*x^10*y^23+12686*x^9*y^23+13789*x^8*y^23+28215*x^7*y^ 903 23+27651*x^6*y^23+40100*x^5*y^23+28948*x^4*y^23+5650*x^3*y^23+39475*x^2*y^23+ 904 17889*x*y^23+12555*y^23+13632*x^22*y^22+5483*x^21*y^22+10809*x^20*y^22+5154*x^19 905 *y^22+41705*x^18*y^22+36857*x^17*y^22+23493*x^16*y^22+9585*x^15*y^22+13620*x^14* 906 y^22+39469*x^13*y^22+37948*x^12*y^22+27976*x^11*y^22+32606*x^10*y^22+10965*x^9*y 907 ^22+36314*x^8*y^22+11877*x^7*y^22+32677*x^6*y^22+30277*x^5*y^22+36275*x^4*y^22+ 908 20185*x^3*y^22+40116*x^2*y^22+7415*x*y^22+30632*y^22+24620*x^21*y^21+21412*x^20* 909 y^21+830*x^19*y^21+10356*x^18*y^21+872*x^17*y^21+20256*x^16*y^21+15659*x^15*y^21 910 +19693*x^14*y^21+15424*x^13*y^21+19893*x^12*y^21+5829*x^11*y^21+7319*x^10*y^21+ 911 24476*x^9*y^21+20773*x^8*y^21+289*x^7*y^21+33710*x^6*y^21+574*x^5*y^21+38775*x^4 912 *y^21+9839*x^3*y^21+15268*x^2*y^21+27786*x*y^21+28450*y^21+20398*x^20*y^20+9431* 913 x^19*y^20+1699*x^18*y^20+33355*x^17*y^20+2995*x^16*y^20+31114*x^15*y^20+9506*x^ 914 14*y^20+9026*x^13*y^20+30973*x^12*y^20+4232*x^11*y^20+16928*x^10*y^20+10179*x^9* 915 y^20+4292*x^8*y^20+10780*x^7*y^20+40092*x^6*y^20+5546*x^5*y^20+32176*x^4*y^20+ 916 14031*x^3*y^20+13990*x^2*y^20+26324*x*y^20+40218*y^20+11114*x^19*y^19+30557*x^18 917 *y^19+9052*x^17*y^19+25115*x^16*y^19+35097*x^15*y^19+8092*x^14*y^19+15130*x^13*y 918 ^19+8004*x^12*y^19+1495*x^11*y^19+27644*x^10*y^19+24610*x^9*y^19+38821*x^8*y^19+ 919 19648*x^7*y^19+26314*x^6*y^19+23318*x^5*y^19+38165*x^4*y^19+33175*x^3*y^19+3381* 920 x^2*y^19+28440*x*y^19+207*y^19+21053*x^18*y^18+35057*x^17*y^18+8238*x^16*y^18+ 921 33300*x^15*y^18+12824*x^14*y^18+37945*x^13*y^18+33900*x^12*y^18+13601*x^11*y^18+ 922 29959*x^10*y^18+12862*x^9*y^18+21879*x^8*y^18+31948*x^7*y^18+3099*x^6*y^18+15507 923 *x^5*y^18+5575*x^4*y^18+26045*x^3*y^18+29592*x^2*y^18+10936*x*y^18+15772*y^18+ 924 713*x^17*y^17+32307*x^16*y^17+41726*x^15*y^17+20941*x^14*y^17+28478*x^13*y^17+ 925 18581*x^12*y^17+22577*x^11*y^17+30966*x^10*y^17+8170*x^9*y^17+17869*x^8*y^17+ 926 6744*x^7*y^17+27888*x^6*y^17+32051*x^5*y^17+30810*x^4*y^17+14707*x^3*y^17+38126* 927 x^2*y^17+33384*x*y^17+23882*y^17+6803*x^16*y^16+30672*x^15*y^16+26280*x^14*y^16+ 928 14477*x^13*y^16+24391*x^12*y^16+11327*x^11*y^16+2705*x^10*y^16+36645*x^9*y^16+ 929 11888*x^8*y^16+32246*x^7*y^16+13623*x^6*y^16+37322*x^5*y^16+38519*x^4*y^16+31179 930 *x^3*y^16+34600*x^2*y^16+29376*x*y^16+2154*y^16+26152*x^15*y^15+13168*x^14*y^15+ 931 13683*x^13*y^15+4036*x^12*y^15+20263*x^11*y^15+31133*x^10*y^15+26193*x^9*y^15+ 932 6801*x^8*y^15+11653*x^7*y^15+9040*x^6*y^15+36600*x^5*y^15+946*x^4*y^15+4003*x^3* 933 y^15+9589*x^2*y^15+412*x*y^15+2699*y^15+5480*x^14*y^14+11828*x^13*y^14+10150*x^ 934 12*y^14+26355*x^11*y^14+10819*x^10*y^14+35113*x^9*y^14+15186*x^8*y^14+20558*x^7* 935 y^14+19722*x^6*y^14+40367*x^5*y^14+5224*x^4*y^14+1701*x^3*y^14+38742*x^2*y^14+ 936 13350*x*y^14+265*y^14+34787*x^13*y^13+23544*x^12*y^13+31722*x^11*y^13+14630*x^10 937 *y^13+30193*x^9*y^13+34518*x^8*y^13+37652*x^7*y^13+8454*x^6*y^13+23095*x^5*y^13+ 938 40459*x^4*y^13+19841*x^3*y^13+20398*x^2*y^13+33334*x*y^13+41152*y^13+29967*x^12* 939 y^12+9540*x^11*y^12+36229*x^10*y^12+1670*x^9*y^12+21738*x^8*y^12+744*x^7*y^12+ 940 40820*x^6*y^12+6388*x^5*y^12+14649*x^4*y^12+27675*x^3*y^12+23094*x^2*y^12+15691* 941 x*y^12+4379*y^12+6842*x^11*y^11+42560*x^10*y^11+31197*x^9*y^11+34010*x^8*y^11+ 942 25953*x^7*y^11+32134*x^6*y^11+33154*x^5*y^11+27110*x^4*y^11+17143*x^3*y^11+20511 943 *x^2*y^11+38503*x*y^11+17850*y^11+4599*x^10*y^10+22849*x^9*y^10+25896*x^8*y^10+ 944 25981*x^7*y^10+13940*x^6*y^10+34610*x^5*y^10+20111*x^4*y^10+37706*x^3*y^10+39941 945 *x^2*y^10+22020*x*y^10+30878*y^10+42108*x^9*y^9+39357*x^8*y^9+5802*x^7*y^9+11442 946 *x^6*y^9+22956*x^5*y^9+13392*x^4*y^9+10615*x^3*y^9+9505*x^2*y^9+2863*x*y^9+33798 947 *y^9+5939*x^8*y^8+36618*x^7*y^8+13200*x^6*y^8+8689*x^5*y^8+518*x^4*y^8+4026*x^3* 948 y^8+16640*x^2*y^8+39860*x*y^8+32154*y^8+11496*x^7*y^7+3970*x^6*y^7+16147*x^5*y^7 949 +42885*x^4*y^7+22064*x^3*y^7+32153*x^2*y^7+39290*x*y^7+37882*y^7+20742*x^6*y^6+ 950 16687*x^5*y^6+1890*x^4*y^6+38545*x^3*y^6+35135*x^2*y^6+16921*x*y^6+42898*y^6+ 951 40861*x^5*y^5+16687*x^4*y^5+22548*x^3*y^5+9752*x^2*y^5+9003*x*y^5+14580*y^5+ 952 18136*x^4*y^4+21446*x^3*y^4+12391*x^2*y^4+29220*x*y^4+13920*y^4+4960*x^3*y^3+ 953 2851*x^2*y^3+1789*x*y^3+33655*y^3+28567*x^2*y^2+24794*x*y^2+19511*y^2+25676*x*y+ 954 8828*y+18760)*(y^55+x*y+x^55)*(y+11888*x)*(y+31162*x)*(y^2+11695*x*y+43050*x^2)* 955 (y^2+x^2)*(y^2+31356*x*y+43050*x^2)*(y^27+x^55)*(y+x)^2; 956 957 system ("--random", 1977); 958 l= factorize (f); testfactors (l, f); 959 593 960 tst_status(1);$ -
Tst/Short/absfact.res.gz.uu
r6ad45e r0b7a8a6 1 begin 64 4absfact.res.gz2 M'XL(" (:2UE(``V%B<V9A8W0N<F5S`.V<6V_<N!7'W_TIB&"!E4:231[>Q#5F1 begin 640 absfact.res.gz 2 M'XL("%M1WE(``V%B<V9A8W0N<F5S`.V<6V_<N!7'W_TIB&"!E4:231[>Q#5F 3 3 M'K9%BP6*/L1Y6\2!QAEO!G7MP*/44CY]#^="<BQ*\KB;/#1RD+'$VT@Z__/3 4 4 M(77DJW=__>V?A!"V(/_X[5?RIM[4YW?KY9O+LZM]#2P(%GY8WZ_K)+T\L[_) … … 49 49 M2"B5P!HI*%4**#+*R:D0'/M2H-@)0QXM4)'=LC929H,<+90HI>*`-QQ%-1.` 50 50 M7V'#7Z!:":/!4+S!V:ZEH*7"@V.E.2$J`JDJ4=A/7FANOP?#:&,8I8;9&;W" 51 M,94L%0,3":[+P&<?_4S+)NM%[6'8%%&]1N`&^BYH+/V:F?&$@S#4 X@4KK=E152 M 204PM4=FI[2-EIX4CJ'21,7MVQPHX5+9U0`PL2F\\?G>S(1_&V6_9I1_W:\:53 M =23SUDKFT//P:L8M]FP%,KAH89:PHH'@$O:]JC'QME>.)K)*!/2DY4N[@->*54 M 8GMG?*E\NO=EH,';'&_]H<#$F5<8%F@,)T!/P<F?9EA/`*!(@`!_++W\Z>R_55 ( -K".YKE)````51 M,94L%0,3":[+P&<?_4S+)NM%[6'8%%&]1N`&^BYH+/V:F?&$@S#4L@&,9:C@ 52 M58&"VB.S4]I&2T\*QT3!46B9*)6-S,QV#B<51)1E?,(W,^$?1]DO&N5?]\M& 53 M'<V\M9HY]#R\FW&+/5N!$"Y:F"6L:""XAGWO:DS`[=6CB2P3`3UI_=*NX+6B 54 MV-X:7ZJ?[HT9:/`ZQUM_*#"!YA6&!1KC"=!3>/*G&=83`"@2(.`?2R]_.OLO 55 ([:LX;KI)```` 56 56 ` 57 57 end -
factory/FLINTconvert.cc
re82b5f2 r0b7a8a6 46 46 #include <flint/nmod_mat.h> 47 47 #include <flint/fmpz_mat.h> 48 #if (__FLINT_VERSION_MINOR >= 4) 49 #include <flint/fq.h> 50 #include <flint/fq_poly.h> 51 #include <flint/fq_nmod.h> 52 #include <flint/fq_nmod_poly.h> 53 #include <flint/fq_nmod_mat.h> 54 #endif 48 55 #ifdef __cplusplus 49 56 } … … 73 80 } 74 81 75 CanonicalForm convertFmpz2CF ( fmpz_t coefficient)82 CanonicalForm convertFmpz2CF (const fmpz_t coefficient) 76 83 { 77 84 if (fmpz_cmp_si (coefficient, MINIMMEDIATE) >= 0 && … … 91 98 } 92 99 93 CanonicalForm convertFmpz_poly_t2FacCF (fmpz_poly_t poly, const Variable& x) 100 CanonicalForm 101 convertFmpz_poly_t2FacCF (const fmpz_poly_t poly, const Variable& x) 94 102 { 95 103 CanonicalForm result= 0; … … 104 112 } 105 113 106 void convertFacCF2nmod_poly_t (nmod_poly_t result, const CanonicalForm& f) 114 void 115 convertFacCF2nmod_poly_t (nmod_poly_t result, const CanonicalForm& f) 107 116 { 108 117 bool save_sym_ff= isOn (SW_SYMMETRIC_FF); … … 125 134 } 126 135 127 CanonicalForm convertnmod_poly_t2FacCF (nmod_poly_t poly, const Variable& x) 136 CanonicalForm 137 convertnmod_poly_t2FacCF (const nmod_poly_t poly, const Variable& x) 128 138 { 129 139 CanonicalForm result= 0; … … 188 198 } 189 199 190 CanonicalForm convertFmpq_poly_t2FacCF (fmpq_poly_t p, const Variable& x) 200 CanonicalForm 201 convertFmpq_poly_t2FacCF (const fmpq_poly_t p, const Variable& x) 191 202 { 192 203 CanonicalForm result= 0; 193 204 fmpq_t coeff; 194 long n= fmpq_poly_length (p);205 long n= p->length; 195 206 for (long i= 0; i < n; i++) 196 207 { … … 226 237 227 238 CFFList 228 convertFLINTnmod_poly_factor2FacCFFList ( nmod_poly_factor_t fac,229 mp_limb_t leadingCoeff,239 convertFLINTnmod_poly_factor2FacCFFList (const nmod_poly_factor_t fac, 240 const mp_limb_t leadingCoeff, 230 241 const Variable& x 231 242 ) … … 238 249 239 250 for (i = 0; i < fac->num; i++) 240 result.append (CFFactor (convertnmod_poly_t2FacCF ((nmod_poly_t &)fac->p[i],x), 251 result.append (CFFactor (convertnmod_poly_t2FacCF ( 252 (nmod_poly_t &)fac->p[i],x), 241 253 fac->exp[i])); 242 254 return result; 243 255 } 256 257 #if __FLINT_VERSION_MINOR >= 4 258 CFFList 259 convertFLINTFq_nmod_poly_factor2FacCFFList (const fq_nmod_poly_factor_t fac, 260 const Variable& x, const Variable& alpha, 261 const fq_nmod_ctx_t fq_con 262 ) 263 { 264 CFFList result; 265 266 long i; 267 268 for (i = 0; i < fac->num; i++) 269 result.append (CFFactor (convertFq_nmod_poly_t2FacCF ( 270 (fq_nmod_poly_t &)fac->poly[i], x, alpha, fq_con), 271 fac->exp[i])); 272 return result; 273 } 274 #endif 244 275 245 276 void … … 255 286 256 287 CanonicalForm 257 convertFmpz_mod_poly_t2FacCF ( fmpz_mod_poly_t poly, const Variable& x,288 convertFmpz_mod_poly_t2FacCF (const fmpz_mod_poly_t poly, const Variable& x, 258 289 const modpk& b) 259 290 { … … 266 297 } 267 298 268 void convertFacCFMatrix2Fmpz_mat_t (fmpz_mat_t M, CFMatrix &m) 299 #if __FLINT_VERSION_MINOR >= 4 300 void 301 convertFacCF2Fq_nmod_t (fq_nmod_t result, const CanonicalForm& f, 302 const fq_nmod_ctx_t ctx) 303 { 304 bool save_sym_ff= isOn (SW_SYMMETRIC_FF); 305 if (save_sym_ff) Off (SW_SYMMETRIC_FF); 306 for (CFIterator i= f; i.hasTerms(); i++) 307 { 308 CanonicalForm c= i.coeff(); 309 if (!c.isImm()) c=c.mapinto(); //c%= getCharacteristic(); 310 if (!c.isImm()) 311 { //This case will never happen if the characteristic is in fact a prime 312 // number, since all coefficients are represented as immediates 313 printf("convertFacCF2Fq_nmod_t: coefficient not immediate!, char=%d\n", 314 getCharacteristic()); 315 } 316 else 317 { 318 STICKYASSERT (i.exp() <= fq_nmod_ctx_degree(ctx), "convertFacCF2Fq_nmod_t: element is not reduced"); 319 nmod_poly_set_coeff_ui (result, i.exp(), c.intval()); 320 } 321 } 322 if (save_sym_ff) On (SW_SYMMETRIC_FF); 323 } 324 325 CanonicalForm 326 convertFq_nmod_t2FacCF (const fq_nmod_t poly, const Variable& alpha) 327 { 328 return convertnmod_poly_t2FacCF (poly, alpha); 329 } 330 331 void 332 convertFacCF2Fq_t (fq_t result, const CanonicalForm& f, const fq_ctx_t ctx) 333 { 334 fmpz_poly_init2 (result, fq_ctx_degree(ctx)); 335 ASSERT (degree (f) < fq_ctx_degree (ctx), "input is not reduced"); 336 _fmpz_poly_set_length(result, degree(f)+1); 337 for (CFIterator i= f; i.hasTerms(); i++) 338 convertCF2Fmpz (fmpz_poly_get_coeff_ptr(result, i.exp()), i.coeff()); 339 _fmpz_vec_scalar_mod_fmpz (result->coeffs, result->coeffs, degree (f) + 1, 340 &ctx->p); 341 _fmpz_poly_normalise (result); 342 } 343 344 CanonicalForm 345 convertFq_t2FacCF (const fq_t poly, const Variable& alpha) 346 { 347 return convertFmpz_poly_t2FacCF (poly, alpha); 348 } 349 350 void 351 convertFacCF2Fq_poly_t (fq_poly_t result, const CanonicalForm& f, 352 const fq_ctx_t ctx) 353 { 354 fq_poly_init2 (result, degree (f)+1, ctx); 355 _fq_poly_set_length (result, degree (f) + 1, ctx); 356 fmpz_poly_t buf; 357 for (CFIterator i= f; i.hasTerms(); i++) 358 { 359 convertFacCF2Fmpz_poly_t (buf, i.coeff()); 360 _fmpz_vec_scalar_mod_fmpz (buf->coeffs, buf->coeffs, degree (i.coeff()) + 1, 361 &ctx->p); 362 _fmpz_poly_normalise (buf); 363 fq_poly_set_coeff (result, i.exp(), buf, ctx); 364 fmpz_poly_clear (buf); 365 } 366 } 367 368 void 369 convertFacCF2Fq_nmod_poly_t (fq_nmod_poly_t result, const CanonicalForm& f, 370 const fq_nmod_ctx_t ctx) 371 { 372 fq_nmod_poly_init2 (result, degree (f)+1, ctx); 373 _fq_nmod_poly_set_length (result, degree (f) + 1, ctx); 374 fq_nmod_t buf; 375 fq_nmod_init2 (buf, ctx); 376 for (CFIterator i= f; i.hasTerms(); i++) 377 { 378 convertFacCF2Fq_nmod_t (buf, i.coeff(), ctx); 379 fq_nmod_poly_set_coeff (result, i.exp(), buf, ctx); 380 fq_nmod_zero (buf, ctx); 381 } 382 fq_nmod_clear (buf, ctx); 383 } 384 385 CanonicalForm 386 convertFq_poly_t2FacCF (const fq_poly_t p, const Variable& x, 387 const Variable& alpha, const fq_ctx_t ctx) 388 { 389 CanonicalForm result= 0; 390 fq_t coeff; 391 long n= fq_poly_length (p, ctx); 392 fq_init2 (coeff, ctx); 393 for (long i= 0; i < n; i++) 394 { 395 fq_poly_get_coeff (coeff, p, i, ctx); 396 if (fq_is_zero (coeff, ctx)) 397 continue; 398 result += convertFq_t2FacCF (coeff, alpha)*power (x, i); 399 fq_zero (coeff, ctx); 400 } 401 fq_clear (coeff, ctx); 402 403 return result; 404 } 405 406 CanonicalForm 407 convertFq_nmod_poly_t2FacCF (const fq_nmod_poly_t p, const Variable& x, 408 const Variable& alpha, const fq_nmod_ctx_t ctx) 409 { 410 CanonicalForm result= 0; 411 fq_nmod_t coeff; 412 long n= fq_nmod_poly_length (p, ctx); 413 fq_nmod_init2 (coeff, ctx); 414 for (long i= 0; i < n; i++) 415 { 416 fq_nmod_poly_get_coeff (coeff, p, i, ctx); 417 if (fq_nmod_is_zero (coeff, ctx)) 418 continue; 419 result += convertFq_nmod_t2FacCF (coeff, alpha)*power (x, i); 420 fq_nmod_zero (coeff, ctx); 421 } 422 fq_nmod_clear (coeff, ctx); 423 424 return result; 425 } 426 #endif 427 428 void convertFacCFMatrix2Fmpz_mat_t (fmpz_mat_t M, const CFMatrix &m) 269 429 { 270 430 fmpz_mat_init (M, (long) m.rows(), (long) m.columns()); … … 279 439 } 280 440 } 281 CFMatrix* convertFmpz_mat_t2FacCFMatrix( fmpz_mat_t m)441 CFMatrix* convertFmpz_mat_t2FacCFMatrix(const fmpz_mat_t m) 282 442 { 283 443 CFMatrix *res=new CFMatrix(fmpz_mat_nrows (m),fmpz_mat_ncols (m)); … … 293 453 } 294 454 295 void convertFacCFMatrix2nmod_mat_t (nmod_mat_t M, CFMatrix &m)455 void convertFacCFMatrix2nmod_mat_t (nmod_mat_t M, const CFMatrix &m) 296 456 { 297 457 nmod_mat_init (M, (long) m.rows(), (long) m.columns(), getCharacteristic()); … … 311 471 } 312 472 313 CFMatrix* convertNmod_mat_t2FacCFMatrix( nmod_mat_t m)473 CFMatrix* convertNmod_mat_t2FacCFMatrix(const nmod_mat_t m) 314 474 { 315 475 CFMatrix *res=new CFMatrix(nmod_mat_nrows (m), nmod_mat_ncols (m)); … … 325 485 } 326 486 327 #endif 328 329 487 #if __FLINT_VERSION_MINOR >= 4 488 void 489 convertFacCFMatrix2Fq_nmod_mat_t (fq_nmod_mat_t M, 490 const fq_nmod_ctx_t fq_con, const CFMatrix &m) 491 { 492 fq_nmod_mat_init (M, (long) m.rows(), (long) m.columns(), fq_con); 493 int i,j; 494 for(i=m.rows();i>0;i--) 495 { 496 for(j=m.columns();j>0;j--) 497 { 498 convertFacCF2nmod_poly_t (M->rows[i-1]+j-1, m (i,j)); 499 } 500 } 501 } 502 503 CFMatrix* 504 convertFq_nmod_mat_t2FacCFMatrix(const fq_nmod_mat_t m, 505 const fq_nmod_ctx_t& fq_con, 506 const Variable& alpha) 507 { 508 CFMatrix *res=new CFMatrix(fq_nmod_mat_nrows (m, fq_con), 509 fq_nmod_mat_ncols (m, fq_con)); 510 int i,j; 511 for(i=res->rows();i>0;i--) 512 { 513 for(j=res->columns();j>0;j--) 514 { 515 (*res)(i,j)=convertFq_nmod_t2FacCF (fq_nmod_mat_entry (m, i-1, j-1), 516 alpha); 517 } 518 } 519 return res; 520 } 521 #endif 522 523 #endif 524 525 -
factory/FLINTconvert.h
re82b5f2 r0b7a8a6 35 35 #include <flint/nmod_mat.h> 36 36 #include <flint/fmpz_mat.h> 37 #if (__FLINT_VERSION_MINOR >= 4) 38 #include <flint/fq.h> 39 #include <flint/fq_poly.h> 40 #include <flint/fq_nmod.h> 41 #include <flint/fq_nmod_poly.h> 42 #include <flint/fq_nmod_mat.h> 43 #endif 37 44 #ifdef __cplusplus 38 45 } … … 57 64 /// conversion of a FLINT integer to CanonicalForm 58 65 CanonicalForm 59 convertFmpz2CF ( fmpz_t coefficient ///< [in] a FLINT integer66 convertFmpz2CF (const fmpz_t coefficient ///< [in] a FLINT integer 60 67 ); 61 68 62 69 /// conversion of a FLINT poly over Z to CanonicalForm 63 70 CanonicalForm 64 convertFmpz_poly_t2FacCF ( fmpz_poly_t poly, ///< [in] an fmpz_poly_t71 convertFmpz_poly_t2FacCF (const fmpz_poly_t poly, ///< [in] an fmpz_poly_t 65 72 const Variable& x ///< [in] variable the result should 66 73 ///< have … … 77 84 /// conversion of a FLINT poly over Z/p to CanonicalForm 78 85 CanonicalForm 79 convertnmod_poly_t2FacCF ( nmod_poly_t poly, ///< [in] a nmod_poly_t86 convertnmod_poly_t2FacCF (const nmod_poly_t poly, ///< [in] a nmod_poly_t 80 87 const Variable& x ///< [in] variable the result should 81 88 ///< have … … 98 105 /// conversion of a FLINT poly over Q to CanonicalForm 99 106 CanonicalForm 100 convertFmpq_poly_t2FacCF ( fmpq_poly_t p, ///< [in] an fmpq_poly_t107 convertFmpq_poly_t2FacCF (const fmpq_poly_t p, ///< [in] an fmpq_poly_t 101 108 const Variable& x ///< [in] variable the result should 102 109 ///< have … … 107 114 CFFList 108 115 convertFLINTnmod_poly_factor2FacCFFList ( 109 nmod_poly_factor_t fac, ///< [in] a nmod_poly_factor_t110 mp_limb_t leadingCoeff, ///< [in] leading coefficient116 const nmod_poly_factor_t fac, ///< [in] a nmod_poly_factor_t 117 const mp_limb_t leadingCoeff, ///< [in] leading coefficient 111 118 const Variable& x ///< [in] variable the result should 112 119 ///< have … … 127 134 CanonicalForm 128 135 convertFmpz_mod_poly_t2FacCF ( 129 fmpz_mod_poly_t poly, ///< [in] fmpz_mod_poly_t136 const fmpz_mod_poly_t poly, ///< [in] fmpz_mod_poly_t 130 137 const Variable& x, ///< [in] variable the result 131 138 ///< should have … … 134 141 ); 135 142 143 #if __FLINT_VERSION_MINOR >= 4 144 /// conversion of a FLINT element of F_q to a CanonicalForm with alg. variable 145 /// alpha 146 CanonicalForm 147 convertFq_nmod_t2FacCF (const fq_nmod_t poly, ///< [in] fq_nmod_t 148 const Variable& alpha ///< [in] algebraic variable 149 ); 150 151 /// conversion of a FLINT element of F_q with non-word size p to a CanonicalForm 152 /// with alg. variable alpha 153 CanonicalForm 154 convertFq_t2FacCF (const fq_t poly, ///< [in] fq_t 155 const Variable& alpha ///< [in] algebraic variable 156 ); 157 158 /// conversion of a factory element of F_q to a FLINT fq_nmod_t, does not do any 159 /// memory allocation for poly 160 void 161 convertFacCF2Fq_nmod_t (fq_nmod_t result, ///< [in,out] fq_nmod_t 162 const CanonicalForm& f, ///< [in] element of Fq 163 const fq_nmod_ctx_t ctx ///< [in] Fq context 164 ); 165 166 /// conversion of a factory element of F_q (for non-word size p) to a FLINT fq_t 167 void 168 convertFacCF2Fq_t (fq_t result, ///< [in,out] fq_t 169 const CanonicalForm& f, ///< [in] element of Fq 170 const fq_ctx_t ctx ///< [in] Fq context 171 ); 172 173 /// conversion of a factory univariate poly over F_q (for non-word size p) to a 174 /// FLINT fq_poly_t 175 void 176 convertFacCF2Fq_poly_t (fq_poly_t result, ///< [in,out] fq_poly_t 177 const CanonicalForm& f,///< [in] univariate poly over Fq 178 const fq_ctx_t ctx ///< [in] Fq context 179 ); 180 181 /// conversion of a factory univariate poly over F_q to a FLINT fq_nmod_poly_t 182 void 183 convertFacCF2Fq_nmod_poly_t (fq_nmod_poly_t result, ///< [in,out] fq_nmod_poly_t 184 const CanonicalForm& f,///< [in] univariate poly 185 ///< over Fq 186 const fq_nmod_ctx_t ctx///< [in] Fq context 187 ); 188 189 /// conversion of a FLINT poly over Fq (for non-word size p) to a CanonicalForm 190 /// with alg. variable alpha and polynomial variable x 191 CanonicalForm 192 convertFq_poly_t2FacCF (const fq_poly_t p, ///< [in] fq_poly_t 193 const Variable& x, ///< [in] polynomial variable 194 const Variable& alpha, ///< [in] algebraic variable 195 const fq_ctx_t ctx ///< [in] Fq context 196 ); 197 198 /// conversion of a FLINT poly over Fq to a CanonicalForm with alg. variable 199 /// alpha and polynomial variable x 200 CanonicalForm 201 convertFq_nmod_poly_t2FacCF (const fq_nmod_poly_t p, ///< [in] fq_nmod_poly_t 202 const Variable& x, ///< [in] polynomial var. 203 const Variable& alpha, ///< [in] algebraic var. 204 const fq_nmod_ctx_t ctx ///< [in] Fq context 205 ); 206 #endif 207 136 208 /// conversion of a factory matrix over Z to a fmpz_mat_t 137 void convertFacCFMatrix2Fmpz_mat_t (fmpz_mat_t M, ///<[in,out] fmpz_mat_t138 CFMatrix &m///<[in] matrix over Z209 void convertFacCFMatrix2Fmpz_mat_t (fmpz_mat_t M, ///<[in,out] fmpz_mat_t 210 const CFMatrix &m ///<[in] matrix over Z 139 211 ); 140 212 141 213 /// conversion of a FLINT matrix over Z to a factory matrix 142 CFMatrix* convertFmpz_mat_t2FacCFMatrix( fmpz_mat_t m ///<[in] fmpz_mat_t214 CFMatrix* convertFmpz_mat_t2FacCFMatrix(const fmpz_mat_t m ///<[in] fmpz_mat_t 143 215 ); 144 216 145 217 /// conversion of a factory matrix over Z/p to a nmod_mat_t 146 void convertFacCFMatrix2nmod_mat_t (nmod_mat_t M, ///<[in,out] nmod_mat_t147 CFMatrix &m///<[in] matrix over Z/p218 void convertFacCFMatrix2nmod_mat_t (nmod_mat_t M, ///<[in,out] nmod_mat_t 219 const CFMatrix &m ///<[in] matrix over Z/p 148 220 ); 149 221 150 222 /// conversion of a FLINT matrix over Z/p to a factory matrix 151 CFMatrix* convertNmod_mat_t2FacCFMatrix( nmod_mat_t m ///<[in] nmod_mat_t223 CFMatrix* convertNmod_mat_t2FacCFMatrix(const nmod_mat_t m ///<[in] nmod_mat_t 152 224 ); 153 225 154 #endif 155 #endif 226 #if __FLINT_VERSION_MINOR >= 4 227 /// conversion of a FLINT matrix over F_q to a factory matrix 228 CFMatrix* 229 convertFq_nmod_mat_t2FacCFMatrix(const fq_nmod_mat_t m, ///< [in] fq_nmod_mat_t 230 const fq_nmod_ctx_t& fq_con, ///< [in] Fq context 231 const Variable& alpha ///< [in] algebraic variable 232 ); 233 234 /// conversion of a factory matrix over F_q to a fq_nmod_mat_t 235 void 236 convertFacCFMatrix2Fq_nmod_mat_t (fq_nmod_mat_t M, ///< [in, out] fq_nmod_mat_t 237 const fq_nmod_ctx_t fq_con, ///< [in] Fq context 238 const CFMatrix &m ///< [in] matrix over Fq 239 ); 240 241 /// conversion of a FLINT factorization over Fq (for word size p) to a 242 /// CFFList 243 CFFList 244 convertFLINTFq_nmod_poly_factor2FacCFFList (const fq_nmod_poly_factor_t fac, ///< [in] fq_nmod_poly_factor_t 245 const Variable& x, ///< [in] polynomial variable 246 const Variable& alpha, ///< [in] algebraic variable 247 const fq_nmod_ctx_t fq_con ///< [in] Fq context 248 ); 249 #endif 250 251 252 #endif 253 #endif -
factory/algext.cc
re82b5f2 r0b7a8a6 239 239 } 240 240 241 #ifndef HAVE_NTL 241 242 void tryDivrem (const CanonicalForm& F, const CanonicalForm& G, CanonicalForm& Q, 242 243 CanonicalForm& R, CanonicalForm& inv, const CanonicalForm& mipo, … … 345 346 } 346 347 } 348 #endif 347 349 348 350 bool hasFirstAlgVar( const CanonicalForm & f, Variable & a ) … … 972 974 } 973 975 976 #ifndef HAVE_NTL 974 977 void tryExtgcd( const CanonicalForm & F, const CanonicalForm & G, const CanonicalForm & M, CanonicalForm & result, CanonicalForm & s, CanonicalForm & t, bool & fail ) 975 978 { // F, G are univariate polynomials (i.e. they have exactly one polynomial variable) … … 1041 1044 } 1042 1045 } 1043 1046 #endif 1044 1047 1045 1048 static CanonicalForm trycontent ( const CanonicalForm & f, const Variable & x, const CanonicalForm & M, bool & fail ) … … 1091 1094 } 1092 1095 1093 void tryExtgcd( const CanonicalForm & F, const CanonicalForm & G, CanonicalForm & result, CanonicalForm & s, CanonicalForm & t, bool & fail )1094 {1095 // F, G are univariate polynomials (i.e. they have exactly one polynomial variable)1096 // F and G must have the same level AND level > 01097 // we try to calculate gcd(f,g) = s*F + t*G1098 // if a zero divisor is encontered, 'fail' is set to one1099 Variable a, b;1100 if( !hasFirstAlgVar(F,a) && !hasFirstAlgVar(G,b) ) // note lazy evaluation1101 {1102 result = extgcd( F, G, s, t ); // no zero divisors possible1103 return;1104 }1105 if( b.level() > a.level() )1106 a = b;1107 // here: a is the biggest alg. var in F and G1108 CanonicalForm M = getMipo(a);1109 CanonicalForm P;1110 if( degree(F) > degree(G) )1111 {1112 P=F; result=G; s=0; t=1;1113 }1114 else1115 {1116 P=G; result=F; s=1; t=0;1117 }1118 CanonicalForm inv, rem, q, u, v;1119 // here: degree(P) >= degree(result)1120 while(true)1121 {1122 tryInvert( Lc(result), M, inv, fail );1123 if(fail)1124 return;1125 // here: Lc(result) is invertible modulo M1126 q = Lc(P)*inv * power( P.mvar(), degree(P)-degree(result) );1127 rem = P - q*result;1128 // here: s*F + t*G = result1129 if( rem.isZero() )1130 {1131 s*=inv;1132 t*=inv;1133 result *= inv; // monify result1134 return;1135 }1136 P=result;1137 result=rem;1138 rem=u-q*s;1139 u=s;1140 s=rem;1141 rem=v-q*t;1142 v=t;1143 t=rem;1144 }1145 }1146 1147 void tryCRA( const CanonicalForm & x1, const CanonicalForm & q1, const CanonicalForm & x2, const CanonicalForm & q2, CanonicalForm & xnew, CanonicalForm & qnew, bool & fail )1148 { // polys of level <= 1 are considered coefficients. q1,q2 are assumed to be coprime1149 // xnew = x1 mod q1 (coefficientwise in the above sense)1150 // xnew = x2 mod q21151 // qnew = q1*q21152 CanonicalForm tmp;1153 if(x1.level() <= 1 && x2.level() <= 1) // base case1154 {1155 tryExtgcd(q1,q2,tmp,xnew,qnew,fail);1156 if(fail)1157 return;1158 xnew = x1 + (x2-x1) * xnew * q1;1159 qnew = q1*q2;1160 xnew = mod(xnew,qnew);1161 return;1162 }1163 CanonicalForm tmp2;1164 xnew = 0;1165 qnew = q1 * q2;1166 // here: x1.level() > 1 || x2.level() > 11167 if(x1.level() > x2.level())1168 {1169 for(CFIterator i=x1; i.hasTerms(); i++)1170 {1171 if(i.exp() == 0) // const. term1172 {1173 tryCRA(i.coeff(),q1,x2,q2,tmp,tmp2,fail);1174 if(fail)1175 return;1176 xnew += tmp;1177 }1178 else1179 {1180 tryCRA(i.coeff(),q1,0,q2,tmp,tmp2,fail);1181 if(fail)1182 return;1183 xnew += tmp * power(x1.mvar(),i.exp());1184 }1185 }1186 return;1187 }1188 // here: x1.level() <= x2.level() && ( x1.level() > 1 || x2.level() > 1 )1189 if(x2.level() > x1.level())1190 {1191 for(CFIterator j=x2; j.hasTerms(); j++)1192 {1193 if(j.exp() == 0) // const. term1194 {1195 tryCRA(x1,q1,j.coeff(),q2,tmp,tmp2,fail);1196 if(fail)1197 return;1198 xnew += tmp;1199 }1200 else1201 {1202 tryCRA(0,q1,j.coeff(),q2,tmp,tmp2,fail);1203 if(fail)1204 return;1205 xnew += tmp * power(x2.mvar(),j.exp());1206 }1207 }1208 return;1209 }1210 // here: x1.level() == x2.level() && x1.level() > 1 && x2.level() > 11211 CFIterator i = x1;1212 CFIterator j = x2;1213 while(i.hasTerms() || j.hasTerms())1214 {1215 if(i.hasTerms())1216 {1217 if(j.hasTerms())1218 {1219 if(i.exp() == j.exp())1220 {1221 tryCRA(i.coeff(),q1,j.coeff(),q2,tmp,tmp2,fail);1222 if(fail)1223 return;1224 xnew += tmp * power(x1.mvar(),i.exp());1225 i++; j++;1226 }1227 else1228 {1229 if(i.exp() < j.exp())1230 {1231 tryCRA(i.coeff(),q1,0,q2,tmp,tmp2,fail);1232 if(fail)1233 return;1234 xnew += tmp * power(x1.mvar(),i.exp());1235 i++;1236 }1237 else // i.exp() > j.exp()1238 {1239 tryCRA(0,q1,j.coeff(),q2,tmp,tmp2,fail);1240 if(fail)1241 return;1242 xnew += tmp * power(x1.mvar(),j.exp());1243 j++;1244 }1245 }1246 }1247 else // j is out of terms1248 {1249 tryCRA(i.coeff(),q1,0,q2,tmp,tmp2,fail);1250 if(fail)1251 return;1252 xnew += tmp * power(x1.mvar(),i.exp());1253 i++;1254 }1255 }1256 else // i is out of terms1257 {1258 tryCRA(0,q1,j.coeff(),q2,tmp,tmp2,fail);1259 if(fail)1260 return;1261 xnew += tmp * power(x1.mvar(),j.exp());1262 j++;1263 }1264 }1265 }1266 -
factory/algext.h
re82b5f2 r0b7a8a6 8 8 9 9 CanonicalForm QGCD( const CanonicalForm &, const CanonicalForm & ); 10 #ifndef HAVE_NTL 10 11 void tryDivrem (const CanonicalForm&, const CanonicalForm&, CanonicalForm&, 11 12 CanonicalForm&, CanonicalForm&, const CanonicalForm&, 12 13 bool&); 13 14 void tryEuclid( const CanonicalForm &, const CanonicalForm &, const CanonicalForm &, CanonicalForm &, bool & ); 15 void tryExtgcd( const CanonicalForm & F, const CanonicalForm & G, const CanonicalForm& M, CanonicalForm & result, CanonicalForm & s, CanonicalForm & t, bool & fail ); 16 #endif 14 17 void tryInvert( const CanonicalForm &, const CanonicalForm &, CanonicalForm &, bool & ); 15 18 bool hasFirstAlgVar( const CanonicalForm &, Variable & ); 16 19 void tryBrownGCD( const CanonicalForm & F, const CanonicalForm & G, const CanonicalForm & M, CanonicalForm & result, bool & fail, bool topLevel= true ); 17 void tryExtgcd( const CanonicalForm & F, const CanonicalForm & G, const CanonicalForm& M, CanonicalForm & result, CanonicalForm & s, CanonicalForm & t, bool & fail );18 20 int * leadDeg(const CanonicalForm & f, int *degs); 19 21 bool isLess(int *a, int *b, int lower, int upper); -
factory/cf_chinese.cc
re82b5f2 r0b7a8a6 161 161 //}}} 162 162 163 #ifndef HAVE_NTL 163 164 CanonicalForm Farey_n (CanonicalForm N, const CanonicalForm P) 164 165 //"USAGE: Farey_n (N,P); P, N number; … … 190 191 return(0); 191 192 } 193 #endif 192 194 193 195 CanonicalForm Farey ( const CanonicalForm & f, const CanonicalForm & q ) -
factory/cf_factor.cc
re82b5f2 r0b7a8a6 632 632 } 633 633 634 #ifdef HAVE_NTL635 CanonicalForm fntl ( const CanonicalForm & f, int j )636 {637 ZZX f1=convertFacCF2NTLZZX(f);638 return convertZZ2CF(coeff(f1,j));639 }640 #endif641 642 634 CFFList factorize ( const CanonicalForm & f, const Variable & alpha ) 643 635 { … … 657 649 if (ch>2) 658 650 { 651 #if (HAVE_FLINT && __FLINT_VERSION_MINOR >= 4) 652 nmod_poly_t FLINTmipo, leadingCoeff; 653 fq_nmod_ctx_t fq_con; 654 655 nmod_poly_init (FLINTmipo, getCharacteristic()); 656 nmod_poly_init (leadingCoeff, getCharacteristic()); 657 convertFacCF2nmod_poly_t (FLINTmipo, getMipo (alpha)); 658 659 fq_nmod_ctx_init_modulus (fq_con, FLINTmipo, "Z"); 660 fq_nmod_poly_t FLINTF; 661 convertFacCF2Fq_nmod_poly_t (FLINTF, f, fq_con); 662 fq_nmod_poly_factor_t res; 663 fq_nmod_poly_factor_init (res, fq_con); 664 fq_nmod_poly_factor (res, leadingCoeff, FLINTF, fq_con); 665 F= convertFLINTFq_nmod_poly_factor2FacCFFList (res, f.mvar(), alpha, fq_con); 666 F.insert (CFFactor (Lc (f), 1)); 667 668 fq_nmod_poly_factor_clear (res, fq_con); 669 fq_nmod_poly_clear (FLINTF, fq_con); 670 nmod_poly_clear (FLINTmipo); 671 nmod_poly_clear (leadingCoeff); 672 fq_nmod_ctx_clear (fq_con); 673 #else 659 674 // First all cases with characteristic !=2 660 675 // set remainder … … 682 697 // return converted result 683 698 F=convertNTLvec_pair_zzpEX_long2FacCFFList(factors,leadcoeff,f.mvar(),alpha); 699 #endif 684 700 } 685 701 else if (/*getCharacteristic()*/ch==2) -
factory/cf_gcd.cc
re82b5f2 r0b7a8a6 528 528 //}}} 529 529 530 #ifndef HAVE_NTL 530 531 static CanonicalForm gcd_poly_univar0( const CanonicalForm & F, const CanonicalForm & G, bool primitive ) 531 532 { … … 612 613 } 613 614 } 615 #endif 614 616 615 617 static CanonicalForm … … 796 798 #endif 797 799 #endif 800 #ifndef HAVE_NTL 798 801 return gcd_poly_univar0( pi, pi1, true ) * C; 802 #endif 799 803 } 800 804 else if ( gcd_test_one( pi1, pi, true, d ) ) -
factory/facFactorize.cc
re82b5f2 r0b7a8a6 129 129 iter++; 130 130 CanonicalForm contentx= content (iter.getItem(), x); 131 if (degree (contentx) > 0) 132 { 133 result= CFList(); 134 eval= CFList(); 135 LCFeval= CFList(); 136 E.nextpoint(); 137 continue; 138 } 139 contentx= content (iter.getItem()); 131 140 if (degree (contentx) > 0) 132 141 { -
factory/facFqBivar.cc
re82b5f2 r0b7a8a6 163 163 "univariate polynomial expected or constant expected"); 164 164 CFFList factorsA; 165 if (fac_NTL_char != getCharacteristic())166 {167 fac_NTL_char= getCharacteristic();168 zz_p::init (getCharacteristic());169 }170 165 if (GF) 171 166 { … … 178 173 if (getCharacteristic() > 2) 179 174 { 175 #if (HAVE_FLINT && __FLINT_VERSION_MINOR >= 4) 176 nmod_poly_t FLINTmipo, leadingCoeff; 177 fq_nmod_ctx_t fq_con; 178 fq_nmod_poly_t FLINTA; 179 fq_nmod_poly_factor_t FLINTFactorsA; 180 181 nmod_poly_init (FLINTmipo, getCharacteristic()); 182 convertFacCF2nmod_poly_t (FLINTmipo, mipo.mapinto()); 183 184 fq_nmod_ctx_init_modulus (fq_con, FLINTmipo, "Z"); 185 186 convertFacCF2Fq_nmod_poly_t (FLINTA, buf, fq_con); 187 fq_nmod_poly_make_monic (FLINTA, FLINTA, fq_con); 188 189 fq_nmod_poly_factor_init (FLINTFactorsA, fq_con); 190 nmod_poly_init (leadingCoeff, getCharacteristic()); 191 192 fq_nmod_poly_factor (FLINTFactorsA, leadingCoeff, FLINTA, fq_con); 193 194 factorsA= convertFLINTFq_nmod_poly_factor2FacCFFList (FLINTFactorsA, x, 195 beta, fq_con); 196 197 fq_nmod_poly_factor_clear (FLINTFactorsA, fq_con); 198 fq_nmod_poly_clear (FLINTA, fq_con); 199 nmod_poly_clear (FLINTmipo); 200 nmod_poly_clear (leadingCoeff); 201 fq_nmod_ctx_clear (fq_con); 202 #else 203 if (fac_NTL_char != getCharacteristic()) 204 { 205 fac_NTL_char= getCharacteristic(); 206 zz_p::init (getCharacteristic()); 207 } 180 208 zz_pX NTLMipo= convertFacCF2NTLzzpX (mipo.mapinto()); 181 209 zz_pE::init (NTLMipo); … … 186 214 factorsA= convertNTLvec_pair_zzpEX_long2FacCFFList (NTLFactorsA, multi, 187 215 x, beta); 216 #endif 188 217 } 189 218 else … … 210 239 if (getCharacteristic() > 2) 211 240 { 241 #if (HAVE_FLINT && __FLINT_VERSION_MINOR >= 4) 242 nmod_poly_t FLINTmipo, leadingCoeff; 243 fq_nmod_ctx_t fq_con; 244 fq_nmod_poly_t FLINTA; 245 fq_nmod_poly_factor_t FLINTFactorsA; 246 247 nmod_poly_init (FLINTmipo, getCharacteristic()); 248 convertFacCF2nmod_poly_t (FLINTmipo, getMipo (alpha)); 249 250 fq_nmod_ctx_init_modulus (fq_con, FLINTmipo, "Z"); 251 252 convertFacCF2Fq_nmod_poly_t (FLINTA, A, fq_con); 253 fq_nmod_poly_make_monic (FLINTA, FLINTA, fq_con); 254 255 fq_nmod_poly_factor_init (FLINTFactorsA, fq_con); 256 nmod_poly_init (leadingCoeff, getCharacteristic()); 257 258 fq_nmod_poly_factor (FLINTFactorsA, leadingCoeff, FLINTA, fq_con); 259 260 factorsA= convertFLINTFq_nmod_poly_factor2FacCFFList (FLINTFactorsA, x, 261 alpha, fq_con); 262 263 fq_nmod_poly_factor_clear (FLINTFactorsA, fq_con); 264 fq_nmod_poly_clear (FLINTA, fq_con); 265 nmod_poly_clear (FLINTmipo); 266 nmod_poly_clear (leadingCoeff); 267 fq_nmod_ctx_clear (fq_con); 268 #else 269 if (fac_NTL_char != getCharacteristic()) 270 { 271 fac_NTL_char= getCharacteristic(); 272 zz_p::init (getCharacteristic()); 273 } 212 274 zz_pX NTLMipo= convertFacCF2NTLzzpX (getMipo (alpha)); 213 275 zz_pE::init (NTLMipo); … … 218 280 factorsA= convertNTLvec_pair_zzpEX_long2FacCFFList (NTLFactorsA, multi, 219 281 x, alpha); 282 #endif 220 283 } 221 284 else … … 251 314 if (getCharacteristic() > 2) 252 315 { 316 if (fac_NTL_char != getCharacteristic()) 317 { 318 fac_NTL_char= getCharacteristic(); 319 zz_p::init (getCharacteristic()); 320 } 253 321 zz_pX NTLA= convertFacCF2NTLzzpX (A); 254 322 MakeMonic (NTLA); … … 761 829 adaptedLiftBound= 0; 762 830 int d= degree (F), l= 0; 763 bool isRat= (isOn (SW_RATIONAL) && getCharacteristic() == 0) || getCharacteristic() > 0; 831 bool isRat= (isOn (SW_RATIONAL) && getCharacteristic() == 0) || 832 getCharacteristic() > 0; 764 833 if (!isRat) 765 834 On (SW_RATIONAL); … … 1356 1425 } 1357 1426 1427 #ifndef HAVE_FLINT 1358 1428 long isReduced (const mat_zz_p& M) 1359 1429 { … … 1372 1442 return 1; 1373 1443 } 1444 #endif 1374 1445 1375 1446 #ifdef HAVE_FLINT … … 1409 1480 } 1410 1481 1482 #ifndef HAVE_FLINT 1411 1483 int * extractZeroOneVecs (const mat_zz_p& M) 1412 1484 { … … 1432 1504 return result; 1433 1505 } 1506 #endif 1434 1507 1435 1508 #ifdef HAVE_FLINT … … 1565 1638 } 1566 1639 1640 #ifndef HAVE_FLINT 1567 1641 void 1568 1642 reconstructionTry (CFList& reconstructedFactors, CanonicalForm& F, const CFList& … … 1646 1720 F= bufF (y+eval,y); 1647 1721 } 1722 #endif 1648 1723 1649 1724 #ifdef HAVE_FLINT … … 1831 1906 } 1832 1907 1908 #ifndef HAVE_FLINT 1833 1909 CFList 1834 1910 extReconstruction (CanonicalForm& G, CFList& factors, int* zeroOneVecs, int … … 1909 1985 return result; 1910 1986 } 1987 #endif 1911 1988 1912 1989 #ifdef HAVE_FLINT … … 1991 2068 #endif 1992 2069 2070 #ifndef HAVE_FLINT 1993 2071 CFList 1994 2072 reconstruction (CanonicalForm& G, CFList& factors, int* zeroOneVecs, … … 2039 2117 return result; 2040 2118 } 2119 #endif 2041 2120 2042 2121 #ifdef HAVE_FLINT … … 2091 2170 #endif 2092 2171 2172 #ifndef HAVE_FLINT 2093 2173 void 2094 2174 extReconstructionTry (CFList& reconstructedFactors, CanonicalForm& F, const … … 2218 2298 } 2219 2299 } 2300 #endif 2220 2301 2221 2302 #ifdef HAVE_FLINT … … 2349 2430 #endif 2350 2431 2432 #ifndef HAVE_FLINT 2351 2433 //over Fp 2352 2434 int … … 2471 2553 return l; 2472 2554 } 2555 #endif 2473 2556 2474 2557 #ifdef HAVE_FLINT … … 2609 2692 #endif 2610 2693 2694 #ifndef HAVE_FLINT 2611 2695 //over field extension 2612 2696 int … … 2804 2888 return l; 2805 2889 } 2806 2807 /*#ifdef HAVE_FLINT 2890 #endif 2891 2892 #ifdef HAVE_FLINT 2808 2893 //over field extension 2809 2894 int … … 2920 3005 gamma, source, dest 2921 3006 ); 2922 buf= getCoeffs (A[ii] [i], k, l, degMipo, gamma, 0, FLINTMatInv); //TODO3007 buf= getCoeffs (A[ii] [i], k, l, degMipo, gamma, 0, FLINTMatInv); 2923 3008 } 2924 3009 else … … 2929 3014 gamma, source, dest 2930 3015 ); 2931 buf= getCoeffs (A[ii] [i], k, l, degMipo, gamma, 0, FLINTMatInv); //TODO3016 buf= getCoeffs (A[ii] [i], k, l, degMipo, gamma, 0, FLINTMatInv); 2932 3017 } 2933 3018 writeInMatrix (C, buf, ii + 1, 0); … … 3011 3096 return l; 3012 3097 } 3013 #endif */3098 #endif 3014 3099 3015 3100 // over Fq … … 3701 3786 CFArray * A= new CFArray [factors.length()]; 3702 3787 CFArray bufQ= CFArray (factors.length()); 3788 #ifdef HAVE_FLINT 3789 nmod_mat_t FLINTN; 3790 nmod_mat_init (FLINTN,factors.length(),factors.length(), getCharacteristic()); 3791 for (long i=factors.length()-1; i >= 0; i--) 3792 nmod_mat_entry (FLINTN, i, i)= 1; 3793 #else 3703 3794 if (fac_NTL_char != getCharacteristic()) 3704 3795 { … … 3708 3799 mat_zz_p NTLN; 3709 3800 ident (NTLN, factors.length()); 3801 #endif 3710 3802 int minBound= bounds[0]; 3711 3803 for (int i= 1; i < d; i++) … … 3727 3819 CFMatrix Mat, C; 3728 3820 CFIterator iter; 3821 #ifdef HAVE_FLINT 3822 long rank; 3823 nmod_mat_t FLINTMat, FLINTMatInv, FLINTC, FLINTK, null; 3824 #else 3729 3825 mat_zz_p* NTLMat,*NTLC, NTLK; 3826 #endif 3730 3827 CFArray buf; 3731 3828 while (l <= precision) … … 3746 3843 } 3747 3844 3845 #ifdef HAVE_FLINT 3846 convertFacCFMatrix2nmod_mat_t (FLINTMat, Mat); 3847 nmod_mat_init (FLINTMatInv, nmod_mat_nrows (FLINTMat), 3848 nmod_mat_nrows (FLINTMat), getCharacteristic()); 3849 nmod_mat_inv (FLINTMatInv, FLINTMat); 3850 #else 3748 3851 NTLMat= convertFacCFMatrix2NTLmat_zz_p (Mat); 3749 3852 *NTLMat= inv (*NTLMat); 3853 #endif 3854 3750 3855 if (GF) 3751 3856 setCharacteristic (getCharacteristic(), degMipo, info.getGFName()); … … 3784 3889 gamma, source, dest 3785 3890 ); 3891 #ifdef HAVE_FLINT 3892 buf= getCoeffs (A[ii] [i], k, l, degMipo, gamma, 0, FLINTMatInv); 3893 #else 3786 3894 buf= getCoeffs (A[ii] [i], k, l, degMipo, gamma, 0, *NTLMat); 3895 #endif 3787 3896 } 3788 3897 else … … 3793 3902 gamma, source, dest 3794 3903 ); 3904 #ifdef HAVE_FLINT 3905 buf= getCoeffs (A[ii] [i], k, l, degMipo, gamma, 0, FLINTMatInv); 3906 #else 3795 3907 buf= getCoeffs (A[ii] [i], k, l, degMipo, gamma, 0, *NTLMat); 3908 #endif 3796 3909 } 3797 3910 writeInMatrix (C, buf, ii + 1, 0); … … 3804 3917 setCharacteristic(getCharacteristic()); 3805 3918 3919 #ifdef HAVE_FLINT 3920 convertFacCFMatrix2nmod_mat_t (FLINTC, C); 3921 nmod_mat_init (FLINTK, nmod_mat_nrows (FLINTC), nmod_mat_ncols (FLINTN), 3922 getCharacteristic()); 3923 nmod_mat_mul (FLINTK, FLINTC, FLINTN); 3924 nmod_mat_init (null, nmod_mat_ncols (FLINTK), nmod_mat_ncols (FLINTK), 3925 getCharacteristic()); 3926 rank= nmod_mat_nullspace (null, FLINTK); 3927 nmod_mat_clear (FLINTK); 3928 nmod_mat_window_init (FLINTK, null, 0, 0, nmod_mat_nrows(null), rank); 3929 nmod_mat_clear (FLINTC); 3930 nmod_mat_init_set (FLINTC, FLINTN); 3931 nmod_mat_clear (FLINTN); 3932 nmod_mat_init (FLINTN, nmod_mat_nrows (FLINTC), nmod_mat_ncols (FLINTK), 3933 getCharacteristic()); 3934 nmod_mat_mul (FLINTN, FLINTC, FLINTK); //no aliasing allowed!! 3935 3936 nmod_mat_clear (FLINTC); 3937 nmod_mat_window_clear (FLINTK); 3938 nmod_mat_clear (null); 3939 #else 3806 3940 NTLC= convertFacCFMatrix2NTLmat_zz_p(C); 3807 3941 NTLK= (*NTLC)*NTLN; … … 3811 3945 NTLN *= NTLK; 3812 3946 delete NTLC; 3947 #endif 3813 3948 3814 3949 if (GF) 3815 3950 setCharacteristic (getCharacteristic(), degMipo, info.getGFName()); 3816 3951 3952 #ifdef HAVE_FLINT 3953 if (nmod_mat_ncols (FLINTN) == 1) 3954 { 3955 nmod_mat_clear (FLINTMat); 3956 nmod_mat_clear (FLINTMatInv); 3957 nmod_mat_clear (FLINTN); 3958 #else 3817 3959 if (NTLN.NumCols() == 1) 3818 3960 { 3961 delete NTLMat; 3962 #endif 3819 3963 Variable y= Variable (2); 3820 3964 CanonicalForm tmp= F (y - evaluation, y); 3821 3965 CFList source, dest; 3822 3966 tmp= mapDown (tmp, info, source, dest); 3823 delete NTLMat;3824 3967 delete [] A; 3825 3968 delete [] bounds; … … 3830 3973 } 3831 3974 3975 #ifdef HAVE_FLINT 3976 nmod_mat_clear (FLINTMat); 3977 nmod_mat_clear (FLINTMatInv); 3978 #else 3832 3979 delete NTLMat; 3833 3980 #endif 3981 3982 #ifdef HAVE_FLINT 3983 if (nmod_mat_ncols (FLINTN) < oldNumCols - factorsFound) 3984 { 3985 if (isReduced (FLINTN)) 3986 { 3987 int * factorsFoundIndex= new int [nmod_mat_ncols (FLINTN)]; 3988 for (long i= 0; i < nmod_mat_ncols (FLINTN); i++) 3989 #else 3834 3990 if (NTLN.NumCols() < oldNumCols - factorsFound) 3835 3991 { … … 3838 3994 int * factorsFoundIndex= new int [NTLN.NumCols()]; 3839 3995 for (long i= 0; i < NTLN.NumCols(); i++) 3996 #endif 3840 3997 factorsFoundIndex[i]= 0; 3841 3998 int factorsFound2= 0; 3842 3999 CFList result; 3843 4000 CanonicalForm bufF= F; 4001 #ifdef HAVE_FLINT 4002 extReconstructionTry (result, bufF, factors,degree (F)+1, factorsFound2, 4003 factorsFoundIndex, FLINTN, false, info, evaluation 4004 ); 4005 if (result.length() == nmod_mat_ncols (FLINTN)) 4006 { 4007 nmod_mat_clear (FLINTN); 4008 #else 3844 4009 extReconstructionTry (result, bufF, factors,degree (F)+1, factorsFound2, 3845 4010 factorsFoundIndex, NTLN, false, info, evaluation … … 3847 4012 if (result.length() == NTLN.NumCols()) 3848 4013 { 4014 #endif 3849 4015 delete [] factorsFoundIndex; 3850 4016 delete [] A; … … 3858 4024 { 3859 4025 CanonicalForm bufF= F; 4026 #ifdef HAVE_FLINT 4027 int * zeroOne= extractZeroOneVecs (FLINTN); 4028 CFList result= extReconstruction (bufF, factors, zeroOne, precision, 4029 FLINTN, info, evaluation 4030 ); 4031 nmod_mat_clear (FLINTN); 4032 #else 3860 4033 int * zeroOne= extractZeroOneVecs (NTLN); 3861 4034 CFList result= extReconstruction (bufF, factors, zeroOne, precision, 3862 4035 NTLN, info, evaluation 3863 4036 ); 4037 #endif 3864 4038 F= bufF; 3865 4039 delete [] zeroOne; … … 3883 4057 } 3884 4058 } 4059 4060 #ifdef HAVE_FLINT 4061 nmod_mat_clear (FLINTN); 4062 #endif 3885 4063 delete [] bounds; 3886 4064 delete [] A; … … 4500 4678 4501 4679 //over field extension 4680 #ifdef HAVE_FLINT 4681 CFList 4682 extIncreasePrecision (CanonicalForm& F, CFList& factors, int oldL, int l, int d, 4683 int* bounds, CFArray& bufQ, nmod_mat_t FLINTN, const 4684 CanonicalForm& evaluation, const ExtensionInfo& info, 4685 CFList& source, CFList& dest 4686 ) 4687 #else 4502 4688 CFList 4503 4689 extIncreasePrecision (CanonicalForm& F, CFList& factors, int oldL, int l, int d, … … 4506 4692 CFList& source, CFList& dest 4507 4693 ) 4694 #endif 4508 4695 { 4509 4696 CFList result= CFList(); … … 4519 4706 CanonicalForm primElemAlpha= info.getGamma(); 4520 4707 CanonicalForm imPrimElemAlpha= info.getDelta(); 4708 #ifdef HAVE_FLINT 4709 nmod_mat_clear (FLINTN); 4710 nmod_mat_init (FLINTN,factors.length(),factors.length(), getCharacteristic()); 4711 for (long i=factors.length()-1; i >= 0; i--) 4712 nmod_mat_entry (FLINTN, i, i)= 1; 4713 #else 4521 4714 if (NTLN.NumRows() != factors.length()) //refined factors 4522 4715 ident (NTLN, factors.length()); 4716 #endif 4523 4717 Variable y= F.mvar(); 4524 4718 CFListIterator j; … … 4526 4720 CFMatrix Mat, C; 4527 4721 CFIterator iter; 4528 mat_zz_p* NTLMat;4529 4722 CFArray buf; 4530 mat_zz_p* NTLC, NTLK; 4723 #ifdef HAVE_FLINT 4724 long rank; 4725 nmod_mat_t FLINTMat, FLINTMatInv, FLINTC, FLINTK, null; 4726 #else 4727 mat_zz_p* NTLC, NTLK, *NTLMat; 4728 #endif 4531 4729 CFList bufUniFactors; 4532 4730 while (oldL <= l) … … 4548 4746 } 4549 4747 4748 #ifdef HAVE_FLINT 4749 convertFacCFMatrix2nmod_mat_t (FLINTMat, Mat); 4750 nmod_mat_init (FLINTMatInv, nmod_mat_nrows (FLINTMat), 4751 nmod_mat_nrows (FLINTMat), getCharacteristic()); 4752 nmod_mat_inv (FLINTMatInv, FLINTMat); 4753 #else 4550 4754 NTLMat= convertFacCFMatrix2NTLmat_zz_p (Mat); 4551 4755 *NTLMat= inv (*NTLMat); 4756 #endif 4757 4552 4758 if (GF) 4553 4759 setCharacteristic (getCharacteristic(), degMipo, info.getGFName()); … … 4586 4792 gamma, source, dest 4587 4793 ); 4794 #ifdef HAVE_FLINT 4795 buf= getCoeffs (A[ii] [i], k, oldL, degMipo, gamma, 0, FLINTMatInv); 4796 #else 4588 4797 buf= getCoeffs (A[ii] [i], k, oldL, degMipo, gamma, 0, *NTLMat); 4798 #endif 4589 4799 } 4590 4800 else … … 4595 4805 gamma, source, dest 4596 4806 ); 4807 #ifdef HAVE_FLINT 4808 buf= getCoeffs (A[ii] [i], k, oldL, degMipo, gamma, 0, FLINTMatInv); 4809 #else 4597 4810 buf= getCoeffs (A[ii] [i], k, oldL, degMipo, gamma, 0, *NTLMat); 4811 #endif 4598 4812 } 4599 4813 writeInMatrix (C, buf, ii + 1, 0); … … 4606 4820 setCharacteristic(getCharacteristic()); 4607 4821 4822 #ifdef HAVE_FLINT 4823 convertFacCFMatrix2nmod_mat_t (FLINTC, C); 4824 nmod_mat_init (FLINTK, nmod_mat_nrows (FLINTC), nmod_mat_ncols (FLINTN), 4825 getCharacteristic()); 4826 nmod_mat_mul (FLINTK, FLINTC, FLINTN); 4827 nmod_mat_init (null, nmod_mat_ncols (FLINTK), nmod_mat_ncols (FLINTK), 4828 getCharacteristic()); 4829 rank= nmod_mat_nullspace (null, FLINTK); 4830 nmod_mat_clear (FLINTK); 4831 nmod_mat_window_init (FLINTK, null, 0, 0, nmod_mat_nrows(null), rank); 4832 nmod_mat_clear (FLINTC); 4833 nmod_mat_init_set (FLINTC, FLINTN); 4834 nmod_mat_clear (FLINTN); 4835 nmod_mat_init (FLINTN, nmod_mat_nrows (FLINTC), nmod_mat_ncols (FLINTK), 4836 getCharacteristic()); 4837 nmod_mat_mul (FLINTN, FLINTC, FLINTK); //no aliasing allowed!! 4838 4839 nmod_mat_clear (FLINTC); 4840 nmod_mat_window_clear (FLINTK); 4841 nmod_mat_clear (null); 4842 #else 4608 4843 NTLC= convertFacCFMatrix2NTLmat_zz_p(C); 4609 4844 NTLK= (*NTLC)*NTLN; … … 4613 4848 NTLN *= NTLK; 4614 4849 delete NTLC; 4850 #endif 4615 4851 4616 4852 if (GF) 4617 4853 setCharacteristic (getCharacteristic(), degMipo, info.getGFName()); 4618 4854 4855 #ifdef HAVE_FLINT 4856 if (nmod_mat_ncols (FLINTN) == 1) 4857 { 4858 nmod_mat_clear (FLINTMat); 4859 nmod_mat_clear (FLINTMatInv); 4860 #else 4619 4861 if (NTLN.NumCols() == 1) 4620 4862 { 4863 delete NTLMat; 4864 #endif 4621 4865 Variable y= Variable (2); 4622 4866 CanonicalForm tmp= F (y - evaluation, y); … … 4624 4868 tmp= mapDown (tmp, info, source, dest); 4625 4869 delete [] A; 4626 delete NTLMat;4627 4870 return CFList (tmp); 4628 4871 } … … 4630 4873 } 4631 4874 4875 #ifdef HAVE_FLINT 4876 nmod_mat_clear (FLINTMat); 4877 nmod_mat_clear (FLINTMatInv); 4878 #else 4632 4879 delete NTLMat; 4633 4880 #endif 4881 4882 #ifdef HAVE_FLINT 4883 if (nmod_mat_ncols (FLINTN) == 1) 4884 #else 4634 4885 if (NTLN.NumCols() == 1) 4886 #endif 4635 4887 { 4636 4888 Variable y= Variable (2); … … 4643 4895 4644 4896 int * zeroOneVecs; 4645 zeroOneVecs= extractZeroOneVecs (NTLN);4646 4897 bufF= F; 4647 4898 bufUniFactors= factors; 4899 #ifdef HAVE_FLINT 4900 zeroOneVecs= extractZeroOneVecs (FLINTN); 4901 result= extReconstruction (bufF, bufUniFactors, zeroOneVecs, oldL, FLINTN, 4902 info, evaluation 4903 ); 4904 #else 4905 zeroOneVecs= extractZeroOneVecs (NTLN); 4648 4906 result= extReconstruction (bufF, bufUniFactors, zeroOneVecs, oldL, NTLN, 4649 4907 info, evaluation 4650 4908 ); 4909 #endif 4651 4910 delete [] zeroOneVecs; 4652 4911 if (degree (bufF) + 1 + degree (LC (bufF, 1)) < l && result.length() > 0) … … 5200 5459 5201 5460 //over field extension 5461 #ifdef HAVE_FLINT 5462 CFList 5463 extFurtherLiftingAndIncreasePrecision (CanonicalForm& F, CFList& factors, int l, 5464 int liftBound, int d, int* bounds, 5465 nmod_mat_t FLINTN, CFList& diophant, 5466 CFMatrix& M, CFArray& Pi, CFArray& bufQ, 5467 const CanonicalForm& evaluation, const 5468 ExtensionInfo& info, CFList& source, 5469 CFList& dest 5470 ) 5471 #else 5202 5472 CFList 5203 5473 extFurtherLiftingAndIncreasePrecision (CanonicalForm& F, CFList& factors, int l, … … 5209 5479 CFList& dest 5210 5480 ) 5481 #endif 5211 5482 { 5212 5483 CanonicalForm LCF= LC (F, 1); … … 5226 5497 CanonicalForm primElemAlpha= info.getGamma(); 5227 5498 CanonicalForm imPrimElemAlpha= info.getDelta(); 5499 #ifdef HAVE_FLINT 5500 nmod_mat_clear (FLINTN); 5501 nmod_mat_init (FLINTN,factors.length(),factors.length(), getCharacteristic()); 5502 for (long i=factors.length()-1; i >= 0; i--) 5503 nmod_mat_entry (FLINTN, i, i)= 1; 5504 #else 5228 5505 if (NTLN.NumRows() != factors.length()) //refined factors 5229 5506 ident (NTLN, factors.length()); 5507 #endif 5230 5508 Variable y= F.mvar(); 5231 5509 CanonicalForm powX, imBasis, bufF, truncF; 5232 5510 CFMatrix Mat, C; 5233 5511 CFIterator iter; 5512 #ifdef HAVE_FLINT 5513 long rank; 5514 nmod_mat_t FLINTMat, FLINTMatInv, FLINTC, FLINTK, null; 5515 #else 5234 5516 mat_zz_p* NTLMat,*NTLC, NTLK; 5517 #endif 5235 5518 CFListIterator j; 5236 5519 CFArray buf; … … 5256 5539 } 5257 5540 5541 #ifdef HAVE_FLINT 5542 convertFacCFMatrix2nmod_mat_t (FLINTMat, Mat); 5543 nmod_mat_init (FLINTMatInv, nmod_mat_nrows (FLINTMat), 5544 nmod_mat_nrows (FLINTMat), getCharacteristic()); 5545 nmod_mat_inv (FLINTMatInv, FLINTMat); 5546 #else 5258 5547 NTLMat= convertFacCFMatrix2NTLmat_zz_p (Mat); 5259 5548 *NTLMat= inv (*NTLMat); 5549 #endif 5260 5550 5261 5551 if (GF) … … 5294 5584 gamma, source, dest 5295 5585 ); 5586 #ifdef HAVE_FLINT 5587 buf= getCoeffs (A[ii] [i], k, l, degMipo, gamma, 0, FLINTMatInv); 5588 #else 5296 5589 buf= getCoeffs (A[ii] [i], k, l, degMipo, gamma, 0, *NTLMat); 5590 #endif 5297 5591 } 5298 5592 else … … 5303 5597 gamma, source, dest 5304 5598 ); 5599 #ifdef HAVE_FLINT 5600 buf= getCoeffs (A[ii] [i], k, l, degMipo, gamma, 0, FLINTMatInv); 5601 #else 5305 5602 buf= getCoeffs (A[ii] [i], k, l, degMipo, gamma, 0, *NTLMat); 5603 #endif 5306 5604 } 5307 5605 writeInMatrix (C, buf, ii + 1, 0); … … 5313 5611 if (GF) 5314 5612 setCharacteristic(getCharacteristic()); 5315 NTLC= convertFacCFMatrix2NTLmat_zz_p(C); 5316 NTLK= (*NTLC)*NTLN; 5317 transpose (NTLK, NTLK); 5318 kernel (NTLK, NTLK); 5319 transpose (NTLK, NTLK); 5320 NTLN *= NTLK; 5321 delete NTLC; 5322 if (GF) 5323 setCharacteristic (getCharacteristic(), degMipo, info.getGFName()); 5324 5325 if (NTLN.NumCols() == 1) 5326 { 5327 irreducible= true; 5328 break; 5329 } 5330 } 5331 } 5332 delete NTLMat; 5333 if (NTLN.NumCols() == 1) 5334 { 5335 irreducible= true; 5336 break; 5337 } 5338 5339 int * zeroOneVecs= extractZeroOneVecs (NTLN); 5340 bufF= F; 5341 result= extReconstruction (bufF, bufFactors, zeroOneVecs, l, NTLN, info, 5342 evaluation 5343 ); 5344 delete [] zeroOneVecs; 5345 if (result.length() > 0 && degree (bufF) + 1 + degree (LC (bufF, 1)) <= l) 5346 { 5347 F= bufF; 5348 factors= bufFactors; 5349 delete [] A; 5350 return result; 5351 } 5352 5353 if (isReduced (NTLN)) 5354 { 5355 int factorsFound= 0; 5356 bufF= F; 5357 int* factorsFoundIndex= new int [NTLN.NumCols()]; 5358 for (long i= 0; i < NTLN.NumCols(); i++) 5359 factorsFoundIndex[i]= 0; 5360 if (l < degree (bufF) + 1 + degree (LCF)) 5361 extReconstructionTry (result, bufF, bufFactors, l, factorsFound, 5362 factorsFoundIndex, NTLN, false, info, evaluation 5363 ); 5364 else 5365 extReconstructionTry (result, bufF, bufFactors, degree (bufF) + 1 + 5366 degree (LCF), factorsFound, factorsFoundIndex, 5367 NTLN, false, info, evaluation 5368 ); 5369 if (NTLN.NumCols() == result.length()) 5370 { 5371 delete [] A; 5372 delete [] factorsFoundIndex; 5373 return result; 5374 } 5375 delete [] factorsFoundIndex; 5376 } 5377 result= CFList(); 5378 oldL= l; 5379 stepSize *= 2; 5380 l += stepSize; 5381 if (l > liftBound) 5382 { 5383 if (!hitBound) 5384 { 5385 l= liftBound; 5386 hitBound= true; 5387 } 5388 else 5389 break; 5390 } 5391 } 5392 if (irreducible) 5393 { 5394 delete [] A; 5395 Variable y= Variable (2); 5396 CanonicalForm tmp= F (y - evaluation, y); 5397 CFList source, dest; 5398 tmp= mapDown (tmp, info, source, dest); 5399 return CFList (tmp); 5400 } 5401 delete [] A; 5402 factors= bufFactors; 5403 return CFList(); 5404 } 5405 5406 #ifdef HAVE_FLINT 5407 CFList 5408 furtherLiftingAndIncreasePrecisionFq2Fp (CanonicalForm& F, CFList& factors, int 5409 l, int liftBound, int d, int* bounds, 5410 nmod_mat_t FLINTN, CFList& diophant, 5411 CFMatrix& M, CFArray& Pi, CFArray& bufQ, 5412 const Variable& alpha, 5413 const CanonicalForm& eval 5414 ) 5415 #else 5416 CFList 5417 furtherLiftingAndIncreasePrecisionFq2Fp (CanonicalForm& F, CFList& factors, int 5418 l, int liftBound, int d, int* bounds, 5419 mat_zz_p& NTLN, CFList& diophant, 5420 CFMatrix& M, CFArray& Pi, CFArray& bufQ, 5421 const Variable& alpha, 5422 const CanonicalForm& eval 5423 ) 5424 #endif 5425 { 5426 CanonicalForm LCF= LC (F, 1); 5427 CFList result; 5428 bool irreducible= false; 5429 CFList bufFactors= factors; 5430 CFArray *A = new CFArray [bufFactors.length()]; 5431 bool useOldQs= false; 5432 int extensionDeg= degree (getMipo (alpha)); 5433 bool hitBound= false; 5434 int oldL= l; 5435 int stepSize= 8; //TODO choose better step size? 5436 l += tmax (tmin (8, degree (F) + 1 + degree (LC (F, 1))-l), 2); 5437 #ifdef HAVE_FLINT 5438 if (nmod_mat_nrows (FLINTN) != factors.length()) //refined factors 5439 { 5440 nmod_mat_clear (FLINTN); 5441 nmod_mat_init(FLINTN,factors.length(),factors.length(),getCharacteristic()); 5442 for (long i=factors.length()-1; i >= 0; i--) 5443 nmod_mat_entry (FLINTN, i, i)= 1; 5444 } 5445 #else 5446 if (NTLN.NumRows() != factors.length()) //refined factors 5447 ident (NTLN, factors.length()); 5448 #endif 5449 CFListIterator j; 5450 CFMatrix C; 5451 #ifdef HAVE_FLINT 5452 long rank; 5453 nmod_mat_t FLINTC, FLINTK, null; 5454 #else 5455 mat_zz_p* NTLC, NTLK; 5456 #endif 5457 CanonicalForm bufF, truncF; 5458 Variable y= F.mvar(); 5459 while (l <= liftBound) 5460 { 5461 bufFactors.insert (LCF); 5462 henselLiftResume12 (F, bufFactors, oldL, l, Pi, diophant, M); 5463 j= bufFactors; 5464 truncF= mod (F, power (y, l)); 5465 if (useOldQs) 5466 { 5467 for (int i= 0; i < bufFactors.length(); i++, j++) 5468 A[i]= logarithmicDerivative (truncF, j.getItem(), l, oldL, bufQ[i], 5469 bufQ[i]); 5470 } 5471 else 5472 { 5473 for (int i= 0; i < bufFactors.length(); i++, j++) 5474 A[i]= logarithmicDerivative (truncF, j.getItem(), l, bufQ [i]); 5475 } 5476 for (int i= 0; i < d; i++) 5477 { 5478 if (bounds [i] + 1 <= l/2) 5479 { 5480 int k= tmin (bounds [i] + 1, l/2); 5481 C= CFMatrix ((l - k)*extensionDeg, bufFactors.length()); 5482 for (int ii= 0; ii < bufFactors.length(); ii++) 5483 { 5484 CFArray buf; 5485 if (A[ii].size() - 1 >= i) 5486 { 5487 buf= getCoeffs (A[ii] [i], k, alpha); 5488 writeInMatrix (C, buf, ii + 1, 0); 5489 } 5490 } 5613 5491 5614 #ifdef HAVE_FLINT 5492 5615 convertFacCFMatrix2nmod_mat_t (FLINTC, C); … … 5518 5641 delete NTLC; 5519 5642 #endif 5643 5644 if (GF) 5645 setCharacteristic (getCharacteristic(), degMipo, info.getGFName()); 5646 5647 #ifdef HAVE_FLINT 5648 if (nmod_mat_ncols (FLINTN) == 1) 5649 #else 5650 if (NTLN.NumCols() == 1) 5651 #endif 5652 { 5653 irreducible= true; 5654 break; 5655 } 5656 } 5657 } 5658 5659 #ifdef HAVE_FLINT 5660 nmod_mat_clear (FLINTMat); 5661 nmod_mat_clear (FLINTMatInv); 5662 if (nmod_mat_ncols (FLINTN) == 1) 5663 #else 5664 delete NTLMat; 5665 if (NTLN.NumCols() == 1) 5666 #endif 5667 { 5668 irreducible= true; 5669 break; 5670 } 5671 5672 bufF= F; 5673 #ifdef HAVE_FLINT 5674 int * zeroOneVecs= extractZeroOneVecs (FLINTN); 5675 result= extReconstruction (bufF, bufFactors, zeroOneVecs, l, FLINTN, info, 5676 evaluation 5677 ); 5678 #else 5679 int * zeroOneVecs= extractZeroOneVecs (NTLN); 5680 result= extReconstruction (bufF, bufFactors, zeroOneVecs, l, NTLN, info, 5681 evaluation 5682 ); 5683 #endif 5684 delete [] zeroOneVecs; 5685 if (result.length() > 0 && degree (bufF) + 1 + degree (LC (bufF, 1)) <= l) 5686 { 5687 F= bufF; 5688 factors= bufFactors; 5689 delete [] A; 5690 return result; 5691 } 5692 5693 #ifdef HAVE_FLINT 5694 if (isReduced (FLINTN)) 5695 #else 5696 if (isReduced (NTLN)) 5697 #endif 5698 { 5699 int factorsFound= 0; 5700 bufF= F; 5701 #ifdef HAVE_FLINT 5702 int* factorsFoundIndex= new int [nmod_mat_ncols (FLINTN)]; 5703 for (long i= 0; i < nmod_mat_ncols (FLINTN); i++) 5704 #else 5705 int* factorsFoundIndex= new int [NTLN.NumCols()]; 5706 for (long i= 0; i < NTLN.NumCols(); i++) 5707 #endif 5708 factorsFoundIndex[i]= 0; 5709 #ifdef HAVE_FLINT 5710 if (l < degree (bufF) + 1 + degree (LCF)) 5711 extReconstructionTry (result, bufF, bufFactors, l, factorsFound, 5712 factorsFoundIndex, FLINTN, false, info, evaluation 5713 ); 5714 else 5715 extReconstructionTry (result, bufF, bufFactors, degree (bufF) + 1 + 5716 degree (LCF), factorsFound, factorsFoundIndex, 5717 FLINTN, false, info, evaluation 5718 ); 5719 if (nmod_mat_ncols (FLINTN) == result.length()) 5720 #else 5721 if (l < degree (bufF) + 1 + degree (LCF)) 5722 extReconstructionTry (result, bufF, bufFactors, l, factorsFound, 5723 factorsFoundIndex, NTLN, false, info, evaluation 5724 ); 5725 else 5726 extReconstructionTry (result, bufF, bufFactors, degree (bufF) + 1 + 5727 degree (LCF), factorsFound, factorsFoundIndex, 5728 NTLN, false, info, evaluation 5729 ); 5730 if (NTLN.NumCols() == result.length()) 5731 #endif 5732 { 5733 delete [] A; 5734 delete [] factorsFoundIndex; 5735 return result; 5736 } 5737 delete [] factorsFoundIndex; 5738 } 5739 result= CFList(); 5740 oldL= l; 5741 stepSize *= 2; 5742 l += stepSize; 5743 if (l > liftBound) 5744 { 5745 if (!hitBound) 5746 { 5747 l= liftBound; 5748 hitBound= true; 5749 } 5750 else 5751 break; 5752 } 5753 } 5754 if (irreducible) 5755 { 5756 delete [] A; 5757 Variable y= Variable (2); 5758 CanonicalForm tmp= F (y - evaluation, y); 5759 CFList source, dest; 5760 tmp= mapDown (tmp, info, source, dest); 5761 return CFList (tmp); 5762 } 5763 delete [] A; 5764 factors= bufFactors; 5765 return CFList(); 5766 } 5767 5768 #ifdef HAVE_FLINT 5769 CFList 5770 furtherLiftingAndIncreasePrecisionFq2Fp (CanonicalForm& F, CFList& factors, int 5771 l, int liftBound, int d, int* bounds, 5772 nmod_mat_t FLINTN, CFList& diophant, 5773 CFMatrix& M, CFArray& Pi, CFArray& bufQ, 5774 const Variable& alpha, 5775 const CanonicalForm& eval 5776 ) 5777 #else 5778 CFList 5779 furtherLiftingAndIncreasePrecisionFq2Fp (CanonicalForm& F, CFList& factors, int 5780 l, int liftBound, int d, int* bounds, 5781 mat_zz_p& NTLN, CFList& diophant, 5782 CFMatrix& M, CFArray& Pi, CFArray& bufQ, 5783 const Variable& alpha, 5784 const CanonicalForm& eval 5785 ) 5786 #endif 5787 { 5788 CanonicalForm LCF= LC (F, 1); 5789 CFList result; 5790 bool irreducible= false; 5791 CFList bufFactors= factors; 5792 CFArray *A = new CFArray [bufFactors.length()]; 5793 bool useOldQs= false; 5794 int extensionDeg= degree (getMipo (alpha)); 5795 bool hitBound= false; 5796 int oldL= l; 5797 int stepSize= 8; //TODO choose better step size? 5798 l += tmax (tmin (8, degree (F) + 1 + degree (LC (F, 1))-l), 2); 5799 #ifdef HAVE_FLINT 5800 if (nmod_mat_nrows (FLINTN) != factors.length()) //refined factors 5801 { 5802 nmod_mat_clear (FLINTN); 5803 nmod_mat_init(FLINTN,factors.length(),factors.length(),getCharacteristic()); 5804 for (long i=factors.length()-1; i >= 0; i--) 5805 nmod_mat_entry (FLINTN, i, i)= 1; 5806 } 5807 #else 5808 if (NTLN.NumRows() != factors.length()) //refined factors 5809 ident (NTLN, factors.length()); 5810 #endif 5811 CFListIterator j; 5812 CFMatrix C; 5813 #ifdef HAVE_FLINT 5814 long rank; 5815 nmod_mat_t FLINTC, FLINTK, null; 5816 #else 5817 mat_zz_p* NTLC, NTLK; 5818 #endif 5819 CanonicalForm bufF, truncF; 5820 Variable y= F.mvar(); 5821 while (l <= liftBound) 5822 { 5823 bufFactors.insert (LCF); 5824 henselLiftResume12 (F, bufFactors, oldL, l, Pi, diophant, M); 5825 j= bufFactors; 5826 truncF= mod (F, power (y, l)); 5827 if (useOldQs) 5828 { 5829 for (int i= 0; i < bufFactors.length(); i++, j++) 5830 A[i]= logarithmicDerivative (truncF, j.getItem(), l, oldL, bufQ[i], 5831 bufQ[i]); 5832 } 5833 else 5834 { 5835 for (int i= 0; i < bufFactors.length(); i++, j++) 5836 A[i]= logarithmicDerivative (truncF, j.getItem(), l, bufQ [i]); 5837 } 5838 for (int i= 0; i < d; i++) 5839 { 5840 if (bounds [i] + 1 <= l/2) 5841 { 5842 int k= tmin (bounds [i] + 1, l/2); 5843 C= CFMatrix ((l - k)*extensionDeg, bufFactors.length()); 5844 for (int ii= 0; ii < bufFactors.length(); ii++) 5845 { 5846 CFArray buf; 5847 if (A[ii].size() - 1 >= i) 5848 { 5849 buf= getCoeffs (A[ii] [i], k, alpha); 5850 writeInMatrix (C, buf, ii + 1, 0); 5851 } 5852 } 5853 #ifdef HAVE_FLINT 5854 convertFacCFMatrix2nmod_mat_t (FLINTC, C); 5855 nmod_mat_init (FLINTK, nmod_mat_nrows (FLINTC), nmod_mat_ncols (FLINTN), 5856 getCharacteristic()); 5857 nmod_mat_mul (FLINTK, FLINTC, FLINTN); 5858 nmod_mat_init (null, nmod_mat_ncols (FLINTK), nmod_mat_ncols (FLINTK), 5859 getCharacteristic()); 5860 rank= nmod_mat_nullspace (null, FLINTK); 5861 nmod_mat_clear (FLINTK); 5862 nmod_mat_window_init (FLINTK, null, 0, 0, nmod_mat_nrows(null), rank); 5863 nmod_mat_clear (FLINTC); 5864 nmod_mat_init_set (FLINTC, FLINTN); 5865 nmod_mat_clear (FLINTN); 5866 nmod_mat_init (FLINTN, nmod_mat_nrows (FLINTC), nmod_mat_ncols (FLINTK), 5867 getCharacteristic()); 5868 nmod_mat_mul (FLINTN, FLINTC, FLINTK); //no aliasing allowed!! 5869 5870 nmod_mat_clear (FLINTC); 5871 nmod_mat_window_clear (FLINTK); 5872 nmod_mat_clear (null); 5873 #else 5874 NTLC= convertFacCFMatrix2NTLmat_zz_p(C); 5875 NTLK= (*NTLC)*NTLN; 5876 transpose (NTLK, NTLK); 5877 kernel (NTLK, NTLK); 5878 transpose (NTLK, NTLK); 5879 NTLN *= NTLK; 5880 delete NTLC; 5881 #endif 5520 5882 #ifdef HAVE_FLINT 5521 5883 if (nmod_mat_ncols (FLINTN) == 1) … … 5630 5992 } 5631 5993 5994 #ifndef HAVE_FLINT 5632 5995 void 5633 5996 refineAndRestartLift (const CanonicalForm& F, const mat_zz_p& NTLN, int … … 5659 6022 henselLift12 (F, factors, l, Pi, diophant, M); 5660 6023 } 6024 #endif 5661 6025 5662 6026 #ifdef HAVE_FLINT … … 6094 6458 6095 6459 //over field extension 6460 #ifdef HAVE_FLINT 6461 CFList 6462 extEarlyReconstructionAndLifting (const CanonicalForm& F, const nmod_mat_t N, 6463 CanonicalForm& bufF, CFList& factors, int& l, 6464 int& factorsFound, bool beenInThres, CFMatrix& 6465 M, CFArray& Pi, CFList& diophant, const 6466 ExtensionInfo& info, const CanonicalForm& 6467 evaluation 6468 ) 6469 #else 6096 6470 CFList 6097 6471 extEarlyReconstructionAndLifting (const CanonicalForm& F, const mat_zz_p& N, … … 6102 6476 evaluation 6103 6477 ) 6478 #endif 6104 6479 { 6105 6480 int sizeOfLiftPre; … … 6110 6485 CFList result; 6111 6486 int smallFactorDeg= 11; 6487 #ifdef HAVE_FLINT 6488 nmod_mat_t FLINTN; 6489 nmod_mat_init_set (FLINTN, N); 6490 int * factorsFoundIndex= new int [nmod_mat_ncols (FLINTN)]; 6491 for (long i= 0; i < nmod_mat_ncols (FLINTN); i++) 6492 #else 6112 6493 mat_zz_p NTLN= N; 6113 6494 int * factorsFoundIndex= new int [NTLN.NumCols()]; 6114 6495 for (long i= 0; i < NTLN.NumCols(); i++) 6496 #endif 6115 6497 factorsFoundIndex [i]= 0; 6116 6498 … … 6126 6508 } 6127 6509 TIMING_START (fac_fq_reconstruction); 6510 #ifdef HAVE_FLINT 6511 extReconstructionTry (result, bufF, factors, smallFactorDeg, factorsFound, 6512 factorsFoundIndex, FLINTN, beenInThres, info, 6513 evaluation 6514 ); 6515 #else 6128 6516 extReconstructionTry (result, bufF, factors, smallFactorDeg, factorsFound, 6129 6517 factorsFoundIndex, NTLN, beenInThres, info, 6130 6518 evaluation 6131 6519 ); 6520 #endif 6132 6521 TIMING_END_AND_PRINT (fac_fq_reconstruction, "time to reconstruct0: "); 6522 #ifdef HAVE_FLINT 6523 if (result.length() == nmod_mat_ncols (FLINTN)) 6524 { 6525 nmod_mat_clear (FLINTN); 6526 #else 6133 6527 if (result.length() == NTLN.NumCols()) 6134 6528 { 6529 #endif 6135 6530 delete [] liftPre; 6136 6531 delete [] factorsFoundIndex; … … 6160 6555 } 6161 6556 TIMING_START (fac_fq_reconstruction); 6557 #ifdef HAVE_FLINT 6558 extReconstructionTry (result, bufF, factors, l, factorsFound, 6559 factorsFoundIndex, FLINTN, beenInThres, info, 6560 evaluation 6561 ); 6562 #else 6162 6563 extReconstructionTry (result, bufF, factors, l, factorsFound, 6163 6564 factorsFoundIndex, NTLN, beenInThres, info, 6164 6565 evaluation 6165 6566 ); 6567 #endif 6166 6568 TIMING_END_AND_PRINT (fac_fq_reconstruction, "time to reconstruct1: "); 6569 #ifdef HAVE_FLINT 6570 if (result.length() == nmod_mat_ncols (FLINTN)) 6571 { 6572 nmod_mat_clear (FLINTN); 6573 #else 6167 6574 if (result.length() == NTLN.NumCols()) 6168 6575 { 6576 #endif 6169 6577 delete [] liftPre; 6170 6578 delete [] factorsFoundIndex; … … 6197 6605 } 6198 6606 TIMING_START (fac_fq_reconstruction); 6607 #ifdef HAVE_FLINT 6608 extReconstructionTry (result, bufF, factors, l, factorsFound, 6609 factorsFoundIndex, FLINTN, beenInThres, info, 6610 evaluation 6611 ); 6612 #else 6199 6613 extReconstructionTry (result, bufF, factors, l, factorsFound, 6200 6614 factorsFoundIndex, NTLN, beenInThres, info, 6201 6615 evaluation 6202 6616 ); 6617 #endif 6203 6618 TIMING_END_AND_PRINT (fac_fq_reconstruction, "time to reconstruct2: "); 6619 #ifdef HAVE_FLINT 6620 if (result.length() == nmod_mat_ncols (FLINTN)) 6621 { 6622 nmod_mat_clear (FLINTN); 6623 #else 6204 6624 if (result.length() == NTLN.NumCols()) 6205 6625 { 6626 #endif 6206 6627 delete [] liftPre; 6207 6628 delete [] factorsFoundIndex; … … 6212 6633 } 6213 6634 6635 #ifdef HAVE_FLINT 6636 nmod_mat_clear (FLINTN); 6637 #endif 6214 6638 delete [] liftPre; 6215 6639 delete [] factorsFoundIndex; … … 7302 7726 int l= 1; 7303 7727 7728 #ifdef HAVE_FLINT 7729 nmod_mat_t FLINTN; 7730 nmod_mat_init (FLINTN, bufUniFactors.length()-1, bufUniFactors.length()-1, 7731 getCharacteristic()); 7732 for (long i= bufUniFactors.length()-2; i >= 0; i--) 7733 nmod_mat_entry (FLINTN, i, i)= 1; 7734 #else 7304 7735 if (fac_NTL_char != getCharacteristic()) 7305 7736 { … … 7311 7742 7312 7743 ident (NTLN, bufUniFactors.length() - 1); 7744 #endif 7313 7745 bool irreducible= false; 7314 7746 CFArray bufQ= CFArray (bufUniFactors.length() - 1); … … 7319 7751 { 7320 7752 int start= 0; 7753 #ifdef HAVE_FLINT 7754 oldL= extLiftAndComputeLattice (F, bounds, d, liftBound, minBound, start, 7755 bufUniFactors, FLINTN, diophant,M, Pi, bufQ, 7756 irreducible, evaluation, info2, source, dest 7757 ); 7758 #else 7321 7759 oldL= extLiftAndComputeLattice (F, bounds, d, liftBound, minBound, start, 7322 7760 bufUniFactors, NTLN, diophant, M, Pi, bufQ, 7323 7761 irreducible, evaluation, info2, source, dest 7324 7762 ); 7763 #endif 7325 7764 } 7326 7765 else 7327 7766 { 7767 #ifdef HAVE_FLINT 7768 oldL= extLiftAndComputeLattice (F, bounds, d, liftBound, minBound, 7769 minBound+1, bufUniFactors, FLINTN, diophant, 7770 M, Pi, bufQ, irreducible, evaluation, info2, 7771 source, dest 7772 ); 7773 #else 7328 7774 oldL= extLiftAndComputeLattice (F, bounds, d, liftBound, minBound, 7329 7775 minBound + 1, bufUniFactors, NTLN, diophant, … … 7331 7777 source, dest 7332 7778 ); 7779 #endif 7333 7780 } 7334 7781 TIMING_END_AND_PRINT (fac_fq_till_reduced, … … 7338 7785 if (oldL > liftBound) 7339 7786 { 7787 #ifdef HAVE_FLINT 7788 nmod_mat_clear (FLINTN); 7789 #endif 7340 7790 delete [] bounds; 7341 7791 return Union (smallFactors, extFactorRecombination … … 7350 7800 if (irreducible) 7351 7801 { 7802 #ifdef HAVE_FLINT 7803 nmod_mat_clear (FLINTN); 7804 #endif 7352 7805 delete [] bounds; 7353 7806 CFList source, dest; … … 7364 7817 int * factorsFoundIndex; 7365 7818 7819 #ifdef HAVE_FLINT 7820 factorsFoundIndex= new int [nmod_mat_ncols (FLINTN)]; 7821 for (long i= 0; i < nmod_mat_ncols (FLINTN); i++) 7822 #else 7366 7823 factorsFoundIndex= new int [NTLN.NumCols()]; 7367 7824 for (long i= 0; i < NTLN.NumCols(); i++) 7825 #endif 7368 7826 factorsFoundIndex[i]= 0; 7369 7827 … … 7371 7829 CanonicalForm bufF= F; 7372 7830 7831 #ifdef HAVE_FLINT 7832 extReconstructionTry (result, bufF, bufUniFactors, degree (F) + 1, 7833 factorsFound, factorsFoundIndex, FLINTN, false, info, 7834 evaluation 7835 ); 7836 7837 if (result.length() == nmod_mat_ncols (FLINTN)) 7838 { 7839 nmod_mat_clear (FLINTN); 7840 #else 7373 7841 extReconstructionTry (result, bufF, bufUniFactors, degree (F) + 1, 7374 7842 factorsFound, factorsFoundIndex, NTLN, false, info, … … 7378 7846 if (result.length() == NTLN.NumCols()) 7379 7847 { 7848 #endif 7380 7849 delete [] factorsFoundIndex; 7381 7850 delete [] bounds; … … 7388 7857 { 7389 7858 int * factorsFoundIndex; 7859 #ifdef HAVE_FLINT 7860 factorsFoundIndex= new int [nmod_mat_ncols (FLINTN)]; 7861 for (long i= 0; i < nmod_mat_ncols (FLINTN); i++) 7862 #else 7390 7863 factorsFoundIndex= new int [NTLN.NumCols()]; 7391 7864 for (long i= 0; i < NTLN.NumCols(); i++) 7865 #endif 7392 7866 factorsFoundIndex[i]= 0; 7393 7867 CanonicalForm bufF= F; 7394 7868 int factorsFound= 0; 7395 7869 7870 #ifdef HAVE_FLINT 7871 extReconstructionTry (result, bufF, bufUniFactors, degree (F) + 1, 7872 factorsFound, factorsFoundIndex, FLINTN, false, 7873 info, evaluation 7874 ); 7875 7876 if (result.length() == nmod_mat_ncols (FLINTN)) 7877 { 7878 nmod_mat_clear (FLINTN); 7879 #else 7396 7880 extReconstructionTry (result, bufF, bufUniFactors, degree (F) + 1, 7397 7881 factorsFound, factorsFoundIndex, NTLN, false, … … 7401 7885 if (result.length() == NTLN.NumCols()) 7402 7886 { 7887 #endif 7403 7888 delete [] factorsFoundIndex; 7404 7889 delete [] bounds; … … 7411 7896 bool beenInThres= false; 7412 7897 int thres= 100; 7898 #ifdef HAVE_FLINT 7899 if (l <= thres && bufUniFactors.length() > nmod_mat_ncols (FLINTN)) 7900 { 7901 refineAndRestartLift (F, FLINTN, 2*totaldegree (F)-1, l, bufUniFactors, M, Pi, 7902 diophant 7903 ); 7904 #else 7413 7905 if (l <= thres && bufUniFactors.length() > NTLN.NumCols()) 7414 7906 { … … 7416 7908 diophant 7417 7909 ); 7910 #endif 7418 7911 beenInThres= true; 7419 7912 } … … 7423 7916 int factorsFound= 0; 7424 7917 7918 #ifdef HAVE_FLINT 7919 result= extEarlyReconstructionAndLifting (F, FLINTN, bufF, bufUniFactors, l, 7920 factorsFound, beenInThres, M, Pi, 7921 diophant, info, evaluation 7922 ); 7923 7924 if (result.length() == nmod_mat_ncols (FLINTN)) 7925 { 7926 nmod_mat_clear (FLINTN); 7927 #else 7425 7928 result= extEarlyReconstructionAndLifting (F, NTLN, bufF, bufUniFactors, l, 7426 7929 factorsFound, beenInThres, M, Pi, … … 7430 7933 if (result.length() == NTLN.NumCols()) 7431 7934 { 7935 #endif 7432 7936 delete [] bounds; 7433 7937 return Union (result, smallFactors); … … 7459 7963 else 7460 7964 { 7965 #ifdef HAVE_FLINT 7966 int * zeroOne= extractZeroOneVecs (FLINTN); 7967 #else 7461 7968 int * zeroOne= extractZeroOneVecs (NTLN); 7969 #endif 7462 7970 CFList bufBufUniFactors= bufUniFactors; 7463 7971 CFListIterator iter, iter2; 7464 7972 CanonicalForm buf; 7465 7973 CFList factorsConsidered; 7974 #ifdef HAVE_FLINT 7975 for (int i= 0; i < nmod_mat_ncols (FLINTN); i++) 7976 #else 7466 7977 for (int i= 0; i < NTLN.NumCols(); i++) 7978 #endif 7467 7979 { 7468 7980 if (zeroOne [i] == 0) … … 7471 7983 buf= 1; 7472 7984 factorsConsidered= CFList(); 7985 #ifdef HAVE_FLINT 7986 for (int j= 0; j < nmod_mat_nrows (FLINTN); j++, iter++) 7987 { 7988 if (!(nmod_mat_entry (FLINTN, j, i) == 0)) 7989 #else 7473 7990 for (int j= 0; j < NTLN.NumRows(); j++, iter++) 7474 7991 { 7475 7992 if (!IsZero (NTLN (j + 1,i + 1))) 7993 #endif 7476 7994 { 7477 7995 factorsConsidered.append (iter.getItem()); … … 7499 8017 irreducible= false; 7500 8018 8019 #ifdef HAVE_FLINT //TODO 8020 oldNumCols= nmod_mat_ncols (FLINTN); 8021 resultBufF= extIncreasePrecision (bufF, bufUniFactors, factorsFound, 8022 oldNumCols, oldL, evaluation, info2, 8023 source, dest, l 8024 ); 8025 nmod_mat_clear (FLINTN); 8026 #else 7501 8027 oldNumCols= NTLN.NumCols(); 7502 8028 resultBufF= extIncreasePrecision (bufF, bufUniFactors, factorsFound, … … 7504 8030 source, dest, l 7505 8031 ); 7506 8032 #endif 7507 8033 if (bufUniFactors.isEmpty() || degree (bufF) <= 0) 7508 8034 { … … 7537 8063 if (l/degMipo < liftBound) 7538 8064 { 8065 #ifdef HAVE_FLINT 8066 result=extIncreasePrecision (F, bufUniFactors, oldL, l, d, bounds, bufQ, 8067 FLINTN, evaluation, info2, source, dest 8068 ); 8069 8070 if (result.length()== nmod_mat_ncols (FLINTN)) 8071 { 8072 nmod_mat_clear (FLINTN); 8073 #else 7539 8074 result=extIncreasePrecision (F, bufUniFactors, oldL, l, d, bounds, bufQ, 7540 8075 NTLN, evaluation, info2, source, dest … … 7543 8078 if (result.length()== NTLN.NumCols()) 7544 8079 { 8080 #endif 7545 8081 delete [] bounds; 7546 8082 result= Union (result, smallFactors); … … 7550 8086 if (result.isEmpty()) 7551 8087 { 8088 #ifdef HAVE_FLINT 8089 result= extFurtherLiftingAndIncreasePrecision (F,bufUniFactors, l, 8090 liftBound, d,bounds,FLINTN, 8091 diophant, M, Pi, bufQ, 8092 evaluation, info2, source, 8093 dest 8094 ); 8095 if (result.length()== nmod_mat_ncols (FLINTN)) 8096 { 8097 nmod_mat_clear (FLINTN); 8098 #else 7552 8099 result= extFurtherLiftingAndIncreasePrecision (F,bufUniFactors, l, 7553 8100 liftBound, d, bounds, NTLN, … … 7558 8105 if (result.length()== NTLN.NumCols()) 7559 8106 { 8107 #endif 7560 8108 delete [] bounds; 7561 8109 result= Union (result, smallFactors); … … 7564 8112 } 7565 8113 } 8114 8115 #ifdef HAVE_FLINT 8116 nmod_mat_clear (FLINTN); 8117 #endif 7566 8118 7567 8119 DEBOUTLN (cerr, "lattice recombination failed"); -
factory/facFqBivarUtil.cc
re82b5f2 r0b7a8a6 31 31 #include "facHensel.h" 32 32 #include "facMul.h" 33 34 #ifdef HAVE_FLINT 35 #include "FLINTconvert.h" 36 #endif 33 37 34 38 TIMING_DEFINE_PRINT(fac_log_deriv_div) … … 698 702 #endif 699 703 704 #ifdef HAVE_FLINT 705 CFArray 706 getCoeffs (const CanonicalForm& G, const int k, const int l, const int degMipo, 707 const Variable& alpha, const CanonicalForm& evaluation, 708 const nmod_mat_t M) 709 { 710 ASSERT (G.isUnivariate() || G.inCoeffDomain(), "univariate input expected"); 711 CanonicalForm F= G (G.mvar() - evaluation, G.mvar()); 712 if (F.isZero()) 713 return CFArray (); 714 715 Variable y= Variable (2); 716 F= F (power (y, degMipo), y); 717 F= F (y, alpha); 718 719 nmod_poly_t FLINTF; 720 nmod_mat_t MFLINTF, mulResult; 721 nmod_mat_init (MFLINTF, l*degMipo, 1, getCharacteristic()); 722 nmod_mat_init (mulResult, l*degMipo, 1, getCharacteristic()); 723 724 convertFacCF2nmod_poly_t (FLINTF, F); 725 726 #ifndef slong 727 #define slong long 728 #endif 729 slong i; 730 731 for (i= 0; i < FLINTF->length; i++) 732 nmod_mat_entry (MFLINTF, i, 0)= FLINTF->coeffs[i]; 733 734 for (; i < MFLINTF->r; i++) 735 nmod_mat_entry (MFLINTF, i, 0)= 0; 736 737 nmod_mat_mul (mulResult, M, MFLINTF); 738 739 F= 0; 740 for (i= 0; i < mulResult->r; i++) 741 F += CanonicalForm ((long) nmod_mat_entry (mulResult, i, 0))*power (y, i); 742 743 nmod_mat_clear (MFLINTF); 744 nmod_mat_clear (mulResult); 745 746 if (degree (F, 2) < k) 747 return CFArray(); 748 749 CFArray result= CFArray (degree (F) - k + 1); 750 751 CFIterator j= F; 752 for (int i= degree (F); i >= k; i--) 753 { 754 if (j.exp() == i) 755 { 756 result [i - k]= j.coeff(); 757 j++; 758 if (!j.hasTerms()) 759 return result; 760 } 761 else 762 result[i - k]= 0; 763 } 764 return result; 765 } 766 #endif 767 700 768 int * computeBounds (const CanonicalForm& F, int& n, bool& isIrreducible) 701 769 { … … 788 856 } 789 857 int k= 0; 858 int* point= new int [2]; 790 859 for (int i= 0; i < n; i++) 791 860 { … … 834 903 continue; 835 904 } 836 int* point= new int [2];837 905 point [0]= k; 838 906 point [1]= i + 1; … … 840 908 k= 0; 841 909 result [i]= k; 842 delete [] point; 843 } 910 } 911 912 delete [] point; 844 913 845 914 for (int i= 0; i < sizeOfNewtonPolygon; i++) … … 894 963 } 895 964 965 int swap; 966 for (int i= 0; i < sizeOfNewtonPolygon; i++) 967 { 968 swap= newtonPolyg[i][1]; 969 newtonPolyg[i][1]=newtonPolyg[i][0]; 970 newtonPolyg[i][0]= swap; 971 } 972 973 sizeOfNewtonPolygon= polygon(newtonPolyg, sizeOfNewtonPolygon); 974 896 975 int minX, minY, maxX, maxY; 897 976 minX= newtonPolyg [0] [0]; … … 902 981 for (int i= 1; i < sizeOfNewtonPolygon; i++) 903 982 { 904 if (newtonPolyg[i][ 0] == 0)905 { 906 if (newtonPolyg[indZero][ 0] == 0)907 { 908 if (newtonPolyg[indZero][ 1] < newtonPolyg[i][1])983 if (newtonPolyg[i][1] == 0) 984 { 985 if (newtonPolyg[indZero][1] == 0) 986 { 987 if (newtonPolyg[indZero][0] < newtonPolyg[i][0]) 909 988 indZero= i; 910 989 } … … 926 1005 if (indZero != sizeOfNewtonPolygon - 1) 927 1006 { 928 slopeNum= newtonPolyg[indZero+1][ 1]-newtonPolyg[indZero][1];929 slopeDen= newtonPolyg[indZero+1][ 0];930 constTerm= newtonPolyg[indZero][ 1];1007 slopeNum= newtonPolyg[indZero+1][0]-newtonPolyg[indZero][0]; 1008 slopeDen= newtonPolyg[indZero+1][1]; 1009 constTerm= newtonPolyg[indZero][0]; 931 1010 } 932 1011 else 933 1012 { 934 slopeNum= newtonPolyg[0][ 1]-newtonPolyg[indZero][1];935 slopeDen= newtonPolyg[0][ 0];936 constTerm= newtonPolyg[indZero][ 1];1013 slopeNum= newtonPolyg[0][0]-newtonPolyg[indZero][0]; 1014 slopeDen= newtonPolyg[0][1]; 1015 constTerm= newtonPolyg[indZero][0]; 937 1016 } 938 1017 if (slopeNum < 0) … … 942 1021 } 943 1022 int k= 0; 1023 1024 int* point= new int [2]; 944 1025 for (int i= 0; i < n; i++) 945 1026 { 946 if (((indZero+1) < sizeOfNewtonPolygon && (i+1) > newtonPolyg[indZero+1][ 0])947 || ((indZero+1) >= sizeOfNewtonPolygon && (i+1) > newtonPolyg[0][ 0]))1027 if (((indZero+1) < sizeOfNewtonPolygon && (i+1) > newtonPolyg[indZero+1][1]) 1028 || ((indZero+1) >= sizeOfNewtonPolygon && (i+1) > newtonPolyg[0][1])) 948 1029 { 949 1030 if (indZero + 1 != sizeOfNewtonPolygon) … … 953 1034 if (indZero != sizeOfNewtonPolygon - 1) 954 1035 { 955 slopeNum= newtonPolyg[indZero+1][ 1]-newtonPolyg[indZero][1];956 slopeDen= newtonPolyg[indZero+1][ 0]-newtonPolyg[indZero][0];957 constTerm= newtonPolyg[indZero][ 1];1036 slopeNum= newtonPolyg[indZero+1][0]-newtonPolyg[indZero][0]; 1037 slopeDen= newtonPolyg[indZero+1][1]-newtonPolyg[indZero][1]; 1038 constTerm= newtonPolyg[indZero][0]; 958 1039 } 959 1040 else 960 1041 { 961 slopeNum= newtonPolyg[0][ 1]-newtonPolyg[indZero][1];962 slopeDen= newtonPolyg[0][ 0]-newtonPolyg[indZero][0];963 constTerm= newtonPolyg[indZero][ 1];1042 slopeNum= newtonPolyg[0][0]-newtonPolyg[indZero][0]; 1043 slopeDen= newtonPolyg[0][1]-newtonPolyg[indZero][1]; 1044 constTerm= newtonPolyg[indZero][0]; 964 1045 } 965 1046 if (slopeNum < 0) … … 967 1048 negativeSlope= true; 968 1049 slopeNum= - slopeNum; 969 k= (int) -(((long) slopeNum*((i+1)-newtonPolyg[indZero][ 0])+slopeDen-1)/1050 k= (int) -(((long) slopeNum*((i+1)-newtonPolyg[indZero][1])+slopeDen-1)/ 970 1051 slopeDen) + constTerm; 971 1052 } 972 1053 else 973 k= (int) (((long) slopeNum*((i+1)-newtonPolyg[indZero][ 0])) / slopeDen)1054 k= (int) (((long) slopeNum*((i+1)-newtonPolyg[indZero][1])) / slopeDen) 974 1055 + constTerm; 975 1056 } … … 977 1058 { 978 1059 if (negativeSlope) 979 k= (int) -(((long) slopeNum*((i+1)-newtonPolyg[indZero][ 0])+slopeDen-1)/1060 k= (int) -(((long) slopeNum*((i+1)-newtonPolyg[indZero][1])+slopeDen-1)/ 980 1061 slopeDen) + constTerm; 981 1062 else 982 k= (int) ((long) slopeNum*((i+1)-newtonPolyg[indZero][ 0])) / slopeDen1063 k= (int) ((long) slopeNum*((i+1)-newtonPolyg[indZero][1])) / slopeDen 983 1064 + constTerm; 984 1065 } 985 if (i + 1 > max X || i + 1 < minX)1066 if (i + 1 > maxY || i + 1 < minY) 986 1067 { 987 1068 result [i]= 0; 988 1069 continue; 989 1070 } 990 int* point= new int [2]; 991 point [0]= i + 1;992 point [1]= k;1071 1072 point [0]= k; 1073 point [1]= i + 1; 993 1074 if (!isInPolygon (newtonPolyg, sizeOfNewtonPolygon, point) && k > 0) 994 1075 k= 0; 995 1076 result [i]= k; 996 delete [] point; 997 } 1077 } 1078 1079 delete [] point; 998 1080 999 1081 for (int i= 0; i < sizeOfNewtonPolygon; i++) -
factory/facFqBivarUtil.h
re82b5f2 r0b7a8a6 21 21 #ifdef HAVE_NTL 22 22 #include "NTLconvert.h" 23 #endif 24 25 #ifdef HAVE_FLINT 26 #include "FLINTconvert.h" 23 27 #endif 24 28 … … 269 273 #endif 270 274 275 #ifdef HAVE_FLINT 276 /// extract coefficients of \f$ x^i \f$ for \f$i\geq k\f$ where \f$ x \f$ is 277 /// a variable of level 1 278 /// 279 /// @return coefficients of \f$ x^i \f$ for \f$i\geq k\f$ 280 /// @sa {getCoeffs (const CanonicalForm&, const int, const Variable& alpha), 281 /// getCoeffs (const CanonicalForm&, const int)} 282 CFArray 283 getCoeffs (const CanonicalForm& F, ///< [in] compressed bivariate poly 284 const int k, ///< [in] some int 285 const int l, ///< [in] precision 286 const int degMipo, ///< [in] degree of minimal poly 287 const Variable& alpha, ///< [in] algebraic variable 288 const CanonicalForm& evaluation,///< [in] evaluation point 289 const nmod_mat_t M ///< [in] bases change matrix 290 ); 291 #endif 292 271 293 /// write A into M starting at row startIndex 272 294 void -
factory/facFqFactorize.cc
re82b5f2 r0b7a8a6 876 876 i++; 877 877 CanonicalForm contentx= content (i.getItem(), x); 878 if (degree (contentx) > 0) 879 { 880 if (!find (list, random)) 881 list.append (random); 882 result= CFList(); 883 LCFeval= CFList(); 884 eval= CFList(); 885 continue; 886 } 887 888 contentx= content (i.getItem()); 878 889 if (degree (contentx) > 0) 879 890 { … … 1970 1981 } 1971 1982 if (!content(tmp,1).inCoeffDomain()) 1983 preserveDegree= false; 1984 if (!content(tmp).inCoeffDomain()) 1972 1985 preserveDegree= false; 1973 1986 if (!(gcd (deriv (tmp,x), tmp)).inCoeffDomain()) -
factory/facFqSquarefree.cc
re82b5f2 r0b7a8a6 30 30 #endif 31 31 32 #ifdef HAVE_FLINT 33 #include "FLINTconvert.h" 34 #endif 35 32 36 static inline 33 37 CanonicalForm … … 65 69 power (NTLA2, NTLA2, q/p); 66 70 A= convertNTLzzpE2CF (NTLA2, alpha); 71 return A; 72 } 73 else 74 { 75 CanonicalForm buf= 0; 76 for (CFIterator i= A; i.hasTerms(); i++) 77 buf= buf + power(A.mvar(), i.exp()/p)*pthRoot (i.coeff(), q, alpha); 78 return buf; 79 } 80 } 81 #endif 82 83 #if (HAVE_FLINT && __FLINT_VERSION_MINOR >= 4) 84 CanonicalForm 85 pthRoot (const CanonicalForm & F, const fmpz_t& q, const Variable& alpha) 86 { 87 CanonicalForm A= F; 88 int p= getCharacteristic (); 89 if (A.inCoeffDomain()) 90 { 91 nmod_poly_t FLINTmipo; 92 fq_nmod_ctx_t fq_con; 93 fmpz_t qp; 94 fq_nmod_t FLINTA; 95 96 nmod_poly_init (FLINTmipo, p); 97 convertFacCF2nmod_poly_t (FLINTmipo, getMipo (alpha)); 98 99 fq_nmod_ctx_init_modulus (fq_con, FLINTmipo, "Z"); 100 101 fq_nmod_init2 (FLINTA, fq_con); 102 103 convertFacCF2Fq_nmod_t (FLINTA, A, fq_con); 104 105 fmpz_init_set (qp, q); 106 fmpz_divexact_si (qp, qp, p); 107 108 fq_nmod_pow (FLINTA, FLINTA, qp, fq_con); 109 A= convertFq_nmod_t2FacCF (FLINTA, alpha); 110 111 fmpz_clear (qp); 112 nmod_poly_clear (FLINTmipo); 113 fq_nmod_clear (FLINTA, fq_con); 114 fq_nmod_ctx_clear (fq_con); 67 115 return A; 68 116 } … … 195 243 #endif 196 244 buffer= pthRoot (A, ipower (p, k)); 197 #ifdef HAVE_NTL 245 #if (HAVE_FLINT && __FLINT_VERSION_MINOR >= 4) 246 else 247 { 248 fmpz_t qq; 249 fmpz_init_set_ui (qq, p); 250 fmpz_pow_ui (qq, qq, k); 251 buffer= pthRoot (A, qq, alpha); 252 fmpz_clear (qq); 253 } 254 #else 198 255 else 199 256 { -
factory/facHensel.cc
re82b5f2 r0b7a8a6 36 36 #include "NTLconvert.h" 37 37 38 #ifdef HAVE_FLINT 39 #include "FLINTconvert.h" 40 #endif 41 38 42 TIMING_DEFINE_PRINT (diotime) 39 43 TIMING_DEFINE_PRINT (product1) … … 42 46 TIMING_DEFINE_PRINT (hensel) 43 47 48 #if (!(HAVE_FLINT && __FLINT_VERSION_MINOR >= 4)) 44 49 static 45 50 CFList productsNTL (const CFList& factors, const CanonicalForm& M) … … 79 84 return result; 80 85 } 86 #endif 87 88 #if (HAVE_FLINT && __FLINT_VERSION_MINOR >= 4) 89 static 90 CFList productsFLINT (const CFList& factors, const CanonicalForm& M) 91 { 92 nmod_poly_t FLINTmipo; 93 fq_nmod_ctx_t fq_con; 94 fq_nmod_poly_t prod; 95 fq_nmod_t buf; 96 97 nmod_poly_init (FLINTmipo, getCharacteristic()); 98 convertFacCF2nmod_poly_t (FLINTmipo, M); 99 100 fq_nmod_ctx_init_modulus (fq_con, FLINTmipo, "Z"); 101 102 fq_nmod_poly_t * vec=new fq_nmod_poly_t [factors.length()]; 103 104 int j= 0; 105 106 for (CFListIterator i= factors; i.hasItem(); i++, j++) 107 { 108 if (i.getItem().inCoeffDomain()) 109 { 110 fq_nmod_poly_init (vec[j], fq_con); 111 fq_nmod_init2 (buf, fq_con); 112 convertFacCF2Fq_nmod_t (buf, i.getItem(), fq_con); 113 fq_nmod_poly_set_coeff (vec[j], 0, buf, fq_con); 114 fq_nmod_clear (buf, fq_con); 115 } 116 else 117 convertFacCF2Fq_nmod_poly_t (vec[j], i.getItem(), fq_con); 118 } 119 120 CFList result; 121 Variable x= Variable (1); 122 fq_nmod_poly_init (prod, fq_con); 123 for (j= 0; j < factors.length(); j++) 124 { 125 int k= 0; 126 fq_nmod_poly_one (prod, fq_con); 127 for (int i= 0; i < factors.length(); i++, k++) 128 { 129 if (k == j) 130 continue; 131 fq_nmod_poly_mul (prod, prod, vec[i], fq_con); 132 } 133 result.append (convertFq_nmod_poly_t2FacCF (prod, x, M.mvar(), fq_con)); 134 } 135 for (j= 0; j < factors.length(); j++) 136 fq_nmod_poly_clear (vec[j], fq_con); 137 138 nmod_poly_clear (FLINTmipo); 139 fq_nmod_poly_clear (prod, fq_con); 140 fq_nmod_ctx_clear (fq_con); 141 delete [] vec; 142 return result; 143 } 144 #endif 81 145 82 146 static … … 103 167 i.getItem()= reduce (i.getItem()*inv, M); 104 168 } 169 #if (HAVE_FLINT && __FLINT_VERSION_MINOR >= 4) 170 bufFactors= productsFLINT (bufFactors, M); 171 #else 105 172 bufFactors= productsNTL (bufFactors, M); 173 #endif 106 174 107 175 CanonicalForm buf1, buf2, buf3, S, T; -
factory/facMul.cc
re82b5f2 r0b7a8a6 57 57 const Variable& alpha, const CanonicalForm& den) 58 58 { 59 60 59 CanonicalForm result= 0; 61 60 int i= 0; … … 63 62 int k= 0; 64 63 int degfSubK; 65 int repLength, j; 66 CanonicalForm coeff, ff; 67 fmpz* tmp; 64 int repLength; 65 fmpq_poly_t buf; 66 fmpq_poly_t mipo; 67 convertFacCF2Fmpq_poly_t (mipo, getMipo(alpha)); 68 68 while (degf >= k) 69 69 { 70 coeff= 0;71 70 degfSubK= degf - k; 72 71 if (degfSubK >= d) … … 75 74 repLength= degfSubK + 1; 76 75 77 for (j= 0; j < repLength; j++) 78 { 79 tmp= fmpz_poly_get_coeff_ptr (F, j+k); 80 if (!fmpz_is_zero (tmp)) 81 { 82 ff= convertFmpz2CF (tmp); 83 coeff += ff*power (alpha, j); //TODO faster reduction mod alpha 84 } 85 } 86 result += coeff*power (x, i); 76 fmpq_poly_init2 (buf, repLength); 77 _fmpq_poly_set_length (buf, repLength); 78 _fmpz_vec_set (buf->coeffs, F->coeffs + k, repLength); 79 _fmpq_poly_normalise (buf); 80 fmpq_poly_rem (buf, buf, mipo); 81 82 result += convertFmpq_poly_t2FacCF (buf, alpha)*power (x, i); 83 fmpq_poly_clear (buf); 87 84 i++; 88 85 k= d*i; 89 86 } 87 fmpq_poly_clear (mipo); 90 88 result /= den; 91 89 return result; … … 405 403 if (b.getp() != 0) 406 404 { 407 ZZ_p::init (convertFacCF2NTLZZ (b.getpk()));408 405 CanonicalForm mipo= getMipo (alpha); 409 406 bool is_rat= isOn (SW_RATIONAL); … … 413 410 if (!is_rat) 414 411 Off (SW_RATIONAL); 412 #if (HAVE_FLINT && __FLINT_VERSION_MINOR >= 4) 413 fmpz_t FLINTp; 414 fmpz_mod_poly_t FLINTmipo; 415 fq_ctx_t fq_con; 416 fq_poly_t FLINTF, FLINTG; 417 418 fmpz_init (FLINTp); 419 420 convertCF2Fmpz (FLINTp, b.getpk()); 421 422 convertFacCF2Fmpz_mod_poly_t (FLINTmipo, mipo, FLINTp); 423 424 fq_ctx_init_modulus (fq_con, FLINTmipo, "Z"); 425 426 convertFacCF2Fq_poly_t (FLINTF, F, fq_con); 427 convertFacCF2Fq_poly_t (FLINTG, G, fq_con); 428 429 fq_poly_mul (FLINTF, FLINTF, FLINTG, fq_con); 430 431 CanonicalForm result= convertFq_poly_t2FacCF (FLINTF, F.mvar(), 432 alpha, fq_con); 433 434 fmpz_clear (FLINTp); 435 fmpz_mod_poly_clear (FLINTmipo); 436 fq_poly_clear (FLINTF, fq_con); 437 fq_poly_clear (FLINTG, fq_con); 438 fq_ctx_clear (fq_con); 439 return b (result); 440 #else 441 ZZ_p::init (convertFacCF2NTLZZ (b.getpk())); 415 442 ZZ_pX NTLmipo= to_ZZ_pX (convertFacCF2NTLZZX (mipo)); 416 443 ZZ_pE::init (NTLmipo); … … 418 445 ZZ_pEX NTLf= convertFacCF2NTLZZ_pEX (F, NTLmipo); 419 446 mul (NTLf, NTLf, NTLg); 447 420 448 return b (convertNTLZZ_pEX2CF (NTLf, F.mvar(), alpha)); 449 #endif 421 450 } 422 451 #ifdef HAVE_FLINT … … 439 468 convertFacCF2Fmpz_mod_poly_t (FLINTG, G, FLINTpk); 440 469 fmpz_mod_poly_mul (FLINTF, FLINTF, FLINTG); 441 CanonicalForm result= convertFmpz_mod_poly_t2FacCF (FLINTF, F.mvar(), 470 CanonicalForm result= convertFmpz_mod_poly_t2FacCF (FLINTF, F.mvar(),b); 442 471 fmpz_mod_poly_clear (FLINTG); 443 472 fmpz_mod_poly_clear (FLINTF); … … 466 495 if (hasFirstAlgVar (G, alpha) || hasFirstAlgVar (F, alpha)) 467 496 { 468 ZZ_p::init (convertFacCF2NTLZZ (b.getpk())); 497 #if (HAVE_FLINT && __FLINT_VERSION_MINOR >= 4) 498 fmpz_t FLINTp; 499 fmpz_mod_poly_t FLINTmipo; 500 fq_ctx_t fq_con; 501 502 fmpz_init (FLINTp); 503 convertCF2Fmpz (FLINTp, b.getpk()); 504 505 convertFacCF2Fmpz_mod_poly_t (FLINTmipo, getMipo (alpha), FLINTp); 506 507 fq_ctx_init_modulus (fq_con, FLINTmipo, "Z"); 508 509 CanonicalForm result; 510 469 511 if (F.inCoeffDomain() && !G.inCoeffDomain()) 470 512 { 471 ZZ_pX NTLmipo= to_ZZ_pX (convertFacCF2NTLZZX (getMipo (alpha))); 472 ZZ_pE::init (NTLmipo); 513 fq_poly_t FLINTG; 514 fmpz_poly_t FLINTF; 515 convertFacCF2Fmpz_poly_t (FLINTF, F); 516 convertFacCF2Fq_poly_t (FLINTG, G, fq_con); 517 518 fq_poly_scalar_mul_fq (FLINTG, FLINTG, FLINTF, fq_con); 519 520 result= convertFq_poly_t2FacCF (FLINTG, G.mvar(), alpha, fq_con); 521 fmpz_poly_clear (FLINTF); 522 fq_poly_clear (FLINTG, fq_con); 523 } 524 else if (!F.inCoeffDomain() && G.inCoeffDomain()) 525 { 526 fq_poly_t FLINTF; 527 fmpz_poly_t FLINTG; 528 529 convertFacCF2Fmpz_poly_t (FLINTG, G); 530 convertFacCF2Fq_poly_t (FLINTF, F, fq_con); 531 532 fq_poly_scalar_mul_fq (FLINTF, FLINTF, FLINTG, fq_con); 533 534 result= convertFq_poly_t2FacCF (FLINTF, F.mvar(), alpha, fq_con); 535 fmpz_poly_clear (FLINTG); 536 fq_poly_clear (FLINTF, fq_con); 537 } 538 else 539 { 540 fq_t FLINTF, FLINTG; 541 542 convertFacCF2Fq_t (FLINTF, F, fq_con); 543 convertFacCF2Fq_t (FLINTG, G, fq_con); 544 545 fq_mul (FLINTF, FLINTF, FLINTG, fq_con); 546 547 result= convertFq_t2FacCF (FLINTF, alpha); 548 fq_clear (FLINTF, fq_con); 549 fq_clear (FLINTG, fq_con); 550 } 551 552 fmpz_clear (FLINTp); 553 fmpz_mod_poly_clear (FLINTmipo); 554 fq_ctx_clear (fq_con); 555 556 return b (result); 557 #else 558 ZZ_p::init (convertFacCF2NTLZZ (b.getpk())); 559 ZZ_pX NTLmipo= to_ZZ_pX (convertFacCF2NTLZZX (getMipo (alpha))); 560 ZZ_pE::init (NTLmipo); 561 562 if (F.inCoeffDomain() && !G.inCoeffDomain()) 563 { 473 564 ZZ_pEX NTLg= convertFacCF2NTLZZ_pEX (G, NTLmipo); 474 565 ZZ_pX NTLf= convertFacCF2NTLZZpX (F); … … 478 569 else if (!F.inCoeffDomain() && G.inCoeffDomain()) 479 570 { 480 ZZ_pX NTLmipo= to_ZZ_pX (convertFacCF2NTLZZX (getMipo (alpha)));481 ZZ_pE::init (NTLmipo);482 571 ZZ_pX NTLg= convertFacCF2NTLZZpX (G); 483 572 ZZ_pEX NTLf= convertFacCF2NTLZZ_pEX (F, NTLmipo); … … 487 576 else 488 577 { 489 ZZ_pX NTLmipo= to_ZZ_pX (convertFacCF2NTLZZX (getMipo (alpha)));490 ZZ_pE::init (NTLmipo);491 578 ZZ_pX NTLg= convertFacCF2NTLZZpX (G); 492 579 ZZ_pX NTLf= convertFacCF2NTLZZpX (F); … … 495 582 return b (convertNTLZZpX2CF (rep (result), alpha)); 496 583 } 584 #endif 497 585 } 498 586 } … … 514 602 if (hasFirstAlgVar (F, alpha) || hasFirstAlgVar (G, alpha)) 515 603 { 604 #if (HAVE_FLINT && __FLINT_VERSION_MINOR >= 4) 605 nmod_poly_t FLINTmipo; 606 fq_nmod_ctx_t fq_con; 607 608 nmod_poly_init (FLINTmipo, getCharacteristic()); 609 convertFacCF2nmod_poly_t (FLINTmipo, getMipo (alpha)); 610 611 fq_nmod_ctx_init_modulus (fq_con, FLINTmipo, "Z"); 612 613 fq_nmod_poly_t FLINTF, FLINTG; 614 convertFacCF2Fq_nmod_poly_t (FLINTF, F, fq_con); 615 convertFacCF2Fq_nmod_poly_t (FLINTG, G, fq_con); 616 617 fq_nmod_poly_mul (FLINTF, FLINTF, FLINTG, fq_con); 618 619 result= convertFq_nmod_poly_t2FacCF (FLINTF, F.mvar(), alpha, fq_con); 620 621 fq_nmod_poly_clear (FLINTF, fq_con); 622 fq_nmod_poly_clear (FLINTG, fq_con); 623 nmod_poly_clear (FLINTmipo); 624 fq_nmod_ctx_clear (fq_con); 625 #else 516 626 zz_pX NTLMipo= convertFacCF2NTLzzpX (getMipo (alpha)); 517 627 zz_pE::init (NTLMipo); … … 520 630 mul (NTLF, NTLF, NTLG); 521 631 result= convertNTLzz_pEX2CF(NTLF, F.mvar(), alpha); 632 #endif 522 633 } 523 634 else … … 605 716 if (b.getp() != 0) 606 717 { 718 #if (HAVE_FLINT && __FLINT_VERSION_MINOR >= 4) 719 fmpz_t FLINTp; 720 fmpz_mod_poly_t FLINTmipo; 721 fq_ctx_t fq_con; 722 fq_poly_t FLINTF, FLINTG; 723 724 fmpz_init (FLINTp); 725 726 convertCF2Fmpz (FLINTp, b.getpk()); 727 728 convertFacCF2Fmpz_mod_poly_t (FLINTmipo, getMipo (alpha), FLINTp); 729 730 fq_ctx_init_modulus (fq_con, FLINTmipo, "Z"); 731 732 convertFacCF2Fq_poly_t (FLINTF, F, fq_con); 733 convertFacCF2Fq_poly_t (FLINTG, G, fq_con); 734 735 fq_poly_rem (FLINTF, FLINTF, FLINTG, fq_con); 736 737 CanonicalForm result= convertFq_poly_t2FacCF (FLINTF, F.mvar(), 738 alpha, fq_con); 739 740 fmpz_clear (FLINTp); 741 fmpz_mod_poly_clear (FLINTmipo); 742 fq_poly_clear (FLINTF, fq_con); 743 fq_poly_clear (FLINTG, fq_con); 744 fq_ctx_clear (fq_con); 745 746 return b(result); 747 #else 607 748 ZZ_p::init (convertFacCF2NTLZZ (b.getpk())); 608 749 ZZ_pX NTLmipo= to_ZZ_pX (convertFacCF2NTLZZX (getMipo (alpha))); … … 612 753 rem (NTLf, NTLf, NTLg); 613 754 return b (convertNTLZZ_pEX2CF (NTLf, F.mvar(), alpha)); 755 #endif 614 756 } 615 757 #ifdef HAVE_FLINT … … 634 776 if (hasFirstAlgVar (F, alpha) || hasFirstAlgVar (G, alpha)) 635 777 { 778 #if (HAVE_FLINT && __FLINT_VERSION_MINOR >= 4) 779 nmod_poly_t FLINTmipo; 780 fq_nmod_ctx_t fq_con; 781 782 nmod_poly_init (FLINTmipo, getCharacteristic()); 783 convertFacCF2nmod_poly_t (FLINTmipo, getMipo (alpha)); 784 785 fq_nmod_ctx_init_modulus (fq_con, FLINTmipo, "Z"); 786 787 fq_nmod_poly_t FLINTF, FLINTG; 788 convertFacCF2Fq_nmod_poly_t (FLINTF, F, fq_con); 789 convertFacCF2Fq_nmod_poly_t (FLINTG, G, fq_con); 790 791 fq_nmod_poly_rem (FLINTF, FLINTF, FLINTG, fq_con); 792 793 result= convertFq_nmod_poly_t2FacCF (FLINTF, F.mvar(), alpha, fq_con); 794 795 fq_nmod_poly_clear (FLINTF, fq_con); 796 fq_nmod_poly_clear (FLINTG, fq_con); 797 nmod_poly_clear (FLINTmipo); 798 fq_nmod_ctx_clear (fq_con); 799 #else 636 800 zz_pX NTLMipo= convertFacCF2NTLzzpX(getMipo (alpha)); 637 801 zz_pE::init (NTLMipo); … … 640 804 rem (NTLF, NTLF, NTLG); 641 805 result= convertNTLzz_pEX2CF(NTLF, F.mvar(), alpha); 806 #endif 642 807 } 643 808 else … … 679 844 hasFirstAlgVar (F, alpha); 680 845 hasFirstAlgVar (G, alpha); 846 #if (HAVE_FLINT && __FLINT_VERSION_MINOR >= 4) 847 fmpz_t FLINTp; 848 fmpz_mod_poly_t FLINTmipo; 849 fq_ctx_t fq_con; 850 fq_t FLINTF, FLINTG; 851 852 fmpz_init (FLINTp); 853 convertCF2Fmpz (FLINTp, b.getpk()); 854 855 convertFacCF2Fmpz_mod_poly_t (FLINTmipo, getMipo (alpha), FLINTp); 856 857 fq_ctx_init_modulus (fq_con, FLINTmipo, "Z"); 858 859 convertFacCF2Fq_t (FLINTF, F, fq_con); 860 convertFacCF2Fq_t (FLINTG, G, fq_con); 861 862 fq_inv (FLINTG, FLINTG, fq_con); 863 fq_mul (FLINTF, FLINTF, FLINTG, fq_con); 864 865 CanonicalForm result= convertFq_t2FacCF (FLINTF, alpha); 866 867 fmpz_clear (FLINTp); 868 fmpz_mod_poly_clear (FLINTmipo); 869 fq_clear (FLINTF, fq_con); 870 fq_clear (FLINTG, fq_con); 871 fq_ctx_clear (fq_con); 872 return b (result); 873 #else 681 874 ZZ_p::init (convertFacCF2NTLZZ (b.getpk())); 682 875 ZZ_pX NTLmipo= to_ZZ_pX (convertFacCF2NTLZZX (getMipo (alpha))); … … 687 880 div (result, to_ZZ_pE (NTLf), to_ZZ_pE (NTLg)); 688 881 return b (convertNTLZZpX2CF (rep (result), alpha)); 882 #endif 689 883 } 690 884 return b(div (F,G)); … … 700 894 Variable alpha; 701 895 hasFirstAlgVar (G, alpha); 896 #if (HAVE_FLINT && __FLINT_VERSION_MINOR >= 4) 897 fmpz_t FLINTp; 898 fmpz_mod_poly_t FLINTmipo; 899 fq_ctx_t fq_con; 900 fq_poly_t FLINTF; 901 fq_t FLINTG; 902 903 fmpz_init (FLINTp); 904 convertCF2Fmpz (FLINTp, b.getpk()); 905 906 convertFacCF2Fmpz_mod_poly_t (FLINTmipo, getMipo (alpha), FLINTp); 907 908 fq_ctx_init_modulus (fq_con, FLINTmipo, "Z"); 909 910 convertFacCF2Fq_poly_t (FLINTF, F, fq_con); 911 convertFacCF2Fq_t (FLINTG, G, fq_con); 912 913 fq_inv (FLINTG, FLINTG, fq_con); 914 fq_poly_scalar_mul_fq (FLINTF, FLINTF, FLINTG, fq_con); 915 916 CanonicalForm result= convertFq_poly_t2FacCF (FLINTF, F.mvar(), 917 alpha, fq_con); 918 919 fmpz_clear (FLINTp); 920 fmpz_mod_poly_clear (FLINTmipo); 921 fq_poly_clear (FLINTF, fq_con); 922 fq_clear (FLINTG, fq_con); 923 fq_ctx_clear (fq_con); 924 return b (result); 925 #else 702 926 ZZ_p::init (convertFacCF2NTLZZ (b.getpk())); 703 927 ZZ_pX NTLmipo= to_ZZ_pX (convertFacCF2NTLZZX (getMipo (alpha))); … … 707 931 div (NTLf, NTLf, to_ZZ_pE (NTLg)); 708 932 return b (convertNTLZZ_pEX2CF (NTLf, F.mvar(), alpha)); 933 #endif 709 934 } 710 935 return b(div (F,G)); … … 754 979 if (b.getp() != 0) 755 980 { 981 #if (HAVE_FLINT && __FLINT_VERSION_MINOR >= 4) 982 fmpz_t FLINTp; 983 fmpz_mod_poly_t FLINTmipo; 984 fq_ctx_t fq_con; 985 fq_poly_t FLINTF, FLINTG; 986 987 fmpz_init (FLINTp); 988 convertCF2Fmpz (FLINTp, b.getpk()); 989 990 convertFacCF2Fmpz_mod_poly_t (FLINTmipo, getMipo (alpha), FLINTp); 991 992 fq_ctx_init_modulus (fq_con, FLINTmipo, "Z"); 993 994 convertFacCF2Fq_poly_t (FLINTF, F, fq_con); 995 convertFacCF2Fq_poly_t (FLINTG, G, fq_con); 996 997 fq_poly_divrem (FLINTF, FLINTG, FLINTF, FLINTG, fq_con); 998 999 CanonicalForm result= convertFq_poly_t2FacCF (FLINTF, F.mvar(), 1000 alpha, fq_con); 1001 1002 fmpz_clear (FLINTp); 1003 fmpz_mod_poly_clear (FLINTmipo); 1004 fq_ctx_clear (fq_con); 1005 fq_poly_clear (FLINTF, fq_con); 1006 fq_poly_clear (FLINTG, fq_con); 1007 return b (result); 1008 #else 756 1009 ZZ_p::init (convertFacCF2NTLZZ (b.getpk())); 757 1010 ZZ_pX NTLmipo= to_ZZ_pX (convertFacCF2NTLZZX (getMipo (alpha))); … … 761 1014 div (NTLf, NTLf, NTLg); 762 1015 return b (convertNTLZZ_pEX2CF (NTLf, F.mvar(), alpha)); 1016 #endif 763 1017 } 764 1018 #ifdef HAVE_FLINT … … 783 1037 if (hasFirstAlgVar (F, alpha) || hasFirstAlgVar (G, alpha)) 784 1038 { 1039 #if (HAVE_FLINT && __FLINT_VERSION_MINOR >= 4) 1040 nmod_poly_t FLINTmipo; 1041 fq_nmod_ctx_t fq_con; 1042 1043 nmod_poly_init (FLINTmipo, getCharacteristic()); 1044 convertFacCF2nmod_poly_t (FLINTmipo, getMipo (alpha)); 1045 1046 fq_nmod_ctx_init_modulus (fq_con, FLINTmipo, "Z"); 1047 1048 fq_nmod_poly_t FLINTF, FLINTG; 1049 convertFacCF2Fq_nmod_poly_t (FLINTF, F, fq_con); 1050 convertFacCF2Fq_nmod_poly_t (FLINTG, G, fq_con); 1051 1052 fq_nmod_poly_divrem (FLINTF, FLINTG, FLINTF, FLINTG, fq_con); 1053 1054 result= convertFq_nmod_poly_t2FacCF (FLINTF, F.mvar(), alpha, fq_con); 1055 1056 fq_nmod_poly_clear (FLINTF, fq_con); 1057 fq_nmod_poly_clear (FLINTG, fq_con); 1058 nmod_poly_clear (FLINTmipo); 1059 fq_nmod_ctx_clear (fq_con); 1060 #else 785 1061 zz_pX NTLMipo= convertFacCF2NTLzzpX(getMipo (alpha)); 786 1062 zz_pE::init (NTLMipo); … … 789 1065 div (NTLF, NTLF, NTLG); 790 1066 result= convertNTLzz_pEX2CF(NTLF, F.mvar(), alpha); 1067 #endif 791 1068 } 792 1069 else … … 819 1096 int degAy= degree (A); 820 1097 nmod_poly_init2 (result, getCharacteristic(), d*(degAy + 1)); 1098 result->length= d*(degAy + 1); 1099 flint_mpn_zero (result->coeffs, d*(degAy+1)); 821 1100 822 1101 nmod_poly_t buf; 823 1102 824 int j, k, bufRepLength;1103 int k; 825 1104 for (CFIterator i= A; i.hasTerms(); i++) 826 1105 { 827 1106 convertFacCF2nmod_poly_t (buf, i.coeff()); 828 829 1107 k= i.exp()*d; 830 bufRepLength= (int) nmod_poly_length (buf); 831 for (j= 0; j < bufRepLength; j++) 832 nmod_poly_set_coeff_ui (result, j + k, nmod_poly_get_coeff_ui (buf, j)); 1108 flint_mpn_copyi (result->coeffs+k, buf->coeffs, nmod_poly_length(buf)); 1109 833 1110 nmod_poly_clear (buf); 834 1111 } … … 836 1113 } 837 1114 838 void kronSubQa (fmpq_poly_t result, const CanonicalForm& A, int d1, int d2) 1115 #if (__FLINT_VERSION_MINOR >= 4) 1116 void 1117 kronSubFq (fq_nmod_poly_t result, const CanonicalForm& A, int d, 1118 const fq_nmod_ctx_t fq_con) 1119 { 1120 int degAy= degree (A); 1121 fq_nmod_poly_init2 (result, d*(degAy + 1), fq_con); 1122 _fq_nmod_poly_set_length (result, d*(degAy + 1), fq_con); 1123 _fq_nmod_vec_zero (result->coeffs, d*(degAy + 1), fq_con); 1124 1125 fq_nmod_poly_t buf1; 1126 1127 nmod_poly_t buf2; 1128 1129 int k; 1130 1131 for (CFIterator i= A; i.hasTerms(); i++) 1132 { 1133 if (i.coeff().inCoeffDomain()) 1134 { 1135 convertFacCF2nmod_poly_t (buf2, i.coeff()); 1136 fq_nmod_poly_init2 (buf1, 1, fq_con); 1137 fq_nmod_poly_set_coeff (buf1, 0, buf2, fq_con); 1138 nmod_poly_clear (buf2); 1139 } 1140 else 1141 convertFacCF2Fq_nmod_poly_t (buf1, i.coeff(), fq_con); 1142 1143 k= i.exp()*d; 1144 _fq_nmod_vec_set (result->coeffs+k, buf1->coeffs, 1145 fq_nmod_poly_length (buf1, fq_con), fq_con); 1146 1147 fq_nmod_poly_clear (buf1, fq_con); 1148 } 1149 1150 _fq_nmod_poly_normalise (result, fq_con); 1151 } 1152 #endif 1153 1154 /*void kronSubQa (fmpq_poly_t result, const CanonicalForm& A, int d1, int d2) 839 1155 { 840 1156 int degAy= degree (A); … … 879 1195 fmpq_clear (coeff); 880 1196 _fmpq_poly_normalise (result); 1197 }*/ 1198 1199 void kronSubQa (fmpz_poly_t result, const CanonicalForm& A, int d1, int d2) 1200 { 1201 int degAy= degree (A); 1202 fmpz_poly_init2 (result, d1*(degAy + 1)); 1203 _fmpz_poly_set_length (result, d1*(degAy + 1)); 1204 1205 fmpz_poly_t buf; 1206 1207 int k; 1208 CFIterator j; 1209 for (CFIterator i= A; i.hasTerms(); i++) 1210 { 1211 if (i.coeff().inCoeffDomain()) 1212 { 1213 k= d1*i.exp(); 1214 convertFacCF2Fmpz_poly_t (buf, i.coeff()); 1215 _fmpz_vec_set (result->coeffs + k, buf->coeffs, buf->length); 1216 fmpz_poly_clear (buf); 1217 } 1218 else 1219 { 1220 for (j= i.coeff(); j.hasTerms(); j++) 1221 { 1222 k= d1*i.exp(); 1223 k += d2*j.exp(); 1224 convertFacCF2Fmpz_poly_t (buf, j.coeff()); 1225 _fmpz_vec_set (result->coeffs + k, buf->coeffs, buf->length); 1226 fmpz_poly_clear (buf); 1227 } 1228 } 1229 } 1230 _fmpz_poly_normalise (result); 881 1231 } 882 1232 … … 921 1271 } 922 1272 1273 #if (__FLINT_VERSION_MINOR >= 4) 1274 void 1275 kronSubReciproFq (fq_nmod_poly_t subA1, fq_nmod_poly_t subA2, 1276 const CanonicalForm& A, int d, const fq_nmod_ctx_t fq_con) 1277 { 1278 int degAy= degree (A); 1279 fq_nmod_poly_init2 (subA1, d*(degAy + 2), fq_con); 1280 fq_nmod_poly_init2 (subA2, d*(degAy + 2), fq_con); 1281 1282 _fq_nmod_poly_set_length (subA1, d*(degAy + 2), fq_con); 1283 _fq_nmod_vec_zero (subA1->coeffs, d*(degAy + 2), fq_con); 1284 1285 _fq_nmod_poly_set_length (subA2, d*(degAy + 2), fq_con); 1286 _fq_nmod_vec_zero (subA2->coeffs, d*(degAy + 2), fq_con); 1287 1288 fq_nmod_poly_t buf1; 1289 1290 nmod_poly_t buf2; 1291 1292 int k, kk; 1293 for (CFIterator i= A; i.hasTerms(); i++) 1294 { 1295 if (i.coeff().inCoeffDomain()) 1296 { 1297 convertFacCF2nmod_poly_t (buf2, i.coeff()); 1298 fq_nmod_poly_init2 (buf1, 1, fq_con); 1299 fq_nmod_poly_set_coeff (buf1, 0, buf2, fq_con); 1300 nmod_poly_clear (buf2); 1301 } 1302 else 1303 convertFacCF2Fq_nmod_poly_t (buf1, i.coeff(), fq_con); 1304 1305 k= i.exp()*d; 1306 kk= (degAy - i.exp())*d; 1307 _fq_nmod_vec_add (subA1->coeffs+k, subA1->coeffs+k, buf1->coeffs, 1308 fq_nmod_poly_length(buf1, fq_con), fq_con); 1309 _fq_nmod_vec_add (subA2->coeffs+kk, subA2->coeffs+kk, buf1->coeffs, 1310 fq_nmod_poly_length(buf1, fq_con), fq_con); 1311 1312 fq_nmod_poly_clear (buf1, fq_con); 1313 } 1314 _fq_nmod_poly_normalise (subA1, fq_con); 1315 _fq_nmod_poly_normalise (subA2, fq_con); 1316 } 1317 #endif 1318 923 1319 void 924 1320 kronSubReciproQ (fmpz_poly_t subA1, fmpz_poly_t subA2, const CanonicalForm& A, … … 930 1326 931 1327 fmpz_poly_t buf; 932 fmpz_t coeff1, coeff2; 933 934 int k, kk, j, bufRepLength; 1328 1329 int k, kk; 935 1330 for (CFIterator i= A; i.hasTerms(); i++) 936 1331 { … … 939 1334 k= i.exp()*d; 940 1335 kk= (degAy - i.exp())*d; 941 bufRepLength= (int) fmpz_poly_length (buf); 942 for (j= 0; j < bufRepLength; j++) 943 { 944 fmpz_poly_get_coeff_fmpz (coeff1, subA1, j+k); 945 fmpz_poly_get_coeff_fmpz (coeff2, buf, j); 946 fmpz_add (coeff1, coeff1, coeff2); 947 fmpz_poly_set_coeff_fmpz (subA1, j + k, coeff1); 948 fmpz_poly_get_coeff_fmpz (coeff1, subA2, j + kk); 949 fmpz_add (coeff1, coeff1, coeff2); 950 fmpz_poly_set_coeff_fmpz (subA2, j + kk, coeff1); 951 } 1336 _fmpz_vec_add (subA1->coeffs+k, subA1->coeffs + k, buf->coeffs, buf->length); 1337 _fmpz_vec_add (subA2->coeffs+kk, subA2->coeffs + kk, buf->coeffs, buf->length); 952 1338 fmpz_poly_clear (buf); 953 1339 } 954 fmpz_clear (coeff1); 955 fmpz_clear (coeff2); 1340 956 1341 _fmpz_poly_normalise (subA1); 957 1342 _fmpz_poly_normalise (subA2); … … 962 1347 Variable y= Variable (2); 963 1348 Variable x= Variable (1); 964 965 fmpz_poly_t f;966 fmpz_poly_init (f);967 fmpz_poly_set (f, F);968 1349 969 1350 fmpz_poly_t buf; 970 1351 CanonicalForm result= 0; 971 1352 int i= 0; 972 int degf= fmpz_poly_degree( f);1353 int degf= fmpz_poly_degree(F); 973 1354 int k= 0; 974 int degfSubK, repLength, j; 975 fmpz_t coeff; 1355 int degfSubK, repLength; 976 1356 while (degf >= k) 977 1357 { … … 983 1363 984 1364 fmpz_poly_init2 (buf, repLength); 985 fmpz_init (coeff); 986 for (j= 0; j < repLength; j++) 987 { 988 fmpz_poly_get_coeff_fmpz (coeff, f, j + k); 989 fmpz_poly_set_coeff_fmpz (buf, j, coeff); 990 } 1365 _fmpz_poly_set_length (buf, repLength); 1366 _fmpz_vec_set (buf->coeffs, F->coeffs+k, repLength); 991 1367 _fmpz_poly_normalise (buf); 992 1368 … … 995 1371 k= d*i; 996 1372 fmpz_poly_clear (buf); 997 fmpz_clear (coeff); 998 } 999 fmpz_poly_clear (f); 1373 } 1000 1374 1001 1375 return result; 1002 1376 } 1003 1377 1004 CanonicalForm1378 /*CanonicalForm 1005 1379 reverseSubstQa (const fmpq_poly_t F, int d1, int d2, const Variable& alpha, 1006 1380 const fmpq_poly_t mipo) … … 1072 1446 fmpq_poly_clear (f); 1073 1447 return result; 1448 }*/ 1449 1450 CanonicalForm 1451 reverseSubstQa (const fmpz_poly_t F, int d1, int d2, const Variable& alpha, 1452 const fmpq_poly_t mipo) 1453 { 1454 Variable y= Variable (2); 1455 Variable x= Variable (1); 1456 1457 fmpq_poly_t buf; 1458 CanonicalForm result= 0, result2; 1459 int i= 0; 1460 int degf= fmpz_poly_degree(F); 1461 int k= 0; 1462 int degfSubK; 1463 int repLength; 1464 while (degf >= k) 1465 { 1466 degfSubK= degf - k; 1467 if (degfSubK >= d1) 1468 repLength= d1; 1469 else 1470 repLength= degfSubK + 1; 1471 1472 int j= 0; 1473 result2= 0; 1474 while (j*d2 < repLength) 1475 { 1476 fmpq_poly_init2 (buf, d2); 1477 _fmpq_poly_set_length (buf, d2); 1478 _fmpz_vec_set (buf->coeffs, F->coeffs + k*j*d2, d2); 1479 _fmpq_poly_normalise (buf); 1480 fmpq_poly_rem (buf, buf, mipo); 1481 result2 += convertFmpq_poly_t2FacCF (buf, alpha)*power (x, j); 1482 j++; 1483 fmpq_poly_clear (buf); 1484 } 1485 if (repLength - j*d2 != 0 && j*d2 - repLength < d2) 1486 { 1487 j--; 1488 repLength -= j*d2; 1489 fmpq_poly_init2 (buf, repLength); 1490 _fmpq_poly_set_length (buf, repLength); 1491 j++; 1492 _fmpz_vec_set (buf->coeffs, F->coeffs + k + j*d2, repLength); 1493 _fmpq_poly_normalise (buf); 1494 fmpq_poly_rem (buf, buf, mipo); 1495 result2 += convertFmpq_poly_t2FacCF (buf, alpha)*power (x, j); 1496 fmpq_poly_clear (buf); 1497 } 1498 1499 result += result2*power (y, i); 1500 i++; 1501 k= d1*i; 1502 } 1503 1504 return result; 1074 1505 } 1075 1506 … … 1192 1623 } 1193 1624 1625 #if (__FLINT_VERSION_MINOR >= 4) 1626 CanonicalForm 1627 reverseSubstReciproFq (const fq_nmod_poly_t F, const fq_nmod_poly_t G, int d, 1628 int k, const Variable& alpha, const fq_nmod_ctx_t fq_con) 1629 { 1630 Variable y= Variable (2); 1631 Variable x= Variable (1); 1632 1633 fq_nmod_poly_t f, g; 1634 int degf= fq_nmod_poly_degree(F, fq_con); 1635 int degg= fq_nmod_poly_degree(G, fq_con); 1636 1637 fq_nmod_poly_t buf1,buf2, buf3; 1638 1639 fq_nmod_poly_init (f, fq_con); 1640 fq_nmod_poly_init (g, fq_con); 1641 fq_nmod_poly_set (f, F, fq_con); 1642 fq_nmod_poly_set (g, G, fq_con); 1643 if (fq_nmod_poly_length (f, fq_con) < (long) d*(k + 1)) //zero padding 1644 fq_nmod_poly_fit_length (f, (long) d*(k + 1), fq_con); 1645 1646 CanonicalForm result= 0; 1647 int i= 0; 1648 int lf= 0; 1649 int lg= d*k; 1650 int degfSubLf= degf; 1651 int deggSubLg= degg-lg; 1652 int repLengthBuf2, repLengthBuf1, tmp; 1653 while (degf >= lf || lg >= 0) 1654 { 1655 if (degfSubLf >= d) 1656 repLengthBuf1= d; 1657 else if (degfSubLf < 0) 1658 repLengthBuf1= 0; 1659 else 1660 repLengthBuf1= degfSubLf + 1; 1661 fq_nmod_poly_init2 (buf1, repLengthBuf1, fq_con); 1662 _fq_nmod_poly_set_length (buf1, repLengthBuf1, fq_con); 1663 1664 _fq_nmod_vec_set (buf1->coeffs, f->coeffs + lf, repLengthBuf1, fq_con); 1665 _fq_nmod_poly_normalise (buf1, fq_con); 1666 1667 repLengthBuf1= fq_nmod_poly_length (buf1, fq_con); 1668 1669 if (deggSubLg >= d - 1) 1670 repLengthBuf2= d - 1; 1671 else if (deggSubLg < 0) 1672 repLengthBuf2= 0; 1673 else 1674 repLengthBuf2= deggSubLg + 1; 1675 1676 fq_nmod_poly_init2 (buf2, repLengthBuf2, fq_con); 1677 _fq_nmod_poly_set_length (buf2, repLengthBuf2, fq_con); 1678 _fq_nmod_vec_set (buf2->coeffs, g->coeffs + lg, repLengthBuf2, fq_con); 1679 1680 _fq_nmod_poly_normalise (buf2, fq_con); 1681 repLengthBuf2= fq_nmod_poly_length (buf2, fq_con); 1682 1683 fq_nmod_poly_init2 (buf3, repLengthBuf2 + d, fq_con); 1684 _fq_nmod_poly_set_length (buf3, repLengthBuf2 + d, fq_con); 1685 _fq_nmod_vec_set (buf3->coeffs, buf1->coeffs, repLengthBuf1, fq_con); 1686 _fq_nmod_vec_set (buf3->coeffs + d, buf2->coeffs, repLengthBuf2, fq_con); 1687 1688 _fq_nmod_poly_normalise (buf3, fq_con); 1689 1690 result += convertFq_nmod_poly_t2FacCF (buf3, x, alpha, fq_con)*power (y, i); 1691 i++; 1692 1693 1694 lf= i*d; 1695 degfSubLf= degf - lf; 1696 1697 lg= d*(k - i); 1698 deggSubLg= degg - lg; 1699 1700 if (lg >= 0 && deggSubLg > 0) 1701 { 1702 if (repLengthBuf2 > degfSubLf + 1) 1703 degfSubLf= repLengthBuf2 - 1; 1704 tmp= tmin (repLengthBuf1, deggSubLg + 1); 1705 _fq_nmod_vec_sub (g->coeffs + lg, g->coeffs + lg, buf1-> coeffs, 1706 tmp, fq_con); 1707 } 1708 if (lg < 0) 1709 { 1710 fq_nmod_poly_clear (buf1, fq_con); 1711 fq_nmod_poly_clear (buf2, fq_con); 1712 fq_nmod_poly_clear (buf3, fq_con); 1713 break; 1714 } 1715 if (degfSubLf >= 0) 1716 _fq_nmod_vec_sub (f->coeffs + lf, f->coeffs + lf, buf2->coeffs, 1717 repLengthBuf2, fq_con); 1718 fq_nmod_poly_clear (buf1, fq_con); 1719 fq_nmod_poly_clear (buf2, fq_con); 1720 fq_nmod_poly_clear (buf3, fq_con); 1721 } 1722 1723 fq_nmod_poly_clear (f, fq_con); 1724 fq_nmod_poly_clear (g, fq_con); 1725 1726 return result; 1727 } 1728 #endif 1729 1194 1730 CanonicalForm 1195 1731 reverseSubstReciproQ (const fmpz_poly_t F, const fmpz_poly_t G, int d, int k) … … 1205 1741 int degf= fmpz_poly_degree(f); 1206 1742 int degg= fmpz_poly_degree(g); 1207 1208 1743 1209 1744 fmpz_poly_t buf1,buf2, buf3; … … 1326 1861 } 1327 1862 1328 CanonicalForm reverseSubstFp (const nmod_poly_t F, int d) 1863 #if (__FLINT_VERSION_MINOR >= 4) 1864 CanonicalForm 1865 reverseSubstFq (const fq_nmod_poly_t F, int d, const Variable& alpha, 1866 const fq_nmod_ctx_t fq_con) 1329 1867 { 1330 1868 Variable y= Variable (2); 1331 1869 Variable x= Variable (1); 1332 1870 1333 nmod_poly_t f; 1334 mp_limb_t ninv= n_preinvert_limb (getCharacteristic()); 1335 nmod_poly_init_preinv (f, getCharacteristic(), ninv); 1336 nmod_poly_set (f, F); 1337 1338 nmod_poly_t buf; 1871 fq_nmod_poly_t buf; 1339 1872 CanonicalForm result= 0; 1340 1873 int i= 0; 1341 int degf= nmod_poly_degree(f);1874 int degf= fq_nmod_poly_degree(F, fq_con); 1342 1875 int k= 0; 1343 int degfSubK, repLength , j;1876 int degfSubK, repLength; 1344 1877 while (degf >= k) 1345 1878 { … … 1350 1883 repLength= degfSubK + 1; 1351 1884 1885 fq_nmod_poly_init2 (buf, repLength, fq_con); 1886 _fq_nmod_poly_set_length (buf, repLength, fq_con); 1887 _fq_nmod_vec_set (buf->coeffs, F->coeffs+k, repLength, fq_con); 1888 _fq_nmod_poly_normalise (buf, fq_con); 1889 1890 result += convertFq_nmod_poly_t2FacCF (buf, x, alpha, fq_con)*power (y, i); 1891 i++; 1892 k= d*i; 1893 fq_nmod_poly_clear (buf, fq_con); 1894 } 1895 1896 return result; 1897 } 1898 #endif 1899 1900 CanonicalForm reverseSubstFp (const nmod_poly_t F, int d) 1901 { 1902 Variable y= Variable (2); 1903 Variable x= Variable (1); 1904 1905 mp_limb_t ninv= n_preinvert_limb (getCharacteristic()); 1906 1907 nmod_poly_t buf; 1908 CanonicalForm result= 0; 1909 int i= 0; 1910 int degf= nmod_poly_degree(F); 1911 int k= 0; 1912 int degfSubK, repLength, j; 1913 while (degf >= k) 1914 { 1915 degfSubK= degf - k; 1916 if (degfSubK >= d) 1917 repLength= d; 1918 else 1919 repLength= degfSubK + 1; 1920 1352 1921 nmod_poly_init2_preinv (buf, getCharacteristic(), ninv, repLength); 1353 1922 for (j= 0; j < repLength; j++) 1354 nmod_poly_set_coeff_ui (buf, j, nmod_poly_get_coeff_ui ( f, j + k));1923 nmod_poly_set_coeff_ui (buf, j, nmod_poly_get_coeff_ui (F, j + k)); 1355 1924 _nmod_poly_normalise (buf); 1356 1925 … … 1360 1929 nmod_poly_clear (buf); 1361 1930 } 1362 nmod_poly_clear (f);1363 1931 1364 1932 return result; … … 1434 2002 } 1435 2003 2004 #if (__FLINT_VERSION_MINOR >= 4) 2005 CanonicalForm 2006 mulMod2FLINTFqReci (const CanonicalForm& F, const CanonicalForm& G, const 2007 CanonicalForm& M, const Variable& alpha, 2008 const fq_nmod_ctx_t fq_con) 2009 { 2010 int d1= degree (F, 1) + degree (G, 1) + 1; 2011 d1 /= 2; 2012 d1 += 1; 2013 2014 fq_nmod_poly_t F1, F2; 2015 kronSubReciproFq (F1, F2, F, d1, fq_con); 2016 2017 fq_nmod_poly_t G1, G2; 2018 kronSubReciproFq (G1, G2, G, d1, fq_con); 2019 2020 int k= d1*degree (M); 2021 fq_nmod_poly_mullow (F1, F1, G1, (long) k, fq_con); 2022 2023 int degtailF= degree (tailcoeff (F), 1);; 2024 int degtailG= degree (tailcoeff (G), 1); 2025 int taildegF= taildegree (F); 2026 int taildegG= taildegree (G); 2027 2028 int b= fq_nmod_poly_degree (F2, fq_con) + fq_nmod_poly_degree (G2, fq_con) - k 2029 - degtailF - degtailG + d1*(2+taildegF + taildegG); 2030 2031 fq_nmod_poly_reverse (F2, F2, fq_nmod_poly_degree (F2, fq_con), fq_con); 2032 fq_nmod_poly_reverse (G2, G2, fq_nmod_poly_degree (G2, fq_con), fq_con); 2033 fq_nmod_poly_mullow (F2, F2, G2, b+1, fq_con); 2034 fq_nmod_poly_reverse (F2, F2, b, fq_con); 2035 2036 int d2= tmax (fq_nmod_poly_degree (F2, fq_con)/d1, 2037 fq_nmod_poly_degree (F1, fq_con)/d1); 2038 2039 CanonicalForm result= reverseSubstReciproFq (F1, F2, d1, d2, alpha, fq_con); 2040 2041 fq_nmod_poly_clear (F1, fq_con); 2042 fq_nmod_poly_clear (F2, fq_con); 2043 fq_nmod_poly_clear (G1, fq_con); 2044 fq_nmod_poly_clear (G2, fq_con); 2045 return result; 2046 } 2047 2048 CanonicalForm 2049 mulMod2FLINTFq (const CanonicalForm& F, const CanonicalForm& G, const 2050 CanonicalForm& M, const Variable& alpha, 2051 const fq_nmod_ctx_t fq_con) 2052 { 2053 CanonicalForm A= F; 2054 CanonicalForm B= G; 2055 2056 int degAx= degree (A, 1); 2057 int degAy= degree (A, 2); 2058 int degBx= degree (B, 1); 2059 int degBy= degree (B, 2); 2060 int d1= degAx + 1 + degBx; 2061 int d2= tmax (degAy, degBy); 2062 2063 if (d1 > 128 && d2 > 160 && (degAy == degBy) && (2*degAy > degree (M))) 2064 return mulMod2FLINTFqReci (A, B, M, alpha, fq_con); 2065 2066 fq_nmod_poly_t FLINTA, FLINTB; 2067 kronSubFq (FLINTA, A, d1, fq_con); 2068 kronSubFq (FLINTB, B, d1, fq_con); 2069 2070 int k= d1*degree (M); 2071 fq_nmod_poly_mullow (FLINTA, FLINTA, FLINTB, (long) k, fq_con); 2072 2073 A= reverseSubstFq (FLINTA, d1, alpha, fq_con); 2074 2075 fq_nmod_poly_clear (FLINTA, fq_con); 2076 fq_nmod_poly_clear (FLINTB, fq_con); 2077 return A; 2078 } 2079 #endif 2080 1436 2081 CanonicalForm 1437 2082 mulMod2FLINTQReci (const CanonicalForm& F, const CanonicalForm& G, const … … 1499 2144 } 1500 2145 1501 CanonicalForm2146 /*CanonicalForm 1502 2147 mulMod2FLINTQa (const CanonicalForm& F, const CanonicalForm& G, 1503 2148 const CanonicalForm& M) … … 1529 2174 fmpq_poly_clear (FLINTG); 1530 2175 return result; 1531 } 1532 1533 #endif 1534 2176 }*/ 2177 2178 CanonicalForm 2179 mulMod2FLINTQa (const CanonicalForm& F, const CanonicalForm& G, 2180 const CanonicalForm& M) 2181 { 2182 Variable a; 2183 if (!hasFirstAlgVar (F,a) && !hasFirstAlgVar (G, a)) 2184 return mulMod2FLINTQ (F, G, M); 2185 CanonicalForm A= F, B= G; 2186 2187 int degFx= degree (F, 1); 2188 int degFa= degree (F, a); 2189 int degGx= degree (G, 1); 2190 int degGa= degree (G, a); 2191 2192 int d2= degFa+degGa+1; 2193 int d1= degFx + 1 + degGx; 2194 d1 *= d2; 2195 2196 CanonicalForm f= bCommonDen (F); 2197 CanonicalForm g= bCommonDen (G); 2198 A *= f; 2199 B *= g; 2200 2201 fmpz_poly_t FLINTF, FLINTG; 2202 kronSubQa (FLINTF, A, d1, d2); 2203 kronSubQa (FLINTG, B, d1, d2); 2204 2205 fmpz_poly_mullow (FLINTF, FLINTF, FLINTG, d1*degree (M)); 2206 2207 fmpq_poly_t mipo; 2208 convertFacCF2Fmpq_poly_t (mipo, getMipo (a)); 2209 A= reverseSubstQa (FLINTF, d1, d2, a, mipo); 2210 fmpz_poly_clear (FLINTF); 2211 fmpz_poly_clear (FLINTG); 2212 return A/(f*g); 2213 } 2214 2215 #endif 2216 2217 #ifndef HAVE_FLINT 1535 2218 zz_pX kronSubFp (const CanonicalForm& A, int d) 1536 2219 { … … 1562 2245 return result; 1563 2246 } 1564 2247 #endif 2248 2249 #if (!(HAVE_FLINT && __FLINT_VERSION_MINOR >= 4)) 1565 2250 zz_pEX kronSubFq (const CanonicalForm& A, int d, const Variable& alpha) 1566 2251 { … … 1641 2326 subA2.normalize(); 1642 2327 } 1643 2328 #endif 2329 2330 #ifndef HAVE_FLINT 1644 2331 void 1645 2332 kronSubReciproFp (zz_pX& subA1, zz_pX& subA2, const CanonicalForm& A, int d) … … 1674 2361 subA2.normalize(); 1675 2362 } 1676 2363 #endif 2364 2365 #if (!(HAVE_FLINT && __FLINT_VERSION_MINOR >= 4)) 1677 2366 CanonicalForm 1678 2367 reverseSubstReciproFq (const zz_pEX& F, const zz_pEX& G, int d, int k, … … 1786 2475 return result; 1787 2476 } 1788 2477 #endif 2478 2479 #ifndef HAVE_FLINT 1789 2480 CanonicalForm 1790 2481 reverseSubstReciproFp (const zz_pX& F, const zz_pX& G, int d, int k) … … 1898 2589 return result; 1899 2590 } 1900 2591 #endif 2592 2593 #if (!(HAVE_FLINT && __FLINT_VERSION_MINOR >= 4)) 1901 2594 CanonicalForm reverseSubstFq (const zz_pEX& F, int d, const Variable& alpha) 1902 2595 { … … 1935 2628 return result; 1936 2629 } 1937 2630 #endif 2631 2632 #ifndef HAVE_FLINT 1938 2633 CanonicalForm reverseSubstFp (const zz_pX& F, int d) 1939 2634 { … … 1973 2668 } 1974 2669 1975 // assumes input to be reduced mod M and to be an element of F q not Fp2670 // assumes input to be reduced mod M and to be an element of Fp 1976 2671 CanonicalForm 1977 2672 mulMod2NTLFpReci (const CanonicalForm& F, const CanonicalForm& G, const … … 2033 2728 return A; 2034 2729 } 2035 2730 #endif 2731 2732 #if (!(HAVE_FLINT && __FLINT_VERSION_MINOR >= 4)) 2036 2733 // assumes input to be reduced mod M and to be an element of Fq not Fp 2037 2734 CanonicalForm … … 2065 2762 return reverseSubstReciproFq (F1, F2, d1, d2, alpha); 2066 2763 } 2764 #endif 2067 2765 2068 2766 #ifdef HAVE_FLINT … … 2082 2780 if (hasFirstAlgVar (A, alpha) || hasFirstAlgVar (B, alpha)) 2083 2781 { 2782 #if (HAVE_FLINT && __FLINT_VERSION_MINOR >= 4) 2783 nmod_poly_t FLINTmipo; 2784 convertFacCF2nmod_poly_t (FLINTmipo, getMipo (alpha)); 2785 2786 fq_nmod_ctx_t fq_con; 2787 fq_nmod_ctx_init_modulus (fq_con, FLINTmipo, "Z"); 2788 2789 A= mulMod2FLINTFq (A, B, M, alpha, fq_con); 2790 nmod_poly_clear (FLINTmipo); 2791 fq_nmod_ctx_clear (fq_con); 2792 #else 2084 2793 int degAx= degree (A, 1); 2085 2794 int degAy= degree (A, 2); … … 2109 2818 2110 2819 A= reverseSubstFq (NTLA, d1, alpha); 2111 2112 return A; 2820 #endif 2113 2821 } 2114 2822 else 2823 { 2115 2824 #ifdef HAVE_FLINT 2116 returnmulMod2FLINTFp (A, B, M);2825 A= mulMod2FLINTFp (A, B, M); 2117 2826 #else 2118 return mulMod2NTLFp (A, B, M); 2119 #endif 2827 A= mulMod2NTLFp (A, B, M); 2828 #endif 2829 } 2830 return A; 2120 2831 } 2121 2832 … … 2482 3193 else 2483 3194 { 3195 Variable y= Variable (2); 3196 #if (HAVE_FLINT && __FLINT_VERSION_MINOR >= 4) 3197 nmod_poly_t FLINTmipo; 3198 fq_nmod_ctx_t fq_con; 3199 3200 nmod_poly_init (FLINTmipo, getCharacteristic()); 3201 convertFacCF2nmod_poly_t (FLINTmipo, M); 3202 3203 fq_nmod_ctx_init_modulus (fq_con, FLINTmipo, "Z"); 3204 3205 3206 fq_nmod_poly_t FLINTA, FLINTB; 3207 convertFacCF2Fq_nmod_poly_t (FLINTA, swapvar (A, x, y), fq_con); 3208 convertFacCF2Fq_nmod_poly_t (FLINTB, swapvar (B, x, y), fq_con); 3209 3210 fq_nmod_poly_divrem (FLINTA, FLINTB, FLINTA, FLINTB, fq_con); 3211 3212 Q= convertFq_nmod_poly_t2FacCF (FLINTA, x, y, fq_con); 3213 3214 fq_nmod_poly_clear (FLINTA, fq_con); 3215 fq_nmod_poly_clear (FLINTB, fq_con); 3216 nmod_poly_clear (FLINTmipo); 3217 fq_nmod_ctx_clear (fq_con); 3218 #else 2484 3219 bool zz_pEbak= zz_pE::initialized(); 2485 3220 zz_pEBak bak; … … 2487 3222 bak.save(); 2488 3223 zz_pX mipo= convertFacCF2NTLzzpX (M); 2489 Variable y= Variable (2);2490 3224 zz_pEX NTLA, NTLB; 2491 3225 NTLA= convertFacCF2NTLzz_pEX (swapvar (A, x, y), mipo); … … 2495 3229 if (zz_pEbak) 2496 3230 bak.restore(); 3231 #endif 2497 3232 } 2498 3233 } … … 2541 3276 else 2542 3277 { 3278 Variable y= Variable (2); 3279 #if (HAVE_FLINT && __FLINT_VERSION_MINOR >= 4) 3280 nmod_poly_t FLINTmipo; 3281 fq_nmod_ctx_t fq_con; 3282 3283 nmod_poly_init (FLINTmipo, getCharacteristic()); 3284 convertFacCF2nmod_poly_t (FLINTmipo, M); 3285 3286 fq_nmod_ctx_init_modulus (fq_con, FLINTmipo, "Z"); 3287 3288 fq_nmod_poly_t FLINTA, FLINTB; 3289 convertFacCF2Fq_nmod_poly_t (FLINTA, swapvar (A, x, y), fq_con); 3290 convertFacCF2Fq_nmod_poly_t (FLINTB, swapvar (B, x, y), fq_con); 3291 3292 fq_nmod_poly_divrem (FLINTA, FLINTB, FLINTA, FLINTB, fq_con); 3293 3294 Q= convertFq_nmod_poly_t2FacCF (FLINTA, x, y, fq_con); 3295 R= convertFq_nmod_poly_t2FacCF (FLINTB, x, y, fq_con); 3296 3297 fq_nmod_poly_clear (FLINTA, fq_con); 3298 fq_nmod_poly_clear (FLINTB, fq_con); 3299 nmod_poly_clear (FLINTmipo); 3300 fq_nmod_ctx_clear (fq_con); 3301 #else 2543 3302 zz_pX mipo= convertFacCF2NTLzzpX (M); 2544 Variable y= Variable (2);2545 3303 zz_pEX NTLA, NTLB; 2546 3304 NTLA= convertFacCF2NTLzz_pEX (swapvar (A, x, y), mipo); … … 2550 3308 Q= convertNTLzz_pEX2CF (NTLQ, x, y); 2551 3309 R= convertNTLzz_pEX2CF (NTLR, x, y); 3310 #endif 2552 3311 } 2553 3312 } … … 2871 3630 if (hasFirstAlgVar (A, alpha) || hasFirstAlgVar (B, alpha)) 2872 3631 { 3632 #if (HAVE_FLINT && __FLINT_VERSION_MINOR >= 4) 3633 nmod_poly_t FLINTmipo; 3634 fq_nmod_ctx_t fq_con; 3635 3636 nmod_poly_init (FLINTmipo, getCharacteristic()); 3637 convertFacCF2nmod_poly_t (FLINTmipo, getMipo (alpha)); 3638 3639 fq_nmod_ctx_init_modulus (fq_con, FLINTmipo, "Z"); 3640 3641 fq_nmod_poly_t FLINTA, FLINTB; 3642 convertFacCF2Fq_nmod_poly_t (FLINTA, A, fq_con); 3643 convertFacCF2Fq_nmod_poly_t (FLINTB, B, fq_con); 3644 int result= fq_nmod_poly_divides (FLINTA, FLINTB, FLINTA, fq_con); 3645 fq_nmod_poly_clear (FLINTA, fq_con); 3646 fq_nmod_poly_clear (FLINTB, fq_con); 3647 nmod_poly_clear (FLINTmipo); 3648 fq_nmod_ctx_clear (fq_con); 3649 return result; 3650 #else 2873 3651 zz_pX NTLMipo= convertFacCF2NTLzzpX (getMipo (alpha)); 2874 3652 zz_pE::init (NTLMipo); … … 2876 3654 zz_pEX NTLB= convertFacCF2NTLzz_pEX (B, NTLMipo); 2877 3655 return divide (NTLB, NTLA); 3656 #endif 2878 3657 } 2879 3658 #ifdef HAVE_FLINT
Note: See TracChangeset
for help on using the changeset viewer.