From f15d67442972c5f69c71925a6bfa5aa1a39d54eb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A1szl=C3=B3=20N=C3=A9meth?= Date: Tue, 4 Feb 2020 19:31:41 +0100 Subject: [PATCH] tdf#129575 DOCX import: fix table style preference MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit handling by recognizing docDefault properties instead of default-value based heuristics. Change-Id: I3bab9d85d77d0e5f1c357121b1caf02cbe4899c4 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/88457 Tested-by: László Németh Reviewed-by: László Németh --- .../data/tdf129575-directAfter.docx | Bin 0 -> 18625 bytes .../data/tdf129575-directBefore.docx | Bin 0 -> 19246 bytes .../data/tdf129575-docDefault.docx | Bin 0 -> 38088 bytes .../data/tdf129575-styleAfter.docx | Bin 0 -> 18620 bytes sw/qa/extras/ooxmlexport/ooxmlexport13.cxx | 3 - sw/qa/extras/ooxmlexport/ooxmlexport6.cxx | 6 +- sw/qa/extras/ooxmlexport/ooxmlexport9.cxx | 65 ++++++++++++++ .../dmapper/DomainMapperTableHandler.cxx | 79 ++++++++++++------ .../dmapper/DomainMapperTableHandler.hxx | 2 +- .../source/dmapper/DomainMapper_Impl.cxx | 19 ++++- .../source/dmapper/DomainMapper_Impl.hxx | 2 +- writerfilter/source/dmapper/PropertyIds.cxx | 5 ++ writerfilter/source/dmapper/PropertyIds.hxx | 2 + writerfilter/source/dmapper/PropertyMap.cxx | 28 ++++++- writerfilter/source/dmapper/PropertyMap.hxx | 19 ++++- .../source/dmapper/StyleSheetTable.cxx | 17 ++-- .../source/dmapper/StyleSheetTable.hxx | 1 + 17 files changed, 203 insertions(+), 45 deletions(-) create mode 100644 sw/qa/extras/ooxmlexport/data/tdf129575-directAfter.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf129575-directBefore.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf129575-docDefault.docx create mode 100644 sw/qa/extras/ooxmlexport/data/tdf129575-styleAfter.docx diff --git a/sw/qa/extras/ooxmlexport/data/tdf129575-directAfter.docx b/sw/qa/extras/ooxmlexport/data/tdf129575-directAfter.docx new file mode 100644 index 0000000000000000000000000000000000000000..c9856b02857b489c3e323fcb13d5d54811b80c70 GIT binary patch literal 18625 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 literal 0 HcmV?d00001 diff --git a/sw/qa/extras/ooxmlexport/data/tdf129575-directBefore.docx b/sw/qa/extras/ooxmlexport/data/tdf129575-directBefore.docx new file mode 100644 index 0000000000000000000000000000000000000000..5e75ef1be5d2e80c78d4089da48fecc81fa28b50 GIT binary patch literal 19246 zcmeIaWmq1|vNrtS?(Xg$+zIZ%9fG?Dhv4oG!Gc?Gcb5cr2=49S1PT?wjeUuIcLTs!@;u14joy0-yl^00|(|&$ucR1OTXp0szne(4g8PcD7C? zwodO=-0e+1=rX$5SQF=hgHmS$K!Ml)-|v6%6R1m)d)Fg`9DGLk5@K2z%;?5Epul(U zpn}SB(Q+(ru;p#yD)ewCPs1kehgzLNc{0*=R?B)Yc78jZW(~t)aR$rr^#?r|Rr{2! zTGjkFqq8&}gIHz)}0w}y>*SG60)7{n$jCraJBp&P+hv3gsP zP$X;p@b@O2KK%u*(1@NI7FCnygwoZ_sr+73duinUQuM7~(C8}t!;mABL21TPA8XF0vosg z+KCh8L?_yl=`9de>yGKF1k3h40eFXz3{LQKf<8T|#fK62%D1`%B^?OGX>kmwf zKezv9&Hsx{__wN;#dllwGQ$g<1w02#wks}nW9P{;8BHudl({iDh=qQc~L! zs+3=>BbcCN496SRRIoaQl_55!XSGJRPvtP7=}nX+%?&-SH8T@MMx0?8Ebe*RJ-FH;>XV3Q^g8>0{f55B%cmK)~hvj>jk;U#LpG3C#9h9>9 zX7cd@XBfc4$`fP>NgK#KLATFv>ZQ|!O{&iwD|S3%Ob1r2J58{>{Hx2=U?O@$A+lk0 z8%pIDv~Rtf$3Y{6lX9nFQ91lgmaZ=iuRt?}T8z^h8bO+=)2kq>eYTe|5hM*nRswPp zr15BCrIoMr(1~&(JHm6>Ic1QNv)mwC-x!#xD|vI=o)g*Ws@j0OYr!U`=0oeoL#DuX zL@$ISAOA=YV%&HC@MQJ*0dp`Kmurv6QvE4&+)bfistG(59jj-E${*JlF}UIAE3*t^ z=mM1}i^j}l=9FnDGhb<&SnODV#*h4xx`FpbpD3{U%HM@DeSHrSS6J1h5jyr=R6r{B zv?tEsJ)!8Hq-|Trv|#y9%7C?Uh19S%?K;C`N@(v(m?A-7v-$59D4{PXr~wH8$h-#t zP=HtbYJtDEy<;64yF4!B7w@U(kkGSMzd&SE8x0D%R^0>n(#6%&!2~e*9t`F;@>8dk zf-yG4Om%Y8wrBa7YP9zz16Lz_97#A=2Uj1{>gE!$Scb)uuO=I`*x)qL%_8D%=1=;e z)+{mnjZvgD#3kmy7|O=G&pJOY!joZED5ZrZtHfdS$`MAF6(B!UtuXdb$VpwWM2U>S za$pgOBsYBbA`Gc(H{i2$wH{P+faPAr`8Jnd71?sFfH!PGiMJP7B>I)~eVua8 znc4$X2|pESR=*TIVZQAW-E37{{pRO-LG-0(K>j^rwJ32*oZy+*1LOg6bcR%!er>(5-ubjSRZ~fxbJ>u=hh_-EG-hUL? ztQoH}*2RYJt!o^aph?OQPhuri+2}i`My#HJ6G6C6YZ}(9 zuUPd0yO!-44wYJ%UBqR^ZPi2b*@U7)Z5I@sh9MuKT&t1=fzP+kwJiJUs_OW(?NYAm z^20;gs%AX22stlS;z*yfz8pEAGSy6RuB#2ne2Iij?O>|j_mJK*PJ%YS@QgM?8cP0B zJ|;+2$OTG01gM^TfR)^lH|B2d{*0CD@DwVvY`Cbv$IWesv&Rl)# zK(NRn&K3r|EM!QeMUM&o81cok1tqYzEsD-CRt5C&2V8pWd4-Os)7lk%smCFS+=sFau)vKtE<=$Q~i=|2Y_7f;C!q zDe`XTu7faY+$lF`!|~Ot+Z=r=-u5Cgz{0muN*`}d$#Oc__z z9v_NJujz1&%)v@mPK$DR`aLw4*)K$fWnd;&mSEIn%iK_w zPo_LqaArBBFPmyLd=wRNP$l6>?1(%0v8uZaKz5TlgeRW2VAUD&96!TVdDwghN((V; z(oW~+_r^^`u;wW%JWU?HI6O950V6q4RHdb%axHKS2Ti-bU%EIq%=jzndA5V{8V98) zeV}?@HqY3;Dt!+{8-cp;3F-|A1)dUbhgES!kwTlzVX%i{F?u^6QC>1X#kbsK0g?~7 zm;y8ehVP$(xDgAuWCH^FATGPqe8mSX2-l{0;LNDLbaVT>`SLa?Ys^vsBgU9LknB;p$<8a1(~+lR(LHCt!n^N54E$f1k3k> zZuzy<$p@Jd0_Xp=C7c3S5c>=K+=3EW__85)1AcD(jL48;q2i&MVnX=mariq)1M%prfQi7EWTAPCYcu%6T%u>x^V?z}E00Y3le2$>+Tv)2M8-+_+M|8zqp zw#K%0P9`6Ixq@ZJ z_dd@xmaGU6`ZFXX;DKe%v}UT2j9Yxg(%Lx5bJQ^)!%ZsY+{p!sX^s1E-egLXF&PpC zBH3<&6vxK;U}GHxInzSv6drVBa?i=y2k&tkiCYpT`O+8r_^bO@Lc25A32Q*AxnK`< zY67xz@c5tD9grCDRH9~)e}pa{rLhqQ4mBNMe=e9bWfyiyL9DL5F`sX_UTVX)ZnG{) z_nrUBgec!2K;0=T+mC^BfGiPXMcx+8ON;4TKlb_~Rpmx;TRkHa?i zlY5FH0eB9$4-PDR?%D?dKcbNTJwz} z+jpYWf#%rFvwG2Ys`a|c|9{}_%?Aa0GE{CgIUYE^2xi8e^O!~o}>|PAu zBU(ANsqjt$-hS2O!J?ncu41kl``+1!RJ%qGqbN*b1)f=3j(BYAeq%IgN?`~d$wS`f z8(S~GQx-mHk^!Y^LD##CyThW7vj@vCSi>fLh550&QjGSIX;1M0nR=r=Fbdu}rk2QJ zpKZc4Y;{OdrgK;AaeiPl^wgM*sgT1##@c~bpV=%b#5yLG0Nk16yZnSVF6k46yDJIZ zFC9nzN5@7uYd>`?#IYB?u;6iSrTh3n3rS6{fsMc~gW%vE?u4jv>Tz&HrRkN9D#})$-*TVy@%c)>IE0%XpHL z6Il6B)|{_i$4q{xR`Ns%)r#F{avl|xMQxMwHcDNBp7?d7Y~k1M^d|%a3Hgc949+sBDh29T0jOi-|LEA<#K73Zk>y`TJS>02j2wI?*(S36@hG36F*H$3 zCT2m^ehdtI(1PA;dO-@2k3WIZ!cV$*LXHw=-0NxyZTw`#r#x57H)YP49A}UmHF!xU zO-}sfSvRUeY8#A|TX`-tvJLj#>F%Ccqny?*vO&Xz#g?1+5VDSR$zH+4NKE~Kj&$^+(+gjhxRXJ(hGCSguuJm8c zN{rpaT)epTt;K1XEn=`w!0Tx&sERp7An}zOWi++)EDU-YNFj0*0@yneZ9AjZrtGWn ziEmufi|cVWaZ^U*kGfGc0!)$k#JyK3EM{q5vr_vcobttv-$ciqH}7VPvRd2*`8cx? zA#yg~dm0RRxV{fNs^!`d31tmhHR0seR+;EqpfMetmU3gxW6hbesHDs{H&8p zOoE||o`_X8>kC4!W#Jn~IrBY@`*)0sgHrd?VfwZGrQBmp89Ouy{7&^lSL_plr%-};XsG^Z1P1WjJ_QH-vuIbS@zXNX z0hkU|`!bah+HwzSB|CleAvAn&v~6^5jH*yr(Mk9MP&?pT#PuL2EnIw(p4ptFc{EB zQQM7VESe-+RobZ#6Z-M1MDi-mZPEeQLeesDP$ICkRMo@TLl24pwhIM+BYjUJu6%*F zA4jK_vfiA%xtC6yffGOrNn@|3hUdVZy%v!-4uNqB)Eoxm1`#|>XdM!Pmw~`zsI(N& zGx=dyKx}9UV-r?kCcv#Lj~sazEFT!)Uo~fCt+&8%j|WhWXtHfwI+%m?hV=bNL_g|8 zV}#cprR6zP3qBMa(Z)M#T5qr=^E8ino_^xe+HA3bK#j+Nd5$-GGa$dxgQvh@&3L%B zdf+t2&<0}CdjsKh*0bx;JAkLqXZ}V@=*SH-j)qudtb%I;53rU>*#)mkW1=qpx!9x` zbBkB!8ldkVfgu;0mTw&TvCG+>4;kGG#4TcdO1@!xIEaD)PU`)HN_|_5GCT%LK%3j+ zRzy+EhGq=KQ4 zuPSuNZl$f6n5RnJnXI{? z8j#w@WE?PA1{siG{GQo-?=ncUeaXgPV=hY1euoo?A3{z7d%!P1+V|EaU1_+|a|TQ2 zGDoR6ULOj2NOkW6C8V+r4KvXDbTrE%r#IJx6Ev17#nn21P=5Kn5osm!Ce!*m@A<9c?1)#MUU0hI zH~}N*r5jc-3bIRaiuI(Ze_zw=4jOYuIaqEX@rMbP(MZ|@sUXb|V9d*I-C`LklbF&W@L1tSgIs9MH zklj(vAoM&I1ulB#Kr|jiY#mNI7Crw7EbcYB^JV)Do#1`sz=jTo9$!QSq+oW$BuXQkyok$-Bj@XO3|+ z|7I`gRc~y7t2$~9g0Jv=(}cG&{B6~JJQBMQdY1xRD@y^^%pKujw3dHzvI&3 zugP#0?ryRjc`2Y=OgDYZO)L?3<9t(L^@AT>u2t$3Iv^b>jek6o1==~M;|tYidKXcf(rhe}c)bz54GCu2hHXli3yNzqLr#X>*4FCvy5*2BAM*7E2gG45=VF2hR z^aDGM|8eO*m^e9E*qZ%v>FYGL?Uuwbz29fQc29i3a5&9JF2Y`IVB91xjwcd|Ba48x z!&Y)x?ti)C7YR>hAi`M1{D|t_!F@LjFLCDcps22XH*jmRq{H-;*UrHtt&L%5_tfL! z#H!^QOZ_>PT}-V$s#%XO&HG|FnBXQN|RP;rbu7A`VnOWStPl88|) z4vz>bwCn2S#SwXDN2k28c}`b3t6CcfRhUy9Kd}fTg=C*Pn~yhDr;(#1oC?!fjT+nl z(y3Dp5e{tMA7d)B8r$wBZ;ujZUw-uG!Ib* zQ&ndN%8%ZD@*GEco|t3(_JN$5jd>Ts0)1tTZO!9D{;}Nd<7t2Cu7X_@e-Yx?307im z9VHPZovymKt+yas?c2(3rca|?Yqmb_--g;f`%3n+Q z=zc1^Yq%toEq+*3mKDo_6!hIB#1asNhs;eSG)b0m*8LfOfm1g*prY6Ya!Ku~CHHv- z5hW5Ij)2AC7_RlZS!Nhj_jAbINsDV>Ug683w~e>ZLuxL*KDdjCqM2X?mX4b+HwvBX zK(EJqgUB@EZp6nI$l%2O8$&6|9kcDpuvzX(i*R)&Ge@9cMP`5OASn|8DQ=cps7&g^{9W;;OB+w3uG#d;2<=nADnCot+)H+Z-fK zZ}WqB;Cnsc@rjS}*`Yg5w^R-`-3tE`A_gzh4PU<-DBgp4iO9Q9s# zNqC8TSbK|{qWTyzTKy&)l#82cr}5ZC@<;546zB`%5e34YFnO+U=x%gIgjm8CAbb)Mc7OcE7(P##8;t%uBusNvVrf;cn?zuMMP`A{e0xj5VNe#)x z^2kudFBVb4Bxx3-rUDN9)hfxCKXX2Q5LIkDqA2(VLHOC-t^HfqG)Wo+PK|G#W-N;o zY6g{}R$hbdYAt#KZY2RlQ;ci7l0HcEJvc`ZoMfPD-jpcp^5MiN7W@Ut2i)1MUgV8p zw$E40qP2h^YJRrdj{G;Go=fWFx09upV7MCzJt0yglT8oIG;C=nzLJD_4GV+5dkf53qP8yGFg{|AB3GzK5=P*gPzB)*FwY1Hy33`Ik@J&gw63^-vb-P zRyA*^-we-v*%xx7;c=~_gdrp-C;8BnrNHd{NYRlVB>GlOQIr-X*FzXW z0;9Xkqo$5H}YN_Go}L}jcVio zgOY!N`7-HyWTU+fBo*p-=3G#=+%V;U#bjv0&1pfuJQ3fcIQs#KBV1%IyX;VZnqW1%&G$SplzvUf zR`(+^T&E?4B;5?5Nklob>E!eU#Sk=TSRFn}j1(Q?1xhSW%jv-ikmdyWEL*7MM{LPh z9m2}c4L#-Z1!pnsRcXZcFO~DB9ZM@La_>&x?3HG5<(923zG-c7=G>%fG_>jrF=5@( zuC*$6kG4i!!qH)*%C4*}m9|M9@6zD8X`%kX$kBSy+%kH+B6aEzBvumi{rQ%Bcm*Es zhusok3(UtVO-|jZ5gC0@0`6hcdyP5Pc0p@SR`rDMgJu&sGy-c&Eb>L?d}Sf+C4<8i zG2h)RSS#2^m3-3uGu2(T7>!44=A5V7$8Mu_m`X2g1!WtH&((}?f85u!=Sf6HV`o-f zPz-09RXyI@=T3gQwI)cnI2PSvjrweESQv&TH^#=jsw3z!pk{LQ>~V3uzu($Wx(KEG zvFNn=;qXPb(wBUWk~2 zEfT~HOGE_q98m^k7=$~nL1P@T-EuAud}1=WUSDrFeEzZ1PvpR7GJ^*Id|d&6pKigg z<)jZz?$-aB#hb~L`LM)=I(VkdzUEgjeN0llZMKPPHdMV8Wp#DlH?|EQ7u(M+WiCY< zeRY6^6c0KJ9t62wKJ*Rq+Y3rpXR9A2#bu13&$i}uX0qx~c|v#8=rG?j-i}kgt4n)&*lqNAx^UB)eTP#{ib!2L%_opff8^oZ(x~1qla_Eu zp*`t;rc?EXiv3k%^=v2KOQTY+kN$lePiB#(mf*?ByQ0AaNaaO^1;e<3>-heo49xnv zH9Cudu(IOhgHlV27>+s#HOepX{dJ{oMOU&Hj`5fTrY_Jz?zkysh7pexXR_0zVVk?P zB~MJ_9KK}u`ki3g7Y8>VyQSZZ-|t@~i{f**_l5`>Tu|u7I;*K~8o4WT5T(Dn9LJzL zr1jvVP|YYbOK4@=3;&oKGl`Xqw%R?YEM5B8CjD)FY{y*@A-x}Cxs6KxQ`~0O*{gg_ zEewNRhR@08{3W(`X!4Xh5lbHon&#^?pJzR44h2f`8d^qG_XO;}=)|2BL?F?7XMeL9 zb^t^a-HNp(#{#?j4u8X^+JF3&7&^9Hq#n#=kVvw zDsX4<=gtanN1C!9d4jTt!$ z@x?-An&^d1$v#;}E@UGNCouUf4-O#jQk?aR`?Mjcptd9FaC0^0@N+0bu9!zBqx-j= zC0Q-6A{-`f(s=R=EM$!-58cJvwVnW(mTU^9w-%C|h)|SpP|nCFq)ADa>Y>H z?zIeK(I>dsH0Na$Lkd7Lc&OR}Z|!i&x@)>a>Mn`sK*CllY9k>HA1Y zaJ3d19+1vt1LD7SYP)@-?<|YH1A)Vg?#FF9{5r|n`w$;k(-C2||0DWBZ^m3Epu6&n>(8U_ZA zA|NnmN~p&lcHQT_X28Rm-kko6>n9BQ2~?qgpv&6q>CV8QOI8@T9WzwSp>cBh#LrS1 z)PlTCk^6?-Slt_i*a$d7du+x{VTHvO9flM%pFv61Os=!Qo6sxFIVrS5?I>%7KYn5Z zDCq=`f-*K>FeZLo+vn4m2B$M_1=Tqr*BsEuwz4WUaFt2>G2hFH6Lt`90>dDIn_}A` z_WXDQ9hK74NQcU)KJU!>t-2-mfu#NY+~i43t7N57bP+GZl2)5p!;e727f90|WTr$G z@fBAMIYX|V15mdEQ<|OwA+1rI5rJ7daRn57dl$CDqo7S@?uHgH;}1hqO2PW$jw47+ zQV-1g&{Re*(@A!ad%QSTxnpkUbw<%MnuyKo-%_z|geiDpj2y@SrAAn+rk<_qEK5eY zUuC-k6FwOdsGIg__boIqGn2<-How9|&c@+5P5KX~p75ti&vxQ-K6i7e`ijn;g zRhr0qA!zFcfyEU@MbZIS-a^reW`kjnPWZv1>Yfur&WV{K>ZCF-fM7 z!_TOY(=L-O91bkMafS;0n?k`4b|e!NL+LN7p;jzHKiCroV9^B%bp9s%N&K(-f>qH! zMK6x^M^yPYm+C6cHMEL(44jJj8ESFtCb0Y^{Oev-vOzx-2?e45tI8yXBZBEa;vPBo zotJQ4N{e9X?R;3jSj=EO&o}cNb`j1t42{IIx9=cXFNn-MOIJX}-2@YmXPVI@q!c6E zO*mIPy?`Au?(Icfd_LTFqG8Nmaw&M&2xzN>T@PtUUQZj^NF6>(&i=}af914-TE>Gk zSW{^WQ`p^Golmz_^9%|5IokI^BW*I$4Dzbly8Kfw3E}W$8VUYJ^+*{`4+!D#VA_Tv zdHhwwP23I_f$Muph(H$C8E7g~;AFmV`Jxj%Sg#rzYquIdu!ysQ6cnKZV9iAe(^-o* zOCj{a)75)sr@?5HkaSB~`Z}cG=4KQGQ*)LW81_jc08g(Z)P7ngXYXo~K~Nl15=l&- zv8V0*B_RQ!tKSQ>?)y#R5R!z8TBRfcs%9x^ACIfQ45TtEAsLdhRG`Q!2nH{kiS-3u zk&zFH?Fu}tX&H)}prt2vAQh#g!8*v$!zQvEScbD1Uu(Lrz+f>KJsU4>UzVJ$R=(S0 zDTOsETctWKTa`2^D|BGdw;sfvHvyZjXsfhUT0l~=0yZn#B^~u8Ir8VRVu{1-RPjuc zQC z^8O=aqXkmGk@*Yz>pmQ2;}wC#zl69+iwX=U{I`0KqzjjFqEG9O7GnKIN%ce{&{c{nPS)x$)clhR%xR(-J=L14?da~r4`(!Jp9~TUYs_|{pY!vS8r51=WSNA z^8{of4$Wj1?S4#mJcx53xlrp}684XReS#;jB*a*J){qpSc53wu-U}NtwSjEmZ$YvB z(5p%?-`ZTdXlL%q5J+HAi|(xgvx8R%+0dD}I4iuGlI?OCPtKCRBcy;wWWA=^}EUoqL0<94!_cv`THR!WANh}ygY&EA7LJeZXZ4`@86T| zLI!JlTlBi-GkE1xb~NdL;^v|HFBgc%+drDcv2(QENU}@pNtfuAtdU+B?QVXvYU8f` z_-W&|MTD8~GC2u`!DLsFkaV0ri(uL5g6du0C6Tw@VmoWNSz|4X=6u!&Zo6Ctnai1Vv_vq554Wh*DC=Bqg@=tv&ap=L=9OBe_K?+B9( zdW=+}Xg@U$hJ|U2^3tg}_?b$KVky-bZGUwNY2#5)VF8VwAHa4Yu9!IzXn@Lfhl4gH zMnAy94qX-Pya+udsarCt{$88+ew0=$czQSV;QFxi+x^J^C827qE4@sxiB*<8$!C)4 zmDSa0CT3X6iKs~J1jWv~A0bpBCn-g;Od{km$!L@Jx9lM+kPj{*H&U6U+O?x;DCORI z(1{HQ&Cy4Y$HB|WH+`PWdXI3z!NFGclbp=h5|z=WDUQtacvzKmS@1ico}M5%CK&6{ zj_P%aUt5})Z4jKd9AED*vo(`m*5+5pL~?ghPDm76y+ZP(f;uN+t)Y%JD9;H9__vPb z;W5c>kHd1FD?P6MImGP^wjp5`a3ZoS=(m+;TW1?X6Gz}wG-&({}gjq24O zxMg%aetY41Y&4$k`d-JZs=DXvZ95Fr^5t^ZrL2#I=R361aj0kU9Y{rMH<{iGeybjS zZIrvylNiCa@2l=st_DHO8-U#nG1sN84Erx!h^N85Uv)GqP*z$Ra314cvDeZ%c&~|w zY^HH-pY6H9+q&{P{UEb(6ne$L!xT9#nbAvB!s+F-_6I?aDEYQkg&;A9e=bQpYQ?w9+Dy6IL?BN zM))GVHNGkMq}?kOHVwbY-$?^9JLB#7Oof9t%(L@(eEJGwDB;6BJ!0qPdK^g>d?&z=B*ejSB3i=+<$f?s~UpE>TeQ?oSF}XfA zg{-fL>xw=oF8XYg8XjWPEckV&Fv#8Qd{D$c?>^j_BPOz$E)g9Vfxek%lME^aMw&YJDVimUsip2BGzQI4T+QeXlD5(|k&8Us(ND z@46ejK%9b1A%57D>IRW0TPt6rlcHGz*}JZG1d?=Qn2)7H*Ur+&$;lS2;yl5_(4o%I z__8-kC!#Z83I=;UO>#`c-!V$ykhM-pW&#v)#w74y9jQb%CU&01MRKHFV&0%9GJ3on z?!ONPzi|_JdjcNlGQ5xQeQPqfrzs)FejoNOE61LAt(WD+y@M(omkBhMRB`-nLOUG# zlc`&+Tk5S)wRwtDQBZ#kewD^Di2lbg6$=E62$793Q=&`9Tv;AK850Y6d5$3pX{@O0 z#D>O`M6|t8x;pW)kqzUy@Gyj$dztTnQ?RA3b?-9hk?fZ0TTEV(%@ymGUH!w9Bitj$%J-cX*Z+3I`n*~EzrE+T}ryTV1?BKi@>$Brhsj##U(t7nIQII?$H3bA@o1<>jp%0_C$7hFZ#`-XJ^d zn1_{9mfp31&%igAjh6N$uTV{;AvQwBt`PN{A|1FsLAMI#)A4qlB5{8Y><6A%M6CKD z!cz-&{1U7D-S11Ypm8MfXe(Jbt%VR#5f<813mK>&T0eKCiH2FZj9?#3^=mD!%i=iYZO6LzrYCL_5^|1`sPyE+Hh0mJySO+yf25( zDpt^RVU5qvb_w#Auy(v-a;QZb_W4IegL=NkPz!ozO~(N3yVx2q>%DrwH^i#UuZUG( z)|pEnF23cgyj{Q(Lx?(4ARI^!6nZa2{FoVupz$J!HMzk|P+wHhU@YD8I@Az?0B4H5 z^J255Ie-X$ORkDs;3)>+DYJXaS(hlaqF|Byqd4+|4d_HI{%zD##a_DpddpUsw}&%I zueECLC=XD0hPWz2KEu%k@?W34{^J~^lOVT84^To4j6@;?CRG?Ye{iz1(Xg@pcV>l! zlZnl*h?W0Ks{lTw|NJ7ytHXhLIFRel>#N=7b{WeGLnuWuG)}zIh%LAhQnE(F8kQDo z9lM2ePW#khuRj!9+k?b(S!#>Svr8-$un7B6cXeYd{QOl7d2E$O&z#x$4F|I8%>7OH&@hfl;(?jkiE_Q&?qr6-f~cJETBQTu zW~uR{B)woXQvJc27FZO2${rK_v_v(sGb zcT=eZ%-X|-{mp4M1?J?c7#Lcc{B)XU66InRe?E|;MdY4~86`IJyRU?0*ZZHURz&f!WVPNEu0^j<~t}Rmm+bPJ#2PRQ&P3zd|N@wRl zSFgD%&T7lhRy#r~C>6xB5Zh!*4#B#3m~Y-aeEjB8ttwMrFyZ@T_Vfrb54I%7Q;X8# zgc#&GNdjPG!c9VuIwV{gn$K=W*i3J{WGWdA+QytixCtykKSdSEb)z%DliCSRQ#xvA zEKdtt)ls1p z;rpbGth*_6?J0p=^!XNE^c4YlJ6hoF4(OX!;U4Fq@PMO?QOV_b76&H}a>JrNsGWhS z^G4%|R8dMmKL#r68pTIVHcAHx2jC(n8OtXa8`P(fxPO;Wr^pp(3F1 zN(0Rs1^5~VCMEr{S|%eq$6pN)m_hn~330$j7a6Z;w?vHWyGC^)NW6+>AFrCQqfo!{ zSZAAbXgR%#t%HV(M~^sv(@C^Y-75Mq)%csh>DCoc5f57G+Yo%XW{qsxj?!JUMNum@ z2S)C#_p&gM7WHKrK@2A#2L<={ISO(W86lo$xaZw~c=MXnFQzhgBy8M9#kUGFI^sP8 z+X+|o@GRH7bCS-ny!v!wOd1GpEpf7;t0)8@e62AVSX}^g z47hT_fAaad7}(+GI!VJlU1@Gwb<|?gNI0S4GvK}Q(Gxqmg_+|<8U!Oq&7C<1RPnTc zKX$dAoP)TXpM@hC6nhh@`SC^Jh4{Vm7voUYSPU96e~5Glsi2e3W(sfNhd&^9CPCq3 zV3{L{*oIGgAx^lCSw*(W=Z0Dc?Z_p(aPhpuB-NFIcfG*n!Nc>T1F!hC8tiIf zsQgfE*aOyRPlkbqWc4p9_R;0qD)Xoao@Bi8Agqo?a&9;(e@uU7kJ zBG)JNBiHMGyecl(^3q{x3}kv6U2N@}#~RJ$FT(LK+FLY2U!sXES9IT(7n=IN;3y3V z7JQYCg|zwNLenp9Rn03zMj-~>%#EBU_3$lEy!VHQjz*7p{86UsL2-(zbCEp!``ig; zF1Q$DBxsV+tF&&jIR9gvL_3=n(e%*9xNrWF9Z=6HAp=3I%4<)46PlDcBuNjc)8ed2 zgGZJX6R&{ASFmI=fXx*fq~Y`r{I{$5UsDeqA<+{=?m+N1p$esZog1e*YYqf}&*Z;f zdSSI4&(gqdHwPGPjr{vd&%oaPXQ%sr?>t~L0{)g&2Kk7DEw&i!(D#^SYVQ z%w^OqS~E;t`}gwhK81oefNs&t*D?$o>$HC)vkSPwmNY`w=^3zSAiYfBi`jv-3I)?^ zXsfZ$f!t)K|Inzhk6NkITrsI6K!`Z*=tWwGp(fEmms*cOh4;9Wn?#q;;r8B|e_pw! zYY~rFh4Vm)wHSZ)%~?&2J$T^+d#SR#t6y6Xg}5{Q73NnctkU8Ekxz}1dKJV%Qp-Z@ zxa|q730`H!#fSqTf9$>A7%cYL@U=jooD7N;g&3 zBht0QUfrVDGCks5#h<7=zbEkoBZyxmiz4L z!s$QHXW30YVq~47!5?!p9OT5b+V~!yoreJaVO}S2oV#PJ<(=On%zx|;1e5{zcKYWJ z(fq5m{k8pv&(bK!{GH(M-@Nz>3INOjJ(=IWfbl2r?;ivB9e4|T8~l2A{y#nq@F&xs zN!@>OxdChai|O|i??2&xCgc4De+9<${DS|Un)fIC&rGks;2Xd=;9u~+<$e8$|1*o| zFML1Rzwy826#a?*Ggsv=bS5x$<=21zGjrunia#Tl|Du=z#xnn+_&tvKPxzlPP=CP( z$^HZXpNObG!GA7R`~}u#{x|q_`=zYnPYWchO>`4>+tFx%+g&EdCk<)8S!j|2Wf1IMKT0Kk8Z3jT!u-O>6TelGN9 zC4RYGe-ixZ#Qa4u`}W`W|A$NSC&S-6^}p}{0F=mYHTZWIuOI^fH20sQZd5=VH~t|TlNx(VJr&jf{q4d%7D+5DyICWhX~^~X#bX_GAgq3+HuL}D)=Ah z{sR+deooK-gbCyS5|g^feg+t@?f31?UUR#wb%im+5@||jZYj7nEOAL0qj3#Oi>$MPy>uuuJ-C=n8%N?^1A|hK zH|NL|1tM$=QAKuDE0Y*B>PZYK;}V=2ltwwu^_SM<^Lj3wi_hJF8{f;|f&#oTuoT|^ zz$B*7t%cYP65~KL#1$P4s-*VK_zRO}51~IXDKCqJY_ocp^V*YW85^_{r;+KrqQDj9U?DS# zS9|8$&1>|{c^cN|7cz*j>j?%+bX^(9Q)*J-f zn0KY$UHn`{I;+oOraocK^<-R*VfTf*ffhE9eGTUr+{5_y=>Q8m%BC;-gm!Qajf!VW zxiZC3fOQ#o)X&P(^47$<-!*$(nwZ0GM*^Y0CY->RPhA#A5} z`bxh+{D@>4&4^og5d=u54exdoO~g&8ZQ%KLg!E_3hOI~L-qNM*jkXSDD#3bsW0kDv zxiJKf>tTWKgQ@HLopNSI5~<>%zzXL0Oc#Wen{UBHgO*5W7D1Aen8x z0TPkGRDCsuU1{GS`KNh)xo&EW?j=_3?76#tHmCAY(A{WqKG3^pW=_`+iCi~e6M{+t>A4hx$pUbsF6 zn9!YyyvuoDY^D>XGz4XO1fg=V@;wSR{#IVfK)|v)qt4tq;+?9!Qod7##4DH_j=62h zNwrRET^4apmhYCUz~PxZniiBT6McnEv5>~~E97vBJ9R;JvR1G|tBFJU_(hMACo3Ce zyPVoTCr#3YeiP!^2`NB zuVxZIY56tG!B-(&K`ZT@j>-4r%W#reLe)P)bVE8~K~okb9L*_xp2qIy?;9rIxVLH- z9{XcgLcAHyEh(S@F*zr*9geUzb#w2;M}$ov8~ zSmbSB^}7NQF)rE@F7V0M9&vaV(Q-sD`o?$hG+EI`#F$}ZV!Uf@tRVmzw zQYUgcRT(Ay#4f!G%S?E`IU-&Kw}|tSclb0Dvq$R$6c0P;OiFv`T4-5Sq zWT22o&P4G|C|wyGh{#3WQ6dIlL)8_$eu12X|0{SjCP1uuU%-`peZ&3-@cvvy|J}T3 zR92M#`l$G_-|*A;Y_;_U3t|NOlaOR!3i=u5ZV^B9pNumS~01vv5&9jllRfOas{324uq;3dIqL3xq8;?>n4Z{>RRm9dH zlK4d$%$<6d)S*M0Xv-h{>dORS=DUu0|7Kx_^=g1Z>fp$GJh*Y3?H;SeiIJIzYsgtN ze~T+&3ak_8nA*ygm=8Ufa>|2_bC{uygfc6K@kmjF)2Tfk7>&*Qdg?WDu~eI&hUqXs z1j@d8iUVAIK;Da|0aRbiJ=Q2B-t0*mFwHMa8)G${2e5Wn94=-}1@ek3uCpY#Ve@Vu zj;OP>$DZ1X8M_#PT^fAyhY>RdMYnYx|xxpN>L_vVrO}dbvfS*!?Vb=GX!z%tx zs2vJ*>85eFqeiKADvVnUzK`cH3>5=&^EWZ{D%g8{pOc*@EWiJ@o@v0;JZOInn85!$ zV1I4}{@sB6NYs<=XFwU;0__$a^~!Ae*6dt~eU1-<6Hal?TGaflR#GZaOZ4rscmsjm zSk4=YeU$gfO^zw2D{|Hg(5593GcpjtgCKpZb=~Cn#NhyWA5+>yPMVZZSSkNx|Isun zQ&EnVRn0=<8$!<7wyh35(>>o=%}5qZcrMBK{8dSRK0mSK?yxcDP=%l!BK#=$?YjAi zu}tXWq8f2D>{?JBnF6YWn+64KsmqT|167o)UZFZI{{{}Yen8VkZ2G1Gk?$!-)9(Nw zoV4E>wC-vsRjbD3n9Y_0(ZGnkTlav}MOTHwZE=9GAx}!Pc<-= z*8(cFI_gMw|iLV>C0f zTwdI4yY8c5E)o6Wo?dhS0Gp*F;^EQj)Mt8- zBfa+B-2>{3Fi}gfHh&e-iv$|W0GPEec6u@5?ycRyYz;>du@hC!9)jy`t*=3}uPI~0Cz@ux;Sa@Qs|ERD6~s}Z?3}L8_l;{Q z(CF=VJ=znYw}+3ozHF}Bgz)e~)BO(#73V6!nkUFLI@j!gy_XH?HK$TP4@n>NC)!^u zJptOV5qRm)RfU8?R4#F+!O;@=!8P0>!4kjuh*3CGTq1%v&YP@h2+!!r>?ks4An z6q7Gw8dI#%tjZ_Oa{b!0sO-`bFtNrt7bNXff+20lsa;Y~fUK98iceAo|hTo%(aq9AQd?m#A*9`GKz=iqq{gaiSQ=FY@AsSwgH zsqPF1DdA_Q(QQM)O+ALd)Tvp}Y=5nNjmam8x+=`%=%1kR%BOoA{v@6e4m|_`dFA#A zz1Zl6x~)vmARcsazJT-x0sMt2F-%FgUEaMdvlv1uc|1yi1sY(K1H=?hi9)W!VrT6c zV+t1_MdSyvfDx{F5E#w`qYnN96V%`1LlWXO>urbLfj5|5Y67<_Uk@SZb3miXV`Uv$ zks$7sk3lth=yi-A;tv4Kz=Jc7Nob*hei8B=tj-(!v_;Mdlkz-Py)~7|=~{rBj!4Fr!p{K3M3SsSL&Boj>qbP9PVV*@H#D)U$O=*}WC|^^#A1L+2d^kPm7CAA z*E&de1<3JYzTi`M^UmoakM?rb?6}8MR`ge2vAzlZF%$st@ES*<_S(240}f77b8z2u zAhYQg{JNsb^C}l%d#GW@Tg`HF&aBf3c~XYF(WagaaOVM|Q>U0j*m)>ay?UBhcYwU? zF+$>F0=qocwy%BMP=Ufdc&B5H<>i}$CWBeS5ncv(GKhpuDNLV-ISf5*J}=nI;d6$4CsP*9%k%=o=-_tHLSRps`}2i|bhm?{63C z`VCpDv+sRPPQaD-yxw{eoBNrIGh4@+26Af!Cp>|a4uvlQ$tfLfq2*IDRbdwi49pUKn7DC4)L^V)WNCVG zy_s@hQjuD!e>L;rcT2F`n0?RkebtX4v_x8|a z2Nb#I>=%{U`%EKcvR}3VE?WBSw6&dR%O9W9m2M(0_f4(r^D$*S?Xb%hz?V&cPpkf~ zvOV&n6Duv#$oIH1vPT|;So?Zq0@%=4uB9rEy&k7BVr*4aLZd+vDpR*7mP?;})t`T! zasKtm9PDei_y2pAPFM8>{r$CD+yMdrfc|^?|9Eh&N|cobW<&_R3j8FT=;U6bBAVUM z6*-nQeg_n0dJV{gPb_Qt+@y%4n{N!mWA->2Wfoq{?8IH59%gY@@2#g0tee|}sjk>= z_0U)kloFbnKE_qI-v-Hixix$rAeOY1dPhhcLrJAN7VX0|oaOx{6#{>LD|=Q*Iy$^; zK=3YvyH`$Q$M9h)z-v%mRYqVtiCTJy@EfJcZcXs6bBTLgE|w>t1Kl-rl4xKZ-(+O2 zG}LfdDd6UXF%?+}LR1VGk6kO<_Wr5CTyrEI!4ltN^N5&{yn*K^vN!@ilN}#6qvkei z@`2Olo-U&Kv+{`ft}6I@oM!hw9Wbku#1yhX?@!0b0RS}J0Kcv#Z~!x?Guvw3!%QDU4#;qFwfr&75|Dps_awQ2EYFBC%Rk;RkLBT*&h0o13s z{ucGVn*rwy(VgJ$A?*c8mkB&}T~0wER0SFU-yVLl+YY>QdX95qvPZ_7+qMhfCt!pl zBc~6zDoQ@u>U#mTBk#`%5>E9b@#eT9y(#WKf4_crvn%)+J_GSHP5)Bh zdwj0wQKt=#xLFXOTQi5i8wmkjVV3PKaw-^b+X@0Y{80anH^MfC2ZdM=t`vQc$4(J| zr>`%cM^2W)BSA(Cm|weBcjB@S(k(^^-PAYHONY+y_QJ#{cA%Sv*NAl-1Lu*UjD>tx zKA+ip9XF+!ARN(G3gLLQzpVg}@k*ILKHBfFEMhZ@D1)Dbdn~p>b7*$>DSKHnIl7o#{NEYaNWj_ zE2l3omwEQFaBk@A!HgwG_H(A&?0m<}A~*LsG%B%^DIk+!*1-n6zNS~#tUiw6Ts}7bdJ$b1Wmp zvcqJ#37AxrX80SRj@O2$-?D*bJ+O_T|ECAHJ!hwmF746yhqbHIYHki4+WYu{^&&pK zUFhE0^S)7rU3v0~$vj59z$?fT0kyZ%zgXe!h1sIRUA>>76_RLp*f2 z$>Ni?e%J5T#R%CMw+H!zqwfJ*U)PSdt+5;48$TI5I2m+ycHza<(}^kWKd|n;&~pla zd$Ou#bi<4=)O>yQd)sv%1i<-x`i#WfoTcynBo`-trB$bsVaXJ0(l-nr-!bIk6)hyy zibdZ$FlEB`FzQJEbz>S~Doo#~LBBqZp}a4=iAdMg^82?H_mLH&Aw0)NymA*cjzp9q z6i$q0;K480-mc-0b2I`*^uTV;oal}N7(#}ds6nKd(7hE$zRi0kAJo}#>tJN5RSMps zC1ds8cq07n@Q1N+r;|NB#Qrra{0Lvt!l-V=dsSz%_!i z4E2kS3sjuuzka1VtQrgVIK|l$3^vX#;YR}1Q&U!YW?t7QicgTHPl}LiEV&0E;jd|Uwl`X z5NH}d#gwzV$OyMo$IxSNh6>3*zt?QljxFR6C7*{NW7R)6x_ zs!%{gk)2SuKa*yIQZxR=b`YfR4vaR!>x3zWAnD&ovLj!e$&lkwpZc~`%FYo@XqE{C zsgwqsjR@}xX`3EHj$Vmmiz6^fLMMyL!0R247Zi-=JDS~^YHRmnr=M3OC%ziw=Bis1 z(k@F{#<1G}p#8Gg(@nkm6OF~S@B0J&att@*###s^ZqY}$UM}UGyL19O?3DP9Fi=w^ zG`@cdd{Uo#oU;NOlr)n^=$F!ni&4*Jr>AHuIZy;_Sg~LIP zV+ZKZ?;utaIBgCbo`FnbS>Ee!AQ=YWq6zX!XD0vQqStKzU6nW+Sf)#}g|&28Kig`>^+55ND!3&ggTvYzL^Be9z%bokve|;p$waHt zeOJ3Aq6+Ga9I4LIUT(FSrFv!U;PpPC;c{+qu-;ghz+CQD-vKV3W=43hu_~ z?aOJP(>g}~Qh#d)nnRSAh5rUazf|;68Y)>41 zr+pb?P$O;#FB%R6hwD_K20o5trV_D-0wDLOWLrwPw}@(N5@D$!`*vWePge6@LgRDK z9nQq&>ZDAMyU@Kmfdz`}XS6!j#~*EceL=W#hc zG0DTEoxtjc`kV+nr-+DV+<3!e#LEtpMsbEwg8MdQMoMV(L>CVq;3-Y)?U+-1BC!`b z`D=3f*MTv(MJ&M?jjk`0q?|tw+mzbUGv+GD=YjH&GOFs&=zrz zW2&aBRq>RKg5bkScQ6<7NXkaU&@EG)k5Fu&C)raDFOO~KjIakTtp8^4!iJs}v$s}s z)Y&0DIocragug^{w1@&T5=nh`B)1S{IGJORHQlgewhU>WH=t+X**`a1o<(4XFd!z( z31J>)fE0wC5e4J>hBLzQWLFQ`_zF9U#t_XBugCIG*fZ<1-*C-a&8%>WQe*CoXNXaq z;IPdzFz79O&2^Z1=_3?Nq@+MsIBb)&ST3h&P$k$ipU=ndonb+#Zy~Z+9v*L}MphlN zGaq^9_(@g8mEs%L)M@CZ**?aanhES9LZq$!Tg^;DV3tm)@m?4t_aLJXCU*2fa>36- z;lt=zd1GT$zYFV!4(gP=C3%#_to-Nn9CKOltW?!Inv~YV#;KbnKQGK&;*WT79{FoT zX0Y0Lt_TkJ)N`qx@Y`-GlJFjB&glDGr+-C7sL-Pvzh0TYo z*SD{1%2#&IZZ^}~m1IGylOFbkq84j`6}VzXhPf7NkohY?{gr5B{7OK5C1x`N7VO(- zHDorp#;8si%Vy$;donxa!LLot<^VfZnw}G0z?sG1X7sHCY4w5|Cn~kC+r3fv=F}9Dj5SIFPz!ugaGpOwhBQe7f?PM^ zHfZF7eH+hkBTyehxqS`!%F+jS%LC9DGiIMviv@^D4Y0P+*;EOdk|0`;$s1<@&L9Nu z3g~d`1DkMI`&cQ}>zg$2EnjUQ1q@`wWM1t!_#7+kDfnAru7D#Q^42gLAiqXY0Z2pA zrUZ@jO3Xlg()w4THKx8mZ7@Y}HAxrDLOC3>NLI7hxQS{UX117ySt7H3f`E4Pmd~fE z7zZ#$>(X8KIqBQa0_s}?qHtjv&Sq=i)#q>wPkoA2u3cL}BLwrs719UYY%eR@2LGQK z84_p_;t!H(8c2?iv*mJVd2EgK0F7m-prxdf9YMc!LE`ObP0cHean-53$Inee-bi5k zXelWpX&D_#n3{tf+9Q=?Y@#mlMIb&FO?ld|Ykm-30?=CQbp`z7pN3glbRUFXMT31? zTY_L7;l{t{*-*N%27jdKuQn7@mMdp7;;}Vjwhc6o;@H8G8`mfHi|ua}PRM@txkrSg ztv;3I7Z`A(0cWziy4vJ^VnMQKL`V^xm&O`qsfEtEDErv^<^C>@7Ul_f;`iIq=@y-> zd6r}sweDb2iQ{x7ILJROcp&F0CC_iD#ws$+4Dpt@|HMfBmKtJFUtOZZQD2#~cbPAU z@+WGc%q1Fa}Esf=_&q_&m4 zVBmSvp>AIT%M()ZLaW|$xRa8XTL*UO!pc#ep2LhPGGMA$huluFU9QLd&O(xNmq%4=rb zHQXYA20o#0-zIl?c`cp3IUcPT-`yI07jI0yl32l<5XWzIm-d1GnL){Rg;F`Yl=^5k zcdMJ?oxh@K6NODrwdn1xedj$_F#kAGU7=>oXKU#d#+wN8-13kbbND?4!U)#DlcbNX zfs!@1(W3f^kH7wzZknD|ui-1xWj*Izz-p&bYBhjIt@+d3SUX{P(cX3DtwStUfzw~? z6m_y9t=)WIM{*|%dI^=?=^oTN-{XORR;3oNsF7|_xKVA)v($A}Gj6W5I5+aDw25V= z{%E%qd-6nPZRMn!gk=#=8>88~2lFQ_DJG;Il4W!uv*;QRKdbt1GCKo z$M9NTS z4Hq0{mn*E%`Mm~pH`spd4HpV#mnDaZd7WWKWj9_&76mul0fCLLrY=kQ(F;0ZOv-M! z|F_wHu|3gY%Fu?kww)=Mo>uRrm9@tj6<;c2pH>H9l(xeeR$g)?)%~@SD>l9DjN=dP zf1&j$9oA(@5N2KnoKejUcTD52UHXUe)r$5|gX%Bg|0OG}>~%e~?Ti5I56ux*&QDxerUzjW!s3< zxEj3LgLeMZBtEX>8Z3D-+Juo+a+OVmQV(rmP`$JbiqDhN>nL||Z->%_qI&fBeO}k9 zFpG-A)uH(YMalU?tpaYFdDzBQG!A)e+KyFir-3=KemYccKQSrqbZ`9p8EZ<2Lab=9 z<~;pl=;>paq{X&3Y#skuEp)%a9d)f=I6I(^gr+ti9P~MDi~3lal|3}423RYV^kx^d z8Lnqq@N<>{X9ikT&b%_Oq&0&~+OM8G%t-TlF8V>$C1TdcrI!y3V%F0J6DxTJF2+Hz zOEIuqy5MZbu1n#tT+xWwT%G}*7*1^F8n`QYdoD&_3<0oh_^gIOa7F`QxI^KvY=J>q zm9f^-H*H^AinAUtUaEhpOkLvtF^gr6vf3fk5fCZu45MaY74S4>+rut88y<+y$g#Vu7-|P9aPhZ{882`JH zpg-ha<>A&nNOr3FYn*F*L>_$`XlAUxw^;c_*q`+xzw88KN;eg%A|IG!^6Lb!Zkj4I zB5IB~2_3xio_Z6rvg0~C)pvPnEBl0E=+L;t(o~%D@-Sf|mL7~iFvE-Pr45S1Wbbs! zRh;$moR4x{F84s5Hmk*vw~>a;B6Yy0n0rJsdZV{yW!} zJe`>3k)=53P~CWpv3xyw;9e$IlHsjdrP)+mE4<+3^uGruxlva`HOmr<@%z0#_m9vo zMl`q_8l2(IGuxE)XXwG@0#K9LHPcJ!aY4RWwsJ$Lp`^kGqAG9V0&{;IE8zmNE09OQ z{L&(JJDm4Tb5km30;J!yHJ&ztF;TL4zUL^IS@d0zP5 zi@4)u%J&Iamj3`O>>Y$0M-aToMW|A0$CeO$wPk2kauz1sM&@~2M4HlT-!>l8(rQP8 z(srb`?GqegB3M&5Bn2y*kFD79Lsl0!tw%38w~$D#;6i!8!M$NIpZTm4$p4M3_Qvx* z%!$bZ3<-ua0L8QW#~q)s%ipf}fI}Z0`z=w}hlw@kKa2965IygLbcYtz#?R6!6`TWlvdTQzUl_#4? zb~&~5Bf*l_aQ088Npc8sepP$n!N#RkYjhS2GWH|G5{c>D2)0}kUf%&G+ArOx08_p2 z1$6zSES|uG7Z-j`<+}ar2~B&Kk^`qXDE)xpjkSlK6X7Wi(MIbbr*e=TP_-58a-}^i zo(T~q>q(#sE_@`R&}p{yk%{{?M9K{mvO~hbwT1^Gb&6u6(on+hM@ZPRbb0=n5y^LR zh)Lk-ybcn(ltFcb@Jf{C4h*^|>ZTgR0fEGePbkYQJto{=kxjtO7-f!_UM02;t z;8=PAt7E{3kzz`5&_)>_+CM_`mk}r^Uv*p!1^Y&BDi)~|;U4m@PB$qqn8OEaVaAKb zk=T4hySAgIUy(VOfNBSyMMC?{aX=xk+dd&7NTvW<25)QOKUlqzpqndmRmTcyILfWT zQmQ9yMGer;#}Xj^4Y-$t84@Kr4^xVZ^o(gSPh6`z_zibm818kjZP@$bzJ*v#H6yqga#w+ zn96$JOMP#d&kK(|NjJwxp5Z|$oZZxiEDcY40;l9HllEV!Skmuw^7+)BkhWH@tX&3< zCHyg3{z+PcC;N-%vvB&Bf)b4A`=}`m)(XmTcx#7dbPBrd6bC+l@`l-0Yz`;Q-MHd3*cd=`A|g_ zSp5}=CW-7PPjAT)E%=0dPhy#BZFwIvhRa}7OUtg$UQhT>6CTi8$?)jZLZ7hqvU&s+A_|nkkm(AFqBlK z?{QtxO2NwcWLBf?0|rBy!8L$Ymz*p61SLedT~`k?iv@kOoLV?wg2jT49TLm)4b{k* z6T0DSYk&>%y(nK7?R3u>p^EfFBB4c46;S26O*?(Il$a}FMRo(%fTS?h+k$c54Mn#U zV$Y5#P6vIu9FAd_`zIKfC;s`-JS5Yk7xPV0bylX6TPee>yT*-Lax1#9Hi>QM+ssOx%j+(*c>uHiHT0i>`Nw%Qbj0=*^E|WN z>Esl0VGL5-xXKzkA*X1Ay&Tc5=Of4@oHfUh*>1|f z9n!U+R|}8Bav0($d^R;>6_&a8B-|^~jW!4SK?U_F%OF6ruMXAs*oyd?yMls=2t}Bp z%l!IMUO<(hnIcwDWI=#`Dr{4l>_wkQj_H_5GEFL-ubC9i#3q{vb00vnSXU-RY-egz z{<}FgM%$p!+LRefGg*)h(ZqUw(t5sY27g|vP;J>fbLBXYQ{kSAO)Fp$#td?ELPUXe zg^DtbNDu@)=QS@qDxZp2r=WFOrG@01>xxiEkHv1L`YsO76HpdV#wjj&i?;pplMVu~ zIp7i}JkBM?+6M3xI5d0-848I3$;dJNhw2FVkK$C9LR%Ad-w&Li=2vJm#N?0% z!+vs#I_!GbZb4_DUK64fmbM=lwux5jYm&GF^{5tVs96xfrt)c}${CR_!YC=o>9ADv zpwQ_L>~LKn^^v{E)EQM>gLRf|wzreC)YC9cr*F z@y4N{9M31>>O4Nd<*?+GK@y%dE|zGt?ID^N;ASz|vu-zZKw~Oe5Vk|AMd{D|P+XrmeRA1kf-{*o=w4R>$e%pd^%HBd1$N|N|Eznvkw%{oM4SERzr!iV# zJx20iX)}e`hGnvbv6l2Ckuq9(*IWW6ZpaXM(}{((uK@R!E1%cSwtBV|I$oHw05(yO zX`F(ME>VzOfw`tFmt z^MYyq*u^e~4=4Z4c}qIQEWM9;3c(n5L647-Fv^p-1G8+6jVMbZlt$m6kv?`^xk%Uh zj!mH8Uh>-Z!r8ZrSap<54E;jb?P_T)D2z;s~a;4!;HNRRq> z+pSYe-iTwx#8rwdg|AG(HJc_fmfiQ2^!(|v){P5IJ+c1sd==tG;Yv5VgBPNy#;?zH zb(Gf830({7EqHxoTROn!M{fwU!ZLsQYiT!vm)o`+`V%~vqJnO2qi=Ka(Z;bCWFvm? z3_$SDw6q2)#JxPCK)@p|C*xD9?{Vuy8uL9Uq&n{8_E>!zxW9gvnTGa9L32b{nt9}x z&pT)bt){+I{BYmMq5|HbO~{xseT?LGOYKGWzp6SR!n0a~EVSOXA*axY^X`$xYu@Zq zN@Y8pWUzqH_5(|_uP5w?Tv4?#0QxZ7U{sct1A8<#bGF8y9c5&q0-YeNgQDT8 z=(!+jbIslC9j4r~f#9#Wyx@AdQtI}r3b>6Os~mNH79dC|YF&x8YOiapMUM(#Mc-a4 z%&D1Bu7X*C#5WUtO3YsHz>?AxF7aESE4kdA6%1j0TfvMX_DEGt4z{MUfdIt7m3VC7Dn+&f!q+Ot=^ZTsp#)P)lA$ z=XE;1(@^OM7hVz`xiqnJ!t(I%2V7kpl{1-w2aN<6RIahPB^xckCBDwzgqVOp(pj6k zy+!W`GHI#LRLdy0$PZiL-w>Z-_qWCw$}D>YM{EeMMIDNJt4U?JBii5Krsf1&)`M%i zKov8bkBWQ00iyHX0db$ZED-a31dmr@LiB)$!WhW2DxCE(SF`zSxsVYEwOt;BrHw}S zX~+IHM3xEk&+diP0-b3q!MPa}*Y-K5iRUOK`ap=n0%(YT*IY)f>sUdq=INK-5^6iq z0bman_tq8Ie>&vTsC-U(GWngr{|KfbDCyM}KP1D$(&dl;$f84EKtGQ_sQ}u5m?9Hd z382m|P>8l&QBSyAnhRx5L?7wLY+C~k;LeP9+>?@XgD}5 z0{LK2IN{e?K?n=H6{Li0KIv+4qMhIZi!AleMS3A}s}`*)ICUnA$bIzZIQiI!I51qZ z0M+D<6OMXvikB$ukrMfxM2?qp4$j{v!KCO-(Auz8U=;WdZ@!R03uk%@b+@TrwkqPCJAXtws54a zaz+>RdAN@A0rJ)a<+PB73cTeLE+PBm8IU4#b~)uqR?;oT0OViCtZAk`a><~tl5#WLI^lDk7!?)t2qJRdCe08VPVLsX{n&ctvOZKHwz2kR_MCvN^4WhA zx|OZ!uLK)TzG96+dJTwEBsmqam$S}xH;P~?er{;%!kE245cUN&jDJSlrB!VCTtU3E zAq9+{Ci8wV8i}{JB_4#z$$d8uL`iE-0PU{B4{}1k)Ju$Z!R8#(gY8V92%b#QrFNLM zeQZQ2X}DlnQQd?vnG~yKJ*4s73c@Wt!M6dcX{09hmk>$NFJC}6J4fTc#WY6jaO?g-{~|i_ zAMtyO;dK-_vHkTsL;AuK*$5j%6aCGL zc53ab8Zaue*m<^RmLhgOmg+hYry6)lJ7=k~zDL)w;xc~FqNuA%jnv5D#55R`%6H65 zIHO@L^og8p3Y}%~H*7*e`rEN_-NL9p21=@{6BGu!ZI{>f3`gU_Qqah+)H1)o6Xb%A zR0CM$!`)$=B_!w{=;6fQF+2wc{7j%v!cg?CsJip6NeEs<@W#dLA!(9i-?NUdu3gt( zM6X`htRS3rJQFC!;C9eaN~yygcewaO{q{&L`yw)956>hMv1XG*ZJWd=Pvs0n0H%d1 z!hAx0sk&tV6Hv}*AIvKZXGHVbur^a#w5(H8Y0Doc6)HP;<*Sl{9`X>0!O_ncgTrV~ z$LVf{gxlh{tBDD@A9geu~D7a~J&5TD<9#%h4;fJBs+LcUR@M zeHF;{Z+_&)>ph3;|CmSrJ=FFOhulBs(f_Yk@6k(AG~(B6S_1+267d%y#&$+7HYT>t z|Esvi&iSpc$QT6hYq#Fd{PlL(wG$N0Hgv?ta%Atx*)w?S#KiWp_bXWBW;pQ`;gvm| zkte=jlBk1bi$eMPc@ApA807G2OLdl}#Oo&CE)V~3jTNEBse)iU$du=YgP>{Z=!Ov%1 z{Z92dnrv9PS({i5-iE>3wdlfmx2W~OI?rn|dkA2=4F+sK1nnZSJ>cgaV>$SoMf=T7 zjWS*-S%3WOP|I|+r+Qt)AZou)FgD7#pUs##W6D*!3&~VBhPz6D%Mo;fabzbA{-8XD z>ANTbx%`F$BFMtQmD??402$9=YOYGV#{jPU6nbIeQWztp* z!{odLjHSC03k?WC-Gv(;&ZN3J>A;(n>}R_cV|i2@;c3wC&MGv&HPw0sB;87*Y2IiT zl5-D)<_hX|5$HOZFsVx@~L<6*i%3dtD4Y9aqA zdRX(tp$%XCQg%PEJPZT^6k1cA(iB(=aLGGhvG=T6hElAn ziZ;2Mamy%4L&w%^Lgrkn-@DMEJEW_t%I*5_lU&Qi|8S2Lx=J9I8u@M9@M&tdf3ut# z5Pl^u=GL6+wi(NlT+gAOAN@Rf98xiZ-~IWxbJ8iLCsfUo&8K!n{At`EF?aB~p>sg* zJ}{5nx?i`+nJPJ;^v>S86{B$*PwVE5Nvla^N`!JUe(7#!$3(?A%7((33!UqiibJRk*Kr^uVfzUas6_^Sq)HJW9jEtdS! z6tjK}#o_VO7LWWHar}okpP6P_xp&k`$~wtGlc92B-HZC$C(WLUhx}FgZAi;P$ULX0 zkeR0g7B%Cn7l-mm8B(Rg5z*&N%dmP`Cjnw9jNYDj$7DmIGGc`Zq^T5HRe1F`-x(z_5!h|Cgg zFAKl=)FZ6O^;Yn`g0^SH0XAqjA`-3B&i- z?ce4NmU#-Gxj8;v6X1Y85)-$!ABiPUcO>Z=sXYuII*3mdWcGq+SqFvr&E2COVSCYc z#$)B)%p7axkv`hC;58X*I~9kn_vNj!x~$E6>XR226^DR-h6MW`HU!uMY^=VMTIuanq#?y!A5jCOswVg}IRRgVd9mGcd(r@bT* z@cJ^{=&Psza;z|~TewAX4rL!X;j9ggYv;jdh6^_*!O7gG|C3P}}nlzhAO_9J{^YFr_ zC!mWUW(S@|dzks5@P$=}#bXV5ux!geZ;a$qldvDcqh)L4_(UGySC zXbYK~FLS6Vv0jRr+@wlPW%F~4A<9s6697y~#}D|ObfH8oIY23UmSx(Hlqm0lRG8#~ z=!@{b2uHZ+3bUZSgNA6PN*68R*taH7q7|YpyvVai&tE||_UBiMMMQ}gi>M3_HbEs0 z9G{mj_bi0_M%&auveCjJ!mNSgU`C0I#v^~<7wVa}kn2vHzz&J?S1wng!%Z~M$|-l| zk9|dl9e!i6$Zv`{6boD}U})?^;T1P)^89x%9>u*8_@! zm&~AZyEi{3SMNJgTu3j`%h+`)={lAxM>kzZE54&OHheSPm?!@3puTE_7fw??28+*@ zfpbq14Y*@3-REhcEbTi_&N<;zZ*uz})SdFyBJY^?y2dvOFK{a->|;DCTxc1~joJ)l zjhn%H*`-%V#DbQm>{+odJH~rCuQO@CS$1`V?xYX?XrF^U+aG8vVMpJl*eQD=_TW^K zIcG6v_oi4nG!DA9j#k%p1t!B4_C9pd&6FO9jXuPiTh=ij)v4i7gXlVaCuMB&=E!c} z9WXI@!d}qI`5wx~ZuZJJHG0gy+^YC4#>-x^b$xWWJtWA1OgJP6As8Km5Qz5`yTJN4xM>jr~D*Eq5@%IUJ#RyD-Y? zB|^wg?)~k*SO3v49%5*;XAQT&-Zcy-Yl9Hn>`54^T^OS85+SgOTO|JiPVsM|zIgxM zRL-v*7;N*OrQs_s;|d|Th9NX;5JK6wh4-!CI{sav+eq(M_GJy1;o3Ef;{TNQmSK4$ zX}mY?9$bQi;1+^A!QI`01$TFMcXxM}-~{)e!QI^@*m;=D&Lq3DyR+~6;e0q;*Hg6q z>+Z7d>aP1&zeV!0$?b!-0~9adysv<*FXtKjIPjopt`cXmq+luWN#j_L@P2uuE2v`xClg{QLzj>ns7TgeV3+_b&oIhbROd%^_pt zf%|PYXwQ1b0CpinKTba2mkH5GApnq)Hul7f#U_BLfav&XpXD`B0Yuz~5W|=^L0i1PH?1xC!`8Q9A*<%OLmzXLJ3%?D3I^n2LariP)w+p^(-72$qa_ zd;=wZ1eh$aa8Sr;FDqq#1m=tcAG%3?3Z$tJApYY41RwYdu#pILO8yaKtHB2%Rf+r( zj2FEaR{W2^v1}5$SZQD4O?>X_Gc^v{MAh8T-RWuvt1oeI_)e>Y#_1k76Hh3)bJy~& z1d0Wsc0Csr2Fi#C5It%wVx_F7^kkZ*80GDIi3uZ=?ZqnYgH{@d2O9}ani3gpr3mG2 zbJli*9tyTGZVpLGc^nb3;=Ln1>K>a`8WUKPVONaxCOS&Qqbnu{vk60a^GbRyZ6AZ| zI#j2pwd=zU9_tonK|b+i^GgF?Uyt?$WL#gTnmu;horlm|9{1K$BHPq0%#cGKNWO!7 zI4u#k$vDrgmqV`@Z+3<&@wwLEOr9G2_VB2DowIdcbvG)tRqyI?^s2fp_CTtCJLMoF za-^i?$@5T8H{j}SHb^6?`t(Tj(yrlsyDNEK7pK94*E1X{?3{J)q-_%U43%sj`{jbX zegwgRc9w$C5t`^lRg(#su)&&Cd_6qWmKdEH{8_oj+=zXei-gkmXZ_TL&7uc?Q<<36 zq-keWeEZR^)8uLH(Ud`bmx(W@uIcCjM<=aj?3Rix8x1LmiFx9X^d}`F)(H#sG6rWd zx#v$5N&)9&Q!%xC(bFLxirB5ikjq8yMwDdh21cC^MDL-rKFm|dyGV&u5MqXw&N!s^ z1yHXzE#m@)FS?V&c#;Qd5E03Z?woRgDNC+V zv9a2fY3ur)<@od52kk4lo7?Aqf?Dvd!=3;Gy6!lzKtRZU^mP7ar?O7b%wmBF>51#( zGw;`(&(2kP?5b%*R?%+-S`h4lf$s%HVkLYn2*}yZtDf85yj7Kag(?!@N^du|WYf3N zdixjvDdTd|a#+QYuCRC2fkYZ+bbQ~_A`?Mpp?V^{r0T*kWpB!G6}(0Cghj~S-IIlFh|Ep~ zI?YmOUZTDcqTSR3XYR5>%h@mQ~WJbXtO z>D<#Uike{SGEI<{+-1R;#Un6H2Q6f~Xq$E~ElON?sCDGQ~I#thB!P4Vt{)!^E&sLd@34B+s zOxd03(9%6O)yPZD=uoJRMaXLuvWhV2IMbQZy7=*!;sJkGBf`LFd2JekTpp`b5k+Cu zjIdG0+qqTsfqWR`yF4$}6?(Zzz+`a>(8o?>A2sg%{k+1euoi{Qt+7|mCnD~L=Pp7Z zB=JOyZ8dY6Nt}SuYY)M$Jq9gLv&MX$<4X@7{HHlU1Qn}yucrEzG}kFZ#bJ${-xwUf zEhmc-%Z`<1Zt4 zo7pSrF76ZNdiR`-b3Z#J6OUUeU)I9j5D~T{$!1|{HiA15dM+n)mE1XfT<#Fu*=!#r z#aV^3gmY50Cg1}q^uV~_%#TJ1B6^IXb{>+AePVE3Q21|3>MvIfr+||QMJot`UI(%} zNz}Gl_EGi)OSNB;YOg28*e0!VX?vTFs*G&m5iAi7;uaZdp=5;dM@F7{E2Av@?KhPTdPzL(3aq%{M45G z{1WgtXZ4r&)3>Yt^4?@bSVl#Mk#*M4#s5yAu5U4Yz9uM!ytYk3}rN zD)D`YrXqkI+Ld3B&2npHyRSY2*{+aF76F4wI%WFIJxxSzBlXP>e>^sDh~b*`mFZhr zxA=Y2x?s0r3rs}Y$qvD@SetD*!qrBsf%KrS6fDnMbhVx_@R*bxQO82QV&5lpR&#hw z-Ljkc2rj?~PQP~ZksTP42`QCA@Z`jJdQJlkaKRfz*o+zpZzCDGVn;LbTTAg_$I7u$ zS;kMop(}+J@O$_3alU;pO49@U9H-qaELQ@B_`$gX)_eFYDC!)1yJ7LDL5HB z9dlOX$-2ibfbBYu5hodYl$47ww7&c5f?nBfL0w^<7)vEUcizQv5gB3~G%7-b8T=lM zuVnoO%L@CeLh3jVb?gqomV3X*>(0mGkH|w%1A&0ik-?th$?o4nQ7S(Wk#g}b^UYR2 z@$693qsWUY-{m$A(wqewuXR0h9M{OxnYX<;ZiI8C?O!36aZuJf?!C*=rAQD7AQxtD z^UmKn@}W%x+M*>=OE^g5*2WOOB1*ST;nR(()9Z5cpud&}#m+gHTdhz_nkLWT29_8!ExCs1%h`qd`$zqryrWg3tMJ^F>Aj$a-`6z zFYL-OS!~Bdna$$QXaX`UPH_Rxs*D}s5dPVIef4DooC4!8w%}$9-;?aqQb&(zv#(eXaDf; zeEzUC)Hl=r9{{0n8JA?m5I{f!1VBJ&|9F1-A@W=JUqMqxDkFerDAabu*=K^?II2~TzKpTzKBq9u~71Hf+Au;nU982&2X4s;n_<&%mLI)%1RJQ`#Eh7QBQQW z8==tX2f}&zl-dF5k5)ix#2zPSeK)W1wF*nVg}*7q`!I+Uq}F8DGsTE`uNSzUnYV&- zNeQo^i`&iTDFUbV9hLrZe!Cz;9UOQzs!wB$+Fh37CYa+S+zP>%#=`H>I1Fb>*U3MFj%@y#i|Dy#7AptzA~SVJ_UcA zW^`SUcqVqW3v!q_eQax})dr5`ZZdIfm^`%Ae>_IfQtSFQV*jm3>=q7H2Q}i`*L<}S z=Zk3?f;Zj`v8VY5mj~ByZTwh%yMtT0n&>9TECjW*KuI>hLRGy5uUJ6ZI-G!V+=6S( zP<@F`NeD>9ZBy#!m`m2#A8o1&hI2lGdVAY0Z`IV5$42zJ29vbpt)Qx2fox6>C6GpF zrE)wSZ4Si5^tBIfYbGp!SV_maTy!ZtbKI-n-+wz<;doRHGZ1(<$Y^(byvMhY8+)s| z!r}3_eph1A{%}xG0OOeA{Yd2MNz`Ava4Os^MpVVq17?|#E}?@2A|Gqm2Mqd7SRZxw zHR9XLBk~R&uLGXB@S7rG42spOO&+2aj0xX2;HQe1A{}@iECZyslFjpM(8?may_~I+ zQLP++S>#8K${ar@i1RPLi4&#uMH$hcQbz#65zcCbCxj6C2$f}j;twN5!Y}dt6It~jy8PTWNu(~LSzjbCHKjRf zxPUm!94BTZ3K#oiT=#o$D=@>P?FC&{J?Hhpkl3@}$EsLSWC`Z7gdmtobry!BQkhaP@C_26!N5I-{ zjc08Ch6>_IdoQrYc!HsiJ?3I^wFSQX!EFXcIm$DIoRc%?iynPYu{VFKGaE|0lO|O% z3_ARQ8C9saQukV}*QMy9owXp*BEK-A9QW3_%}IK5!B8kU?Sdjz#a?Pk!CMqR%NP;V zFLbB@ea1Je_f2#1&GU*Ah0HWxzV$krcT_D-gmXtdZ&o#G zHlN=A96xt78{sSCh^b=E<)HOY6H!oebFK0`-+XVVX{>c7q8C|;z(l`xxYVjoxx8fJ zW2^oxvU0d9dC5XCB~3L?#q5SsvSG52p;fhDqRi>ay#3&F*r(^Ha=cF;3pB1$RV!qQ zRMM5Kj6aFCkC#s2Ets=k+2`!k;*Xe8D{?)jr7&;Q-O>K}iS%XgfM;FMMjZf1#R&jX zK?81l?-&3`sz1I${~JvAzavuhX_Tdp?vMM@z7j@JfkqRN22v4|`k#nY75^8BRIUF{ z5UJX=(ln(=FhWwEcC8(kG7w1VGWSO8o{jC_HML;Dlg7;LuDriKt*IT8a_kZq&`j!( zz}#!B2c7%&vEsdoG>UK+Md*`K*_T6mRu#B{kf(E7$LWl4sh!7=yPjHZ+_3n`t&u%f zwyI{BICQb`1zW5`-V?Y`s^&ml!5L_>Ng2Fp?4b(gVa0y55PZTLWYba-ZU1{}_8^pP zG2t=1k6Nl`T$pL05M^q8n5c)1pQh{CHNqLCw4{a!Y0r4vYvq0FmuUq$nOKu3)pUyKhc1~L~5LD zcVs@>FCVZ1Q#@7J-UItOFE{5$L@$a|YSD&%In`(J_6WfE2x@LlBiQh*VdHG;a{c^L zhpnk8J-nh^aB|JMe&w3>Gf%)h!g@aKDv9yp7=gq7!*oEX42 z6%3MOi8pF=@4B}v-=(EzkE2lcg`8QxPl{-Hw>-S#Si@hFm7rRRajYLoeolA-g`uVH z`cRj4QHNOtiR;l%zJi93+d~E(-b>YazT^LKW#fZAY-A#A=L)Wr;Ig$pQsQloPLN>N znJFv2g>zCH%$`2e7wETUv9Bjgs!Ki!M@49LJ8x}$zC5ddHjI~5hc3lgNS|MqW)|f< zf9%w(>GZNU(q}@_U-T*V`bJ=csbcckI1aaVXJ?qjteSB3vk*(=@{fKyf*q@458wE)9zrhkTe6G+^l z8huLoO#*X_V@~YJWC{njH?l^;3ygf&YcvqD9jsxvHwIP_ni(Ne4<#WVCh;|wa0KrM z#P-e6MX`p4iPN>$L{h>^-nTa^*}lx9Z%L|F=sYzX}vzxF%Emve2SARXIiEycR*JtyML_z7W&1(%Z-OJ9=9+#O`3(kHv0wCKtf z$k%JckFEN;3RH4Xgy>X|&YXv`i3g{W5JB*`9*DgNR~6fEYLu|7JlR8IHmAZHF=-l) zSl~;S#ypY4fGh--vja|pw-HG%p!ZAZfE?GUDWIn$NprZ!WEAI$sSgkT=n(D)L)!}Y z(9|jIDN3pNnaQef2xpKgc(LXnEn`;go>y)X_FJ9^X8Qu^N)BL)PSvt#lFkCt-eI`8os*kgC#zi$l&d*`b&%E(4TEiD=S+zsO1bv#>uYQb zqNAKl>v6I9o`Cb-Nh<(ZQKQwm>L7Vbv9E5x4+gzuF%v${zH(3JXzcte{kI0Q=~A6z zv*eSIEVOs+5O{LK2s5PM{ov=&7IaB0x2%3+;-X$`rw=FP;R9xNH*qZU6ov{uig_2*${wyhl#N$ zlDdPU#L4X%`f$$dQ+&_3&q){+kH}=%!|9D%y5KgiG`z)`z4IP8k-GtHmzAfdT+ee> z7v;(is;IUP)rjbn*_%rx^1jpAXN&MhkiZsfZrXRGwFV~HuL6QybkR3 znqx(o6$waM_7>e+fdN2iMG<v}0~;3s6D(CYKS%OmVrRSzhB@ypnm$)56$3!I%rn zp@(KrHlwZ6GGA$Xll09tDwZC%s4U7;wW#HI`fB$zZWL%#gC9@Y&cx##zu~c?ee&~d zY+w(ci1<)W;FL^kGwNFxN{XGdW$~zZAexSpn<=;M^u|_i{U$0{?)LkBDE-W%oz}_8 zQcFM3^LWSC2yw7o)Muw-YPjy(vkP(0cZ$ZQiUba+V=gg0rWlR4i_K0}RV`R*V66E3 zlv=%Dddwg}XC~n+vf1IHk<@};u-S6lQsv&KRvGrj4Jd(<0!9NRT`}F|w@S1dS=3m} zFFd4N*Wc#1QUg{CR&tr|JcWzvoVBnoWj-<%n?NY$Bz^kG7;FGoPy#F%>jD~$V=psjBz;{>GFbb8)r)^D4_QZh!X0DXj<5SWWekRVQ0 zfg;g~ItezoVcI0rUN6$ck?UA{b#3H}x9J3Aj1#xUqRj|GuLxA%EMTSrOZ6s%pV?)1 z0^y_Y>qC(BulLwQBictQao&$)K@A_u0;%DlB8LjgzCzD2(w#sz5OaHNs*|)un1Q%g z3JX9RlD9@F$5-P7>63p3ELh{{3zP*@`_z)R0?1QHFXSol0aJze7arB8NGAOxUe)L= zx9`W|tRUERi)St8l@?2Of;?-5B3Mx!{;D{@RxW=VKQ{t% zCxY#(CM%1orn4@oZw|d-k5+)afWE{Xi1bi4;%LjPDaN-5tUA%_25R7uiB(>97Ti!t zjeXltf&3}bfotBYId6Rq;ZVh2qbD>!Ro<-EadGt1BG@>()fdLp_)ftm+yI*ZBKC{> z-8U$z>eDIio`EOI2ztxQE3FR4M#K}wgj6Ag2@K&zA2C=KJfBW) zZ_=8Y=ZSPv>I|jiSx(hJLju2p4&q#)=6yzMFDKVY7wC_GD~Qk-kit{;(I7n2^pc1J z)4hkwA65({;eC$gUNe@%I5{GuXs+xDKt2qes%i+imO~lh)WAwtYpT%tQj1y^3t&-E zSeJEzLsu^(yFgD)EQ%#6?znHg85KENIy28yG|2FAkK0odwR$hTFIO+(I`jd6pb}*i zs-slgC*|!ggXQs_Pj3f%q?l|Np@23v5tH+N>JKzvt$KGscjc%fb<}fi#1dk)a5Q*VBq^Z}bi5@ZC1osjoPPjq_()-+?df~N|sV33T5=&i-KzY znm^?_lmB`7{-J-nnWufqb^K+eTH+#TrbQ;J9NDE*ZzMa)N277%uk z5<`W~adwo$TR$5bb*07Oag0j8?P;G{=}za!nI>h#X;t!rta&2?PRX2PcM7if`3e4^ z^pG8MhJyEI1_jTlUzJ@fwHMFR1|8N9IC0tIKE}j55Q$xvXm%XIsc=fNhrF<;YNt1F zEjEnb&Eqr!m{y7vuM5)dO8VZ__%xBySNgC8df`p+h8|@i=$k?|3zA>49DRv%1|XMf#BvdnnoEpuHUQYv?+B_F-qTh8_zQvx6o7^L4MFvSh584%>8Hb*_2}v_xA)8W zl71klURY03W-kb;%wx8|7X(%BuRDJrs9u0oe-*0%(+h&?g@5&epnBn7{S?;=HtPrf z%BbQP`=8-gHvb>tS4Mia_RP)4Xz@{NG`2^S@65FN!~$+a9;x_^berF5a7rf7JL}0(j2YDAiN2Ywd!1jFY=R>< zDfm_<#U$vsR)!gXqgv%Kt35Tg89|o9fp3;Se83_<(?56f6|Bi42sNg|Uh?+NqUFhX zFRglTZea^7YNGKF=C5VMY2%AA8<1FsyxQWpuj*r@R|Qg27+|DV)0SG-U^ri9!YN(? zULIgnH*rOGl+c1cWO;OOHY_Y1@j{bI#|BWCn!a^mR`CYBGw|`BjshU4n3;AR@n$m@ zG+r=K08Z5|`2N2zs@$i3FsfcyQnOG9##Miyq(E^l3xC@APoODKoZ2PO_rK|W)efD_ z>`JWR?b`1LAgFL~Y+D4G`ZWr}$+Nw+k=|33!Fz+|)p=n^tES`!!tf`c%6RQX6YUSp z0pL^L>HzR58p{Aw8I3&z^6dIeJlXESx)3La+|ARmU zIR}7G{SK;nfkO58hikr^^G|T7gO|g8AgpwLI}8G+lQ-aZM%8clsDC};KgaXKCJ1sJ z>KDw_ZxVfKeuOu zxQN*>Bilx!;#0?01qosPLwp$JleAY%Z|Jci8F+&0=J6dA?cvxbbHb_%a`(|uA-Njo zu|>Bt?rU2kg`z7lw@4G@+ym_g8{`nwZs9h+`ig3)8R>g74i%@*a8SGN7BHTujlzU$ z$!=@+Qub5!k&NE-`(A_VaNj|OLST?m@qyKOe5e&YGA95(YVO<=9f$YxlsY|C6Jzn% z^Nt}mF*;Huvm9t`goeZ#@-)>7io?v6WiNMsmQV*S8q!RyE+AAW-e zNj$qv%m=DRPr_BXuG5jlx0b>$Yp2!M&j5>``!_7T&iH1iIa7Df-19m5VWRsa$=w}L zbsun7+k-gcN_60kp%*!}ytz$e0bh)xwA4UT|%u{##uYO;qq`Mw>+NBzO1x$VmyV2m}^@l-zI?H9yJ2nC$q3}_Wo%x}|Lkx-~G~!dDp1Ia@ z0(G_=+nQj)$2j!YI3nUnED3@4O!H%rk^ysT_4}bK` z(HNK2BVA|7fd#y=5qA7z`)vD%Q6gx~U`j3-Y|5%0R}L*IW4?&FJwt0%tui5!En{%? zrYBcA3-9-9&cRSzkK`;TU@9HH-i&YhKLcD^q}A&`MI;ap)2fENVyskb6`i?5du)>( zBAmRo;5~IZk}kT0iYPz(q(mUwAE2SNUsu`&Gd!OG^I*%qD-}EP)(1s!O8VExEzqCagrWoXjx{Gd?wt$}-0D#n zx*W)YW$VlF1=nvs3e)H<;&#y@>JZ%NKGKcuZ!YaRrp^rD3!5`{P0!&sS6gZ3t1}M_ zku+BuX)-Ovjht7{m7As~43r(2wbj7c$T24|-|q+o>89R9#13wCG?0CnOP4Kw$3Q*e zisq0$dJ5~veHevFG#uy%?2L?qBI=vMcs5Qcu`cUF#FlT6tt~HjAss5};`26>NM{*8 z_cE6T_)~?Z&(-MFqs=?oDvhcy09L(!EJ?{zLW?s4=SAT?LM-}Iv_j3ewLN31L(4N2-+0j5$zQvIkjV~e=&WEF zY|$9WfSFiPpNR*7iKrAnK%x%FX~Cchhj20Q+{>d1j03@c&7^hf&#>n4c7H%#(r~8{ zk*O_P+;cSn^>1u`&)z;amo&FENQvDta{%Ymb=c1-ae|qzV>_Ic56!8OAg|&aH1~>M zL{L-Y@rYP%NntHb$f1c)6de3 zL{#bIx;V5O2f(2c$Ql%FVxp`I$t$KaPHIiSBrKvxRn0%smtO0hyINv%z>iY`ud zX5Ns0SAa)t&U>g-L5XbD2_5ix%6eRWHPdc~?7;r*{gS%gJ+s>3_VGZlLehKFH}2Wb zwpUBTQAePMBU~MW8Ox)p>$r>?_F-tkcntw}i(1s>kdaD5P1juu&^G>Z`AjZ&xaqcg z{(YYfDlQt(iP^u9qb_r9zvX)c2{S4vLvG!OOcN&+rZu20-r^ymU8 z!^DLO?%Ic7Riu}-QGyX^@ejG6j0iB7wWB0=y0X%^1*NAdyt@(>jIU7NLZI19GE8D$ zqo$*);3_wjo(^6O|IDH46>1+P`%)ww^LbNaoneFOOP{CWP3ka9e|dkwi3@0LZK0)D zJ$e9dq*0_PEeaE3*+DnS4D7fLyXQ4|;ul_^PW^^_?I}{Afk1f~g?G~-OzN}L;BST^ zFa0o=GkiPIICgDxN_W%-t?7p+PSGoa48tSRwz;v-U)p%z@@Au0B@J|AC zF8+lV01TC>;TsJsXp6TkX{@Q7XUwJx|3BzcczAm#&hh1l5Izm(Q^WR-!Fuq-A~nYp zEm;Gw-mXe(Mqh*v;9d6d{76rIyo}-N9}@B#(9@|5i)o4-u2}MN5$!Ypt^;GAYYZDn zJ0sJW_5L#kYuf?%B78YSB-wc1yW8I3WHj>JJL{m>R!OVDu$bgZ@L@OnOAK)rit~rP zmGt6l23!h0r?IuxkXO-`!YBN^Zq|EYWJ~^Dq@guK2K{nhVqGO^5sQ@rvQL}5#B=@5 zNF7>dl!dm?XOSecCo}z7ULg&<s zHiv#jg~$?n$4j+nh%*GzjC_|hhlYs+Es(51$2oR8P)$@KsDd38o$uvZ2tS>rdfY0U zt{%BS>_w7HKa$NKTV)j8JwYW>s4EvII6vGgeQJS+Q}jh}dH53pJ*AI2(cmmu${ZP} z+sA3q9QoP8lsUr|?EzIhoVt!r{tD+ zJF_ESo*A0?oA&r;OB5Ea^G*Cr1Vk7!fM@E0QijLH{)I=&_w^8^jAv@(60c5BPg($p z^WjFS{b@z1ef8<$hWp`WXvLHeF2tAn;VOaq;XR+Z+lcuA;v<1qz`9X2@ZwX0|n-XzqPIP6|Dj4&rY`e555g+OiW45X|OrLTN$zPRSC@79y`zp^N03EfB5xd4CEbr7U000~EC z0e}ycC5wve;j&;A4VQpFN4#c2ac)yWJoLdjk4OBNBghSO8QVDqTf4X^{C!c6UQ&1@ z^*zf~eUNiCjnfRHawg;cOxtUXiEUQ?r0y1{`NkMAib@vXYnGqzQ-kqmHjVo8r9M4j zOE35-934j+9aP|oit%@r+O1aMz@iX1K0okN(7)rSgaG)d)N{pZrPLSv6qXrzg2J*e zO~}L#{M0Z2KegR7tsj5!f}f(AzI?$?i4=p!hsXtj&=1L|gb!LzaSqBfIKPcgnvty; zj@8dUvHc`!kaZSr)`XK{@pZJ}XiSskR$*t}ua7Y8tABsi+#C6ngx)P*t$Mq|v9Cff z;tlcWGLoP?FrPa@(pkq3O(9O3rPea1x)^fx21Hp`V9#6_nv83tx9qLb+fp+e?H9$7 zb`!W5#E`b&W!BrO2nX+T8k35r>xr;Mz^T^ubpZG&3jVgGANZ;H)#-h;CESXR_IDl5 zI31j8*Pa{E(S88@)cFg3Dj3%U_%rC{5BwB;)U}0u9TSmrY&X;3x2?w%4b){4iw_%S z*6iaUxbIo^wTiHNWc1iy2zFV zn2T4Hml~dqtWKDEdV=j_q3=o-xE~^5k}Yi^fTL`bH|oJma~7u)JT51X1u2zV$efnd z3D-VG_Ld07GwHRv7@v%K)D7?J&-$y2+_#}haC4|=HC;Ec+CuSqZIg0vMY?3c#BgX{ z4G`-?u7L0ABj9h*4Z*gH6jjoyZf960M?YUDh!2LJpu|l>C(UYj2;gYg-w&cC|K@MZ=WVz1bs8TTy`h&f^8us6(Swq9sr-(F8mWd zWdMLrsSY^p-*(V@gJCe$vb*=55@3~;?B@RppRyL8_4o&TYN<4q;f!c?{XLBv^0Xde z<36gm_H06U(;1}teoUeffJ}=fObDSE14SZN$gbcA`-g3io-;Cgdr6eouJukgr%JGq3QUDqV#x~!rAhni;JO4$VEDF#8_jm zpULjchh|}PEQPLiw+AG}L7p#nTjV(EZ6@>!5U=!lB3JT)1==#|8cET|Khaxm(AtVO z(LrZxtV!=~n~n1)2h@S(=6^+@mK$iuG)~TsQ#ruMieXeQQw*RCVh}ioT>`+TL_&Xt zPu+*8&q`!`c?*3xcR}n)aPIviha?Wn40P<^@!;e*MLo6ZFFcuG8P+cL>QgLJsMdTY z??HapX#G@su$w)WoNsY z5h$LTkl;p9_^=b4DlL5%+?~Q?&cQnzQJcNuauBnJlrze;0Ql6a6FK@Ek9wSY(w2F4 z+QC)QDvmU=8#O)zfwA>gzevx_K_kD;feDLf1 zMdh#5KYxx$y?iGtvzi%-Cos5+Y-Movt$E_a4UfsDIEu->4U2Qzf13-&o$xMyMqAP6 zV(=zeAZVkbkL;Bl5esRXWMdsa*5qPoIjw&qzK*a351bA@p(cu7b3=Hd1ts)HU-Y#} zd_I3)8ys@Q(}zQ$SGgT6VN|zakC>^=mN(IQr3?KsPsY1t{Dh|Um#PCk=G$6gPNEBv zF$!B{(lbed`@F@GMlyO^1bzO zLqkkiA9~JKv#4<`H+1S9M-;%P#S+f*$oeB>$|1&s^ES(aWXVGpVkzmi%$3S5`L=?^ zKQF{l)=Qh0PBcixOwcf@H0LE0*Py&_!tp~{_zgaV4S-Lfzrd&DVsg|rK@<}3Q^2Dg zxFPGw$Pw#DY`ii9N%@h77MNL`o8_%g+nI%@RYg#lBQ7O(47ZQ0We^a>hA53fc;;!q z2PY2H3D}ZWf-+{qbh^Lo5zj-_j@V9Vz{o2{qp2$zAvda^>nBwEqVayQmpz;^>!rN* zhPxZ(Neg-S4Mg+Tvw*&g`vds*{5H}1|1f4AXtl)48o;s{1h8z7ewNU-wESZP;lII8 zrO8T20S3RfzB$7$UT!e$=nZHQH+;3;kx+{;DzjdXY=rW5uKS6TMn5kQhjni3ddNlc zCpZz^;lMAw z0-6Pz7MLN`y@K8E;;0owF|eb^;L&XKi{6%}EixLuVowp@hT}$2^)udd`O>1>GFR{% zO+l*Wc2>vYxV|C%aU)E)KVx3xy&?@`hchZnf-kwP&qL@cmluYN_U2AU6VS4{bd=VJ zryX*sF|x0CEe}_7ej6`B!!i!FK=$;x5VcQ8x%k{g!g6UEB$Fxdc_r^>ST?*{@JekM z#QBLwUwdF^*ld_D-=d_{?A#!5$l=QSIcfcZpbjBD<4jsA`TM>H-Y##PGA<2)$XpFlP( zS}P)RKzg15>cfimd7ls<;t!gTu#I9xH9T3}!>j%&D_G9Wwe3M2wQu&~4rBD=& zxloKN_JNrg68HNPBTXlgAY5ly7A2&RZLOYdWvrS)EkvjeStgh^140W>hB9dJlmVpb z7Nm-`O{69IQIFTM374mxhKt=)w*50uJJs>)c`duohSk}g)xP7imU2Att8zw^t!^%m z#!VYpRg4Ne;(67i+1BgB!e>`^S!%^f$-~T+g_J$DY4~>Nx|v1m6SFCYi$aj`G=WU8 zE_IX$ruMgwS?xUUb3XQ^G(`DPzpEX1w`OSLXLsA4RY+wQ^3}J9#jjcr zGOlR7ZO`+E%*otX@qOS=N3%G#$YJtew(OgCdq?^mpRGa9GGz7xd`bUav8?(?_Q_z7r=oV5p?>j%E*CRE#$a^w{V>kj&{s0Dcq>$SN@ z*m~NnU}Ufx>3-*z<9BR(VMyHzNb@__K6Cx0HJiivH%`s@__+6GZZp%5w|V&|xGK&E z7rd=WVr1De=SdmpFcNar>X*P>&}i`s+CA z0Zrgv#XHJTL@gtG{6+!v4 zvLDy)%0B}s0iu5aqx?|_{>-^wX)iyET8RBa^cVKaf4B8t!4E&nHcS03`*RBaR_*_7 zIr}^1!C3xx*?+ie1MK{_cjZ4X|5s=2pY5#pRq$um?f;$x|LP9+vvi>v(9h0s|H;z7 zzI5ncszRm@(4QTI-%|2#T==g&?w_sO_*w3c{`Y^s=6~%A{;Zne_mh!7+UFk+!+%fs z*ACIo!WaHO3;)qQ`g^j!KCb^PTN(%i^p_9s|4tYjaL;^s273*}1;{kp;Fq=k1L+{X AlK=n! literal 0 HcmV?d00001 diff --git a/sw/qa/extras/ooxmlexport/data/tdf129575-styleAfter.docx b/sw/qa/extras/ooxmlexport/data/tdf129575-styleAfter.docx new file mode 100644 index 0000000000000000000000000000000000000000..97439011ff55243f5237907a943c78c0c106d9fc GIT binary patch literal 18620 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 literal 0 HcmV?d00001 diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport13.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport13.cxx index 550255d54e8a..27c66c141357 100644 --- a/sw/qa/extras/ooxmlexport/ooxmlexport13.cxx +++ b/sw/qa/extras/ooxmlexport/ooxmlexport13.cxx @@ -325,8 +325,6 @@ DECLARE_OOXMLEXPORT_TEST(testTdf123636_newlinePageBreak4, "tdf123636_newlinePage assertXPath(pDump, "/root/page[2]/body/txt[1]/Text", 0); } -// disabled temporarily, next commit enables it again -#if 0 DECLARE_OOXMLEXPORT_TEST(testTdf118947_tableStyle, "tdf118947_tableStyle.docx") { uno::Reference xTable(getParagraphOrTable(1), uno::UNO_QUERY); @@ -354,7 +352,6 @@ DECLARE_OOXMLEXPORT_TEST(testTdf118947_tableStyle, "tdf118947_tableStyle.docx") CPPUNIT_ASSERT_EQUAL_MESSAGE("Table style sets 0 right margin", sal_Int32(0), getProperty(xPara, "ParaRightMargin")); CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE("Table sets 2.5 line-spacing", sal_Int16(250), getProperty(xPara, "ParaLineSpacing").Height, 1); } -#endif DECLARE_OOXMLEXPORT_TEST(tdf123912_protectedForm, "tdf123912_protectedForm.odt") { diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport6.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport6.cxx index 3b5726dceb28..45bcc9ac5f27 100644 --- a/sw/qa/extras/ooxmlexport/ooxmlexport6.cxx +++ b/sw/qa/extras/ooxmlexport/ooxmlexport6.cxx @@ -459,9 +459,9 @@ DECLARE_OOXMLEXPORT_EXPORTONLY_TEST(testTdf128752, "tdf128752.docx") DECLARE_OOXMLEXPORT_EXPORTONLY_TEST(testTdf119054, "tdf119054.docx") { xmlDocPtr pXmlDoc = parseExport(); - // Don't overwrite before and after spacing of Heading2 by table style - assertXPathNoAttribute(pXmlDoc, "/w:document/w:body/w:tbl/w:tr[1]/w:tc[1]/w:p[1]/w:pPr/w:spacing", "before"); - assertXPathNoAttribute(pXmlDoc, "/w:document/w:body/w:tbl/w:tr[1]/w:tc[1]/w:p[1]/w:pPr/w:spacing", "after"); + // Overwrite applied table style with before and after spacing of Heading2 + assertXPath(pXmlDoc, "/w:document/w:body/w:tbl/w:tr[1]/w:tc[1]/w:p[1]/w:pPr/w:spacing", "before", "0"); + assertXPath(pXmlDoc, "/w:document/w:body/w:tbl/w:tr[1]/w:tc[1]/w:p[1]/w:pPr/w:spacing", "after", "360"); // Use table style based single line spacing instead of the docDefaults' 254 assertXPath(pXmlDoc, "/w:document/w:body/w:tbl/w:tr[1]/w:tc[1]/w:p[1]/w:pPr/w:spacing", "line", "240"); } diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport9.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport9.cxx index 149b5dc3e3cd..df96f077389a 100644 --- a/sw/qa/extras/ooxmlexport/ooxmlexport9.cxx +++ b/sw/qa/extras/ooxmlexport/ooxmlexport9.cxx @@ -30,6 +30,7 @@ #include #include #include +//#include #include #include #include @@ -184,6 +185,70 @@ DECLARE_OOXMLEXPORT_TEST(testTdf106690Cell, "tdf106690-cell.docx") CPPUNIT_ASSERT_EQUAL(static_cast(494), getProperty(getParagraphOfText(2, xCell->getText()), "ParaBottomMargin")); } +DECLARE_OOXMLEXPORT_TEST(testTdf129575_directBefore, "tdf129575-directBefore.docx") +{ + uno::Reference xTablesSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xTables(xTablesSupplier->getTextTables(), uno::UNO_QUERY); + uno::Reference xTable(xTables->getByIndex(0), uno::UNO_QUERY); + uno::Reference xCell(xTable->getCellByName("A1"), uno::UNO_QUERY); + // direct paragraph formatting + // This was 212 twips from the table style, but always direct paragraph formatting wins, in the case of the default 0 margin, too + CPPUNIT_ASSERT_EQUAL(static_cast(0), getProperty(getParagraphOfText(1, xCell->getText()), "ParaTopMargin")); + // default margin + CPPUNIT_ASSERT_EQUAL(static_cast(0), getProperty(getParagraphOfText(1, xCell->getText()), "ParaBottomMargin")); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf129575_directAfter, "tdf129575-directAfter.docx") +{ + uno::Reference xTablesSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xTables(xTablesSupplier->getTextTables(), uno::UNO_QUERY); + uno::Reference xTable(xTables->getByIndex(0), uno::UNO_QUERY); + uno::Reference xCell(xTable->getCellByName("A1"), uno::UNO_QUERY); + // from table style + CPPUNIT_ASSERT_EQUAL(static_cast(212), getProperty(getParagraphOfText(1, xCell->getText()), "ParaTopMargin")); + // direct paragraph formatting + CPPUNIT_ASSERT_EQUAL(static_cast(0), getProperty(getParagraphOfText(1, xCell->getText()), "ParaBottomMargin")); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf129575_styleAfter, "tdf129575-styleAfter.docx") +{ + uno::Reference xTablesSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xTables(xTablesSupplier->getTextTables(), uno::UNO_QUERY); + uno::Reference xTable(xTables->getByIndex(0), uno::UNO_QUERY); + uno::Reference xCell(xTable->getCellByName("A1"), uno::UNO_QUERY); + // direct paragraph formatting + CPPUNIT_ASSERT_EQUAL(static_cast(0), getProperty(getParagraphOfText(1, xCell->getText()), "ParaTopMargin")); + // from table style + CPPUNIT_ASSERT_EQUAL(static_cast(212), getProperty(getParagraphOfText(1, xCell->getText()), "ParaBottomMargin")); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf129575_docDefault, "tdf129575-docDefault.docx") +{ + uno::Reference xTablesSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xTables(xTablesSupplier->getTextTables(), uno::UNO_QUERY); + uno::Reference xTable(xTables->getByIndex(0), uno::UNO_QUERY); + uno::Reference xCell(xTable->getCellByName("A1"), uno::UNO_QUERY); + // docDefault defines both bottom margin and line spacing, but + // applied bottom margin values are based on non-docDefault paragraph styles, line spacing is based on table style + + // docDefault: + // table style: (single line space, overwriting bigger docDefault) + + // Paragraph style Normal: (same as docDefault), + // table style based single line spacing + CPPUNIT_ASSERT_EQUAL(static_cast(282), getProperty(getParagraphOfText(1, xCell->getText()), "ParaBottomMargin")); + style::LineSpacing aLineSpacing = getProperty(getParagraphOfText(1, xCell->getText()), "ParaLineSpacing"); + CPPUNIT_ASSERT_EQUAL(sal_Int16(style::LineSpacingMode::PROP), aLineSpacing.Mode); + CPPUNIT_ASSERT_EQUAL(sal_Int16(100), aLineSpacing.Height); + // Heading 2: (different from docDefault), + // table style based single line spacing + CPPUNIT_ASSERT_EQUAL(static_cast(635), getProperty(getParagraphOfText(2, xCell->getText()), "ParaBottomMargin")); + aLineSpacing = getProperty(getParagraphOfText(1, xCell->getText()), "ParaLineSpacing"); + CPPUNIT_ASSERT_EQUAL(sal_Int16(style::LineSpacingMode::PROP), aLineSpacing.Mode); + CPPUNIT_ASSERT_EQUAL(sal_Int16(100), aLineSpacing.Height); + +} + DECLARE_OOXMLEXPORT_TEST(testTdf106970, "tdf106970.docx") { // The second paragraph (first numbered one) had 0 bottom margin: diff --git a/writerfilter/source/dmapper/DomainMapperTableHandler.cxx b/writerfilter/source/dmapper/DomainMapperTableHandler.cxx index e753852985a7..ab51d4fdd48d 100644 --- a/writerfilter/source/dmapper/DomainMapperTableHandler.cxx +++ b/writerfilter/source/dmapper/DomainMapperTableHandler.cxx @@ -59,6 +59,7 @@ using namespace ::std; #define CNF_FIRST_ROW_FIRST_COLUMN 0x004 #define CNF_LAST_ROW_LAST_COLUMN 0x002 #define CNF_LAST_ROW_FIRST_COLUMN 0x001 +#define CNF_ALL 0xFFF DomainMapperTableHandler::DomainMapperTableHandler( css::uno::Reference const& xText, @@ -225,6 +226,7 @@ struct TableInfo PropertyMapPtr pTableBorders; TableStyleSheetEntry* pTableStyle; css::beans::PropertyValues aTableProperties; + std::vector< PropertyIds > aTablePropertyIds; TableInfo() : nLeftBorderDistance(DEF_BORDER_DIST) @@ -664,6 +666,7 @@ TableStyleSheetEntry * DomainMapperTableHandler::endTableGetTableStyle(TableInfo } rInfo.aTableProperties = m_aTableProperties->GetPropertyValues(); + rInfo.aTablePropertyIds = m_aTableProperties->GetPropertyIds(); #ifdef DBG_UTIL TagLogger::getInstance().startElement("debug.tableprops"); @@ -863,9 +866,6 @@ CellPropertyValuesSeq_t DomainMapperTableHandler::endTableGetCellProperties(Tabl // Remove properties from style/row that aren't allowed in cells pAllCellProps->Erase( PROP_HEADER_ROW_COUNT ); pAllCellProps->Erase( PROP_TBL_HEADER ); - // Remove paragraph properties from style/row that paragraph style can overwrite - pAllCellProps->Erase( PROP_PARA_BOTTOM_MARGIN ); - pAllCellProps->Erase( PROP_PARA_LINE_SPACING ); // Then add the cell properties pAllCellProps->InsertProps(*aCellIterator); @@ -1066,29 +1066,59 @@ css::uno::Sequence DomainMapperTableHandler::endTabl // table style has got bigger precedence than docDefault style, // but lower precedence than the paragraph styles and direct paragraph formatting -void DomainMapperTableHandler::ApplyParaProperty(css::beans::PropertyValues aTableProperties, PropertyIds eId) +void DomainMapperTableHandler::ApplyParagraphPropertiesFromTableStyle(TableInfo & rInfo) { - OUString sPropertyName = getPropertyName(eId); - auto pTableProp = std::find_if(aTableProperties.begin(), aTableProperties.end(), - [&](const beans::PropertyValue& rProp) { return rProp.Name == sPropertyName; }); - if (pTableProp != aTableProperties.end()) + for( auto const& eId : rInfo.aTablePropertyIds ) { - uno::Any aValue = pTableProp->Value; - for (const auto& rParaProp : m_rDMapper_Impl.m_aParagraphsToEndTable) + // apply paragraph and character properties of the table style on table paragraphs + if ( isParagraphProperty(eId) || isCharacterProperty(eId) ) { - // there is no direct paragraph formatting - if (!rParaProp.m_pPropertyMap->isSet(eId)) + // check all paragraphs of the table + for (const auto& rParaProp : m_rDMapper_Impl.m_aParagraphsToEndTable) { - OUString sParaStyleName; - rParaProp.m_rPropertySet->getPropertyValue("ParaStyleName") >>= sParaStyleName; - StyleSheetEntryPtr pEntry = m_rDMapper_Impl.GetStyleSheetTable()->FindStyleSheetByConvertedStyleName(sParaStyleName); - uno::Any aMargin = m_rDMapper_Impl.GetPropertyFromStyleSheet(eId, pEntry, true, true); - uno::Any aMarginDocDefault = m_rDMapper_Impl.GetPropertyFromStyleSheet(eId, nullptr, true, true); - // use table style only when 1) both values are empty (no docDefault and paragraph style definitions) or - // 2) both non-empty values are equal (docDefault paragraph properties are copied to the base paragraph style during import) - // TODO check the case, when two parent styles modify the docDefault and the last one set back the docDefault value - if (aMargin == aMarginDocDefault) - rParaProp.m_rPropertySet->setPropertyValue(sPropertyName, aValue); + // there is no direct paragraph formatting + if (!rParaProp.m_pPropertyMap->isSet(eId)) + { + bool bDocDefault; + OUString sParaStyleName; + rParaProp.m_rPropertySet->getPropertyValue("ParaStyleName") >>= sParaStyleName; + StyleSheetEntryPtr pEntry = m_rDMapper_Impl.GetStyleSheetTable()->FindStyleSheetByConvertedStyleName(sParaStyleName); + uno::Any aParaStyle = m_rDMapper_Impl.GetPropertyFromStyleSheet(eId, pEntry, true, true, &bDocDefault); + // use table style when a docDefault value is applied instead of it, + // and there is no associated TableStyleSheetEntry + // TODO: replace CNF_ALL with the actual mask + if ( (aParaStyle == uno::Any() || bDocDefault) && !rInfo.pTableStyle->GetProperties(CNF_ALL)->getProperty(eId) ) + { + OUString sPropertyName = getPropertyName(eId); + auto pTableProp = std::find_if(rInfo.aTableProperties.begin(), rInfo.aTableProperties.end(), + [&](const beans::PropertyValue& rProp) { return rProp.Name == sPropertyName; }); + if (pTableProp != rInfo.aTableProperties.end()) + { + try + { + rParaProp.m_rPropertySet->setPropertyValue( sPropertyName, pTableProp->Value ); + } + catch ( const uno::Exception & ) + { + TOOLS_INFO_EXCEPTION("writerfilter.dmapper", "Exception during table style correction"); + } + } + } + // table style can overwrite paragraph style, when the paragraph style property has a default value, restore it + // TODO remove the associated TableStyleSheetEntry styles, if needed + else if ( aParaStyle != uno::Any() && !bDocDefault ) + { + OUString sPropertyName = getPropertyName(eId); + try + { + rParaProp.m_rPropertySet->setPropertyValue( sPropertyName, aParaStyle ); + } + catch ( const uno::Exception & ) + { + TOOLS_INFO_EXCEPTION("writerfilter.dmapper", "Exception during table style correction"); + } + } + } } } } @@ -1192,9 +1222,8 @@ void DomainMapperTableHandler::endTable(unsigned int nestedTableLevel, bool bTab } } - // OOXML table style may container paragraph properties, apply these now. - ApplyParaProperty(aTableInfo.aTableProperties, PROP_PARA_BOTTOM_MARGIN); - ApplyParaProperty(aTableInfo.aTableProperties, PROP_PARA_LINE_SPACING); + // OOXML table style may contain paragraph properties, apply these now. + ApplyParagraphPropertiesFromTableStyle(aTableInfo); } } catch ( const lang::IllegalArgumentException & ) diff --git a/writerfilter/source/dmapper/DomainMapperTableHandler.hxx b/writerfilter/source/dmapper/DomainMapperTableHandler.hxx index 16d2a0cc37cc..b454be94f563 100644 --- a/writerfilter/source/dmapper/DomainMapperTableHandler.hxx +++ b/writerfilter/source/dmapper/DomainMapperTableHandler.hxx @@ -91,7 +91,7 @@ public: */ void startTable(const TablePropertyMapPtr& pProps); - void ApplyParaProperty(css::beans::PropertyValues aTableProperties, PropertyIds eId); + void ApplyParagraphPropertiesFromTableStyle(TableInfo & rInfo); /// Handle end of table. void endTable(unsigned int nestedTableLevel, bool bTableStartsAtCellStart); diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.cxx b/writerfilter/source/dmapper/DomainMapper_Impl.cxx index 2f3e79ec852e..259e1ebbf678 100644 --- a/writerfilter/source/dmapper/DomainMapper_Impl.cxx +++ b/writerfilter/source/dmapper/DomainMapper_Impl.cxx @@ -807,7 +807,7 @@ OUString DomainMapper_Impl::GetDefaultParaStyleName() return m_sDefaultParaStyleName; } -uno::Any DomainMapper_Impl::GetPropertyFromStyleSheet(PropertyIds eId, StyleSheetEntryPtr pEntry, const bool bDocDefaults, const bool bPara) +uno::Any DomainMapper_Impl::GetPropertyFromStyleSheet(PropertyIds eId, StyleSheetEntryPtr pEntry, const bool bDocDefaults, const bool bPara, bool* pIsDocDefault) { while(pEntry.get( ) ) { @@ -817,6 +817,9 @@ uno::Any DomainMapper_Impl::GetPropertyFromStyleSheet(PropertyIds eId, StyleShee pEntry->pProperties->getProperty(eId); if( aProperty ) { + if (pIsDocDefault) + *pIsDocDefault = pEntry->pProperties->isDocDefault(eId); + return aProperty->second; } } @@ -840,7 +843,12 @@ uno::Any DomainMapper_Impl::GetPropertyFromStyleSheet(PropertyIds eId, StyleShee { o3tl::optional aProperty = pDefaultParaProps->getProperty(eId); if ( aProperty ) + { + if (pIsDocDefault) + *pIsDocDefault = true; + return aProperty->second; + } } } if ( bDocDefaults && isCharacterProperty(eId) ) @@ -850,9 +858,18 @@ uno::Any DomainMapper_Impl::GetPropertyFromStyleSheet(PropertyIds eId, StyleShee { o3tl::optional aProperty = pDefaultCharProps->getProperty(eId); if ( aProperty ) + { + if (pIsDocDefault) + *pIsDocDefault = true; + return aProperty->second; + } } } + + if (pIsDocDefault) + *pIsDocDefault = false; + return uno::Any(); } diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.hxx b/writerfilter/source/dmapper/DomainMapper_Impl.hxx index bc688a463cd7..0fd51ab2298e 100644 --- a/writerfilter/source/dmapper/DomainMapper_Impl.hxx +++ b/writerfilter/source/dmapper/DomainMapper_Impl.hxx @@ -761,7 +761,7 @@ public: OUString GetDefaultParaStyleName(); // specified style - including inherited properties. Indicate whether paragraph defaults should be checked. - css::uno::Any GetPropertyFromStyleSheet(PropertyIds eId, StyleSheetEntryPtr pEntry, const bool bDocDefaults, const bool bPara); + css::uno::Any GetPropertyFromStyleSheet(PropertyIds eId, StyleSheetEntryPtr pEntry, const bool bDocDefaults, const bool bPara, bool* bIsDocDefault = nullptr); // current paragraph style - including inherited properties css::uno::Any GetPropertyFromParaStyleSheet(PropertyIds eId); // context's character style - including inherited properties diff --git a/writerfilter/source/dmapper/PropertyIds.cxx b/writerfilter/source/dmapper/PropertyIds.cxx index 8b925fe37f9f..bb133dff2f7a 100644 --- a/writerfilter/source/dmapper/PropertyIds.cxx +++ b/writerfilter/source/dmapper/PropertyIds.cxx @@ -364,6 +364,11 @@ bool isCharacterProperty( const PropertyIds eId ) return eId > PROP_CHARACTER_STYLES && eId < PROP_CHARACTER_END; } +bool isParagraphProperty( const PropertyIds eId ) +{ + return eId >= PROP_PARA_ADJUST && eId <= PROP_PARA_WIDOWS; +} + } //namespace writerfilter /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/writerfilter/source/dmapper/PropertyIds.hxx b/writerfilter/source/dmapper/PropertyIds.hxx index b2e10a13ee46..ce238f340a59 100644 --- a/writerfilter/source/dmapper/PropertyIds.hxx +++ b/writerfilter/source/dmapper/PropertyIds.hxx @@ -362,6 +362,8 @@ OUString getPropertyName(PropertyIds eId); bool isCharacterProperty(const PropertyIds eId); +bool isParagraphProperty(const PropertyIds eId); + } //namespace dmapper } // namespace writerfilter #endif diff --git a/writerfilter/source/dmapper/PropertyMap.cxx b/writerfilter/source/dmapper/PropertyMap.cxx index 69cc86a73153..b15e17696a78 100644 --- a/writerfilter/source/dmapper/PropertyMap.cxx +++ b/writerfilter/source/dmapper/PropertyMap.cxx @@ -185,6 +185,14 @@ uno::Sequence< beans::PropertyValue > PropertyMap::GetPropertyValues( bool bChar return comphelper::containerToSequence( m_aValues ); } +std::vector< PropertyIds > PropertyMap::GetPropertyIds() +{ + std::vector< PropertyIds > aRet; + for ( const auto& rPropPair : m_vMap ) + aRet.push_back( rPropPair.first ); + return aRet; +} + #ifdef DBG_UTIL static void lcl_AnyToTag( const uno::Any& rAny ) { @@ -223,7 +231,7 @@ static void lcl_AnyToTag( const uno::Any& rAny ) } #endif -void PropertyMap::Insert( PropertyIds eId, const uno::Any& rAny, bool bOverwrite, GrabBagType i_GrabBagType ) +void PropertyMap::Insert( PropertyIds eId, const uno::Any& rAny, bool bOverwrite, GrabBagType i_GrabBagType, bool bDocDefault ) { #ifdef DBG_UTIL const OUString& rInsert = getPropertyName(eId); @@ -235,7 +243,7 @@ void PropertyMap::Insert( PropertyIds eId, const uno::Any& rAny, bool bOverwrite #endif if ( !bOverwrite ) - m_vMap.insert(std::make_pair(eId, PropValue(rAny, i_GrabBagType))); + m_vMap.insert(std::make_pair(eId, PropValue(rAny, i_GrabBagType, bDocDefault))); else m_vMap[eId] = PropValue(rAny, i_GrabBagType); @@ -264,6 +272,15 @@ bool PropertyMap::isSet( PropertyIds eId) const return m_vMap.find( eId ) != m_vMap.end(); } +bool PropertyMap::isDocDefault( PropertyIds eId ) const +{ + std::map< PropertyIds, PropValue >::const_iterator aIter = m_vMap.find( eId ); + if ( aIter == m_vMap.end() ) + return false; + else + return aIter->second.getIsDocDefault(); +} + #ifdef DBG_UTIL void PropertyMap::dumpXml() const { @@ -320,7 +337,12 @@ void PropertyMap::InsertProps( const PropertyMapPtr& rMap, const bool bOverwrite for ( const auto& rPropPair : rMap->m_vMap ) { if ( bOverwrite || !m_vMap.count(rPropPair.first) ) - m_vMap[rPropPair.first] = rPropPair.second; + { + if ( !bOverwrite && !rPropPair.second.getIsDocDefault() ) + m_vMap.insert(std::make_pair(rPropPair.first, PropValue(rPropPair.second.getValue(), rPropPair.second.getGrabBagType(), true))); + else + m_vMap[rPropPair.first] = rPropPair.second; + } } insertTableProperties( rMap.get(), bOverwrite ); diff --git a/writerfilter/source/dmapper/PropertyMap.hxx b/writerfilter/source/dmapper/PropertyMap.hxx index b7603301ccc8..11df0d8fad9c 100644 --- a/writerfilter/source/dmapper/PropertyMap.hxx +++ b/writerfilter/source/dmapper/PropertyMap.hxx @@ -95,23 +95,35 @@ class PropValue private: css::uno::Any m_aValue; GrabBagType m_GrabBagType; + bool m_bIsDocDefault; public: + PropValue( const css::uno::Any& rValue, GrabBagType i_GrabBagType, bool bDocDefault ) + : m_aValue( rValue ) + , m_GrabBagType( i_GrabBagType ) + , m_bIsDocDefault( bDocDefault ) + { + } + PropValue( const css::uno::Any& rValue, GrabBagType i_GrabBagType ) : m_aValue( rValue ) , m_GrabBagType( i_GrabBagType ) + , m_bIsDocDefault( false ) { } PropValue() : m_aValue() , m_GrabBagType( NO_GRAB_BAG ) + , m_bIsDocDefault( false ) { } const css::uno::Any& getValue() const { return m_aValue; } GrabBagType getGrabBagType() const { return m_GrabBagType; } + + bool getIsDocDefault() const { return m_bIsDocDefault; } }; class PropertyMap; @@ -139,13 +151,15 @@ public: // the contained properties are their Value. css::uno::Sequence< css::beans::PropertyValue > GetPropertyValues( bool bCharGrabBag = true ); + std::vector< PropertyIds > GetPropertyIds(); + // Add property, optionally overwriting existing attributes - void Insert( PropertyIds eId, const css::uno::Any& rAny, bool bOverwrite = true, GrabBagType i_GrabBagType = NO_GRAB_BAG ); + void Insert( PropertyIds eId, const css::uno::Any& rAny, bool bOverwrite = true, GrabBagType i_GrabBagType = NO_GRAB_BAG, bool bDocDefault = false ); // Remove a named property from *this, does nothing if the property id has not been set void Erase( PropertyIds eId); - // Imports properties from pMap + // Imports properties from pMap (bOverwrite==false means m_bIsDocDefault=true setting) void InsertProps( const PropertyMapPtr& rMap, const bool bOverwrite = true ); // Returns a copy of the property if it exists, .first is its PropertyIds and .second is its Value (type css::uno::Any) @@ -153,6 +167,7 @@ public: // Has the property named been set (via Insert)? bool isSet( PropertyIds eId ) const; + bool isDocDefault( PropertyIds eId ) const; const css::uno::Reference< css::text::XFootnote >& GetFootnote() const { return m_xFootnote; } const OUString& GetFootnoteStyle() const { return m_sFootnoteCharStyleName; } diff --git a/writerfilter/source/dmapper/StyleSheetTable.cxx b/writerfilter/source/dmapper/StyleSheetTable.cxx index bf3fb63664ed..33c22e357110 100644 --- a/writerfilter/source/dmapper/StyleSheetTable.cxx +++ b/writerfilter/source/dmapper/StyleSheetTable.cxx @@ -396,6 +396,11 @@ StyleSheetTable::~StyleSheetTable() { } +void StyleSheetTable::SetDefaultParaProps(PropertyIds eId, const css::uno::Any& rAny) +{ + m_pImpl->m_pDefaultParaProps->Insert(eId, rAny, /*bOverwrite=*/false, NO_GRAB_BAG, /*bDocDefault=*/true); +} + PropertyMapPtr const & StyleSheetTable::GetDefaultParaProps() const { return m_pImpl->m_pDefaultParaProps; @@ -691,7 +696,7 @@ void StyleSheetTable::lcl_sprm(Sprm & rSprm) if ( nSprmId == NS_ooxml::LN_CT_DocDefaults_pPrDefault && m_pImpl->m_pDefaultParaProps.get() && !m_pImpl->m_pDefaultParaProps->isSet( PROP_PARA_TOP_MARGIN ) ) { - m_pImpl->m_pDefaultParaProps->Insert( PROP_PARA_TOP_MARGIN, uno::makeAny( sal_Int32(0) ) ); + SetDefaultParaProps( PROP_PARA_TOP_MARGIN, uno::makeAny( sal_Int32(0) ) ); } m_pImpl->m_rDMapper.PopStyleSheetProperties(); applyDefaults( true ); @@ -990,7 +995,7 @@ void StyleSheetTable::ApplyStyleSheets( const FontTablePtr& rFontTable ) else if( bParaStyle ) { // Paragraph styles that don't inherit from some parent need to apply the DocDefaults - pEntry->pProperties->InsertProps( m_pImpl->m_pDefaultParaProps, /*bAllowOverwrite=*/false ); + pEntry->pProperties->InsertProps( m_pImpl->m_pDefaultParaProps, /*bOverwrite=*/false ); //now it's time to set the default parameters - for paragraph styles //Fonts: Western first entry in font table @@ -1454,13 +1459,13 @@ void StyleSheetTable::applyDefaults(bool bParaProperties) if( bParaProperties && m_pImpl->m_pDefaultParaProps.get()) { // tdf#87533 LO will have different defaults here, depending on the locale. Import with documented defaults - m_pImpl->m_pDefaultParaProps->Insert(PROP_WRITING_MODE, uno::makeAny(sal_Int16(text::WritingMode_LR_TB)), /*bOverwrite=*/false); - m_pImpl->m_pDefaultParaProps->Insert(PROP_PARA_ADJUST, uno::makeAny(sal_Int16(style::ParagraphAdjust_LEFT)), false); + SetDefaultParaProps(PROP_WRITING_MODE, uno::makeAny(sal_Int16(text::WritingMode_LR_TB))); + SetDefaultParaProps(PROP_PARA_ADJUST, uno::makeAny(sal_Int16(style::ParagraphAdjust_LEFT))); // Widow/Orphan -> set both to two if not already set uno::Any aTwo = uno::makeAny(sal_Int8(2)); - m_pImpl->m_pDefaultParaProps->Insert(PROP_PARA_WIDOWS, aTwo, /*bOverwrite=*/false); - m_pImpl->m_pDefaultParaProps->Insert(PROP_PARA_ORPHANS, aTwo, false); + SetDefaultParaProps(PROP_PARA_WIDOWS, aTwo); + SetDefaultParaProps(PROP_PARA_ORPHANS, aTwo); uno::Reference xStylesSupplier(m_pImpl->m_xTextDocument, uno::UNO_QUERY); uno::Reference xStyleFamilies = xStylesSupplier->getStyleFamilies(); diff --git a/writerfilter/source/dmapper/StyleSheetTable.hxx b/writerfilter/source/dmapper/StyleSheetTable.hxx index 0866852c36e6..0d367de59f52 100644 --- a/writerfilter/source/dmapper/StyleSheetTable.hxx +++ b/writerfilter/source/dmapper/StyleSheetTable.hxx @@ -102,6 +102,7 @@ public: OUString getOrCreateCharStyle( PropertyValueVector_t& rCharProperties, bool bAlwaysCreate ); + void SetDefaultParaProps(PropertyIds eId, const css::uno::Any& rAny); PropertyMapPtr const & GetDefaultParaProps() const; /// Returns the default character properties. PropertyMapPtr const & GetDefaultCharProps() const;