From 9e6d0e459ff153dd62cda5000be487fd714c3957 Mon Sep 17 00:00:00 2001 From: Alexandre Julliard Date: Mon, 25 Apr 2022 11:52:14 +0200 Subject: [PATCH] make_unicode: Generate the character mapping tables in locale.nls. Signed-off-by: Alexandre Julliard --- nls/locale.nls | Bin 664228 -> 730526 bytes tools/make_unicode | 84 +++++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 81 insertions(+), 3 deletions(-) diff --git a/nls/locale.nls b/nls/locale.nls index 2ab7ce55dc91c6e4d3df2b14f8ea4b5515b9cc03..329224c92fcb6083b9001a2de24b206a81bba163 100644 GIT binary patch delta 54020 zcmdqK1$Y!mw=i7Yk%>-hGMP*!6L%pAmIMMZU}2Hqy1?S@Zj<0nV1bau-CcKKu_ds` z2A5q}+}(Y;|5K-BdXoM3zxRFb_r3S|tDdUkr=+W^s%>UPQRJeNvH3dH`-M(qQJ8aH zz_xmAMOSSIf9y zy4&`c?FB2|T`NjiKnM0M%53edxiVFs)qp5eAugxDWi`d|%?5d+f6yt|ddk+T;HJ*b z&6LaM@wW2{l%IH4Ix6M0 z-j$9@`H8ot6K_jKr9!Q@rK3`Q;!WwOl-GJwIx6KSOs`Lrib{oAuS>_9uS!RyP1{$c zqf+kv$`ZRss8ZqOi_%dkU-F`KRLTYXx2MWja8_q$Fy%Zf9hH`W4@*a-{PF$LvF-iR zvFUw_)s}m5G|8w%OvsXZrK3`Q^KR*=l;_?p9hLHzccf^Nke7Fq3ODbRj!OB#8v=Fk zh9xTHTW*w&O8MEVVyr14SCwKyez{sQTFVJpd(}G9!)a_+UE!zl)sm5rM1`D?y;n*` zLbhHh83|c^#S&>bdXsyL(otE%woOY%r97c&>8O;qZBjZa<9ch z_}H+pDfQ=FUedX7^A->Knun;TaVyGnI6i3I)b#unUAImAIDJ{i=RMO0oE^HXpm~!? z%{Dim-F;c#>qB;o{C)h{so~T1%>KNv!m@)a>YK81+mD?xxyV#lb>*Cy3)>v(Xc&_+ z!7y};Y1j{&7EW*D)BaeWX#)-oygBB<*v|`cn#9CW zXI^bIvE8;#;ltD;b~G(;YJUY%TNX03iz=W6>;>DqTv zOt%-qD>i=BG^d%WcaJe|CN`c~f1YVj^TRD(x9Qd~v&XPOD@_p#?ksUzS#709^GZFR z^u0Leeg~#YpDvEwXAayo_}#Gbxvj@u89#ka<0+HoZY~_&%)WU*%c#M@GaP3|bZpS+ za#zQG^F|jBt=u^0yR>$09r|>#8@6}YlW}v$kC~UfaL&RGi!L?(XfhX&g^`_4H412& z)NXXUtETQ*ebhtpMx;*pY3}irzxL>|;Bd3;J)?UK?tgYb+OVm^7mmspGkwv5rmecH zT+p;hc6-f$hI6)e?A|%8*M_0%7SwK**kXLUvORkCJlc!xA3V%F{D*N5r+=D$r{Lp) zM$L-{B(%6ac(gq)N?H%~p0e z+vWV|yzhPcZ|YHQPWJTd1$i@m>rk%g_Lg*Fs@0m1c0DL|ys2jB_7S0`YNl^Z15Bw4 zmyTXMj*!<=2)UF`zY;L!_g=4mkc{oNlZr!+<6ATmmCVrf>WqSD;i}Nq#_nx(UR?eKWbA~UN zyYTEnr%t24SwDeRW>>@Prth1$Ha^?LxoQ1oW15Avyw)P1W#^XHzcW>6eYEw(*06L>y+EcuJff%ojb4TT(Rr)uD^CY+U-vFaXlvXINalIpU}SR`ehAB z8ZdFdn1Sa8IgKnB>^@}jkTXL&44XG>=8!>|8-xCWZ8Wan}BC%(nLb zViD4O_P6jqH`@x;`ERuUZ|nc>_R0Tj`?btJ$1u2?CB!m}Fmehm(=FE${-2{X$|$6o zgjD}`8?Lnf`%Z9Cs{9|t|Nk`z{`=$fUv9sF`R5qJ#EP-Jm8Nn$0ZwmDc$nIfe~wBc zs!7Ov_P^g&YYR6xVFXV2-w(nH%>U>}|A%4xFCPT!7X8cA-?#r?cJ~i0{d=GPV*8sg zo&G;!uYZ(}lB6a?rb?s&E&zO~NN-i}g@O+-#c=QcIm0n7tbrAHF>EYbiLE74$_h4T zTR?0LsXIH&N^akYnG6ivmFwJYs&CTqZhzAbVe{)kq*5Jw|4+P9X6qm{nnM1hx-_w4no>cydUykAnk*+x7ZSCAwL0+klmQ?#C$vETZ?I&RJ^5l zV)5qU3B{Wfk&un3GoW}KLh3;X-HHbw=Nm%$6#rA~Uo6Fe#g;g@Sc*f7X{=mKdsUkm z_&1m5N*?s`KWczL`^ zYumqVP22yUjQ^$fmtm?xtOr-}IZPu+^^xv?IhFjs#Q~)xrjnd6V2rn7&S6$EJDDTQ z1?D1imwC%DY*k^p>2=A(2LkDT6+2b&wFZhy4|1B4keN->-!K^ITWPpNV7AnA%KB zraLp38O_Wx!IHLx+0UG0t}+jq_lzy;#RkD$qZGCpTaRr8%hPan3i~6wn%&JFV=uG! z+4royjkishO?jJYHjQmM+6=TAXEO&L>g}*OVspXfj?Ehz#@53&$Tk6jAK`HseL!}}_P*_VTYEb%yAZpwc3F0&hITFOy4wx4n`BpLx7Kct-EVf6?H<^@ zwX?DJwD+@*u}`(HW#8Doqy0ep(e^X!3+z|h@3uc?f7$+l{VRK-a#RsUr;3F9UyT22 zwmZqHe~uZdda9PHcB&p$dV_%)WyMKWO;r70#aU)W38icW-XYat)j5;uvX%IOf_kO; zsIqgAs^u(W5=Ve~hY*KElvRbimZ;Uxp*>*zks2cMtnCEKG!}%j9hRWV7AwWwGIbQN zOAhxP9yxrFd4jo(BZaP*`(dsuBwXZ_bIf+EQ%XuTTbUH>&WQI_a7H*zkg4g8^BmX6 z6gA!s)FCU*?^cvhmCKF~6x=6>f5hD0DOqJw)>pv2fc_!>DyyE8G08}PR}}nv3S829;`Bwqb#RvW67&=~ z*#02r1m`Nwb)CO+?&&E13Q5KhHhC~U6FDwmx=7r9(;x#jZQg>zB68eQXEtGL#6ZDn%p;X2%PitBvW zRjyQhlj|?8r(CbOK1AvxN>zN3Dl zPFC5tQEPX%K(~0e3T{>1>LT6Rtrx;%)nK;?B9@PEvD*fKJKRhM-A)5?UKA#)ZX$Nq z?Twp_yQh1yD!@J5y_|ctdn3Txy7zJ);yw|ueE0c~uZNVZ+KD;E_Q}{$_e<`#-CqJt zJls6|Ji+_QI2rSKkgpc`TLA9yI1Kq&j|(1m zJzfI#7{)K};pXY*8Rc2tGt0BC=XahRJO_A=@|^5B&vT7uvT8S^B1k77C9AGrPB9wq z1N97&+0)g_r1y&Qs^~@8)w~*ebp&i6QllZC<+apntJfjGPJ7+(dg%4mi}zA%U=%=# z)Ff!qH8lWhr0JmP2hap5Sv3vvg^<=DwFmQKniB|x;*(W>AazIcM)TFAaq-r8hj_<& zSN2X;WqUV*yp4B9?|}fvcu)5J(R(Rio4pS}F2rIHyXyS}u~*(^k#o?^MVqYhffNiW zS(S)+d2Ob)uC}$dy|#~b2yn(jnyXy``C3S(?b^fIGk_$ku0#F+F`=LrT3+ksldLlO z#QUWAWct(x94hD2+ozw;XrEa?%}369%#&5Se17ryUBs{X-0*oJ;>jw`$5|)%Ojdd8 z!Vr(qRie4V>AKPN-7N)3rd zKSQX9!2+T!E8||A?FROzo$RW ze}4YSswhaw{@>7C)xdv~YM8jvHTUo6KhWO<{Hgv6{8#&L^FQQ&-2XD_3Drqf-SvM3 zG%>mx1C5jyZY&Eh!&u+g7GQ7V2*{^Enr&Qa++y4hShDIA=2uO|2Y@_-^c9j*fIc81 zATfX{qz7aNGy<$OQav#r3ij__Z@PlsO*e;&?-J4g6NL_{P;G>7qV!L@P()vOuOG@?_4X<)>-h#3(D z$fE3bj*+^h5nE*Xpo|Ibe@FV9f_qDWOH~ly%Lo$b9vK*!5SbpC6WKPhPh@Une&mwK zEs+N!&qUsg1TD+{=Vc^`a*qm(N>(LARf=k^tp-@Vs5X#yjT!>^#Hcw@D*$eX1pB@y zXIS;&m`0sPI$3om>ZOPYg~QQ}a*pugrtd=ts20U zA(lM$Q__U^Q6nGrw1Gm6dV<1Woj>x}nIb$BNNEH6G5{gtLP3CSWAZYDVn&xsH<#a{ z-eXDUP~?Q9A}y6TDOAENuqIXXRbPByVHJi^p25p5+`=Q|Y$PE~sKAeH8%d#_U5!wq zaR-rgsPTeo7(;hQEhndLFLKk z{qa;q%kCE8tuJWeQlpHZK}c#Dcako$6xXw5k*7_nmn7*~ z;Lx@f9PZ7OQ&KwwU+ghE^i%GxLi)J8Qd7Y7E+u)lov}7*FNL6$n(_<`_NuqGdPRjy zL>-dRj7<^YQG`bJp-3nD2yRC!M%CyP%G0wi5o&dL{JWGdsV=FD`Ne#r)FG+A@IUia zD^;u{6pk(OV-KaFBh5l-EWAncDFLn3PZ9|6 z78HnY7TU3Evk?aKnG2hhgX8lD+_P$*Eh;HMdNtH@dQkoa?^}V8wn!V<4b>@MZ=aA_ zF|}%UEpIIqPF@;y||pD)1CSj4-^Z7 znp?srXz!FPLf*Mrc!V_cJ7(9|w=s@hGt{k`%?t-Z#;B;yE%B)`#RIF*oRA&zs3s&g zm~vX=oD_IrloCUdds{phV^D>VZQ__{hVzm(q+jBiOi6c^PQom(Mimd*CVx#t6lJam zkwo!6S1MA8rh~1-65()|A$C~J5+75kXgubhu|<+eHCDm^vTjNW7-!t!kqE#Fct2Iw zLJRURMPE=`wuB8K5s{v(i_;^YLew0_L^D4yM?iBc`GL7g?BHt?YS)mlOsaX`(w6Av znjLM~4p^3^LON95k!0{#2q&Jd z*|Xt96T(k$%x6G3UxFx|Z6|PVqZeOifs$?$3zU#Ia3UlrO)CyD`VxbusVkPmW3BJ% zkLd|OB$X-RZ}$;84wqTKsFuV5Cc|V>PvOUE4g`KSaU-~Z`7pQ!`!McU2Q@T94#KQr zWK;!x=R0~8T!5}t+mk+G*Tb2QGo;3}G(kLiXxW^dmLj_#d+^jIWE`B89#-Ar3LKu@}g6U2Ot|GQRSmIE)t)fYAC^FXt(GD~AXqeCi7G+oQ6fcXguhqU{ zL59)~A@o@6mI{_dA7m^?^i@BWvJzxX9w&LN{yrS)`^-SlI>6+x8_6Wn9`w4y2WnWO z$g_X5u+wSl9(Xz^d+Q~5V-Mj*N*|Jht)51vGwqmQW+v!0fFw*%TbPM}pQrA93JyMX zv~}BvwN*12WsxRK^yb;8hlS-?1e;XlX>X3+jJ? zljc15^w**F_rSaXiH>^}aP-VVz}nFQeC&piDFi3q0N0~X)h-~Rp%7catf0V)-RMi9 zA(^@x9YN*Cu|0HoE4jqg$5VcmWmu5~_SD*FnX<_z@tmobXh-CU8GJ<&HFa(kLaeBd zzE&g>!muq_4?=obtD0bryFtohmsm?`!;>o868!gg+^F8p7;9}xjgh64N`r1=89OGs zgpbGkK#Sn#f?_&r;>Om8!K(!SiqEVHL8TJINE%eq zG);9nQP=*Jnv-vUXpFgFD&-FLHWG^P>02dPhIkh+Np@ZZ2}>PqecZ(Yxvxqc9C2P@ z(OQA|ohfT*fDHa)8PCHR05TW&GEk~?rLc)!LdX{J< z0C!?NtYH}?c)8)_;!mWVLYFtR0(xhcmx9rj7o;HXCr2-;48a~|9C*{dRA@zVfTttn z<)dy{=U=Desqf2pV%s#lV#G~>4L~pLAxA3FG1$BQ0hWP=vj7(6C>M$IpjRa~LO1DB z2zLpGxnQ%f{g#-x{#lMOWz({8KjOnwDe!=qvEbk$xWc82KWnF_wJ?Ojmj)$5Oo(~JZwN9*YIr^F=&@MY=&u?)U>I>W%CtKJK$s}HuHNtrwp3> zcW|}EGK`MtB{qLLN{oivKzp##)O;DfHNQh<1Mhs~R9q}Ia6Ljj8bgE)NF4hYRQDPa z&pNWdz`JQc$N`rUKf}WljTr}aI9bXpWCBQkW*sw<8ASFm$4OT_272}qZVdIVr}$`Q z6PUMVhLRn$6mP#CqDK#0y5Qtso`Aw3NVpdJdD54QcMxCZCHW2u4nv=s@Y_fU*&pNp z=$z(P1No-Sl>BVfqdf5k&^&~Ng;#x1u zwaSlV5a~n8lCoGk2Vo#>JxM7IgY#xUyU-v)JaIp1E6)dT;i$le*%I<&nPbRF5xZS# zB88PjUeH5I-DWbRW>S&_J)*_wT_(!sdktZ*`FBRW5o|fIuLj;;-ZSq-WW8kVlGkFak;3Cs|!Yo{AL~$P1vm znLJ?ZnMAfFb06MJD$h=V-&Z(pr8R=iv2^b7R=);8GF)2UW?u2Fuwr`V0j;lp$PG~1 z&(QV#0;DHa9yCCeXAWY+v;`m*!Yqa!_Kr*gxYVXHjk<{36lE7+cSd6j#y$dh#g{+&G@s!m>Wzc+8Nl-2sNSf2wTE- zHo+zk3TJK9HjUv8q)8xZC|XoSzxw!IVi(a~+(|w$Raq_5kr~Y10{VM)CVcI-o_R)A zF@0D+c7jj}d+{-?lRma4wBa$+jEsevj3XW}^F=}}_rteylbOqaS;8w}4EQ~P7W}~n zFdso0$q3g0&p_=Ra}|#@GnxYbX7?C++l5~6Q0YKsGZ|xXCSpqv(iMdU4>FPIz!*sg z*y!Oz7zNM~#^XLgjCm&3LdObM7h1PJ$rVxh0N`?3w6C*eyReNid|W$|WujJ7@uC8E zbM!>gr8eV)YKj`6}0_X+za`&Ddi>8w~KFC4Iy}s*3VCe9utAn%!@ zm%R9NBOJ=@_JR%i^0)f|`mrJ926#=EJRy9}mm%q>&fx9lfNz8$yNcIT(Aa9SoWE|-an|s(2qE0Pp8~4W-0|fHnm9& ziugMA6V+OyZ&eK>>!K_U`$?2jkSagBkeG`_ z!L{Z(a_zY`+-tra;QhI_+%3KdU|D=`t{ccY!CTlZxUSp?p5;4m-*XMP&fGBIG~^m{ ze*7@5FV~w(-i%f+rrJ|Mskz5N&Ju8U~U#ajho2LPfet~sya-FRodJ8#Ducs<{WkK-fw5O{^X4y4L_RlYr5 zlxY~eAn*(L9@a-G;0i~y5(&_o_OBn@5~tnV(Ow}D&>$E!mPrZjfyf$o(IHb55%z@9 zHzlSt79^U$MMMk{rd1yoqAcu+sPmrI!;58v3v-WrxTqb9S5AWb0~PzmFybH@sl{xWd)t$3a28jg)$?anc)70iNl`55a1Z&GU@go^HWkE0#AI2>grRReX}4GGT&pN% za2vCAwdnPV5Q=4t(rp#?q5}Qc&=MK~8n0k1X5!K08e9y&V0=k(2?xI`bR{pIRyv11 z(r(bWPb6Nz_eTAS7wbGnu2=Ohl9dE)slcmtlTwbWvfmIhyxf18ykw%_JF`h|2>JHD z7t{4g!i$*ae=r@{Cd^^D*187^)gXnnFM~ztn!`oqEs_W2JYx2~SjcR7`OX(Ex&&#| zeeCXF*>050&(Cgus?OvIhe4{HaI3)InNFyGK$<6Ps=U~0f6-F(K6Jysp0q%#*?{j? zx9|o~koQ@N>!=0E?6v2D|V;RqIEe%6zXVO+fd<;vwwP9jgN82S`<^j{qhdfm(SUjldm_hW!R- zB5lxMD|a?fsAcS*Bh|#+DpO27`Nb81_7a7Kj{FEzwt_>^`mmF%D?W7apqqj+3WWgb z$vgN2e4ld?VljV)Kg+-4U-7s3OZ*%D3dEa$-^U447o?mQ;f{d9k$?)5WWkbGj<%+f z!name2H(Tt(-z_*ZXGWyPLKKS9F3j0!+cAw3oKAwVY)W)g`nAs8_Kog416zG;8I~Z z>ke=tZ-PZ`CM-&`_osh*N`s!8=`k z_|tBA&^0to;`j4OSB?UH7=G|A7aULKPXjfAAH#3wXYeC==qP?Ha3=7h`SFmZ^T$AE z9N!P{TsYukAU^@zN&HOEozE}j8PDIqaw`8T*h~jFi(dqBBfkuO4qzF-ERx^EZ{XKJ z+Q{#LlfV+>sRCG`1P7N_ka#kQT4ycVh@Bu4=@|6)-JuZpk*RPo{T*2fynGy@cJT0) zj6&2S6;NS=+77TBg4c|G3~qe=#nX(z4Zp9j#0OYE$R!WjlDc7d1{0b8G3Rk@DtZ+wO!_3Aqn1vMh z+R-PKIQ@FLH-~e2pkz+^;4G$hbSItgY7lRS`i8Z$nsEeedI*)_TcLzX6!=7c1MSLC ziUE&0N*Q!4dBal;AzT+`XZDN$P3t59z&d6c8=LDvUe{dH+|As>+|1m_oM&!o&M|M} zI+%}etsk7j2sn%{12!>={pHJ>*hGarMk^$znU^F#9y^G>sxUvECh z%`tB_&oHky$8!736U{r!&$xWE4_Hk$Z!p*9efgK>>*mVbTeIl|Og6jCbGYZ`+vc0* z>f9sqE%R3Mc69uc`H@-2>-gp7b-+7iK4&(YUz*!<^*Jr4<_KrUg>ZMw@6C>!6XybZ z=(px4W&+!4U+#w4m%CZ@GmMhC;bAd2LhnTn|t{Ugc zWx$m{Ywj+W$&H7(yCGMPi{m?UH(+M(%QfX%aVa2e$9?3g!W29X;sBV##~|zo^L`(g zwD)owxgTKC-N@PVdpLJ~2Dgd34%7E<+^;a*7IU{@@BbJk+OLY8J0ZB_(AQ$D!#uta z;(UGq#P1J0fOGdUr1_8*^KcANP2j~~H=wwb>G=kPL+tl^{WHt?(Xqx>#7 zqc`wIyX^osLOjdw<+s9lz6;`h{wFxg_wh&g<2=z|x%3jBhFYXDy!6uy2ey9`k_6A6 zV&EMdWvEGl;dxXBRSB^1B|(UIC?`<@HxqDP3$S$|o8D3dBU6t8?~o{PC2fZ!uTK>F zeK=dFqEDEQC{@a=_M=cad;$~@p_d#XyvNh{80N+|JbeTp1-u>O-HA?&Q*oh~%1?ty za5hYtvjNV8<%LR~!qk`#oi-1;aW!B&E`|P402=GyK&;}ILnrUKwHc<#pCIjl#cB(G z5tf|2fd9(hy>|?jsT0u6v<(K+pZpV;s%gB#-{l`bwH|^0XZ&-qTFM8XLN)30Xk{1) z%OFjsV4^<{Q+qDJ(J#wCu{IF~QruR)!s!UR7F>Pgc)Of#ckrY{8X0vH=xpn4nm zo#13Ai~u@j_F(mQLoQTTXG({KJBzOd=>lJauM5>|150`r{(HVTjF!d#8^NXRHNF{C z=gr-oFs6!NvG2sUfX&uTeh_TM2J+otRiafM4lDH#em9gf8Y(u0UkIF)(8<%FM$3U( z29mw}L5ROd$0$&4xbjA?vwW8Y7bIUh4^XqC{p)MG4(HchI49`^^lNVK=J#-JnK>04 zc9wVKRXhjVpRc6gZMW{2wqP=JH|uD5#<@AIux! zvb+Hw&PTzecQ{{(PvDdIazMrLseC9sMI!g~5GU!PygSA?}UgU{h>^WQ+q1gAs! z^3Y?QU>nqeZvy>Sm#+nQH&~(j!z%tA--BPh`FnmCKNvLoL*Zj!Z6`tzZCsfobFeOeW8{C(!WY{7r5%^yUZPIlwIi6*T=O z{}rYmPyQ<0WH7+&=>mPN0T>CjGxCYhTz`Pc5JO>fWI-FU;O;^i)V3DfZRp8&F!2qc z%FW^MH-|>`g^}I^4(E8-o=t#pHjSUZX&#KT`EVH5z$QXIY%(I;ypu^lUh$R}FDYNT za;Go1DFeO4Qa)UQnFP0w{;c>~S?XITucZI3AC*1?+`7EaaIJt{TlqW;?hA0vUW2pp z0{GkvLFy=nMs$}3Y1*#B3e z6QhUsaZ}-?g{JVz!T=L97T$(i%4}s0F=yea(F?}RxU&9i9Gk}0fv@Fzup`*1?0ora z`3Ly5yw)b%rh-j%#nyW!{&tzZ=<#~+R|U57QU7r4qwa9w_R_$*Y>3C zRof@FUu>Q2^mfs9sdlyOOfBrX*$uOsY*%2n+HSYqF}q84_wC->+1qRF!|f~BSGR9s z-_E|DeV+YH`=$0o@2h_Vufs@ z<1dcCI-YjC=J?3*gCpZay}DygF@MBNQcvgo=8(}E9Y)V^_O@iVA5!Ep6p!cyv%u> z^9~dphWwQCpU#h*-#Od5Pz^5^qf4wyCBy}rZvk)S(q88Dk+A_TV_l}ZEChOm%MO>r zE~i~?xIA`w?_%$&bq#l|;7aW?UB3lrY7SW!*IvjfRE=;Q2iOmg=8GJms5L-sg>+El zo`w&)pSr$Aiig}u?XDIyX&$I9qpqU<7C!FosP3m8tz3Dj_z?Sxmy^arVz2_otrS}f+U%k&Ee%<@IH|O2a)n4nSEmZkw z!?fkJ8GzN(!ubCVkZ$lHwbTv@M<6u?^7+~|kZ;!>(4N-b0PME*mG-OF*~i-_)TfM3 zicd|Sram2f2KbEe$@f{}v&HA2&l#Va@TD~G8b&@k*^+mzp;AZ3(cu?*QMi0B0g^G2|N|?Lg{R z$j|xS^nKy`(brDztq;-1>QnXA^o{i$^#k-{^*`tfRm=2SAcsMWd7T&N%~)t$X53~J9m!q% zlgKGDo<{7t@u~5P(Kf&#ewV12;efRh1#1Uw3O zA7CG-4Gaq`ADA6jKd?~M0#e7ofq}V!;{$&Hdp9H-PvI%w$_6;sn1q8lQX7Y<$?3%eQi zGK_?~!DqhF;i=)Z!drxQ3m+CfDSTe|n(($JJkg*-!}o^M3Y>)eO!y7RABMjVw~g?M z2#P2ZQ6-{oMC*ti5hEg|M$C^`AF(ImXvD>cTM>n-#}OYR>>@Rhg{n|Ug{qjyl*k&9 z^&?wGc8eSuIVrL*axL3kGHH@MvZK8Tc z4M%KL)YPa2Q7aLrk}Xj`M;(v467?YJeUx3aS9C};{S3EIl@r}Ix(`58^mND}MlX)u z6um$C_vk->z90QA+AhX3CMYI0rg99*L8oR+otPFeF#ci8#|()X4+7y6+aoa-Vs666 zwSwYj{J=IcHaYg2Sb@_pwtZ~>*qhohv9n^AiM%bb2V>75enaFGsvZIMA=W0&A&%PV z;v(b9#bw6Ti)$0tGj2rO#JGaE6>&S_Oh-_BEbcPEJ8`e$*m%$Q;P|BY%=iZJ?c)2z zkB*-ezbt-R{Nea>@wek&$FpVBWsGIw%Ty^-w@m9Yy~>O#Gri2BGE%E3TwmrVq>q=m z4De2w=a7Fb=Qi_C0#>e6#QJ5K&2zBEmAEK+ldQL+r;khLtj*9Y~o~qKSElWxHEBI z;)%p7iMJA;C4NaXIVI_mB9mYtNy<)Yko0|0-=w^x{G`Q6o0EP?`aS7d($l0bN%m#E z%Z8LKTQ;j~y|Qh}_9{E7?4+`VWu>Y}aBbOLz&lv>x3X8t-YNU0?3c2ta&F~}<>Jbv zm8)H@Wx4Lm3bbidO3 zO7@k#D~DAsU%6W4#+5r(9#DBqyK)-J7I zn$%dF|6r<2o02v^ZGGC_w3BI9)1ILC73N>loT})nL{~|vQmsnkD&JS>S!G0($yKQN zyednoY^t)SN)b>OtK6&drplKpPF3|)qpOywTD5B3s;#T`syeFb^s0-hZmLT4cU3)F z^-|RgulrTsSG7;qriZ6jNUv^!e}w3iF4U%H`pERD=?l^~r0+{Vm3}S#Y5Lc6mkdKj zY=$6D2FQedlTi;~>x>>5BQmCBwDg^uu_|L%#?g#R8TT{ZXV_V_V8?2sIzBgFU{VXeJJ}(_RZ`U*?hLTnz0(S zqgU5~>3@#CCtihLK=|w5T&r*XonC<}LphQ2=108tcX@n9lD6zmIob+g%9jO1VH5hi zQ4uDMg%|H3N#WOic*XB96?rqqBE@E%5@2fqR){R&c|t$Q-U9O#UI}@7@-q6;Wp)St z)XRe2{rQsqxUpSOzm@1|Xuq#O$6z^K$I|;EQuuHcTgTdBU9`HOg=r;fLp2k|Q7w&A zkSOEv-EY0iq+H3*dc5PIX>@^aD)Xppz)hM<;o(V&&A3T(n{hO^gg0X&N^qiXQt5YC zw!yaJxIgk}EevcA>{X4rj-sE&qL$uiH{S=#XoR$m?I+YcbQE$erG4&e!DAj%yq-{w z=Q>62P(Fig)nwBiq~ZH#0u*wy$c48Go>ES8g(1D(#%@SC+zQuG__wa~PZp26tBWXY03 zXR)vPiS@hjNhuZZ&v^eV;so`nH&zif{Y0qLkNr$_wB?>37r0$N3-Arn7px!Xkr}h7 zGzr_}y_i}W9ljjD3%cG|E4}-2(U0I||8cBA_;PIV+2g;;$DwzL<44FHJXZ|y_4)|5 zLhe1xLNV+)@V*aAXo~q^^si~Q*Q!*(;v(LNED$Av6_vOx7Uapc0;Ksw+1^q^LN;NI zjO;C;6>RuWY_a_aM?zMiOp_2`U0W;4`U5^X<21rP)0%q7{QyT^#)DHqs zdA;ALEm{IL(fYX#GRw&J7VYN#?gEh}3;ks0mGC*Xo@Iot4OYGcd25WtiG-~aZlXH5 zc?lfBPRG9ajdqqH_4aR+zpI4h)8C4I+ggH0^=`JNISqHwUK@OczAmN+-K^jKAV2k@ z<>+*qupIcoXDj{L=tZwLkESl1#{^kP;l*71Y)Ypwi2Qe>qkVLj)2 zm@JaiE8(|tV>AIU-zz#W`ZqOj;7)r$v}kHnNbON3xPgxx0$j%MMu~!-LXdGEh0P;; zZ4O3%PujuSg!kBmg4G=>f0Xxh^o5=lkKj`n7VevmS-69bwHSd1%UE{={N#ZsnW@mA zy36px2AxyB$geHXnz&=hB{Tz3VsLOkeqUT~wBd)sEhYYfkLy3?2^_6#Ut3t4Jndu- zypjmI_j=I!Y1k9^F0NLiS`4!_@Y}>nJ{O^emVF|$kKKo_aBECIVo8#gGxn8A(PQx8 zw3P`QL}p@I>TuLwvW-y~ zJ^K~c`pLHI?9E^G;$buAQ?5^Q>8Q%L7udUoNw?X9ULtBnVDsX*1v z#)IQ<4LdjuDLrcxPH6UL9B!I&U%F9eFX6EEtoaTP?h^5UbgkLBCY8Z|edN864?Db? zT7*+W>IbwGG-!Swbe;q66(kC!Fh9>UisHA?M?qfjAZo8Q&BAidcgq*cgKx>iHjI%u z)NXk#_`d_$->GiHLFxok>?QCw2sJM%YDX>l=k*2tDdg_%c0!ak`IgFPXz*>#Z+|w4 z>|zn_!6J?qjmbNXoDt}HWZn^^@{l?p>cTHb0e!4CbyfuVP@sn9?JW{)D3^vM-G=6^ zDq7Gj9c`(O6dD7rUsIHm*HFQfge)Ezqp4S2$~g>0N>icGT1k(PZVKy$b=!k}8?=!$ zeiEzOO6HD&M(!xG&_dOyeokI&-JCo-$rN4(z6vk3upR2+AW{#MTTVzn8~|EVFPS%A z#_EYx`Vly@i>l>-<8F1kEkpSn$O~l6B}Hj@l%ldlMN&nMErKV_4UaB5vPkf`6r>B# zrl4pxz!Z5P7)=dnA#frzEQ^KCF4_pjv81qjG|;O64o=vzxh5;Y$CRR}CG_A0?5^-lMJ86q;tswU&b^sS={vcTil%|l6Qn2yUNtYu!)6!@ za_2kR1|ko$9C7z<;lMH~Y)3*%zDRMGS87q5!MAQS={KbJu@nlGN@>GarGLWvB-mtBf2?aG1=21_FMEKf%FxgCvBj9G+w@Uu2H^1jCjivCWl*J0pIH5wM!8vXYw;c?^tXkL>#bYp90!Zd@F2{-ZxCxMEM%_GZt%PCv>8;RxAAal*J{*#2+|O-#~|tHeLoOOdneK zpkH_=O3S9;eIY$F3ky^+=tEBlFZMi^qIX(|9tasM&`B@lH^>``5^8mF1KMI1*wBK* z*Oq9fWvh3jevRy6-2WMz`txUSWFJ7efpx!0VXHBXwmM7TM^)Ctda9@&{AMR=G-+U|+Z)gk!txG;yfMF%X+pM$wypRKu&dA8 z%L9`yQ4;mAsUqhqI)2U7 zYg|9Mup#hOB;_l^ShVX5{4CMK7W1E0^PeBcX3EW)YQEE6u+QP1AvT!GOvpPXy0{1? z3!&&es8CPwMZgww{?1qCY3nO@Xt%zB*o36@_8*=3z8~OcguuRmT+|itu&Vt=c;oyQ z`rQY29QU=KVqOj2hss)Q*0<%0>toj@t{3`3rEDPJ(&X_P+&n;6SK$p|sziUl^aNsp zNj?-Qg;YS6uahVXTwujJrLcw{6QB*IL-$W{Q*}ATVhDc)=A@)3-Wbj6gUiKMjuwg3 z9`y4Ij$EV5M;o{Uk3Q^?qfK(5HPTg|79ZzjSg1zAl>5 zj@tai55k7!)4bs9LE*0(x=F1<&b)k?6Cp5UBb z4POgd>C*rEqB_}l0e2PTLWl;-h*qKEWnJObeVi@)1kgV0iEwE)fELIG(j4*h7wRCh zu6WbVM3>Evb?8k>!SNpW!V0D}zRv1R@6IA`@Kr%V^Y!rAz@fGlTEKYT`8CDpYW`II z0DyANfoEx9rnC^Cs#3@TMB1Y$KWGr-()NlD?CV$=x(C_>PU)}~bROV07zWJ>poLXW z;KOZmVJO#D?vbdBZd=vpL(=TM3jRz{^e6EsoGJ1;f}Do*wzPvaY%SrGGI_7McR-LN zA9QNl`A_)OCA3(Jxf}oGpdgjT`WJvo!W-hTHo%%+naCUMl~cFu8WZ3mNOu%jc*&+ z|D*R})HwUrx6RM|vbS5{>x>0Zz6Z#5e=EH54nHCc9CxswVHOT8T~qp78+4H3BrAx- z{9bDTq5Vt4AAIw{!cs2KQvO`t_|u^*1co-kn|&{gQm4^k_1_4cSt9|O|4vqxj5>Uh zFbbum`LIII6`EoRF0>FY_EG?a8YV~}-+V`*A=KTXNOJg$@(NN!$KsdMMs^O?$`C#U zK6fdpMb9T?=!xF7CauSr5)%4rq3z`bg4&$Jfhujx1TVt1AjQwi`$Vi8nO-o^&`5+7-*QBlVoa~a*?sRaTNF1&ryt=6?pg+e45-YS1)yvR zKUh(8XL0f?mGE;EC_=joHKdIg zJb8)7VaU z2KAfsAIv6qzKDCYcpx$kVijt`lCh6}bD^K?l&*)HQAQoC$J(DLIuG(jSlx4g(W@y~ zgrLC1@X=QUABU2c{6}**NRBRE0+p`T;ws3`iWO8Z0R#Ls!&=1=dC#f2B?xEpM=(9P zSmGWBtW*C#_$Ky~`+quay{-v5!c7^Sq2xa2J@0r@&^Y%H$FqGt_^OXDXX$))|0u|I zKxvkM_lbN=r<=nvZ6%;8zr)9j7FGCRYS2;!VUS6jStwnumS_n|Qx<&358e(wZ2 z$!-K`ESU8?XVDB2omx1dBIh?@PGRc{r?5JsuSLiI93Ed?H9X!%v5eUZ1dV3GJwx4R zx$KR1Ew(Nw)w3Q=sSl0k0r3Rb>6?P~!VM-JyAt)Zb$*g9xY=2?wgbHP*1vy#tMO)AQ= zuV1gg2l3rPro48Wg|Y);t@2@vMUr^*A=wOo zx{Z`QEHe>uTCO+MdD8nN()2EV>U<+N72wX^k~KiEAQMiixr|5s!Oi;Pw43f{P=!b| z3*vS!Q9wRmajs6NwSHH2mMU=!ILuPVz6q0UT7sgaiQjl^Y?!3 zFpQs%{ZRu%VSaE@OcU*52IM42R5E^Bz14 zdx5{v;*3KpvI38;zIxXvsaip@KZ(QPEM%Dyw4m`>oSEJrJexuH=!bCB8%%DmBulr4 zf4-4$3RxwA_!~u+yhZ%SV&Ulr6(2oA^B2g!$G_%(0{Vo)f=b7KA*A9niix{(4?u21 z7fIXu2^n+%8`@c5KSWp3Wv#S9moz@W-Q9#UIQ*ki?nzvjRYcUF;7QWA z_(;Z3*Lt@qNR?G@(MYlo;NTL?f(Mp`l7=h#)O2uH=tM|DvQIpTD8rkq5p}**=t`=S zfw$w1M2#2ihAT7!ghR-B2@{y@ggdp1Y5NWAV>~5|t={1vlYCGZq$r=#333UPVo`dh z3dO_c(Oe3nuv|L8%On2fGYQXQ_iwR3F{Z%2|R6sM=B3 zVW#!yZll8K*557dD)&vMl_fmt#k<<~%+?jRUao0pOWQx#dlesopCqxAE?|3lAWR`` z3h32?b?6J69-z=1s+Elmr~_DZgXcA1cLZ2wftzp?Ou@gypQZyR-|P?Acg1b7dIm+m z(PwLLGahtSbNe+z0m364%qg}Tv1g|!4%3BPlkea|eSv4mrvQikW5Ru|UmDynD=6d# zm`>lE`xocH?KxGg;5CRw;(P|{mRx}F+!5Y@{AwdsY9i=F!jBceD?nITLhABoz6!Tl zq{6fXzeAOL`FC^qxvrv?B!gd2$1WkH?bqtk14@f92l@ymxv%Tf3g*JEpxVHvruGaieLA<_-~-F*f%vIwXuPBmWX~VIjivOY1VWg~T}^+@Y#{yE0tK ziPaEfwXCS|R@8Pn*~w2>gb}V0HEN%trD`(m>kEE<0MF970}p?3YE8x*F7Z6nfPKn= z<7wsJ9$FfI76-KbshrCEwQ!1SP4qJCZcc=iE`1(>CCm{Zy{4dH8+hHHY4l0(bmt201o`;_~+zAScsvS5js9AD)y$X*-FfYO) zF3UPn1>v3zSl5N_7%FdQ;jJ#bL#!z$?a(hhvUr7S-}@4EMy|NTd4~s6=e}zWy(*Bx zsyW#GsgtoOXWS*e0NwCl(7RQ0(BFB5rJy0)@-aFIt0L@ugi=gfD`k|b0X$(ZVINsa zXN;_|TgHS%XCwT6hg7?sl?2QI+G`{GaF8+i&#F$>qlyn_ONMYmk=I`s2fw^RIlUq8 z#T!mm!)6x(mCoB;KRNpiJQSuB4NLiu3lC<~PSR`E!d`uw$QPtp^|1R~=E~gd!Z~AV zFLS<;F=`X6s0)m59tN2ha@-OXnpG9JpfETU4ltyWVLTu3|Fm@-a8Vp>|Ctr+8tlh$ zARs7MX-ZL0v4FjyF~)-JwQH1X3b+)-#@Spf=Vds^bfN zHg$FJ!C~bXG%*7n{kiaQw2kKzu?WW1Fu|TZNm(ys4|U$JY{n>A4Ne8h+NI->q9_!vHD{E}`4mduK_y5TgfqW)Zn=qo@_*N9p z;0(|lLr>AHS1tb@JT=_Aq28EL4wB5yRb@T`w`q(Os|7T5xC6?a&%SUdUnuGmpLlyq z7?ui@x7mhw%ZC+SJHFs_7Hyv$|8b5?N^`&0biu)bv#J!GOySjX8o=x5W zN%YtA_MhTw9Wa6soD#p=__p}wH7w!*Z>>G0i^^&{{JpSZlf^I^8GjkN!p=t@6AHfr zQnTh|&ZAPa2By?*(4+Jxq5ShaQ84Mn3m$7^UIaDp&XtFvsUD7Pw(~irhPAhB5RcvM zh2+>4t9+0D(HjEFE*x!?f|Fcwx^kd{^+D$-56v8u)UxigQn;dHCxE>HV(MV-fOWnoM(ZL~z0&^nJ_l24=iU_U%Idi;N)>!o8NN^x zta6=OR!MY_!hk0xiT@bV7UrlCoMdUY(bea=!lwMgq9W&Rr#JI#jIw@GsxujSarHc8&Se;LjfqZPjpSp5R7OL3LS>Pl?cR`-h= zP-TzIcGNj)9pW}GWus1q+1vJnf3iZccWrz%j&Fz6hIXlUkRd*kF+dp@!pqddA%iKvZK02qUJJAqfLkiR-&1*CKHQh{8rbz* zPT2G#6wT~~_~01F?<=>(Ls5UI*n`MNn7&%LMbWgIs$7q4s)Pv29MODwXz$0`j1)P= zobtvZS|K?f-*_vM;Lyop_+jXuu&AvNFVY6(F0c)(W(b#6ENd~?`x(a?=F)C0_HbIp zRiOczO~;oP3ZfYzRMW(*e%4>y~B z9MgA03aKRvVbN^3B^bLDHerJ-@s^<|V?(xnNIy#iBv%gUr}(f{L!$G$S$c^pqG7Jg zU8GQ-)o1?r?sm^u88d4vfISKifsyu>#*A4J^JO0hbYTEQhTv$~HeGvC;n$iQ3jja3&6dd4cm zry&{pg!HKjn9HxK267R#9g?57b1xq< z3-4{FXPFI$pfU&Tg5IBm^yo#9YKfme#GHTdI5Ri%4xM_CfX{#5%X}U4AoF?5W$^Mc z;dYRm1ygCXiE@Cd;b72A8cTBvj|c5{I!edrD9C3rkKlYI=19<%pwnU{>V^lSuzkl) zI&v&G^A{w!E{1C#i_vMB% zfhn7-ao83LXW^RMP_cJ-}Q8Qi92IF ztUj;C>UnLT6>@JYa=1oV| zcXPQpHQ3r%=j=E;ZKECXvqP%1I*0dPJGHD8YL0rqeVN~_{(>rf$u9SDhBZ05JObda zQRi{qQdcFGQM%xpnl=G79t?wg0Leou#7Dp2@87}uCKo$303W7&I>UA=xt4Y6BmUiQ z94iW?&W^s&`0O3j>@Nc!V(gi*)1K8_;M`|W10Myf6g?ycV=+-ukMu|p~co#=E?KQsfrNbk7l_BN_rZ`E6;xqRvAHZ6aA zjg;$E?Ygy?o}1nNlQ%Y5tkP~^gZb?pC@kA3YW&l0(OyA*PGxW!qOs${cgoh&Q&hTGL)c_n{&i%}V5PyJ6m2G}Wn(W)KCbA7x0*#GCr z9gC7R6%xY%byS{N=M?J*T2x`B=vVczc)@9!nvpspDQ7VG+h)hW=U3llXz{UWBK4(s z3469~)JL{kViqu?j$KR1z%sheK_a>RR>?(><6*R23Trn6?UhQA1^WO<*FUdn*;Dy5 zLw(PK=UmJQ{0On1VEBl&6hfS86i(`|Lj3%*;K}yPaau}7PD}6H;Ljep9OGd_F$);1 z!D_Ex)%5YWEi1+zjM=FyKKYg<}AIm9{bgdB&^8h`49;9G3_0@?PMJWndmx^G;x;}b|e6EOy0ZWG8DM!5c^2H-lZM^r2 zmbTk5PUXJxmtkfx36*QK)6Vtd6sMdPrm3Pj#?~ulVv}H>d**0VQ%pkTtonjBPHnrY zdf5}ggs!+sX`gsH)nz|%+qkxiU8W46BUVdl>|76il9l4<*#G`Tdg%MCE&gq5{M!`t z_9Df6K(^3N=#}83u>Dge7M>EqHw!DaPzCrqt3yKk`ZGSq&O@}qr+YOm1VWpv#_|it zD66bVshk}9MQYGovSx3yurVESyx*JYkP#i9mR=_aMQzPaAztY(eub)fpLD2$xAWi^ zi`vH%n^xcgxaVnc$E1sD`&;q=lE`SzX_~S#l*b|qbNUKf4Z}sNt!9*;OJ20WY9DXI zc&zRSua&jUIhKttS@W2O2Y_6gPdct*SUKU3Bi)9rw9Bb8mGM@51Ek;}E35r~6woSY zWC-4WtP;Hc<6$m1L4Y3}Y~2@k=yT!o=c(yULAa;P7ph8Bx=3!KJyEVU&ED}~mI9$M zemv9hb2R3kx|>1J9!-rq?B>aQM7Yet5CZ!^5c3D3}Lg{+G?s=`}fm z_dh^~rE4iZUGM)D4Nf2JUk=m?Bv#4Pl(~QSL8+hqLaFx>tD%vvSj2eSg~8Zr#-Y}r zEd{h5$1)s0uwSDVu~`3A7?8m|W&F1U5L^J(+3bT?hZO#m zl|E1K+|#Ft_DdI9 z8a14a2AsfTL)0*q81F@!2+V{BCf}RS;eT;Y4xJ= z#U63|7WlG2){-@6^`aW$zL#VfegSN@UtR|VLwk-tHnk9x+^HR1y_J|e8?cRJEP zEfbugP*}$cn!j2Jg9w)c4=K5(9Tubp*C$YRWL9KIWFqM5mp7(RMC3vk zTM^m$)Rn>&2eAARPf=m&RQ!2kPoHJ98j|-?7enSi>J&PY`aNywBaGtIHML_Zha>Dw z7G@J(pjbyhYegqAm4}e!&Gdl=d zF(yNMUhwObc{V-|^ z+SQcI+OfP-a1ASTxKQ`3@NEYgw{3d^)FGu^ia<#tT0Wh3(e$}W=VwdPBKVr>kFG9LTt zeDL|;GeMpp50XcrK8?nvB4cTcJWl@0XS6I2m4}M&8a?qDfJy(say*nD`V8VWC|>SM zt$W{yxDj#7=UeK7jPw-rZ|LNk?toHm_mI0|Go|iy!RJgwEjr`F*&R{+y2vMe+RMJZ z+sSRow|6V~h>urqo!mzDgN;?8;n-VgpHDE=pprlOd__^Ra6_~OM}>9k={43rsl)20 zM>t8HF=6Ea@ZQH*a5XhNt>*3!ep*hU7jkWCfa33Vp}Fvqr8Z=0o#Qm$u6OC zaaW2_dQCo2YmAlBa&mj@RKfqERx~b)5j=G|VUU0u@pBnrZ40)y;Mwu0_)4%c;au>S zAfn*1I;+wkw-6K=8hzc#{i}~br;z<;%zfp z6z3{a-eJ{0WcNB)Qta?4w9h*w{`*DZ&<-hE($r3bz0EQRB~eBmwo6+iV{+^8pQJ+X zP12a;$nd7&&R=uRuw+)dQ&T#L-lYR*b&ys$Yg2TU;Hi4G!{fGB_ zX)&PCk0=0kVTem!D9x8-Nf$m-S}NuF=81=|QusOV>%Gux&48#EMA4*6k;&5}gOn~z zhgdKAN~zk%C7@LLm@dtc0+P#yCrhbFp6`~(!V{%5DMgwrISC8cbW7-R+S{-s$uoJf z`~Zw#JI)YgTU`Axh8*=JX#tlRZjjv_U$W`PPTY|C6a3+T@LFg{T?>80?!aS zJgKX6CX7SxllYk>eM z>nGrOAKFPLlez%zg{>~|mnrD!q@#io1N?UelOGNy`S;RDJHab0O-7>OLYG^r>8%g* z7TCt528cssshamX2)<>Wl84k#N=&LLJ!LLdg~zOhR9Px-SFZsmRB9})2!F3J51I|a z+@*FO;Q5`!_z_w564D(YlM3!}R!!;TOh0g3b zd&c&8?eW?VslRdD3GJNJIVl^G4}e7@L;PJxGxi6IO=<=#N=~}N!T}V9USa20v!sZm z$fPWY;HhWtL;omv7kZxgfRF4X?PG@p2hI~>H&E5B^KyY5VAX*iVkVzjNhjIeQ12wO z7uV7xT?xGwdW30{MzN)#JJ>j{^PyWIpItBl{IyIj$)eF25^ZAPAh!^2c-8@0%2pQe zS4d06*kmR1C_k-$%N2z=;O+?hA(4+{;M*2BU24K+2$@NE8-z@T&P6;cG%s;^=$%CF zEcavA6Bpp!d?HI^$*c-w5@n1c_*)xauM%E-a`#6F7KM@EseyOXW7wg@@hp9JGE9_X z6(K(;bSLDmQ74gXNv|iKI}_W4K7lOrYE#grpa=9HQ4b6|)+RQGB2+Ofd zR?RO=jNkp39%Jjy9-$XKy;uhbMYFiwoEwRqU)qIcV%JkNKGY_04QR(bbJ1u8u`$9J z`V?VC3SD1rZ!K^3YEo%o{$-O1iG32i;iP+Dzg;dnI5k&!oDLGMz&d6j$BJW!?a%sVH zJPijj48N*PHuM+@cnE&@Q~K$VWGLXiKtjPlibp(<;*j!^n(^S`S(@b3WT^N2nhSbh zW)^sV8gl4cQX2o;xI1xgvN!b+o1OpL7|jM(K#*(3^`~Yq(iKP#{JLU?vrdAAaU8vX z=)T{cH}Z3B2ev#Cf|UUo_MfS^6^MVFxXh_7mcUR*B1suU+!k2l*?T|6p9x zsuZW*ynjnAg5RoNIPMrC@@$x*M0=>Py1GfDsZ(7o@(!f&L|J1@h1~`>lf@sgtNMKa z)wbwR)yvD)c@(E$ASJ#7t&{o)4@@h^J+h_8W8eFZm^ElU>W4@}Kc87}$4fRqd zAJ`7wpUN(?8@>8 zJl?$<4M#5Pnmj{>nL9$XBkFtQka%+p#R}ng^VjZ=PI0&m^)~l5yXRwF4m2XEmwR(_ zB=t1c0594cVGb8AS9|k?b4|o9f%WiBD#x%mPvcxxu1)pCRq;31BL3U`x%q+G=EQxc zA?!{&KkMjVa5Y?ISIQ0E`Z*+|26>nhy5V&mOjRLQb7k-WqF^q;9|jPghJwb^CR>x+BQWRnwy2MGxwA z3!zh{y}BOsbyvDlxG4m2~k1EBUeI#IQ5n@zE}^6hYa`8D4QqZN@sF-`#v zcR^XM+X(7b6MsG$&?4Oo-6m5oe=ObPCZcqQ=`gXqqmgTR(7<*sy7s2&G*#SDEb!t--2sPm(L-6nJ`Z+h?c)(s;?+_7^(E~Ynb7u@Tc2E*`% zr{ALG?}wfN(@F@nOdh7D__umH3Za8RanutTFJrpxR^8Nyb_el>^19o1C)8U}($t2^ zoAQm7L2X4X@WWETl5QJ=JjsLKi<&OV!<9xnCVwJZyWV5FX-?J24^Xp;f*Jl^QMmH3 z2*&t_#z7xX@n?Jy!#LPj4j04SZA}-or-i z9Cb2&0_inxKJp7L15zg1?q)4AUjkiI%PXC4B3dW0K zn(#bTGFCU9rHk~!aEy*qHh3;b;sh-!!Ht~2kx}9_l{apJ*>!eQO|P` ze>VKEeRbe&Iz)>C7i+)Y&hK;<4Ely+G7|Vc-}CLP8(vh z3+b#|n-UhXP`q|v;C})a8I~E28L|w00xc99ID-xwGGw@qF)$G)vN3?Z4s0Y^?RMG} z%=PWCtV3&%FuXi;9tv<_l<+M11+{+N-e8;ug_Rfaet^+%FH{5c?Y^`f8#zz6}R`tIFxRER1 zc(87r&$)Vn-o8pZL$sl(LBr}hS7R=$G7B|?8d@0mN}xloWpH+8f%Yuz1tr{2)p?IA z=QlFsWd$3W7#bOz_zQ-ut|9mz=dS^mvkFizj|KSK)t0#i8R`RTV8{q~MQ`XIRKI!# ze?uvQH>mIRe>*uF{(^^%$urk{5%Y}lkc!OCbiGd*t`C6SM}F-7B=LvhKdFk!vzSb)cNWj~Pb56c0mO_fiSN^nm};K-V1l zq|c$ZdMr`W|E+(oHwWydSNe$o=k$B18{}Wb!p3&$8t_Q} z7K;ZqRYPr>l!=H%u<)>IXS#V23*+kpYwSlPDAt6NOv73wA2F^3F8@ zTs(iFl&#lhZP9PlPg~Vazggc$zg|BatWo-}vaV~me_twKFs;#-3Fxn1jSSTwZNMo_ zUs|s32%o)LfG>GM#ui@gQlaL1oB;fLv&Rh^M~ye&syGB*w^uY$38)I>slV^^l|b9> zKn2vdI(5CHul~BzO($pCS^!T+qspSxS+j(xMtrRIMX>JlDc}0-3kFTdE>7XjeKpv9 zhQDVP@(UsYw^*JE6I9B8M(D#(a3#SBhgAg8V!N$Z4%9na#xvUXOV delta 53 zcmV-50LuTK%PgeDD3BNj{F(^>q#_D|AB7(Qg&zWi9|MIS1ce_3g&zim9|wgW2(=#x L-I}-doeHRj-&PU; diff --git a/tools/make_unicode b/tools/make_unicode index 520cbe0f1a5..f697eeaaeb4 100755 --- a/tools/make_unicode +++ b/tools/make_unicode @@ -26,6 +26,7 @@ use Encode; # base URLs for www.unicode.org files my $UNIVERSION = "14.0.0"; my $UNIDATA = "https://www.unicode.org/Public/$UNIVERSION/ucd/UCD.zip"; +my $UNIHAN = "https://www.unicode.org/Public/$UNIVERSION/ucd/Unihan.zip"; my $IDNADATA = "https://www.unicode.org/Public/idna/$UNIVERSION"; my $JISDATA = "https://www.unicode.org/Public/MAPPINGS/OBSOLETE/EASTASIA/JIS"; my $KSCDATA = "https://www.unicode.org/Public/MAPPINGS/OBSOLETE/EASTASIA/KSC"; @@ -1825,6 +1826,11 @@ my @uni2cp = (); my @tolower_table = (); my @toupper_table = (); my @digitmap_table = (); +my @halfwidth_table = (); +my @fullwidth_table = (); +my @cjk_compat_table = (); +my @chinese_traditional_table = (); +my @chinese_simplified_table = (); my @category_table = (); my @initial_joining_table = (); my @direction_table = (); @@ -2106,7 +2112,18 @@ sub load_data() $decomp_compat_table[$src] = \@seq; } - if ($decomp =~ /^<([a-zA-Z]+)>\s+([0-9a-fA-F]+)$/) + if ($decomp =~ /^\s+([0-9a-fA-F]+)$/) + { + $halfwidth_table[hex $1] = $src; + $fullwidth_table[$src] = hex $1; + } + elsif ($decomp =~ /^\s+([0-9a-fA-F]+)$/) + { + next if hex $1 == 0x5c; # don't remap backslash + $fullwidth_table[hex $1] = $src; + $halfwidth_table[$src] = hex $1; + } + elsif ($decomp =~ /^<([a-zA-Z]+)>\s+([0-9a-fA-F]+)$/) { # decomposition of the form " 1234" -> use char if type is known if ($1 eq "isolated" || $1 eq "final" || $1 eq "initial" || $1 eq "medial") @@ -2127,8 +2144,10 @@ sub load_data() } elsif ($decomp =~ /^([0-9a-fA-F]+)$/) { + my $dst = hex $1; # Single char decomposition - $decomp_table[$src] = $decomp_compat_table[$src] = [ hex $1 ]; + $decomp_table[$src] = $decomp_compat_table[$src] = [ $dst ]; + $cjk_compat_table[$src] = $dst if $name =~ /^CJK COMPATIBILITY IDEOGRAPH/; } } } @@ -2213,6 +2232,24 @@ sub load_data() } } close $IDNA; + + # load the Unihan mappings + + my $UNIHAN = open_data_file( $UNIHAN, "Unihan_Variants.txt" ); + while (<$UNIHAN>) + { + s/\#.*//; # remove comments + next if /^\s*$/; + if (/^U\+([0-9a-fA-F]+)\s+kTraditionalVariant\s+U\+([0-9a-fA-F]+)/) + { + $chinese_traditional_table[hex $1] = hex $2; + } + elsif (/^U\+([0-9a-fA-F]+)\s+kSimplifiedVariant\s+U\+([0-9a-fA-F]+)/) + { + $chinese_simplified_table[hex $1] = hex $2; + } + } + close $UNIHAN; } @@ -5179,6 +5216,47 @@ sub build_locale_data() } +################################################################ +# build the charmaps table for locale.nls +sub build_charmaps_data() +{ + my $data = ""; + + # MAP_FOLDDIGITS + $data .= dump_binary_case_table( @digitmap_table ); + + # CJK compatibility map + $data .= dump_binary_case_table( @cjk_compat_table ); + + # LCMAP_HIRAGANA/KATAKANA + my (@hiragana_table, @katakana_table); + foreach my $ch (0x3041..0x3096, 0x309d..0x309e) + { + $hiragana_table[$ch + 0x60] = $ch; + $katakana_table[$ch] = $ch + 0x60; + } + $data .= dump_binary_case_table( @hiragana_table ) . dump_binary_case_table( @katakana_table ); + + # LCMAP_HALFWIDTH/FULLWIDTH + $halfwidth_table[0x2018] = 0x0027; + $halfwidth_table[0x2019] = 0x0027; + $halfwidth_table[0x201c] = 0x0022; + $halfwidth_table[0x201d] = 0x0022; + $halfwidth_table[0x309b] = 0xff9e; + $halfwidth_table[0x309c] = 0xff9f; + $fullwidth_table[0x309b] = 0x3099; + $fullwidth_table[0x309c] = 0x309a; + $data .= dump_binary_case_table( @halfwidth_table ) . dump_binary_case_table( @fullwidth_table ); + + # LCMAP_TRADITIONAL/SIMPLIFIED_CHINESE + $data .= dump_binary_case_table( @chinese_traditional_table ) . dump_binary_case_table( @chinese_simplified_table ); + + # FIXME: some more unknown tables here + + return $data; +} + + ################################################################ # build the geoids table for locale.nls sub build_geoids_data() @@ -5237,7 +5315,7 @@ sub dump_locales($$) printf "Building $filename\n"; my $locale_data = build_locale_data(); - my $charmaps_data = ""; # FIXME + my $charmaps_data = build_charmaps_data(); my $geoids_data = build_geoids_data(); my $scripts_data = ""; # FIXME