From 603bc0336ef0dc842c8936fa8833fd9a0b398869 Mon Sep 17 00:00:00 2001 From: hasunwoo Date: Mon, 2 Nov 2015 00:42:47 +0900 Subject: [PATCH] final version --- src/filecompare/DiffCompare.java | 306 +++++++++++++++++++++++++ src/filecompare/FileHashCaculator.java | 128 +++++++++++ src/filecompare/ICancelable.java | 11 + src/filecompare/IProgressUpdate.java | 10 + src/filecompare/Main.java | 7 + src/resources/icon.png | Bin 0 -> 40632 bytes 6 files changed, 462 insertions(+) create mode 100644 src/filecompare/DiffCompare.java create mode 100644 src/filecompare/FileHashCaculator.java create mode 100644 src/filecompare/ICancelable.java create mode 100644 src/filecompare/IProgressUpdate.java create mode 100644 src/filecompare/Main.java create mode 100644 src/resources/icon.png diff --git a/src/filecompare/DiffCompare.java b/src/filecompare/DiffCompare.java new file mode 100644 index 0000000..1ef00ef --- /dev/null +++ b/src/filecompare/DiffCompare.java @@ -0,0 +1,306 @@ +package filecompare; + +import java.awt.FileDialog; +import java.awt.Font; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.io.File; +import java.net.URL; + +import javax.swing.ImageIcon; +import javax.swing.JButton; +import javax.swing.JFrame; +import javax.swing.JLabel; +import javax.swing.JOptionPane; +import javax.swing.JTextArea; +import javax.swing.JTextField; +import javax.swing.ProgressMonitor; + +/** + * + * @author hasunwoo + * ÆÄÀÏ Çؽðè»ê±âÀÇ GUI¸¦ Á¦°øÇØÁÝ´Ï´Ù + * windowbuilder pro ¸¦ ÀÌ¿ëÇؼ­ ¸¸µé¾ú½À´Ï´Ù. + */ +public class DiffCompare extends JFrame { + public DiffCompare() { + setDefaultCloseOperation(EXIT_ON_CLOSE); + setTitle("ÆÄÀϺñ±³ V1.0 by hasun"); + setResizable(false); + setSize(687, 410); + + setfile1 = new JButton("ÆÄÀÏ1 ¼³Á¤"); + setfile1.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + fname1.setText(selectFile()); + } + }); + setfile1.setBounds(546, 123, 123, 23); + + JLabel subject = new JLabel("ÆÄÀϺñ±³±â V1.0"); + subject.setBounds(226, 36, 207, 33); + subject.setFont(new Font("±¼¸²", Font.PLAIN, 28)); + + reset1 = new JButton("ÆÄÀÏ1 ÃʱâÈ­"); + reset1.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + f1 = null; + fname1.setText(""); + updateHashButton(); + } + }); + reset1.setBounds(546, 90, 123, 23); + + reset2 = new JButton("ÆÄÀÏ2 ÃʱâÈ­"); + reset2.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + f2 = null; + fname2.setText(""); + updateHashButton(); + } + }); + reset2.setBounds(546, 196, 123, 23); + getContentPane().setLayout(null); + + reset = new JButton("Àüü ÃʱâÈ­"); + reset.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + resetAll(); + } + }); + reset.setBounds(128, 290, 122, 62); + getContentPane().add(reset); + + start = new JButton("ºñ±³Çϱâ!!!!"); + start.addActionListener(new ActionListener() { + private boolean canceled = false; + + public void actionPerformed(ActionEvent e) { + canceled = false; + File file1 = new File(fname1.getText()); + File file2 = new File(fname2.getText()); + if (!file1.exists()) { + JOptionPane.showMessageDialog(DiffCompare.this, + "ÆÄÀÏ1 ¸¦ ãÀ»¼ö ¾ø½À´Ï´Ù", "¿À·ù", JOptionPane.ERROR_MESSAGE); + return; + } + if (!file2.exists()) { + JOptionPane.showMessageDialog(DiffCompare.this, + "ÆÄÀÏ2 ¸¦ ãÀ»¼ö ¾ø½À´Ï´Ù", "¿À·ù", JOptionPane.ERROR_MESSAGE); + return; + } + try { + ProgressMonitor pm = new ProgressMonitor(DiffCompare.this, + "ÆÄÀϺñ±³ ÁøÇ൵", "Çؽ𪠰è»êÁß", 0, 100); + pm.setMillisToDecideToPopup(0); + pm.setMillisToPopup(0); + Thread worker = new Thread(new Runnable() { + @Override + public void run() { + f1 = null; + f2 = null; + updateHashButton(); + setBusy(); + try { + IProgressUpdate pu = new IProgressUpdate() { + @Override + public void updateProgress(int progress) { + if (pm.isCanceled()) { + cancelOperation(); + } + pm.setProgress(progress); + } + }; + f1 = new FileHashCaculator(file1, pu); + f2 = new FileHashCaculator(file2, pu); + pm.setNote("Çؽ𪠰è»êÁß - ÆÄÀÏ1"); + f1.start(); + if (canceled) + throw new Exception("»ç¿ëÀÚ¿¡ ÀÇÇØ Ãë¼ÒµÇ¾ú½À´Ï´Ù"); + pm.setNote("Çؽ𪠰è»êÁß - ÆÄÀÏ2"); + f2.start(); + if (canceled) + throw new Exception("»ç¿ëÀÚ¿¡ ÀÇÇØ Ãë¼ÒµÇ¾ú½À´Ï´Ù"); + if (f1.equals(f2)) { + JOptionPane.showMessageDialog( + DiffCompare.this, "µÎ ÆÄÀÏÀº °°½À´Ï´Ù", + "ÆÄÀϺñ±³ °á°ú", + JOptionPane.INFORMATION_MESSAGE); + } else { + JOptionPane.showMessageDialog( + DiffCompare.this, "µÎ ÆÄÀÏÀº ´Ù¸¨´Ï´Ù", + "ÆÄÀϺñ±³ °á°ú", + JOptionPane.INFORMATION_MESSAGE); + } + } catch (Exception ex) { + JOptionPane.showMessageDialog( + DiffCompare.this, + ex.getClass().getName() + ":" + + ex.getMessage(), "¿À·ù", + JOptionPane.ERROR_MESSAGE); + resetAll(); + } finally { + setIdle(); + pm.close(); + updateHashButton(); + } + } + + private void cancelOperation() { + canceled = true; + if (f1 != null) { + f1.cancel(); + } + if (f2 != null) { + f2.cancel(); + } + f1 = null; + f2 = null; + } + }); + worker.setName("file-compare"); + worker.start(); + } catch (Exception ex) { + JOptionPane.showMessageDialog(DiffCompare.this, ex + .getClass().getName() + ":" + ex.getMessage(), + "¿À·ù", JOptionPane.ERROR_MESSAGE); + } + } + }); + start.setBounds(299, 289, 122, 64); + getContentPane().add(start); + getContentPane().add(reset1); + getContentPane().add(setfile1); + + setfile2 = new JButton("ÆÄÀÏ2 ¼³Á¤"); + setfile2.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + fname2.setText(selectFile()); + } + }); + setfile2.setBounds(546, 229, 123, 23); + getContentPane().add(setfile2); + getContentPane().add(reset2); + getContentPane().add(subject); + + JLabel file1 = new JLabel("ÆÄÀÏ1"); + file1.setFont(new Font("±¼¸²", Font.PLAIN, 20)); + file1.setBounds(12, 108, 57, 22); + getContentPane().add(file1); + + fname1 = new JTextField(); + fname1.setBounds(67, 108, 419, 24); + getContentPane().add(fname1); + fname1.setColumns(10); + + JLabel file2 = new JLabel("ÆÄÀÏ2"); + file2.setFont(new Font("±¼¸²", Font.PLAIN, 20)); + file2.setBounds(12, 212, 57, 22); + getContentPane().add(file2); + + fname2 = new JTextField(); + fname2.setColumns(10); + fname2.setBounds(67, 212, 419, 24); + getContentPane().add(fname2); + + status = new JLabel(""); + status.setBounds(550, 54, 105, 15); + getContentPane().add(status); + + extraf1 = new JButton("ÆÄÀÏ1 Çؽðª"); + extraf1.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + JTextArea text = new JTextArea(f1.toString()); + text.setEditable(false); + JOptionPane.showMessageDialog(DiffCompare.this, text,"ÆÄÀÏ1 ¼Ó¼º",JOptionPane.PLAIN_MESSAGE); + } + }); + extraf1.setBounds(546, 283, 123, 23); + getContentPane().add(extraf1); + + extraf2 = new JButton("ÆÄÀÏ2 Çؽðª"); + extraf2.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + JTextArea text = new JTextArea(f2.toString()); + text.setEditable(false); + JOptionPane.showMessageDialog(DiffCompare.this, text,"ÆÄÀÏ2 ¼Ó¼º",JOptionPane.PLAIN_MESSAGE); + } + }); + extraf2.setBounds(546, 330, 123, 23); + getContentPane().add(extraf2); + + URL iconurl = getClass().getResource("/resources/icon.png"); + ImageIcon icon = new ImageIcon(iconurl); + setIconImage(icon.getImage()); + + updateHashButton(); + setVisible(true); + } + /** + * ÆÄÀϼ±ÅÃâÀ» ¶ç¿ó´Ï´Ù. + * @return ÆÄÀÏÀÇ Àý´ë°æ·Î + */ + public String selectFile() { + FileDialog fd = new FileDialog(this, "ÆÄÀϼ±ÅÃ", FileDialog.LOAD); + String spr = System.getProperty("file.separator"); + fd.setDirectory("C:" + spr); + fd.setVisible(true); + if (fd.getDirectory() == null || fd.getFile() == null) { + return ""; + } + return fd.getDirectory() + fd.getFile(); + } + + public void setBusy() { + status.setText("ÀÛ¾÷ ÁßÀÔ´Ï´Ù"); + reset.setEnabled(false); + start.setEnabled(false); + reset1.setEnabled(false); + reset2.setEnabled(false); + setfile1.setEnabled(false); + setfile2.setEnabled(false); + fname1.setEditable(false); + fname2.setEditable(false); + } + + public void setIdle() { + status.setText(""); + reset.setEnabled(true); + start.setEnabled(true); + reset1.setEnabled(true); + reset2.setEnabled(true); + setfile1.setEnabled(true); + setfile2.setEnabled(true); + fname1.setEditable(true); + fname2.setEditable(true); + } + + private void updateHashButton() { + extraf1.setEnabled(f1 != null); + extraf2.setEnabled(f2 != null); + } + + private void resetAll() { + f1 = null; + f2 = null; + fname1.setText(""); + fname2.setText(""); + setIdle(); + updateHashButton(); + } + + private static final long serialVersionUID = -411173112597862444L; + private JTextField fname1; + private FileHashCaculator f1 = null; + private JTextField fname2; + private FileHashCaculator f2 = null; + private JLabel status; + private JButton reset; + private JButton start; + private JButton reset1; + private JButton reset2; + private JButton setfile1; + private JButton setfile2; + private JButton extraf1; + private JButton extraf2; +} diff --git a/src/filecompare/FileHashCaculator.java b/src/filecompare/FileHashCaculator.java new file mode 100644 index 0000000..6b91a32 --- /dev/null +++ b/src/filecompare/FileHashCaculator.java @@ -0,0 +1,128 @@ +package filecompare; + +import java.io.BufferedInputStream; +import java.io.File; +import java.io.FileInputStream; +import java.security.MessageDigest; +import java.util.Arrays; + +/** + * + * @author kim + * ÀÌ Å¬·¡½º´Â ÆÄÀÏÀÇ hash°ªÀ» °è»êÇÏ°í ÀúÀåÇϱâ À§ÇÑ Å¬·¡½ºÀÔ´Ï´Ù. + */ +public class FileHashCaculator implements ICancelable { + public File location; + public byte[] md5; + public byte[] sha1; + public byte[] sha256; + public byte[] sha512; + public boolean canceled = false; + public IProgressUpdate ipu = new IProgressUpdate() { + public void updateProgress(int progress) { + } + }; + int currentBound = 0; + + public FileHashCaculator(File file, IProgressUpdate ipu) { + if (ipu != null) { + this.ipu = ipu; + } + this.location = file; + } + + public void start() throws Exception { + IProgressUpdate p = new IProgressUpdate() { + @Override + public void updateProgress(int progress) { + int boundmin = FileHashCaculator.this.currentBound; + int partial = (int) ((progress / 100.0f) * 25); + FileHashCaculator.this.ipu.updateProgress(boundmin + partial); + } + }; + if (canceled) + return; + currentBound = 0; + md5 = digest(location, "MD5", p); + if (canceled) + return; + currentBound = 25; + sha1 = digest(location, "SHA-1", p); + if (canceled) + return; + currentBound = 50; + sha256 = digest(location, "SHA-256", p); + if (canceled) + return; + currentBound = 75; + sha512 = digest(location, "SHA-512", p); + if (canceled) + return; + currentBound = 100; + } + + @Override + public boolean equals(Object obj) { + if (obj instanceof FileHashCaculator) { + FileHashCaculator f = (FileHashCaculator) obj; + boolean md5eql = Arrays.equals(md5, f.md5); + boolean sha1eql = Arrays.equals(sha1, f.sha1); + boolean sha256eql = Arrays.equals(sha256, f.sha256); + boolean sha512eql = Arrays.equals(sha512, f.sha512); + return md5eql && sha1eql && sha256eql && sha512eql; + } else { + return false; + } + } + + public byte[] digest(File file, String algorithm, IProgressUpdate updater) + throws Exception { + // allocate 10KB buffer + byte[] buffer = new byte[10240]; + int len = 0; + FileInputStream fis = new FileInputStream(file); + BufferedInputStream bis = new BufferedInputStream(fis); + long totalJob = file.length(); + long currentJob = 0; + MessageDigest md = MessageDigest.getInstance(algorithm); + while ((len = bis.read(buffer)) != -1) { + if (canceled) { + bis.close(); + return null; + } + md.update(buffer, 0, len); + currentJob += len; + updater.updateProgress((int) (((float) currentJob / (float) totalJob) * 100)); + // System.out.println("subprogress:"+((int) + // (((float)currentJob/(float)totalJob)*100))); + } + bis.close(); + return md.digest(); + } + + @Override + public String toString() { + return "À§Ä¡: "+location.getAbsolutePath()+"\nMD5: " + toHexString(md5) + "\nSHA-1: " + toHexString(sha1) + + "\nSHA-256: " + toHexString(sha256) + "\nSHA-512: " + + toHexString(sha512); + } + + static final String HEXES = "0123456789ABCDEF"; + + public static String toHexString(byte[] raw) { + if (raw == null) { + return null; + } + final StringBuilder hex = new StringBuilder(2 * raw.length); + for (final byte b : raw) { + hex.append(HEXES.charAt((b & 0xF0) >> 4)).append( + HEXES.charAt((b & 0x0F))); + } + return hex.toString(); + } + + @Override + public void cancel() { + this.canceled = true; + } +} diff --git a/src/filecompare/ICancelable.java b/src/filecompare/ICancelable.java new file mode 100644 index 0000000..b862987 --- /dev/null +++ b/src/filecompare/ICancelable.java @@ -0,0 +1,11 @@ +package filecompare; + +/** + * + * @author hasunwoo + * ÀÌ Å¬·¡½º´Â IProgressUpdate Ŭ·¡½ºÀÇ Çؽ𪠰è»êÁß Ãë¼Ò¸¦ ÇÒ¶§ »ç¿ëÇÏ´Â ÀÎÅÍÆäÀ̽ºÀÔ´Ï´Ù. + * ±âº»ÀûÀ¸·Î ÀÌ ÀÎÅÍÆäÀ̽º´Â implementµÈ Ŭ·¡½º°¡ Ãë¼ÒµÉ ¼ö ÀÖ´Ù´Â°É ÀǹÌÇÕ´Ï´Ù. + */ +public interface ICancelable { + public void cancel(); +} diff --git a/src/filecompare/IProgressUpdate.java b/src/filecompare/IProgressUpdate.java new file mode 100644 index 0000000..ffb9bae --- /dev/null +++ b/src/filecompare/IProgressUpdate.java @@ -0,0 +1,10 @@ +package filecompare; + +/** + * + * @author hasunwoo + * ÀÌ ÀÎÅÍÆäÀ̽º´Â FileHashCaculator ¿¡¼­ ÇöÀç °è»êÇÏ°íÀÖ´Â ÇؽðªÀÇ ÁøÇà·üÀ» listenÇϱâÀ§ÇÑ ÀÎÅÍÆäÀ̽ºÀÔ´Ï´Ù. + */ +public interface IProgressUpdate { + public void updateProgress(int progress); +} diff --git a/src/filecompare/Main.java b/src/filecompare/Main.java new file mode 100644 index 0000000..f09aca4 --- /dev/null +++ b/src/filecompare/Main.java @@ -0,0 +1,7 @@ +package filecompare; + +public class Main { + public static void main(String[] args) { + new DiffCompare(); + } +} diff --git a/src/resources/icon.png b/src/resources/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..949d6d07dd10577b33b262ffbc963b432747b5d7 GIT binary patch literal 40632 zcmeFZXH-;c*DY8Cfg%S%lpG|AfP$#xoFoc@l0hXXK_zDt6qKkUIfLYk$SibT;QXb7V2f!4BJq;4oV1Rs@tP4)ZHVsA8&z`W ztI~ti?Jx4-y9yBUSGBFiM!j-v$40Azmxc`p|0VJ(MHWMYT8&M6xG9-)lgBijoi~aLuIcAN(E<3?R(jkNMmZUnmhWz)ze0ywpRbl`TGU{}cb~2IWIZP=XjYpjU*E zr?UIP6Z4VF5w=J8H~VrG&@f+#zLH5r(AztKSMdjxuYvc_(* z`l4m`lKa(77QOsiI|CY$U)`^IA8aX3G)J&0I!bN{hE z3E$cBl!V2e1MY)BXe0pQMWB7`54Fb3z{|}MwvWT1&w|Pc>Vl-u($0I^`Woij;gJ$&H6-@{0o{4 zac*v8)R2#+4SID<&)DtG-nTDKlQ^>v$4c&u)jND{UXa8-KCyHf<#&RJrq_G66?qgz z!QXIjVXd*is0LMTOO$4PjsB`*mTJ`bqK3_8BGhZrjWZV*0|b9>^6{3<&n;$dyPuzJ zZHP>Jrsb=M|Co4G^nIxh=hz#rqLu?p{mWm!J~?`P^rPWkuC_&c=%+Z54SXg~-){{^ zJNySbpG2nR_FnMUXX#{Xzo6keUp4=--fQ38cEDkER8X$5+G)l3(I;V_gE^*mLk3(k z@2CJ@2E;S`C;az3IPf&9%?1h4W~(sj;9Qc8B&NMHfd@-<*>kHnWqeXq34>SuHFm zSgf0SqiDQpt?tLvlYoljK1HTTE-mxXA~P-vEZqGv>j6y(hZ(7%99`JJ@o4Of_4<9g z+MTtE>Gk>Y+4nCbe=en+b6FkT`nghQS#|53jV-Fo>~x*`-j}G-iCVYqIQ#n3)`%~H z7HuhbGOxv%gQ+Mc1|yX9Z8G?-1bdOcHpXxOol;Losx?~iPq zz4P%+lN~3b%Z!3XaKJyoEMaM~Mx;X2RPjPGg_M$fc`tQ_!27#1Q&o=^8;%d{Pm=q( zqgTHk3X%ji93L!7YGrArG#j~0%Cq^(X_wqqHqs&-=*K=mSk#s0OXeG{LZsE;?RD^C z_s;YgiS)w{Ki0;dEyLhL8O5JB-z%(B5cTE0vbf_qotfkvt1$DF&W`q~BNyREIO+}F z;)JfB{gG6)l5er>{k&zdg4(-nmDu&QzCPCuJc7Y&Xt{p-z_~UUAo4yv@eZCzZLeLU z*w392lhSIt$*Vdd_eXsrPZR1_^o2Un<>=!a{%AOs$9h4G@{sU+gMK59eR#1)?1{4YD!PJHH%I5| zKxU82v={#V{zgM#zApgLQjIrlrmf6 zZYblhQ{lks1bVf!$NWnQ?^G0(RoEs;vcvKq_aQ!iZ`#)KP_CH>5=Uy<{A(I7V{c^LFLLq*_B^0^>gM4 znN98wJ`tFv%E=m+ibvzg(oeb)$^1l`FIat>{}8wfq0_MH;S+qaw&#SW${O?vZ(Qbh0$DSRy~WLiC4cdxA%@8A{wfLBaU>E}Cn{l_d|)fa z>Ah^Cm|OU0I8N7(({d0>w?elUKDC^P2!5xV4dDv4L6Gdnj`$pK?Kgr5cr=aOJU=*v zy^MO7TSrD}_~1SDf~W?a@V#LkZ+Tlg5Ip?B`!3%^gXeMn!g z_eo0YxvIs)kF_TtK4$pg;NP9XZtiS!6GM{7aQHR{5Y2fzogJVdm!QQKA?&8Z!RNsw25BVXmYx{%n}BPG4l1-99R+$hw{Vy`qb-C^ zuh?APXv;UdV7roYYxV^{s-jKN?nZ&(hvicyo_@n$PK7Xc*O{0uxCW-;v z_X}r{1^PylvT-$rMw|CAnH?{sg_*XSFo+`dTZ5=V7(Nqk8%jL7V9`c=FtnOk>Lnv1 zGhS}n$N0z=)o}1lbrin-1ujCA|GmRgeK$Aivn!zZUQ zTf|8yuY+(OLMJj+=OJ=_sMw-i^58RBnFt&l_nqZ?BL#bGmG`GSRmH}kVSl%aI3gC5}0vxFYQheMBpjv+ZWE6P+|LX}xl zb!tfLu^ZQWAO1|0e-Z0ga&P3k;UeTIdAsd(sc9L=gGKDkB+ZYVUb-3PJp9rLa7Mma z;^9024NXUVS&J(q$Jtp<_4q8Uw5NyHC?t6#8X>K9?O<87-@d?0&>IgUeSn29KemrG(WoM*;e}UfQf^|Rp(M+zCA2yp}XgWo-xW}cd_|CXL0X71} zIA!D*;o?W!TYvY{nRC8Y)}uu!Zr?0nGL`Jh*kWShpBu|3CNuCu7QVQ)D<*VCY=5=1 zXdCWvxc_5O6>;ki6fa8aFSfx#SH#qDEs2|g)yd?qi=8|)n*`8jdD`au8x&*-u8gc7??OuR*3#-g^j~fIG2e$*zS?! zHz+>`7Y~H|9vp_p)>TgD8&oVmKQUpiBuf6a!s)|fD{La4n&0J+$7qGUNy1epEBvmA z?o9Oro3WCN@`Vn-M8qg8|Ap|_MuON6A3hXW4!HMXV3PI_gFmKyj@#($k9*Y=)|Lh7BTe;Y*-`GR(jA4$>5W zRsiLd&4CnbnhI0$biO{2cJB41%8$Rhw@B~%yuMkL(S3>K;2x7>9}M2WuIj8uY-7yM zx*6^tTYp^iI$*ad2nue$mcWJx* zCNt+sbr2U@6JQSlpP-lWh*jC5*T>q-h)%AGG$j-wRT3>W|Wl^ac0yV zfmifQOh|Hi47QeSnAo?#0r%k5ZG_o(#@Q+U5F?ps(l3&h@} z($}jkmFa6__w9Ntpg={N{ZZWsj)#M`_R9j-j!0fW1;mg-?N=u0gsl5pyKVIonA?|B zs$cr$KmKs`MS;EprPN(%+CE&GqlMo?M3b&(>PKR|tqUxgSejvfZ3XfCZh&J0u7J%T zmr?PI6*eaa2Wo!->Y-+$kX>YNj&5#eB=5@e6P{uQA{4J26-A06`n}>%`!;|J00IfK zh=Djo{Dzg929fSi@fJetG}?l1qSMLI`7m4~B4tzj$N-{XHm$7YNWcqf))z=AA-{lQ zoPQrjo?BNQEeukVMPEd(jD&r@EG(>RQ1@xYc@6dTIlj=QDguq%#S7&SXx;*3=P1uD zr(fGE(OL-yjUc(&yr~bD@zVWKrxBw}UPkgCoEnL%naDie7)oE*t1VlAFyHBN&+{!Z zFsPa0unQP$Of`P6RYFuuI>!~HZ`>H$=omO~djI$pLXJv*S5oRvqT0`3RIW%3JlRS7B`_b#;qC1NHMX$W8& zQfM#1VBSrtkEDOC7jqul3mApu(N>tVo$NQ+&_3!7(M`zl%g^z1ioQNSaenX`_Kdka zEM9~4Z{A9rS&8MFIVv!DI{SJi?3Vs10A4)0Ie8EgpgODm`ZkW7-WtDO==McxY@D`G zhYv(3XGN;r>Ek1jTdd8jHJi$et%}!SHTnI%G{rPOYcl4_76}M1qs8U|&X~h8 z{F`k<`|bvYOM5_g-#aM=q(CvGssuD4H4hZ9$0?H#S;r|Z(Z0vTe4v>u)`?Y*4)&gr zF{!gP-o?{@(F+5H^T5Pr)vpcJZ0Xt)D>`ke=mwS2tuUX1Cq9r`h||;4=euI4oX-(; z6*9pW?bQ{Nl-6Xdd=;oDcla!G&c&+LGMS>tCrwen%bX+ykjpF{x7;5Kz_&VHL1w0^ zcaC1dbJY6+CxIz;uIeIQm+{4{gte8Gn1jXBuPy+!(>QH;MQT5go#nw+xP8bG(pvFUK&=G%0*&Jb?5R`7 zark76gFBA@;7dgra&P44VEDI%ijvkhdSK7rCy#CBE?d=!r{?k-2#)TU;cGatD;7+luAo z_h}q~=gi)`5tPRJh&?wT3grpR$+nB-Xd zdxYzH)uQRwzBK%!!_5}5cSF~|!LdBKxC(b7JW~1k5(DKJ<64Ek?v#BUV#aKd+rmP!h-%7r-mWj@BDq*#z~jy5UH^E`FJ0_TGt0@ zLcMVRmBNO^JBH~H$j_ze0kC`c2I?wnPvWWAgz*D*7R8V=x>=em&e&m3-woj8`2N9Z zd(d9IOKi?d?Y@Sox*fZcfrpwT;KdF+at$hQjR?F|AGlC{TOUYGF8Rkg6xx*EcDLqE zCKqa^{PkQf@sna6dDG@s-cGS&r6ED*ZzT`F&Y=*ADA4qsj1avm5HR`XlZ7KF-EA`m3 zW1;(_y%NJGL$Lm!^2@`oV3Dh1&-k^Vxvc>|Rd08TYIQ{MGvSCtynOi>Sy|xfz|KM< zkW0cH_eDvD^z;SX4+?s<_9r)$yR3VBUm;i{{mZaK?|!c~$8t7Ur!942^j9>!w3anw zsYTh3IJEf4APMz_zU-39&#i8PX#`=pC&%3_v5An5cm%O&Mc9+J*bnMX`dkx08&$I+ zrCcR`gM{+%_qavY0~|V^J|rVJf}{7Dt~wGpd%W_R?}$Jmk=3(J5&lA1+8HW0ZkIyU ze47YQbN79`7ujVbGaN>`qW!Z7gZ15hRsM|mt6NbG2k#|@nX+CBD=XoglfGXyC;bF3 zMx2Qi%2Hrdn}nDsOya~|^Xi4J2mmrb@QUdacbig6y?LMEC{O9T>8bfIdBT?E1=1AI zb{49HhfHF32I$)^hb}$_bJ+74s!_w#WTEWoSTbfxW9JkpDUr#*%LBUxyhXf=Bc&AV zz)Pk*D%et&7v4&4K?D@th?ZAYdIG;S_OLzh>uy)|EDPjSSH*e6wilij1fUezXUi&Y zs2W`o2~af~^&fcz9A+9@Tjh)*aGAxJeuEc-4m6D>$O%=SLaeOpvCQtw+lu`R)HQjuUS;V08^6ac3WJv$ah>C1++_7!`ul8>p4V3Nj8^mWolNm_Q(Thh(HKV?#8 z&qoJCFS0y~Rc6)Kd=y&Yv@+aHG8O%6?KH_do#eT@K5d2W@|!wA(92pMuLwIM>bXle zTJ6M}gRVCmrjml%0*{zBnRm)&Rm11!s{$o#@^ z<_g;qU%td}z+HtJ30H+7&;f<{&C(<=7()N&#NFW27dLrYxi_e9Irc{Q<7UO_SJ)Y` zBSt?NFblP;E6IH0)trw8ZVwY7foy=f?S5EvAbPGnOc7^*aRygx1>*H8V)YfL2C21T zrGLVOpCF0&2apW`vwtkL2R!?BtRe>zxr%y6gjQto5^`CeD6dnBV2zHP!!v7|nDER9 z9&bkxA@@5X*nn6K)6$c8v_M=SYc}sP<<@S9@5|sj`Nm(al3z0!5oM<@J5va1&y{1` zWWqm}2VY{!4kv;FjoDc4SB<@PbnDXrl9atZZ-hD`ECz&kpsN!^dG?xxq_UE?{rwiP z_l1B2s)GOsU21q<^f@{x zI>~z@IP4+zSh&BObX>pmK2(T2H}aHJL81EeN>bE$Rmwe$VZiy-_5Ga{#WXCRkk6b* zBy-s8T+`!s35OY18{hnqR=h}efjJUL7>q3a?4mAPRs<{`%;vHR4S6>E?MpK*>oR4& zJAPWD6%imQ%`{>GvWS=Pat9`>+T8CSTG#)PdL>Q$AsUL*5!B)f3eePcAzxl3`ur0B zYm(=;4?rI}y>ABoN&EVB_yJ~fm5PWMy=#S?B<9w?@l20pEy4zS?(G|XlTf-rCnBq) zDqdeQ)5>O7&8%!9YKwZK@A<#uT#7hl1BReRBy*yK!jQz z%$5~3CDoU3TGjzQ@Exdfr!U^^B?Uf#&5DDQv&D+38kwvHV%yk}A3kI6jSOSg&jFyH z^iKW7QV7515D);sms?QX*{6n^nt{B}6l`{{K~9y*^)HF;&VG72yWx%FCPgaR#`dRu z66~Z>OJO=xl^~SeCmwCS{EU=gxj%y_82E~&wmiBEr3-xdo#s5wlP{b>fFtjT5ZE>x9P5lX)Ro7gB_y~^9L2dBJAgfUK@`(Z}c-% zblt(f0)`n6u>fK(0H?GA46-PUH&Ijt3gdMN$(tLXj0tBxgJoe`VKytfH`4vVb_k{! zqxVI~7j?_VSdOx2B-dK?rGgOVvOI{S;jF+C!2Waa3EWTNxm0gvbav9&*FFHY1LBRj zx{9dp2X2d`B#up}cil!W6qxoTzy?O^VL6HS5BAfgx~#g6J6K5&fY~)NvkDEo z0sw+xjN;8uVki4~S$PARB;R#>FDe}SnJ#55LXk0rB3k$!jj`3r#LurBtXQMfL3rxe zfjU&t-}DW$$#)UXp7^~phC+TDRf~)@g;{%cq5JqyIpLhY=_sGAB<#0Ell3q|#x&cH z>@PjY7B~1G*bD#1;)hp?K#iluYh3JAB1~iR@)N(EN=-@PC@OH3!ts{@-3vkyda4IM@8=CG$@%9w zgg?XlG6#G6rm9YHdwZ3^R7@lgAVTYe1RE zIle_>77weyloR1E=D}184hLd!IENxKPZ1mq-SH=zM7HM=5pS!z*#ujw?qMIVyEK$G zuyfrkN#8alMvY@eGy~&{Ja2SMueMOONUoQf308(oMK zW+DxdC%V(v=OIlrnGoOrq8IY}3ITxsW(oV+ozB-|^|})XWQOn ztWIBGMc`MqDDmt(o*vP?^gm}@y9-oz=Y^kWj2Yy#SAeSc_g>lEk)wptB=*~ocVUyY z=xe;YU_O|o6+lRB&beu&FDm{|-1-cJ5$5s>^l`WjjAvPZ$$cRw!`7&aO}HyiS#o76 zrti5bjZNI;=cbKIeQ6KaPEM6jNp-v*Eaq=X9b@*Ygt zywbw`Q8#x6tvYw7{mmpueyk?T&q2K2`yC|5fswtig4KGBl5+bHL=UT6Z80v#kpd&x zr^M1FeZ$`a9$#5I4aIC=7t$A4%`?gF(#kRtf7QItD~hB%L_ICl5poN-rU+3zBi!L@ zKF9mhPVWu4Mp>=?OXb9g6|bnQbWLW>>yb@(zHwbOcwfp*8{warjGBOUZ6vvf>%gKU z8Ye_Y z6UGD5Ee{pyFB8EHFcFNxL%qN?B@$x1?0`V~9Bn66dv_y!KaWQE%XL6q`zzT*`saa% zfmXQ#tO0Y6oi91DvjCfAm?Cq+Xe*pkgK?jsM-a=QPu3039AvbhDFu4JhCh*y?Pt9T zUvm!R*ZWv}#hxP0%*$yxCgQDy~X?5M2)ezglT|FQyv+PNPscFSN!TWN4{`M$Vt6Z)9U1cRh z(3X>{ybs+i@J)}^lw@eQwQ)-yPB5Q~j*HWIJ|*QLaXMg1VC|5d1#1**6nLw~qP;+|sqMVloJ zI{2gge@u0$?=~0GS~A?iVjsPxFSMkBsDyAcSDG=5Pf&?)8@liBOJ_5Kv_GtCBu4?moRB7O(;7E4b7HxCLNV0*pZa%hwUD^by= zl){B`lADb<3&e+z{EC4Ef?|(W0KpXJOuIGQ9>$~?qu61F<^Qlu$Zy(XL;SVdK9kpX z3JFZXtBD@KRXF48)fz~_#kO$??Rx>EH|5_FKEN*yHm-xJ?xx*T?H*sn#A6}fZ_$Dl z4r5RbGu{DN7gHPX0i%dp^J*ON4+M3?1`W2Kot+J%^p9=`K)wM{z3kj){WK`EU1Lv!@rWVO?7 zIF|qmmi|)mRai(s!>PWmY8YFg1=ExWPi&(SJMaN-DWtxGVbCY+F-VD&$da@%pSiI| zyNz9G3-jt}NQ~-qvP%XZsNbvpJl1II9*A_awNoG_SB0FpTqN4=j`NT5Gl5ZI?MWN? z62)T?Ffgouya}b+n*y##eiI3g7A$FUDhEtqg6>PiiylH%2Zb_s7203}F}CxZx1je1 ze_>;22C^lq?oOE0ao5EjQ*E-E!+cp-)SutKzPd@yF%G5olW{NMM+;qG4Wc~(rz=l= zwSHE{Y-f20&If{U;kG8ik1=G6a&(O?xvv8K;26q@)6EEH(F%%x3^sod$Tz?UPz4IC zy{Dhn07)7ghsp@x24se4a?f0OcpElOfh(7OQSw+;vES~!6%K_QWUz8IWXB@&Xwap> z*>k>T^@8m;O>ib39q#ueNiy-b-cmFW|HAKo_dG*tD$;Y(X=E(Z;NnNtCLlP#yIQRL ziUSo}a1ikRIqc{853d*m&LD_>fd!Mv~>C?;x$@F|`Gk=-vdI>=E zba>XTLA9F^Wjs4Y;U~&>tBi{f=I)oNj^IbxbvY_t%+nw9t1 zj^id=go@x465(vj0|lwo6VR6dL0H%9shsA03LtG`s*Wydd9-+r>1Y!l6(?d30>KVM zg4y9;&N+GDqH<}j9YhpFCskeo4@4V7(^RHL641C!q0~WIFTTU2H4$6Xcko$X`DJ-i zFlJIXcs9%W+wj&KQ59hQhC{$~RiC%9TTu!5k3jdA>MYv)eD4d-V;v>68SwoMSecef zyMJG5GLZ)}_$(lejEDhUIwiiMZ4V1NPaQni!n<=}k_x@)b+F^_j^h)Z!Iefuj24|s zW~jn-dyEF%V!ypus}C2CLoK$I$&;E((-hTq`8^VXP?oT_Qh7q$O?Yn``}%R)ROF+&pPKAL_r%2NgE82d>S}85m@F?ezI-fc zE2{VparXaiGYf;pOb8L~&1V;#{fkq+d-$eXt|Zg`x7Py4=}z6o`A%cGN?;-T^#?+^ zXV{KWgYs1nZh+|pb{P5Y27R7>akGR`w<)x2pvkV2K+gl!H_j7) z>wKrTcZ&8WE2Y9u|9OLTGn4t3;UF;&57S>sbYJGS-6@fI`0zq-Xc+-&zB?gqZLNiy z8!h93>B$&s8O*-E{pF(`2p>j2W`L`&1+fsEPOhhb|1VJo^>CL`%HXdKA`3-YI+X@| zCHHdYM`WN`!eB6_3ema&ArtV9jJolRfu2s004e~%3qHQ)OJa9kwd(`=I(_FHv*tq6 zZLplGDk%v(YoGMqUjy5D74)90ZOd&b_e!L*vzMrYz4NN$k}2sc=BK0#&!aRyM)mrT z|LRK$W-z zi&G*gi9;H}F-A#6b#tN5+GXOwvq=OKo?iDkWY9w}5^wR-kQBN43}TvG?EISz{Ewde z@+thWTvhDsWb~IZ)3IPGO6Ei%f5v<21U?w8A8gs=H}IkiAA%q* zRnKiwUt8d6qWSE#KbRm=u#Ji#^pkTh@pX?x7>CdOzKPlU=E~X;7tb9jV2{?*r@yQhWomL-oaTGlA_pR`%j3k zgw8T?xW5|O{x-~C+wpCB`s;HyA5PV}LFhgM)ipK5n|v`;W4fq!;jq2`fnv7ElTUgiSdFRll#X41W{L)MxG8 zh$*MlDS~F8bpE~>#pQUANMK_9&_Mhjub3RCJ^!V2p-LuciLm`!u~Ql0^A4sZ*v)UU0(duG@wA~^mOOw?|581#h&-MU9ll#xs&}*MQO|qdzDfB)7>OQO z>KUrW*J(cH&iCK0tgfrc=~o<*yOnz4a!P2*;r#=x?2F697Y4{PA|2MRpWWQMnV8JD z^p>Znt5<_jXWBYVTO(`uP=_*#+dgZnauq9&>GiEtcn)Dan{_qmi$K|8_ z4aJeMhMDndr+en+=3uolWx6cDRspiRM^P=nST3LMeTopFX)oQU?M(7QpI(K4C%Xqd zK|uYl!7QVQURMK+O|fJTwE6xhSu#*PVG=*NJ~D_p*B<>`xmf@J6*y3Rup?}Ii8ASa z2$isX{odVltk>t_s{sSvbcgFRv+jKz>&%6BH{8O-tZ+3I z0!OGb7P2VFc=P?ANCo={Dp$}Q7<_7r^wDxRun2L-*FAUhQcea}dJez!bjqdV>dAff zUHcb5CR5K;k0ZzoU&S!H*`VfDE_;QzW!Wb*K z&}sJ;-p1L@IuRV=W7_FHv-`Fzk*zIXJI$71@x;vE5h>-g8|3awYE7hXGX;!>dPX2jfpNu)@3#aevI&4N%Kj2MAo>X$ zA{#H1%0NlC_G?c?a~fS_!LqLKB1M`;p@MU!Ot%D-#VF#SeMioJAPt*IEE^^EYhtq0pTJ*`vR+0NY9GgEJQYtb7`Q=ZJ9x)Fmw1g~ z;-b}A-?F;2wao2vmYqGBJe$J-yiJ$}gS{6u*KjF)#SMf&65%odTYLC=9p=Fb-m@Z&B>gbIjO=Fj*Fn@6%zfSJI}3@=2oah(|d zcq$j&{y?eoIph}y(smlmrO$b4BThFH$Zd;0!35o3jfD-!-?bglUyhD2vr)o2XwP4a z2Ja3nMpL?oJ}a>|PlXYca#yDGKB4dTH7X+pGBq#-i_=*zB`7-Nq^>>F%c=@=HyEZf5Rz#p=e@u-!zBxH|Gg8K*en)VJ4RuXVJS^*p=uq29UAO1` zDwi2_wjSi*ocEAgJDqbTMEhrzhbO`i{|B*m%5a>)%*e;_K~&O^hL^6|1nC+=l4okk zR(Pxo-`QPigaoMP>-WX8vAH@Et7E^a3fn_$h7#T4GznHE@CRT)mGa z_;xgm6G+O@M7}eZV;d(R!0}4jUacq}g6?Sl1cFjOy>d8F>^2 z^Kx$pd*Ed&JrkOLC^PgBITXt;9bTtM{Ujr#^Z0q^?(m=;@ulmq|LSfXg!8D*U5B){ zNVM~yBu8$aTz6WGr?c1oQSMKIyYrOu$Z{Y3v$4~M-FnxpggmJxU)6`)#reoTD)@DH z$Fa;sCHki!yO@~rfjt~5 z8z*&|i@<)gSoXn5XvV|)2^l(TEfdNU`fH;aS!~rWPta>Ui#L%_WbkH{^p>32#2Lmv zN#o@E?yDcp>9C8Z>BU^hUnqeC@y~L;>KX9F7A#^e>xQFHx7rSOV1l9pxR{zljdw(}e=_2$M3wAD~t#9|?w&@foleX6YlW2kX1*H5^&(j|((_irnT%VpvJ^Dg0P@PN??0gEZ+?-}V11n0so9Lh+K+3TJvBo?ValYt z9SElkZqRsUr@MuxIP#&-nYx?#OKCPKhgWPc4VqC#_@m2VQvYtzL@0%1#CzADVA@x^khn4S6R_aQLwHR;{8dDER+DUG+Dz1zI0ppvLh7!6nOsev z`^mJ!U$z+2^%wrDR~ZnyoJzW*Eu476`Z1xIkY8rjymL;Gi%j25mCIt?OIL=dk7Ea< z{JLTr2U&ntg)Qd@{YczR9aLAjb6*@kZq2r__wjJ$oo+9~D+>GwsK-wTlFf8aJsU2(k$h zs%N=>UU0~Kdk@>fJ&_uqALYKQdI6;-%z%Phpvv`TH$}C8_xovW(?eDh1f>zmh_PPW zHn})x{Df9m(f1S3s24_mrJ32F{QgZw3M;7xDFCsz0;OgPq5l(F{LJ4nhZ z30~3A&T-Hl(9m*xU8|8D(T96vlKP8Yz9;g-0p6zb&Z_V66Y_yvOmprkC-Mq->$?cA zgBZKFKYj7BeDBNfUG^f$qe>A9iAQ)VUZpXbsdC6P)c{rWl+w;F`5dS-?(9H8o@JhTQh}24x{UY6vp3F;1h*(DnegDH z2-9g(tAOdcH3e*8@GvdD@c|?DdGp$5uBN(?Kcz5y=cX%~CM{$>rzT9rYu|9{JE2 z19nFsIQ_q*73llw=@cfWxJ(yYDDt$Cixpc;)e?uqp5ypqZ8XTz&_Oi>-wB%Nyx3VV z@89T(6;{=I9OX}c;kME{o6}Tg=TE}BBd$PuH*Z0Qrh=IF!R1wSKYJ=}ql2f^9Zx;M zYr>3asIP>6E9oZ7(WgT7FkxrR#?>-1#rwooBfD z*ry~(6TR2&tHtdFHS6c7&FAkLP>m*ooQa{j3-qmqa;T5ed5y7W?)ySpdeU~N*e4Uc zbC)qavd2-sd7!#SaoH#vhZYhM(@g&h$ru4AjL)U_n5B2&LR`(o^s|LS1& zD~5BGYx`jM!k7kD_s9cP28R-d#(C|df zvr>As{2|~FQWqUAG$~wBQH!~7cK#SuXonTVv1uRmyEq|gKWQaY349GS9Yo!vq*UE; zUh9q}NCP=p5E>P*v-J2aSi2^9YUjX25O4kUPL$Ez28&%xzpcmgYvVE<>$CCKm)TRd zpAA0|w7x8g^W1rnHoL@-g@Xxr^NtG?B$J_fHP)Lex*^r1K{aX`;VyU^I~kq+ z*QqZl)JO{EM}nRjG==FG0)4aD9Xeqh-#0TI?<)G=HQKs86K(+=#(B)Z?d9+?(npHm z{LEBFOo&oK4kG!TgTC`IvwbH#$*q06*&hkwE7xBuGKEcei?V+Vd$toJ1x2&}>iao3 ziUE}x<`n3%NnPqAot&iV>@>(o2vp{$>z?>?+7}((6~30}h+Qkq zLe?7C%J1n4FZ*9Dm$h9=e%|o3hw=v1ZaC`MO2fK%Z_r9yn4H?okD+@-NiR4ysWikQ zz(hc}BS2$6RubTY`U;KFc=edKh`f3UEik4crQZtce-fgh!;#g1ZXaF`_CRf(Hji0w zt9`aHOWypO9~x{B3eYqo@qXra*AX# zct5*7n9g`+oujB4Nwl_c{cNzW1E9sNTkw93$j&>Gm*+E)VoF14eFAHlHgBAZ&Ct+h z3-9yF8|`&EtNKQ0IuE=8KrNe$3^b*a!t2^9NeE28=)r5w&P1qM;jSvaLUtbi)iQhP zNQosCdC(yJFLiGnYnwyPxXYLPyD0QmfY}p;@qAr$iUo!?Mw`U}p9lHDN&F%4+mPs= zX7VrN^EjKW22y14aRb3pWIAh|DA`24dBp^}8*9Up#d$C1kY0?w%iz5zv};9`rs>{x=-+hz!7^0%HvhIQOrGE%i|Bqe8ZJ?7(u0J%)7tc2Y5UAWiwcNpJGbXr` zR$#EJ?In{>eadxO)BZ3L_1Y$(%L3C_l=HLynDYdSoCl~YxKPr*3Qv_{^4!GoN&13V zV|(e}`d)UK2ngbf>0UjF;w*(^{`blJ%jUcQQQpPnB>oeRizSBdwUOm`9qKY{kLx|E zzYFqFP)=#_v8;GTzI8*9_yzg1ExVU8Eba^Zv|Qe9$nCR|R8Ke?N1e?+fBs!nE|22= zWDaxl)itRyb`~-wiEGj)6fdoO;7ppgm+-}B>bksgGEj+<65a@dj?^=@PNKkNHjbP2 zJbB*G_0t)zT?QE+hzQpBH2OSYKqKED%%TWZ&-?MpKm8i5;O!1_+a0O2zZXzpoVV+@ z>X+X}C4XA$iOP_(0r$iV4wHOX}!H8@R4c|XY#cKweYQ%;b6P0TF%KO@9c9z|Bv?0 zJetb?U;EokX3Cg(2vHOzLxe-qilt>u?{?|tvj{rOz)>v~;F$EFbgzBl~ph)8O!$X1h! zD_GwdNQs3b^C%cz1}hG%&P~$n503G!ET@7w=M7M44a=4^ryB{L#hn&RkmV*}(SPH# zXRu3Xrv3fVaYLP00hKHW#I=hxIG-4^XUtXZ2sahS?t%SpYdEhZD)sDrN!>1@CA@u+ zGyXZTFo{BBPp^I5`+!<{4;&^mVp?*f+kS6?TiIxD$3(sr4yc(v@-as7WL)I5Un}Oz z5ZFzoI#V}?<}}A%u3UiC|BhCW;;!!b8b7UHQ)!P?rDTyz6_z}gRlrrxc8jWYpli|5 zvyw!zoPT4}-ohQ5apD-T-|j?LQI#Zt+b!KVF)EDn)4-dKfY78>F3wQfGIqiv1Y@@h z-=hXVfl?ovYvtW(D-YAM6z_j2hQwZ)_)jBqd-a7>r8$a$CYCB1J|7sh4>ieG9Ia1O zzo|6TV$QEF#y7*~qv*=BMM&A5qrZ@>TKPs8`Zv9&9-LaK+C+|Aln8w-j~18ySjr36 z*z!+Qrd-3h<5c@RC%H^AHivEIU++c|5FP#)6?2oDTq*H!+)Pe)#bP)W2&r4{4WEVZ z;Ep4Me&-^TwV%fbo;%Ue_@j4{opjSfeLu~X)A(EJ$4L_2(6@gcN?|b3;h!%}Ks~PmQqTIHh8(#r= z44>UBTPChVE_OW@S#N#4YI_4uIkqV4&&a(ZNQ+z(+Ih&zMK4d)lgV&zSnhlplAXuFX1*K!KG}OTdhu)Lj4N-DDpdxT$3u9wg%iz zL@NQ4+f#{+lJACM+Vme9)X$RP>eSeCwq`rE0Wc8@KCx^L7t=l5vk58bo;#Z;6Wd!C zC%mXH6PC{CQ+T}A6(^`meW=-acQbD@=})Ck{s+DvGD9ZD=->|x9Vz4X}>pdQu>S>?*}z? zD$#|0Pm=<0&_2Pn=YcK{M)Xi~4$a4F*1K;O_~g_g_AbsehU3kuORk ztM&$s?ofgfZ^wRy6dA`vZi++TX~6PCSk}+|()mE<8XNwETXiw?oKob~S?NF2cq1*i zc9&h)?nAZ9Whe!Q_*MRhjPFUD3JbzuzuowN3qLjBdlfSl$XKwBfBR&W>#)Y|3)`2X zBJzj57!IyD&RtZVdB7YvJC_h~`=rn1CcY8$EDgl8H zpcHLt-l8t%uIOnInaB}66i59U&X+v5V>o+%3W{JNi3wMJHpd{e%-lYu)G`F8pkb=L z-)zrtepAcz8heM>6h!_HH$2%l7kyk0=ZIiSa6t879H&OlHq%?|<61voNg^pOWx(z> z9B4pyrUWuMBdPDun7oGZU1{oksmxcw*OqL_r)`C;A!NMos*LXw&g4B212J1nNJFJK zs(pz1o;Z{={dEx%2EN;5e>rWYQ~;VWr*=^7-OT<4EJS1sC@*EVbEImdO4&$-YIvSo z1CK;2?Xz!;+@waEmt*mz-bv#EYr+nEY|-_gJdI}wzw=Z5e(AnXJvo|2=vt5PrU`|- zYSzsf=Ne$hEHxmxn=n1xVW5**r`k#-Hcf6{ZlSWwUiJ-5&-nW#h*5tf=jaws;sBB< ztmfCd(Yn}j47?MXcNq9KcnP1ElqBC0>bDl?tw+AH%0_YVy2c}PettI%t#L%fz#|mC z7zndK4+ckPbYhz2EA+9_(atM}rh=_vC-$11yfUU_@pK|*T}YD4BF}zqet!-sk^BxS zM`bnk$&@uUw7w4(SgDTarMlK#82#7*SkX{V$)sM2c26Qb# zMl#&7A?OA<_2sTU#q2709yIW6`a6QHKJ5l@jRA8nZSSKb%&jX}-K$$FF-5q^Bfy%$ zJOED@W(9BFRPO%PYSpp9kgSk6%ZpS}F0Ggi(6px zf5kU8H6*^ZV!UGdz++Jrl?5BL|H^I87QHEtFl$u_{^Thr>UHg_q@=E3!jC~^RT@hZ zWR3)Do*@(0>o191USr`RNlD1fJo}b=z1g=056=@M2L^{)2$%>r`z9h#eL1{@jl8(x zlBSWv8jZg^GQ{s15epL3?|tq*a2Dxc`#yH_rPjG*{ez!hKHaA?_8^f$_zV5eC}wAJ zBrr+~$wMq_P3{$g>}$EL<22{0o+X3}T8r4C#M^#auZVrQs>b9_ThSVppgF4b@kRFs zVwm%({-^#nqGXqrnC%^X-g^C-(ejK_Nm=iDeHjIVTSnuymUXlUOf=FRB*f!5kv@i7 z{nAqtrRlVaUHE=2cL0H#UK@%>MmS*8oXF&@-cQ((*?(MIR?skM%76F4Y(qme zw@%lXo2O-%Gn%dGWEosgw3j=a*D}m6^4>AIH};E@)N@n?prM0n|t=I56O9^nam}laGn*YF1eCKx&FjSzq4G%K6~GAXQ{lOUYbee zZ86S2-X&zl-BwnatP&1_%JQeZKdmS#M-Je={GB{E3(V$0Fa=!kX!+rRB9G>3jViW4 z>UVIGEm*qk4$@<}swJ!d%g*+R_5Ds3UM-6P!${KAk%HKKzeeEeV7J!5N8x^nwM%J- z%=@B_lz4(|QCt6L7Fg_6?W zKefbI`f>crPf_;{={w9jt^>o047-`fdey;O1;k%?Qo}d@>cTLba?$% zq<91W1lA{N=cWHWmxp)Ckz#0=f=ONV14RW*fNAn-S{fE`&uAg_6^LADtcYds9aeqF zOgpAQ&aq}ZLDFzGCegdk_&}IDUAp026$^62=9iVIo@0it*s9jfZ5Esrq-WLqdP3fI zs6cH&CR8@J^(2wZBGX$%V;$M49#?~diu|4#?mNGeV=0Rc_t>T2&v}*yKL~5&93&(| za6o2m;Twf~dwbWhEA*?QiL5#$_wa9=1>iP-L$IuEfEEkr3uH|$C9tWVq>9mo-z)!6 zPQb?-EyH)U{e%4s($A*qPmGI@=qB-0V(nA0mdxn|h?s}td+j!}!(`rXA zYC(dlW7GpjeaiR?H~#K~szoJ*irNRUihf$J=0H1pZ&q>$VMq$#CrM?olXwCIp~qev ze9bGn0-ouOO^Oc`>b@LXB~3c~#!^oAoNJ-Lbh6y_#lr2G_fA>pkLjvTYpEDmaiq2A z*uG-;HlW!0VTVzViDP%pGb4*cZ=)WGkI5sk#?;ms>D`(2n?4Mr%cb4D?62;Y7?RjW zzbi4row^$uW#MDN?VoAbHIf&vp8_eZlCFeC7xPehLfAYVg)udq1swACMy#ekx|7r1O{35*q4x9bKIKo=sev$ZGQ}phY=oA5StUKPZ9nKy0yP_qn)o7a+4MW zd51qlBpcQn;vJ3lg&Fo zJ9KNDrB$KNo~z%|J~`?PEzjanp(~oqr~BxemN8ON^e^hk8yt_~PNHX9_(9{dp+lnM z%ncX#r{E7BJx2?s{*{r&MeQ4?i<5ura|#I)Jf<*+z{P=d-Lo7!8>=Oxw3nkVR>m?$ z_6^Nb;WhKg-s(Lg%{eT*TXWrYL;n~cS$v^hVs_*2s9W&(h zeAnAkHNU;cY@Ln`n&#bmvis|HPEs%=I`+(v;^|MG8Uj7zy%LTO6gR3&ZyQ*h6B}zK z6r8QqSg%g~v`pM}l~C`q1C6v@;03p9K)ea~fgL+URnO+55XX?0?RP)S+dhi7Lps)wbUbD1DEA_FhQID`IzWyZq^KNZM*Ghzaq2VXmM5wY z8r&YZ=`+c{SL=0RU7hFJb`d^)q4dFmwuJ1jD{7QmFJE~~_XH})?kg^S#YcTcn9ig} z(1_LyGuV4uOk1`13WVc27&3#D1=1C4=MUFf-L+ud8kCXM>$bB->ii&cWVrMYeDoVm z%TO^>Yo0m4h_D*Liw;s7JM{+tS3)bfcorcFzHjEMO`R{p3ifV#97!8;lcdKk?=ws?UZ4hhd;R=8GY)|KzV{CHA| zEj?6bCHwAJ&PVuDa({hK;@qo`HPt zFnr>03H64aPk)*SADk}o?l`=R`w{%(X1(lz;I=TFF4+sRqSEOjtb&J^k+(Q^myKU7 zw0@&CIaDR@wA)j7?b=|n%fB6l^R*qfZthgQ%7k z3%k5rz@jIfFQ6yPrI{CtvC7w)SaVW%1=U6h_GJrKW_;ploW5hA18&dqR2!0b{+p05 z<$*)Vo3|~Wodej{sdIdAPlUxi%&-V(&0to>uS{y&bjp=KWN>@1I?px)xsfzj_UvN!9^+rStpbHk=+iI`Zp zo9mG1O4>EN+*EM5Rv!4chwYuMEE$NE#?AQ%mSa8*JQoDqI;;^g!7XyK)nCe??lAgMJp$qTK1-dlEyjgDrv4z_B}@zK1yJ{ecfT}-8qy7 z^2qu=f5)$sk|Ox=Os_?qbfa~B4FRxc&HR~Z{|gV7Hf32ZRxhJ*uQ(+aiCL%EP+t`9 z>CB+WjHwz4{vZ-!P4}3QYCZHL^cWBRj0y9hklAbp>ipQ8BkKuzgSILYiPiMo`a|x| zuALX^rc#c)BKa29kYg$lIRVVf1w~c<_#tBJnCsWN)}hXs`NH-T-zN%1AEG4xy3jkY zk!OHzj2mmM^4su-qfI06ia_HLlwoZdkbs8YH~0)*oSp1Bu6b6Bse~|#b2M?BG7awD zk0Wm`Ze0o>B67hM-fdx;x?IE98L)4E{U}5abh`m}^e`lLq%L84aW~lChHEz@9@mB= zH5XSdU0EH8{Y_?OW=3k5HC>#`iQK(ErPSMs<3x880lnah9XPTN(U{I0JN3g(JHK&6 zx})KSBL1O(2vcx;UwhKE!Xu%L7|#dTEt0fOA{VsSJ3|1}uB9&i-i5C+82z-PSo+1O zTC&fHF$Dt4*5*Bsh~LgqU8pTF%%M|A+5A#XW=T3DD^+En12s~Zx8P=`1k)3OhH!kny)I@~ISuRR*h|Q`7_fkU$u98I#P;MchAGb2j3w ze!`EF4g?jko#`O+Ek8pN6hwYS2Xan8HBS)Cw(x9i|rnNY89L}p-}t4 z4q&Q0F^UPN-owC=UWmf;D6)z)>6IEO2lh=7+asw5C-54t0Os z^zQJyqR2A=KM=x+;$1p@pWEYP++Pq3X9cFC@sZz!v_i3I3#n7+nU_04RR@rWAbKb$ zy$UgW>PsT`uLzso-`S2rh%+EU5xq&1=It?w?1nXnOFL|i6^wvRcWQl;pnJoj%Z-BR zcX5Oz;a@<+J6h;f8Mxr{l^)E{O?xh#Fr@?0od}iP`*4bA8>5giEWLiBkG9GIedJ^5 zk3iPGTDLl@$j;bYM@e?T)hb2yi@kmEkMmv?Qx*eBiM&AlQf%!l?8^5@nimoxfXi8qV+YJ zg;xv9TL-+b&!XAUR~$!#^?3D@h}JYWDp;WklgyPX@<~q(k?m46YrS&wm0OWWOhUqE>wVTlwKB32$7wj;nC44VnZ-EjL|>N;6!l2SfisrFw{Hi27@YQ|Gd;O#B3#!%v%E z&$f;FdbTUB+JhW6wp6>Jkxky<`7VuJuk{d20*aAMcvu%o5D~^8>d89V=_CAEne^Tt z`R8tDJP~R74;~SO0Qe#pQWUV8;F*wo1@Q6fTk*`7Yq{eC=hb0}G0WT}b>{)RX3glO zKm(Vr3#EQcT2ivj&2w1tNhIC@wcC3?JsifV+M&LYsDlHdqpoBI(UPG&k0YEuAvj%} z4vbjHqb&no;uz9Zy5}k7VXxkxGlm6p4Tm(UHhjgxmksZ9Vwa(TAqA$tsxXcxA6oHI zCcJ|IuNx>}0~(p*{LAUjO%b6fpggt}xN~-;5_*<8MbDbE^qy%)Qamd@G=Ke>1sf|s zu)|jAB7=Ua)X8vyypcBgp-Ie1DP4^~EW+fz1&_4RE>zQ;rX!C?q4mj~^y+!8T&)H~4c zKH42Hx^T7PNXDv?r|#4+ztGX$Y+SP_If^Z1{e_TrKg20iZ+wUSWanjiw*LCOE)sz= zob?^~e*nrc>ubMhxod6BsYS;z3M=6C+mBC{Acja&p)Zfo(&n1yZ%T6typ*n&AJV_R zas4764t3If*o0I>IX0&m;zqvRpZ}!bkuJo%iSL7;%>zWcsFWv&bua=4Z;q%(4t+7y)goGO;a ziltQ1B3j$5nqi!u`?Z$aYVkou`+nc^8vt!mK#|0D$NSJWJ#Cw*c`}>QB88?|vaD|G zEWAUU$caNCIr}rJ;lOAORzY++L>>m^8SCRfh;I)-EWY!(j{*bRu2z8JD?|Y#ej=U`I+VVgG9@E< zRumC2TO?R8?`B=7su)F4nl{thx&lVxWQP%F-pC1IX!o+$T(xdqgi4o|1PI8xC+EW8 z6C}b^2GnClf7bB-wN#Fwi^+fXGc>)IP^lr99>X|}%}dtSTXF=gk(Ay*%2|%Jb9uL( zYL&*h;Mcf&E9~n+)jEF7hz9C>(q$5`oDopxz)T3ums!(47Rzs!N+0N5>~f6{Tj4vw z-*?((!7vauRwd#N@i-9AetaCqY^uhqH1^B~eKlvR;+J)$+e2Ts*T973PaB-HIs|hD zTJ_D6`U=hXtD#R z1JOw{>-ozbd7P2IK;l}weU7-np%&Upt3%Xc=v@WV{$QI4ptHa#yIbKc)avCc3oF;T z5U^6haZPK~jv%H_VMuQB8jdufqpVM;+fQtWTjXxCabrQ)LP6M;9q_H3th5TJrbD$} z=Jn|d6*xW11CZW+#qVu}TjS<1qaMr+MejDnI=k+c3tA9(VBZ~IoJ9)obeY>BHS408 zd>Y2)mBF?v zaBBj1IZ%C`B{!|dq@$jb0v7vk*l7HB?tc!!r3CACK70!zVUuRh6^M9x%hp}cR_0CY zS#=OQzc#InDs4C2Olp$mBgX#|16gf!=yb#+q6fR4h$Y>I2kZVfS=l$F?}D4gIlnK+ zkbDbu7fZ-gt(I)X%+j58GB@}sP?A~iEBl1_xrlzSYS9|?1r2H*+2 zX&@$d_=p%A=JB>)RPjo`E(|l#g{Ago=tcQh$^fHK57ErHapV2l&=2GG!Y^`YwAjdd z7|8u}tg#hkUFJbb003-s#XXxrKxpoL`ws&o+LWNZ_G_GBx#_Csrq6G)HNrdKvGnmgJz70}bK}#2 ziZ5`DT&Rh9wd+?+6d~PAXqfHiDqxpoI!c&xPT)%wUnLm{i1}-&mf>4&AGjA8M_fS~ zdhB_GMTH61ZWzC@bH7T>%kF+TD-~yiXB;(ZMJN|VKg7F)MeV4R#cQ^_vF&BOH=Muw zL2rgi%Xd5-&;==;7ZVyr}HK6{C$O z=giluS}9};XOZcrxsJMTH~jKt{Mu$4!*ibQ8vx&#>JDQ=8i4p+s{Ki<0X0%)um_=` zc$3wgWLwz(=X2Z=34F^b5RMHhI-zRC8v3C{p#Oqm=U=vnbkC6FPWCh~tikBL<70Ka z(IP3S6pW=j$c9A<{yQ2`S*Tt_2kR)Ba@tBZi49Sq`a^hru5138soQ({wjWD=WjS}p zBSa8WlvgY|NFA@ZOh6!+N+$&jGOe)C35%(7+k*PwozW3fQfhi8mqLF&WN6{04Uh;x z|Hs`+kTCJPOR$G;<6UB#alMNv8LoVVd3eL&(Q zW4!Hd)-VUsQ(0Kuq2<^Fc1y!5FfUJSflDd?S(o;#`NKSGW#HyzjjPyE;zYBkNQ{bB zj>(WyS<=Vbl8C!tGyFD{;n6mmGXko<4%^4|7m_KM%zyS*{;=;*L=4};lBNn{5=KPu zY+K0A2blR93*lYEc5A;m&P8@#%90^lL`$aSTxDK>`P2>{Dt`F!KMfE+Ikq4t3GTDi zxj)pNKSb57%lpD)3a3TIy^(x;k)sN_pMY%9x)fnW1w#3(3n-KngHhX4{i7X1`SrR< z#Rn2epYMzq&xSIqZ6@^7{w<3C62CHPZ$ttP);UH%1t%O`2~+58h_n5?XL4iZ(N#Jm zr(W~`D+uIX3$j=a+Glodv&`J&QbDFtrf$u)dVj8pb{pGVl}DH(P5flUMnl6j&Iuqw zAsz%`);Xw9_l2fqjkY#&^Xe79rE`2+bbG(@A##LMylTf<>_2- z|B*e<0Yzp&>RQx{ekZRN`R|CGYCo}(AeEH6ZA-DQ*fJR&=VGDhK~aiV=(ydh8ETQL zZKElFsaC>-vluWV?O>#Gp+hk9$R{^d=;i%{!o;_=QPtV#8kYz}zJpPi@pY9Ce{`%`ZKv;?SP6!L6#{GoBnZ?o@v7ff0t=hAGgP zrpLcUFAaWgqS(gz0Pa7iL_QsbMpp8FKd=7piUfl*3Q>>@4k*-o`*UTRhgKRdslH#V$mfNSY9lZupQ^AbI@Aa{MQ;IXoUo zLTWDMx-fbOX+Xm%1NMAC_ci1G9eiMUp@dXh<~_gg=<#q9;P3Y%2fM_sw8Gs>kYh*x z+(Q%J>iw$n@K9BiTTDrTs|Kd$4(x!Hc=gXOQY;5SCEe(mO1SJd74(6e=Dg_HlCcZ* zFewBgybSHdM9fIy4si$?LrsfU{S*TWA2fs`O0u$jxN&4g7*`1=;3$0u`EzHXUit}n z3B042;jz1PO`{IQ0#B$*!t<2bKppP{Xg%N)HYxD7Y`Kb_1suoyb_aV#WJ6lIA5XNtRoT{jPe@SDAT{&kJZGbE89Wz`)kwXXkgyb^k#^5ZJz9 zT6~-kFWt`DeMCp7hQVia)9&3Z=;Mw2p7Bmyk!jTbXpkEu$vA6B6q(U5EZr0PjsEWq zKLYj@UpXu%oO=NJuSYNE-B)DM$lo-DwqR)u*&rN2&~8oIxRuf$D06+M&kKo0t&!U0 zr>pZ#^0QHqgj2{e=6if7S5VIVen`;<$<^pp#fi*HZ}#0Qy3DkLOxyEz1vOIzEPKe_ z>2kM`So=HmDHRa2-ZL~yV=Oy_J(t7Ei~SWi!Jy33v_>T5AMU}E$Rv^hX>HW}rUkh2 zcz9b8ph_peoddsWwrjgqR_|Zf)cA|yNqM_|p*PL<)lHvmL#*oqVth57XCDy1jyRwH zF`3Lg4E=%+Tx2iQSt{;;#nTL?ItqPYuyylb-~2!D0Xk-$7RvRk4k^9dXaidH9f_*E zkkP%ALTuZw&d+{wFBg#@W5@>;|2)8V9$SPu3Zk3oP^~wTiupcuKo}5STnuXBXnoh1 z{Z=Y5OxU^~s<%_p_^KlkN@V2A-QBh39WD5RVsw`->MV=Q zX4twwP2;D0G~5I>AJd96Ye3!D^WY#pnZ_IT<#8q6;I52b=l>P?N8g4dnK|l@(8o;V zQTidhVBsjn>>XC{G)@Cb)*aU&aqqQ)J1riOM{a?UTJg3$Q1UQrNQ9}(0>izZJ=Jp0 zme^jSfHDb^S%$bxGTJM5kk9U;#yVnbY@B0$l`Tda?H70-eqI=vZvE!n7pZtXrKuD( z;hDz|pCm1j`7;mE6s6v-MhUtr9a0{t#*vScU#Y>xnv!yVIQ12OA-iie`aUI7{;88D z3styPty_Dc1SWm66(X%B+{M_i{s(2!53aXjNUX8vEz!z2PRh}8s36%UnN*{l#jo{G zVRT))Oq#S}E*hfSFnTn5yQ1ULg$wi4$9Z`31{go*BDW*BPyTtdCY<7==TyEz*B1B+ z{Vsr>b^i;G1>BB7V|;}$bgV{@ey8QKfG)r;DXUN)p_>UTzV?+aO1Z;YYL3%B*#JO1r*< z#QAi`$u{k41?5{6E9R@FN&E7RB|h!(_gW)?m#g)^@frO)xQ^%7*5^-&Rwx|LrksaP z#zCK9{h3~G9xMqifB#jt-ARAk)uRXTTExypBm*~N$rS2jNh!M@$9J5p~cM1gn9x{)!1PSS~+^7uPxDW1GLgw z|3Ic`3iT5lCLV0yD<0riJN_JqA@%78pHcyZH7oL-*K)XoF+O5xM7-g9}L=FidNvHX} z)9JlVXfD=C7CuFC$XeeNhhxcfaHzApez!y+#STv8JM-p_cM*LSy3VyRSg9IP4N8KM zIYFVq->GNrb8NJ3x5183`z3Q%UK(&!qH;bPabKP2N(&kPin|ypMD~;>)lCB53Q2pN zjUtIkXy5wz9K;k?{j~|^MY)&53R*k1=-hj@z>xI*%%7!x=|c15CX(Mn44+(3_7(xt zeIhYHKSkOu%5>D%_Qp0%Z=>$(_te=iZlSWW(X`$7!evw)*Pyr%fzqSdFS^6=L=hgH zL3=D?H41jS4u#-YQ5wp2GVVhj;%v5GO)rImGw+aE#JR5L#@qvY;_6lJR^HVEd{vs# zM;v)FjzTI^NXDU(Vt0H7Jz+E;MF;uuvbnRb)z{!olB=I)f5;R6u6JZrnC zb>3gR@r>&4clwM@7K`m19;+7XL zzGxN$2d8BzjSfWU6uOP=0?y(V)|H)P>XRbhV;MU=(EW}3a(os1@1mx!fEXRRc3Ya ziuf#v`%YQMJc8kR@~B2M_Xk;8x@EM5ZZ%#K9M^v_#U>)VHHhrCPVQc?Mh=HNy2sw} z-f{Q{IIZ!^nbjS_B#2%XRQ_(mFk~bn<3x^f&;BqNKrkJR@F|nT@i1b?bkAalgwl^` z80(O&G`zhhcHtOHyTBbpV+xMELpUbjd@D`m=p0p`=n!H-*vf$ouyFK51k1s=_sXRB zjE~JPhHk=*x3jxU=omdPS6h5*Mg+y_dh4+Uj^C>8@95u^$c%F?vT9$!Z$%d!(SI;& zG324Jd*>WE{;LN%pZ~^lW+9FwED@8f&3G>3kur*f_+u$ufmY~bagKFcSx9hAcceEQ zTvxA<-E)<6K$RI}*eo^x;~))tY2#jI#~kkbDZJo*?)fZGv&#V*AaQ7`QE6AFO56SM-_VIsQ3BklslVjZz@LhWB zF-^uu{j8j26lYXWc}vb#u-j9YpQ%P^dCx7Qs@b#U?IJQENbdr^4w3igXxUYln~!3C zs}YagnF?DjQm|j1*`{N9Cmi;!l8Io|>`W@!ArkTtC#x4hzxbU+eit!bYy6|*3avC| zCXgflrpVVeYIpT$c=K;Z+}*?uyx|9~{CUIex%pgb9WiJKJgsr1i%D+=MMEE=c#j73 zj}Rq%!u;(BOV{I}7bh2xC7=@@vQ7E*QY%4N>T(;72@9r3D?a|F`Kl8-)V!*}Z2^NTbI#Ng!@oJBiOKKM9*&T{xd zHW80AH%6Maflk*rAT}r$C5YC9`#kskX&qNjs2Dlu`C8;{Zrp1!`EvDVElL=7a}2Lh z5A)eSkEXDnamIkuy9hH@MBrfm2Uh(+2m2_f;^~WdIKl>t-=OJTIt8KXPeCZQMI^)Q z!PX;|q>){6X*k;0Q!}3LK&O${`xV4c`TN^mrEkv`n53)}M+w-7>|rNU08(IHOuS{9^ z&5pA^3)W1ZwWjE%$j_x~fkOp|5)!M9G#R^*15roWi24LAE)21w`F8^GWM^WPg)?$_ zDIKurQt!V=Do4stA*bKgr3R0{3c@%&lwO)@f!-K6>0`>%nKnAAOq_p70V)!~QUm4i zrPhD;M~Gi;p<5QlL~)$ibJ_lsYze9$AsmTuYeOROx%+Li-BDW{?z8zPp0Q+TdT^1x z$4-wHmFES)w_!0b#X~w9$)yeSH~5MDge-7+3n4H+Iv|~Us$=!kS96QHbF}lD3ckO~ zzeJk*CBoblp$Dpsr%tdm3X4@`)Qcyak>A3_IRa>WWIY6|`}yQBonX?y#Mizm=JwHu zhzKl;_jYdo0$2}I@b7S*v+6MeZlZ^KbvTGcMkKY!(K$5c+0I!4E!iv@ z-3QlgiVh1^8pDAud z;!(CtrhbOnL?v|LIuO*!G;R9V4U7k9Hp`WsRw1~Q-@>O<%?o#J#XX|&=N|dr;P6U{ ziPWP-RFHt2+n04tuCN}uNdMPXz_=RcWo&F&Z;w>TKyJo19U`LeKAWwyIQE9Mw`#Vn zi<%dDxhL$(9RJL$-gzRu+x~GW0lxYZ`4W*_1w1&2Si^0q!WEBn8EMPydbBv_Zu2!! zHPZ|9EpD8HFO5l1*dhD&20G?S@Ha9_qQ2Tqbfwp`=&fZ3x|cNXCrq=cf1V>czYV|* z1k~w{L|@(cbELD3qx|0wbc_G}!}kz>5+3*gzuV1u(F<2C6BAowMOzLs%lx?)q>$i5 zo%}dTp;2}J*bun!pQ3t-m?o2mPPKn#HAO@w>G8#tfGM@WY>OZ{@nc7o?UB&F^v7^l zNakRlD3K)NKKs`H!rbc4U<3-vt}Q;$E&cb^RUy@dz2T}~oWg-fMpq0Cn$zescU2NG zkqMZhM&3RexyQUTS;Ofe%jB7;C3tFkH6~Yri}^Dva@vsCpg#s`TjvLO{XQ)jO~B!r zu10~#&%g+n`%ht%lW6F`=Z$gS(Ra5$mwLf7E)U`OrG8BrDqT!8zs-L_X}c~Sz*of3 z0BHa%sk>zCinNAnB;)~p7Hr+FtiAl~mwUm3ch9-lHp=XK6%$R%SNghMebAXe_rr=M z^#t-bu_Jm?d;;O_O|?@*!mT;&5w>-vp{NeK`PI2A>x(8HVo`)R!p3t^u~e16Lp_>1%PNEacgC zin;_MqCWo#HY8Zc21kY$-?(#N7%Qi#YeDm@tSIPV@JOw9$y?> z-e?ELiW@(Z1OnvpZ)o@oH|%?fy^U!oYz=19I98bHpVU4-9MiA=*6eg%oK7Hdq9Hc6 zG9%~wVHeR0e39=W<9B=~p7}CwZpfH-2;I>60gT<^$3*8he;>m;P!f3FT}=uVa0%62 z4hisd*z^y#(?(0~5OP52bvVYbS#vzEy1t%-c%S=2v~9 zV>TXPvZ-h;OZ4kId+oGIf@;bJw=nu^*?an)gDW)0DfmCU1QJ~ee@;2y;&~YJS*i~a zO)$4jW#&JWm7-!iq~n;diHrRI|M>skjsNIokV>+eVHYVkl@)vZ F_&>7G+L8bO literal 0 HcmV?d00001