From b7c49595630ad5fc11a3a9fbad3da2e62d6cf5da Mon Sep 17 00:00:00 2001 From: Jairo Llopis Date: Mon, 25 Jan 2016 10:53:15 +0100 Subject: [PATCH 1/4] [ADD] mass_mailing_unique: Avoid duplicates. This new module avoids duplicates in mass mailing lists. Now you cannot have 2 lists with the same name, and you cannot have the same email repeated in a list. This will avoid sending the same mail to a contact repeated times, which will disturb him and most probably cause you to be blocked as spam. --- mass_mailing_unique/README.rst | 67 ++++++++++++++++++ mass_mailing_unique/__init__.py | 6 ++ mass_mailing_unique/__openerp__.py | 23 ++++++ mass_mailing_unique/hooks.py | 43 +++++++++++ mass_mailing_unique/i18n/es.po | 56 +++++++++++++++ .../images/error-duplicated-email.png | Bin 0 -> 41829 bytes .../images/error-duplicated-list.png | Bin 0 -> 36928 bytes mass_mailing_unique/models/__init__.py | 5 ++ mass_mailing_unique/models/mass_mailing.py | 21 ++++++ .../static/description/icon.png | Bin 0 -> 9455 bytes 10 files changed, 221 insertions(+) create mode 100644 mass_mailing_unique/README.rst create mode 100644 mass_mailing_unique/__init__.py create mode 100644 mass_mailing_unique/__openerp__.py create mode 100644 mass_mailing_unique/hooks.py create mode 100644 mass_mailing_unique/i18n/es.po create mode 100644 mass_mailing_unique/images/error-duplicated-email.png create mode 100644 mass_mailing_unique/images/error-duplicated-list.png create mode 100644 mass_mailing_unique/models/__init__.py create mode 100644 mass_mailing_unique/models/mass_mailing.py create mode 100644 mass_mailing_unique/static/description/icon.png diff --git a/mass_mailing_unique/README.rst b/mass_mailing_unique/README.rst new file mode 100644 index 00000000..ea59209d --- /dev/null +++ b/mass_mailing_unique/README.rst @@ -0,0 +1,67 @@ +.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg + :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html + :alt: License: AGPL-3 + +=============================== +Unique records for mass mailing +=============================== + +This module extends the functionality of mass mailing lists to disable +duplicate entries in list names and contact emails per list. + +This way you will avoid sending the same message more than once to the same +contact when selecting a mailing list, and you will avoid conflicts when +importing contacts to a list that has a duplicated name. + +Installation +============ + +Before installing this module, you need to: + +* Remove all duplicated list names. +* Remove all duplicated emails in each list. + +Usage +===== + +To use this module, you need to try to create a duplicated mailing list, or a +duplicated email inside one. You will not can. + +.. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas + :alt: Try me on Runbot + :target: https://runbot.odoo-community.org/runbot/205/8.0 + +Bug Tracker +=========== + +Bugs are tracked on `GitHub Issues +`_. In case of trouble, please +check there if your issue has already been reported. If you spotted it first, +help us smashing it by providing a detailed and welcomed `feedback +`_. + +Credits +======= + +Contributors +------------ + +* Jairo Llopis + +Maintainer +---------- + +.. image:: https://odoo-community.org/logo.png + :alt: Odoo Community Association + :target: https://odoo-community.org + +This module is maintained by the OCA. + +OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use. + +To contribute to this module, please visit https://odoo-community.org. diff --git a/mass_mailing_unique/__init__.py b/mass_mailing_unique/__init__.py new file mode 100644 index 00000000..baa4dd41 --- /dev/null +++ b/mass_mailing_unique/__init__.py @@ -0,0 +1,6 @@ +# -*- coding: utf-8 -*- +# © 2015 Grupo ESOC Ingeniería de Servicios, S.L.U. - Jairo Llopis +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from . import models +from .hooks import pre_init_hook diff --git a/mass_mailing_unique/__openerp__.py b/mass_mailing_unique/__openerp__.py new file mode 100644 index 00000000..5b7917d5 --- /dev/null +++ b/mass_mailing_unique/__openerp__.py @@ -0,0 +1,23 @@ +# -*- coding: utf-8 -*- +# © 2015 Grupo ESOC Ingeniería de Servicios, S.L.U. - Jairo Llopis +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). +{ + "name": "Unique records for mass mailing", + "summary": "Avoids duplicate mailing lists and contacts", + "version": "8.0.1.0.0", + "category": "Marketing", + "website": "https://grupoesoc.es", + "author": "Grupo ESOC Ingeniería de Servicios, " + "Odoo Community Association (OCA)", + "license": "AGPL-3", + "application": False, + "installable": True, + "pre_init_hook": "pre_init_hook", + "images": [ + "images/error-duplicated-email.png", + "images/error-duplicated-list.png", + ], + "depends": [ + "mass_mailing", + ], +} diff --git a/mass_mailing_unique/hooks.py b/mass_mailing_unique/hooks.py new file mode 100644 index 00000000..419b520f --- /dev/null +++ b/mass_mailing_unique/hooks.py @@ -0,0 +1,43 @@ +# -*- coding: utf-8 -*- +# © 2015 Grupo ESOC Ingeniería de Servicios, S.L.U. - Jairo Llopis +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from openerp import _ +from openerp.exceptions import ValidationError + + +def pre_init_hook(cr): + """Make sure there are no duplicates before installing the module. + + If you define a unique key in Odoo that cannot be applied, Odoo will log a + warning and install the module without that constraint. Since this module + is useless without those constraints, we check here if all will work before + installing, and provide a user-friendly message in case of failure. + """ + errors = list() + + # Search for duplicates in emails + cr.execute("""SELECT c.email, l.name, COUNT(c.id) + FROM + mail_mass_mailing_contact AS c + INNER JOIN mail_mass_mailing_list AS l ON c.list_id = l.id + GROUP BY l.name, l.id, c.email + HAVING COUNT(c.id) > 1""") + for result in cr.fetchall(): + errors.append( + _("{0} appears {2} times in list {1}.").format(*result)) + + # Search for duplicates in list's name + cr.execute("""SELECT name, COUNT(id) + FROM mail_mass_mailing_list + GROUP BY name + HAVING COUNT(id) > 1""") + for result in cr.fetchall(): + errors.append( + _("There are {1} lists with name {0}.").format(*result)) + + # Abort if duplicates are found + if errors: + raise ValidationError( + _("Fix this before installing:") + + "".join("\n" + e for e in errors)) diff --git a/mass_mailing_unique/i18n/es.po b/mass_mailing_unique/i18n/es.po new file mode 100644 index 00000000..c2447c42 --- /dev/null +++ b/mass_mailing_unique/i18n/es.po @@ -0,0 +1,56 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * mass_mailing_unique +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 8.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-01-29 12:37+0100\n" +"PO-Revision-Date: 2016-01-29 12:38+0100\n" +"Last-Translator: Jairo Llopis \n" +"Language-Team: \n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: \n" +"X-Generator: Poedit 1.8.5\n" + +#. module: mass_mailing_unique +#: sql_constraint:mail.mass_mailing.list:0 +msgid "Cannot have more than one lists with the same name." +msgstr "No se puede tener más de una lista con el mismo nombre." + +#. module: mass_mailing_unique +#: sql_constraint:mail.mass_mailing.contact:0 +msgid "Cannot have the same email more than once in the same list." +msgstr "No se puede tener el mismo email varias veces en la misma lista." + +#. module: mass_mailing_unique +#: code:addons/mass_mailing_unique/hooks.py:42 +#, python-format +msgid "Fix this before installing:" +msgstr "Arregle esto antes de instalar:" + +#. module: mass_mailing_unique +#: model:ir.model,name:mass_mailing_unique.model_mail_mass_mailing_list +msgid "Mailing List" +msgstr "Lista de correo" + +#. module: mass_mailing_unique +#: model:ir.model,name:mass_mailing_unique.model_mail_mass_mailing_contact +msgid "Mass Mailing Contact" +msgstr "Contacto de envío masivo" + +#. module: mass_mailing_unique +#: code:addons/mass_mailing_unique/hooks.py:37 +#, python-format +msgid "There are {1} lists with name {0}." +msgstr "Hay {1} listas con el nombre {0}." + +#. module: mass_mailing_unique +#: code:addons/mass_mailing_unique/hooks.py:28 +#, python-format +msgid "{0} appears {2} times in list {1}." +msgstr "{0} aparece {2} veces en la lista {1}." diff --git a/mass_mailing_unique/images/error-duplicated-email.png b/mass_mailing_unique/images/error-duplicated-email.png new file mode 100644 index 0000000000000000000000000000000000000000..cb69b830f2107e2e758c9506ed489dc4083bc3ac GIT binary patch literal 41829 zcmcG$`9IX}7d|dU5ha8WX+a3tcakOhI<^SOZpgmVh7gjFeakkoGZSN9Lr7yEV?s=} znXF^?xu@6n{e3(>f54|7H01f5=iK)>*SW6ioV#d!U3FS&R%$XbGFpvCDu!faXG_V* z&Tw6z1V70tSP}w%o%2@KFunl(gj{&`7JPrrN7c;7$iu{qG;&vb_yzX1nq4*T5I4+n=fbyXMWL z#Q%%e5{!nIITgOQgdVOaAp8kWE^#U}m8wB0bWm_rq?nFfZ~S$3spl^qMqR27KMe~C z3eq1N)9dyNq>Z}FsfMb%hd!~e#`#HeC|YShmQvN=t;)@3wdOBi*o^XBDa(Q3 zzk^{M<8a^qJ@`8z_DiSXt5&6DWwFmhG=y1hC-r?z@b~f2=S#j2q5S>(ce2IUrR;2u zgTuq+wKWx#m{$Y4ehUj53rj8nkvcwZ;$x*gu_G=&fyL^1cnGbpuao`W+J}YK*Vh~H zB~KzeI7LN8ozi>SU!TYLT~`SC6rwO(VTJs&vSNXfkkEoaf`Wsuv9Udz@O4A?2-9rt z%iX(o@3Ud)RqGrW%*V&a?O@W~#MG48+uPeLg+fdr1?jhblZB>{d16S~%+j)}M!*B1^0{-j5B{#I6P>oTv+%+>ay-rz>{o1T zEF*P9WN+Vo$PZskDD6w7HhJAR1%{?xTWm{c32cSqmf60ygXs7{;H1-OJ+%B7X^!*f zSJa9CAYy=x?ETE0q(L980!gh?x%ogO?TbZ4bMti_)Ys>8#=GD}%};)H<18?gtgjYG-&rY51G^%7og2+d}@G;Qwa?x%Q>jetx`L7WK+ zgw)32v1L<0Vq)Tz{1M))tSkuHcc}Ne zf3ZoiHzyMMDV29)g{i0dcrCT_0N+e!Lp8z=r)bBuj8x**F7J;6Dme1Q|uzxPkcO z*&T4!w-0dvgKD5h`(N6_UgUv|F@YCS_upCMne%B+bF%H zfyGZbIk+ju9A9E{dg_xPDys=;-xWsviZ`=CtL1XU8E=3h02{`QA6Qj_I)bz_BoeTC zrlzJ47LV;PKPg<5nSe>NsYx*B;P>w!`({qH_!~F~IojL{@q=;QPoIfgtCpfP;PSKQFB!`_m@}o=-)x=)G?XRVn|MoohVD<5 zKrDbGj<7vjF`Y7Mr%T1Lg#`egqob*2kMaInV1= z`xoCtL{Jb3(;Qa@p97pA9t9xHWUdaW5gd7V1F-zvPp`CMTZ@PzL5&Vi5{P;d8NSHs zNM$Y%_i$)Z-?O*fPa#%*S-YdMy7AKspPi?R6c|j1VzX){4bUxG=m35He<8#qvjIL*u*7rfpKKHsErc`es3*XEP%2EhTw>~Je zzR46zB0ynB3!J8qH^z{~iLmvFfTN9G@IG?sMV{M#MqtpGkzPoS#EDL1r(t?f%t%8AurZPnLQjb09SGsg zIATyp3W+Q}O(JTD>m<2J41hT3TlB&sMxT@#$5d1Zis{^8iBzJeK0$9b|w`98}Ira`JHgC*ycz77Ca?>eYO^mg$tgOuC z!+W*L%5k-X_4y{UseD_i^El1^bj1A__8%x2Qt08fgFiljW}&vEXxouAnX z*j+QnBMAy1D?n{J>hUv<%wThkK=@O7$6YL z#OR;nH95jNd0NWX+uPe;3B~nI2~Fc(!3>o_gq)po*fA*xYJ7Yg7X1el{lrJl%;CLaJ}if^>lph=EVrBSi&Mq)z9o73agQ(_Gc z@Lf{9Opx2W&{*MpwC6dLDcxz8Am5YPdbD^IahPzrmk_dM$GI^6*kiGN;>kh-E_)#_ zieui6^Nz z?5Y_*(aI5NYh%s?V6Ib`wIwI(N1|pS3p=|H&!Sh)p+pep7}{Deb)oI$*-ZIhzrl5% zS;gSpwRT~erKKfU&lSms0E~JIg3zlz9>nxrV@P~0r^*WuN9OKJhvaVNNtFUZP2CNtS3nV9Mw%@bh7!9`?0~Oku#080> zMY~(J<-Iy2y*5}_S6`12wx;cUdf&&&AK9o{U;y@Dd`!IT8k!D0;4tJYlQp}t1ig4j zBskjIw$u8*e*HS+*ICYA{MP&Zu+<>P=d;uRKYq2HnGINoyNA)cwKJ)edgfO^c$G8MvQVGkQ$wTMS_+7gdI&SzUo=a5R;w0N-794!RE zZgNYD!qe(c=s_PZFE1-*w!z8B$tM!tx>&(v<5ukOdBwd4m)NCV*s_4-PvJb>>vc`< z^DE;og~5ITnDUEm9S5oa=o7$x{4EC- zReW5K3tVy%^!j&3NuW2s?%uqh2SvMojeldz^~NUjfsyimH>jUpEvSDpt_Fcnl`6kQ zG><7e-k|$c-OI6Xa!4o!>P6|s^EeA`lH%SN|GX*#1i}%J3v+1f2|QSDGsvY3CW5S_ zn}>Q7zMn>;2bf#_Qn=m&cz>j59#$ul%Go?4?J#X)a5N8R<`OZL!o1f^?IS3NfWu|%1z>9CR0t} zX!zitLeEPaGydfncgFjqJ$6of!vqE_b`Lu*D{AZM4g0zxNVn>W%LiGJ5Vld5JM7B~gSAx1c@zEP6v7mby{G?Cm`7lQ1Cb&dkKp8S- z-+fjn?fBta+7IaW;QeJi;`m?+IeOe0^xz%dIFaWJM-Ai3f(IeNq1?&FT;nCP2>B02 zSQ!_jOXW6LtrUB!-tm9_#>}ToSApVm3j*t7&2!3PRfdJejfb;RE51AB#JFtI1HYMU zQk$?Og@MOKew~oTW2Av9SXl5(ViTGZRzs~nF{W>Is-V|08nem^V=Gbhh}ndH7dllW zS5zBA?&*E;p+(<%LpRZ_DS9-1vQAq`x-DIPgGsuu24AVNn-bLCz1+^Qc1mDBkBz0uRvxcK-+qB_*4(inu2TeX`+tSyU=uW#SFcEw9I#3#>_a@ry| z)Goc~5aFDT$Nsy$WMlm$DIOuJIU zte1O!{&xj68jk5-44Rmt(Lv1w7mZ&mGt{^`&srsLF=yDnIb#Eku-J2BH2D`2?qY1T z88P{8G9|jYL%F;zI#(g3awaFH$}qZ&+qO&P1y3mI;X!J%*G4ZV?wAm+n5SQ|yl!S@_AA-+$sAAuLW(CF z3DSOREWiXBh)-RR3|o-oP1a;r49iSQy9N~4*R3I0AUDaHHhS2A__<;=;q2oDeu144j-yxxf$BNAt`xp+wAM1tfvwc!ceBa*BwE zyee{Dn{Cce=LmcQ?23v;e3asmEm_OSP9@-cQ=@*;3a9(STSr^NBy#f?7k+|M+Mgk@ zQ2!i7uiqEQ!jC7y2Z^nxp_i`9bTPN?b>DMNSg>gFBW;bP>`+(RQ0q=b!)E|s8OE~l zo}vq^$6<>9sh!|pS^pW&^JmYV1wx#f7dx~>T6G|cIe^+G1}r9%1X$?}ReKLTTqgkAuITU(s0rBklqT@( z>frGH&`1#DZ`ppJ^b{#RBKH;ce>0H%X#_Qo3yuV2nS{`}?2Lepw;m0&zN=W3J3ZPW zIT%26o)wmn=|6i}PN~#*-cj-JT4n1=t z2TYhw+*abCLt0kWA|SUF$dH2F-JKmEtOrky4}oR@l88tEwM0f%mg*ciSb%pxHqQLN6j%QvcLl{M5_R$7owo2rFD_4+U#A3LV~^dj2{|036FD5|IhsV z^XHElDsZyI)H*boCntnn2eo&MJq^XTo`U)?Us{|!AAVeU+AZ0#L5pwN()AgqUCFp^tt)ut>(j!Lju6JjV?d8sM=tti#a(J7cDp z8$oN6_Ysf(LJ^prXa*h=no{6l&3N`+ch8jtkq&a$t#k44-~b2(AYUmdDZhs7i^$8% z(;{z5x)5Zs`??5CNm0>G9Z5`AcP#UnPk{JUR$hLQ;ocYxmJapvX9qCu0JEC$LFqsa z0m|5b&AA+sD_8Mg!k73p@bq4?CU87*XX19cnXS8UTb|fZqIgL2;NNwRaJCoLr#sfT z)bRaOOfP5Xwn4>{=6=y(xlZiqF?Op@FN~fy-1F~FWq20A1;4e)cESmsAc!u4qUE-} ziyo02%1@b@p8+i*SyYSd=Q({8t;cKL0i%K$WFR1No^u@(@z-U0KvYiFyD|gBbHC#o z5|XK$2NJ;^7=rG1jv|k)u75i2am)l*udSb73Q207A<;={@NnTI%pC$r{DinM z9DcGDvQuVl5AK3N`fsU+Z>!@|uY?~Ihf{w<9+JCS^unRpA)6Z60rONK1{OF^rE(5u za5L+V5Vin7=7YRMuHaj>TKNHS(0J6$1YF`8fe-~wvLfdc4?}*;L>DWtI3%6yYt1>r zk2YYqEUK4el5WZko5sA1CK$MX))=>wA!CGm@UF0kNC)uCfdy#6#M;bSj{r_38m_^e z1a7?r{MYB;(*qd>EC9R&6s7TtA zJO;VEyle~L2?&QRU>{ZNHA?owp@@}$(_^Ag@JY)dej&{<+Y_m8{q_0F;gBU!vlLZV zSN>(6>GIn_$DN8tXHVB#k0rqedid}m@Z`1%g+i&&@W4NLQR7Y8<)HU*ADGVowHkKD zA72AO3+@Pfnb)KY+TRaElo3FzMh@c^{@IiOr$M3ubhrEAUdS52q(!@Y4vP zke47V+>z^WSnnxFmRHZEv_aVemgnzS>!X`M37DG5!THO#)@p}0lPg0gR1N;DuVXen zYyVa4OvBRO`&x@>o_Dwg~)@T`&tL5W^BKhwpWUoE~Cvm8S=l`-iQk!ICd3?9(g&ZZ1UgWdAza z-?D58Ni!_%0%(bWx9%@xxObzMSJkS2%Fug#wo_+$BLuwL_-lhkL1X7y#$XF4zqU*nGWf4No^O{_@G-{R$)rhX#*@&zzy#4SKN(J7EI;I82p;Bv%USTOJkzHWBz7mLBTsc z?dO4RYeACgZbpTM(T1gODppBV2^2h05MB2WGvrF);fg$Z*`M`!-|H3!0>uX7uG{Yx z3VR@!dMi!4aX~UmumZ##OQb>l5#T7`S8rzwei&E;)MFb4^>Nsg4?B_qTL}zV3;ue4 zutu4R;n~0qAOjjj+8>{Z9wRPgcr1ZB;{b3ZWV?X#4r|;d(DgWin+M2C`u zIv_tgglPn=8h=wds~Q9x?@Xj+WZX&}AT?X&H}-0FG71X|yN~m2{QUf;wm@GIxj`@b_42*jJ{&ofAHEuY^zc&|; z{b!nzEu!h9xyG(_0#rIEo(VraCb2uc&=sSQd4`sAvDUW?RZ{utj>w3UhLL>zEx#*(pr&DUj{6 zVTbF0@3sEgnXtzF87Z)A^r3nIgqx87)BfD$@JCYYOMmA&@lZ<>5izl@SfQ40*ZpUz z=e^>lFaAKIfvRv9uP!b=-zhvNu6r&EB)Bk0vQK`x!3!ETx;6w=a)O#TR7^=IiiBW1XoE2^#_j!{#-h~iv5B-R2bY0SAO%{Fl`RJ@ zN%1p1K#c=mA`P@jaEhnWoF{*y_Lud-gRIcEfd+7M91{KloJ7#$Nc(O$fyU$UMZ;Ad zX#JM$8UqO1K+PF8)#~amn>4NThKLsk5muUWWd;VXih$t=%%r%zl*B2F!qE1P$3A6#;d!j7$Tjf!Iz!5u`*v`lGIRGx5=LFuSmd`NB5Dc{0bj3D!9Mv3o;= znSdG~6$osY>?t05jD-CN04R4t@=n3n!h68Ug;{>1a!$5u)|*d{2{`N1)$sM9Dmh`{ zHXenIXqb7-M2)umY(>-T`<3rs*S7X&?*AkU-*pWC*R>aXa0=R)>i(7+8wbANB*^cwfYu~qtg6CJsh(A;A1S}kiTS*|$@ytXs-P@AeVWgg5rF&pqA=Te=-}~m z&+yTHj+Um22uf^YKV7%PWoG!Ftg%%7EdDB94O{a-j zSal(*xwe;!m?zD^S)GaXtKL}&-B`#J!u8gCvB!k!pe%Q{HWI>{U<1{YC&2x5d>uA{ zob4txUqC_1IX%LSh{cf#fQT9}P=I4VOdl7f0mOMFY;I;`x_d5^+MoEDb%{xFjY22p2O-}`2fYb)LeqMr2|GH_VuJNnVl@s2W zE##~GN5Bt2nXJ~7!(flCn3dh`sT%Cf;1qhXC+k>{x|Q#>xtG`17qf%$bHFh~&JHqw zn1a*txE+KjfKUYeUcC0v&@;_6?Vc={d&l46@~(9t{v9Xg4Qo0QcxQC?vU;Q8)p8EanN6?cn~ zx_tShAV1LMp-Vw@(uz*@Gjpa$Tg%>Yk_oFk^9iVSSWkgqoEBszywdfNuOQ>9Cu^X* z6m!MwgARTQLzGxG6m4}9G*!`y8la-w`LbyC@5&2YvyDLC7&!V_*Sm-my0RKJpXqjP zvq))WIx{epDmfUu+!*hiuGFv&x?Q0|vO|9@{H|<*jLEF5jh(=_)u*SF_AmGks5c3-o~${zb>cQ1Vz#UOTjk=pBx z|CTwwfz>M9Dk(ZC^Lo%jb*?nKwK%OV=HoZXba3dEn&z?In?;5<%RhhH*Q(-IBDP$I zK*yL1K8XJ!CJjF0WuykP0>CH&kG6J={ainB zRh0I%Lw8wFo>0bs=VJd=`sj0w6|eJc(z#)SxI%dL|#r))dvP+UcvWb^D9Kz)gsdlS^y15;}a(=KqP}3Vm)z_Y1 zw|S>8@D2vcxO8uJ_iC)_5;N1MtSnUsgw)7WX8h&)e9PZ4|7xc&DDmgco{4E3Vsjk& z0Y;PLm~N#GOWrXHM7ySQUyO|fV+clk$z)#vZT3v)a$EK)8#G zoLpTCijhdZFPi%QeaQKq`a4`>aHwR-yDauRdu4kW*{HZ?<7Q*yBN(>UaM8MO(sB`fFXJb%niAv2@aeIE$}XzfMa3KCjw8J^o2IC9?jD8Z zt+g(#u8RV}o&leLe~@P;V7k+k+%=|bpY;P)vSQc*hyF~{4n(s34z*ffU|6iq?7MxZ zv#l8B-p$AtH>Q!q`qiziJ9Gba3b@_`th!E*g+cVCMX7NYpJ_=8xEc2ok=5lp5Qb(h z6M%g&ntcM*PAN{II&&+QDJ^Kf%7(@z0V7^UmTT9$g>^I=@qV)9kM9+-SDCmqKqssw zXiL~i@`J30e~&UoD8KaKUeFb*!>>y?Sy!8VE?Lzc{H`y+1SaJyP3wOmXBsXtgZ0vu zS&!eb5|^tS)z!1P$3$&bqyc^zQQS*A`d=ozWz#|_!x)U2^z`O9#m#sZ^{@UlsK_2K zOK;@*rtvac%naECMK5Nz#k`6e3<-PLWtKS*adEBD8w+di4;&KHSz=-WgN0fHk{3#b z%rpkz)lDz24a>{(C!HGm&12@$TZF=0p@GL*&L1wa@c-uuYw#WzENw!>!9l|=(7LQG# z3-vcd+uil}2l0;y)joDX4Xw_&-l9R&f=06HD6d8x77nb+(t>1 z!SnR-^JNFdZYb}>=yj9DO!v0Zr!l)zCPh!!3UKh3kh6Rr%R=`Xa{i*H||c}xrh;aw0cbdrTn1X#EtQB>2x;Rd$;6dR?ciy9F5K%@LAq=$JQ@x6q@;<9towYjUI8IQy?#pp|e z<(kj<2KX?J;W~fpES?!dxfh3~KnwOmy5={$WY3^##>aGXU|@;~%u<|t{op9Ef=>-`h6J`A#e-H5?IOYSm!lUDEaj(%8B|A8_%$ujGW@!Rjs7kfzmIB;Z)~d z*VWZk)mC0^4G%=8m>2*t131%%JUUo@?&`rN-#TSHZhrozsufStpddkJl{PFz_1~b> z{VH#sXchAEp)bAr$}fST1ibOa3LtS)`C5Hnx$q@-)CjoCJkJdYb0yDZ(06ojyvszr z^SVw_rHpUGiE%(|d3Cj*u+V-=8mI|Nh2ha{F||?^gNeJ#K?}JsXJC?m(aGSbNC|n_ z>i?qPY4D`+Bi~m8Gh24Q-;pcSv%gOv=X((s5m$8ZhZ=6g`gg>8pe+WyQ-6Nh39Hd7 z>nE}m%YU0&>pLUU44omHaVSi=;^VEodB(g$f8_e+tP2pKANroHm>%*aw>aHa20m+U zD;63Hns<9fLdC6h!#MBGl|G~53sIeH)UY9VuH33ScanJvt^M7+5xLq|gi z$Zh^^z-=Y> zYRNF%frJ@Dd>EaSJz3zn+*qf4o+s_dXLFbJ$F7B>m zwH_d|evOs2qte-@4q+PST<(%;*iu;vW`UCW$h2^1sxN&$jqC@j6vmEiwMB_?|=4S^*Z*?Iz7_g>1|qrG@u&Q_gn|Z zjB(=3v8w+0pQowbxZR+m`I-LcN2_-++N7Aa42pKPI~~dbs6m5zW^0=lG;ULjt{hh9 zOU{2k>}_)z1_t(!El{+!j!yD$0!%PC6b@y$a1PKFJ6!yAd`s4I>jVV(%33k9>|$%t zeQ9|eh14?H*@G?+RJ2R58(vlALVSvN z72%w=XN)zJwD$jSJ7e7DUHo~!vs!a@CSQ%8}dL47r5_Y+)$ zD~U%khx;do_k>O{YPQG7`7_%Qn8HJzPvL7~OMB7FW{i}Pd2}b~wo&P#m5V7D5dy?c zOLS(uZmbx#cYFeS(Ksu-p1Btw7q3XyCPpJN<>o6Z59xnYc<2SDjaWr9v<<)EQln1# z57M!Et~yGXN3vH*gVD6j#!nlK!Bi@QfGW*rqXa`z+dlpSlg1-HVEAGJN%ar%J@_+N zlVrkesRu?^DaqL~s)SU2KROR9dit2(RL^w&3v*n3F6Uc@fC8lv0TYKkD~qAxgGa08 zPwfIr-i#V^$2nX0qMaZe=|&V1I^N4BLTqlu4DaVRr1q81G@H4FxMrreUhKX(Wm)0Q z=7#2Gp&qGicd6`@ZINK79{Kt6RmJL`pus?6Mn*Ju>Oi7)A%Fm<|H_v61qhh&?)SsbDPwBLLz~^BH_ys@psx_zee@nuDK13 zm6=Y|%`~E3Bg)*xmU&zm^^;f9tf6kk#;@jXY_!MsGpu4zo5$pJ*Z&mVVQFvhhB18U zx0B+p?b3Ce+1bvIcV-1$e(_qvv{7G7xwgat6SuA`QbsoVO((v^r8jh3w6#h%G1BW zcuB|u%owMn+p|!1Q$kD!#0H4>%HPa7uh%kgw86Rk22C-#jxM+_ZWQx)e2`Y6Q$ZRSCJ0S$$!ST zD2U}$+S(Y(VN5PYD0fDufVqBPt&SK}Xi65$uRnz~~AkanO=d*ufeg^{{9_sz}c%G$zoPA+WCHxs|X7*wU# zYxt722%$E%caQ3gVQ(Ifj62<~F)nn^)fb?TQ|o(Hn+*6alZ!YYIEconjpipqt58?y zoh)4=0mc=U6T2%g!vIKJ$aMO3Jwr{eq+gqRXlb;DA4XSJU)eoFyRVq!v$yWAaCcc^jUFPx;51#`-cHYi$)z|7SD2H(U(U!n|^IPcG2UHls?HbpC+S#eD)TTm-ZpTA#Ih z#^SY~Op?-7)_2TM$^nZ;EVMbgDg2`AN8hiw@yMrIC~&}Q zv?n=Vsq7clBkB^fhK+TqehU=C_!vwpe`3bQ>NLXIP>T>qpQ8vbtwYC7Ja+Wxq>w7Q zsj|2x3pDD+b{!(mbPAiS^_0Q*=K9w?0N`!K#`41B)};x4_OiP6jcL88>Z+=$r?Sv~ zYdK5TI2c0rPQ9@Jy|7M5A$>oSpHOQ`=0uv*2*+)n^*Bz5k}2RJ_X< zS=~DArNx(cat~JhQXvL?AHBY3B3J636(CFJ#pJ{r^jq{Cn}dC)B@~R6lcO^_+Ua1! zQP6uiO^<|<-}XKQPRH572HLpVIJd==dw2`cZ1Q^vu*aBr*Fykjw~8}UIbF$qhmz5sB6VA?pBtrsH`N;J-n8A zMwg8_NyD(z7=v#pvIlk=MzD@_2u|sSzW*s~SRGjF$lnqLS-N+w-N+dR0^Vh4?k6D~ zOAus>RsogslWz|i28($jAo7^%c<@(~M`l%Js^$QB2^4*f{3UFo3eEMoV*B1m-1b6f z`M{zSZ{(VhA)vD4ZhqyzUcc=H{)VfX2Qq*uHHKk>h?C9tK z#?MM%jmttjna|~bA2)M!WGMMmPxc<_Hhmm@sgK5N|FsOsj+XZDe@yj_QxUB%(U;tC z)rQB`nyzd}8%a$aSn$?UL95iPA`B`fCq<+L!}>ot9LA%n6 z=TesbSQu%h`+2r!e6N}m1066ti@>u>CGC%%vqr<6qq}GR;@F4Hv@XIJm{#8ep~R&9 zPnys}ahd*vcRjIvw*e>9S}&tI1_SA2z;VSZR3d^PqpKKI#IjXbVLIQxPX}*{bV&2; zF#W>+@`|O(T|xOLveBB2pW2CQ_CX3&6SM*``Cm$(E?aIl+R=y0Xs8W8oyr|IF}SLK zHCbQk(dU9fmu7JC;Y0Eb3-dg7AHHN=2t=dMaPK%wpHXHSUDg3<-VL%YuFU~Q5|)^m z`<{ttJt!>_xpv_kAfoKjApukHg$=1Z{kKo6%|z|I8nUQ`C1nR@)&vmj(uQN}{T=?T{Oh4dTGGs%F{nZ%O(Uf4!vrhJ&EGtCzd}#b{1(tMHz}0$*anF?7j>QV*5|M?9}I#1$sb?IX6+P z@9d_>Ao7H-Z4quC(l{^KrDy}Ob@q!b%K*%cG)n3K(LeL)WaEN&toKKOv-K-OU+hzy zul!W5YPD3|F|j^FU(EtEcp3cQ&p9PkTW}VvA%emIL0FzBAaa$l3N_8!YG~}2H#1qN-#|*j|o-k|#91D&n3ug`E`k1L{65f67{W;~|>}Qd( zXyTG}EWiy~Ov6HP>*dYzdW)Z)qS<8v-mlu%d!~cWC2m$RC#9#Fcbpfc1kq?d67g0% zxKhf%^Ov~&{wwi`8>AU;XHcF#G5N>r3$9n1sGw6=%%kh?|4yl`w?jEz)Ujyh2^$6j zj#}kItlx>R_8tcPTU(W_a=-PjbBDfC%t`XW{?GT1u8CRkCot@s6C~!N;Az8m`c8h) zWFhdM?MrBZ|0;*L=&4+2nD*n_eMOnqfim4s??*t<$uAli4YK^e{LIZO1-@0qE1r&z z0hJaI5X|2{Ud&ygmCJsftXufaUgZ1W;0R_+RgTFUZT^@-jOO(-k-no2a^UjjS4e)* zoKA@Vhd{t_prQCnxnYP=U~Fqfwr_9y?6bX*A?n<_MhP~DD`%J?PUR1N#lob}%}0)> z;>n$)KH#abomV935?fZvXw65y1ii;o?!m#qfwF1ZJFXS%TFINuR*4PD!sg-tI0^&i^5!dWO;Kmh#GRGg`I^Jk*;)I}+T12c zW+48$XHhZgP3IXuyg-7Y5F?mNvACTvW&nv$x!KjGM6P3$mNh66D6X34L`UPaww7=u zmf}85#y~3bqhjh$MGu7k6d-vtd5tT^v*ksbm+U}Q3@Ms~{%;ll)R}ZgBd#$q9ngep zCeq#~e&@Z|EtbCWn8Wz)`IuLwqM=^zj;1Iyks)3FzCY+I@#z=e4=;VQH1FaVOcG-3 zOWrJrnb-aH+mcoG@P73l8pK?2_^x?f>#q8Wo;cXN1{ zV)OW@!&+NsuCws|-eUC4QWAc|mnNWh`&`^v7>NUeu|FROISk?QyNRh7lV|fDob2UG zvrJd%V|dP}+FlF;l%jw+7K~7UL7MC9>neOn?19$de91SH`t(I~K%1YUc-0N6R9@Fx z0|ir9hr4(yKe?>%ED6vNrLMP%%=+PhW+|ix_zv2~K-&S*6djPMbfZeZOb9g1Gz)pt zxYK-CQDUo6y11`~98oLA!HCXxEjv08cR7LO!8uHLaK*QZHk0MfKE*Qb8swzrt=qQ!}q|Uf|g&~z!VJl z{{hIfb#;G|no1lVQVvsK#6r9?hp%E-rQ^ESFyTnS1g=xhs2)V zB3{!*8Jjg;)x5!e+w*hkS{a4*fR7LdCfB003I^Bd6Z<42K!5F0QtPwavf7d}gXIb7 zstlbHcR#6m6_QIxz+lFMzb|HQR8H3I-BP)PV2D%2^k=5le#z$rojd(eUy!7!rhM{q zhUIeEmX?;V%|I9&Zr@<1SGH?f`HJ-d9W~`tgPpp4;sN53Cmc04r6H5W&3Gxb_vv_~ zwO+kQ(%`%iqjKVfe{GvRu|cbGF&!GzXMNtUNz!-g(Oc~2(QwkaAqY1Y%rwhq8jHf{ zNThbw2xvwcTrbJWwV*0nHjeoM19N0xCL0_pthe%zjZH?+mH0Yr`l6}8@&6yJ36gHO zozaquofhVW^xne?S^-3N<=3yf2w%^l#rm>k)xm+&FNRd&j8B)Ai>rOEYfWrG;v-lu z88rnZkIUlQup=)OWVHf@IW|*;QpieR_QbT2;n<>7P`INrO)_@MUTA7-&(TT?0vw^u5F(f!#*&R7y*Z0$a}9Q@mR&+ zst@MN!P>tQDs&UGManSKXL_%?v}MzxRbw2ex*Jq!#_XChtJ1{1KJWB*KZpCdE^6k% zcz<#W2nqxK1xJXUDO&A} zID7Pu@o7!1!Dkxvy+5fUfG3R_e5r8chq= zc@?Z19zVAaSCi24bcy+UIy{@zt8Rsj<_r(T4QX@xU-*4fiT=Wwo2fB$6dSO&R}(la zR39HsHkPC9pzHYYb-bRHsXxMR$F|Zwe5be^<5zB628F;>DSlsgbm4-F)CVQA;%nrig^w$ZM}3JTNMD zk8AqpCPzFS)o^jUXTRG`aSprjkZo`5Mr8KRpG+N-;18x0_AiPuRccdD1Ycaeley>e zM@q-f4VCrmUSEQ{;v|K`vn-4|kN<&BI%7oqknYFqrLSkX%Z`^lthA>ZXGMEUIv)(x zIh&P_b1lSjSP%O}P*AYwaDzdR&S;n0fw3Pslg{x`o>hAo{!o*a-n%j&Y0dA$^-D#> z?G1K;Cl80)dEio{#~kI z0|P0pOXvQMP9#}c{2#`?GOWt3>sCcE2vHD_6iKCH(_zpZ(kb2DsUlqh(kUQFNOy{~ zw19w=v~+i!x$%9!ALlyfI>#T+^(dRY_r30QuQ}(KV~iP?Z*oXLc)M!C_!E|J?gKuo zREI_Bcf`b3@FOF>={#F`s82hsx9rz}BTaGU=~YTKw7B!SNM)v+uxC&(OU4h|C~M%C z*IMp1yTy4OCK@)58cv(qsN-YIJSA+)7}A(dzX{8hnO{7yirxeSP0bdigusNWFsFW?wIK#ksHBrRa?o8_ddUsjCxCo$ps1ZCsph zylyB5Y8Hqa{iZI?57HU*&W`s`@(E2ZUihO8#13Y(QYlr%;0+X4T&>F|)^7KcWA;_} z8T(s^FR^Uj>dj($fr!WeBBI;T+~@A7j0BkwcoI$sEz64$WGkwfM3DavIi+sVg1HLoT>&Nu9r2$x|x1| zB}G0u{fL~Np8J+u+HJ&}AyWe_lP6!-*4WtC-kYhqwc)#s$t0e&5-WICc4UQj<4!DFc;*&XNr}i z5!R~|X2GX0nEt-G5+XdPgC(O$Y$6d8p&|dmP4Pj_R9I#XO}y{H;1eRdg}!n#Jk%hc z($5mNOUtJDTv(O9PHTB#sf$#; zPTRgh)LSj-piO&bg=bqNc64N9WXP&%5J}03{A{4#ciuMadc?>W))kE2#g~q~a@N9e zh}p|$4(gc@F7ljB3IsZgi^*s2S-Dyfh?&e%Zl_R__^mXm(lGOF`0q>5-L@x7VM&9F3{shDt0!Pq*Kk zC*a3?lx$ir>>C*olE@9}%F_=FWNB|NWzBLXNVPsLMGG2ju65x8ZsQ%JOuY*Azs3hM z)+%CRMOXjWN}UsxqVy|1u)rs0LLbKdg%|Qhj(D67G+RO^GTl^M$gmvY6SvZua?(?+T)B9sqi}Nwsq3hrmGJ%w?bGwrT5KRn)-TgV|3#Qmf@J{OzV<_r!b-37)xWJ>9Q;6>7;RSw0p( z`?ryJTemOjJ+@*}iN_HgD)tjxYVq=@LKUuXB-*})$#JHr z$PH#LC+T5*Zl0CaL%)2@Bprw+HnLpC*m1nyei$Z{e&#^ThxMp$R1Ewf@Lh%Te!U=j zK_cUfl_{8TB0QPvnXHWC6US;K|LPTv2Lp@t1~@9E@67KX{Eo_95Ujb@{A;i^bic-S zh{#?Oyd8WSyd7E5@D`H!WcYU0QN5pMO4)sgj3hd!&B+-tr^2P{3R&l|CA@VVNY`{4 zA7eI85ce=o+q|s*q?{uY$3~R9g@@CA)I1bqg754#vq022CAgleeP+6Qo+*`JY+^DE z+B9&T+HS^{*_;Vtv^`m?Kq+)sQ9>#xw_#^&gNupXTG_BJ8^O`A*O_wtep!LdRtw$^ zoHU#8vrAFUT%?RGQb7pYkQG9X=C^fSr33S880MD#znnaXczh?MnmSGu|CPy zuRgPUr*^A>`;~>yyCMBX-NFz0rKv`-qS>*&LzY470_C;g{=2!sgV%fL=&q-JE_)C& z8r-k{eQ^)8aI=hGqBe;Ns3LFIOh~(_6E0l^9|as(u0*|X`Mc*b`d;(m+)lZ24m znuNSn^Kna#MjfVOvzcd58tNA5FeeoKHh+KZDjZ<`(z&d^n;F+{-l<7Si(@shv}_$@ zb(W@ReLg$rAPJsQ$@M|(xerQ4C0{>(ZXcP=9=P#LH!`>VE=rS$NKWq4>NanJTko+u zL@}Ic-jksFnr$F3zLv1Y8!t2OT$p~s`paGa>(}O87QTXji3;31pLT<<6W2_=CZ4?_ ztb7AqcG1eHhRl9pGS(*P-OSau}|D7wpKN@Hf;4o&_h3xR#^u&6RYCI zzd%G|6x6kTY9lo|;yZYgQ+&`SKvk9(Jj#b>^uj;8d(Cmyv8Ln44+3jK&Ea%0oeb4g zqzvD4J2FKOyU1bX*Xxo|l@db?8NNLnhM1taIepkk>FFp!a!AiGm0>fT+DU#e6DxM! z(gp7pP=%3!xX@J!Wtw2(d{@~st$z123)Pa-V)Nb+#PvU=bzTNfQL;+lbl9JM! zM8s>JdKnZAN2y}2=5SM-oSg2u{P(_8P(0|7M!Rp41}qO){R~{+i*~NJZy2%iuadbl zTQT7?sdwX}qsqIkF&3w6iN4Z}92!yUqfoD0U}qT;^LmW;O)n{NA2(Yu1pTo-OI&-; zkH$c5i#1ueQoNX_^iS2ZjI0)fFbBAYSPc2Ix72bdIy(eKFcA5jP#b;zK) zOU+#j0!}>}CeY)3m%qK(pc8;xq_QWS^Jo9knU}|0(ZCYX_IP6F@a-4=^;C0F&S z%QGK;*Dd)lC;ELs^l?Y{dqfApFe!cchMK+pm`w(acxj^OQ4xZ^2*D7(hyjI2y3LF8 zXTmcmY0QEmjmu)9fWr5d`o=9EL0&1ye-VO})I;5XPQB&(Je+9l_qSC7Rau z`&oK~kX7#v<+{oV7oLK{665-08`J2kf*234i-V6E9th2b3qIdGy7nJwCms8f64Ki)Cv`T3zpNnXO#sV~Q*vv-13{X=+;Pq#ZqOHHr=A7eux zwvdAOmIun{RU4qL_RqPl!kP{EbWyT4u-T|tSu zH@)SY)}5>uBN)6eev2$K`K?-o(0UW+aK=7vLNkWrJ$x~7UF_lxrqTJkl;Ft&8u>FYEa3?ZuqCDW37cM?1_Z{8GczDLP); zVxr>T?WR2RwQO(4QBo2)uQEsTogeD^J$;Y=J@_H3^GpD>^Zuxj3yAALLWzTmyWRKl zZjo{S<10u#BqT`9;Aj-qp`TV<95H5DW6^g8T*CUT5UWiP=*E_pvu|&2r;)E4>gyNk zG+tx39B)UO*YOvWjhZ9XO1xXm*eYL@kUn5aU)5S5u603@9noilp(rf4dPT12eiF3< z#iH;nn|1m6lRw^z!%-zzdisT)Vc{ojGHkN4A9(((Af(bASCqI-%{o{Jn3Jgka&l-& zzdSXuTVPrYq|MY1aauj$khL&1@ARMiN&zP-=$ZAGetwR;@0D7Y6eBKPId^`tbiO3h z&%!F^xkQQMeRX(IAna4oy_FD-;*&*z#Q~Af4@9irVlNBuSFaQmTVP{{_8SK?gs&$S z9Z;82Df*)cnZJ8wKWb2_^3|T54U6bGc20J?d09kCij0!vH4Y^d>wv<$V4N@>Mca=_ zLNPMpKfBc?=c@LQ!sDREe#(`0Um+{D$eH=%{Cp$Z{rpHQR0Y}1*EJW7c-qYApA^w% z%pU2n)uKB_cJHSlNS5q;6NiB zz>;Vtv2jS=M&0_W9^|ZsS{{hE2U8+z>#h51RtHDS-_DaZQXQSriTS&_Bp6=zR@5Wn z$S!%k!4Jjceegdw3WxdB2bh`{JLS_Cwe|5lPg?DFZPU$|dOO(^FsP*PayFWN4i|6s zxKq1u+#Wl#m<4Qjz`hd10h?^ESdAj=7n3TT)+wBR(ZwIEP7kVENr`t|_F4nP=hP%4 zUXclt^@}%)zHq9i*IivZ`c)BIVo6+IF$H4m2v^}Hb8~b3t(g`&ty<8I2t&f*d2#kv zn7q;BBo@~2mB%chbu!x%lNWiEgGZF4FO%{ac+K^{)^@=DCG5nmd?& zvo^=q{ zR}E{2orG}6Mno2Q%+vPws%=m__@46er0zhsy{A=Kv1K*zP7aCl6?&}Lk1sFZ2_G#Y z<4$<$xo}YwZh>xIqVp1^y%3qI;+B%KUfl*ix{1lNL)Ms&A92`Ig|q^BXt9 z+E_=Y{XLsQdkCuvOw@MSSzHq#=@e2NsyxA-PnSv%?dfg%Jsy1WSB~gnixl6S{ZT!t z0E9?a0d^NetYn7!hFhuUG#V#2kImeIEjSygY>((+JEH%)w;-3YDG}b~@P1E`{Q|vd zbZ$2fwBBNYnO@+pr7rW%j%+06^*{R=0th%^h+Yel4*P}Cb1!Ceu;n;t2=dJ#@OXJ}-%I^2+X_NP&dhyN1f5C1@+ z=ud|JDuKXLD@VSiT~Xka=?H4kayO2gP9OMU#D&qX3uKoTM(7E!z!W;E;qGw3_}Q@Ux%L|_I(O3^Yi!i{?X?mzGiq?^ z(C4JloGx%Qyxv*pMxpu=n5OgO>ErnzZ3^pEe6EfTwvCbJ13Vj&zis}#XAF8Gs5m44 zc>9s)E-VjSudsNzb5uBCi)QceX<#SaKdpHpi~&oNqmR8K<%B3n;GFsQ*6bWEZt=m} zo0Xo!`C>dumlryXywK}Hrg^Sm>$J_*Ch@{&W(77&+82lk_3|ryE{jQeTA{xurPZEa zZF5?CJh$^YLM{c#g0aCw{^sjtD}s2zstHR-KW(Zsyw_jK;Q(F+&?6^NXt?jwOq#GZ zZ-Zldf+>%fQ%3iz-lOQ%q4_zfCVz7X>I-uI#^ctnIW+WEPxhJ+#P^CQc<@CBqraE#KUR>H1>}s_)(t>(==qGF#?G9Al-cfLZHm)+qt5+w z(rs2Pnvy5shQQeqs>su-%VVeNdA{0v{HW&0A@IDkwX=gX+BlwlZXY+uXM9`(%nazo zmR(w>tz~6Z#kNm22KomDzb(GR@M$%_5RSZUPaM=O>}tut#l;ody}&%ya2cAMBjECH z&)8Ohjp&!0_)Rl9Tr|rHH=^|Wk(BiG7+C`yr6vRLjNLx74yW;Md^2j^3WZpaitwu) zM&x#7R;3Vop!@D`HUFxh;P4(Z=@%2Y^Jo0pva;VGg=;O%6Lsn6=+N-k8#?2!|L`zG zms3Jv z)&8ritCbeqKoXXc0$Tu|uj&;M;o;BK)CfS*I5;?1XbVRJ5$7{KJ@SD}DRN3mAIN6k zL$a1%xBuHF;2*UvaSFLW*QBB-6o(x&7?j8D>TcSz#7VwVQc7Flh7?#lrHv%)<{LmH zA`%iLOiiDH?;XGnf4Pwx`xcomGS*P_i5_Q!iloK2e-mO)!0>Kl`ZIg0WVCC#$q(re z#K%Vr|CC8S^l!b;B&KMk$(k#Fve8e^YgmKz-tXVPRcajRbCtdlRQ%Q^>k-1hz~J3( zCpRCj42Kjfqyq~;QtAkzHbHg7`!U3kHt?fr_G6>qpNEUN~|?~zwi%e zTOOoKC*+H!I(RcxTvL~u#D+Vma>6nqGEz)joWS-(hsl3zt#!#h)P)XcG)O z|A@gGXt;&o1|J_EAB!-FQ^B81LM7t+@`OW@4p%C7?LUV*a#fi0wy4ls_lMteQkKRJ+u`5_TR z@K83^-mY1%4zlvxNw|Wv%0g|S28ETw6kdgIn!LMAkhCqV!34hJfqWumXXX@D&MfH^ED$+;D{zC<$ z*O6D(bjW|X0G<8!di-4P)`RcICe#+Q2Pai4`87b%pM|OfOjE6qhT{_s!x%itjpfAB zaVRa5zkmPWI~Z?5dShLkTJ)d($kAui3HK6EN)qq~I^Pkvh%5kv6A~t8jmd*>Pa{{t zWtHPG85*1!u+F5ks@sEwEioN>x?X=`Nr&56$d6Jtl_EG>|Dm27B`NpqjO6Y{0;iLx zoi-VjsIV|9?0Ybv`1$)c_uTza$Gk9MVXHjlEtTDmNAm`h=4XnQ?vVbnb}F+$+B|852RuGKPSX=VErNG+L!*!3G5bu zgwEzGzrLPs`U%V-rOyo)Ck-GQf0;i96&O6*NW(Ows{yzy_#<5mkaki!?P!&E1x`O8 z{UzMj%(R2noeEWGX=z7`^h9>|#(?v4etOj3aFwy)lm$*4q$?8gE#R2ggqvF|Q-#tp ztj*gr3bp$ja)Tf}caWZ0RiO2DIbO=Tdf)Y~ahSo<5SX2$PH$$LMKS{n;1@;G7MUo(sC zd-QmIebTPn(1>Ddchd1o+Y3qPA5d)X?A!(?+_Ex^_|)>UGNjW*Z*QAniIn5t7yhqp zYbGiu*8jRUo-q@IAg>)+sc{lvLjUgBc*|6^!wQ_-d8#Fuy*C@V(9l-OMfGy?=}ET@ zN(3URww8CjdW8X;BzSV1eM>-y*YA)N8j6V{G@Y4Xd1+SmVZ_ZETpe`F)UxyPuK$5Y z2QZ03*FDp5%LD&VyDt{lPgui8u%kp>0^G|lK{Pnl;gqPX-AF&{5u~uCJ6kjAjHVxl zBtkNQJ>>iM7bMPqu0ksyt>9rdGxhxg>z*O&nYh5I@N;zBEY6Eq_j)Y$gxfKl0;5G( z=wE`Vl2=VSRJu?&9^#wUVatsHUc-m2h>&#>U{-ad;IR|05zI_)p*ry#BX>OT!DCbZfwpX>M*#FeQQC zgB!Np?KTpVx_e_;PA1{IS+pfc5;n)__nSSO1v`LG zF5qKKyAkbv2|vk(+v7Ig5hp{=wx3g;@d*jD)kR&&d_0y7>0AqfGbHUthr~<0IyQkj zVc9ife%;ZMP8FoNL+__Z1M|_ZzaZlKC9E8CS87PKSe@qSk4Fefjgr}|>zuB64`OKF z^rwD^k8aLOL+>)21+|`DIsR=_gfOiKzfC619q>F|<05Hi7>$iCD!3(TTiuO=F=*7>~n^jxnF zP#l+~&oRi&u2S?kf67B#{LTeW3$c+1G z=&n&AXUkDr-w<(r(dzpCtbHp7Ew5*7NVyV62PPWVfCBV7-M4M*?9W6<5d%Z>MyVI9CmYv3o@iYoBxT)Nw|Bb*_7E8s_UIw6eOp-9g>`g)F2C z{boprrnAQ1B>f36!V;4KDo9O? zO-*Nx7E=Iu$@jNpl_jlfM1QaX?78fMg2f?a?X`isPA!2CkbXm{;7*3b&cJZI7im3% z5*=mi-ZZ-L@-81(k3Oi**JDpePyY}$@5Yqq?CU0d%u14y(nzsA8i*j-I8hNRK*GGqax1{!or0@9Ab!`qKmCNk~raeX`Mza+B2k z!}hi<_^`2q^`=Up&Q-`Ai1zvY0*4GskS!y)396;Wa^q$j;D893{=tM3DUx*XgpLjw z2$vLEt!E|d8>k`!tiTZL6rh0x0I~mkt(Xi9z0MuI@jPt{-D&J?@bID$6N*PUEHA7o z$&Pg>#||&e#&%FLAax_b1sH8^*HesqwlH8(+Ty zgh}B9nvLun>OXhI?6mJWtU99z2^~ce3lpXEQhU?iBf%%%_gqawf)mA1D&*wY95jGw zr?B6jOUMf=T>8(F7KdgENh z>F)YwS<%aku^htglc1poe$wlsb6UH+8w+fO7ZGFfvwvW z_b~ODT~I}Ey_o@8Kpwf;f#!OW6zvOBhSf*~83lrr+qbaPD22%Swo zcg$=#Q}MhP8|D%7+2kz?9~*g(V3!N2yDT`#T47?3vWEO`p67}l~|k;LCA?oekGX|^{31Ii)?w{D0H;X3AaiFRS>bwMa22_Qv_|azBQW??3;~Yye>FWg!Q^><_>iE^jnoh#!%~ z?|*Lllb1-y=ilEHd?lZgH($4{(X@9gpSE>4=$aT65R$Xzj1ZIQZMKXt`EdEdW*_A5 zQ2Dpbrq$KOy?b{pPif`D*vXma^2*B98!+DB{OZ5k#C+plf^B5P1M_;I1IH#sXbZ@} z+`M;5* zCx^#N+-z)vwyPs#)z!bPYievb6EiXm<>ib06BA$H7!;=y#SgE{95i@Et6SAs6~Fwq z?q^8I+d%GNpFB22Q=41OegN3no7U;?N_y`laLpz7W6cqS)oGi%@h{zv52$={% zB8l@a*N4;Zf4~40ZkKKRp&_2X%cf1bMe<7J!7e+vcdL6g4z?Br8rsLJg5o%=o`i(7 zjnLV7l$z8fAE0T#P|!? zkvgeXtV>H$vHD@IeJa|zuB_$48kmMoFpI```XP$8AgkJy=acM*z(7UkItKo8XMr4o zv@~7HmKL-=hr^+QbNJeOt5X*wZ{LKydnb=eU!B*>1%i0*n@)1t7tGc9kqJBrGc!JV zu9N??STm?=k;gw5x@*Dd(SzZmgXUs4y}C1CDK;3Eyfa&_b^U9o)r`%~Vi}C48wPnW z0|XLmaYI8)j)`5$XnOUg$vXAhs3_j~x!I#)($ZHA3?xiUbJBB`8S^x%LSgPuk!_vzkZ_&h$x}C+2hYr6uZ#KSMWE?hP(^P zRXeV+yu2(bBNN82tgJ1gWywIjyqwmHU`K3Ce|l+OqY>L}C@wBe^MoNZpGQT(yK}A8 zvZ4ffW|@m~=vBxaaO8fvCF3=-fI&F3KX!5y!)~=u+{ut$T^;{ss(0LF2YwYSl}*7| zpgte7q~!(F$B@1U*IQP$ku%VdFGX@INqIsCR8wCnq8AS$1noMIqD8v?ou6&Sdqj8vK739%Xh?`0IMJA)Xj z{U5R#TEm16DEB(|QjT%rGchVHYiAyY9v{2rYn1r<0!CBg#8?s-_~q+YBw`0*^mLj# zH3x|n{G1W9_wbUZ*`^g+tt&O821d%)?&fK@@Ksfn^sym+=Q$KQEG>Rg;#*l=9{x0?N#+T9zblJi@y5=fLgF<}=B* zP!CZxHTIjBt8-~VN|+DZtOf6%tgmDK{K=AjKz`eTE~usTM^wt=CmnAyvti81spmmq z=f73a(`#R-m(IfWYia}(>Z-A&3E7h;x3dNwP6*54yzv)sR6*} z8wAGD3o0vP%?fT0*P@qSt^!wykzc|CTpZ*>!38uf*aDb-C_uFtt##>N6S3u;`3^dj z>il#X@fY3hdKIK-@tJ8kWWmDZ@tL-NzMVXqbK~BuPE5RJYIZkug}XCGyCaSj<8&*G z@k2yJPpwPPXz{!km$lB#s3?vP;mq`ETF;*|4-JiN9r4;bl$AKFY;fA@lUC>NoS#@h z>y|Q4#fCn`U0zCkERIZ%C{#3}+G>i&nU{f^M?E`#vZpJ~?!-JHLA}|JRB8Ia&8Dgv zhE3E=88%)M&00 zKOVRY8jTnn=D}kd5tPci>XT_gF>;D~cv>ENT%e#&O^pp=$eC*o_qg)$Bi#!*9OTP; zlB{gk%2G&KS_OsTPjGQ?N(?%!fHH=I8!f9;PN$YY$n14)3sVAH$E+?e-@r`}mtYjH zr29{vabH}1XJ?z!dGnE0K@7AffhN_q7a7E6R|i(6amkV1nI>Q>%Ug}9)ABjy{v99K z{{}LO4~7AEPhDxHO`iT+aQ+mwR9M?ffWEP$)$}@vJ76VV3Jc?ANh4BoOkb3xSLe^# zR<(C_l9u2v^k{ZL08I~*kf6PnFcK zT(==Z-LB~)fCQ~3?=N(#-&a@{>Pm8x>zaK#TY0u`CAcxR)`7yyKNeO|=}ZPO(v1Xi z2x)nFmWqk};eHEAD(oOUWqCOpRT-&#g1UdX6E@=~iXqdoh@_jgdx#vUc}RN(sQ!aRM|TY*`&Lpg$XtF-MT zBml>$1w@d7l2T4h{)Lh9@Ru-=#0xg5Hq$bNS8QnBum8rsk{Y<}Qz|ASOAgE`i0@Bm z6OL1sL=~ostd~DZidr2KS@t!g?qq*@=V;TJ7gGQCwWmcZtTg{gXz_~Q zC!7Qpy4Wplza8#OP%qbE!f)^FHn3b8Tn@XOECVaL_*6{Z4+OA9c`2TS|4pNXW#Ui% zTWiF!{D0-tDAc!^#kH&s^!@t6b~`Yi{VS{Pg+szACoYrXdi%8=d11j4)P-XnQ_G=y&E4{HJq{gVG@5|bChvZ@c=M&p*N*B9%06m(EWxY=koRL z(EEqafRO=7JWh~1!DuQs=wL?@%acOe0X$n1;NNXW4Psui5g-|;$Xfy}{#a44TLz!- zpF=|k;{h3{F1VBQfq<8o$ouwQV1M9XnrVD1^p-{oU!wq7vtdeL^wZvJmbfo@dHT@Z z({Nq-jE_EDw41?xdFhd2m!(MO{LJps01gh0?5kI7bNe8lhp-IbF8}BILx5(2_rEZV z4TN47L?mc)L5E*5h2NvNNy2}4Wgc)IBrlpI=1e5wRmE6Hw;?$`x^(vWmwV7cE*Z71 znJ|v`&0mQ~MQ#Y)pBV8O^`$PXJ#+f`)yp}RXn2~#quYxDKppMwCS*rfdjoG7=5>tC zVKsu~BoI9|I}KjOq}HUl1(olB9v~QM^a?ewfFq^1O}pH3zS^vS_#n3V2;91mom41$ zAhW2dYtbd+;D`Zl*eBr`j!sS`7GvxXD`5f1q2ZR$jVo2}wDwyFE(Q8(5r*lBU*!~` za5`{f5u6Dk9v4I2Zrx%G)yU<&BN$Hc2xd7PYrqO<6>xmIX3kESQoq&uyrPJjvgq8G zFfGjMVmVi%%#j`_c~=zH-zg6}@RIcE`;ql9!+6!X#l`d-)9(dPxIu{)W>ZgigmK*T^O?Cnb62y@w4=pPwr-(MSpqXqET1eo4Z2=vfUBChXno+IyfZgqtDieYy=K+-qBdtD!Foi)79_8FDg97u3|;t!mAr z;^(#Zw~RppCa;*-Z78q~-RsHBs2>Oggwj2Poalr%%Y@+OUE;L-d`$bK?{Tb8QUpl7 z8^1{;aM*2a&m#kXq9TA%ZHs&IZo4#Uy|bz%hM!ir6TA+1AZp12$bJj;+T8qNiShJz zej5yXNvpau_A6e8v!qq$3Mm9EFxHL=^Vi@X+nS=WH9ECY|0OQ2mr1TR$pLIviPz0q zS!`f_BTQnAflDhf>?S~tkAvE*4JHvV*g_U?h)s0+@Gw0SQeqI<-v zlk&OZz|KdC5~enc;C2)7x!S*4tZsN>ocUPnaugTy5Wes4RLIkheSQDlNXaxA93BSJ z0@ehK8AFN{U0u0{HQneR1mPklyS;1t6N`ERF7kii2r^w$%deb)5=f16ciOLiFGNZT zxvc@U29M)ADO0^=!x}GbY?u)@?_M)vY(|a*$%&$c-b}{lsyG;z+Z=@$Vb-iN#CXQ` zoS2RsGIdD)A(_vsId?UD@SwMPp+W03PI_gcR z2enD1R$;l2yL8$bm=!>gfPf6Ib*$lIxF_JcOCu3Y*JxTcW6uq*Ni8b6_r{oal}Fi*UUXbO!V5ZV8e=8 zin&VR2?;?tIfK7`VOBBl@g>245YWQ__hTNqK!!jbA>y*7i2ugU&R*4xpK%&+v7thL=3F`p!&;z%l$Mf`DlPb{V}mX-H(sTYZ!8ZHm-ws(3)w-}ZMg#- zz?__!gA?p^CxKV!1Q~P=aR3p;-k|c z1f~DW1;BJ$ZxkK3tl)8-Ubd||)~Lihh(!&gkNB8ZxhwzT6BbNYhw^GBKDU5GX?*6C z=|Ke0SK%o8k|PcRl4thUf4}`TKR34t&pSl=W@yxm!Z8JrBLj{p7<~qD_#zGnhfir~ zXO9cOYy{bskD!!5(z!3rPoRTUV!tF09^3HExsHyGPGMq1YGL6A7-IT-7C*GTDi@Xp znbBk2lGW6lSQKG@gRJ`xH(xJwCxA8ys_-)#0sW9c(Fh>yIYV1Rwayg*Gc(L~S&?&< zp*8IcJ-AAMbdEpnfD{HqVC_iCaf|Ll$KZdDV#@~)d9uVe21Z6DFvtta#WY0pz3?FM z^u{-tChpFMOiZUiKRy9QY70XrfU)At9lSPnq#ui*3lAzf8ya%1)dDuj7cS=y?@muE z*Y0y=j$}4?x9m@rTd*bZW4t#ro`1Lb9TD&8tp}Z-BK?m022J zlb-ty(=(u_*)tU#OnH$?4WNeTRW1^Ir+;2 zvVF8Os;$`#2|t{_06o)b6zZs)_-lNaUz`U?i_$AaN&x`@?r!17ZT5SL%HdH_Eu`m% zB9}y+`cD%^Z10E6?xb9}@74p0 zb?49yScTU6HCh@Pplh?6i6{oDL#3K{WC!%5fFnfrOmXNhiyHaE*!Gn@cwEH*!0UNU zFe(D^PpbeA7&{*4@Yv14Osa(`7?cI+nN7h%%m1GDsbZ$9rOdD@Herzw5i=xscz6mL z8blsMaal}`0(IJvqE$AH@sf0!#qU2$M578j@V6Fz#Un67cBjmnr>X?Rzu% zUOe09R8&F#1xv;^{_xe^@P0mS=`=3-JF;7cNmfbemsR9wcB?*%lxrfng*=bdB=4lh zfhN282$sj!G@9Cz^_qTyh4vi~jCj3-R1z38Ou(pNhW$VuD0i75=T!cQcm>*%VS8Es zfQYClp_eaFa&o9%@#L&8U#q z7LbfjD%8NVKla>DXlVQs78MfRd=svl#tXwkbeC@z3+O=?oiO?Y5K3ewjbzIKucy*8 z3(z>tVbumtKIE%58ZP(&IW_riApW07w(w2@iY-a$EIV<;)Pq?w3KZ(4YH1pr$H;!| zdJUu6O8$zg{h*E105ZxTIbNS+X}F(m!zjsnngZi2|GxAcsMxS{i9#~CEGYWf@X;e1(a+F*@ILN5NcNC7k>5M3m1T-KEMK@{$eHN;Sf^&2P7`J*m4LUV`c zzjY@8dL;21tQU!40C(l(1rzf)LgqIce=Z%>va(m~apDLkHTCU(AB~=US_HQHZRqoArT_3LQ&XihhV&(65SS)b4@kk*P5S zr@br~MfCf3=m%0|M|`;~1&jaH)8BM%9c21bybHhX@RTAaT#!wEmQWQg2Xru(O#9FK z`}-Z3&v(h$9|nJI8DyhBRv9S$o0emmG8P_4@%9qZV463TBY%v@DiX`R{3g!J>+7Lf zzqOB{tSO~@E@au{|WS67N#!A_g+MBb=X+t6!{yTm{ z%ioOI_9-%3lTX60578iR%`$1poPSf6s5i=qcrG}zh$Nm1l_8)WQd441E zt|Z2w<~9;7{iA>~v!m85AQ#2vx%|fw?e&k9>T!XWcB{JX&DutL^{8l!$a}_MTvYXC z?sDop7Pe993X_<;8+6y3sZ-cwkVKc;4^DEEe(tD*$6tP$zm4raH|>5kZ8ffc95n*} z)o5J}=9>%()*!sayQ<%yvp!Q!yu76Xt^-X^8cGHv}rv z2SSb0qEvi*XwY$ddoOtkM<{@6<4!8}5z0d?uYF}+A-OcWOak<6x62u~&BlV6hdew2 zZX5Z^MhWNf|3j2oeOH`CsmFYmH>g{7rA<9;o|Jdw`kP+7nZ8d{fO_yxehNVQ@PBG` zzBSQ{{^D9ka=x3TJX$!-+N9}s3^qP6YR1}F? zQfKFD$mmtIwAyBEit9-v=xOc;FteS$`}~3uo*6B!;?Ei~G=-yUhn}&n;iWnf^ywm2hfb)A#QL-YT^idPW9#Gp`oEYrB2_!G2Nf=IyoU_=Hd!9 z7=5KY+&Aw2Ze`dC3%wk2m+buf$%6}TSpIf7CIq6TxtXHj^k2-k(^IBE3 zv^+n1qd$f}B8t2uMlLRKZ{J=$K1s1&`<UiNye(A#&xH+YDt zuxHWUzgRg$n~3#&o;W=AdcTsGlPDnQL!|~)k&3P#F0w(>LmGiNvOYmoiET-(y!1$Sl0)(AafpUw1{{9Z{n+IPCtbTuaokr=PtD7hh!~bo`e%ikJ7OKq8sSE$; zXeC@++(Te2Pq}Y4o`5{U`qcS>^kQR@86&Ldw%LbU*<^5L9L~oOHqQnG$r1Plm>4=9 zP4JQ;)|Tsglj*0eV-MZqlq-lIdNgj^#_lYxY&s{}TWOpfNLg1U72YSqQOhbF6rs3J zUfnz4L5%5LUVaBgiJc$anbl)_NUEJ$IfC}#UW3z9+G4yKEJ zV1&S~ky9Ryjkm<7>g<#luXgZu=9M;CDx%+Gq@fw1F*8SZWA(*$D5N8&^84plWI^f_O>Y zcgI2jwtY`hg4=Ny)h`>&im{S4$EU+a1LYRdDeICJz&d8)<2$gkoL!%+YspqHlAn+K zK8=96bmHQnYiY^qQ-nGaNl*&K#>Y1oo5KKXJG&Blhor15YMUz_HE8OV2fvk-qT}M@ zbxlmdzkk0{R_1Vc=A*vgK{!`WIc1n@R9v%exGDKwc7Sc*MRq{b^ay@T4JD#VIxFj2 zM`uj#$B)hxuO4%8@)td0yWbW_&F|kqtG}KVXe)rmsQi$~U0QXNfKfYt&GaVU{eT^| zmGex*P|M-jI=z9PuQpalb9T-htPmg;Aph3{g1_{-x_!QUq3Kdr(l5Z25XJC$ zk)8VR4!w~^tVxXt^jTV3Za@sYbv+QD!1V`QFh0IB%zA2E*@Jm7$Y8*rT_2$q-8MV@ zBPutWblsTk$FVEE=y<4+x%tPLnfoLH>z~up&1Mnm_D&bb!v!`zBHDnNg=P0g0rS!1 z=Z55{C@igwg}0f_8?hl{YYTM;{LL$Sx~jP0qVKJp>GzuA&~stG^&9K!J!B6GlE}-? zmseHwF>z&*iZo^`zZY+zTSNnmmjQcoy0*7X;m-KJ@ZVcIqfL*CFNzzCz*0gXi+j`g zK2IyeI%Br2BnM6+!StfR4Iw(*mbLv=mv~s^f#dD&tf`=M%A--K^Qi$pr{9_QzR%$l zSlPP@;Sdsf9?$*zoz|8$nC)l8%Nt&T@XOPiS|___ zBHQmwx8Ljc`n_Ji*YElFvpm~*&U2n~&hviDXJ|j#J@J>=ZnSO4uC(KE@)s_U{^~^K z=kM<8laY-?TUx#;ClgD~*VYXfo<4ThH7L4zoj2BE-|tx%J>NauXGDm<> zKsk8N)m4J;nY{8EPh(^J#01~RPH6#AQT>n34wS%%KQNo%wRGtV@K2QhKq~C z>WCh2EbhJlv8zl-(}&h>-C`obaEYWBzLkXm`MED01P}%q`g4cP%*?>_c|-#K#*yc- zu|{@w4Ratd`0Z^Sa0h`|>Op>V>ODJ2)P#Gq%-XbzymP7^rTD#_qabzW{{C=YL5o6U zBSYWek0|d+S8sF0jou3-SJLYe<^CKi)9!7S2LUp+ns)Y-|I{)jj`g4K?aaU;U#K${ z{JkaG_N7kG+iAZj@iAE-zw%9FMuA@nH`x;Fe^yt_aK&QjRH%Ux7hT}Y%bY~?V>djZrMi~Vq6h@8j4 zQu%NtDS3Lkm$7x&AUE9peFlvd6uP~xqp`Eu=|L@HZt3|nMQ9mq4@WITe|Sx%D1r^h z9evu)?P6{vF)Jr`QUkqvZjCD#p40Wl9Qw z*1fcRbxwn`d54b4hHmUmG>lHid+cW*fz(bYchPfB@1HUxoK^^^J7DFeDf0! zRbEjgUA%IICG?OAvb^qsTXn$t{9(`3=I_Ji@-w?dPh|`2v>dYwtwRQ7Q$z^6bk~62H5g+HItk`!X ze@eCxf8eN>#x@gJXfGiZOI&W>epFhTV%mXh}>~Qo72{F&AZpjsAA&cUh(1yXBiBt685_UA#5p%yn=1K zBUOdXjH_Yd{t1qnINeF3-5$V7E-#CT|E-Ko2`6}ICh_7X_1e8w1R@ir{mSsg1yc+k zj_}v7#Wl88y!Ri-T3VUn=Htg4i);HH6auFRp&HPs(H*Pm^xjp9MA^)thtc<}9!7ge zrrgWk?dGS9R6}kfL-R;5Om5ojsIS zXm&P<2zl@J&dw14`~Upe>KGig&}g*SQDwE&Nq~yCUp(D3)Dd3%F*e=cfQQGN;OG}l z9(VR)Ji{Pym|WRJKp=WrE4hcs7u;o}RT`~~wYA0;;rD+gnA z?!kZ`2U3?ekS?rh-d%Q=I}b0g&{FB~GsNMmnw(T*BgZc+oDtaRv?J<%0>OPuoxn{@ z(2JyK=_2hI0|pi8*hrKvP6cJe%ass5abG!<_dxPERnl8jYU5Vplx+T;-l|W3)-WiK zu8E<>L|bQ=#ugTB0|P?f#l!suYwGIBtG2f4B5_K-TqpbSE6F{xy=0qfid+y`xvgUjL46ckvvkt}V7ya=B!xyyqN`-2YMHjCTC(0j_K+JIN4^Y#9D{xA&LUT46 zd}TaFgAeCwwsN9S^sj0paV}-wf%0vm5!?RUsY|?XiRX#dO?KU}klnyEamdME&6JW`xrHS*iAfhG|fN z>wIxzM`N{I`OE6_Ir9zTUfJVUEEIL_UB;QdaKDE9nka$3$q3d4X>sXmpyO^U*Ul_p zw{tWtba@j_ovEcS6zrvR5%7-`)Qk7*(^Ahw{X|#@zYM z#Fp#Gn??Dl%kIzh@Hy6>SqEFX^x&>7o95cU%kaD#U=96TG>#vhb)vLIe+DXq6RnX~2)ARAsAtnKsB?n3i^zSS2z01 z!>To%HFUbP`CwLmxKxxowk}=5{83VDI|_l)eggMh`sKmRt%YFUIa;hVgpT!-I+?+m zA-;3R-Q3&)XA%tIkXjP9L2sbyYjH?6Uohch{b#+6hQ-L>boW^vjsjDrU4U3sRpoJX zz~I`oT|1+3VFS!HC1>JHnFpRip@dzH(HeViY!6e#6}aq2o1~T2;yjS-j*gCklZ=>{ zI8$rW=5KwLt^>eR7x&|bB}c^lY8znddt6lXq}icidj3rt4Z*1g zI7N=4F_TUYRGWIufdnU)nDV_;-Uh1#>D&VVS=hPcmssBbw5CB1f({lH4lS>Lo1PvC zK=BTS?5MMat^aV_UK~#e?0gCnhcQC&J3!kKHti-~?Zk>zz&1ILR|2-n76l|&d%?l! z{^#uw5##{1?wAuwF77Tv0R7_x?gPNdS5Um%VB!p9X6q|Jl`0_#QAmz1B=QIc$3;y| z66}?a9RvpIeBE#*3Ng-T$e{7w9#Db&06{^);qDC8&Ed}TtS?!eG~K0$L3633k-xB( z!P3NRA47?i;=7TWn!3v#8!A#l)jxSuHwl(EDRjdcqJS_=RW@>Lz#%G)n$XgR4f#dn zk03U%-rhJmve1iHHy}2g?urY0>x^w9$hgz*fY<3EFhhjy)DG7Bp;>bYlcHW*Q-cFT z7``&Iu(+h5VE{g}R-YaPG)F|0@5W_wHG>WjT!--xGbcHvyr$;q;G{nL#+S^6q@Jm< zk2<2?$EHkwh^W5?hkQ@2f#+;rDOE}u`T(WmZd8Dy_Ol#GaFjP#W{!cOLdAj&)gwlv4lbc#-#=$>eA6vhJlSoI+xg@wh0nwpQJ zG0v0RF*k{7ge|I}rhNV15&a5Xvi#Te7V_&%e~m-GXzld;;m<}GQp`N|Ykh#{%=L5w zAZeePpKl%Z`NDUEb&-{s6*d7~t~cLjSXsdpt+fU>Hy4BI%lC!L$jOdpOfC$D);bTQ zz}@X2Y?=f=;Pe3cCKpH4e|Y%3hX2}k(z759vNg7snAFYhS=;Au|6MnxwGmLAqH56h zU0n|WIES$@7aKsy4>X2lku-NUAG%5GZa&2g2p%Fnil8jCw7wpP);@^OYz%11sP+F( zRCDxv!`2qLmm=&_@$&_(G4?)R|G{vtoHwT&*OV-Zg^ZBD9w1d$Wb^)=ATOV@KRu(M z!~XaKG}F%#1q?C&4!6*8P)9$Dm&^aWI9wMRvi54`GCV-lS^)^5Z4bce$4u3yY&s&-xLGuwGY_tV~J`4F|uZZr4avj zb6aB>At9lhk_Kjgt@*Iofj}U1w=b%ZvZDT}GaxwL28Y;_I{QfDKR^DheK=kz zn=ioDrs{J`%i7`n2kw^2;+LMXW!N$Y>Mwm98JW&BceOV%8lv^o;clz^8Up1pcJR%j z5C#okk;*AzgJ)GVvhakZ>wNqcp32C_O;R5__w-eEefo6lMz}W|k0^$Q--ou9i<+bc zum?^xFF%iK92%+ZVzb%4(9X=t+-+oTr>n2OPa`YJQl`7_n|Es)#{T#HvR%AFC35?L zr98E%30+u~S|l3{DI z=M{;2hG#SnG^pRwi;in;C7AW+=Zj+*LU-)#lY8xXIifm>@Xc&__V>~x?sk()%Xub# z7#apHIY}7z-uq&Nxj7}TNyNq7UzitYi(SwAda%$s#qs_GLfG*QX??0Ob7{7Jw%uu|S7JVX_%(KH42XEZ)HWMDKJJZ(EqCevK zY-;KQ*{iI-66wEs6t3VOeTHti{ap(k6+TM&aD=^^%kCLWpaE{-w6t`B5JjF1oM?T0 z&*L;FQ?d^Dhw}dtVx#tc26(8rpP_jI(hH04L|)GtyaBzf?mvU*vG?cS14lf_22Fe5-{#^X1L>HL qBO*|dQ4^L{R-Gzw|H_Pz$d2f8^*Tqs{#rX56g_PNt>WwUkN*p!8mZX; literal 0 HcmV?d00001 diff --git a/mass_mailing_unique/images/error-duplicated-list.png b/mass_mailing_unique/images/error-duplicated-list.png new file mode 100644 index 0000000000000000000000000000000000000000..cb61348c7a5197c3de1ec5805b628098f31f569b GIT binary patch literal 36928 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 z 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 Xviia!U7SGha1wx#SCgwmn*{w2TRX*I literal 0 HcmV?d00001 From a964a02dac8715d29a96766ce3521c98b66eab88 Mon Sep 17 00:00:00 2001 From: OCA Transbot Date: Sun, 28 Feb 2016 00:50:53 -0500 Subject: [PATCH 2/4] OCA Transbot updated translations from Transifex --- mass_mailing_unique/i18n/fr.po | 57 ++++++++++++++++++++++++++++++++++ mass_mailing_unique/i18n/it.po | 57 ++++++++++++++++++++++++++++++++++ mass_mailing_unique/i18n/sl.po | 57 ++++++++++++++++++++++++++++++++++ 3 files changed, 171 insertions(+) create mode 100644 mass_mailing_unique/i18n/fr.po create mode 100644 mass_mailing_unique/i18n/it.po create mode 100644 mass_mailing_unique/i18n/sl.po diff --git a/mass_mailing_unique/i18n/fr.po b/mass_mailing_unique/i18n/fr.po new file mode 100644 index 00000000..9dd927ab --- /dev/null +++ b/mass_mailing_unique/i18n/fr.po @@ -0,0 +1,57 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * mass_mailing_unique +# +# Translators: +# Christophe CHAUVET , 2016 +msgid "" +msgstr "" +"Project-Id-Version: social (8.0)\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-06-30 01:07+0000\n" +"PO-Revision-Date: 2016-06-22 09:25+0000\n" +"Last-Translator: Christophe CHAUVET \n" +"Language-Team: French (http://www.transifex.com/oca/OCA-social-8-0/language/fr/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: fr\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#. module: mass_mailing_unique +#: sql_constraint:mail.mass_mailing.list:0 +msgid "Cannot have more than one lists with the same name." +msgstr "Impossible d'avoir plus d'une liste avec le même nom." + +#. module: mass_mailing_unique +#: sql_constraint:mail.mass_mailing.contact:0 +msgid "Cannot have the same email more than once in the same list." +msgstr "Impossible d'avoir le même courriel plus d'une fois dans la même liste" + +#. module: mass_mailing_unique +#: code:addons/mass_mailing_unique/hooks.py:42 +#, python-format +msgid "Fix this before installing:" +msgstr "Fixer avant l'installation:" + +#. module: mass_mailing_unique +#: model:ir.model,name:mass_mailing_unique.model_mail_mass_mailing_list +msgid "Mailing List" +msgstr "Liste de diffusion" + +#. module: mass_mailing_unique +#: model:ir.model,name:mass_mailing_unique.model_mail_mass_mailing_contact +msgid "Mass Mailing Contact" +msgstr "Contact de la liste de diffusion" + +#. module: mass_mailing_unique +#: code:addons/mass_mailing_unique/hooks.py:37 +#, python-format +msgid "There are {1} lists with name {0}." +msgstr "Il y'a {1} listes avec le nom {0}." + +#. module: mass_mailing_unique +#: code:addons/mass_mailing_unique/hooks.py:28 +#, python-format +msgid "{0} appears {2} times in list {1}." +msgstr "{0} Apparaît {2} fois dans la liste {1}." diff --git a/mass_mailing_unique/i18n/it.po b/mass_mailing_unique/i18n/it.po new file mode 100644 index 00000000..73c17649 --- /dev/null +++ b/mass_mailing_unique/i18n/it.po @@ -0,0 +1,57 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * mass_mailing_unique +# +# Translators: +# Paolo Valier, 2016 +msgid "" +msgstr "" +"Project-Id-Version: social (8.0)\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-11-25 18:06+0000\n" +"PO-Revision-Date: 2016-10-24 11:54+0000\n" +"Last-Translator: Paolo Valier\n" +"Language-Team: Italian (http://www.transifex.com/oca/OCA-social-8-0/language/it/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: it\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: mass_mailing_unique +#: sql_constraint:mail.mass_mailing.list:0 +msgid "Cannot have more than one lists with the same name." +msgstr "Non è possibile avere più di una lista con lo stesso nome." + +#. module: mass_mailing_unique +#: sql_constraint:mail.mass_mailing.contact:0 +msgid "Cannot have the same email more than once in the same list." +msgstr "Non è possibile inserire la stessa email più di una volta nella stessa lista." + +#. module: mass_mailing_unique +#: code:addons/mass_mailing_unique/hooks.py:42 +#, python-format +msgid "Fix this before installing:" +msgstr "Da risolvere prima dell'installazione:" + +#. module: mass_mailing_unique +#: model:ir.model,name:mass_mailing_unique.model_mail_mass_mailing_list +msgid "Mailing List" +msgstr "Mailing List" + +#. module: mass_mailing_unique +#: model:ir.model,name:mass_mailing_unique.model_mail_mass_mailing_contact +msgid "Mass Mailing Contact" +msgstr "Contatto Mass Mailing" + +#. module: mass_mailing_unique +#: code:addons/mass_mailing_unique/hooks.py:37 +#, python-format +msgid "There are {1} lists with name {0}." +msgstr "Ci sono {1} liste con il nome {0}." + +#. module: mass_mailing_unique +#: code:addons/mass_mailing_unique/hooks.py:28 +#, python-format +msgid "{0} appears {2} times in list {1}." +msgstr "{0} appare {2} volte nella lista {1}." diff --git a/mass_mailing_unique/i18n/sl.po b/mass_mailing_unique/i18n/sl.po new file mode 100644 index 00000000..3bd8a808 --- /dev/null +++ b/mass_mailing_unique/i18n/sl.po @@ -0,0 +1,57 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * mass_mailing_unique +# +# Translators: +# Matjaž Mozetič , 2016 +msgid "" +msgstr "" +"Project-Id-Version: social (8.0)\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-02-27 01:40+0000\n" +"PO-Revision-Date: 2016-02-27 16:56+0000\n" +"Last-Translator: Matjaž Mozetič \n" +"Language-Team: Slovenian (http://www.transifex.com/oca/OCA-social-8-0/language/sl/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: sl\n" +"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);\n" + +#. module: mass_mailing_unique +#: sql_constraint:mail.mass_mailing.list:0 +msgid "Cannot have more than one lists with the same name." +msgstr "Imate lahko le en seznam z istim imenom." + +#. module: mass_mailing_unique +#: sql_constraint:mail.mass_mailing.contact:0 +msgid "Cannot have the same email more than once in the same list." +msgstr "Isti e-poštni naslov imate lahko le enkrat v istem seznamu." + +#. module: mass_mailing_unique +#: code:addons/mass_mailing_unique/hooks.py:42 +#, python-format +msgid "Fix this before installing:" +msgstr "Popravite pred namestitvijo:" + +#. module: mass_mailing_unique +#: model:ir.model,name:mass_mailing_unique.model_mail_mass_mailing_list +msgid "Mailing List" +msgstr "Poštni seznam" + +#. module: mass_mailing_unique +#: model:ir.model,name:mass_mailing_unique.model_mail_mass_mailing_contact +msgid "Mass Mailing Contact" +msgstr "Stik masovne pošte" + +#. module: mass_mailing_unique +#: code:addons/mass_mailing_unique/hooks.py:37 +#, python-format +msgid "There are {1} lists with name {0}." +msgstr "{1} seznamov z imenom {0}." + +#. module: mass_mailing_unique +#: code:addons/mass_mailing_unique/hooks.py:28 +#, python-format +msgid "{0} appears {2} times in list {1}." +msgstr "{0} se pojavi {2} krat v seznamu {1}." From 4d23b6c812bc1c4013469769ce05f93d7319b424 Mon Sep 17 00:00:00 2001 From: cubells Date: Wed, 30 Nov 2016 21:15:57 +0100 Subject: [PATCH 3/4] [9.0] [MIG] mass_mailing_unique module --- mass_mailing_unique/README.rst | 11 ++++------- mass_mailing_unique/__init__.py | 4 +++- mass_mailing_unique/__openerp__.py | 11 +++++++---- mass_mailing_unique/hooks.py | 4 +++- mass_mailing_unique/models/__init__.py | 4 +++- mass_mailing_unique/models/mass_mailing.py | 4 +++- 6 files changed, 23 insertions(+), 15 deletions(-) diff --git a/mass_mailing_unique/README.rst b/mass_mailing_unique/README.rst index ea59209d..22ddc251 100644 --- a/mass_mailing_unique/README.rst +++ b/mass_mailing_unique/README.rst @@ -29,7 +29,7 @@ duplicated email inside one. You will not can. .. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas :alt: Try me on Runbot - :target: https://runbot.odoo-community.org/runbot/205/8.0 + :target: https://runbot.odoo-community.org/runbot/205/9.0 Bug Tracker =========== @@ -37,11 +37,7 @@ Bug Tracker Bugs are tracked on `GitHub Issues `_. In case of trouble, please check there if your issue has already been reported. If you spotted it first, -help us smashing it by providing a detailed and welcomed `feedback -`_. +help us smashing it by providing a detailed and welcomed feedback. Credits ======= @@ -49,7 +45,8 @@ Credits Contributors ------------ -* Jairo Llopis +* Jairo Llopis +* Vicent Cubells Maintainer ---------- diff --git a/mass_mailing_unique/__init__.py b/mass_mailing_unique/__init__.py index baa4dd41..70227430 100644 --- a/mass_mailing_unique/__init__.py +++ b/mass_mailing_unique/__init__.py @@ -1,6 +1,8 @@ # -*- coding: utf-8 -*- -# © 2015 Grupo ESOC Ingeniería de Servicios, S.L.U. - Jairo Llopis +# Copyright 2015 Grupo ESOC Ingeniería de Servicios, S.L.U. - Jairo Llopis +# Copyright 2016 Tecnativa - Vicent Cubells # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + from . import models from .hooks import pre_init_hook diff --git a/mass_mailing_unique/__openerp__.py b/mass_mailing_unique/__openerp__.py index 5b7917d5..6683eea8 100644 --- a/mass_mailing_unique/__openerp__.py +++ b/mass_mailing_unique/__openerp__.py @@ -1,13 +1,16 @@ # -*- coding: utf-8 -*- -# © 2015 Grupo ESOC Ingeniería de Servicios, S.L.U. - Jairo Llopis +# Copyright 2015 Grupo ESOC Ingeniería de Servicios, S.L.U. - Jairo Llopis +# Copyright 2016 Tecnativa - Vicent Cubells # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + { "name": "Unique records for mass mailing", "summary": "Avoids duplicate mailing lists and contacts", - "version": "8.0.1.0.0", + "version": "9.0.1.0.0", "category": "Marketing", - "website": "https://grupoesoc.es", - "author": "Grupo ESOC Ingeniería de Servicios, " + "website": "https://tecnativa.com", + "author": "Grupo ESOC Ingeniería de Servicios," + "Tecnativa, " "Odoo Community Association (OCA)", "license": "AGPL-3", "application": False, diff --git a/mass_mailing_unique/hooks.py b/mass_mailing_unique/hooks.py index 419b520f..1a8961d3 100644 --- a/mass_mailing_unique/hooks.py +++ b/mass_mailing_unique/hooks.py @@ -1,7 +1,9 @@ # -*- coding: utf-8 -*- -# © 2015 Grupo ESOC Ingeniería de Servicios, S.L.U. - Jairo Llopis +# Copyright 2015 Grupo ESOC Ingeniería de Servicios, S.L.U. - Jairo Llopis +# Copyright 2016 Tecnativa - Vicent Cubells # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + from openerp import _ from openerp.exceptions import ValidationError diff --git a/mass_mailing_unique/models/__init__.py b/mass_mailing_unique/models/__init__.py index 81bd9a96..f4f8574f 100644 --- a/mass_mailing_unique/models/__init__.py +++ b/mass_mailing_unique/models/__init__.py @@ -1,5 +1,7 @@ # -*- coding: utf-8 -*- -# © 2015 Grupo ESOC Ingeniería de Servicios, S.L.U. - Jairo Llopis +# Copyright 2015 Grupo ESOC Ingeniería de Servicios, S.L.U. - Jairo Llopis +# Copyright 2016 Tecnativa - Vicent Cubells # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + from . import mass_mailing diff --git a/mass_mailing_unique/models/mass_mailing.py b/mass_mailing_unique/models/mass_mailing.py index 499671ee..97f0b44a 100644 --- a/mass_mailing_unique/models/mass_mailing.py +++ b/mass_mailing_unique/models/mass_mailing.py @@ -1,7 +1,9 @@ # -*- coding: utf-8 -*- -# © 2015 Grupo ESOC Ingeniería de Servicios, S.L.U. - Jairo Llopis +# Copyright 2015 Grupo ESOC Ingeniería de Servicios, S.L.U. - Jairo Llopis +# Copyright 2016 Tecnativa - Vicent Cubells # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + from openerp import models From 2002c4310762ca3f71057f4ffca4d81516cf05a1 Mon Sep 17 00:00:00 2001 From: "Pedro M. Baeza" Date: Tue, 3 Jan 2017 18:37:27 +0100 Subject: [PATCH 4/4] [IMP] mass_mailing_unique: Add tests --- mass_mailing_unique/README.rst | 1 + mass_mailing_unique/tests/__init__.py | 4 ++ .../tests/test_mass_mailing_unique.py | 45 +++++++++++++++++++ 3 files changed, 50 insertions(+) create mode 100644 mass_mailing_unique/tests/__init__.py create mode 100644 mass_mailing_unique/tests/test_mass_mailing_unique.py diff --git a/mass_mailing_unique/README.rst b/mass_mailing_unique/README.rst index 22ddc251..e75c471b 100644 --- a/mass_mailing_unique/README.rst +++ b/mass_mailing_unique/README.rst @@ -47,6 +47,7 @@ Contributors * Jairo Llopis * Vicent Cubells +* Pedro M. Baeza Maintainer ---------- diff --git a/mass_mailing_unique/tests/__init__.py b/mass_mailing_unique/tests/__init__.py new file mode 100644 index 00000000..e876756a --- /dev/null +++ b/mass_mailing_unique/tests/__init__.py @@ -0,0 +1,4 @@ +# -*- coding: utf-8 -*- +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from . import test_mass_mailing_unique diff --git a/mass_mailing_unique/tests/test_mass_mailing_unique.py b/mass_mailing_unique/tests/test_mass_mailing_unique.py new file mode 100644 index 00000000..0e962fd1 --- /dev/null +++ b/mass_mailing_unique/tests/test_mass_mailing_unique.py @@ -0,0 +1,45 @@ +# -*- coding: utf-8 -*- +# Copyright 2016 Tecnativa - Pedro M. Baeza +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from openerp.tests import common +from openerp import exceptions +from ..hooks import pre_init_hook + + +class TestMassMailingUnique(common.SavepointCase): + @classmethod + def setUpClass(cls): + super(TestMassMailingUnique, cls).setUpClass() + cls.list = cls.env['mail.mass_mailing.list'].create({ + 'name': 'Test list', + }) + cls.contact1 = cls.env['mail.mass_mailing.contact'].create({ + 'name': 'Contact 1', + 'email': 'email1@test.com', + }) + + def test_init_hook_list(self): + # Disable temporarily the constraint + self.env.cr.execute(""" + ALTER TABLE mail_mass_mailing_list + DROP CONSTRAINT mail_mass_mailing_list_unique_name + """) + self.env['mail.mass_mailing.list'].create({ + 'name': 'Test list', + }) + with self.assertRaises(exceptions.ValidationError): + pre_init_hook(self.env.cr) + + def test_init_hook_contact(self): + # Disable temporarily the constraint + self.env.cr.execute(""" + ALTER TABLE mail_mass_mailing_contact + DROP CONSTRAINT mail_mass_mailing_contact_unique_mail_per_list + """) + self.env['mail.mass_mailing.contact'].create({ + 'name': 'Contact 2', + 'email': 'email1@test.com', + }) + with self.assertRaises(exceptions.ValidationError): + pre_init_hook(self.env.cr)