From 74bfe658034ab07ce83c86177c64b59952f744d0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Kidzi=C5=84ski?= Date: Sun, 21 Aug 2011 20:12:03 +0200 Subject: [PATCH] Translation to polish --- .gitignore | 1 + .project | 18 ++ .pydevproject | 7 + src/.gitignore | 1 + src/sweetrs/.gitignore | 2 + src/sweetrs/locale/pl/LC_MESSAGES/django.mo | Bin 3230 -> 10052 bytes src/sweetrs/locale/pl/LC_MESSAGES/django.po | 268 +++++++++++++++++- src/sweetrs/recommender/forms.py | 14 +- src/sweetrs/recommender/models.py | 2 +- .../templates/recommender/product.add.html | 8 +- .../templates/recommender/products.html | 18 +- .../templates/recommender/provide.email.html | 23 +- .../templates/recommender/recommends.html | 25 +- src/sweetrs/recommender/urls.py | 2 + src/sweetrs/recommender/views.py | 53 +++- src/sweetrs/settings.py | 8 +- .../obcinacz_2_1_jpg_150x150_crop_q75.jpg | Bin 0 -> 4863 bytes .../obcinacz_2_1_jpg_50x50_crop_q75.jpg | Bin 0 -> 1284 bytes src/sweetrs/static/photos/obcinacz_2_1.jpg | Bin 0 -> 40684 bytes src/sweetrs/templates/base.html | 24 +- src/sweetrs/templates/flatpages/about.html | 53 ++-- src/sweetrs/templates/flatpages/faq.html | 53 ++-- src/sweetrs/urls.py | 1 + src/sweetrs/views.py | 6 + 24 files changed, 455 insertions(+), 132 deletions(-) create mode 100644 .gitignore create mode 100644 .project create mode 100644 .pydevproject create mode 100644 src/.gitignore create mode 100644 src/sweetrs/.gitignore create mode 100644 src/sweetrs/static/photos/_thumbs/obcinacz_2_1_jpg_150x150_crop_q75.jpg create mode 100644 src/sweetrs/static/photos/_thumbs/obcinacz_2_1_jpg_50x50_crop_q75.jpg create mode 100755 src/sweetrs/static/photos/obcinacz_2_1.jpg diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ac785c6 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/sweetrs.db diff --git a/.project b/.project new file mode 100644 index 0000000..69e540f --- /dev/null +++ b/.project @@ -0,0 +1,18 @@ + + + sweet-recommender-system + + + + + + org.python.pydev.PyDevBuilder + + + + + + org.python.pydev.django.djangoNature + org.python.pydev.pythonNature + + diff --git a/.pydevproject b/.pydevproject new file mode 100644 index 0000000..a9cca03 --- /dev/null +++ b/.pydevproject @@ -0,0 +1,7 @@ + + + + +Default +python 2.7 + diff --git a/src/.gitignore b/src/.gitignore new file mode 100644 index 0000000..c7eadf1 --- /dev/null +++ b/src/.gitignore @@ -0,0 +1 @@ +/apache diff --git a/src/sweetrs/.gitignore b/src/sweetrs/.gitignore new file mode 100644 index 0000000..56b7c44 --- /dev/null +++ b/src/sweetrs/.gitignore @@ -0,0 +1,2 @@ +*.pyc +sweetrs.db diff --git a/src/sweetrs/locale/pl/LC_MESSAGES/django.mo b/src/sweetrs/locale/pl/LC_MESSAGES/django.mo index 4e8b0d067194887e9f1c4a1823f936ffc97a6da1..00c4a3bd588606801762f200b844cb91f68bdbdb 100644 GIT binary patch literal 10052 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 delta 1037 zcmYMyO-NKx6u|LgS~}zS{W+uNQ^V4N{HUl9Ny#pjM<=?x`+n!Wd*3_vymwy?-1DbCl;+$L zS|h!deke=iFm~p2A>yo9;<6n(gYdAN!N_y#r6I&#PcC!PNti|}{mzK@$a zUWU~ez#Q^RCxNc;IG)39tj7h^3Ll^*dW@&2>^UCbS_gGr3+e*;unOCXQQ z3#4dCqvl)1T=L6nf?<4zSFx3{`|u$);3n$AD#*eVnLySclc))2GuJ89FSLNVfSag^ z7Beno#vh?Rzk(^9kS5rVYsev+ob*M1a0Go^?8A$wQ&+Dk8|>!Ng? z{%`%%m2_=P-~M&F*R&A6UP>wmv`THdYHd|JNGaB3;y^}4H=s6MMA>$H^0l(b^Dd0RQ|ZL>N$Pj(zR*w$fARDCqf{uUGQx10O^fcX{}EVpEEHXN6o z>_f?f9Sz&&XU&*duf1Z@b-kv!ekCyCOuO4l2u?XN7<8C3CH;}P;AKnuq^WMaUN|+EUbb9)#*HTBFLDK%EC2ui diff --git a/src/sweetrs/locale/pl/LC_MESSAGES/django.po b/src/sweetrs/locale/pl/LC_MESSAGES/django.po index b3c52b2..7302f26 100644 --- a/src/sweetrs/locale/pl/LC_MESSAGES/django.po +++ b/src/sweetrs/locale/pl/LC_MESSAGES/django.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-08-20 23:24+0200\n" +"POT-Creation-Date: 2011-08-21 12:47-0500\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -37,10 +37,10 @@ msgstr "Dodaj zdjęcie" #: recommender/templates/recommender/product.add.html:4 msgid "" "Please provide photos with white background - it really looks much nicer :)" -msgstr "" -"Proszę dodawać zdjęcia z białym tłem - wyglądają dużo fajniej :)" +msgstr "Proszę dodawać zdjęcia z białym tłem - wyglądają dużo fajniej :)" #: recommender/templates/recommender/products.html:3 +#: templates/flatpages/about.html:18 msgid "Rate sweets" msgstr "Oceń słodycze" @@ -109,37 +109,45 @@ msgstr "Klucz" msgid "Users" msgstr "Użytkownicy" -#: recommender/templates/recommender/recommends.html:37 +#: recommender/templates/recommender/recommends.html:32 +msgid "" +"Your tau correlation coefficients with other sweetrs users. I will give some " +"details later, right now you can read something on wikipedia." +msgstr "" +"Twój współczynnik tau z innymi użytkownikami. W przyszłości napiszę więcej na " +"ten temat, ale teraz możesz poczytać coś tutaj wikipedia." + +#: recommender/templates/recommender/recommends.html:36 msgid "User" msgstr "Użytkownik" -#: recommender/templates/recommender/recommends.html:38 +#: recommender/templates/recommender/recommends.html:37 msgid "Your correlation with this user" msgstr "Twoja korelacja z tym użytkownikiem" -#: recommender/templates/recommender/recommends.html:66 +#: recommender/templates/recommender/recommends.html:65 msgid "Ratings" msgstr "Oceny" -#: recommender/templates/recommender/recommends.html:67 +#: recommender/templates/recommender/recommends.html:66 msgid "" "Currently I predict rating as weighted sum of other users ratings, where " "weights are just correlation coefficients (normalized).\n" " More details will be shown later.
\n" " Red background is just for noticing big mistake made by algorithm i.e. " "if predicted value differates \"too much\" with your rank." -msgstr "" -" " +msgstr " " -#: recommender/templates/recommender/recommends.html:73 +#: recommender/templates/recommender/recommends.html:72 msgid "Product" msgstr "Produkt" -#: recommender/templates/recommender/recommends.html:74 +#: recommender/templates/recommender/recommends.html:73 msgid "Your rate" msgstr "Twoja ocena" -#: recommender/templates/recommender/recommends.html:75 +#: recommender/templates/recommender/recommends.html:74 msgid "Prediction" msgstr "Predykcja" @@ -149,7 +157,8 @@ msgstr "SweetRS - System Rekomendacji Słodyczy" #: templates/base.html:136 msgid "Contribute to scientific project and find out which sweets you like." -msgstr "Weź udział w projekcie naukowym i zobacz jakie nowe słodycze byś polubił." +msgstr "" +"Weź udział w projekcie naukowym i zobacz jakie nowe słodycze byś polubił." #: templates/base.html:145 msgid "About the project" @@ -170,3 +179,236 @@ msgstr "Dodaj słodycze" #: templates/base.html:151 msgid "FAQ" msgstr "Pytania" + +#: templates/base.html:170 +msgid "Choose language" +msgstr "Wybierz język" + +#: templates/flatpages/about.html:4 +msgid "" +"C is for cookie, it's good enough for me,
oh cookie cookie cookie " +"starts with C." +msgstr "C jest dla ciasteczek i mi zupełnie wystarcza,
oh ciasteczko, ciasteczko, ciasteczko zaczyna się na C" + +#: templates/flatpages/about.html:5 +msgid "Cookie monster" +msgstr "Ciasteczkowy potwór" + +#: templates/flatpages/about.html:7 +msgid "Hello" +msgstr "Cześć" + +#: templates/flatpages/about.html:8 +msgid "" +"If you have found this website you are probably in my social circle. That's " +"great. You might even know that my name is" +msgstr "Jeśli tutaj trafiłeś to prawdopodobnie jesteś moim znajomym (lub znajomym znajomego :). Super! Możesz nawet wiedzieć, że nazywam się" + +#: templates/flatpages/about.html:9 +msgid "" +"and I'm a wannabe computer scientist from Poland.\n" +"I'm working on my master's thesis right now which is the recommender system." +msgstr "i jestem prawie-naukowcem z Polski. Pracuję nad pracą magisterską, którą będzie system rekomendacji." + +#: templates/flatpages/about.html:13 +msgid "Contribute to scientific project - all I need is your 5 minutes" +msgstr "" +"Weź udział w projekcie naukowym - potrzebuję tylko Twoich 5 minut" + +#: templates/flatpages/about.html:14 +msgid "" +"On this website I ask for your ratings of popular sweets. Then my systems " +"predicts which sweets you would prefer from those which you don't know!" +msgstr "Na tej stronie pytam o oceny popularnych słodyczy. Mój system" +"przewiduje oceny słodyczy które by Ci się podobały (i których nie znasz)!" + +#: templates/flatpages/about.html:15 +msgid "START" +msgstr "START" + +#: templates/flatpages/about.html:17 +msgid "2 easy steps to help me:" +msgstr "2 proste kroki by mi pomóc:" + +#: templates/flatpages/about.html:19 +msgid "" +"try to provide ratings for as much sweets as you can. If you haven't eaten " +"given sweet then mark it that way because this information is also important." +msgstr "" +"spróbuj ocenić jak najwięcej słodyczy. Jeśli czegoś nie jadłeś" +"to kliknij odpowiedni przycisk by system wiedział co ma ocenić za Ciebie!" + +#: templates/flatpages/about.html:20 +msgid "Enjoy recommends" +msgstr "Ciesz się rekomendacjami" + +#: templates/flatpages/about.html:21 +msgid "" +"find out which new sweets you'd like. Enjoy them or not and give me feedback " +"afterwards :)" +msgstr "" +"zobacz które słodycze byś lubił. Ciesz się nimi lub nie i daj mi znać czy system " +"pomógł :)" + +#: templates/flatpages/about.html:23 +msgid "What do I need?" +msgstr "Czego potrzebuję?" + +#: templates/flatpages/about.html:24 +msgid "" +"In order to build reliable system I need at least:
500 users and about " +"10000 marks" +msgstr "Aby zbudować wartościowy system potrzebuję co najmniej:
500 użytkowników i około 10000 ocen" + +#: templates/flatpages/about.html:26 +msgid "So far..." +msgstr "Aktualnie..." + +#: templates/flatpages/about.html:27 +msgid "users contributed" +msgstr "użytkowników pomogło" + +#: templates/flatpages/about.html:31 +msgid "ratings provided" +msgstr "ocen" + +#: templates/flatpages/about.html:35 +msgid "Still not sure?" +msgstr "Wciąć nie jesteś przekonany" + +#: templates/flatpages/about.html:36 +msgid "Read more in" +msgstr "Przeczytaj więcej na" + +#: templates/flatpages/about.html:36 +msgid "or contact" +msgstr "lub skontaktuj" + +#: templates/flatpages/about.html:36 +msgid "me" +msgstr "ze mną" + +#: templates/flatpages/about.html:38 +msgid "Do you like it? Click 'LIKE'!" +msgstr "Podobało się? Kliknij 'LUBIĘ TO'!" + +#: templates/flatpages/about.html:39 +msgid "It will help me in promoting this application." +msgstr "Pomoże mi to w promowaniu systemu" + +#: templates/flatpages/faq.html:3 +msgid "Why sweets?" +msgstr "Dlaczego słodycze?" + +#: templates/flatpages/faq.html:5 +msgid "everyone have already eaten some," +msgstr "każdy kiedyś jakieś zjadł," + +#: templates/flatpages/faq.html:6 +msgid "there are lots of them, but the set can be easly shrinked," +msgstr "jest ich mnóstwo, ale zbiór można łatwo zawęzić," + +#: templates/flatpages/faq.html:7 +msgid "it's quite easy to distinguish whether we like given candy or not," +msgstr "jest dość łatwo ocenić czy któreś lubimy czy nie" + +#: templates/flatpages/faq.html:8 +msgid "" +"as long as candies are not considered to be the most important thing on the " +"planet, it won't shift the focus from making great algorithm to the product " +"itself," +msgstr "" +"dopóki słodycze nie są najważniejszą rzeczą na świecie, " +"temat nie spowoduje, że ta strona zamiast służyć nauce przekształci się w " +"produkt komercyjny." + +#: templates/flatpages/faq.html:11 +msgid "How does it work?" +msgstr "Jak to działa?" + +#: templates/flatpages/faq.html:13 +msgid "" +"\n" +" I have populated database of candies with some \"international\" " +"ones. People who had joined this project (just by\n" +" clicking 'Review') review those items on the 1-5 grade. \n" +" The algorithm which I'm going to build as my master thesis gathers " +"all data and recommends you\n" +" sweets that you haven't ever tried and that you would like.\n" +" " +msgstr "" +"\n" +"Dodałem do bazy trochę słodyczy znanych na całym świecie. Ludzie którzy " +"już pomogli (klkikając 'Oceniaj') ocenili te produkty w skali od 1 do 5." +"Algorytm który buduję jako pracę magisterską zbiera te dane i podpowiada " +"które słodycze by Ci się podobały." + +#: templates/flatpages/faq.html:20 +msgid "Sounds great to me, how can I contribute?" +msgstr "Brzmi super, jak mogę pomóc?" + +#: templates/flatpages/faq.html:22 +msgid "" +"Just rate some products, check your recommendations and have fun with " +"exploring new candies :)" +msgstr "" +"Wystarczy, że ocenisz produkty. Sprawdź rekomendacje i ciesz się " +"propozycjami." + +#: templates/flatpages/faq.html:24 +msgid "I love this project - could I help more somehow?" +msgstr "Uwielbiam ten produkt - czy mogę jeszcze jakoś pomóc?" + +#: templates/flatpages/faq.html:26 +msgid "" +"Sure. Just contact me and tell something about your background, ie. are you " +"mathematician, statistician, software engineer, candy lover, taxi driver or " +"graphic designer." +msgstr "" +"Jasne! Po prostu napisz do mnie i powiedz mi czym się zajmujesz, tj. czy " +"jesteś matematykiem, statystykiem, programistą, miłośnikiem słodyczy, " +"taksówkarzem czy grafikiem." + +#: templates/flatpages/faq.html:28 +msgid "Is it innovative anyhow?" +msgstr "Czy to jest innowacyjne?" + +#: templates/flatpages/faq.html:30 +msgid "" +"The idea is already used by many companies, however there are not many open-" +"source approaches." +msgstr "" +"Sam pomysł jest już używany przez wiele korporacji, ale wersji 'otwartych' " +"jeszcze nie ma wielu." + +#: templates/flatpages/faq.html:32 +msgid "Why should one bother about creating good recommender system?" +msgstr "Po co zajmować się tworzeniem systemu rekomendacji?" + +#: templates/flatpages/faq.html:34 +msgid "" +"Because I have to create something for my master thesis :). There are some " +"recommender systems but there are also some issues:" +msgstr "" +"Bo muszę jakoś napisać pracę magisterską :). Jest wiele systemów rekomendacji, " +"ale jest też kilka poblemów:" + +#: templates/flatpages/faq.html:36 +msgid "" +"most of them are closed sourced so one can't check why he was given such " +"recommendations (it may lead to abuses)," +msgstr "" +"większość z nich ma zamknięty kod źródłowy i nie można sprawdzić dlaczego " +"dany produkt został zaproponowany (co prowadzi do nadużyć)." + +#: templates/flatpages/faq.html:37 +msgid "" +"there is always problem with getting relevant data (there are not many " +"institutions that provide it for free)," +msgstr "" +"zawsze jest problem ze zbieraniem danych (większość firm nie udostępnia " +"ich za darmo)." + +msgid "Add" +msgstr "Dodaj" + diff --git a/src/sweetrs/recommender/forms.py b/src/sweetrs/recommender/forms.py index c9776b3..a9d922a 100644 --- a/src/sweetrs/recommender/forms.py +++ b/src/sweetrs/recommender/forms.py @@ -1,5 +1,7 @@ +from django import forms from django.forms.models import ModelForm from sweetrs.recommender.models import Product +from django.core.validators import validate_email class ProductForm(ModelForm): class Meta: @@ -7,4 +9,14 @@ class Meta: fields = ( 'name', 'photo', - ) \ No newline at end of file + ) + +class EmailField(forms.CharField): + default_error_messages = { + 'invalid': (u'Enter a valid e-mail address.'), + } + default_validators = [validate_email] + +class AccessForm(forms.Form): + email = forms.EmailField(required=False) + secret = forms.CharField(required=False) diff --git a/src/sweetrs/recommender/models.py b/src/sweetrs/recommender/models.py index 378e697..f999677 100644 --- a/src/sweetrs/recommender/models.py +++ b/src/sweetrs/recommender/models.py @@ -21,4 +21,4 @@ class Rating(models.Model): user = models.ForeignKey(User) value = models.IntegerField(blank = True, null = True, - verbose_name = _(u'Ocena produktu')) + verbose_name = _(u'Rating')) diff --git a/src/sweetrs/recommender/templates/recommender/product.add.html b/src/sweetrs/recommender/templates/recommender/product.add.html index 37e56f8..d6a2b61 100644 --- a/src/sweetrs/recommender/templates/recommender/product.add.html +++ b/src/sweetrs/recommender/templates/recommender/product.add.html @@ -1,11 +1,11 @@ -{% extends "base.html" %} +{% extends "base.html" %}{% load i18n %} {% block content %} -

Add photo

- Please provide photos with white background - it really looks much nicer :) +

{% trans "Add photo" %}

+ {% trans "Please provide photos with white background - it really looks much nicer :)" %}
{% csrf_token %} {{ form.as_table }} - +
{% endblock %} \ No newline at end of file diff --git a/src/sweetrs/recommender/templates/recommender/products.html b/src/sweetrs/recommender/templates/recommender/products.html index a468de7..bc6cb95 100644 --- a/src/sweetrs/recommender/templates/recommender/products.html +++ b/src/sweetrs/recommender/templates/recommender/products.html @@ -1,14 +1,14 @@ -{% extends "base.html" %} +{% extends "base.html" %}{% load i18n %} {% block content %} -

Rate sweets

- Please give a mark on the 1-5 scale where: +

{% trans "Rate sweets" %}

+ {% trans "Please give a mark on the 1-5 scale where:" %}
    -
  • 1 means very poor, "I don't like it",
  • -
  • 5 means excelent, "I'm lovin' it".
  • +
  • {% trans "1 means very poor, I don't like it," %}
  • +
  • {% trans "5 means excelent, I'm lovin' it." %}
- If you haven't tried given product just mark it so. - Then the algorithm will know if it should be taken into account during recommendation process. -

Progress {{ rated }} / {{ all }} already rated

+ {% blocktrans %}If you haven't tried given product just mark it so. + Then the algorithm will know if it should be taken into account during recommendation process.{% endblocktrans %} +

{% trans "Progress" %} {{ rated }} / {{ all }} {% trans "already rated" %}

@@ -16,7 +16,7 @@

Progress {{ rated }} / {{ all }} diff --git a/src/sweetrs/recommender/templates/recommender/provide.email.html b/src/sweetrs/recommender/templates/recommender/provide.email.html index a31e8e4..58faee4 100644 --- a/src/sweetrs/recommender/templates/recommender/provide.email.html +++ b/src/sweetrs/recommender/templates/recommender/provide.email.html @@ -1,22 +1,27 @@ -{% extends "base.html" %} +{% extends "base.html" %}{% load i18n %} {% block content %} {% load thumbnail %} -

Provide email

- In order to see results please provide e-mail or secret key received by e-mail -
+

{% trans "Provide email" %}

+

{% trans "In order to see results please provide e-mail or secret key received by e-mail" %}

+ {% csrf_token %} +
- {{ form.cc_myself.errors }} - + {{ form.email.errors }} + {{ form.email }}
+
+
+

{% trans "If you have already finished once, you can use the key (received by e-mail) to find results" %}

- +
- {{ form.cc_myself.errors }} - + {{ form.secret.errors }} + {{ form.secret }}
+
{% endblock %} diff --git a/src/sweetrs/recommender/templates/recommender/recommends.html b/src/sweetrs/recommender/templates/recommender/recommends.html index 251a3a8..69c952b 100644 --- a/src/sweetrs/recommender/templates/recommender/recommends.html +++ b/src/sweetrs/recommender/templates/recommender/recommends.html @@ -1,4 +1,4 @@ -{% extends "base.html" %} +{% extends "base.html" %}{% load i18n %} {% block content %} {% load thumbnail %} -

Users

- Your tau correlation coefficients with other sweetrs users. I will give some details later, right now you can read - something on wikipedia. +

{% trans "Users" %}

+ {% trans "Your tau correlation coefficients with other sweetrs users. I will give some details later, right now you can read something on wikipedia." %} - - + + {% for item in users_with_corr %} - + {% endfor %} @@ -63,16 +62,16 @@

Users


-

Ratings

- Currently I predict rating as weighted sum of other users ratings, where weights are just correlation coefficients (normalized). +

{% trans "Ratings" %}

+ {% blocktrans %}Currently I predict rating as weighted sum of other users ratings, where weights are just correlation coefficients (normalized). More details will be shown later.
- Red background is just for noticing big mistake made by algorithm i.e. if predicted value differates "too much" with your rank. + Red background is just for noticing big mistake made by algorithm i.e. if predicted value differates "too much" with your rank.{% endblocktrans %}
UserYour correlation with this user{% trans "User" %}{% trans "Your correlation with this user" %}
{{ item.id }} {{ item.tau|floatformat:4 }}
- - - + + + diff --git a/src/sweetrs/recommender/urls.py b/src/sweetrs/recommender/urls.py index b295917..c8c2678 100644 --- a/src/sweetrs/recommender/urls.py +++ b/src/sweetrs/recommender/urls.py @@ -10,6 +10,8 @@ (r'^results/$', 'sweetrs.recommender.views.product_recommends', {} ,'product_recommends'), (r'^add/$', 'sweetrs.recommender.views.product_add', {} ,'product_add'), (r'^rate/$', 'sweetrs.recommender.views.product_rate', {} ,'product_rate'), + (r'^email/$', 'sweetrs.recommender.views.product_recommends_provide_email', {} ,'product_recommends_provide_email'), + # (r'^canvas/$', 'sweetrs.recommender.views.facebook_intro', {}, 'facebook_intro'), (r'^canvas/$', 'sweetrs.recommender.views.product_reviews', { 'template_path': "facebook.html", diff --git a/src/sweetrs/recommender/views.py b/src/sweetrs/recommender/views.py index f6e6ce1..e8b108a 100644 --- a/src/sweetrs/recommender/views.py +++ b/src/sweetrs/recommender/views.py @@ -6,24 +6,25 @@ from django.http import HttpResponse from django.shortcuts import render_to_response, redirect from django.template.context import RequestContext -from sweetrs.recommender.forms import ProductForm from sweetrs.recommender.models import Product -from recommender.models import Rating +from sweetrs.recommender.models import Rating from django.views.decorators.csrf import csrf_exempt +from django.shortcuts import redirect +from sweetrs.recommender.forms import AccessForm +from sweetrs.recommender.forms import ProductForm +from django.core.mail import send_mail PRODUCTS_ON_SITE = 1 -from django.views.decorators.csrf import csrf_exempt - @csrf_exempt def facebook_intro(request): - return render_to_response('intro.html', + return render_to_response('recommender/intro.html', context_instance=RequestContext(request, { } )) @csrf_exempt -def product_reviews(request, template_path='products.html'): +def product_reviews(request, template_path='recommender/products.html'): """ list products """ products = Product.objects.all() @@ -64,6 +65,7 @@ def vector_corelation_tau(v1,v2): val2 = v2.get(k,None) if val2 == None: continue + val2 = val2 - 3 n = n+1 if val1 * val2 > 0: @@ -78,6 +80,7 @@ def vector_corelation_tau(v1,v2): def vector_corelation_pearson(v1,v2): tau = 0 n = 0 + stdev1 = 0 stdev2 = 0 @@ -94,6 +97,8 @@ def vector_corelation_pearson(v1,v2): stdev2 += val2 * val2 if n==0: return None + if stdev1==0 or stdev2==0: + return 1 return float(tau) / (math.sqrt(stdev1/float(n)) * math.sqrt(stdev2/float(n)) * float(n)) @@ -114,15 +119,41 @@ def predict_rating(product, vector_corr): return None -def product_recommends(request, template_path='recommends.html'): +def product_recommends_provide_email(request): + + if request.method == 'POST': # If the form has been submitted... + form = AccessForm(request.POST) # A form bound to the POST data + if form.is_valid(): # All validation rules pass + if form.cleaned_data['secret']: + secret = form.cleaned_data['secret'] + user = User.objects.get(username=secret) + login(user) + else: + email = form.cleaned_data['email'] + request.user.email = email + request.user.save() + + send_mail('sweetrs secret key', 'Your key for checking results is ' + request.user.username, 'admin@sweetrs.org', + [email], fail_silently=True) + + return redirect('product_recommends') # Redirect after POST + else: + form = AccessForm() # An unbound form + + return render_to_response('recommender/provide.email.html', + context_instance=RequestContext(request, {'form': form})) + +def product_recommends(request, template_path='recommender/recommends.html'): products = Product.objects.all() if request.user.is_anonymous(): - return render_to_response('recommends.html', - context_instance=RequestContext(request, {})) + return redirect('product_reviews') + if request.user.email.split('@')[1] == "dummy.sweetrs.org": + return redirect('product_recommends_provide_email') + # find similar users: - users = User.objects.all().exclude(id=request.user.id).select_related('facebookprofile') + users = User.objects.all().exclude(id=request.user.id) v1 = get_ratings_vector(request.user) @@ -184,7 +215,7 @@ def product_add(request): # formularz form = ProductForm() - return render_to_response('product.add.html', + return render_to_response('recommender/product.add.html', context_instance=RequestContext(request, {"form": form})) @csrf_exempt diff --git a/src/sweetrs/settings.py b/src/sweetrs/settings.py index 2444458..cfcf76e 100644 --- a/src/sweetrs/settings.py +++ b/src/sweetrs/settings.py @@ -14,7 +14,7 @@ DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', # Add 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'. - 'NAME': 'sweetrs', # Or path to database file if using sqlite3. + 'NAME': 'sweetrs.db', # Or path to database file if using sqlite3. 'USER': 'sweetrs', # Not used with sqlite3. 'PASSWORD': 'sweetrs', # Not used with sqlite3. 'HOST': '', # Set to empty string for localhost. Not used with sqlite3. @@ -70,12 +70,13 @@ ) MIDDLEWARE_CLASSES = ( + 'django.middleware.locale.LocaleMiddleware', 'django.middleware.common.CommonMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', - 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', + 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', - 'django.contrib.messages.middleware.MessageMiddleware', + 'sweetrs.localeurl.middleware.LocaleURLMiddleware', # 'socialregistration.middleware.FacebookMiddleware', ) @@ -98,6 +99,7 @@ 'django.contrib.admin', 'sweetrs.recommender', 'sweetrs.sorl.thumbnail', + 'sweetrs.localeurl', ) try: diff --git a/src/sweetrs/static/photos/_thumbs/obcinacz_2_1_jpg_150x150_crop_q75.jpg b/src/sweetrs/static/photos/_thumbs/obcinacz_2_1_jpg_150x150_crop_q75.jpg new file mode 100644 index 0000000000000000000000000000000000000000..07a846d14ab5f262a6384ed7510564a7df0f3f28 GIT binary patch literal 4863 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 literal 0 HcmV?d00001 diff --git a/src/sweetrs/static/photos/_thumbs/obcinacz_2_1_jpg_50x50_crop_q75.jpg b/src/sweetrs/static/photos/_thumbs/obcinacz_2_1_jpg_50x50_crop_q75.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1ba5a8bb8debe040a59e78147861d985d22655d9 GIT binary patch literal 1284 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<Uu7FKpfW)7gFz5oLw zGcyx2I|~ytM4FL_nT3H>kWEp@&{0^)DKN3HkzGX8XyU?+2Ok18NHKyx5tQGY0=!O=*qX?v!}FF=3J56&!VR5ezv-^MD^OGsdEa1?|IzMeQ~I`Ok4B% zv03u+Cwu=h_&?cOxZ~dQ6P$171-r&5Gf&zXd{zC$cim%eOMEwSxr8oVx=>5v_!~as zea3zwX3z4I%G#F4)oBsA`#a z_q49ICGSeV2(0S96#HX()V||sS3ZfnUG$hUe2V&>Q*nOr%nK#|?ycirR?p?pXesdS z%#JAr54dwHy(Ss&@}C-b>&T5g@oPVQqtz$X2=yG3^Z%Z9^NUVJ5 z(%Q22ljlu^ug6#3UMuiCG`j2LmATux;=dd&n$GN5yLe{H?z4wtmuAIoF>AXJI_IP8 zsq#CI&tIFX$?kq2X^&FV`qYotOi9TF0e7F?`qC*;Qdfze)c%1aGnQ_+)RX#vf*n6_H&dAPyGrSv~T z`>NlRg5<6i9-^EXNmn?ZXyZVe<{kv#$qe zVZK=@)uuPO9+V_$FW=+vp>_4dz~hRc;kq8Hi+OC`SQ^Dv9%yQt+Q+;3JiGeoTYDG0 z+;QovOlD76S7|=GW`1-vwKDt2CrzbDK@RrShRgv ziN>O?Ngkh-H){#M@krf1Gm0ZPPeoHpZowtfT}Lx|m+R$k%xb!Pkc;t%yHg1J4#`Db zynnZSYhAu$-y=Q8K!ZmsCVA#ss;|wc^5y(fb^VaVj*UlqKR$I8J^!HY#?RT7cPD?8 N07l@;Wjz0H0syB14wC=? literal 0 HcmV?d00001 diff --git a/src/sweetrs/static/photos/obcinacz_2_1.jpg b/src/sweetrs/static/photos/obcinacz_2_1.jpg new file mode 100755 index 0000000000000000000000000000000000000000..02afe5f15c09d03f2f7f0d330c38b965ff36c3b3 GIT binary patch literal 40684 zcmb@u2UJsA+b$X_iUkYE7LFNonhGSJ1rZS=AiZQOB29=OosevG3sSQI0Rbfn z0z!aD4K-1!2pFYBYDnlc4N^$5a@PLO8Rw31$GCU=_d9pV96EHZWX-we`@YZfyw6hh zOEwAFck{Z%b;zbon;?IHzaX+v$W_SZO`HDt`CrGDZCn01wr}0KWt-e~Ik|tvj-9)9 z?${x}LrzY9kG%Y@-QXd&bFadl-FyG}^FJT*&*lGI1^(>bA-Ch7GycCFvd@tHJ2tIt zD%i5=IArtwOsIjWXz<@5Tla4}aO~XW?FX&z$sG?=JpVN1{SNgj6uAASmxM_RW&fdY%$=Tz9=R+@VAKxdzA)#U65s}aTdJz-* zGA=$f?Nxe4=IgBNy!;OZg+(8WODe0XYidb#^$jhpZS5VMU%S5b^$!dV(S8k&Fql)* zGqZE^3yT~sZ*83~5Q;Ybnb#)Bmj5}e|2?z++r0LJ^V$qPgROG^%xlx;FmPEQ3r9TK`qRCcJTc)43}~1_>|zZKIm9hk8Gc>_?M9 zCJS;8_6_%qnh%zz!{dF9{fV8wUTF)+C%i+GA3oLpLm)<@G3ms?623`RV5qgSmm3B? z9c^cZW-+kBQ}EW6hruyCv881ga7x|DRt7oZPZzF489jxa@P-~Zv*-JZQlE{|f1~MM zZ{5(Q{#HeZlhI7#xU0x6o?9Bf9+LECcF?Kx&s z)q?Y68H7P}j@f>0D6)z@q0Twc9MSNbWeW_c+`A;uX&_GsI7oh@O1p%1-qn4{p%ris z**Ov_gZw!+gB0!wmqA{_y{QL$Q!f=v|6L?j`qK5dvP(>Fl-M~tna~?$5FG9Pi}Vyx z4f z=3Q;jPsjxQI>}JXH3Y*eDK*FP{fEb|7F=ERhUH_um=p_vs{abjpW;v=Ix_ceB^M(xKTRZVltb(98o)6eBVFBy6@;0*i ziKqQ97-oww<_pASYZ+u)K>c71!A*{-GdJR|d-%SUb&8G4bvUmdHGz{7n`$<+c6SG= zT)OZ8mE{zr(+$DC>>VQ8-vSWP1P+BjWj;X2h@KNJVdcaC1 zP%ncJWDv4;Pdg*ky-#Ze1LY(=GD9to1&earr*k)=GwD_iZfbMG`qpL?$Me(kuB#y zN;Uo=hGvC@wNv>AW8hKO(`Emz7`L0`hKHM1C58pM`F>z^#A#&TxT7In{sfDlokb#8~ z^3?uS@y!pfJQ__B1tu+?zny+9c~pOI8xNJ|HhPXS`3}prJw-kcUOvU>Y_0R4a1!ID z>AttZTJtlHoYs|8=lo*V6XVd<%nqSt!I(&p>PtR7bhO-H&lTo%p9g)7 z=;L6NLE}yh7e^T+#ErDPz_tB*jl}SAqGc0_)IbU^s7>~!H2fsol|i^v@C>qVO&eA)h+gsS z3lPA|J~^r=o+`O}|CPfv+#8AyT&RVOA?weF39{w)$hqb`DbeubM}g_y$B(Pd>}+Xd z#pGTXsBSic^@iLF`q2dyUnU4vt@>n;ib{$ecCv;dw}Lk295mYk=HkZy5JEy2N9N|4bdc+g7{Kfm}ZpnvN?x2H>tdGl!4lR z<@2ancm^p!1~FZk5osd3NDe6y3j1_b!PlXNf~x4=WXgt8WM%AmpLO`*R;E^LnabLD zfn3NUZhkesAWsJQsz!ZFuXo2z8ibO=ftK6zU`g1nXl(}hPlgf~wK50>l_`5}nY0y9 z`vL1^>K^$t%tz`Oj-bT0p8(yBhfPxLzh#hT;CFwy=`g8=*L{js4u`f2;%fQaBhcmW zZ);#>GtD6h{J51&?v&%eiH3%3mmESST?5B6N%W(2bLSlB#cceu@B(Jvw}{G~_eDq_ z%Mb<4pWQSwQS|;o$xV)K2X+5McvZ)x=I=EGS4o0KB|0NP&{UU#ah#GtLaS;JaVkiD z>@b>zXRUGp=Wpz>CqCF+g31V8eVx02JX(2(Y$*A66?--Ao+dy4N&OH!{h+s7&nTs# zX86(_o1lz1=-&*^ulf?jQ(BkO4gAOJjfCT(9QsH?2=AJ>Up(j{zHbF%99FybAevKY zQ89&LY1Vro2;! zIhc*{`bmLMCW~Mfgl1<9BgZ=1H%?0$bv0y=n`Sb|eM}LsjZFR})C6&Zp^*8*d3fon z#bDuY;=LbCV#lR}*g87<5b>)^+_|InxVx#k^)~EJxs7@YLD>Czw`vDwr5}_n0y1Bb zkj6xHz8t?t`YD(=?DhHkXR~N#(sgAO_qX`|VZ0u~lg)w%)!Elm4nkMQ(xe4EuknkCmV@3LkNR#~#shtu&X`<@KqxCB;SYb_Rb zw3yQD;eFTYNyrKA5b`Yy%O@bO~{qrN4;_8;Uu2*QdD3K-Z! zR+IDtPK!fG&DEUq-B20ipzG@rOkYkM-&Hf`Oru_YVsT~UhN;2?RU!PD>BC;lI038d zln$+%m_hNNjHFo!32fjyFyZ|cI-L!ldWK-y6W=dO?xA$ZQW-=OO|bX3c!a(GgD5{R zcr##O(Ra*0o~#N+!-%`{I2!unz6_H27iEGVL57kWXs~~|v;3n9jmuMdNX?*wpq@w06Zv8Ms5*(uz(d)~PsXDBp&oxTQxb4Pm!*=~)<#f+c2 z^la~+*a@B5tdA}to9J&7Laq0tmwiobY>NXpV;=(1KOemZF);#P5H|pwIRb# zTT2G-dR7kNbA@l)ZN3IsFi%n@dbwA-n(19yC}XJMqH}rv6y<>1qH`k6XynCOuR&X% zgr$CHtf$wlvxN#VFIoIsL?J)Grei1Vy23Gx`(peT_ZJ|7>dXLk4;)yaM4v`4)~wYO zPN`~o2$wWI_qQ?a)enfuS6SohJYyLoJ{ukB*8Dw@>}>KoVFke-YAynHZbJF_iLbls zbf)uZKj$37qGgb###$NVv)>GKANp=u8+O0RP`HGUgUXRkjuI$BIq|=Bm%BJst!mnt zbN%-y$rECrc}{ecGHFccZYx|cn8p;hru*11cN=OFLlBuiO%FNR74d8R;!?_T4W@VG z28r(zh|)(Xb~P9xMBatu%isCf*Wh#dSwtyRe(B|5OoJ9z&Sbp6|&Gl^$>k;QW@*5 zo0=<+YTJlJ{@Qt;nzf51gOsQL=xXc{`K1r(!ao_vjqfIIrSdSmX`FOqp(u)=w)bB5 zvUELPV$yT;(m44?4(0hASh1Zc-Y9aMlQP-WAywlnnj~(-Hacg!|Q zoZBy6f0Gw^x4^TwU!pB6W+I-!PFi`j2y#>b_tF^|#5$C+;xIr~2G^+62gG>`(tO5> zdkYV6Hdo96tJt5kPMFKhILS_Xj{%d9{1WtFr^}|>0n1W3^(jgJ*}RW7sjuw6-Q>gm z7JdP1qxMjfXF;zQBWkDqhb+VB6688X(2MSk2%H_WI>WPg5~5f2l`8n)fk?fcaWl3X z$@~Y6eEjjkz&k(o67yE5k2T`3c0uLMuE^tW+betBQ^dQ&v0@K?zYzI|{scH+X#wKR z2#Q$qai^eSdH8@sIap{f{>urAg2%*3doA!>QbtLcNYyPFop;(PMopm{O#R;GIlGxoH!H9VEtKB7C9xoo^;Q2jk4OQdJ(Xbu!XU0M($@hYWW0r%G-z% z*Y4=YR4{vKq-2fCAXkWEIN_*S;^c*@5c{;YRLkRFhlq6y2iq4b=eha2W_8lMJq3PA8@>t0;c z4Q->m5ExRpw1-sSMAH*TQValptNlTmD{&k#N`P0+V8>nakINvaN~Ctae%#$;YI$~QcwruE{&*FIxb)5LI!*7ko?C$* zoGfrRXWGA4wbb;Oa1q({g+G7P@SovbtJobp?L9Iouf99sV+^=SzLky;M;A z$gctL+!F$E4tB24?|oBpR{n77+2TiOeK_P$h~t`-nmOvkHC%6QD6;u!9XfxN7Q*QVcEl09VbJ;pwtKT0=?omsk8ZvOn0WXE-5EzN68GRE{J6O{B>C>;YLx`FfM&#(3zQd} z!-q^64@K_=r_L@(`hQBLS0)fAN;`onlyv>>B(R4PRPNGIVc}v>hRbd3s&z_+kFNli zOlo7L@o2YVz{OH)>|^9=7DL$8DwiWu2)Ki9o3b>Zp$F)rR&oU+0L{YaCvotS;l;Ty#rWsBh7dj+bb;>SB-u> zKH(FCT;oDFY~a4$dGR9N#@K%b1LI;$tlMe=FK9{CnqvXt_I`PuZRar zdYTtO7S>prW>MInM#xurHGWD*^F2!iok7`${vCJPOy41nrz^Hwp)0^q^myzpK+$s2 z(&g*A+W{BDN>W1u!f>(Ud?UIVE5J4*PoZ~k=J@WPG8A}itmZHoB(mAB{m|0A$C-zS z04_Y&mnh-g6J#_fUARlS1lxNt!!zwJVYjBa>VihCUxT53bCow6%=Vif`IbdM*$zew zilRYz#SDBbXWDluK!+Lc~1QfV5 zD2|;G)rdequr2BnxZh&hC|sz3Sm12hK@}~KWRSRWNi)FdtQQdz!!ICC7R8a8cMeBd z7z388Fl(IDYmAW6)`=PMeB-AKPP}vJrf~>&qS?p7y^|NR*GKzZRTUsbCL1J7=j|9d zxgdQ2$RL6e=lUh<;eBJ*DXUt7;*?c!`eT>U3JJJX-lu{z=TDo!zD`#af5);w6&eZq zMcac5N*(U$*+R`rrS_P_q+1@-}aiK`M>f5;U!P0JSDhq|GNVeJ$4rl}cQt z8$hDOlQGTl`fJ_oTt$_2b?VQm`T1_CpQulmRW$AmGZ+kBY7-j_zUax|nadz1!>WGR zd4s{&j3j7Q;HuKi8kJ^eKMrN_iShycL8Y5g-^1|H@|e+I!q-=ZJWd~0_ss!|W+B{J zy}1`v@GVr}pYI+~JPVdP?FotU)O8N(Ipblp80vw=7=q#;?U}2&n^p_ui0+G;>Sx&8 z38|zQzJM3o)$Am2q37B!9KN01el@SUS;366eQD3-qnIhlBAwSup!`@j8ww8hLcFbg zlqO}kcGMS?4N_joAknZTJ8H~EQ92M$*RYMI3toiXy&2r^rqFYK!BQdlm40#UzAywtnHOAaFnG-)v-}0WK!@_kOe`V~P67FVdJrN)u|> z3i3k$O@j?T@lo)i8xmddWuM0j4T(R!F(+%yT#^h|t&$qWKhJ?guSOK8wOTMLF+kiQ zCA<6;hL|WCM~UVfnU5>VO8VRsN*FMc_GufwJ^z(UV?t!%^q_iUw@zwN>Iq5r?K{&3xS0QaL@kv9Up_tQxZ%o3n(#sKT zDh2C6SAg!ic3bRfXPB|;8SLt+hZAxH+88o?5Y)DvC)q*ygs?~5xTdQS%g1615X1dR z<2j9KRkYfKyj>B$;V8{Z_TLe#A-g906R91N1f)-_+ruxmTDTc!SFB3lBSoE(-7E(a zB}TL*Qz2fb`t9+eW9>X4aRckxyCQHPprq+5Vg&SBy~VRy1fvf`mq|hkBB8?EpU0&O+qH$o{#EP zu;~k#d1_SCT=yUsA>8HAYvYp^{^U;f(Bg<=K-t^8Y$Fluo}l=8=|ke7;3@8{fX%+Y zjoelqkw)((F4x2vUb1M0$2VUEb~1oCaRmAjmNju3|F*QI#T6r9X@+4xz2s5?h%u#< z$BVb|B3&IT6r=kG{nX8iF^9|3Pstz)mJ;gl$jLl18mRn__~k#mRALGO^cJ)x;su_h z5T~|7(g;7;s@AB`c&pJ9F5nvx$4*PYWb=#-^l*hs3|JfoYDtP9N{+91eq0vQ?`PGe zP==G;u`BP(ye+Pq_XGy)p?$t+=BE%fLu11=1LV^0V7qVD1Rk}+qz_@NJO@I|btADG z!>3XO?^*ZrR?ES^H@{N_=tn2xn*D4DT}KU0y!~NcB>yS>bo>GVp0!NhEpa3pu_FUS zthIq*5I|DR%3O?b%l?;7h&iZK^Eo|nAMt_xYd5NuUa);&&`9bMu_UM4lX!muHTo4SIqrJ(s&mZyp`l}kwm#a%h ziv&vtySZc}6F5B&54gv9qzeM9sPV zI9d$i)iUi<@Gu9P(wdC%H0cEh0?Y*lFB!J31n z%_Ak1V2*cag|e?x)SRtQ%;8QgP-~|@MNhO}J*vM`S=$e#Q^m(9f z8b59*MSXPWg0t@se+^MP+|?)?O015$Rb;Qp=u&vTC}0X2i4bIvYg2D}w)usq4cnp- zjX}+xw?Di;>z&IFe07g^=FF$M7s32!+j&|xsI3o3uBKV0IvH7V9h}7fqVSDY%GlrR zRk6&d-AKVmHK-5;Q)=W|)`dReE8+NSB&!VegnlhJ>A5%fOSC=g);luDUkLtd_V)Zn zz(iv4M-QFPQHnZ`{?T6o&x(HaDO`A^Fj?t1UfKv3%B?j2S0QrxPm0igUGpHE)N%=% zEYbZqzfsT>mK{Lw*DM&&5qKui{B)=N+~c?QMe2#Br9_ICDo9&B_|G_U&rpe#S3L~H zsvz0QY%~((r2!(5i?oE>W$dtwlpJd0o1&5^TNoUElGj{#!e{T5;0i5jSRp>!4isLz z1bC};;i}ZH;oxjM{5R@(+S87k*+S2fHShsm{uI^!KuR4i>N{6t%5vsyIt%n4$iMsH4E6>#rbC53X0Q-V{`t(&+=LC{ZSU-NAjO^lpf^*4YwpneB zmqGKuxv`Nkbu<0*D-Ti-yFWN=Gr7iG9jDGq#Lv$6bSf<8TiK=xJr&dOZ_7fa0ekok zUGnngbI=+nP}BQ#4lA5eBN0Z_S6;Wo4=5Gqz$?$3S|ft$HCb%yw7 zJ7TAs^PNy^K~wf%;!b{S+98}!iy>{`|fz{u9N z@I|k&Zic#rm}2?X(s$)Dh!-+3QtM@Y1gzUXD8+Xlkvca*={_xk(BTFcYPeUsGd59T z1L8&KFHuPu@w4niG&T zqS00USIU6%DL@m&^yM8dI2F`xjIZ;kD&2cta^e14ne7YZB!lUkE4rt9$1ySpoA%?%k>Y;?j^6|O+P;$O z-(GSqt$3oc+^jI5i15Xpa-S;nRKWGQdk;+@o}1j~x-YnFKhXE@;anO3aXgQ$Le_;$ zL2KuhQ}Tgf)B;xw z!4Xke5{bpg`_xMdWOek#LExZp^e%g-(ML16B5%x~Y`hV>^|=hC-CbjliNAGOr2NTLuF)pa>ArD#@F4Op&v2`z$ONTZ9{$jx5Q5R+Cck5ET({g z7iPIsMz0XK-zb7r%E_}jOM-*U7d0RuYoYG@5`wGjEpYunUlsWyUkXwHP|+mgLmMCK zq098Rl;6$^ud13W?U_3S78-xd94ZB;5ptVPJ%B=_i3bY;p{!G>{+ZE{6={`~@B;)3 z({Dpq;flWy!}~^+aIwvfFc;@n2!=R*u%M`G#==h9X{=Q9dVya~7+LOTh@~m_mx~Ee zkflz@Jt)L}n5T!1=+M`xQn#z`zgCV)H-3?l^3o!)(DBmxRM@ke*{X-HQX}BUr2~M< z3_1cey8zPHcQgb_)slxQ#U2_JHAMA=&IdD<7L4&_^iQ}rY68WB73)ww`r7-GOU1f( zY&uA`9Ec9xQ1%Vffm(`Kb$GOj1#}DsEWg5rgq^7ao0x;^rs#D$pK7fA;~}l3!}cnq zaFAMATsBj*_X7Lt|5-QlpX<<|;=2u$V4gj8!3<6uz_(8vs@*5K_EV>}t(aR_C6AuC z3KmBAQ_7^N0yMFqFx@coqm^IC?pm7t_n%g~i)*ItaVsnFOeN`g+MI&qkP)!6C-?V0 z1BHZ%ouB?*3iX*4#l_;E);=lXhjy5v0GTJ*+wtQ(HBEXt_%qT4$78+ zGaU}I$vSmn`h>4==?=*o_dWf`7$``aR|yHHdBGLS*k)(zA{D<3Eu;NjuX{!+%aT$< z?Jcx55-ndYLUjdi;gbeI-0{4U4#SK~^Ec3+^pasZrO zc6_Ctda_1?`N*4lpJ6EdwhVKubvRh)8UjX-c1i!L$!KIod8F_n%tg;~MeT0LRaX+P zR4~{bzL5O^KOc~c|6((Uv#Mo|!bZXUpb;Lsf|N(23izLf)U(Wsvi8FHZ=)&5TsZq$ z66zZV*XFMmivFc@mcMbY04dF;TqU%2Xxpbqk1+;OeyzVkH=gJ=*nk_<;T-?}$m(Jh zJbpXxPq+?z@*|#oqf7sy0X7c5tF))~n!!W`qcI%thR3byTmexNoav2a;a6$1a~YH` z$o>!v5-bA_Ahv$>Y}f!9kKKJH^h4BY)8%)g@4jIVj=SgrCSYdyoY8Q~F6xFv{8H%Y zm(Zfi(H+EmlzdN<#={3X5nSn_>GO$(11?ZG{}AOF9wzcZ3U<$Vi$nM;KJU4s_iNfo zIY*Ifxr7sJwTfnZbR$J7E*Vv*v9BXJd58$kwliTS%dML%l`T{K{F}1Y=Khjcs5KXT zsDO(@g1Ge6OEfBdJMb?nhR(e+XYtWZ^hGBbWKBh|0>9&CGk#R9VLF}lgxA$qeEW8i zr_b@4Udr2}cf@d(-+iV5ckxAg^W8^}2c9*5FPcPrev9D$C45^H?qR{5swbnn^`xWW z4$=onz)JLJKDZRBCR+}@*wYL&GIuo&ASPVRGy>1E_;-ql+TioPFbcAjU6i)OE@+N4 zMO=%b02O{~_jT8i-0oEed|aCqB3(~_P`F^M-8Pe;n)spQra!C1!e;~e26==snF2e; zK9L?$9DdaSvA^A)mvhQrLa3xHgP-ZpLw}HFSr=YlaV$f5SOdjvdIaOH5J!DL`KJGp zun3Sh6GN}~2VgY9gGL{G1Wf{tY0~>3djun}n$qcfufm^f@kZjo=-q89hx_Ky-Oaf! z=x-o5gdjs2Bo1DIv;77Z@SpUkK_7TXAV6jJ8(0pCK}t~1bI4l{g&&`*cJ}H=vd!wh zNb@8Q69mx9_L6dSV&8@YbgVo(u`q$^#2y6!+a7YlRu>ArjtX=k3u+is*hJ}msVXB9 z`%94}=?8J|YtYX074z5sNxuEBYiV&0aejL~_kVn+&`lSfB1-miXHCH!+)3Y|U#0JG zhNeP_c_)8Zm0;x!ZT?HuFv&ZU5zRjv%wr6+2alRYJ+v{>1OZvm4Sm7YvAw0v>W2bGhrN(v!P=tNQ*| zW``CJ`KtXYA6f>B4_$rf-yE+J^M-_s zhG7}LEMSl1ZWW+Q(G8kbio+a0o4F)nmNFP*=wifY^C*6D! z?B}ETW1apBHKiii4?aNC5?8C~1(F`ti>?O-{e=gjFw7pF!%||9ZYId&hmkRZ0)gaU z7=Hq(;=@LpaQtU`1HS8On>A%4L_4ogxa~PWlonu8)0y}IOz~u|CE!rtnN#(izs34B zei5zXh;}@8idO{KPhS6MUDiE$_F`Ccwb+zmVm1_JiBUu{# zl2L^C<9@8XV1!+vXY+9yw+P$S?e(DiQEl8q^`WxKaPuKtZhD0SEb;Sd$ zd*(uQvGS-TGzlG8WKL*-Pwy#$)-Il*k8{&jp&JXef5Kw&C`VwRp!ua8zYlZ%79TEW zvd53%Zy3h?W3Yz7?_P?5hkbjB0fq3V0p%`W&~N@PldH{z5Y$V!l8K9N6&kpTv{23{ z5?7ej9BMiuj;rj+h$m(Z-DUF0te-mAEtIp}=Nv^1;WwTbP&|2FEA2`m#3XzeB!FK? zABSX+1L$BP=rRO`z&b1#jK0TyJ~dmzrnFl7kT#NuOc_KASM6(~3sS4-k{QaR9a~=# zz;J>`mgY6qQTkYHSUhp_>?h~zI{aH3VE2h?EB$0pY`$?KrRd-Ah0-KlZu^rB;)>hU zkpNJ^rAyPR=#t(bW>Yxh=Iw#GOLzvz1xD*F-+y+hu^RAL(&gUTsEilMBSyMADmoj* zHtq10j!X3n@T90VLqz48kFpHHZ_h{lB;0}~A2EKJUhmr;_PC$@Xr92B@Y^wd0e;pG z;{$d4i8S=Zg3x+%_?Fv7YI@DJ>@^?32fb3fa1w+hph;}R64h->XGOPn;FZI%GS=@T+p4R5WDPob2CE=c;g)rdHqV_ zzrk(gSIdUBTb6CU7LTQaI?&W$n}`gmN_yWuI?^AmU(h=elL5<>RJvG_x{KHBamfOrApogBYJ_eLX=p zGl(*QNMGtJa6jm9OCmm+=D`kusrmVz6ovSO2=VXW5cp*2#A#v3hpPp`Zc9+kYx(}` zQ8J+Y;<+^l`mBu5sn}*NEsAp$*aZi(V+)KEZq(vDHd0lzIy;E2E1N{I{IBb1V*D&P zHgMg!+WPT3U7Q2VrRn&QIq69EqT(n;Vl)=L7utS=o32n&%rh;YiqOr)$9p~DY+-H_ z#2Z*jk@ig)Jez?+zl35u;CutK9tD>ipz&?sV6p$e*-H%2WaFOa8W#(SR?An(Yj*&w zUNn4^n1w#ah+?SF{BB{)Q0ymkk?;J@bx(S9u? zaGtbMwwfqJF?AIeYa3v=KXPVsnYXZ??_v*PE2}s4)2PteB8lP@LwWfqL-deCdCBzm zc(@e3_j6fCKD=m^$JG_v_$!IPO|Z=v465WN2j;lV9GLdD2LzaCerQ=y%+B-ozrGR~ zy^02zVL8@FY$r0BLcDCCwSjj3Mdw~AzW^H!JfbNdtgigtDa^`Y*&tjtZ9v6QV7}`B zwE@rye~k=!z5WEb{)q6>RInBQl+j|QH5l`O9TSvL(;5c8qH`I})E#-=hW7^vrUj*5 zx~v_o{wPh{XN(PPqVx5nIR=Pi>;e4&OZX-F%IO3s`!-#2lg83rW{FL_@mrgY`TKc! z?Q00PJA2m9KLSM3m9$xyW_Z>M#x0HenXnUiP3k{`XEQVXeAi(Ku|iD5tFc*;kJ&J} zjODqJ8znxC`2ssEeN!E-%Q~Lm%+ci_t)Sg<;&WQ#Nq(aja**H0geFK02&eBh$c{ zd6Q>js^UX>cs1e)*Wnz~xJof<6cCj`4=nOW4&k0)qx9`V?Y;ZPTrH26T>eem)8ofA z2js!*yUl?k*8x{^1#KDugeQeUd%D2kQaYtOu-J&>k7}x*jkC43c?c6!J_&D(oEx&i z?sgE76R`DfMCDO2-#!5&Rf60&ol)43P$UiySDvhWw-K6O(uE~}x~>tJ*=}S4+i?GQ z^LRwiuX!pq&cvmlIrFdTUrmN-=p@i`iU(QSCS*emSNG4UWE#SJ7)Upw>f?Cb>e%YR zJ~N<%Qhov3;+nbTH^jcTJ~|w68YjTbu(VUEvZlH^$9l&{`#9^O7gy4!Oogo^Uj;Mt-d*vq#-9Q z;OQq8(UH&E)fP2s0hOXaH4g$V>kX@76n#dxz(hU+wA@@;FdBnRM#V+rb^WU&V99;z z!NPtfu&~2kz+QC@>(2=~LYS5ROGv+kOedBZ4llkm#URHmz}^T^JSa-zMbzjAStyT1 zr;|=&t_OsM!V9Ux34ET=MU3?E(|sy&@C?HoM32~Yt{SLfD3RMmlu66_=%ryl(Z7F4 zoQlJr*u^YLyB4QOT#} z?p_Q6GmdAQ!4IJih{NJAhoz(r_d{-dU4>Gq%WdQz@G0gwfZ7Z6V&X8J6t*=y2472l zsz^ROAku*qwvqsX`~so1*dv-~P3f15ksyQ48%U2G(vDLddLT~2ekP;%1TKXS zZmwsBXfJ72KzYFO8bx?pa&GUeoB5Tbf^>Bmq_CF0WD9Jm$BvZU?YB3di@+&N{hsvg z+#D{1(u-}ypHrps1w=tHr%O{3cK|I0R%|UV9&Zwx6rXlgUrsd=xx)n+#S+JUiN(F6 z)oMp9&_z~)gBnrU2!0q=zVB|vGVc@T)%3gZM$tiEwSQHx=crK;2Tp)CGC_Zscrb|C ze(3zyTsvv4G>0!rAd@qMUgA?i

5Ve{aU=7v<$NqIS6JENjBeoTt+WB8v(pHr<>f*M9Vh;wRoQP(qqvBFD{0;?bl?76@A&`fFXs zt=KNuU$P? zfi?MAQB&eFLF`boT2n`Ms8?;a??10WT>XFVMVG^;Vmquv)u{UZ%U0hTn4*UB%NT13e?+yIHqUDO6eBZ!Y(d77YEeg2%)4s)wYe)w_ zsDJQ7?yyjIa|helA@**qcj}r_0dueD6~R(H8{T4^^zgfC93w4+y73xpQs#lGAQ9-5 zLAGQvW8+TL4dlA`AO8aT8Df;lU4cfDC&BQr2Re1cHt4`Q&ZAFVK9kVhRzR{Fe2V3P zPN;2C)1ZDDKI>+CuHE$b+f4fn%_X7E?XkvfCJ#056!D@n9i#zkuv+j_?gL+I={w0s z9EHz7&=gO#X?%hHXhK=v4;pi=BzEgn-#Xx{wz(IWJ5lnFlD7XE#5Uf_mV1Q_qI?g~ zVw$)|W!>$mNNp-yTh6@Jl=?$T-S$_0OumX@dR_*efbn0v!un2kCO*-;r7uo;gI>9f zyY@y>X?ENo;_l$Od0x?u#@fUMjgK1g6^%DJA8zCf<7e(#J4|#~MqF?fS_1M!vFC(~ zCiM$-tJU=4NIFS!H!=_2TL?n4#v-YH$P&;SttSH|{gfWTgC_yB)!pR5_pdAj+V*)$vA> zMAz*EK5+JW`sZ*YXk^!6kDV|2`a_aP0sTB4EgP(K`0%)ZNFR5Xkj8jZPl&%v7b;!) zSH?Y)3&rrE0`Ju`s7Z z&nx>)yX$qwtDMS9Pz51b%-~n}7ds-y78;VCm(~jGx%xJry9G{;=x$^soqa=BsC`QY zsX6zYF^8Mb=ae@qH4knICNb-d%(C10#CWaFN$#+v!!FJK?m`|GL-?JS<*5q+|o;l?y zV+?cF{=F4hdSKma)lI1vEO%|teNCrO*ux1uA)}X0fwqMcuzPMgQNK()&)Ds_?`?7O zphaP=Pp-eOUcPnT$1=@)^DOi|DGsI#{MhTsiG6BfR5otpQe38VmcruRM@S-@jN75? zYpiF^t$IEg6DQfDSowvGs`FZm^Ib@!wOe3LLW9>^mrbz*iK7-5rUrT=p4t5ZdMEa9 zwihsnic697RrE~%`i^76D#V_i#CTYMb}M-=+M!PR3hRBjbTMP(5p0VP_e2d}j+yEu z{S5IZyOqByaS)RHLxB}cQMXF>VSBf4z`#}>s_9Y|j5KEwL zLpRaJi@bA4nm)IESI;jxzgKx|U09kji>#4brUkO+I#tRB4uz35>Z(HO22HG)7h%*t zl1>b9C*4{@$LX!^sE^^P@WYQ9($`Uk=|vKZ#o1BQ6Wal(wz#{txpT62h1QAM2GXZo zPO2Fb`x2_KLZ&ee8yMHdkG5Tks{9ZJHuF9 z&+`LikVYIsiGH{+H7XZfT)p;-t(wqvHb16|s97Hm6}_0Zmf+bJ{lGN1EMVdkuj3TY zh2L*^Ao_sFWg-MQEC)(Bf{~jrsU7^>>Qim37qzil1gr!D4+33pff2hLK*;#>ee`!* zzHc9vkzsN-J5f24#8(#IA53H4#k)*CP@A3GK;5UV~_hiyRm|6-iFv`!Gs@j zchh5;V>6{AMGUOmL^#g1s%Dt$j$WiM5AL}Nz}2)OpmQR^IQE_l68m^*LLV5QNWW(m z1k^R80ANQ!&$dV@MDc}<`@-Tz=NGBvO*Z^F>~Oe`CRPz`R*$THB>n+P_hB632z;2w zkLt&I5}!sYJkx)T@!RF8oT@vK>rc@$K!YK+HB{*H5gjZom)zszJM~vEl8(17!&FlP z$PZWE=Ob5FoTVqlh!G;1wuI~ixdKer@r`TH8~y%7qbhQ<3vWRnfZt#oX=bn|`h5E` zKpVp|B!2u?nO8vsmSwlrH}y)Zi(E(|@g9^V86$Wa#MbkrxY6p_XhU_yp|V#xYZ%yU zM==GAyvdMewO7r3d4q?vcWGrKQjWU~3VtwtSr;x^c;j@J%55qa!%-^<9NtZ7CVBT_ zt`_CSZ0@iL!O~7lqbYDZ<-zxV21OSO!Y?hgIb>(PtRcmt_6t*IYILq3HvH8CMuA1? z$c6&HLrBzGc_F^stCW1U>FA_S_C%+c6h;qqqKqRNYN%u3I(ek<+Ut0*YXitX)(C1M zN7SA^R2DZh?txe~6H($e3Vuk$iF!rOB`vm?6;sJfl}IOrsWSIWQVcVX0}we6LYUBM zg)c%$;D_kSE_nY+nowQz0emaImfTv$zG@bzPe%0M)lXXhM1wEFOorG@qpNB*=1@r5 zj7T*E^V2ywwyXam%Y&EsZJ8@u`8BZoidBYQjlT>t7NouhKCpprFbUWu8`;rXi*4zPIk zMEz`MEi(14NTuPoRqfB<7bHQ4BV)5C9)arl#-2#lbBT`!Gs*Pqzj8o#1p_#_WUM{W z5m#IKJ@y-t>yx>E(8nMloV+%OD?wkY_#{$8<$xN&o05K9N1rIW2&B=>#E z)qBwIAm34$l3e8+3wf)v;_p6l_9*R9O7zC45X(lj(-jRh)87<(3QU&b3~6Zz-%tK{ zo+=4O#*JRpDYmi4KE3M7*@7JN=Y8N(<`UtUo9oy=v6Zl9j_-{CtyrYu_vL`a?i)lNZPO%tSEpY=V$_n}B`yg=SStDmqYCl0q|0D>ZSvpY;Pq99Z zsA-qz`?_Gz%{5`eI7+-;${K+mnE?JT4UNuh>Px4ItNLsMyso3^AAp;wEuu$+o{RnT zdM2_$&{zhYh)%!v@oI^4DW7Yu9{{trty8H-o(@+BUo&CkOh;Xu_!n#gY;b`=P_vx7 zS19l#w8a&l{FGCrkZmM`$O8qFEY(WaVRHqXpMuj`ngIGCcOtb4ezG^*R{1agepe3I z05nyrhbAHAOUdVi@+`BaO)7|qQ4qtLXd)X1`#Phyj7BVJVC=`gw4&?QOQYdT{EKy~ zC*rfTw(LFMKhn8#N)lbTlnrj-!NaFC`eDejED@el)v`frWgYNo_?|S|It9Ai1v*h5 zs-&V3xKLCTkoy1y1&lSL-xh>-T1X3l&EZ(4+Di@ya6h@!t6LaFr(U-+zp>pR1mJm0tdwNI9sK%jz< z%HEL?!hS@SfQW2KfI!$IBw=Kb;d}exJ&ynJj&FQ{BRsjE>pIW#I?wA~uJw=jvS-Yx z2KpgLyZ{8Lrc<=|%oX@`?@UHL7karC)HT*L?A0fx&oQ1wzi-9Cn-INsUGi)AkGKQa z9KT!L+z5((b@Vi*-`S%B@@>u%56lRKP>YMXPg!32J)hMp#WeD0Rz6D2q6YkZMk((2 z$41?TJ7wX4qO7v-l9*^oL=R;N!#%!@G|f3aWl-XqQm@G@cw9A-KKx$F>>9RadP>ijXt1s zkz*W=l)pa_A?51t7;w18NG)hFu^UWKUjF<4X>k7$lmH@B$j{Ij?}*X6Y}(nHT*y)f z>_Nr<1D)4ffY-+lrI?kP1&OzX6@V6@SJ9$lcRBEEk&caIA-fuym%)J{`#EFH2@+Ms z6U9Ob5uvq_T^*`!3n1F0cPoYnls_$?hu@Aq{AuH?vD5@V=%yKxEb_Wvmrx^#NEg5y zs-VxN2FEwojW9rb{M;upC}T&nCqwRi%c5}e{=12(8>XklEKz7HF5yDK z3y)kR|d4PT-+L-yEc%nV0sVe%QLu?!iIl!x7e^bCD(h$=JF2F0;>tQy#aYj&ReH zL0o!5ls3`8hG!Mvc0yceC{{xL`F0iyMqbddEcKT7rwZ^+n!OcR)`V9e6~N zy(F06-|OcIfjoYIPLDDrJa;qMMY0WVeXNN#VXVnXx*`!*vY&6rn3b zhHhjLmn1x1mVdO7@K$(o^zFH;-YFRMo(Xvi-h7`<#3(Z=?^ABp=Y?qGY*R(lJD#3h ztCfi-v2`ndVq8du-UhB7qsaTa+N2F{bb|cU>OdPD7s>0Ax{r_!kEDI9k6Xe`L**bd z2v3kcVJ2Y70p6EA-{az@*PKzcs~O1FOq7;adbh9)bEM;yL&m~^E3yXWPRg+8yBL+* z$#(<$d!OTE#$R)mVkI*Cysk~Bh+FR^VN+hIVpmWRD8SR^9#xJT3sJ|qOIR;kz)2Sx z&v8-Sc{G{%5?P-0LeYezms>~qo}~lcUYfpWlcLboxY(}LOl#Qrd$ysCN)jM0g(GI* zSdntgIv0U!L1lYpYycyu4l`#zA1cM3D`ah7MDVTWNfw_ZQlFOxi*~hx^msY?>)Nn% zH&(G97*DzuU-tX%j)WPlA9J`Ve_H)5@Dwn&y@%(g>C>d^gWKNGwWgLrb#)YFvn=4_ zY;LOOKn9RNTfGKuuf_x%{4MtVa&V%?>o0q3zV_~wv!dlzaS+w@wXoKF8Ze?oAaJzG zE5xO35DH)4cI>`VuqsoA3$)jrMSUREku@qU&;z4Ip7-ybDVsX&NG%rG@VnjETC=Vc zhKnW7aYeWP{wgto!?Q~_7>(8S3LiwXE<}?BBv6?C5jSpV1oNY1XNCV%24@YV>|RY} zy^+Z6YD&$Xy%v)>+-BvpKxY5Vh~Y{n+!f6jN;^5Z|du@OSGHO^xy0&(SY2 z0Ta0dAX>bITQF#R8*s#(5^3?13&{&2RKc`9ZR)ENK?fNE&uF-|oN$;{l`;81Mq-h7 zkW>{Rw}g+Z;H!5@&x5Y?77VifILZ= z(LQqt0}qHl85(is+Sq;J)E|&{IkwqwznGlYq>k)`BdI+VIOWv;muJ74_jv~OYMQfxBP!a9Qv-VRiU!CMh+C2&d)PuXtwvZ$ zLpC|yrqyCv#A{8BKtPiNE{@kp{pFeQVexdJ}V@hE^*9-j>PzO$3|Of{S^}BfA^!p=7f0p z%N`gp6(aIg8@9H)_M+(h#sKM8P!xXP#}0R90)_L=ubE?tSo!72+R{no(U_=Vc zw#TX<$aXCO^i9DXpFnBRJ{dbOSix=;b!TFzc`wzsd6GkqW&{=Zb1ROu_NMhidEPW} ze)5a)ML0nz&W5fgN-5d}pJyq{u5!%s$dP&YxDQuynDb7%M5X`vI%w4z^1{*G0>ITS z^8Ff-Z3fwq;h`?Rl=Bv+k<;Ln?dE(tJ2f7USMs^-2y%S5hWKgFFLEM$#U0{gV@0jM zB!^bUmb1wxr9XbtSoS*%gNgW(WPBf+~=!nqn&;0Wm*nU@=8{B%U)4c z<4dhb_bk&sOt;r+T?1v--whcx?^Ri5G5%du;p!F*OH?zj@-MEA>1DRfsohFr3|x@S zxR&RCk|jDS%YA}*09O;^$sSq$Lyi`EVd4GjO~+s@ywn+c@!4e2pkI<4Oyar! zEuxi;0QyG;r*GV5-0&Cn<{5a*xw0r`OVotkC`0!R@@Jd-O97C66!x;F0P^Gioc1xv z(s1Bs4nsLa^8E^;mAR{pztXjH`sCGn!IF35w3WaiIlJ)W@TV)8&Yx;nf%ag?5VJ&T5o6v(Pqj@}FVs zwLeA9oP2$kf&o^YX4jO+mV-{z=^Bf^t^fi&k}j7!75?XNMnH`KTh@C)@PG^DjF#cO8_ z5Ft>T0$5Sg`G);Rcq_LH#f-5C?O*PxHlk}ylbUuA`*bSck68-Fo8$TTfiHUwY}5b4 z*ZtW0>(w*<2lH$Pp6Z{cPuC3q^u+d(UHa$MxPswOZL4Z7Q}G#Mu;Jvr&)=JBKDNyz z$I$J5sR<2mV#)rM4iB%=`*Z%kLn-@h>3 zvGA#cWxoKunM2%vsX}m(>LMt|iKJOJgA?5$lFk?v`KNgosd z$GgBxofyx{DU1u$k4gUt(kX*HwDiQz>@CB0Ne-4aody_>(cRO)FMfaAf)LEp9qSRV zxP$)osm#rk^Ih2O{JJd@ZOnAMiMv=`Aml&b>}!z`L9DwrkRb{0+%m#@gd-&f!G?^Z zK0SqNddYdGG}rPI@79C<7HW(UE;bEF@fq|kJ30Qt~=fYs&O075zTA;lG~aq@f{MheALziiFQ0u>(iV zO2exsPDp|$nHY5RpZwQe1$?}B1%|1Icvr&HgUFa~qyHS!(eUazVzld*0ri&f)Vat* zn`+@^=E02Il(i-#k|BC$J7hT}*?T})NTf@c81{4y1^qPT%brq+#-=}@jkl829}BOZ zXI8ei^D;F=&|2O3=p3hRpk>f)h3|A0;uU$4|`+H zBH@0!3Vox%pKomPCQ+H3#lv)pr$#?JtiBN-TFhLv8eD#k_g$+RP*u(|{tOzhk%XE^ z;@`yW3C~=_Fg1RbU#|!}jeO}T%ZETlhl|}ta=+t@65qm4L7n&x$Ji8|VFYS6&GeC4 zWLe0FkRk%liT6y>LuyCvpN8HkGZOWjKW(_b8S$g{I~=wovb018VGH9E{7oFSj2l+> z=<3+%;pm`QmX__O#p{wNi>LDQIN{ntWzw~|-VaAd1%zfpCjhJdT+2u&EwEyj?gHnj zNh#hr3{n}$R%l%!2NA2snRg2ClZYP@TbSiJiu|hCH4hi)_ePW&=A5xzeO##FdzTEB zMsOHnnQ}y3buuO%;3f@uerZX6i++6IZC?EN&*f-BgI)(wg>^yfag4jhO-$s4u`oO+ zHu1_WiV*pc*dk24@nz4G2eZTjU-smO$Jq}DAJ@e6CRt4AYOzQ4?glhwqt=;o5r+Sn z(;L#vM}E$nq&EO(s%C~IAe}JyDYBJ7N?PBsL@>&OkWY48^g7ZJdb`(%$jn!eG%u}e z0_jOl9O7p~vvT8wAk8k0$FBlyDq|VVhu8iEOsvCNh+Pc6UBW%F4!o%Mv;SX?zx_bL zchriDbL69D#gP}o`tF1%=O;=&B-BI8jUsP;Ro)NxBpe zt-SFc6wg#$r5jaHXtUt+B7mvx@)YI~LSY+z6H{GlM{c)X6iYLd0Oi(>dKO&9V#;IR zf7vt0c+_upT#pS!!jTf`>Gsm-vx7_Vm;6((7wJ8jy74x5;gA>ObC~rzGkf_Dgx1S; zL;02I6!ox8GjZ1xhH`AoLOD|(p0p&3lDFf!hI0(09$VOV)`?wGM4I@DwxdNSe^@m- znx7)j;;XoH!fDEOsbtssDS4)QY4UXn=De6H@qYoll=y_3H>uCJj7rIp*J5G-ctwI1 zOY#Z4kiO_YIVbTy@*Nmbj$sqWUb-2z>kVR~bq=5_4*urYli%WGCTAY_*m();ZAyUI zx1dBO2gRjvl*P?7=61JGxwL39)oWU`_KdQX;`vJoGOomMJk6)6u<1zcOi%YO#7N!JuydkM)ar&P4@|f4#j|2+A->)jjY%^F) zon01q)q}-dcI12yS}*THxsjXmwl?F}^skuE!2QJtxX((~YSPwahb;!PCg8 zVz^L?v!o$n5$3_v!b#s8f3HawK}rlg%c~F5yHi!_JGkPu z?W`%&<;*HU*;F~zVdj!sJ;AmftidhzZs(TPBt-Ogt#7t(y(Xkw2i#q`Yj zN!n-bih2Iwh2H|SS+JPJ$g>#wrLh^LQGFK{-pz7F1Q$%Zw3NL`(Q0H@(Uy}BCxSd2 z_r$!$=5>>n{PQHmM-|quIr~L2NQU!R&JmcMo~<1^CKr$;eqDKk7#SMVx3|oV?}P)$ zXMLQ(En)11M->6owPEqBeKqM^JNPm{aR8>u&O~Yb{Em>&?<=t=BTWa;VX-4qvT9m| z-FnEF>jlb1eVXL2dx(R>@6Veb{|=7uP$QIOjnaob=9>o=Pkz~RspREc(X-TMocFHQ z)+EaiF%yI6u1x1(5pMMoWgv-x9HVgb(@*%787#U!E6O?0-f8Be#V zC;!@~{iZQy3>CSp1sJ*9j>f*Ls9F|XR}2S<(@3?>W!DG?1JgNfI|H$||HneF> z_}w%nvl^1_qv&|GOO!a2hgyjBk`gCBTI12gy6bS%#`v3X6!)o*`&Ov=3XkSaY!^9U zM-5duc_y4|9gV2gL<%ITm28f7OJB?P*KECZlWgxxIK_rK-$zFjG|R5YWV3)3?mk#K z88M4w5|0^o2xd`$#)Z$#&|~px6C!rs9fP8c4GrBqQv$4rj@+`J-#5Q-Vg;WT$e;j>zv&GmvD=%eOq*c%t@J!?J zO`)-`mq=aw{liO#KMt>s|v_$%YU}0aWS0*Cxyqkw;>l;nnXrk7} z@`Aa(l#T!A+1f9Ap373T@iuisd7$n(iV2_-n~07OE{lolh92ONjyKyL(g&qB@(||2 zd?NIf$5`j_UC7y1AIIHMffvdxge_B!a760?zDxAaZ20mJLvU)?@4pmLo+CB;eX89c zA{)cD0)WIs48CBW7WFyAW5X+?EcJ;hT*%UUW}anJ(3LNHoH0T;6b6m%E{^ssXg&`g zOFnWH4Tn>xVEP$A1L%qqL$j!8O82k^w49FXvnQS~mRg1sjb+yq4|7f;{f2hx9nT

O}In@sI5dz`)@X51&^y`%m37|!XruCySAk#(1>o|dO@ zqgD_=3l3xoLN)N+{C9K{j%h5Dv^`NlCP;;swgvoB?_g}v6d?{v+~XJIyIC zylU*+HaQ2HBK(%p6NVkFK$K-gANgIBm zmuV_B5%TN2Rpi2}s`0g=cIm`SG*f;?L!E(mOzI?$iMN~t#1%&!woCsZsAfgHKj3G=D*Mz|)Citxx%~Li=UnG5;Z|j~jW!?U{QBQmvZU*e*_W)%A!k zcxYbW<&7i{`ZujaEl+0*tz8*>S2B9@jBjIzAj~Kw{@04$|I=>t-+D6P7T8UDi(_7% zR3S3QvNI$H@34(g50P?)X1RW;>+JqTY7NwP9kYlMg_QAPVI(}$gsCYDFPb&ZniGB> zHUN%#2YhP+3`|@oCaR)+s0<0!w(YZ}vj`mYhZufL0PK692qy@NTM#+IE@wBQizTQg z41mULOY!YmhYnuTLw^!hxeYMc|6q`hE#Dvdjz2w&iSJo4BTg~|{V z2vR2B7qOK5;LfJS^7f)fo76rz3cDLQ1#xY`&{(q9PSd?Oj1Vchc_etDPdS|KMG<|w z`it47u(B(ruz)*Q=N;g;fQXcT%GCoyGYsIyZMR$hOZf|S_rHIf=+Q+9l6eUBgwZd6 zg*n?4ZlS+%pIS^VXpj`iWBJnYb|TwR*mD*DU)@mzPgZZscw9(V!t!8Nsc=B*&2c}k zBQrC#&b+`#(V4!b(oMW+YRAR+7xx=Cv93-&i$h4IW`|jW1gE$(TV)($OF)>NIk-QQY{&E2rOk>7d2&UKy;k}-}L)FVc)|+ zLU?-+SP+k(+;lTFeHE29^InFDn)Jq%BLbCRw*F8vC1uPs3<413+Y0zE$^KM^UYF(m z>k}=SxYH<6)Z&!&)3SrN(j5Gc(zYGb%wLsS{$W6I+qRY*@Dg5XpB;#cw9C^Ph^ok) z?ia#4SkWO2*hxr!&hHoO%UFN?w<8duN%CA`|PZHw$>d$|&e`;^HJjBaP@QWeUcz70cZ_s-Soy`_Uy+Q>*9uYRF zGu)0wz3|SjRY{r!tslNoUte0Hl~FVO&t^2s>3(){eyZjQhdjBQAc8dR;HM$E(|kR) ze)~H+%DF4W;ZNk8h%DuLS3HX+VTo%iyJr_(h3PkH6IW*iG=KbEsLdAkRGrlU3VsBr#v3tIpbTfV_COdP1@X>C#+H28R$@Bi} zSnj>Z7TL13O|(}hMDFe~GmMzC__9Y0m%-F%utKJzGMjbH0-YN0glj> zP$73cx&#h^#Ta0IbZrY{WNR_vo=7^&1UTINL<)XvlNLZvZ&eyHw6AMoPDvn^5^;5{ z;*&(v+1{a@@*zuDwitlp`3QZk>3W|3H>=UhcFs~?IQy|a)5$Oc*+9nz1H;<%IT4a| zu)BscpJOdxRSnPEg6T@750}d8vJ5gEvKl~-;#gY8)SVQJrFHE;i{M?U7>Lc2e1BvP zcicp3tcGD^(Egjgy16U2eYN>ZPrdSAC|rmQzhWxoH200yk=# zd-$Yt#kH&qA}TBNI-e&w^1Z}#VykFMvfx1BT+P4)eYgfSRqKm2`4Djb?}qDHoES6o zVpv+tQ~SRAiCV}KMYcS8hhbkOJTg}Jt&fX4>^ue9s|L|783E8qC*D74_jh)o0`*lX zYUmh7Z~=w6G8y-+TZORuxQHci7WIh}M0!R1E$-t%rs#5zOkL`o^HbB;!GiLxVp?4d zaFXvnQ)O~yV&rdarfj0l(B017W&y&(VKup21MuOyfB72!cIze2dYA=RyQjuf;&jHv z%+YtzK)-qT8{eSAW1|_t$i}pX(cArtp+d*^bXIgF%-;$BY4>-Je;QZQPxL;I>QzTC z4u=}Ney8^8QYl$)o=TY^p!i`Rk?qBh?(qt$#xyLz^i**{rw4wRSc3ph)epJ1-HW7} z8uF)bd&+#;L}-!+)rc369b`^M2Rw0vK>>;aH__C*p952UfCrYo$>DF@` zRvndvPL=(-qr?w1(S=$M@ZGL1!85stqdNXxv#yyuS>AXCdh3E7b)GJ)70~Wh%79Jj zOk%B9o58?7K10F6MyNxi2H0x-Vv*Pfj$A-}fI5TDSKHqq)^p{kJSteBoD;}doew~z zevoY0e$1z(;7qD&e;s`8_G_7OYf(P_J%Ee}tpD(FmTawf!wU4Zx{w&%RfiMGwHN^} z6eDmG(>KP4jZcajX{LOlZc(n2#c$2m>KoCIc*o*p!_upv!`Wnk0~=@0?k^|$jug_X z#(g_gzq&;JKt4MJz5aYT09X-X(DzLPQb`+gsHTQ2;poEB#p{eWGWSyBkcN(ws9jOg za|N8ovnQVGxx7te2+{*b1?dPrd4^_D?|GPd)HY4ga@awS=Ok>OZhibPxbc~Tz5d0? z@)jw)G`@#;RAk8x>iB6*ACt)~n$J9eM;Sp)b+7}{14F&p-aRc}0+2?Y{k7$U1Wvv*iJ~FBw1jCw`sWI{^}2!=U-GcU~kfo+N~{! zG2_r{V9FN1<-f`OA9uP`;uuBk*%uhR_6lsfT(fKF%Sx)5*FAW>F}WV91zT-i+}gj@ zbM?#dnU?-u(b{*99e4u zQrBdItPnvp`|*W9PH54s?#O zTyI9qEk3si-EaLbs2z2ZkBYyD{}rKgb(5otoF@49KOXmzmCc>_7yC>JXY@?oEz#<{ z#dY+>cN>Oi+WG6PchQ{~_ATV|){~!*-k3w)`ju5&3wam(u=6;V*4ydtU%|k7KeIJx zZ^-)V#{=KZRm2pL8zz*)a-dFF@J74-Ys(gibvRQ`l zRkpT6$zsuHS-FfP5031!^(W=k=cLY>$zNYEZ$1!EotV6^rTNYCAPhtAdF$bJwl(8e zT0XzYWh8|36F*C6Rv2d)<*-A(?&*DgNZ}1Fe`|qqEUj1Xebxiis+!?tVt1-^d=b)z zdH8{ksbTTCz=z1q6Xz2t=8s|*l!XopU?Wwkr$ zXy`9Wl;r+Se);ct&k1w&vo%DuKMtRo{Udup{Q*BgC=C|LM#8ava+U{|ZgGsWb&C)8 z-8OR@o_SpVvQn9$^t0gpv0o<8Za>W5ZHelDYYWq6n{Yo#$+}|c>&Q5+;t}?2>;dLN zL#Eq-5!DmFSG_@cFT|%$)(;$?0)pro8@A!-J=IP?%Jl37iemc+yD+u5uV^w~?#}fY zW1Hj%OXC$~hYu;IepB@B+Hh>}UV4Q-5al=`_;=Vx?LwoaN!cpBu~fCMIa~j4*G>07 z$d;FOX@%qSB9c}EQFoQjzKJ*%9*1Gav_2@|TVsX|gK$b*xv3T!b%m{jR`>tqpULi{ zPu-H|_C{CtFaG-bdgyqKqzhBi&wVYl#Z=~b&17px6yD{?U|SAP%np+Rm|J^ZxS#OK zxn?z>GMRGar+?$Ad?ZKqMr!Bu@wz&Doal@Y>8($E+Bs5sSFSF%AO2t){ZnEvcjfS# zA8r5hi^Wk4C|VD3YsTM?8q4x8Soz;{h`ymo3efo{XQD?KHEE_rRfwaXE!?B~@Lown z?2!6W_`tKESH_s9yB*FIvfqs$&M&2znS7+4(Z5v`Ja@FVOEfLakH|IQIFT!_JG~!#>86zT({-i8`%j`np9Uy@f3PyD>a9%L zY?cjWc+TeVc_JfKK5OJvDW*1s&C#7Y;{6vZk!`o*=Ts@ljPqt zueiRJ@|>zC+|@L$*w_S{5L!ox_;ISLuIt2n&|lCINucE@&UGqh@VB3jo_-#)_;xaA z=c4G$a?cTyqt6u-Z6iJ>eZPMgwnBZfb1l-JayIX^f0W|T*mT&;cq)*9i<~PsaWk~I zG9#miK^6|E?lqN3sJNN#@ng7p-;A%G`2iP;+6HD!Xo?;BmNOtB`@#G_@})w1^i#UQ zs8_v2Y&>)=ea=f5vZn8&fvQ;?{fACQbft@PkRFgMKS_%(cG4vek3tItBXlLq?y*&o z3RsSL%B+0#rxkefUE47&R&&Z;LB1zxNQEgg@#^L~UX5;5bdL)C{Ke69 zptizk0(FMvWwJqcI$FSEP3@4@2;ZF7Dw((L?sv3*<|>{;gd&AOf=Nj*M-{=WLH(KY zVw|x9J&8wnZ{`am!4fr)lHdf#B9n#FmS`uL&5X!g&;Tg}aI0Vu`_@sQv47a`Ql{WS8V4PM7Ro z#T*g2d0}xs3Ibe0DH)sHC;ZFlERgjiwMAaQPX9M{v~>-Z=&N&OCEpJUl`9Hr_#wk-x0UzPW7`p?;m z#*dXTRF*ESk#Jh4cb1+NnQLatcvr|gUyIU>HxjD(KbofGvw8mz@0YkNqr4Os=ftIp zUH29>Gnbw_*)?>ZbXH*ooteCLsW8sLn5DCi6v#EjC)O;Krtjto(inz@xl=sT*9Wa$ zL?lzZRMR#oQ($ZIS*Y!+g!;l*QCw{(tJ58;QpL_lxMRtF|F?fl>mAYg+!*@qGI@I^ zdrq3W=7y>lPsI=pc-24Or>65}^rWi14o-8;vjwHD5NrMDc{(9TumgQ|W1!aqg}-|f z=G6W5EYjaCF@F;1t*JZz>fe-#XqW87r2ZTJadWLpADI*kD>?x&i|tYStQh-qM3|W| z@sx z{0r$IA9u!RA*Y;38{+sg=4`H-1mi8eJ~>)^5rQX5zZgYI;=9FA3Sz^5`ZXSsHF?BQ)xIbap5= zdMLVQd{I#4y2ggM2KD?$_fn>vB6KT>X9-)i(3Hm%ra}LF$|$SMSZ3^&kBR^5O&D0G zCN8-03G*v*uFtr_e&PkEZprwxC$Na!6CuQZtxNWW$LQdmMRvz-M@6}#lPsQ%VYGzw zc3#;;Gh!Czd(q>#RJ}N01aFt_4>^ma1WHu8)VG|t<@_E7A;Hyf1fD(J+$uBzYl_zg zROlM5tEDQdl^(M0QgxLB&8Ni;NKg229Si5>#URM|n(^>G-fv7!Ls3C*1ith(1YZsD zCGVoUL++e>Uc zh9xDbS;OxbPB%Q)4)jc;RK8=&H?Tf(CKFSe;F}{mJd@+2$hxk0BMU?u^OeiC^~V-8 z|8@BJ(do(soEzp9-=R|`=m)7A6gd{=;0PkZblqZO5LVwY&WJz%Tb$HH>;Z}TB*cqGrIw3^zs?Dbt&S+(tb}(gmlAuCg~<(P-N6*b9SV8KLH>Ol+hTMxgy8>ab5i`X9Gflm$Aw#8Z<{g^W~3 z0uZqzI}WMAO`tB8PGcrBQcSqhlg-37ABFSB zW$zs9Quw&^gRQPmT683DCZ~#FcyI!yRU(YO|}PeJ`BzGot90xTxh6^n_CSv(u~L zs{3zNdK~okPK5%wo(Xf7L1uLi6)bLsb@+ZaX4$f5B{6Z!Zj3nBq+ynGwBezHIn({V zEvK#P0JmTmOgpZacW^L|x4-N;YW4#VT{a}st2z}c1emtfIeJuDq?#e8 z1B)!zm1@9P=kzyp3xeCMxamQEazrGuVHptTPKzFzxG#B*)> zv98S(3U@rq_}ZpB9n`lL8{=QY2b=e^>8_*5g^KJ~N#(?8+UB_BNh!y)yf{jWN?J3` z>}T|e@BgsHdGX$d$|nhs)a!ZnW* zYmw;HC7aTx_lmXE0}HzsJuBsJu|@Q^$tiMs*H2+&ER$6jQ*bW?Skk@sIyh8EK;VIaE2#Y8@Hp1lB# zT2vJS#d5w3IkBeo9yS;Z6cRH$J6@|lknZOp=1cNY`%{H1k&Q4aLNk973=Ua#8Baud zDmBGQ77G!WPGt)p^{RYYwGjdAbV3Glv>1hH?sc?<=9i(QjIU$jZ7nupHjUUWz0bQ9 zQEU143cJ(*8Za~7(!skzZAT>gO-n^~E&)#7q6)QR*-qk$R!8)jXIv21;#0p!M&vX{ zI&9nJ*{AuurPr4k0rL?rg?a}(24DXblEN#9iiFxH*K;n*odp{lam%3*!qIojyG>aA zcd#X~-8C_9@@yc0IxvRF?!0K%p`WH}XYtA5g@?JC?#L&hzR=FKn6pl+%WobWSJm)R^|;Y&u(moS~kum{4W^ ze6M~yQ}K1dTAAhmagn4hegk_pv|i$?3oY99h@W$e2cek!RlCgys||!+%E#ZPoyN#H z#e-%pDv6A#N7!ic&L!6%{QwO(Qojg{Hk>M6Zq+}p4yGGj*n-+1avVVim5?rnN!$pC z)?*N)Ztbx~scE9Z;<@@p)~Ow=z2|@yYzaNeq>G11nP= z@5G;(62ibP@;4}M6v@ZbaQdt}{b!NtW_aGaHv)<}j#tUFUi6&f=L-8UI+8x9){@js ze*(H#eO+CQCrx~q;~JXKm&$j?w2ZURTqyRH4@#%+&Iy#wq@zFOL_pefa|KqB{^JVq z1?R_GE8`(0ZDEm)Yh^nwc+)Xn`eBoRHQDzA4YK_}AI5IwNe=!z6LaMu$I0M+ zsYm80od7L&yLdXHbD*ygzG-DPz4YN?-9|E7uMJojRFNIPco%OHQec{EZz-fxTqP^f zb%HvkaA!yM9mH3L9*g#SaDmdkHcov}M{n^kGw%BiVnH$ygl-gHV_#N5FBg)ojR-ko z&GMCtUH%s&4Z2_h^s^OAooW)&yRYw`=GzsM{YUAWYqA>^bJijQyZRc#)rBT*bo#!lSRU*j1ZZ75CI)P1-1ZUt`G4kC z(Emt2f$&>JMweJV@@VatzpPkpO$f+*>3Gp?=kRr@A3P4+;rzV#oPrs*&N~!e7F$|& zJ2VBUW9T*8VhvRNryIf9cc~T@LR^bH)Mp|&W+zc5J%eV-6%j%^ka_fyL^+W2^n}-G zFxOZ7fj_`Dy~d}_`kW2eg$4;(FzMfZ(IU3ynS6n~>hlY~0_y8RD*@39Ww?!Ltc!qgI7s^@+ZC+Jd zF-={@+fIi7xtyY7fmC5sSDyA27xWbLO1u_(RMva%OT&^WyRwvPqf&1%slHH))i#-2 z<#Wb$&M;6(51o!TeG&h+cpkv78uT()xrPBeU#z3+XSwMQI#Agb$!2O3nj`Q240Nj%bb-fXdZtHruWybjTGEeOB*Nf0bsA5A$Y98c}_{*m;JKi3dH zY{yv5F$rGtlh8mX*nk2sDD`fur?|yf4NKn#;Bs8ys@1C9?xs$jW|3S|&k4-SyJ^2o zd(vk;NagrXRi>B|UjsEddpEa_XB)?4Xf+sdEAYv)6?+o~mhW)Xb7TVsdUWBV(U{{s zpZe6sas?jr@oUjijD)BdFPoRSn-nm2Hi6RS%1;>TA$WSMa{AHe3ym4KBG$E(W6@Jh z{i#t9-8OB3U)G+*6&JdrgjftUnPw@y6jfG}pLzvX8!&Nf1UMlQY&HzFqz4uvN< zvw7^Oh)`PL#3s(;E4(XZ6Q9hzp-ddUniC}YKr}EzOS;~OM}%n;q9g1`K82zDq)gzX z$D+C33{0|jHe5A+y7BhTlw+yxq!>(tAKFEqBh2!EW-2ZQg=8cG!_qJ6g|lNExZpOX z4V^&vTalLZBm4;;x!?oU>Q3&cR55kcJ-JM@!T8~wy{NZN6U9gsHX;W9@zeGmO5Dq} z!aOK@y{hQa#oQTl;=em|9XUlZPC}{apN1pcrs~m}(ubF8PTq7m_;H;@?B)uMx3l0T zd*lCdoLr>O7L>Xi#^&pum;x{>??}{;Q%We{pb>WFv~#cgQbVyQfPwbq8jAmrjj{y4(MR z$TyNU3@q2aJD1zU!p&?QA1&8S_r@Lgt~|7kTL1Ux$cU`)%O0Hw7I!|5uWKttI{z&K zcY9xH?^Rn~D#@VRg!zQlI9VQDQRq0L`eG2CO18wCNIub}w2(7dAaBtnKDB6p*~d>6 z>yD;M9H{SU?gVk+leHbI0cRgKM>bfZ1ij5ha%08mIwjHn&|TU28s$DgXQ39tT?rS- zbJYhE^7?oOJDl9b*eN;gyv=FB>IBTDP|M^WGKFMAAeAIEj(+ks{uwgXRL#BwjAkar8fb5b$@}3 z7({jf5+?KjuPH9vvG6}NhRw=0xEj~%P$|JiegA{E0m%FDmp z_smv*NYppgU47zydMI2s8($Fn*j1%SI|UP$VL^Nvbz&@)d#<{HgKLxKs{+>pA<;>$ z?`o>$FcB+mKhG_WxKm*|$bQGTuyY$0DiE9rONiplki(4!zin*<5 zJE@N^kz&av8F!o3Np;AX9JvJh@Q+hrEK>tYp0XtfIr1x0IL?SbiPvbu(*^pK=4|I=p z&D%TM{W5+3aRf0mEla@KLZ1BiX0Uy(bTGCD-U7yx*8HviYsXuaA#NrS!O)AXtc?k~ zSu?ubG{0G?5s-Jd^AzzGHXz>0tn6HoS1@!5utO{2=dfF10_@%5c6rkyW}kq{`=b$R z0@wH+0@w9`o4<87xvvXqt_E!FcF9ZP z9EKqy0(VM&Le!W(HQp!seWY23;i7M;?l6pT|3sNg6;@xPcgjPD&}V0c_2Qaq4b?X3 z{q@2ubckI zG%8&e0pEWa7!GcPuzG#>)v$`tH0#vYzKES8^3~#AYL?8-W3;>`ia_;krPLDp>&^LJ z_DBxCmWO=3^$=}3wa=QCM|V+A)Fv&ii3@;1nke6mjxf2_3}2XCBTP>kU0I;;xJH($ z7(RkCtd!bI5E7?J>pG$314~l}?>lru2$pqZ5pOm2^-PpJ07!L%ILW5n)Y~nfyvmJfRC*z#o$#P{LE zZs`tNZaKZVSQydls>Ip%s7g61o8GzD-P&Tn#R1z(O($4VsvebZ2>EAOCI0e6alT9BXM{^w}YpRQ;CS|e!U-fOp#&i0lGHlCpv-4Cd%dW#8 zxcAShmn9V4WI34lEDj3Q+3lT&7$|UsnPFC$e@P%tbW4}sJ?y8nX*_hGKAM$@4@q)J6Qs=b8U(vEN2;gQj)N2)s3nXg@+|CX2p(*jx0^ z-O-b}uW0n57=7aKKR=XK8YrAp)=do?<$^6g`>Q6x=TIXo*Xe1-rF>L|uWgpU>!DgI zDIJwI&WGg$v>DZIOTD(nZ^bnd<5U(-BF!yJ=ir!@%5lK|@u$D^5sac09jC9=s&oqbz)vGKHSx_LjP-X{S0St7Rs zJ%A1lckPzy46oNp)YkK!lsMMj8*z)U%+Cn@cq2eRUG90=Sm^VcZr9oFjjx{4fZ9QJ zIf?vMCyEaT2CVk*Y+D_7NJqn)+MypSBz;9rP6k(ag-}a96k1QCQ$Jex7(-{kK4xIc zfZcjUhd!vcp%k9o$^gq>V_2wnYac{J1S9AtSFr(5?;HXqqG&v<&&2h#= zoTr6BZ?T8$*(wFIRgz?XHE^}xIu*gZ99U|+WTt>@PA(@0EHUh|IEqeLmu3?cbS0c4 zUN19g`fTKhxc0_>4t^{jpYRMq;dzlA5*TcW`1~ZPR@SMvk z%uVHJu0h9!+J__YWpcM9_U{Zrn=FY}9?V2HKD2s)(`16 z$8F+-fYy{t92q&b8A9OiLN%^8k4R^FUd#**lqpa?V-n#zeg!@f+kWTQ zn-zKiHq(8%c(e#r1$i7gQ_-sE>S~@BP*mJ!h+uZ<{tGn5mb;}Z)Mza~$cm$xmJW%!*@JvHVK5*QilQLl zg{*!zi&%^-xN-nu%Ks`qP>b0Oe{kPa*ta>}q4-~RmdWYy9Vd(&ejGGd6ILu#Td}Z6 z`S(QgAx2j9P)k=%)_TA^vQq>8mdHB&OSw^Eowlu3gGjL2C=V&%@V(Q9gjsaA1&(a^ zhPnzbZ-N8?G7KadNj0!9#6N}ZB0V@33F(_se(nob^LK$>3uL`ZuZJA2e=g*JXM$`>Imf@BZS5^q3T1X6MvV z?7V3baWKXY6)8Y*uZRoXI7?54dO4zOt9G8=At1~nsgAq*Q5<(YOgE<6VeInLHip-= z>Kei}@q^?^Uy!5ia#w*~o__HLvH>(sa4{bgS>wNBl8#JX0fa@-KU(xA#VMzn6qAr1 zhFC$Yqx+F;8w(^k9C^7BMReNC;%yN&nAtbyjcA&A-;U$XeMq zdu3Lw~#A!aZKQ@tu@Dr11;4(bcw7-ri0l7{q}JawqbFH zM&DKu5q>VxYIKUWijs%76^<*8IM$4mim$-A$WYT`k;ASR{{CvJ`a5X_WD`#0wuSf; zx83(BVO@Z3O)}s`;}p4g+Fni{6+qcbbbtVSegyn@?jxk>Dl_x4M)DJPF#Mc*zyI#C z|7|B{fz4>8;@XSE7Gu{3K{geEcu*?S4=xQJ1{*chU0}ZS88_avk4>ja4K9RdByH}PwTn>x1VC&;bE?al2kbjkR$j*WFU~po|l)2z#z90y23RivSg`Z3+%GGvF<%0Z_)GIeiImj>T zPz`IelQ)X9#zSrUz3S+3}f`a9M#&G+>BrS*JRTZkE-AVC8(nG_A+xH+qJ`8iTbOxYwg?v{vuYir)> zx67bE2O`Y%kMn7y!?KS}Jldu^LSl-Qb}8|yp8bU){uLamkECIyqK_*0e%nuzy&#_U z;fC~kMlg2Fl&yphDFKL-Fz?D$=O}p|#eMoMAQ)y)<18hoLAbCrMa@q83|e!mN>0`k z)7Yfzxia(0v(hD?kIEeHa*lE963|IP`cg^IMDGHge8D$`#_LanL`u@O1I(0F)UNrWn<66s;syd7GsJ8l_9J z<%<7u9klusOC{P&6Fv=5-6u}XyuHp&C$Kzs?j-!3WoS}|hNyPxp zOH6>J)No{6Lf4r(e7P%TKZJ`YVc?wkQO4QxP|YN$i|h0y6sr#U0V{7DKN7VTzGaAt ziq07uYPPN^jhte3?g($~k`EfHgl7tP&t)~I-KnG>fq@+qIQMCqii&|Nx(@*1pV%>W z0Zh)XfLHbdHmg}$03mepHy1~#Da56cbtnrkPyyADB8u^41VGe;m`c9L6Vp2Weu%>UGs8V3HZnxCroXu!Nz3H|L~Q4%AnvlY3M{o>ust z0T1HXUW`#--fww@rI|e`B~M0u9VJ8h5~|oxVuU}2i6<%qZ?E9#>qqEAaMze4iX7RV zEt!(|bwZ;CzWd{rOp@^AtrJpY4XELfX; zRk4FOSuNYk7QU94u94>G@iCS3PSrhTLzQU>wWDCO8ryFR)EM`^2o`x8xsnS(GrPwy z7TnhC^60Z&&Y`s-2$xq`eXjb@m8$3T;tE#lS;Bj-UD6^`6KVE5T`oGbYx2(0Z^qOI zQC?oe2G2WWj*937FX1*Wuf;Mj3R4}<=;N`k$y4Q`Ta#F1Kx7R}N4Vy`#lD4rmsR$1 z6S{LZ5Vxz-f2GrUf4Boy|bwx81y8~40iCTh~=Wc#@4X>$?-80~e-beR{C{ShJErUKM< zKhkeAjk!DcWFuFuWAl54+r={iBaZIp-N?y+BmD8DhE|1v+e$@FAEVMx234;ZPT^|- zVd}e%poY^eH?`gUs~^^gaB~Ac+3dX#K>mC;E?tO5;MC&eCD)?&jbZkqC@V7#43IQ> zIs*ky0pi8o>tGu|5hG6ytjzyhQ)wI3#1>Ovq{VacEK1*_ricyNV+5>;M2Eh9#`}`o zpN>k>BGZIg1)T)P>`l9@9n&S{*xDl}p4%jVX;|Y`0J`>6P`i3ImZ!H$Pk*~H;VWA} zvCQtER2>tZ1Lx8$>h&yJgtVzrMj>prcnFiVG8ZySv@*^tTCoM}W855MGE?EzTD1wj z^-3{d*`Vb5MmJke4eLU7td$o_w#M3zJ~7h?C=j!B!0qkkSasP7EjKqJ-PTkKr^&Kd zMHb{tcZ860=Qi0NN7sb;o%@bb9{M|6cSiBfi;!E$(r7D0hWEWPCnUib>4>-D?i;fG zMp*UtSC^WsG3?OyAcdxWP6xfY#z4L!BDvlUU zUHAZ$pSuF@OyRf|{5?$3df@Skz``m<`2lpkg4j+&ot#_rv}WZC!V&#C*e`8>Mwm2E zOsLU#K-OkghwBW~xE#Hze-3BTB~wGc6R|t=o~0HUD-{(%67nvOU(AZ0gU4R z(9v;_BS-xuHz3C8b@E-N$lt(T3kk`ih+&*E<=L|yCp0b;t*7pFy*~IwNn?1 zyz&=X({&9^jZBPEK`C_}XcKacD7d|qO*RGsy>gYZ!A1S*3t$T3L;u6=9Y~T}U{Azp z|8(>hpsfPz90K|)h`iTuH{N1iz9`Ps{IYl2;$@^nOKch$nAmO~K|!5p{y0BdJK6B0 z!tp6%+y5n@m#Dy)WxkOfyxe5FU9C~l^kqIw;-Q~mVM;nanL6JuJYf&}jii?l%(E?= znzP&yRLRxqP$>Yz{r(CNE45TE7_X{Bk|-+&muN0nGcsxJWCtH7F^3DWW(z~XspS{Gp9vP zfifNP0W(6NR?yFj)T+1_4i0ruHGON!u;!}R>kkJi(=W_#j@xh!&h9JcGP`<1f@{y0 zFpQ+KyRTQV^iy0bJ5*%-VfT(_uYxKCb~z(8E2+<+jZDy<1aq)R*Gcq0N!yO zs3UG*?%e@&Oxqt;^?k1mW2CzgP(4|~+$fVJU;>;G@%UrDvls=J6_wzhX1d#z5)a8% zQzxp|^%PkZt|#3UjvD4{#eEitbaS(ic|wv&d7kgh;51c6NT~;U(D1h;Uwp73?_NgJkW69JBu>RTjtC| z|6Xn4_{AWh^1KzKa!Y^?h2JwjYptLFxksm6;<*_DpNN;2^XZ$Z$qtXAMwpEAs{|vD zpgqdazS?R-OG&o)J`qSva`90#+70p{!Xc3*Nb{yKiBkH82qQ6!DEtmcnSM3(j0ywx z5mr5@uiwMP3DH4;48RDwmi^(`tx~-x|Ia7#%7C|GbUc#SFEZaw!GLmcH%M1Q)%Ru& zddlEjawkc}M%qP7y80S4SU#Y37aeFV6{>=ZvykQ>{TU6n?%Ku^l$+^E8`D@Hl%L1n zU&TsK7n~RCI#|=5I0lZ`(rj zJ0liymmxB%wcebZc<{&WNpndZw0;adtPYRd`4BfL+G8=Q z*ZfNb4z<`3>y7BAZ+5r0t_p`a=uTuU^ABRpPWAS{NiIWj*6AWcX`475y7A7W5>Jy{ z!|Mf5<+w(9WH{8KMO=0gp%WVmf^*f-N#Oxo-64~b)4}7#Inzcpl4%boosPXn{SE}# z^aFt*vsG2N1xq&HS2vO^pq2LK%5ZPZcQ7Nm&?i9&II|f9V$6f%9$R`ana1nQ+EDQg zu#T*3ee0U^#hM*XMM2#M-KFuZ9IY zrVbanV7=vNBG-a%KJnsUTI&PkYOx55w&hxmK8TG11fvR=Kaco3S&g1A+ljF2yz;1} z7^YZzDlEuj7?DvfJ zNa797Byy@Mwlf#j9J2y9+|4$)Xxr!smcC5D9ECNw!$p;Q(vNp^EP~;T?f{4HAOQ4A zF_<>`hMQh_GwVH|LBF}kw3Ob8ZfIuiy;saV*SJ;P)!G~3zlU>{A3jDf#WF(Z9}TeJ zUA;mNkU4@`1hPdV?jvWARrQcl*6uuMM7mYakDNFCv-t&qM~m`x^HSw3kRIH1F<3X6 z)V9&SIH6#tH<}*zZ4i1JM8exf2ai3AZjBj;9fC$2CJ6AVo>>Uh@qIvPfahb&l<8>8pWNR zek)8nlI^(IL66u}2K1}=MWQMF2lIoyEZy@vYPu)#KsFz@0NNOpCfoZ&^|AI-chl`d zw=s=-dmz9;y9rhUeu7P!@DFg%>+(un?D~!i+;2K`|C;z|F%pouxY7yYQ3SBUp-8S0 z+hFFWp>rd85wLv$NuACn6R9hAa3$lC{_i^gYmn#CoLHqPCw)k^nmmtJDx!EE%yKKG zttnSd?;suf8tC7qWR+j>dLQSjS+pIC9DF+vw)Zk3hHO$t5=j8!daOj_S>HVma(rOl|7NNFr@n``B7_(g zIn|grVQS5iDr4%8OP!zHR2w2(+g<%5=r4Zvg1#;Ul4v651s>=WBaFIT zoCSPdc3KM*KwMFCTRT +{% load i18n %} -Sweet Recommender System +{% trans "Sweet Recommender System" %} @@ -141,13 +142,13 @@

Sweet recommender system

+
{% trans "Choose language" %}:
+ English + Polski
diff --git a/src/sweetrs/templates/flatpages/about.html b/src/sweetrs/templates/flatpages/about.html index 41204a8..baa702c 100644 --- a/src/sweetrs/templates/flatpages/about.html +++ b/src/sweetrs/templates/flatpages/about.html @@ -1,45 +1,42 @@ -{% extends "base.html" %} +{% extends "base.html" %}{% load i18n %} {% block content %}
-“C is for cookie, it's good enough for me,
oh cookie cookie cookie starts with C.”

-Cookie monster +“{% trans "C is for cookie, it's good enough for me,
oh cookie cookie cookie starts with C." %}”
+{% trans "Cookie monster" %}
-

Hello,

-

If you have found this website you are probably in my social circle. That's great. You might even know that my name is -Łukasz Kidziński and I'm a wannabe computer scientist from Poland. -I'm working on my master's thesis right now which is the recommender system. +

{% trans "Hello" %},

+

{% trans "If you have found this website you are probably in my social circle. That's great. You might even know that my name is" %} +Łukasz Kidziński {% blocktrans %}and I'm a wannabe computer scientist from Poland. +I'm working on my master's thesis right now which is the recommender system.{% endblocktrans %} -

Contribute to scientific project - not money, just 5 minutes

- All I need are some ratings of sweets you've ever eaten. -

3 easy steps to help me:

-

1. Login with facebook

- only this way of logging in is already provided because in order to generate better results algorithm uses your facebook - friends' choices. -

2. Rate sweets

- try to provide ratings for as much sweets as you can. If you haven't eaten given sweet then mark it that way because - this information is also important. -

3. Enjoy recommends

- find out which new sweets you'd like. Enjoy them or not and give me feedback afterwards :) +

{% trans "Contribute to scientific project - all I need is your 5 minutes" %}

+ {% trans "On this website I ask for your ratings of popular sweets. Then my systems predicts which sweets you would prefer from those which you don't know!" %} + -

What do I need?

- In order to build reliable system I need at least: - 500 users and about 10000 marks +

{% trans "2 easy steps to help me:" %}

+

{% trans "Rate sweets" %}

+ {% trans "try to provide ratings for as much sweets as you can. If you haven't eaten given sweet then mark it that way because this information is also important." %} +

{% trans "Enjoy recommends" %}

+ {% trans "find out which new sweets you'd like. Enjoy them or not and give me feedback afterwards :)" %} -

So far...

- {{ users }} / 500 users contributed
+

{% trans "What do I need?" %}

+ {% trans "In order to build reliable system I need at least:
500 users and about 10000 marks" %} + +

{% trans "So far..." %}

+ {{ users }} / 500 {% trans "users contributed" %}

- with {{ ratings }} / 10000 ratings provided
+ {{ ratings }} / 10000 {% trans "ratings provided" %}
-

Still not sure?

- Read more in FAQ or contact me. +

{% trans "Still not sure?" %}

+ {% trans "Read more in" %} FAQ {% trans "or contact" %} {% trans "me" %}. -

Do you like it? Click "LIKE"!

- It will help me in promoting this application.

+

{% trans "Do you like it? Click 'LIKE'!" %}

+ {% trans "It will help me in promoting this application." %}

{% endblock %} \ No newline at end of file diff --git a/src/sweetrs/templates/flatpages/faq.html b/src/sweetrs/templates/flatpages/faq.html index 328c507..5e321b1 100644 --- a/src/sweetrs/templates/flatpages/faq.html +++ b/src/sweetrs/templates/flatpages/faq.html @@ -1,47 +1,40 @@ -{% extends "base.html" %} +{% extends "base.html" %}{% load i18n %} {% block content %} -

Why sweets?

+

{% trans "Why sweets?" %}

    -
  1. everyone have ever eaten some already,
  2. -
  3. there are lots of them, but the set can be shrinked to just for instance candy bars without loosing property 1,
  4. -
  5. it's obvious that our friends have huge impact on our political beliefs - it's nice to check if they - influence also minor decisions,
  6. -
  7. it's quite easy to distinguish whether we like given candy or not,
  8. -
  9. as long as candies are not considered to be the most important thing on the planet, it won't shift the focus from - making great algorithm to the product itself,
  10. +
  11. {% trans "everyone have already eaten some," %}
  12. +
  13. {% trans "there are lots of them, but the set can be easly shrinked," %}
  14. +
  15. {% trans "it's quite easy to distinguish whether we like given candy or not," %}
  16. +
  17. {% trans "as long as candies are not considered to be the most important thing on the planet, it won't shift the focus from making great algorithm to the product itself," %}

-

How does it work?

+

{% trans "How does it work?" %}

- I have populated database of candies with some "international" once. People who had joined this project (just by - clicking 'facebook login') review those items on the 1-5 grade. As long as they have joined project via facebook - system has also information about their friends connections. - The algorithm which I'm going to build as my master thesis is going to get all this data and as an result shows - sweets that you haven't ever tried and that it thinks you are going to like them. + {% blocktrans %} + I have populated database of candies with some "international" ones. People who had joined this project (just by + clicking 'Review') review those items on the 1-5 grade. + The algorithm which I'm going to build as my master thesis gathers all data and recommends you + sweets that you haven't ever tried and that you would like. + {% endblocktrans %}

-

Sounds great to me, how can I contribute?

+

{% trans "Sounds great to me, how can I contribute?" %}

- Just login via facebook, review some products, check your recommendations and have fun with exploring new candies :) + {% trans "Just rate some products, check your recommendations and have fun with exploring new candies :)" %}

-

I love this project - could I help more somehow?

+

{% trans "I love this project - could I help more somehow?" %}

- Sure. Just contact me and tell something about your background, ie. are you mathematician, statistician, software - engineer, candy lover, taxi driver or graphic designer. + {% trans "Sure. Just contact me and tell something about your background, ie. are you mathematician, statistician, software engineer, candy lover, taxi driver or graphic designer." %}

-

Is it going to be used in advertisement?

+

{% trans "Is it innovative anyhow?" %}

- The idea is already used by companies like amazon.
+ {% trans "The idea is already used by many companies, however there are not many open-source approaches." %}

-

So why should one bother about creating the new one?

+

{% trans "Why should one bother about creating good recommender system?" %}

- Because I have to create something for my master thesis :). There are lots of recommender systems but there are - also three issues: + {% trans "Because I have to create something for my master thesis :). There are some recommender systems but there are also some issues:" %}

    -
  1. most of them are closed sourced so one can't check why he was given such recommendations (it may lead - to abuses),
  2. -
  3. there is always problem with getting relevant data (there are not many institutions that provide it),
  4. -
  5. because of facebook there appeared new approach lately, concerning social connections, which hasn't - been studied deeply yet.
  6. +
  7. {% trans "most of them are closed sourced so one can't check why he was given such recommendations (it may lead to abuses)," %}
  8. +
  9. {% trans "there is always problem with getting relevant data (there are not many institutions that provide it for free)," %}

{% endblock %} \ No newline at end of file diff --git a/src/sweetrs/urls.py b/src/sweetrs/urls.py index 9299ca2..0278989 100644 --- a/src/sweetrs/urls.py +++ b/src/sweetrs/urls.py @@ -22,6 +22,7 @@ # (r'^social/', include('sweetrs.socialregistration.urls')), (r'^$', 'sweetrs.views.about', {} ,'about_us'), + (r'^logout/$', 'sweetrs.views.logout', {} ,'logout'), ) urlpatterns += patterns('django.views.generic.simple', (r'^faq/$', 'direct_to_template', {'template': 'flatpages/faq.html'}, 'faq'), diff --git a/src/sweetrs/views.py b/src/sweetrs/views.py index d28e94f..939444a 100644 --- a/src/sweetrs/views.py +++ b/src/sweetrs/views.py @@ -1,6 +1,8 @@ from django.contrib.auth.models import User from django.views.generic.simple import direct_to_template from recommender.models import Rating +from django.shortcuts import redirect +import django __author__ = 'kidzik' @@ -13,3 +15,7 @@ def about(request): 'ratingsbar': Rating.objects.all().count() / 20, } return direct_to_template(request, 'flatpages/about.html', extra_context=context) + +def logout(request): + django.contrib.auth.logout(request) + return redirect('about_us') \ No newline at end of file
ProductYour ratePrediction{% trans "Product" %}{% trans "Your rate" %}{% trans "Prediction" %}