From 21ab7839e393f6de1acf08de4c7e2ed8ecc5e399 Mon Sep 17 00:00:00 2001 From: Ivan Olexyn Date: Mon, 20 Jan 2020 00:06:40 +0100 Subject: [PATCH] Simplifed the flow. Some bugs present. --- README.md | 1 + src/com/olexyn/ensync/Core.java | 13 - src/com/olexyn/ensync/Flow.java | 76 +++++ src/com/olexyn/ensync/Main.java | 59 +--- src/com/olexyn/ensync/Tools.java | 129 +++---- src/com/olexyn/ensync/artifacts/Data.java | 36 ++ .../olexyn/ensync/artifacts/StateFile.java | 29 -- .../ensync/artifacts/SyncDirectory.java | 238 ++++++------- src/com/olexyn/ensync/artifacts/SyncFile.java | 26 ++ src/com/olexyn/ensync/flow.png | Bin 55334 -> 45375 bytes src/com/olexyn/ensync/flow.uxf | 321 ++++++++++-------- 11 files changed, 516 insertions(+), 412 deletions(-) delete mode 100644 src/com/olexyn/ensync/Core.java create mode 100644 src/com/olexyn/ensync/Flow.java create mode 100644 src/com/olexyn/ensync/artifacts/Data.java delete mode 100644 src/com/olexyn/ensync/artifacts/StateFile.java create mode 100644 src/com/olexyn/ensync/artifacts/SyncFile.java diff --git a/README.md b/README.md index 21d6134..961d93f 100644 --- a/README.md +++ b/README.md @@ -29,6 +29,7 @@ Sync files across directories. ### Issues +- Have Map entries be remove, once file ops is performed. - Create a parallel Thread for each SyncEnity. - Add support for modification dates. - And thereby eventually support 10 out of 10 file operation types. diff --git a/src/com/olexyn/ensync/Core.java b/src/com/olexyn/ensync/Core.java deleted file mode 100644 index 3ec0003..0000000 --- a/src/com/olexyn/ensync/Core.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.olexyn.ensync; - -import java.util.List; - -public class Core { - - - public Core(){ - - } - - -} diff --git a/src/com/olexyn/ensync/Flow.java b/src/com/olexyn/ensync/Flow.java new file mode 100644 index 0000000..5bd4714 --- /dev/null +++ b/src/com/olexyn/ensync/Flow.java @@ -0,0 +1,76 @@ +package com.olexyn.ensync; + +import com.olexyn.ensync.artifacts.SyncDirectory; +import com.olexyn.ensync.artifacts.SyncEntity; +import com.olexyn.ensync.artifacts.SyncFile; + +import java.io.File; +import java.util.List; +import java.util.Map; + +public class Flow { + + + public Flow(){ + + } + + + + + public void start() { + File asdf = new File("/home/user/"); + System.out.println(asdf.lastModified()); + + Tools tools = new Tools(); + Execute x = new Execute(); + + + SyncEntity syncEntity = new SyncEntity("test"); + syncEntity.addDirectory("/home/user/test/a"); + syncEntity.addDirectory("/home/user/test/b"); + //syncEntity.addDirectory("/home/user/test/c"); + + + for (Map.Entry entry : syncEntity.syncDirectories.entrySet()) { + SyncDirectory syncDirectory = entry.getValue(); + String path = syncDirectory.path; + String stateFilePath = syncDirectory.stateFilePath(path); + + if (new File(stateFilePath).exists()) { + syncDirectory.readStateFile(syncDirectory.path); + } else { + syncDirectory.writeStateFile(path); + } + } + + + while (true) { + + for (Map.Entry entry : syncEntity.syncDirectories.entrySet()) { + + SyncDirectory syncDirectory = entry.getValue(); + + String path = syncDirectory.path; + + syncDirectory.readState(path); + + List listCreated = syncDirectory.makeListCreated(path); + List listDeleted = syncDirectory.makeListDeleted(path); + List listModified = syncDirectory.makeListModified(path); + + syncDirectory.doCreate(listCreated); + syncDirectory.doDelete(listDeleted); + syncDirectory.doModify(listModified); + + syncDirectory.writeStateFile(path); + + + try { + Thread.sleep(1000); + } catch (InterruptedException e) { + + } + }} + } +} diff --git a/src/com/olexyn/ensync/Main.java b/src/com/olexyn/ensync/Main.java index 423f17c..a6f00b1 100644 --- a/src/com/olexyn/ensync/Main.java +++ b/src/com/olexyn/ensync/Main.java @@ -1,71 +1,16 @@ package com.olexyn.ensync; -import com.olexyn.ensync.artifacts.SyncDirectory; -import com.olexyn.ensync.artifacts.SyncEntity; -import java.util.*; public class Main { public static void main(String[] args) { + new Flow().start(); - Tools tools = new Tools(); - Execute x = new Execute(); - SyncEntity syncEntity = new SyncEntity("test"); - syncEntity.addDirectory("/home/user/test/a"); - syncEntity.addDirectory("/home/user/test/b"); - //syncEntity.addDirectory("/home/user/test/c"); - - int br1 = 0; - - while (true) { - - for (Map.Entry entry : syncEntity.syncDirectories.entrySet()) { - - SyncDirectory syncDirectory = entry.getValue(); - - - syncDirectory.updateStateFileNew(); - syncDirectory.updatePoolNew(); - - syncDirectory.getListCreated(); - syncDirectory.getListDeleted(); - - - // - - syncDirectory.doSyncOps(); - - -// - // WARNING: - // Be very carefull when to update the StateFileOld - // i.e. you create a File and update StateFileOld without updating - // -> create newFile -> update StateFileNew-> getListCreated contains newFile -> addToMapCreated -> create copies as needed -> updateStateFileOld -> OK - // -> create newFile -> update StateFileOld -> getListDeletd contains newFile -> VERY BAD - // - syncDirectory.updateStateFileNew(); - syncDirectory.updatePoolNew(); - - syncDirectory.updateStateFileOld(); - syncDirectory.updatePoolOld(); - - - - - } - //Map mapCreated = syncEntity.getMapCreated(); - //Map mapDeleted = syncEntity.getMapDeleted(); - - int br = 0; - try {Thread.sleep(1000);} - catch (InterruptedException e){ - - } } } -} + diff --git a/src/com/olexyn/ensync/Tools.java b/src/com/olexyn/ensync/Tools.java index e7ea453..83f545f 100644 --- a/src/com/olexyn/ensync/Tools.java +++ b/src/com/olexyn/ensync/Tools.java @@ -1,13 +1,11 @@ package com.olexyn.ensync; -import java.io.BufferedReader; -import java.io.File; -import java.io.IOException; +import com.olexyn.ensync.artifacts.SyncFile; + +import java.io.*; import java.nio.file.Files; import java.nio.file.Paths; import java.util.*; -import java.util.regex.Matcher; -import java.util.regex.Pattern; public class Tools { @@ -18,25 +16,15 @@ public class Tools { } + + + /** + * Convert BufferedReader to String. * + * @param br BufferedReader + * @return String */ - public void rsync(String param, - String source, - String destination) { - // - BufferedReader foo = x.execute(new String[]{"rsync", - param, - source, - destination}).output; - } - - public String getConf() { - BufferedReader output = x.execute(new String[]{"cat", - System.getProperty("user.dir") + "/src/com/olexyn/ensync/sync.conf"}).output; - return brToString(output); - } - public String brToString(BufferedReader br) { StringBuilder sb = new StringBuilder(); Object[] br_array = br.lines().toArray(); @@ -46,30 +34,23 @@ public class Tools { return sb.toString(); } + /** - * StateFile -> FilePool + * Convert BufferedReader to List of Strings. + * + * @param br BufferedReader + * @return List */ - public Map fileToPool(File file, - String type) { - List lines = fileToLines(file); - return linesToFilePool(lines, type); + public List brToListString(BufferedReader br) { + List list = new ArrayList<>(); + Object[] br_array = br.lines().toArray(); + for (int i = 0; i < br_array.length; i++) { + list.add(br_array[i].toString()); + } + return list; } - /** - * CREATE a StateFile from realPath.

- * WRITE the StateFle to stateFilePath. - * @param realPath the path of the directory the StateFile is created for. - * @param stateFilePath the desired path for the created Statefile. - */ - public File generateStateFile(String realPath, String stateFilePath) { - String[] cmd = new String[]{System.getProperty("user.dir") + "/src/com/olexyn/ensync/shell/toFile.sh", - "find", - realPath, - stateFilePath}; - x.execute(cmd); - return new File(realPath); - } public List fileToLines(File file) { @@ -84,32 +65,19 @@ public class Tools { } - public Map linesToFilePool(List lines, - String type) { - Map filepool = new HashMap<>(); - for (String line : lines) { - File file = new File(line); - if (type.equals("all") || type.equals("dir") && file.isDirectory() || type.equals("file") && file.isFile()) { - filepool.put(line, file); - } - } - return filepool; - } - - - public List mapMinus(Map fromA, - Map substractB) { + public List mapMinus(Map fromA, + Map substractB) { - List difference = new ArrayList<>(); + List difference = new ArrayList<>(); Iterator iterator = fromA.entrySet().iterator(); while (iterator.hasNext()) { Map.Entry entry = (Map.Entry) iterator.next(); String key = (String) entry.getKey(); - File file = fromA.get(key); + SyncFile file = fromA.get(key); if (fromA.containsKey(key) && !substractB.containsKey(key)) { @@ -120,4 +88,51 @@ public class Tools { } return difference; } + + + public StringBuilder stringListToSb(List list) { + StringBuilder sb = new StringBuilder(); + + for (String line : list) { + sb.append(line + "\n"); + } + return sb; + } + + /** + * Write sb to file at path . + * + * @param path String + * @param sb StringBuilder + */ + public void writeSbToFile(String path, + StringBuilder sb) { + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(new File(path))); + bw.write(sb.toString()); + bw.close(); + } catch (Exception e) { + e.printStackTrace(); + } + } + + + /** + * Write List of String to file at path . + * + * @param path String + * @param list StringBuilder + */ + public void writeStringListToFile(String path, + List list) { + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(new File(path))); + StringBuilder sb = stringListToSb(list); + bw.write(sb.toString()); + bw.close(); + } catch (Exception e) { + e.printStackTrace(); + } + } + } diff --git a/src/com/olexyn/ensync/artifacts/Data.java b/src/com/olexyn/ensync/artifacts/Data.java new file mode 100644 index 0000000..b1284c9 --- /dev/null +++ b/src/com/olexyn/ensync/artifacts/Data.java @@ -0,0 +1,36 @@ +package com.olexyn.ensync.artifacts; + +import java.util.Map; + +public class Data { + + + Map> database; + + + + + public Data(){ + + } + + + + + + + + + + + + + + + + + + + + +} diff --git a/src/com/olexyn/ensync/artifacts/StateFile.java b/src/com/olexyn/ensync/artifacts/StateFile.java deleted file mode 100644 index 3a0fef7..0000000 --- a/src/com/olexyn/ensync/artifacts/StateFile.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.olexyn.ensync.artifacts; - -import java.io.File; -import java.util.HashMap; -import java.util.Map; - -public class StateFile { - - private final String[] types = new String[]{ "OLD" , "NEW"}; - - public String stateFilePath; - public File stateFileOld; - private Map poolOld = new HashMap<>(); - - - public StateFile(){ - - } - - - - - public void update(){ - - } - - - -} diff --git a/src/com/olexyn/ensync/artifacts/SyncDirectory.java b/src/com/olexyn/ensync/artifacts/SyncDirectory.java index fe779d3..43799d4 100644 --- a/src/com/olexyn/ensync/artifacts/SyncDirectory.java +++ b/src/com/olexyn/ensync/artifacts/SyncDirectory.java @@ -8,22 +8,12 @@ import java.util.*; public class SyncDirectory { - public String realPath; - public String stateFileBasePath; - public String stateFileOldPath; - public String stateFileNewPath; - public File stateFileOld; - public File stateFileNew; - private Map poolOld = new HashMap<>(); - private Map poolNew = new HashMap<>(); - private List listCreated = new ArrayList<>(); - private List listDeleted = new ArrayList<>(); + private SyncEntity syncEntity; + public String path= null; + - private String state = null; -// For an explanation of what the STATES mean, see the flow.png - private final List STATES = new ArrayList<>(Arrays.asList( "NEW-1", "LIST-1" , "LIST-2" , "SYNC-1" , "NEW-2", "OLD-1")); Tools tools = new Tools(); Execute x = new Execute(); @@ -31,169 +21,163 @@ public class SyncDirectory { /** * Create a SyncDirectory from realPath. * - * @param realPath + * @see SyncEntity */ - public SyncDirectory(String realPath, SyncEntity syncEntity) { - + public SyncDirectory(String path , SyncEntity syncEntity) { - this.realPath = realPath; - stateFileBasePath = "/tmp/find" + this.realPath.replace("/", "-"); - stateFileOldPath = stateFileBasePath + "-old"; - stateFileNewPath = stateFileBasePath + "-new"; - stateFileOld = getStateFileOld(); - stateFileNew = getStateFileNew(); - poolOld = getPoolOld(); - poolNew = getPoolNew(); + this.path = path; this.syncEntity = syncEntity; } + /** - * IF NOT EXISTS the StateFileOld for this SyncDirectory,

- * - THEN create the File on Disk. - * - * @return the StateFileOld. + * NOTE that the SFile().lastModifiedOld is not set here, so it is 0 by default. */ - public File getStateFileOld() { - stateFileOld = new File(stateFileOldPath); - if (!stateFileOld.exists()) { - stateFileOld = tools.generateStateFile(realPath, stateFileOldPath); + public Map readState(String path) { + Map filemap = new HashMap<>(); + + Execute.TwoBr find = x.execute(new String[]{"find", + path}); + + List pathList = tools.brToListString(find.output); + + for (String filePath : pathList) { + filemap.put(filePath, new SyncFile(filePath)); } - return stateFileOld; + + + return filemap; + + } + /** - * READ directory contents.

- * WRITE a new StateFileNew to Disk. This is IMPORTANT in order to make sure that StateFileOld is NEVER newer than StateFileNew.

- * WRITE a new StateFileOld to Disk. + * READ the contents of StateFile to Map. */ - public void updateStateFileOld() { - // - if (state.equals(STATES.get(4))){ - state = STATES.get(5); - } else { - return ; - } - tools.generateStateFile(realPath, stateFileOldPath); - } + public Map readStateFile(String path) { + Map filemap = new HashMap<>(); + List lines = tools.fileToLines(new File(stateFilePath(path))); - public File getStateFileNew() { - stateFileNew = new File(stateFileNewPath); - if (!stateFileNew.exists()) { - stateFileNew = tools.generateStateFile(realPath, stateFileNewPath); + for (String line : lines) { + // this is a predefined format: "modification-time path" + String modTimeString = line.split("")[0]; + long modTime = Long.parseLong(modTimeString); + + String sFilePath = line.replace(modTimeString + "", ""); + SyncFile sfile = new SyncFile(sFilePath); + + sfile.setLastModifiedOld(modTime); + + filemap.put(line, sfile); } - return stateFileNew; + + return filemap; + } + /** - * READ directory contents.

- * WRITE a new StateFileNew Disk. + * Compare the OLD and NEW pools. + * + * @return */ - public void updateStateFileNew() { - // - if (state == null || state.equals(STATES.get(5))){ - state = STATES.get(0); - }else if (state.equals(STATES.get(3))){ - state = STATES.get(4); - } else { - return; - } + public List makeListCreated(String path) { + return tools.mapMinus(readState(path), readStateFile(path)); + } - tools.generateStateFile(realPath, stateFileNewPath); + public String stateFilePath(String path) { + return "/tmp/ensync/state" + path.replace("/", "-"); + } - } + /** + * Compare the OLD and NEW pools. + * + * @return + */ + public List makeListDeleted(String path) { - public Map getPoolOld() { - if (poolOld.isEmpty()) { - updatePoolOld(); - } - return poolOld; + return tools.mapMinus(readStateFile(path), readState(path)); } + /** - * UPDATE PoolOld FROM contents of StateFileOld. + * Compare the OLD and NEW pools. + * + * @return */ - public void updatePoolOld() { + public List makeListModified(String path) { - poolOld = tools.fileToPool(getStateFileOld(), "all"); + List listModified = new ArrayList<>(); + Map oldMap = readStateFile(path); - } + for (Map.Entry newFileEntry : readState(path).entrySet()) { + // If KEY exists in OLD , thus FILE was NOT created. + String newFileKey = newFileEntry.getKey(); + SyncFile newFile = newFileEntry.getValue(); + if (oldMap.containsKey(newFileKey)) { + + long lastModifiedNew = newFile.lastModified(); - public Map getPoolNew() { - if (poolNew.isEmpty()) { - updatePoolNew(); + long lastModifiedOld = oldMap.get(newFileKey).lastModifiedOld(); + + if (lastModifiedNew > lastModifiedOld) { + listModified.add(newFile); + } + } } - return poolNew; + return listModified; } + /** - * UPDATE PoolNew FROM contents of StateFileNew. + * QUERY state of the filesystem at realPath. + * WRITE the state of the filesystem to file. */ - public void updatePoolNew() { - poolNew = tools.fileToPool(getStateFileNew(), "all"); + public void writeStateFile(String path) { + List outputList = new ArrayList<>(); - } - public List getListCreated() { - if (state.equals(STATES.get(0))){ - state = STATES.get(1); - } else { - return null; - } - updateListCreated(); - return listCreated; - } + Execute.TwoBr find = x.execute(new String[]{"find", + path}); - public void updateListCreated(){ + List pathList = tools.brToListString(find.output); - listCreated = tools.mapMinus(getPoolNew(), getPoolOld()); - } - public List getListDeleted() { - if (state.equals(STATES.get(1))){ - state = STATES.get(2); - } else { - return null; + for (String filePath : pathList) { + long lastModified = new File(filePath).lastModified(); + outputList.add("" + lastModified + " " + filePath); } - listDeleted = tools.mapMinus(getPoolOld(), getPoolNew()); - return listDeleted; + tools.writeStringListToFile(stateFilePath(path), outputList); } - public void doSyncOps(){ - - if (state.equals(STATES.get(2))){ - state = STATES.get(3); - } else { - return ; - } - - - + public void doCreate(List listCreated){ for (File createdFile : listCreated) { for (Map.Entry otherEntry : syncEntity.syncDirectories.entrySet()) { SyncDirectory otherSyncDirectory = otherEntry.getValue(); - if (!this.equals(otherSyncDirectory)){ + if (!this.equals(otherSyncDirectory)) { // Example: // syncDirectory /foo // otherSyncDirectory /bar // createdFile /foo/hello/created-file.gif // relativePath /hello/created-file.gif - String relativePath = createdFile.getPath().replace(this.realPath, ""); - String targetPath = otherSyncDirectory.realPath + relativePath; + String relativePath = createdFile.getPath().replace(this.path, ""); + String targetPath = otherSyncDirectory.path + relativePath; String targetParentPath = new File(targetPath).getParent(); - if (!new File(targetParentPath).exists()){ + if (!new File(targetParentPath).exists()) { String[] cmd = new String[]{"mkdir", "-p", targetParentPath}; @@ -202,28 +186,44 @@ public class SyncDirectory { String[] cmd = new String[]{"cp", createdFile.getPath(), - otherSyncDirectory.realPath + relativePath}; + otherSyncDirectory.path + relativePath}; x.execute(cmd); } } } + } + + + + public void doDelete(List listDeleted){ - // for (File deletedFile : listDeleted) { for (Map.Entry otherEntry : syncEntity.syncDirectories.entrySet()) { SyncDirectory otherSyncDirectory = otherEntry.getValue(); - if (!this.equals(otherSyncDirectory)){ - String relativePath = deletedFile.getPath().replace(this.realPath, ""); - String[] cmd = new String[]{"rm", "-r", - otherSyncDirectory.realPath + relativePath}; + if (!this.equals(otherSyncDirectory)) { + String relativePath = deletedFile.getPath().replace(this.path, ""); + String[] cmd = new String[]{"rm", + "-r", + otherSyncDirectory.path + relativePath}; x.execute(cmd); } } } + + } + public void doModify(List listModified) { + + + + + + } + + } diff --git a/src/com/olexyn/ensync/artifacts/SyncFile.java b/src/com/olexyn/ensync/artifacts/SyncFile.java new file mode 100644 index 0000000..e729530 --- /dev/null +++ b/src/com/olexyn/ensync/artifacts/SyncFile.java @@ -0,0 +1,26 @@ +package com.olexyn.ensync.artifacts; + +import java.io.File; + +public class SyncFile extends File { + + + // Very IMPORTANT field. Allows to store lastModified as it is stored in the StateFile. + private long lastModifiedOld = 0; + + + public SyncFile(String pathname) { + super(pathname); + } + + + + public long lastModifiedOld(){ + return lastModifiedOld; + } + + public void setLastModifiedOld(long value){ + lastModifiedOld = value; + } + +} diff --git a/src/com/olexyn/ensync/flow.png b/src/com/olexyn/ensync/flow.png index 4106764f25348e6c73b4ad953522d17f544c2333..1799e847830a4803af0f45d1bf2a63b7df67937c 100644 GIT binary patch literal 45375 zcmeFZXH-;4)Hd3PfP#R5phOi>GD?&zARtLHv_xq^a!!&(2|^1)HoWa6WjwA70zJVc@eB*f1b%!cevCl>QSE>8A3tDma&nS$nbtKnzV`Re?=`iu zvU-U_$imE=WN)PedZhRm@m*)2$m$8ok2spofq;OZApgeAo5?2KS#w>P31*);z(d$o zFkyB(JG}0(rTy$TNe&fC`%>5W9t5=E6y!Ny z70d(O?CM5(cxY(o##}dC6g1X~0mrvBHa6yUSY#qgyL0W@H3R~&y?zM-LEqJer?lVBW_w^RIB-8**MMAH4^fQa=TnGB2JWX%o?) zVPVNq%hvw;_aY)9=;xcG`FwnQ;FuT?h~Zh#zJePnP4>pETTh6=^kkwNSS(w62pSkG z9X?<=L{HlBZ>6NApTJ=ENy9`A{p5%+A@|a&V3^VG-@nh&D)nPAmKm;aEp=E5SOSxc z{*%X(!4kXi_wf-W*ZKMR`S{2y7f(YVix46mG)4E~lAPcXtbWKf-wYBx?>gqB% z3K)+d2ihv5r8W5W&J#sN#n%;|Itndx)GGtXxd|NlK##dSP%qqtO*(+>YQKCTAmgAD z5D;Kt37F@ir=M9YT}nooY%LC^kAePi%CWK{WWsQvJ9gVH6bDMUEp-wW)+b(F+ z5<{78dorn-f~EPL>#eBAwHzq;*K;1C%ctO25D3Bl`(IVP7d_g*TLIH@4@b6|VQn@!@@<~G6=1{q@ZhfoJN8wzRIgw`PTy@bdK1yuf$c^RzzVrq zrTg$@nO+RnvW=w+1_Xn^hHRX64e1g4atsf0#`0~)Rn~VY`1=$TIuItk_C(1*fz7u) zvs-05laV7MBQTRvuM=%k`cm@Q_o%ZuZ<<=saCIchUQ&LbHc%%Z12uJZJ!nsoR#H@q zPe`z_u^Dz=60pMK(s4h?UoE+Q{knPO!6rUAmu97#R;dRelWMQeliC1ZO6{sIk=Tx3 z`OUshecyf&aQcy!rDaaftWh0osq)AT(MfcZso=wh$J4EG)b9IMU|#u_%Ge!O^+3~p z<>i}wCiwXHID}L(a&os6tY}y<;aHRy6gsUzw{v^Iej_F(M%C7K^v%UMFY;K8dKNhB ztWG!#+I2_q*pxUdJyg4&tzC{RcY4iKP*7lB{Q^r;QWCjMeh2n>Wvn*8{Alawa2SW` z+4JxiunE5g)B5}S6QrP;t-(MehRU6n`U~YE1Aap{?EZ8Jmq+mHde0 zrzPj9+_rV!4{%C)Uw$;7EE`#1)^9&j;{_*W4c2|r{gGi~W8>@Buj~fR`}=DxCdS5Y zyB)Dqf-XHH9F<^KhrDYGw(ZT;ALkgq&Wzo8ft`Ewvg|$1FPo zgOnYNhB%@8B2&1w*n!@Ajdrewm9 zezaTf?^?lJTwK72iRM&<;2aK%19zT$K@OB%VXNe^nWPKEQVX{{+}~LMi{>4hSC<}e z{SmA>$>O`*yu7;`-8w0?V_*Cuxh-N!%7Z{pXPCpaiBu$Ajr9<_Z0)O|-njM`iHH)F zy=^JK%;Gx1IUOiy^%YL+ZDENTS@=S4-jtl%>ZJ{O*(Mg|jx#iH%G-}2cCLpzQ^1e; ziI#yLOGN}l8wxEZzKvZb)#O25_J94_Wd%hVmNK3&zQXYk%;?@yWw!a#L>N--1xgWP z&?Nz?LxO?@Qt(_y^1bdP9za030}~V;DW7m2twF$a0pS+64_l7*0}t`VBb4$kurL=? zRA|r9T2vksbioSE2c__;8P&4(`Ko<`c8cYUjX#zICy2504EN=mSd=bsEpUl5h&$6l z=c`}hm~n$Hey>1X1Y2)yvI&-sC=n4A#q>2k;+?zgOyOT2UlVo0bAXLu-jm~@%J05E zMs1|+wmstGytT;eBJ*Y9o2jQXoHjT(n1osVzP9t|XJ6n%luQuc9+a~`ZT!H=@@}BT zZIgXt>>*2&+^MAb;mTO9if1d=AE_A{rf$B>cir1e3J2$f3EMf9*PBxLJq;189Y@6G z z15fgO2Am35tAu!Xdy5X0jQizEY@DU{kF0J@EQR_IP?B*No_CZJ7suxDlYN39m?Bla zDf6~9-$YHlGZTssS;3}R3%MtFf2`HSHz0tD%e05wqAYIVpe@jih=}NZa*|nSYS92A z3g!zox53k=f?ESNvr|z%=dQ#%4mPD$(9(~Ay}P?HCxJ?-Z*|90?zTG~&@CdTyT zR)$QQspdeT!=ghq`cqdN>QBtxDaa{`6HWbpaJu0hu$q_hSJan-kn!qyOCJ0Z!sAoV z$J^U`e0&`A%!quWcB}CnJBY-R{k=d)JpE=mrJAc6?E@;~i;9YJa^(Btg(`}Ri)m?T zMQ9)pTjlkR$C2OBXQ__WOgnAqU{?83f~8ACLqlF}ZkA4Emf2~@bAodnlh4rSn?-0? z*u=y{np}QuVL<`cwQF%7KT4TlfF}t5dV+(CD>)@aO;wcv{m_RGA5v2vxPnOC1M>3; zA7y3bb5#7$;w4Wf7eb1=Z^Fa9<#;e4r|^@TR?z1^;WZmtIBkO60Dr}J#(4I4?r1Uy z58HJ6D2|64QeR)czP|qDi}=Jg32@LvM6bv(Aon0uNS@5H7y(B6y-O)_u_TfE*bJ1!Z|WbQ5`+B)L40-gEmtj=6P&9cmX?;5{$z2(@jS!L zuuxn^FlP|*A9nEgvN%}!^&AL^KND2Fl#=pFT1EG&>g91??e8h5sYSef`)VUS;zNz1 zdNW(ech{0q-v<8?uMn+umTu0-+L`OO~9 zq{RABdfQmi?%kd| zZgw9OuDoMf9gGnIx&6b`l=9OioJQ@5wN%bBj+z=8(&Q9EZUZCxuHPl79Q8mt07A3j z!_C5@y~-mE*|hZZhL)DV*RN%yr20zi(v1hc|!CtJX$oe70V0&C5r zLL`!dlQT>)H#c|4X)ZJJ`oiVNtU6#B51#a8uz)bUDpW7R@o{l?QLJuOE2AitbX61z zl|~(^Rb;6vF8<}pt#|L<6-1Jh8g(R_^%sEOdMJi7JrdD&-k9xl|9UwC<}lwA6drEB zKHUcPmY*Lko4PuQ3AbV3H2fR{Lh&{a7pz3|@MsY|BcFU27sf+Dvcl)EXnS{Qybr`x z5!z0YGvGXkFh;0{#tCkJ$IM41p>E!|QMOvoINK2w6-BT-hrfFr69U1R%&0-H1)^Pb zNhbT|D4yA;4g*#=nff!;q&hCb{S-Xb_l;8gRp0`yyX&8QFO7|j@!8Gl*{p(eCyi#B zxga^&Tm40JtKXxq@A(|EN`(2ubo9U)tBO)VugZYWVT@{@lf%JOfQYjbc67K^Da}++ zRP>h0WoIG++0>RG5oVu>BDf4@4QUkXe#nz)ODyWTHR#ZJ;Wd-0-5kNoiWA1A1P1X= zOuWHX1L841SMIiMw24-jw`2b&FM_kM{0-N5kmLNmoC`=mqn}J7B2=SG}dL+ciHL|+q2p0 z*#cIhpQ9ay=%GwOZ{HSKPt*f%k*^PyJ;-yxiJF<7o}QJJyne8^Wy01+dvYEe`0LW^ zu6A^EdAIXWjY^kfe+Wk#qK1RUVF#E;JmuBx-7fgF|lXNQG5=9;% z<2%VL|Clf-ef^2Yx7P2O*;cCRA&|*L8Xn|D=qa`Qxl|lX4X;V#Nvuk%_wn{AGD0(q z2GCY4!n9Ex0gjxHALP5tjEs5x3&56(-MAzsWLxNUyZB>Cn055@-9o!1owLhyT=0hv zAonD^e(aoNgjDxw6&007j~;;|V!<%BpOuacQk8exfEc*eeh$@{0$(uw@$uKeIpGqL zuQi_+&OPkH&d;yeFOn_xD4=qC6y9fl6gNnG1@e9B@7GFNJTP$-m6QycqaJB!q$8)d ziYqGIX4;eJ>FL|r+K`Q5N8`HbNKXCQ07^fdkBu<`8l@gXFk+{T*@{j=6oEs+G1#0WYSmfkBmiV}!7+SXneM$VPGi?dAAl32`kLcOo_zco+r5`TDj4a)j)@AkUEnw|&5@2{(?4<)i zkkYeg7UiU+Ng6s_W|gGf^5T@bQ^K0@8Ad$dp3w6^1kuy2?aT}U?u0-=YeS|kI{o@k zdaxb42o8ZaZ@;SJx)D~;cE4X6Ncbu-rrf9YKoj{g=Q$!Pc}t{X&tAPmOiWDQz##qQ<(;JQiX0ZD z8(Ur*-xyS{$EnYM4Y_4>ZLh`sPzeE*tPi4*FcfoM=*zbn`x11XSr_i-_p~`Gt^TXk zBd{566P@pV}_;ZOFOr zh7<*1WRhHgK>ALf==Uo72y1@GP1!#1vYFWe3Qqdf0^|pBQFr4uXP1^|4HwWO0h3|U z2Q#`79TAb@`efjNhzVl7FC-*HQUL)?Ac{{-eMOQhbhOh#Pb(-`AsxXo+ig72y1A-$ z8Uiu%GU5iFwZJH&eWEqbpk-~U#YDp}j7zu169g9$5)y>uT=V|iL#>-7WuMab(O>(q zsOR5Y6E$UiROwdUw})O+BJ4MA+)p1>1mFG~=)V8N>7$!bt-jx<9R|ZZIl&!IDkWF( z*O%jvg?|SUsTJ3I9Bhk$53B`K-%+qYMg&v8H$ zB|SmR2S8Pvj$a)x04SUuHnhPB9cC%-SkXZs%S^vo$dY)r(W!Rn5;|C`uo$iYhVmP% z68IVAg-9{jV*>p4aUVW7_0d~aKn!3wARq)tTLm}@$!}wY1>io=|2(XN0U7%ACGW3+ zVUwk@|AMa2bAZnwZveUX{L_z|4_JoW@Iy1?7xD#0%iVe}`fq#-jL!Un2QTKY)B>!^ z!F!l?*uUU0E`OC05A4}^<(^MhWk8l(UBC;t(VzC5GLD8uxqZbXJBO|EyaLb z1u@mHKl|0xhWcR=__|I6T6QS(b2**Y5`d^OagJuzVb z+WE&5%Q>w9D~FaoufL3$eEReW^#nluif`>dfdCfmFnOAslOlWPhIR67yOu*gznxB9 z9w^t_x++MB^azT}98ULqmeum3{7yV6SDEBHG34vD-UNH_pJ)4dpSt~Nw9qP#CO+8oX1*BuJidU?nqX&x@|rV zlEvvwY1i1>BgT7rPBvGfW7qn=ee77aK$|hH*bL#9*5pej>ssQ{?XqGCg~U@@&z92QKJW;aC6?8`^xC71 zTiOYsl{boy4?CUk&9B)Hhut=iJ?HGI4AlW$ftGEAcMb}#|yp3`_Gs>HnQ z!GWRi8~2X8m3?fYW;4Xp<@SfJpc{tisEXo*$8Lvj9Ct)1c;Wf^p4#8$^mo3Vz4Oi4 zWXT+PU1-~#isccn`qF1{-Isu&;m5ZbLSrAmxn)I7mbc5!5lm4N6=qWi(H6QZ>p|_0 zv?Gp+)Qz}T8#?w#44usDs`~+JH@rViEj@Y1pPjIcqr91@U^!lr*Avf zAu>9W$^KJF@xk7g4whmg#G;Qe;?@>(qSw4oV1}t3@!rZ1*80VYjD3u9`@Soai!OTHYi$D$7S={M4EJE;^o$shXm_877<+0&;--9 zMd>_RdOs9ZFQ?jNiHpg@boN5Z@TA)DE=0xlehb2JvDKdNFd*_-mYQ)JliIUqPDyqED&q#zI1mK2lF3l{j58o4}W&p z!v1C_>#*C%g~%^3tz`M0QZX}aE^))q+UUYtuI{syf{W`@NA6Vkd$ohZ-4;)IktC&4 zw|0=K=AAIg=E7G#?zg;5H|nX~ADBGa9rk8>!S`>Apgr~V0Uxfhd*$fp2+X>=_09K7 z&XZ~7z5*p#QG6oX)qXdeIhecaOpK)2L^4riNv&jeSZ>0W!msF=c4oJvtRH0ZbTk{> z68H2u+?>j*c;?)DVD4^I`*|4jLCnTlM8;BHKAnWm?Q&mNEDHC1}N_*{(K0S%&9p1KC!^u%=tcdjcz#snkt1F&YoHFq>Q#Z#x2xR}t ziS05nqPuvRye8Oi-|~{%y$g_5)e}y**Wnzm>d03igX{d4Yu&V7^n-Az5BJx3!)O3} zzavd#CB$#Jbi3$=#em^JBf;-YG!^Q#e7z#H8}lSP+mt^ma^iyO{W0H*fP!oxf2om+ z36c3bd@I0}9R+7qV|_gU&+;&Yo)es=B;ci6R)ai0Ys&vul!lID_PoQ706g?oxGanR zw2j_RJA)`G&jLg}k4MYluXxygu0s&R^m2pX==REx*k_7&KV3Npb>_)I4E6Te(sfus z;}8Faj)*q#L8v8D=5XPT#N>|+ef&Xe5D48IDt+~qX6;8biH@&aF+sd^X-VsTV-T9O z`x%B+VAx?l_uXQ-K3VrOVqWOcEVdRiw0blJuyVNUbDstfi4A}QXUVI2_aMJ}K0J!RzR=qQK+%-|Kxe?hR13lfFsS@JKNdi_g(*1Tvo=<$cQJjIcGIKm6zwhTvH=Ixs@M~e+KW9f5T_S+rNhG zlai6a#L6n?3SuTRGc!PUtEhzao#OY}ckxE4Q{_P2&v3I`%C7olQ_7exU%r5}y1rg& zBCVhq3kwURXtPS+g~zAZnYvb=qjp7$tlmAt`ehgV(+ms@*o0IA-@c8ve%q>PeeC^oriIUu{fiMe);_B+7%KL$12#twSgj; zvQxioihTyeSu-;;fTxs-21y?-F79Xl=TraLxMf{K1K=VPc-2%?Xm8y3*45>w0cp7= z6x$z-s@Qod{OsAQ0+e~6qUJ1$l)BwwIN8!BRVjs}gDcjpY!bt18Y#HAL6<)^|A zz>~DIPiLr{R<0dv9#R){v7R)PhbWkfLGu(|5YmQ4M8F5D66#tE3@qSRDl6PN+mk*i zDZ=6tKH1ppRcsAW7z!;SWy)KYcqc`6)38)xffGTEH%!|gH4Q4DSAYRCanbaMNC zqG2f@aH+l6rmlP|IflPjzQ2D~UNEOeWh332m69st;w37|A@0JZsIAFVEmU)`p#A)v za=FW58cH{(14O#!nHI2};40Tk)Q|wv{Af;$FWoO>vv4JemPKIkka{qCxSdV?Nw(GXIXvgaA8 z%h5H5A$#dsW*gF%==Bi7)xx`*stK7S{q(6F>pBnB)E^^m{&oJQq^73>?5rOkj}f7v ziJIjfGUaDdpDT+qBtwTcy=9#Q`J9gg20K<+*w}1aVqB`Rn`4+Sn&{;PxiXaJ=QENp zU49=*M0w!?FYJEoSZ%B!r&m1E*3{UTDM?SCwqm1;DMAXtk)>}cdFd-7;&!$1jV%cLw^%jSu!p`PI(`g4AoVWIO%Gg=Cz zu;~|ZZIW$q7vfyS*BwWH}pP$jY%Q!# z#;_nxlJ2=@K}0SI=u@`7q;BoVWb@uUgYGa!i3i^CAKvTft>3kol=N$Cd=|;g9De;e z7i_vF&g6a9bW@d~B(GD)beWl>oYu3C+prZa>BZ}!PP?-mt3h zI7rPkZ)$t|Iumv>Gzx)43BNLETsZZuvLZu9Pn#R?3(Z3$?1#}V*n4oUV#eAe=P7d0}1KF1#M z2YL%UTh`4_cR$*epe`3>BRcR&kdDZS(0-rFKbUWl+tfh9XEk+yHRo;UTj4xx*+Bsn z&W3#O6@TL9gyqjTO?ZzarIba!g{mc|$|>0>N@S52cXbZKrrhu9L{3+r$Rz1Vq{q&^ z6Vj_IyJo^kViL;sbnR{E2>tq1hbN27uI6z#%2(>!>)#P*%tiRB{W=P?ZUSuXCVOgH z+66ucAp<>ecs-*%@)CO2szt50#Of5d?rqa6?MjGw=^Jd7xH#swn~z7N$g#%Uy+Z>K zA;9K`UU_uzCbS{+{d*9wrmOr6Sc`iJS~6j@7xj+Tw;d`?bOG4X5J$mHS|Jh8s1idZ zG{pZxjX50FyQ4o=7?_fz0ab=(&ugc%W~=u3?_00TpsrkEFEI>wv3rd^g1#Y|HolWV zEG3e*J|?of%O)M_>uHR@lVbsKZ@qh#GLvdB+g6<>NE&Pw-notKq9HvWQhe&WHXq!$ zWjr%CPM%^cJ|!h3pFiKv&?!F+hTH$}h=oxoHoAN?G5d=_EVJ+Hb1Da4l5`Z$U49(P z#k{uG647of*E>1rU?8nXbfiQnO&$aA*Nf}aXEex%=?+&LCM&zC1ZI`sDo?%|NQ=;j zs?1r>L=bIaY&IIblNQn`NjCD&ZJIxRot%qkUCoA^9`i!`$mQd90fM=)c21%iA1NbjZjQ@ z=H0uMSeMa+Kt6q$db%E+oOpY&6%=eW@_Xxd$6FwU(7IF_0Ofh1YS$M!oj9%gEoe9P`+`#lh2@d1=ijF7vwsTm(yK$f{+sA4 zjGdi~La4gc!?(+si-R-?37>rMrQOE--}Py$FC?YZ2I2K_3|C#t2HHN4C{~&ToJa37 zlhB7pPp&@DpAFX3yZ{M?=E`GV6v372ZfDI7b`^|SuM91Z&|ka8tgI;|uUUE6n5#d$ z(3XI=u=eVLtKhDohict~{CG!4$}rW13-6;S^2{O~Dv_eX=|~INZB@OkI^dAUb-%I? zzfD_6(x=Ycc@agcQt81y)f(j~e0JPLfX%7Vk_zki5W8HcuUY6e_~O&Ae%zc1s7c*O z_%=iv%M$1H^i7`aM?Yx*x+}ikUwQBYFs@ghO8?Llvp+8BB(pKY9v{fibnXvlM^If| zO;!AkhpFof8tXMRBSZ&T*>`7XT(0;j%-nMIWc|a?I0u5<92|{r@6Z5=9uH4(V&dnn z{n$mhu&nm>_HW;mXMtb<@Wh3oUjVSn5K%&6t!a1faR+g+*41INpDowtC&#W|s5tj~ zXiTxbS7tlY?sl+yFv04+GoROjO+aB-YJ}jkpMM}N&F8dE=V&P=hIM5jO)2FYQwEH7 z8a}}CW{K-xKwhMMP>Cv&-Vm--U!E9B5%dGdwq+ z!S1T}n?W-sFyI?LmSZOaw+7*!Db~vU_O5*aKbrcEvD!dJ5)CD#Cnkr2ZtV4>t7c8Z zwXx|pYhbj<+Do6>`po&9QIgan4TfA$Xh!GnVR^*MoE9CI6|bfqSf{-}4)pB8%4bVt zL4UKhRlCGCTND8vJpbj6nH2yWjeXoCbv1p8-6IN(3Ohrms=&&>d+&vIkh`~t~hAVX<-~J+P&1fu( z7_3Y0RrLRBW)bnyEp~2h4&e4+K?el~E2^tYkw@`4Je=vv)yFHgfI^`_c$8^~#XXp3 zAm`-d1caIRI(EMW0b1N<5A3&4~pK#)oJlX*p+UTz~jUS9t(iIpwGE^AFnaspv* z-aIbsH)wiqH&TP8i`lBWE@n0jq^Jo792nrNlkDjpOTbDMl; za40};{K0-9+%5l|tdsex$W!oEx!p55-kJFg_f1#N{|fgT;sh3LN)w_<9#!MW4E!knn%MG`-~r#Hb)y6G@QL zU{+mCmqQcvo@Xxs{p^DM-Y5#rs#C#aUM(I!#E=8sF>i48AVepWb*!fyS#kaz(}!V$ zVpIV!O$g0g$wauu)0P-nLc>U)cGEf9?XKZ+dHrn=gM@L|%#n2&1D(O{cwJqZ_&bFK z>&sLR#P(tJw3#|6E>2EjQqry2&UB!i1Y)3i*~Rg#AlLCA39x&6V4;z%1Os;6S~io7 zGehNkNv%1?5e?*B;6D~<&Q*GP-#&@gm#y}p^q0zo#M|qoZjm7M4<(8<1!)%FQh|C?H9;657$$KI=Mc! z5&+SH=#fV4DtQ+}t6#YI%{;Z35@mOQz9@^p{FSC#w=U(Kg&)l697!d=jgFR`>jvzLp}S>U($_YI5HchB zG&AKm$|4}u^b-GyZvt3iv?ybH`&m-Zv!(K_P^Jhlv@3&ka*-wku0j1+tAkxYerj{0 zh~FO9V@()HS$ngNUGjm~2eIE)Dj4O!eMcZ304%r}&^vRi7`fZD8Ga0|RB$;u*uwJ< zChs~SXJHm4E_N7pRhzL+Gv^4k=G#q>2xO4cMW8=e-x5_Yy4u5YYW}6Qwduq45W$*= zxXSa$-+~;l#T#x(fz;(%LQ>}l&`^e@h=cV6#F;qwWH&e%ijYvBYJ3ymhs?+-UG^3V z&B)-KiVi$PJhp&Ka&#(pp=jm-`?wa9O{{mh=V5@7o|>6f413 zu{sGY1JwoD@Kj6eQLWISF#F@9!-M>CmL(czK+gg9C;|2vkYe|P?A76Y!MFTZK`64p zoba2RPBMRqLpzcYP#=$yHu?3d?CfhHa)K-0Yok-kl=Tq#0#}7%H_C4|Q@F?nyzJ1` zMUeO$inLz;ZA&?A&P#Tsnkh`uGmCnki?iQVGX$EI@?fCiV7D0JC-c*^0SoGuT+BBD zLtE-zu$C=By$I6f!eRVVJp{o^@-8Y~+gBu?Ib4-!ijzU?LY7ua;YXoXtY&U)%_dvH zB_|WAto`wIPajo|WQ&1o_E|UzXW}khMBMReTmREGx2?zPfQZ#Mv&!aJXJ+Dj&rNX7 zSr*D9NLMS|Yw#Z?&9R$P9k|ey{`)%_nAD+9T1|6upy{IS*9?PB0B>3ZK>f;L00aWQ zlvS7Hb<@xmOZZ{2NhVb+>QEC#vHMrdBa;Ec=>B+ zXsGKS!^$%srGEzSc0Gwxd1a*AkcrTaD zP|$gjMA)giixED<1wYXz00e|)e|Z0X4!ALHWJ`5b! z=zO|0KFGZ?E{>DFQhgqJ-=j6PZjf#u}8e6$1n2?+c*^GqMzfkZ@>x115 zfAW|HvK}EOCgr>PRTro4>A4zI0p-^U90+$V^*sBV=jQO88nEf!c4iM$;qTf`Nui|9 zGF!58I)b@A*~8^MU&~M-wG&jXFWk+}h)7no~O%4_NlOTVSAXZ(s0_C-|9=Ps)S_t|hE&_knn|CvxqEO`@|!^* zhv$AHPpuzLU|qr{pnS6r=uN$AOY=-oQT;m66SCV$zC;Pz8*&Ddfu#p^S;Z`rbu`xy zP+By>?_5Y{22a$K%FyBe2pIm|xOLF{;XmjuKh)6n+WWfZIA^zD*2X2|X70?@J!K~o z_exmx>p02HX&@!I(CZpdxp_aGo+wG^a%3N4xMFTa^mbRv)3biTImOmj1Mh1vccp6f z0XcK0<<2Ryf0AlV&J$7fCs=Z&N>E9p)HZE~awHvco*f+-r5!GXmu=3jxF0;~rqi#T zJ!>S1kkEM>=r&MXb#m5B(NSEyYl_*2&qFFxF2dOEAW_DGpqqu*HWEds# zdw}NP93h^hQg<(CP?Q$Wm+gL{H|Q zq=cj)c;4QpV|&=;qNgu8+iLMRcrMcrOKuvfhyQ?}ViNNK2))2qTZ_6sKggD_IQ?<9 z8;w92bHDMF#$m&?IAT`SWVHfECIsliN>-LWS0(<_YgP7Ry zkh54gSVpdMt*n#hN|>+lGu@ym$0<&J3;;g50)Eacoh5VKxav@`$#1h3($NEjtz8${ z_z#|nAUk1LzSl5=Ls=4HW8OqGw2{EWD(^+={Asp_&z?ckZ~EjgkO>WVQp=wP+Qkz- zV3YD?fQpNbP%-c{0S6_g3xVqBEvZk^$N%%ej{z~OIeGfooBF}wczAgE%)7i(lartl@{Ip; z-->2+QwZeNXnx#pX*nNP1dCQ~{{l!ujp6cBph6h1yZb%awLxgw1F*lM?}od1yRI|+ zfm~6>fa(aq8E*haH$OlB?Afy*pf$!@Ci*Yd)&3b7IXRHMgZT?f>Ei_jphU#PX>uMo z;6wikz5JK-P8-Cp|B9;&-h18{#uWa#%POz=uezQpQ4k;hD@Hsd`ecfWZfuc5(cj=}Gl;AO(zE~y(rvzFWmmE! zF9cFL%Pd_IZ|e%Bv-NjPgIA7E>yny+mQMLMmH zi8`lc)sxDohW_z-9F0SqV9}CUN6J79f=Z+O9EdiA)e9oI0 zJqvQ6x=h`4mHdP@xsdTEe@{(Lj<6hQO-|-?V!y2(Y~IJ=)L&4BM;cS|3;}91OY1zd zv|ZI>L{#60lQ^$W4|scb5)&(Z#WFHVMUp?txVTuUV0r`8&^8!G0AS^PiGE9rmRc6Y zwJUxvjDv&P#v0$ZG1@z^168OG|V&zWJr;8Nub40eQ%zdUk7=jw@K6$-d8|qbA`KsSEOP z<`=*K?aIvvnXcSk_%1D|CGwK#$hf$mP4jp8$plE5OF#+OzIZTB986I%Ee9sCC+r5~ z0UC|l0Q$W_C@tyxj?<)daZpJm&-U_O5|^Qvbid28@S2EfaPXV+8}*Dz=wj)#xh{X( zqFr?Tc60a55(|X*MfbxsezMK))jpkBhX-Q-Vh z%;NV*Om4(Mnf%%H4&Pi`^Uml**HXM~dZOr^()x11zqoL{*o#VDpH7<5fcFnh5e+az zHhxG>7N3XkrzQd^e0ERULp1#j@OmM4x8BW#u@spZYGUH>=)t+wiB74~Ae|V&@@J!; zUvF=-MDyAyKGoY0Rb){zHV#*!$yB9(@q(BBkv?%vb<0XS}Z=+ z1De}ZJZx%?PW#W+&S>XD{q(0I{D%c&!p(IRbjx#{Gb_rDb&;qPQUjUB>3AO8S)WAB zWG093SE}hm(dOZF&gPry$Mo_?6bpax8#1M~`qRcTpY=bd zlGy-AvtCpId)qBQL2^9Ke%oC zVCqe6I#u9Yf7yiS(T;rV1y?$S$|T>Me7BQAsR;l+b?xuFAc&t4{LW>W&~S1VAZ;^N zi{f-S&D^(_(F)7C$SJAL#v!-Tow3^=0o7-9x6-4;aqV(kTXjy4hQ-3>{@NuZv-m|K zUtcY?>}CZjMrwz4w;E|7qJwS^lJ$v+kkAytX9>_(J>Pl|Nl(IR)1zr!*U?R@@&vw^ zl?l8X_yWx?ckxy>@;(LaS}}iul@9iq)%<8z9o{q?LOm>WI1J<8Z1_f_9O z!Nt%!^a+pMtNr?jQKay%7B56!PDQ^>*|e9P=Y>t2QSUTTiVunR`SIzSz&yqXaeCzG z*RSAj5f0c_hW2N7LLbJPTtTzXZjJ}vwvgRq(uT~N@8()Q->7{P4+D=AeS&*;h-_BJ z3O%6L8ZGs-JF8Tw+VDppMgeeC$HRR`ME-)y!A5t%WZ?$5F$9C~xX`5l2e|Gba4Q3k zZcSl{L*VNG0%|U%9e?hp#?D6h5iwK}EQTE}m_B93tshQXSG;~rrDs$Sjy^nK4dGS? zyLKRqOlDfOM!lpZ;nRDyO^XC&@M-0G&p!F2czPn`t>}fpQ|t}lu7whTEXWob@%5eQ z1T6Jy5u!nIaJx%!p-ez z3@o%r66rguwKOwnyGfK0^d`~SFSwjnLvGF7=}c*PCHRqp{SRlya~cQ7dHm^Q4wU9^ z$QrHx0Ju4wc+$UfwF9lKx1W3g1;ejEIec*NMU6H05+RimaAgmmUDH5hdwe?y8K`Vd z*PK zI)GcDF7}Q2ju@K#7wf1STe-g~t+BR67eFT$NG+5FHIexw&i{9P1!Bhv69FtzO?_{vQZ#m*wx(z}>q7Qv%k8n$wub{9=`a&hhg4 zPwLnmTmmB}u%Rp>@?y|DmeZsQ5P+We_cZ=yk3q1IL$T7=`a9p*Hzrufms;1tzxH}E zc%S=Q)?j-!SDs`G{!cl>Xxk~0Yue;wCxQP6QRjgvdkH?~++XV*$yAS3MQDN;{fTYwrMsToY*x zrR^U9wdd-0e~``#h*N*NodBQ2S46>ES;3t^hlDW_M`@B*78J-#lHLoY&ho^v?dKG z20C>0YaawQ%yn}khXWbwgQ!paPD~CPTq4=)t~?CmXXE3G?8?R=plCh(9xolzp<(Lc z!aq~s1iIf0n*iSd)x+lFDNUR{KQtCU1t>W@7XskEb80Ud7#|oRu^MZMC#DHK{-8gH z4QwK&f$Y7Gjg$#`o{}>2ph+x()b}w0Xl9g#=*%~=kOYIY402X!=ArQe0f%6e^-9o; zU+cLi>P)Se+d%P{|ASt&Zm64 ze*X${Y%_2X`=V z;K|4LU6*T1=X2q$D8 zg~S}^g+R9vs`T(*9O`k^&71C@B^VgLxBa7{W|j9Rj`zn2aSYW8YyZUUaQ<+#$Avp} zbLV~>s?Yb&|HgNstAMZ_qkkTVZ+>?(Kl$UIRVSE#c+_L)c--!%!tCDf$IWqF&&#sr zpHSr=r^ku^1z30g4}<&vguxwhpFos3 z@1n#dZrBFC2TWq+(H7x)|LrG^BZD(vt#<8k6_NRgi_;7~R>e2{>(3Xc-F41+AXId5 zmDF&pp#vN8z2yXlXf(t)rL28h_j@bGS3q#wBUx>3uK8Mg(D`WSN1?PY4ZAjL!%?h* znv4D8uMT-mgye5ChP|&`gsY57tSuEfz}pKR)F*x3MJ1FBUQDBwqFyDPj!nUbRK@Bx zlm9HM3rm2``wM0J&Qp|t`p}wrITKd>3&~!fv?lZ5zz>Vv`(|$fO^v98-WJbcAG)+A z^zgB%aW+)y>#qH%hEOCeUHzDv#?w|qow9P7VU%xydWJ$Va-;%fEPC|6LhG(o{NJZ_ z%|AJqK47_VcbeKKrrqJ}9W$Ba#|y!r;FvcNu$xh+*?(g-jS+mY(U+-6f`c!!&s7VT za?7eTwd>AD^nD;^He0J^jU>$t4)t7A$Tp3N7i{{gvY90TRB;z>E~;+JhgV2b4;4Tq zi$ibgBL0KqB${$BG~KITQL^5X5cAgGTC&>-Ob3NFmHg%IE1!d|tXOG*N>@Fbc(>VF zeW|9U2&E^M^5@0m%U&u__WeGgp0i$GYNCMX-a^imdm(~@S?f<>X_>wCuFpF_2;JjPn^{-U2 z4Q#9GeXGs=AxKcElj}OMUG(-bGaq&EpA z1n$ZU2HW}Wxnum!Z+zp9<6n{|$y4^u-fPV@=UmhtoyGdFjQX*w^Q)*6zgiIde=HN1 zYLPM(76F#ZOI@>*!+ZAZJFlv*m^hztIS_k7T|VuI^vA1iyAOgzz{MPQr@Lphcot9n z2VMh+g%g8W3Sa$evGADVBHe^Mu!9JW4nL`hX)e*sB50^1CwO_ukC%9qRD*@c55_Y7 zbq@06(9p4{5fSoiMM+nVDyxpvsqjNDCI_bTPG)h6t$4eJZZcv1`oqBj&^#t2B)mB> zh7qE%Y(8{8f3V7V?TTk_|2JEwOhByuo(n7$pJ#_r2 z?LRn@+=ILZOiG0W1Vm0*p>BOXqo%eG)w5>B`crf@`Jalmi)M`9ElE~Cr28?(5I{K$ z`r$9qV4k>Qne}u}QcFuqRh6ke`_-!>;2D{bag_*GgR551=?X%(UM3}Fv<_V+Ei|_0 z|1G23LFv-Q9<)SMNC|G(;QjF8qszCq+;6#gW^?~p`;9M)1@Hg$5wq)p`;(RZJ=2oD zw#B!+G4V|hgI`aJQaN~XD{np%rH6F(T6 zzOkP&r*x{MU`UFTq-X4jz6^5AF+sH#DLTl=8!Jk;Ty-}%TIcVko^!|8+FEcy`r2K`%)t<}=dn>QT9%cOa>62eT zKnbOh2kGHY9w()scWHjkdiMlpYLH`zIC?eV(6M7_BQamS$#T9!_O93!%LjLID-wZ{ z=Ey7Mm3A%Iv_l@fX8F3#DJga2+9W$#kZ2&+cwb{fL(4YX@ISm!PVPxXND!v@F~^WU zSL@Uc#LBm~AMDm^uDH{K3~eM5i4J`+fnXcR&(EJ48F^OG7HHcZl7Q90V)Kk;7t>UQZI}xK*@;L)v}1V}aTMEc?%p<&5oT z!U1WXKp?b(e`M8XKyjGTMhYlNs_%1E7ztcE5$tcTtUX$i;@?*x)s&Q-m^hTxO9P{m+Y5Gd zO$NomlrUjk&EhUb2E=>5TUWjhO@@i}j5Mxe1P=~!iQMV}LPC{6fDPf;4#@brV$Xbj zb)WtWX|)8ey(hnbvE9sQ(KaQqp;MURB(?OLZ~tDYbb1U8fH!!VgJGMHIq}Bv^YZfQ zX*ZPR<=w2f(_L=zArPxHt}IRQhZDh5BOMZen}c3$>wZz1ceZ6A{NG&?Y!3qaLPA4N zTXvtzj!IXc`OTBMyAN`5&P;n*d-j_C{6!Rj#!sIBQ0Qv4z^Ai4C)~2&Lns^Fd%baK zUf^3sl->8C34E6TbQB(16Hrs3Z^Z(Q(b3Q$j*Q-4e)+*J{~~a>R^a__qHze1j-m zv7O0c0HR9hNX~6Ymt`>n_x6N;9tWtjKVP64sEle>PQYwk?8nLqt?L8ohpb zq7qED3h8cP$7h2Py!iFEe}f%(rDk8m!W@ZHKH!;4VcUDT;!V7Hx1eW3l6vN_k33KO z%a2>I&O)YUx@lxm@lvh$8}W2M#nU`Cw+rk>={krbnFrt!iSF@9am_MMqU zcWi!Hc7&5vb&8*W;RXme?hF&NLD7&tUoAC-Fxe=i3-qfIu#_WnjO@mPY(Wo?DSMRr zhTz%sbi}n)=TA>SP*;KP1_)j~;>S*OQ_3DQmSU%lenDuTbl zJY0xm!wq$I{OO`pN?-h?Qyk#$p9qF0@Vf*uOb3*uEL$b;w+p-yDzW}?K4OiH+RmE2 z0|~0&3!PG>Z4(TX19S6X=()i-&ggkoOU0gBCZW>)OHN$w)8981z8d{gYExy{$^B+v z{F|aZZ_?`AsA`KJEENQ?BKxLdFOua@F5m3`;u%cnrsYt6+V7 z^R^48&gsR_J_{T1@@HuqacXMn)KIID#F@Ru@u#k~m`I#KKV13aP9DE`b$g|>_o=$s zZBMb-$n`8jiyMjg4282b?;l>a~Qc@DCJspp|u&3A3pMIfdB> zWL2ZkJpaHt0(B5MzUmfnDag>e0E?Sp)iYXG4fzNmvlhRwu<8y=Br=&kzyoXfGz^L> zo|{S38U-crX&Y3uC~+d??$84&@knSq!Oacsl<&V{0Hp;7L+U{!avMFU8rc8t`WtXK zoYep~@8IB;4sH-^=ovyqq{Z^54}-6DE$ROKRkWE| zLw~*X1*jRvQ*u|wxyvaIcSh|!z>EI;$rloe8Ag8WxqI7~mu6v-m}>Dv4GJ?pO>F6Z ztu{|;APbFPr_4wt1EFGFCccc38MFQ6BoC;4k^DF#39G(O?SZ7h;oSQ(*@P?M>c>pq z-H!+oMElY9z2xDJIhB?v39EAt~3do7HuU+WC;E zmeB_4U0vsDELMX)h*maVUu{k9rD&@=6jh}@j-4E6<&ODW)tP)*Q-|l9_MA<8XhVF6 z<|Ch5t+`5?LKA^eULzgq8O9_J;^enU0_N>d@0SRY{?=Q=feMk1GA1oKS>g`4-5bqF z%+?a>UmPs;FbiuOPtF)fqH&uwgqGqV8<(X1(TiHAdi-v48x>HCHJI3WQ7WhNulr?J z9IcY4ovohHOLfX3aBisQ5u1c_S297|7~OD&B=WhJPuF8eJ6XI@;*FP;mwc}KP|^T_ zc{)mq5NByV9C6*$shJiKHf~v*%Z*_tb@7f}WUW%NinI0$v&lev-Y%{xxstfsX`L~T zFueN%J4agiV@gHrxJ~W9X^S57HfvU3+{|37Ew_q0MtmZI-^_KmwWMBZ+%%%#mhZ&& z6f5iE$0mVRZVtt2LL~05Zsokp$R`G$bM7rhjyYm?uDAq_&pX-^D3e(k`!mHFskbtt zr~J;VsqUMb^H(n*Ud;KN!f(*vls}ZqHt_hUYQDalwe&)w^RqgQ+~}Myx)4&McK6|N zGhcay=5*&=PqrCjI^-)!9{HA?#t^}i0GiS9K zlMbD@xr39w!B}&h+`Gj&X_ZZ)0=k;0cTICC?6feQd2w}3%9Xrkr7zGyA$q*tqfqej z`sE0%a=WOMePA!g+vOzq}yOJRnTAEw{2E-(D!{ zCgI!Z*1E^UZl^J-!lrrSLRm{+QmE1A*b};~MVbGcxV6anKJM4~(||BBXERm%Fwn$` z$4^`}YBdn}8s zvqU6*dvs!$Vns2FXyWN|%};^qat0g8!d%9svnExKP(#yQd#XiB$udXy<{W!6&Ko9% z+RZBQCvXUAl)sYlUH5HZrg&UFB!ef(c~I@J4W85AZRY*-PVM-dvjpdnnntBCVau}5 z1u1oQv1SAP5$|&{UyFZ1w08b}dq$or*%KQZw#SznIq|>F@@JpHX6eM?V?z)gAA>P@ZM8?XP+RH>d=jFniVh;t}8(>(> zTLySIIkSt{OBEU$#(Tx*RzE?1QvGp}6U@n&y-E5)IKC&NCGN>U7{lu0@&B_pKt-PVdrtl?RqCUto|QVaJlS zS$8pa*7{E#b{+cs?m>n)JH_Gi+m#d^WaOINmQ3y}i&qlzHaH{%QhspD)@$nSa}r088Fg_f{-4@gnTjeUI#j53d2@w3(sWrGe%S5*-^0F7iS4SnLkg<+n7})`EE- zg|2!w>E?A3zlipAO%AzIhFwh_HJ!rHR9dBveq@PuR z_5Z8YDY}MF)u5olFFisI?e}$g3r7RrOHmQ3%5EP?;AsH%`4m|+nw1{iHHzJTcO6{h zzhx&S@dyZ{zj*P^i2>ogjy~>_o)GTfJ9r(pu2}^U4=pxqU;gwZ(38Z}0PaR!jYfyB z{C|lVYtP#|yJ91YT|AcXBB3JUBOYqa|6-$YNd^1 z(>^&p!yej4zo#z&Jet7}58=IcN!6Z**tda(K{0$kH)ERhkQx&M1ox?I2i(&x?>jn_ z&UOG(3Z+V;!Id)yFL<@0XjC+=~T^v zQ~oz!&FhVgjfI|p(8S9?Uq3+wSIB|`^9}`B*>d>(LHjxaiZV!Ra<}m?%Wv4jX^Zwe znr)NlF(IKw790>4!M^eLtUN<)WBD(+ajQUPdivyW8|8%yD<5l;YHA4!u0d#T;NcKI zKQNh~_MO|G?OMvanHF)-u`1I>NRinp!vT({x6LwZ6-AbC+NTvw5|M4z#2s9(02zAT&8VBj{ju9 z%y?y%?BC!!yK3;juc@wf1P=;R{4j`&xNJb9GoMq{sG4dBeMiO`!;sy-0WW|ILMreP z41}txsz47O%yE^W|Nh!d3|sd3g@(?hMo>**vS*y#So-rb!`kNcW)*SmRKBx}gJDZe zJjLJ)QjGL_{XhIRKs_27u2Qs~uo@?yYNqAG^womV8!#c85v@NTJP8&Zum&_uUHo>= zKBkb=7_?9_#pvIzVR z<;F3c?@8kS&Gh)!)Lg+78a}2CZD^)>);HN85S%ZcR$lL3%t4528i>TuprCA{8rA_t zqX?U!76>Caxm(FQ5u68q+y;*xKYpBtCu8_FIU71{MMf58KpLzp68KJW2~*ywuBR8( zF_N5|EHu?L3);Bd>(>B$l}O8~=_Q5V_sVgzX>8dg`qSsi3kV2+rbU1~cD+cifhrGx ziM^6YBriSX99RoT3G5)oCMG7C-|V2PCiutC9p^@l@1sv3tpi0@q!Tu`kU1O!%8yK3 ziA|thMnkN- z+ICo*=Ml2`3k2=hZ@x|rcWBQ7&4;2Yvi}(U48s+}1xKGn3~2OZzc1W#Y}!s$HHa#} zfwWvpzjw{{c$Z=AFgLMGm8P4GycN)Z4R44>C(#EXM_zW=dv6DuVp*a=>wajQLvD1( zmhGl*n*SuOHwzZh-wRcpHi7J_!13Zn0?WKy{qEkg3-6r+D~!W(ny(z{yLB|kD&RD! zpYu|v%iH5bl2*a<>u2!c5qL{CyWT5|9!%Z>7szG)o0*7HAw!u=6b#?Gxq)<2a9sZ6 zH1Y6^gtyVewn2>MN2YaJ+Fv#cWF}{}<;0rKJ|nV^hi>Z-sJ1>O_)7#$V8KaUQe?8R z>}^%5GHc11e!tEwj?o?DMUU*_FMKHwUwGSN6zUU1?>U5^v5%Iu%OV^De`AsA(QJ$iXOd~lj z%(!9``78d83bGY)tG$BJc)vA@a`wFvMlCxe%`eV(CEVj%b;-xebr!p2Dw{b(L&r0+2teP?eMmJ>>SbO503 z#cR<#zp0VdOXiI&*2H0r*`hX|_Dg)m2F9Zk*UV=u<@@ee68uz;W;zaY@*PO!pS7SC zh4!{^*6(JleC{|E@44Vn?Y_zB?$jiye4V#flRTj&-NQPtx(5?Dbd3~#Y9=(IEJ0kb z=h@V}gCoToLHUZ;tj$z!3yP|=cWqQn8HouoFuFK3oMJW7Ui~td zU%ZB#)?hZ3%2_%!qPftNUQ$#hV``LnD|mI;nWlCYXa9wq>GQn#`8W!zYvA zZWPf!qJO)1hw|mW=}90#RJU4Txb^P-)~+d=`3l>;mRc3o1 zQ#Iw>5tRO5kqpx9=J~YoMwCmc;{N{A{AwXX7$HHX2uns2)G3(+2Z!M%)1YdEQj}>AhuQpjp$?`AYMgx6@hK)~=x$2G#xzJIQ$K8&%IH#%I>?OsPtn zmhEWPztCpiHIotMZJ}wyXwsGdH6KC5~?S+Bo6b6IkK*ik9Jb*xFu@%94U&)?}*6 zR84-HRdGhaZFR$&c=*j$BXS4&1}KvvGcF$&_=No;eE+y=(VpIx594 zlR&(!SiVsHd_I4cEGyFGSH*p8zrgNpEd}#W`cG9z4ZSYOPg@0;>^U%=f$_%7G-yNJ zsqzs=3Io^FIiDjzMq#t97d21mwnEn)ykO} zQiOatWXbvsPEhCXc>gflO*8+l6=Z<`IfaCTKpRej4;5y($%nSTr`(#-gQ`Yh27`gJ z&3Na9b!-k7Q068k18uoelH0`fS=3SuJw$X9-Q!vc9CNd|yRiVW(L6q@TxMowHjF0q z{#JQ!HYnD*{eE|^aa@>nFtM^?9Uu_6&Z{|>4+&fdWkJI(gR@o;3MrCml%gWqj;D0F(? zM@i%$!yg6RKJuv9uN>KR0u23N{cDPn%tDwb4m|Aq4Qv24h*^Ow1=?CCa5RuTzN}-l zeNG(}dP4cucj?L%0~S8KavlgI2l5=CBf1$!Ms~I;`P{>7nQ7`gl;az7xK|2?oJT)g zu?#Nd^#bhV{Q2!Y3lKLMMK}r?RO}kS3OKj*W#Xx3cqb~Dzj*k7do38!K=TUw3~if= zva+X=d?wHd_cq*Bt8@Yw9xsuIvW@CrU4fCe{o=|Eb!m{b#W(=#BH&5Z@1qC}o^Qb% zhgo9}jS(#^ZtlmW8de9NGQMbOIqu3GK25~b1ab0hHToG{v4(Ex;L{159VQXW=<^CB zEHsgG1P~Q03v0%`tOIzpQM$$JWxbC8F=^{(;a{0S-HpdMt_~jt1aXzOP!RUej%7d! zi8u6AG5Ggh{W2EZwH2P_$F+0<7?L$vWcW=vjZ;U*xc>CE!-wOcEL{*7Df2tEAUZB? zq%F7c&j-(k3g3nfJ>>jd;M1Gq{_UJk*68Y@W%99Z_42Ws=aiEdvL+cDxQ$zH z+go}?%T(}MqVU=I`$AJ7M+qY;s0lY2X^LWJukE3a52HwtCqcAU&LGsH)~6U zJiJGC-l$EYm5^qBiQCg5A!XEpmv`=Z-TjEQDFk88Iy+C?``*AUG*&A;*A$T%%(Ni3 zLpgk4=ftl47iU#neQMC~Vu>%5waoxAyB%?-~4nyJYFqMl4YInDhYq!hCu2moH)8 z@M4{N32iCacDK!W&(Vladj5}s;;G$Vy;2z}_Rpl^LpT}xLW?^Evzz@3zi6)wb#br$ zEkOn@4ol@-N+;W)B(+mBk@uA?8=nc?EW6hjxR+8?T^Yul93pzV8%pfCRs)9aY!iXe zX9EW9`wW{8XF4uoF+R+fTI+I5L*~2q4$lnuPK3Gm31Ny0QgyG|X&AKFr}pp!RB(apxq1A}2CcV^YZ!x_9tkE(lMTR(EkFd8m-I2jR zKE%5qa49^ah^@o=W~%2Bc9T_vXmy%aFE$Djy#MU~ zD2HAK68pgKkHV5h;OGWg&=%g~bC&Y)=ijlG9vo6}_OLtkox!p0D2>5kt?&bb!eiL7~$KH{{aAcZtFYNET68q0ZbT88?^#ai{Nrms@wu;nH7Mg-0wn%Tf`}1?~s4Q~j;nJ?@wI zA~YtM2b8n(eeK19#2d2HXF88cM?4Gmai}T_?TQedOTGX^6Ma|HN{j4U=!Uo5tg;t5 zQ}c@O{F9~jM%^C!YIBXoH}pyPcoVY>yeC*lv4Xk=6p0D03dulio1E-vQp&>PAR`(R zB-4UrcJ1J!RA(NA6DaHE?n`gP{nIrYexLO;Sg7-QSFDMN-306WN~xbP{c%NRO?Ag~ z%x%)1P3l9Jb~`Yy_~|(4V(#yZnhSKwmNK%>McQ^AEC||oU5e&#Ov2wq;^ZEIGQmyROd+2a=`Nl4RH*3&mycc#>UImDY0BvS4Id*Hh=okiNohJ@^F5q^FQ7_c;i z5l|y7=}^a!SIijVM#`Nd7`(Z(RQf8u3e_JC4b!%+L0ZdaDXB+h+z92!pE#l=CDQl~ zZEbCfVcaB5QnY>js26pIw+)?L@EiT}rlw|CwhQ)9C!JiVU<;))5fKpq0f7=plL+WD z2);2@E>(UX>D$M!RnP9&;zje1a~C-Q7?c-RsB$MVli>QXof1$H)sS}qh*@$$jjv9DGIfgbmqVX$o`Tf3R)-x_5C zQNDb@F(xrlOzPx0GdXL3HMhL zus;~ijdnp^813og12}0eAP(DQ; ziT7sU348pw8EAXRtE1)qkX78b9wzopQAD((6xEJ+^w_w&9_pv39QR|vqf<-E9OxVe zK+DtuQX(DtL1YGaj@|isVSa9jM6zEG`GkjFbHjob0en~EZdw(u30f`xesc{S^vNiG^0i>`se&I-t&bn(+)Hi@KW zWHdM(=tSq2qq}b}=aP{$B8Z|gXlH=5^@HF^DMWDS)$1fal=+PtPj`Z)NQ2Y#&`q0qW_p zvIn-?LPHtPhs7s<7kgMU;h^B|3=J>fY?bfb7`N>`afa*l?Uo;P8y(&V`x^171dZ%* zQ0oNxtlhMyEP*;Zkc@ZRfMLwNJJ~-tI0$%%ppX#g8!Mmtx9SdT7%TgkE&;->T=%9_ zf@ozEuWyR;!aPX3o;wiX2MD$tF06OUgwvqEAEsE1Ny&gJCc`cR{T=%`yiV()s%mPq zbMD0V*lJjU`e*%0dcIz0SIxsgesVPF1c;>4>bkYAqNb<2ym~@ugp?*;?huX!+tn=~ zgR~iFsJ3Z>UQD{E2LJ{^R|WFH{aiLx()FPtn5vy${8E1v!Gxn6b3}9{sNXIHBGlE? zj<7iZU&WFD*p>$s>VEKtwq-ddxJY^v`}VD_pAC#I^iaX5ac}+|J_2GqG=}Z!IE) zpgF2p@e^3KpeIv$TG})FtBGm?Aobx6w~d6#dqII##m>)~)nNc?p8cCXy+Pu2Z}mE! zg6S{d=CzFtr7^6K$YBkF8(%I3Ip~ZqR=hL9epn*S2?FlA1R^ z`#8&l5Apsd%(fjM%q>F16L-FT00PXOUAwXt%8RyIW#~`#*OxryuMQV)y?Y;1yzlX5 zrY|VQ!~!b06$EE?;3-zhYCkwV*41H0+CT7dYs3@C7QX#J8_VmBjEn?9bv}Fo5Kvxt z^xyjGswKn10*AtQy%9jo((hotx0MuG4_ZMH7{TfgA!nElj~+eZ4!uE}Jux3D43R6mJQHM`X9j2CM5rJdp3yR(r}ZdERXxSQJ+;QMa<_Oqs~4OMSmNV*W<2MW;E z{sPw=k0D2$BL9c>+A5?PU0Oe@kxEg1-6E;Hu@dI-v>Fs8!S2SVm&yR`#>{+}xr`{_ zHWx<8{4CEqt2F_$_gbQw)ki7D$-X*nUfvOCa$GWhYofNtQAZL4X}qRs!@8PC{kh80 z20ZQS!BWr%Agd3N_Q{Gf}+8WE^KxuQG!lw<+IEnH=qqc14iRc6R->wSN;eD8`s6co{W3(q7y)9 zKSVvCtiTj}CKEO?+S2}!c8U#Cv@={ak9zR#`Hc7wc@*)*Q*3yz@U73i)ge8GnQz{l zIC`{l*2_9nsh)LS{5Hq$2zHMrro!*=1BNaAt(hZCMxkQ>fU9{uc5t~iMZ5i4)?P;) z!1tSQdX6%=14+46QGBBW(SZa#Pmz+~9eiigGBVn2yF5zSobxm$pi(gbYgkZC9cyoV zVLrF{K?l#D#k_wg<~$_wRU8ldN60KhbQD2&FVm2)(Cj+je(GQF*xTE8j%>6sS z8gNWCfj9*_uA@yZZ@}Cd!_}_@IG+@}1zrc*?5()A+b0 ze40j&1Mv4p&2}1S!tos=bF0s<@d=OvMl6lXyO$ozWO*HY+R8^bW*cW4g^;P`sF@2z0!)8qsqn6nzg5l_d7d3!{!9jqsOGiH#M~2g%7(Z zFS)ygavsgPj_1LW3gbU{*j!i4cJ#TKQW=U(_}1G3H|(Lm9%(RexGY`?*PGtnUZ84% zoL0p~l#&OX;J`Rvq&Xu3dx-rfejJcrZ{NmQd8N`A)If&K2!r^&B73v-l59Do32Gx$ zCufjhWtTRPUcGvC=D>%RmYZ#|Xur4gSd=Rdvc2mkZlHii{^A8YkhqhQ2t-M=-{=o- z`7eo%<^b@&okaKV0JvE+7%Syuwxp+mh@n1VEQD=-zA!S~5eQ~Nj0+BA3G^?J zni#SAP(^}Po06C#!oCL8cEw4M12wfj%$ArD;?m8uEpn|Cn(xe@qenY)V?~rsWd0^( zddiV;qvCLvBEf;;nysMDh@ZYb_U*oMFFTDox5L~wsHN*!^b=+-DnMu>D62Mw_Y#=! z)#f$?aT_4@?fBO0Cd8;UUAME=`P-E?3lB*MhCe#zMrT`>(||wjb5o&8CavK)3qs@F z-$`@plD^BR#7J2G)~xUPw1r_Kd55ih*WIH4SPHf8%i8R$ogF0hKjOBUqp57_B*$x} zk_=Ot4)r1>r8F9l#;BfuM|z=S@xE;fzcDVgHfr{p9D!M&`|W_dJGHa7hv3nu02(Wpf6$P0V!z?M&*d^7N8Yw$V!k;x zfr*gYLpIZAml2n4?rcBvp_>)>ji>A98~1eBOsuuUPd9X7!i+iF6|dU-D-gRE_N-DD#s{d&IYG9i|`uwipgiI&Vf2GZ78el7p+@Y ziX&7xg5ophCu}iZoB5g22>kv+Gi;k$^9Bc@FT7hCq&c8`8{Mz-+KdEu&a;9(7jvHu z6qxxkml_B;3Y7<&1fDAo5V)qM^weH1!r)K1YMrClWb~;4tayR*NW~-X`A__X#{vEf z(D1i#FrCZsof-OiPI?f21U+5JVhHc6pXqe8O(ME+VM3N&{gICY_c&$8T#mgCBv0!E ze97q}lIP3^O`YE$i#o2EHv-lf6t{4yNL07TKSAx39sJ;wj^Wdwq7x*0k>^Fj&d^q> z8+WBy%#6nufGZoEGxwRh%^BfR+HMa$yeH95gE+fUxub;x`o z^JjN`=gC?9bYT!#$;~S7%myg&LwPuW|cw#oOBq5PgD9{iBJKbVi(w zjWsKN44ToI0vFB? zd-Y&MxJT9u)Z8^#Qpo8QKheA7S-u}NJv>lDF|;przI%4Q=JQvhaVqeFMU_lwBSrXO zj>^edx;*d*NlNUgwx3?N%k^a{eHYBB6f?VHHd#-29|pqVbfqh!W-G8i9tT)(lOoFi zaP9g!+LP963A(~5K+Yy|ne|Sqw3@6ChV`EEfL0PY? ztSl?*I`b4;wuwHzcmJ}ontXOr4|2SgbF&fltYU4C=WE zgOmyf|HCE{{@6nw>DcTf7N`s$HwXyW6IBCB1JE0geSfC;uX*sUqC&0@qp7J0ngL14 z2h`0!%j!WI=!DmvWm&%lBDO&nIR8re`QyN`Q=aB8FbMjS)2o+X2VRuSEX0aDKg;O{ z4)f-X7Qz7a;D46bHHzt{0O*|s9!B$(hvm`X%d?cjedgx*s{^G!D+NRO>j8!?fGc|r=44KdG0NpyEp*i*6CoPA55_7ase)PiC_zN@Bm z%E6D2JRRCP^X4Qi+W%HG%|3F>x$GD+GKs;H_S1=FtJ=mtZA$lCQR7)V$YB=VA;J^Fql|Gc7xwn0iyHDj^5 z8yCOkj%$O)_h(WCl?_4The|SYOz;Ml#W#FAYk2UYJbD-J+kdVtI;3G;fT<(rA)8j&wVb!zE*roZnZ;*#AF#hzlxIH^}9UOczda z3XYn%VavL*9$!=eYC3v-(u-YtWR4*a_e~BxdJoEohoAS!=|KF0VE-TA(jl^#k|OLE z<%s<^noly2-VxR|7&#Tb0mgMY4e3>DK_WW@R27f$%=+sgm+KJ|1jS zAZI=)ZMy7d(!XBj*rVy9WaREewBAzPAzPKY3RzR$42m=Jwf|ZNynHX5PiQoNpBRiftfBK(q zY8Xh$`m!qUYNax z@91c1x^bFT7l3+_+2(6Un-9CVV=_#eeZs@%y}%KkV#JP&ydbPAK9tdFo(m|YhgZ*4 zfo=zZGWH2Anj8GWr1rujHFY~e`49^(+`5Fx2=<~)C8d1ALzu}MmiKS>c6muSwcC*# z7mlIPyEe)sfZI%rBb;&k-8_|29f5z$!Chu-Iqt&dBn;Iu3I>7r_z_MB)z9ph7%3Eh za4wFKkCAcZ<=T#u^|(@26K5VIQgk2fn_^>WoYtW*7F?biSR1Z^*TUeH5Frcmk#3_ssiGK=@$^^DhhU&{X<{!sD4YKvN=YgES8 RS1aJ3tdt@;>Fo9U{}0)9{&fHV literal 55334 zcmd>mXH=BSvi2B3P(Vd;GJuF8A~`D}h-3kgEP~`Hk{Je-U;t4N5fBhma!!L}$x4(c zIZ2R=FoYq@R|A7b&)#?4weH{V&sqCOPjz*5clA?MPrXl+6=e>Q(2*bzh(og1q;4P( zdvp+pz2AvQ5?EERhm?H*D&aKUp=re7I*&9BoZpVig5h@D{C-$W~FD^-2>N1iR>+pb+B z>ZRV5thAK!5BFce;$F~AQmXd`E6(&yu6>HEJ?oMojzTllltn_tE9Bz{0|?b>cgG(Ap{RbQ`mYfj5Rif@g`YtXmmoGoyBcsbPZ!>RtciCLYo*Pk0OYD8= zl?ZCH@Vb{j9pA<3OV6^iv*~RLUq(^y_T)KC@_=2yqW#=j)M2{2CMH~3*){861|k;9 z-QSX7Aj~*AKBhZdE(tCDu9{S0W@4wk(pzDeA9Zzpj;QY1V+u zRXbsX;YJ8jL{mIA{`m1Dr&jibG4Wa9`{PZC>Sx8{C=d*fm5HT3d6QBnzBN%qMOIW- zQ&UpTafKnajo`GozDjSMcbt>6{_QR%BIQQ_)zh`t;1bh)e8y8LoRvE>I#$ zKRat67@oq(yD+4?%a$FEUFl<|eWlUFaOO_-9Ygq@fD`KX|H+^uMQ8KySChX^Gez8} zGP4gM`FMdE5#u*kcK+;Z%zg^VwLDVjmuf$wanRhg85XUQ4Nf9d2&ITdJYF&LFY1=)oXG)2^RT^D4cOy=O;mwn~xI{&QS{d}E%(#^I;u<6fx9}*#%A4D*vX3; zs(A9|%^Tcm6z-den%`O_mq#?xs-N>f1mv~y?ucz3hfzOX7Ca1g677|j~n;)7+ zFT8&B3T{z+d0Y)zs`Pbg>r`ah)8RR=P{#Jz?`L&u;kG*_)>Q`9(eAOO7;c zL4o1n1#ZjMn7FPyyZ29he94&|-DXqgSAxp+iw5w+vhIqZb|DTc;7_Brt2QcbuJpkk zb3N}s@Lc9=@uJZWhfy0HsGsT_^4ZqCT5H_FT*)P>rbV?0`SGjBwI#FuRGm*Zu4aI; zn?ptCEBM6pnS}011-oN^#!=7S$#tC8I#!dJl~w(mvB0c_P3%~Teu+3M>(w>w^`A

DI`Zhxwev&AaoREVj-X9_w?4*R%w4aGXoX< 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 diff --git a/src/com/olexyn/ensync/flow.uxf b/src/com/olexyn/ensync/flow.uxf index 48099b8..dd739c9 100644 --- a/src/com/olexyn/ensync/flow.uxf +++ b/src/com/olexyn/ensync/flow.uxf @@ -4,8 +4,8 @@ UMLClass - 1350 - 1220 + 1230 + 620 130 60 @@ -18,8 +18,8 @@ group=1 UMLClass - 1480 - 1220 + 1360 + 620 130 30 @@ -32,8 +32,8 @@ group=1 UMLClass - 1480 - 1250 + 1360 + 650 130 30 @@ -45,8 +45,8 @@ group=1 UMLClass - 1350 - 1040 + 1230 + 520 130 30 @@ -59,8 +59,8 @@ group=2 UMLClass - 1480 - 1040 + 1360 + 520 130 60 @@ -73,8 +73,8 @@ group=2 UMLClass - 1350 - 1070 + 1230 + 550 130 30 @@ -86,8 +86,8 @@ group=2 UMLState - 1090 - 870 + 1040 + 430 120 40 @@ -99,8 +99,8 @@ halign=left UMLState - 1090 - 1060 + 1040 + 530 120 40 @@ -112,8 +112,8 @@ halign=left UMLState - 1090 - 1240 + 1040 + 630 120 40 @@ -125,30 +125,30 @@ halign=left Relation - 1130 - 990 + 1090 + 500 30 - 90 + 50 lt=<- - 10.0;70.0;10.0;10.0 + 10.0;30.0;10.0;10.0 Relation - 1120 - 1170 - 50 - 90 + 1090 + 600 + 30 + 50 lt=<- - 30.0;70.0;10.0;10.0 + 10.0;30.0;10.0;10.0 UMLState - 1090 - 1380 + 1040 + 830 120 40 @@ -161,43 +161,43 @@ style=wordwrap Relation - 1140 - 1320 - 60 - 80 + 1090 + 800 + 30 + 50 lt=<- - 40.0;60.0;10.0;10.0 + 10.0;30.0;10.0;10.0 Relation - 1120 - 1090 - 50 - 90 + 1090 + 560 + 30 + 50 lt=<- - 10.0;70.0;30.0;10.0 + 10.0;30.0;10.0;10.0 UMLClass - 840 - 840 - 820 - 1090 + 940 + 390 + 590 + 810 For Each SyncDirectory -halign=left +halign=right layer=-1 UMLClass - 1340 - 1030 + 1220 + 510 280 80 @@ -210,30 +210,30 @@ group=2 Relation - 1200 - 1240 - 160 - 40 + 1150 + 640 + 90 + 30 lt=. - 140.0;10.0;10.0;20.0 + 70.0;10.0;10.0;10.0 Relation - 1150 - 800 + 1090 + 370 30 - 90 + 80 lt=<- - 10.0;70.0;10.0;10.0 + 10.0;60.0;10.0;10.0 UMLSpecialState - 1150 - 790 + 1090 + 360 20 20 @@ -243,8 +243,8 @@ group=2 UMLSpecialState - 1150 - 1970 + 1090 + 1220 20 20 @@ -254,30 +254,30 @@ group=2 Relation - 1130 - 1500 - 50 - 90 + 1090 + 900 + 30 + 50 lt=<- - 30.0;70.0;10.0;10.0 + 10.0;30.0;10.0;10.0 Relation - 1150 - 1900 + 1090 + 1170 30 - 90 + 70 lt=<- - 10.0;70.0;10.0;10.0 + 10.0;50.0;10.0;10.0 UMLState - 1070 - 1720 + 1040 + 1030 120 50 @@ -290,9 +290,9 @@ style=wordwrap UMLState - 1100 - 1160 - 150 + 1030 + 590 + 140 20 State 1 : LIST-1 @@ -302,8 +302,8 @@ bg=orange UMLState - 1070 - 1570 + 1040 + 930 120 40 @@ -316,32 +316,32 @@ style=wordwrap UMLState - 1110 - 1490 - 160 + 1030 + 890 + 140 20 - State 3 : SYNC-1 + State 4 : SYNC-1 bg=orange UMLState - 1110 - 1640 - 150 + 1030 + 990 + 140 20 - State 4 : NEW-2 + State 5 : NEW-2 bg=orange UMLState - 1110 - 980 + 1030 + 490 140 20 @@ -352,31 +352,31 @@ bg=orange UMLState - 1120 - 1790 + 1030 + 1100 140 20 - State 5 : OLD-1 + State 6 : OLD-1 bg=orange Relation - 1130 - 1650 - 40 - 90 + 1090 + 1000 + 30 + 50 lt=<- - 20.0;70.0;10.0;10.0 + 10.0;30.0;10.0;10.0 UMLSpecialState - 1140 - 1870 + 1080 + 1140 40 40 @@ -386,41 +386,41 @@ bg=orange Relation - 1150 - 1800 + 1090 + 1110 30 - 90 + 50 lt=<- - 10.0;70.0;10.0;10.0 + 10.0;30.0;10.0;10.0 Relation - 920 - 880 - 240 - 1030 + 970 + 440 + 130 + 740 lt=<- - 170.0;10.0;20.0;260.0;10.0;1010.0;220.0;1010.0 + 70.0;10.0;10.0;10.0;10.0;720.0;110.0;720.0 Relation - 1130 - 900 - 40 - 100 + 1090 + 460 + 30 + 50 lt=<- - 10.0;80.0;20.0;10.0 + 10.0;30.0;10.0;10.0 UMLClass - 1340 - 1210 + 1220 + 610 280 80 @@ -433,20 +433,20 @@ group=1 Relation - 1200 - 1060 - 160 - 40 + 1150 + 540 + 90 + 30 lt=. - 10.0;20.0;140.0;10.0 + 10.0;10.0;70.0;10.0 UMLState - 1120 - 1310 - 160 + 1030 + 690 + 140 20 State 2 : LIST-2 @@ -456,45 +456,92 @@ bg=orange Relation - 1140 - 1270 + 1090 + 660 30 - 60 + 50 lt=<- - 10.0;40.0;10.0;10.0 + 10.0;30.0;10.0;10.0 Relation - 1140 - 1760 - 40 + 1090 + 1070 + 30 50 lt=<- - 20.0;30.0;10.0;10.0 + 10.0;30.0;10.0;10.0 Relation - 1110 - 1600 - 50 - 60 + 1090 + 960 + 30 + 50 lt=<- - 30.0;40.0;10.0;10.0 + 10.0;30.0;10.0;10.0 Relation - 1130 - 1410 - 60 - 100 + 1090 + 860 + 30 + 50 + + lt=<- + 10.0;30.0;10.0;10.0 + + + UMLState + + 1030 + 790 + 140 + 20 + + State 3 : LIST-3 +bg=orange + + + + UMLState + + 1040 + 730 + 120 + 40 + + get +ListModified +halign=left + + + + Relation + + 1090 + 760 + 30 + 50 + + lt=<- + 10.0;30.0;10.0;10.0 + + + Relation + + 1090 + 700 + 30 + 50 lt=<- - 10.0;80.0;40.0;10.0 + 10.0;30.0;10.0;10.0