From 1a0787ffe4ea5a79c3c60b26844cb26e7f42e6a2 Mon Sep 17 00:00:00 2001 From: fabrizzioalco Date: Mon, 20 Apr 2020 21:47:21 -0500 Subject: [PATCH] Solucion a problema de amazon movies --- .classpath | 44 ++++++ .project | 23 ++++ .settings/org.eclipse.core.resources.prefs | 3 + .settings/org.eclipse.jdt.apt.core.prefs | 2 + .settings/org.eclipse.jdt.core.prefs | 9 ++ .settings/org.eclipse.m2e.core.prefs | 4 + pom.xml | 18 +++ .../recommendation/MovieRecommender.java | 128 ++++++++++++++++++ .../recommendation/MovieRecommenderTest.java | 8 +- target/classes/.netbeans_automatic_build | 0 .../default-testCompile/createdFiles.lst | 2 + .../default-testCompile/inputFiles.lst | 2 + ...ta.recommendation.MovieRecommenderTest.xml | 111 +++++++++++++++ ...ta.recommendation.MovieRecommenderTest.txt | 44 ++++++ target/test-classes/.netbeans_automatic_build | 0 .../recommendation/MovieRecommender.class | Bin 0 -> 5701 bytes .../recommendation/MovieRecommenderTest.class | Bin 0 -> 1554 bytes 17 files changed, 394 insertions(+), 4 deletions(-) create mode 100644 .classpath create mode 100644 .project create mode 100644 .settings/org.eclipse.core.resources.prefs create mode 100644 .settings/org.eclipse.jdt.apt.core.prefs create mode 100644 .settings/org.eclipse.jdt.core.prefs create mode 100644 .settings/org.eclipse.m2e.core.prefs create mode 100644 src/test/java/nearsoft/academy/bigdata/recommendation/MovieRecommender.java create mode 100644 target/classes/.netbeans_automatic_build create mode 100644 target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst create mode 100644 target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst create mode 100644 target/surefire-reports/TEST-nearsoft.academy.bigdata.recommendation.MovieRecommenderTest.xml create mode 100644 target/surefire-reports/nearsoft.academy.bigdata.recommendation.MovieRecommenderTest.txt create mode 100644 target/test-classes/.netbeans_automatic_build create mode 100644 target/test-classes/nearsoft/academy/bigdata/recommendation/MovieRecommender.class create mode 100644 target/test-classes/nearsoft/academy/bigdata/recommendation/MovieRecommenderTest.class diff --git a/.classpath b/.classpath new file mode 100644 index 0000000..75b806f --- /dev/null +++ b/.classpath @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/.project b/.project new file mode 100644 index 0000000..f150976 --- /dev/null +++ b/.project @@ -0,0 +1,23 @@ + + + big-data + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.m2e.core.maven2Builder + + + + + + org.eclipse.jdt.core.javanature + org.eclipse.m2e.core.maven2Nature + + diff --git a/.settings/org.eclipse.core.resources.prefs b/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 0000000..8dd9b1d --- /dev/null +++ b/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,3 @@ +eclipse.preferences.version=1 +encoding//src/test/java=UTF-8 +encoding/=UTF-8 diff --git a/.settings/org.eclipse.jdt.apt.core.prefs b/.settings/org.eclipse.jdt.apt.core.prefs new file mode 100644 index 0000000..d4313d4 --- /dev/null +++ b/.settings/org.eclipse.jdt.apt.core.prefs @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.apt.aptEnabled=false diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000..ac8e750 --- /dev/null +++ b/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,9 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5 +org.eclipse.jdt.core.compiler.compliance=1.5 +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled +org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore +org.eclipse.jdt.core.compiler.processAnnotations=disabled +org.eclipse.jdt.core.compiler.release=disabled +org.eclipse.jdt.core.compiler.source=1.5 diff --git a/.settings/org.eclipse.m2e.core.prefs b/.settings/org.eclipse.m2e.core.prefs new file mode 100644 index 0000000..f897a7f --- /dev/null +++ b/.settings/org.eclipse.m2e.core.prefs @@ -0,0 +1,4 @@ +activeProfiles= +eclipse.preferences.version=1 +resolveWorkspaceProjects=true +version=1 diff --git a/pom.xml b/pom.xml index 8169ff7..bd68aa7 100644 --- a/pom.xml +++ b/pom.xml @@ -10,9 +10,25 @@ big-data http://maven.apache.org + + + + org,apache.maven.plugins + maven-compiler-plugin + 3.8.0 + + + + UTF-8 + + 11 + 11 + + + @@ -20,6 +36,8 @@ mahout-core 0.9 + + junit junit diff --git a/src/test/java/nearsoft/academy/bigdata/recommendation/MovieRecommender.java b/src/test/java/nearsoft/academy/bigdata/recommendation/MovieRecommender.java new file mode 100644 index 0000000..eaf2346 --- /dev/null +++ b/src/test/java/nearsoft/academy/bigdata/recommendation/MovieRecommender.java @@ -0,0 +1,128 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package nearsoft.academy.bigdata.recommendation; + +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileReader; +import java.io.FileWriter; +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import org.apache.mahout.cf.taste.common.TasteException; +import org.apache.mahout.cf.taste.impl.model.file.FileDataModel; +import org.apache.mahout.cf.taste.impl.neighborhood.ThresholdUserNeighborhood; +import org.apache.mahout.cf.taste.impl.recommender.GenericUserBasedRecommender; +import org.apache.mahout.cf.taste.impl.similarity.PearsonCorrelationSimilarity; +import org.apache.mahout.cf.taste.model.DataModel; +import org.apache.mahout.cf.taste.neighborhood.UserNeighborhood; +import org.apache.mahout.cf.taste.recommender.RecommendedItem; +import org.apache.mahout.cf.taste.recommender.UserBasedRecommender; +import org.apache.mahout.cf.taste.similarity.UserSimilarity; + +/** + * + * @author fabrizzioalco + */ + +public class MovieRecommender { + private int totalReviews; + private int totalProducts; + private int totalUsers; + + + HashMap Users = new HashMap(); + HashMap Products = new HashMap(); + HashMap Products2 = new HashMap(); + + MovieRecommender(String path) throws FileNotFoundException, IOException{ + + //writing the txt file + File movieFile = new File(path); + BufferedReader bufferInput = new BufferedReader(new FileReader(movieFile)); + + //Writing the txt to csv + File newMovieFile = new File("amazonMovies.csv"); + FileWriter fw = new FileWriter(newMovieFile); + BufferedWriter bufferWriter = new BufferedWriter(fw); + + String userID = ""; + String productID = ""; + String userMovieScore = ""; + String line; + + while((line = bufferInput.readLine()) != null){ + + switch(line.split(" ")[0]){ + case "review/userId:": + userID = line.split(" ")[1]; + + if(Users.containsKey(userID) != true){ + Users.put(userID, totalUsers); + totalUsers++; + + } + break; + case "product/productId:": + productID = line.split(" ")[1]; + if(Products.containsKey(productID) != true){ + totalProducts++; + Products.put(productID, totalProducts); + Products2.put(totalProducts, productID); + + } + break; + case "review/score:": + totalReviews++; + userMovieScore = line.split(" ")[1]; + bufferWriter.write(totalUsers + "," + totalProducts + "," + userMovieScore); + break; + } + + } + bufferInput.close(); + bufferWriter.close(); + } + + public int getTotalReviews(){ + return this.totalReviews; + } + public int getTotalProducts(){ + return this.totalProducts; + } + + public int getTotalUsers(){ + return this.totalUsers; + } + + public List getRecommendationsForUser(String userID) throws IOException, TasteException{ + + DataModel model = new FileDataModel(new File("amazonMovies.csv")); + + UserSimilarity similarity = new PearsonCorrelationSimilarity(model); + + UserNeighborhood neighborhood = new ThresholdUserNeighborhood(0.1, similarity, model); + + UserBasedRecommender recommender = new GenericUserBasedRecommender(model, neighborhood, similarity); + + List recommendations = recommender.recommend(Users.get(userID), 3); + + List res = new ArrayList(); + + for(RecommendedItem recommendation: recommendations){ + res.add(Products2.get((int) recommendation.getItemID())); + } + + return res; + } + + + +} + diff --git a/src/test/java/nearsoft/academy/bigdata/recommendation/MovieRecommenderTest.java b/src/test/java/nearsoft/academy/bigdata/recommendation/MovieRecommenderTest.java index 0d0b1fe..2c4666a 100644 --- a/src/test/java/nearsoft/academy/bigdata/recommendation/MovieRecommenderTest.java +++ b/src/test/java/nearsoft/academy/bigdata/recommendation/MovieRecommenderTest.java @@ -15,10 +15,10 @@ public class MovieRecommenderTest { public void testDataInfo() throws IOException, TasteException { //download movies.txt.gz from // http://snap.stanford.edu/data/web-Movies.html - MovieRecommender recommender = new MovieRecommender("/path/to/movies.txt.gz"); - assertEquals(7911684, recommender.getTotalReviews()); - assertEquals(253059, recommender.getTotalProducts()); - assertEquals(889176, recommender.getTotalUsers()); + MovieRecommender recommender = new MovieRecommender("/Users/fabrizzioalco/Documents/movies.txt"); + assertEquals(2061014, recommender.getTotalReviews()); + assertEquals(66044, recommender.getTotalProducts()); + assertEquals(525481, recommender.getTotalUsers()); List recommendations = recommender.getRecommendationsForUser("A141HP4LYPWMSR"); assertThat(recommendations, hasItem("B0002O7Y8U")); diff --git a/target/classes/.netbeans_automatic_build b/target/classes/.netbeans_automatic_build new file mode 100644 index 0000000..e69de29 diff --git a/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst b/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst new file mode 100644 index 0000000..ba4b625 --- /dev/null +++ b/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst @@ -0,0 +1,2 @@ +nearsoft/academy/bigdata/recommendation/MovieRecommender.class +nearsoft/academy/bigdata/recommendation/MovieRecommenderTest.class diff --git a/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst b/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst new file mode 100644 index 0000000..58eea46 --- /dev/null +++ b/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst @@ -0,0 +1,2 @@ +/Users/fabrizzioalco/Documents/nearsoft/big-data/big-data-exercises/src/test/java/nearsoft/academy/bigdata/recommendation/MovieRecommenderTest.java +/Users/fabrizzioalco/Documents/nearsoft/big-data/big-data-exercises/src/test/java/nearsoft/academy/bigdata/recommendation/MovieRecommender.java diff --git a/target/surefire-reports/TEST-nearsoft.academy.bigdata.recommendation.MovieRecommenderTest.xml b/target/surefire-reports/TEST-nearsoft.academy.bigdata.recommendation.MovieRecommenderTest.xml new file mode 100644 index 0000000..1706b2f --- /dev/null +++ b/target/surefire-reports/TEST-nearsoft.academy.bigdata.recommendation.MovieRecommenderTest.xml @@ -0,0 +1,111 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + org.apache.mahout.cf.taste.common.NoSuchUserException: 0 + at org.apache.mahout.cf.taste.impl.model.GenericDataModel.getPreferencesFromUser(GenericDataModel.java:213) + at org.apache.mahout.cf.taste.impl.model.file.FileDataModel.getPreferencesFromUser(FileDataModel.java:665) + at org.apache.mahout.cf.taste.impl.similarity.AbstractSimilarity.userSimilarity(AbstractSimilarity.java:112) + at org.apache.mahout.cf.taste.impl.similarity.PearsonCorrelationSimilarity.userSimilarity(PearsonCorrelationSimilarity.java:60) + at org.apache.mahout.cf.taste.impl.neighborhood.ThresholdUserNeighborhood.getUserNeighborhood(ThresholdUserNeighborhood.java:89) + at org.apache.mahout.cf.taste.impl.recommender.GenericUserBasedRecommender.recommend(GenericUserBasedRecommender.java:87) + at org.apache.mahout.cf.taste.impl.recommender.AbstractRecommender.recommend(AbstractRecommender.java:63) + at nearsoft.academy.bigdata.recommendation.MovieRecommender.getRecommendationsForUser(MovieRecommender.java:114) + at nearsoft.academy.bigdata.recommendation.MovieRecommenderTest.testDataInfo(MovieRecommenderTest.java:23) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:566) + at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44) + at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15) + at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41) + at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20) + at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:76) + at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50) + at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193) + at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52) + at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191) + at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42) + at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184) + at org.junit.runners.ParentRunner.run(ParentRunner.java:236) + at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:252) + at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:141) + at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:112) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:566) + at org.apache.maven.surefire.util.ReflectionUtils.invokeMethodWithArray(ReflectionUtils.java:189) + at org.apache.maven.surefire.booter.ProviderFactory$ProviderProxy.invoke(ProviderFactory.java:165) + at org.apache.maven.surefire.booter.ProviderFactory.invokeProvider(ProviderFactory.java:85) + at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:115) + at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:75) + + SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder". +SLF4J: Defaulting to no-operation (NOP) logger implementation +SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details. + + + \ No newline at end of file diff --git a/target/surefire-reports/nearsoft.academy.bigdata.recommendation.MovieRecommenderTest.txt b/target/surefire-reports/nearsoft.academy.bigdata.recommendation.MovieRecommenderTest.txt new file mode 100644 index 0000000..77ac12f --- /dev/null +++ b/target/surefire-reports/nearsoft.academy.bigdata.recommendation.MovieRecommenderTest.txt @@ -0,0 +1,44 @@ +------------------------------------------------------------------------------- +Test set: nearsoft.academy.bigdata.recommendation.MovieRecommenderTest +------------------------------------------------------------------------------- +Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 26.341 sec <<< FAILURE! +testDataInfo(nearsoft.academy.bigdata.recommendation.MovieRecommenderTest) Time elapsed: 26.292 sec <<< ERROR! +org.apache.mahout.cf.taste.common.NoSuchUserException: 0 + at org.apache.mahout.cf.taste.impl.model.GenericDataModel.getPreferencesFromUser(GenericDataModel.java:213) + at org.apache.mahout.cf.taste.impl.model.file.FileDataModel.getPreferencesFromUser(FileDataModel.java:665) + at org.apache.mahout.cf.taste.impl.similarity.AbstractSimilarity.userSimilarity(AbstractSimilarity.java:112) + at org.apache.mahout.cf.taste.impl.similarity.PearsonCorrelationSimilarity.userSimilarity(PearsonCorrelationSimilarity.java:60) + at org.apache.mahout.cf.taste.impl.neighborhood.ThresholdUserNeighborhood.getUserNeighborhood(ThresholdUserNeighborhood.java:89) + at org.apache.mahout.cf.taste.impl.recommender.GenericUserBasedRecommender.recommend(GenericUserBasedRecommender.java:87) + at org.apache.mahout.cf.taste.impl.recommender.AbstractRecommender.recommend(AbstractRecommender.java:63) + at nearsoft.academy.bigdata.recommendation.MovieRecommender.getRecommendationsForUser(MovieRecommender.java:114) + at nearsoft.academy.bigdata.recommendation.MovieRecommenderTest.testDataInfo(MovieRecommenderTest.java:23) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:566) + at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44) + at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15) + at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41) + at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20) + at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:76) + at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50) + at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193) + at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52) + at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191) + at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42) + at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184) + at org.junit.runners.ParentRunner.run(ParentRunner.java:236) + at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:252) + at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:141) + at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:112) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:566) + at org.apache.maven.surefire.util.ReflectionUtils.invokeMethodWithArray(ReflectionUtils.java:189) + at org.apache.maven.surefire.booter.ProviderFactory$ProviderProxy.invoke(ProviderFactory.java:165) + at org.apache.maven.surefire.booter.ProviderFactory.invokeProvider(ProviderFactory.java:85) + at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:115) + at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:75) + diff --git a/target/test-classes/.netbeans_automatic_build b/target/test-classes/.netbeans_automatic_build new file mode 100644 index 0000000..e69de29 diff --git a/target/test-classes/nearsoft/academy/bigdata/recommendation/MovieRecommender.class b/target/test-classes/nearsoft/academy/bigdata/recommendation/MovieRecommender.class new file mode 100644 index 0000000000000000000000000000000000000000..01c9e0c81179f4a1762624cc683435999d49cceb GIT binary patch literal 5701 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

I;bbfr1|?_=$oW6x{6nzYX{oHz{E2 rQT(ict%tbY56i!xM89OO2EW3u`5U6tzv1&o{FyzKt-sJKpF#M)ii%Pm literal 0 HcmV?d00001 diff --git a/target/test-classes/nearsoft/academy/bigdata/recommendation/MovieRecommenderTest.class b/target/test-classes/nearsoft/academy/bigdata/recommendation/MovieRecommenderTest.class new file mode 100644 index 0000000000000000000000000000000000000000..75a598bc7f86d5417c0665078d2a655777b6841c GIT binary patch literal 1554 zcmbtU-BQ~|6#f zPs9ts+ahT4oyLjuG{f++3Y1=97@W@6Eo2#%0x6<6Jl0%z;z;_hctbUhgcdxKUg-NW zAVq}%uZAy_-0SVhC<~h*&ktf5#r#+_BK7*U3Psxs`FiLje_qztlD?I0o1V z!;NY89NNB)RM0Hv>qA5WxEuXxOh0mv!x+Q$rqs1ii}s$RNI%6LII@{v zjMZljJ~vh)J*y7iEWTj4wmQEs|8#f3J=}d>-QP3TUpkmZo?(Kl`=#oXFWw9zJ!2-Uf>}dsSEkWfhToU8*5czr*i(Tx+ zg|%n3%`Cp@=?@<~Un*HBGc3Pv+tmm!LuM^JlGGip3gmX;H)K>3jW+G%+|U#4x`>p~ zyPFx^Qq%-1?uR5L(2l0$>ogmc;5cNs+Mf_}uaDk4Iz_(T50!QcwdKW@V7U2TZm&*z z{H8A0F8_bLRw#+R@zRs0W|(6OTMT2JAygr+?DS78xC}+p9O6_^V{u=!!bEfLm}?Ph z$<3QUuR+ZyeJ|?xy(G}emvt2@D*S2?(9m{L87k-PYOc>f*$R=ajozMqd%Wvd>pq)ypxJ|NxWyoLT>5}?pJ4XGiR7RLuoemuqP~~ zfq&rV&=PB(B)4zfrC{D_HoBj+tv<_hRA1G~@Qvd(} literal 0 HcmV?d00001