From bb9f0ec040b0d12ae1051207136955520d4ba364 Mon Sep 17 00:00:00 2001 From: Laurence Farhi Date: Tue, 17 Jul 2018 18:11:23 +0200 Subject: [PATCH] Journal de bord de ARnad pour exemple Module2 exo4 --- module2/exo4/barchart1.png | Bin 0 -> 16941 bytes module2/exo4/barchart2.png | Bin 0 -> 6537 bytes module2/exo4/org_keywords.csv | 567 ++++++++++++++++++++++++++++++ module2/exo4/stat_activity.html | 589 ++++++++++++++++++++++++++++++++ module2/exo4/stat_activity.org | 367 ++++++++++++++++++++ module2/exo4/wordcloud.png | Bin 0 -> 24697 bytes 6 files changed, 1523 insertions(+) create mode 100644 module2/exo4/barchart1.png create mode 100644 module2/exo4/barchart2.png create mode 100644 module2/exo4/org_keywords.csv create mode 100644 module2/exo4/stat_activity.html create mode 100644 module2/exo4/stat_activity.org create mode 100644 module2/exo4/wordcloud.png diff --git a/module2/exo4/barchart1.png b/module2/exo4/barchart1.png new file mode 100644 index 0000000000000000000000000000000000000000..1249f07ca648c78d9f6cd72a28174ce3018c9f6a GIT binary patch literal 16941 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 literal 0 HcmV?d00001 diff --git a/module2/exo4/barchart2.png b/module2/exo4/barchart2.png new file mode 100644 index 0000000000000000000000000000000000000000..a1409bdc9802280ccd4146c6c6d72b6d26067105 GIT binary patch literal 6537 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 literal 0 HcmV?d00001 diff --git a/module2/exo4/org_keywords.csv b/module2/exo4/org_keywords.csv new file mode 100644 index 0000000..30eeb93 --- /dev/null +++ b/module2/exo4/org_keywords.csv @@ -0,0 +1,567 @@ +Date,Keyword +2011-02-08,R +2011-02-08,Blog +2011-02-08,WP8 +2011-02-08,WP8 +2011-02-08,WP8 +2011-02-17,WP0 +2011-02-23,WP0 +2011-04-05,Workload +2011-05-17,Workload +2011-05-23,WP8 +2011-05-25,GameTheory +2011-05-30,BOINC +2011-06-06,WP4 +2011-06-15,Workload +2011-06-20,Gradient +2011-06-29,SG +2011-07-07,WP7 +2011-07-25,WP4 +2011-08-16,BOINC +2011-08-16,BOINC +2011-10-13,WP0 +2011-10-14,Workload +2011-11-30,Blog +2011-11-30,SG +2012-01-09,WP1 +2012-01-20,Blog +2012-01-20,SG +2012-01-23,Blog +2012-01-23,WP8 +2012-01-23,WP4 +2012-01-24,Blog +2012-01-24,WP4 +2012-01-24,WP0 +2012-01-26,WP6 +2012-01-26,Blog +2012-01-27,Blog +2012-01-27,WP4 +2012-02-10,WP7 +2012-02-13,WP4 +2012-03-01,WP4 +2012-03-05,git +2012-03-07,WP7 +2012-03-15,WP4 +2012-03-16,BOINC +2012-03-20,WP7 +2012-03-20,OrgMode +2012-03-28,noexport +2012-03-29,WP4 +2012-04-19,WP4 +2012-05-09,WP4 +2012-05-09,autotuning +2012-05-10,WP4 +2012-05-13,WP6 +2012-05-22,WP3 +2012-05-24,WP3 +2012-05-29,WP3 +2012-06-07,WP7 +2012-06-08,WP7 +2012-06-13,WP0 +2012-06-19,WP7 +2012-06-27,BOINC +2012-08-06,R +2012-08-08,Epistemology +2012-08-09,Epistemology +2012-08-11,OrgMode +2012-08-20,WP4 +2012-09-04,WP7 +2012-09-10,WP4 +2012-09-11,WP3 +2012-09-13,WP3 +2012-09-14,WP4 +2012-09-24,Blog +2012-09-27,BOINC +2012-09-28,BOINC +2012-10-16,R +2012-11-07,WP7 +2012-11-18,Argonne +2012-11-18,autotuning +2012-11-19,Argonne +2012-12-18,Argonne +2012-12-18,Argonne +2013-01-03,Argonne +2013-01-09,WP4 +2013-01-11,WP4 +2013-01-17,WP0 +2013-01-17,WP4 +2013-01-22,WP4 +2013-01-24,OrgMode +2013-01-24,git +2013-01-29,WP3 +2013-01-31,WP4 +2013-02-01,WP0 +2013-02-05,WP3 +2013-02-05,WP7 +2013-02-05,WP3 +2013-02-11,R +2013-02-11,WP4 +2013-03-05,WP4 +2013-03-06,SG +2013-03-12,WP4 +2013-03-14,Blog +2013-03-17,OrgMode +2013-03-18,WP3 +2013-03-18,WP3 +2013-03-19,Epistemology +2013-03-20,OrgMode +2013-03-21,WP3 +2013-03-22,WP4 +2013-03-26,WP8 +2013-03-28,WP4 +2013-04-02,WP8 +2013-04-03,Blog +2013-04-17,WP4 +2013-05-07,WP8 +2013-05-14,WP4 +2013-05-15,WP3 +2013-05-21,WP4 +2013-05-21,R +2013-05-21,R +2013-06-26,Blog +2013-06-26,WP4 +2013-07-02,GameTheory +2013-07-04,WP4 +2013-07-05,WP7 +2013-07-10,Blog +2013-08-13,WP4 +2013-09-03,WP4 +2013-09-24,WP4 +2013-09-25,BOINC +2013-09-27,BOINC +2013-09-30,BOINC +2013-10-01,BOINC +2013-10-02,BOINC +2013-10-09,WP4 +2013-10-10,WP4 +2013-10-10,WP4 +2013-10-23,WP7 +2013-11-17,WP8 +2013-11-18,WP4 +2013-11-18,WP4 +2013-11-19,WP4 +2013-11-20,R +2013-11-25,Argonne +2013-11-26,R +2013-11-27,Argonne +2013-11-27,Argonne +2013-12-06,WP4 +2013-12-11,Argonne +2013-12-12,Argonne +2014-01-16,WP4 +2014-01-16,Argonne +2014-01-30,Argonne +2014-02-14,Argonne +2014-06-23,WP8 +2014-07-02,OrgMode +2014-08-26,autotuning +2014-09-04,GameTheory +2014-09-09,WP4 +2014-09-16,WP8 +2014-09-19,INRIA +2014-09-22,R +2014-10-20,WP7 +2014-10-29,WP4 +2014-11-10,WP4 +2014-11-16,WP4 +2014-11-17,WP4 +2014-11-18,WP8 +2014-11-24,Argonne +2014-12-09,WP8 +2014-12-16,WP8 +2015-01-07,R +2015-01-22,LIG +2015-01-23,WP1 +2015-02-04,Stats +2015-02-05,WP4 +2015-02-06,LIG +2015-02-18,WP4 +2015-02-25,Teaching +2015-02-25,Vulgarization +2015-02-26,WP7 +2015-02-26,WP7 +2015-03-05,WP4 +2015-03-10,WP7 +2015-03-12,Vulgarization +2015-03-16,WP7 +2015-03-20,LIG +2015-03-24,Teaching +2015-03-26,WP7 +2015-03-31,WP7 +2015-04-01,LIG +2015-04-02,OrgMode +2015-04-02,WP7 +2015-04-06,Teaching +2015-04-11,WP4 +2015-04-24,WP7 +2015-04-30,WP7 +2015-04-30,WP7 +2015-05-07,LIG +2015-05-13,WP7 +2015-05-19,WP8 +2015-05-20,WP8 +2015-05-21,WP8 +2015-05-28,WP7 +2015-06-12,WP4 +2015-06-17,WP4 +2015-06-18,LIG +2015-06-29,Argonne +2015-07-01,R +2015-07-22,WP4 +2015-07-22,WP8 +2015-07-24,Teaching +2015-07-24,Teaching +2015-07-31,R +2015-08-09,WP7 +2015-08-09,WP7 +2015-08-25,WP8 +2015-08-26,R +2015-09-02,Stats +2015-09-04,WP7 +2015-09-14,WP7 +2015-09-21,WP4 +2015-09-21,HOME +2015-09-23,WP4 +2015-09-23,HOME +2015-10-01,POLARIS +2015-10-05,WP4 +2015-10-09,HOME +2015-10-14,WP8 +2015-10-26,WP4 +2015-11-03,Teaching +2015-11-09,WP4 +2015-11-09,WP7 +2015-11-10,HOME +2015-11-12,LIG +2015-11-16,LIG +2015-11-16,LIG +2015-11-17,WP4 +2015-11-18,HOME +2015-11-19,LIG +2015-11-27,POLARIS +2015-12-03,WP8 +2015-12-03,R +2015-12-07,WP4 +2015-12-09,POLARIS +2015-12-10,POLARIS +2015-12-10,GameTheory +2015-12-16,Teaching +2015-12-17,POLARIS +2015-12-22,Python +2015-12-23,HOME +2016-01-06,LIG +2016-01-06,WP7 +2016-01-06,POLARIS +2016-01-06,HOME +2016-01-06,POLARIS +2016-01-11,Python +2016-01-11,R +2016-01-12,WP8 +2016-01-13,Teaching +2016-01-15,WP8 +2016-01-19,WP4 +2016-01-19,Europe +2016-01-20,autotuning +2016-01-21,POLARIS +2016-01-22,INRIA +2016-01-25,WP7 +2016-01-26,R +2016-01-26,POLARIS +2016-01-26,Teaching +2016-01-26,Teaching +2016-01-27,LIG +2016-01-27,WP4 +2016-01-28,Europe +2016-01-29,WP4 +2016-02-01,POLARIS +2016-02-04,SG +2016-02-08,LIG +2016-02-08,LIG +2016-02-25,Python +2016-03-02,autotuning +2016-03-04,INRIA +2016-03-07,git +2016-03-07,OrgMode +2016-03-10,POLARIS +2016-03-10,Python +2016-03-14,LIG +2016-03-15,LIG +2016-03-17,git +2016-03-17,HOME +2016-03-21,WP4 +2016-03-21,R +2016-03-24,POLARIS +2016-03-24,GameTheory +2016-03-28,OrgMode +2016-03-29,WP4 +2016-03-29,Europe +2016-03-29,OrgMode +2016-03-29,git +2016-03-29,OrgMode +2016-03-31,git +2016-04-01,POLARIS +2016-04-07,Stats +2016-04-07,POLARIS +2016-04-08,Stats +2016-04-11,LIG +2016-04-13,R +2016-04-15,Stats +2016-04-25,Teaching +2016-04-28,POLARIS +2016-04-28,POLARIS +2016-04-29,SG +2016-04-29,INRIA +2016-05-02,LIG +2016-05-02,WP4 +2016-05-04,LIG +2016-05-10,SG +2016-05-10,Seminar +2016-05-11,WP4 +2016-05-12,POLARIS +2016-05-12,WP4 +2016-05-19,WP4 +2016-05-25,POLARIS +2016-05-27,INRIA +2016-05-30,LIG +2016-05-30,INRIA +2016-05-30,R +2016-06-01,HOME +2016-06-02,POLARIS +2016-06-03,Stats +2016-06-06,LIG +2016-06-08,LIG +2016-06-16,POLARIS +2016-06-17,R +2016-06-22,POLARIS +2016-06-22,Europe +2016-06-27,WP4 +2016-06-27,autotuning +2016-06-28,WP4 +2016-06-28,autotuning +2016-06-28,HACSPECIS +2016-06-29,WP4 +2016-06-29,Europe +2016-06-29,WP7 +2016-07-08,WP8 +2016-07-11,Europe +2016-07-19,twitter +2016-07-19,R +2016-07-19,R +2016-07-20,Teaching +2016-07-20,WP4 +2016-07-21,twitter +2016-07-25,LaTeX +2016-07-27,git +2016-08-25,HACSPECIS +2016-08-31,HACSPECIS +2016-09-02,Europe +2016-09-08,POLARIS +2016-09-08,INRIA +2016-09-08,INRIA +2016-09-12,POLARIS +2016-09-22,POLARIS +2016-09-22,HOME +2016-09-28,Europe +2016-09-29,POLARIS +2016-10-04,Europe +2016-10-10,LIG +2016-10-12,POLARIS +2016-11-10,BULL +2016-11-13,BULL +2016-11-15,BULL +2016-11-15,BULL +2016-11-18,INRIA +2016-11-21,git +2016-11-23,git +2016-11-23,WP7 +2016-11-24,POLARIS +2016-12-05,POLARIS +2016-12-08,LIG +2016-12-14,Orange +2016-12-15,POLARIS +2016-12-16,R +2016-12-16,INRIA +2016-12-16,Vulgarization +2017-01-09,R +2017-01-12,POLARIS +2017-01-13,Europe +2017-01-16,LIG +2017-01-19,POLARIS +2017-01-19,POLARIS +2017-01-19,Teaching +2017-01-20,POLARIS +2017-01-20,INRIA +2017-01-24,HACSPECIS +2017-01-26,Teaching +2017-01-26,POLARIS +2017-01-26,POLARIS +2017-01-30,Europe +2017-02-01,WP4 +2017-02-01,Europe +2017-02-02,Europe +2017-02-03,POLARIS +2017-02-08,WP4 +2017-02-08,Teaching +2017-02-09,Seminar +2017-02-09,POLARIS +2017-02-13,LIG +2017-02-15,POLARIS +2017-02-16,POLARIS +2017-02-17,INRIA +2017-03-01,Seminar +2017-03-03,Seminar +2017-03-07,Seminar +2017-03-07,Teaching +2017-03-08,Teaching +2017-03-09,WP4 +2017-03-13,LIG +2017-03-13,noexport +2017-03-13,noexport +2017-03-13,Teaching +2017-03-16,POLARIS +2017-03-16,POLARIS +2017-03-20,Teaching +2017-03-23,Seminar +2017-03-23,POLARIS +2017-03-23,noexport +2017-03-24,INRIA +2017-03-28,Seminar +2017-04-02,Teaching +2017-04-04,Teaching +2017-04-06,POLARIS +2017-04-06,Europe +2017-04-06,POLARIS +2017-04-06,Seminar +2017-04-07,Teaching +2017-04-27,POLARIS +2017-05-02,R +2017-05-05,INRIA +2017-05-10,POLARIS +2017-05-11,POLARIS +2017-05-11,POLARIS +2017-05-12,Teaching +2017-05-15,LIG +2017-05-22,INRIA +2017-06-07,noexport +2017-06-08,LIG +2017-06-09,INRIA +2017-06-12,LIG +2017-06-14,INRIA +2017-06-15,INRIA +2017-06-16,INRIA +2017-06-20,Teaching +2017-06-21,Teaching +2017-06-22,WP8 +2017-06-23,Teaching +2017-06-27,R +2017-06-27,R +2017-06-27,POLARIS +2017-06-27,Seminar +2017-07-03,R +2017-07-06,SG +2017-07-06,PF +2017-07-11,Teaching +2017-07-24,Vulgarization +2017-07-26,Europe +2017-09-01,R +2017-09-01,WP8 +2017-09-04,Seminar +2017-09-05,Teaching +2017-09-06,Teaching +2017-09-08,INRIA +2017-09-18,LIG +2017-09-28,POLARIS +2017-09-28,POLARIS +2017-10-03,Teaching +2017-10-06,INRIA +2017-10-06,OrgMode +2017-10-09,LIG +2017-10-16,HACSPECIS +2017-10-18,WP8 +2017-10-25,HACSPECIS +2017-10-25,HACSPECIS +2017-10-26,Seminar +2017-10-27,R +2017-11-06,POLARIS +2017-11-07,OrgMode +2017-11-10,INRIA +2017-11-13,LIG +2017-11-24,R +2017-11-24,R +2017-11-24,R +2017-11-24,R +2017-11-29,LIG +2017-12-07,Europe +2017-12-07,WP8 +2017-12-07,R +2017-12-07,Seminar +2017-12-08,Teaching +2017-12-08,INRIA +2017-12-08,WP7 +2017-12-08,WP7 +2017-12-11,Teaching +2017-12-11,LIG +2017-12-11,R +2017-12-11,Python +2017-12-11,R +2017-12-12,R +2017-12-12,R +2017-12-12,R +2017-12-12,R +2017-12-12,Europe +2017-12-14,Seminar +2017-12-15,R +2017-12-15,Seminar +2017-12-15,Teaching +2017-12-18,Teaching +2017-12-18,Seminar +2017-12-19,LIG +2017-12-21,Seminar +2018-01-08,Teaching +2018-01-11,Seminar +2018-01-11,Teaching +2018-01-15,Teaching +2018-01-17,HACSPECIS +2018-01-18,Seminar +2018-01-18,Stats +2018-01-22,R +2018-01-23,R +2018-02-06,R +2018-02-06,R +2018-02-06,POLARIS +2018-02-28,INRIA +2018-03-01,Seminar +2018-03-02,HACSPECIS +2018-03-02,HACSPECIS +2018-03-06,POLARIS +2018-03-08,Seminar +2018-03-08,HOME +2018-03-09,INRIA +2018-03-19,Europe +2018-03-22,R +2018-03-22,Seminar +2018-04-04,Python +2018-04-04,Python +2018-04-05,LIG +2018-04-05,Seminar +2018-04-26,POLARIS +2018-04-26,Seminar +2018-04-27,INRIA +2018-05-02,HOME +2018-05-03,INRIA +2018-05-03,Seminar +2018-05-03,Teaching +2018-05-04,OrgMode +2018-05-08,Seminar +2018-05-14,LIG +2018-05-15,Seminar +2018-05-17,POLARIS +2018-05-30,INRIA +2018-05-31,LIG +2018-06-01,INRIA +2018-06-07,Seminar +2018-06-08,Seminar +2018-06-11,LIG +2018-06-12,R +2018-06-22,WP4 +2018-06-26,INRIA diff --git a/module2/exo4/stat_activity.html b/module2/exo4/stat_activity.html new file mode 100644 index 0000000..5e166f2 --- /dev/null +++ b/module2/exo4/stat_activity.html @@ -0,0 +1,589 @@ + + + + +Analyse des mots-clés de mon journal + + + + + + + + + + + + + + +
+

Analyse des mots-clés de mon journal

+ +

+J'ai la chance de ne pas avoir de comptes à rendre trop précis sur le +temps que je passe à faire telle ou telle chose. Ça tombe bien car je +n'aime pas vraiment suivre précisément et quotidiennement le temps que +je passe à faire telle ou telle chose. Par contre, comme vous avez pu +le voir dans une des vidéos de ce module, je note beaucoup +d'information dans mon journal et j'étiquette (quand j'y pense) ces +informations. Je me suis dit qu'il pourrait être intéressant de voir +si l'évolution de l'utilisation de ces étiquettes révélait quelque +chose sur mes centres d'intérêts professionnels. Je ne compte pas en +déduire grand chose de significatif sur le plan statistique vu que je +sais que ma rigueur dans l'utilisation de ces étiquettes et leur +sémantique a évolué au fil des années mais bon, on va bien voir ce +qu'on y trouve. +

+ +
+

1 Mise en forme des données

+
+

+Mon journal est stocké dans /home/alegrand/org/journal.org. Les +entrées de niveau 1 (une étoile) indiquent l'année, celles de niveau 2 +(2 étoiles) le mois, celles de niveau 3 (3 étoiles) la date du jour et +enfin, celles de profondeur plus importantes ce sur quoi j'ai +travaillé ce jour là. Ce sont généralement celles-ci qui sont +étiquetées avec des mots-clés entre ":" à la fin de la ligne. +

+ +

+Je vais donc chercher à extraire les lignes comportant trois * en +début de ligne et celles commençant par une * et terminant par des +mots-clés (des : suivis éventuellement d'un espace). L'expression +régulière n'est pas forcément parfaite mais ça me donne une première +idée de ce que j'aurais besoin de faire en terme de remise en forme. +

+ +
+ +
grep -e '^\*\*\* ' -e '^\*.*:.*: *$' ~/org/journal.org | tail -n 20
+
+
+ +
+*** 2018-06-01 vendredi
+**** CP Inria du 01/06/18                                  :POLARIS:INRIA:
+*** 2018-06-04 lundi
+*** 2018-06-07 jeudi
+**** The Cognitive Packet Network - Reinforcement based Network Routing with Random Neural Networks (Erol Gelenbe) :Seminar:
+*** 2018-06-08 vendredi
+**** The credibility revolution in psychological science: the view from an editor's desk (Simine Vazire, UC DAVIS) :Seminar:
+*** 2018-06-11 lundi
+**** LIG leaders du 11 juin 2018                             :POLARIS:LIG:
+*** 2018-06-12 mardi
+**** geom_ribbon with discrete x scale                                  :R:
+*** 2018-06-13 mercredi
+*** 2018-06-14 jeudi
+*** 2018-06-20 mercredi
+*** 2018-06-21 jeudi
+*** 2018-06-22 vendredi
+**** Discussion Nicolas Benoit (TGCC, Bruyère)                    :SG:WP4:
+*** 2018-06-25 lundi
+*** 2018-06-26 mardi
+**** Point budget/contrats POLARIS                         :POLARIS:INRIA:
+
+ +

+OK, je suis sur la bonne voie. Je vois qu'il y a pas mal d'entrées +sans annotations. Tant pis. Il y a aussi souvent plusieurs mots-clés +pour une même date et pour pouvoir bien rajouter la date du jour en +face de chaque mots-clés, je vais essayer un vrai langage plutôt que +d'essayer de faire ça à coup de commandes shell. Je suis de l'ancienne +génération donc j'ai plus l'habitude de perl que de python pour ce +genre de choses. Curieusement, ça s'écrit bien plus facilement (ça m'a +pris 5 minutes) que ça ne se relit… ☺ +

+ +
+ +
open INPUT, "/home/alegrand/org/journal.org" or die $_;
+open OUTPUT, "> ./org_keywords.csv" or die;
+$date="";
+print OUTPUT "Date,Keyword\n";
+%skip = my %params = map { $_ => 1 } ("", "ATTACH", "Alvin", "Fred", "Mt", "Henri", "HenriRaf");
+
+while(defined($line=<INPUT>)) {
+    chomp($line);
+    if($line =~ '^\*\*\* (20[\d\-]*)') {
+	$date=$1;
+    }
+    if($line =~ '^\*.*(:\w*:)\s*$') {
+	@kw=split(/:/,$1);
+	if($date eq "") { next;}
+	foreach $k (@kw) {
+	    if(exists($skip{$k})) { next;}
+	    print OUTPUT "$date,$k\n";
+	}
+    }
+}
+
+
+ +

+Vérifions à quoi ressemble le résultat: +

+
+ +
head org_keywords.csv
+echo "..."
+tail org_keywords.csv
+
+
+ +
+Date,Keyword
+2011-02-08,R
+2011-02-08,Blog
+2011-02-08,WP8
+2011-02-08,WP8
+2011-02-08,WP8
+2011-02-17,WP0
+2011-02-23,WP0
+2011-04-05,Workload
+2011-05-17,Workload
+...
+2018-05-17,POLARIS
+2018-05-30,INRIA
+2018-05-31,LIG
+2018-06-01,INRIA
+2018-06-07,Seminar
+2018-06-08,Seminar
+2018-06-11,LIG
+2018-06-12,R
+2018-06-22,WP4
+2018-06-26,INRIA
+
+ +

+C'est parfait! +

+
+
+ +
+

2 Statistiques de base

+
+

+Je suis bien plus à l'aise avec R qu'avec python. J'utiliserai les +package du tidyverse dès que le besoin s'en fera sentir. Commençons +par lire ces données: +

+
+ +
library(lubridate) # à installer via install.package("tidyverse")
+library(dplyr)
+df=read.csv("./org_keywords.csv",header=T)
+df$Year=year(date(df$Date))
+
+
+ +
+Attachement du package : ‘lubridate’
+
+The following object is masked from ‘package:base’:
+
+    date
+
+Attachement du package : ‘dplyr’
+
+The following objects are masked from ‘package:lubridate’:
+
+    intersect, setdiff, union
+
+The following objects are masked from ‘package:stats’:
+
+    filter, lag
+
+The following objects are masked from ‘package:base’:
+
+    intersect, setdiff, setequal, union
+
+ +

+Alors, à quoi ressemblent ces données: +

+
+ +
str(df)
+summary(df)
+
+
+ +
+'data.frame':	566 obs. of  3 variables:
+ $ Date   : Factor w/ 420 levels "2011-02-08","2011-02-17",..: 1 1 1 1 1 2 3 4 5 6 ...
+ $ Keyword: Factor w/ 36 levels "Argonne","autotuning",..: 22 3 36 36 36 30 30 29 29 36 ...
+ $ Year   : num  2011 2011 2011 2011 2011 ...
+         Date         Keyword         Year     
+ 2011-02-08:  5   WP4     : 77   Min.   :2011  
+ 2016-01-06:  5   POLARIS : 56   1st Qu.:2013  
+ 2016-03-29:  5   R       : 48   Median :2016  
+ 2017-12-11:  5   LIG     : 40   Mean   :2015  
+ 2017-12-12:  5   Teaching: 38   3rd Qu.:2017  
+ 2016-01-26:  4   WP7     : 36   Max.   :2018  
+ (Other)   :537   (Other) :271
+
+ +

+Les types ont l'air correct, 568 entrées, tout va bien. +

+
+ +
df %>% group_by(Keyword, Year) %>% summarize(Count=n()) %>% 
+   ungroup() %>% arrange(Keyword,Year) -> df_summarized
+df_summarized
+
+
+ +
+# A tibble: 120 x 3
+   Keyword     Year Count
+   <fct>      <dbl> <int>
+ 1 Argonne     2012     4
+ 2 Argonne     2013     6
+ 3 Argonne     2014     4
+ 4 Argonne     2015     1
+ 5 autotuning  2012     2
+ 6 autotuning  2014     1
+ 7 autotuning  2016     4
+ 8 Blog        2011     2
+ 9 Blog        2012     6
+10 Blog        2013     4
+# ... with 110 more rows
+
+ +

+Commençons par compter combien d'annotation je fais par an. +

+
+ +
df_summarized_total_year = df_summarized %>% group_by(Year) %>% summarize(Cout=sum(Count))
+df_summarized_total_year
+
+
+ +
+# A tibble: 8 x 2
+   Year  Cout
+  <dbl> <int>
+1  2011    24
+2  2012    57
+3  2013    68
+4  2014    21
+5  2015    80
+6  2016   133
+7  2017   135
+8  2018    48
+
+ +

+Ah, visiblement, je m'améliore au fil du temps et en 2014, j'ai oublié +de le faire régulièrement. +

+ +

+L'annotation étant libre, certains mots-clés sont peut-être très peu +présents. Regardons ça. +

+
+ +
df_summarized %>% group_by(Keyword) %>% summarize(Count=sum(Count)) %>%  arrange(Count) %>% as.data.frame()
+
+
+ +
+         Keyword Count
+1       Gradient     1
+2          LaTeX     1
+3         Orange     1
+4             PF     1
+5        twitter     2
+6            WP1     2
+7            WP6     2
+8   Epistemology     3
+9           BULL     4
+10 Vulgarization     4
+11      Workload     4
+12    GameTheory     5
+13      noexport     5
+14    autotuning     7
+15        Python     7
+16         Stats     7
+17           WP0     7
+18            SG     8
+19           git     9
+20     HACSPECIS    10
+21          Blog    12
+22         BOINC    12
+23          HOME    12
+24           WP3    12
+25       OrgMode    14
+26       Argonne    15
+27        Europe    18
+28       Seminar    28
+29           WP8    28
+30         INRIA    30
+31           WP7    36
+32      Teaching    38
+33           LIG    40
+34             R    48
+35       POLARIS    56
+36           WP4    77
+
+ +

+OK, par la suite, je me restraindrai probablement ceux qui +apparaissent au moins trois fois. +

+
+
+ +
+

3 Représentations graphiques

+
+

+Pour bien faire, il faudrait que je mette une sémantique et une +hiérarchie sur ces mots-clés mais je manque de temps là. Comme +j'enlève les mots-clés peu fréquents, je vais quand même aussi +rajouter le nombre total de mots-clé pour avoir une idée de ce que +j'ai perdu. Tentons une première représentation graphique: +

+
+ +
library(ggplot2)
+df_summarized %>% filter(Count > 3) %>%
+    ggplot(aes(x=Year, y=Count)) + 
+    geom_bar(aes(fill=Keyword),stat="identity") + 
+    geom_point(data=df_summarized %>% group_by(Year) %>% summarize(Count=sum(Count))) +
+    theme_bw()
+
+
+ + +
+

barchart1.png +

+
+ +

+Aouch. C'est illisible avec une telle palette de couleurs mais vu +qu'il y a beaucoup de valeurs différences, difficile d'utiliser une +palette plus discriminante. Je vais quand même essayer rapidement +histoire de dire… Pour ça, j'utiliserai une palette de couleur +("Set1") où les couleurs sont toutes bien différentes mais elle n'a +que 9 couleurs. Je vais donc commencer par sélectionner les 9 +mots-clés les plus fréquents. +

+ +
+ +
library(ggplot2)
+frequent_keywords = df_summarized %>% group_by(Keyword) %>% 
+    summarize(Count=sum(Count)) %>%  arrange(Count) %>% 
+    as.data.frame() %>% tail(n=9)
+
+df_summarized %>% filter(Keyword %in% frequent_keywords$Keyword) %>%
+    ggplot(aes(x=Year, y=Count)) + 
+    geom_bar(aes(fill=Keyword),stat="identity") + 
+    geom_point(data=df_summarized %>% group_by(Year) %>% summarize(Count=sum(Count))) +
+    theme_bw() + scale_fill_brewer(palette="Set1")
+
+
+ + +
+

barchart2.png +

+
+ +

+OK. Visiblement, la part liée à l'administration (Inria, LIG, POLARIS) +et à l'enseignement (Teaching) augmente. L'augmentation des parties +sur R est à mes yeux signe d'une amélioration de ma maîtrise de +l'outil. L'augmentation de la partie Seminar ne signifie pas grand +chose car ce n'est que récemment que j'ai commencé à étiqueter +systématiquement les notes que je prenais quand j'assiste à un +exposé. Les étiquettes sur WP ont trait à la terminologie d'un ancien +projet ANR que j'ai continuer à utiliser (WP4 = prédiction de +performance HPC, WP7 = analyse et visualisation, WP8 = plans +d'expérience et moteurs d'expérimentation, …). Le fait que WP4 +diminue est plutôt le fait que les informations à ce sujet sont +maintenant plutôt les journaux de mes doctorants qui réalisent +vraiment les choses que je ne fais que superviser. +

+ +

+Bon, une analyse de ce genre ne serait pas digne de ce nom sans un +wordcloud (souvent illisible, mais tellement sexy! ☺). Pour ça, je +m'inspire librement de ce post: +http://onertipaday.blogspot.com/2011/07/word-cloud-in-r.html +

+ +
+ +
library(wordcloud) # à installer via install.package("wordcloud")
+library(RColorBrewer)
+pal2 <- brewer.pal(8,"Dark2")
+df_summarized %>% group_by(Keyword) %>% summarize(Count=sum(Count)) -> df_summarized_keyword
+wordcloud(df_summarized_keyword$Keyword, df_summarized_keyword$Count,
+     random.order=FALSE, rot.per=.15, colors=pal2, vfont=c("sans serif","plain"))
+
+
+ + +
+

wordcloud.png +

+
+ +

+Bon… voilà, c'est "joli" mais sans grand intérêt, tout +particulièrement quand il y a si peu de mots différents. +

+
+
+
+
+

Auteur: Laurence Farhi

+

Created: 2018-06-29 Fri 11:21

+

Emacs 25.3.1 (Org mode 8.2.10)

+

Validate

+
+ + diff --git a/module2/exo4/stat_activity.org b/module2/exo4/stat_activity.org new file mode 100644 index 0000000..a1fd730 --- /dev/null +++ b/module2/exo4/stat_activity.org @@ -0,0 +1,367 @@ +#+TITLE: Analyse des mots-clés de mon journal +#+LANGUAGE: fr + +#+HTML_HEAD: +#+HTML_HEAD: +#+HTML_HEAD: +#+HTML_HEAD: +#+HTML_HEAD: +#+HTML_HEAD: + +#+PROPERTY: header-args :session :exports both :eval never-export + +J'ai la chance de ne pas avoir de comptes à rendre trop précis sur le +temps que je passe à faire telle ou telle chose. Ça tombe bien car je +n'aime pas vraiment suivre précisément et quotidiennement le temps que +je passe à faire telle ou telle chose. Par contre, comme vous avez pu +le voir dans une des vidéos de ce module, je note beaucoup +d'information dans mon journal et j'étiquette (quand j'y pense) ces +informations. Je me suis dit qu'il pourrait être intéressant de voir +si l'évolution de l'utilisation de ces étiquettes révélait quelque +chose sur mes centres d'intérêts professionnels. Je ne compte pas en +déduire grand chose de significatif sur le plan statistique vu que je +sais que ma rigueur dans l'utilisation de ces étiquettes et leur +sémantique a évolué au fil des années mais bon, on va bien voir ce +qu'on y trouve. + +* Mise en forme des données +Mon journal est stocké dans ~/home/alegrand/org/journal.org~. Les +entrées de niveau 1 (une étoile) indiquent l'année, celles de niveau 2 +(2 étoiles) le mois, celles de niveau 3 (3 étoiles) la date du jour et +enfin, celles de profondeur plus importantes ce sur quoi j'ai +travaillé ce jour là. Ce sont généralement celles-ci qui sont +étiquetées avec des mots-clés entre ":" à la fin de la ligne. + +Je vais donc chercher à extraire les lignes comportant trois ~*~ en +début de ligne et celles commençant par une ~*~ et terminant par des +mots-clés (des ~:~ suivis éventuellement d'un espace). L'expression +régulière n'est pas forcément parfaite mais ça me donne une première +idée de ce que j'aurais besoin de faire en terme de remise en forme. + +#+begin_src shell :results output :exports both :eval never-export +grep -e '^\*\*\* ' -e '^\*.*:.*: *$' ~/org/journal.org | tail -n 20 +#+end_src + +#+RESULTS: +#+begin_example +,*** 2018-06-01 vendredi +,**** CP Inria du 01/06/18 :POLARIS:INRIA: +,*** 2018-06-04 lundi +,*** 2018-06-07 jeudi +,**** The Cognitive Packet Network - Reinforcement based Network Routing with Random Neural Networks (Erol Gelenbe) :Seminar: +,*** 2018-06-08 vendredi +,**** The credibility revolution in psychological science: the view from an editor's desk (Simine Vazire, UC DAVIS) :Seminar: +,*** 2018-06-11 lundi +,**** LIG leaders du 11 juin 2018 :POLARIS:LIG: +,*** 2018-06-12 mardi +,**** geom_ribbon with discrete x scale :R: +,*** 2018-06-13 mercredi +,*** 2018-06-14 jeudi +,*** 2018-06-20 mercredi +,*** 2018-06-21 jeudi +,*** 2018-06-22 vendredi +,**** Discussion Nicolas Benoit (TGCC, Bruyère) :SG:WP4: +,*** 2018-06-25 lundi +,*** 2018-06-26 mardi +,**** Point budget/contrats POLARIS :POLARIS:INRIA: +#+end_example + +OK, je suis sur la bonne voie. Je vois qu'il y a pas mal d'entrées +sans annotations. Tant pis. Il y a aussi souvent plusieurs mots-clés +pour une même date et pour pouvoir bien rajouter la date du jour en +face de chaque mots-clés, je vais essayer un vrai langage plutôt que +d'essayer de faire ça à coup de commandes shell. Je suis de l'ancienne +génération donc j'ai plus l'habitude de perl que de python pour ce +genre de choses. Curieusement, ça s'écrit bien plus facilement (ça m'a +pris 5 minutes) que ça ne se relit... \smiley + +#+begin_src perl :results output :exports both :eval never-export +open INPUT, "/home/alegrand/org/journal.org" or die $_; +open OUTPUT, "> ./org_keywords.csv" or die; +$date=""; +print OUTPUT "Date,Keyword\n"; +%skip = my %params = map { $_ => 1 } ("", "ATTACH", "Alvin", "Fred", "Mt", "Henri", "HenriRaf"); + +while(defined($line=)) { + chomp($line); + if($line =~ '^\*\*\* (20[\d\-]*)') { + $date=$1; + } + if($line =~ '^\*.*(:\w*:)\s*$') { + @kw=split(/:/,$1); + if($date eq "") { next;} + foreach $k (@kw) { + if(exists($skip{$k})) { next;} + print OUTPUT "$date,$k\n"; + } + } +} +#+end_src + +#+RESULTS: + +Vérifions à quoi ressemble le résultat: +#+begin_src shell :results output :exports both +head org_keywords.csv +echo "..." +tail org_keywords.csv +#+end_src + +#+RESULTS: +#+begin_example +Date,Keyword +2011-02-08,R +2011-02-08,Blog +2011-02-08,WP8 +2011-02-08,WP8 +2011-02-08,WP8 +2011-02-17,WP0 +2011-02-23,WP0 +2011-04-05,Workload +2011-05-17,Workload +... +2018-05-17,POLARIS +2018-05-30,INRIA +2018-05-31,LIG +2018-06-01,INRIA +2018-06-07,Seminar +2018-06-08,Seminar +2018-06-11,LIG +2018-06-12,R +2018-06-22,WP4 +2018-06-26,INRIA +#+end_example + +C'est parfait! + +* Statistiques de base +Je suis bien plus à l'aise avec R qu'avec python. J'utiliserai les +package du tidyverse dès que le besoin s'en fera sentir. Commençons +par lire ces données: +#+begin_src R :results output :session *R* :exports both +library(lubridate) # à installer via install.package("tidyverse") +library(dplyr) +df=read.csv("./org_keywords.csv",header=T) +df$Year=year(date(df$Date)) +#+end_src + +#+RESULTS: +#+begin_example + +Attachement du package : ‘lubridate’ + +The following object is masked from ‘package:base’: + + date + +Attachement du package : ‘dplyr’ + +The following objects are masked from ‘package:lubridate’: + + intersect, setdiff, union + +The following objects are masked from ‘package:stats’: + + filter, lag + +The following objects are masked from ‘package:base’: + + intersect, setdiff, setequal, union +#+end_example + +Alors, à quoi ressemblent ces données: +#+begin_src R :results output :session *R* :exports both +str(df) +summary(df) +#+end_src + +#+RESULTS: +#+begin_example +'data.frame': 566 obs. of 3 variables: + $ Date : Factor w/ 420 levels "2011-02-08","2011-02-17",..: 1 1 1 1 1 2 3 4 5 6 ... + $ Keyword: Factor w/ 36 levels "Argonne","autotuning",..: 22 3 36 36 36 30 30 29 29 36 ... + $ Year : num 2011 2011 2011 2011 2011 ... + Date Keyword Year + 2011-02-08: 5 WP4 : 77 Min. :2011 + 2016-01-06: 5 POLARIS : 56 1st Qu.:2013 + 2016-03-29: 5 R : 48 Median :2016 + 2017-12-11: 5 LIG : 40 Mean :2015 + 2017-12-12: 5 Teaching: 38 3rd Qu.:2017 + 2016-01-26: 4 WP7 : 36 Max. :2018 + (Other) :537 (Other) :271 +#+end_example + +Les types ont l'air correct, 568 entrées, tout va bien. +#+begin_src R :results output :session *R* :exports both +df %>% group_by(Keyword, Year) %>% summarize(Count=n()) %>% + ungroup() %>% arrange(Keyword,Year) -> df_summarized +df_summarized +#+end_src + +#+RESULTS: +#+begin_example +# A tibble: 120 x 3 + Keyword Year Count + + 1 Argonne 2012 4 + 2 Argonne 2013 6 + 3 Argonne 2014 4 + 4 Argonne 2015 1 + 5 autotuning 2012 2 + 6 autotuning 2014 1 + 7 autotuning 2016 4 + 8 Blog 2011 2 + 9 Blog 2012 6 +10 Blog 2013 4 +# ... with 110 more rows +#+end_example + +Commençons par compter combien d'annotation je fais par an. +#+begin_src R :results output :session *R* :exports both +df_summarized_total_year = df_summarized %>% group_by(Year) %>% summarize(Cout=sum(Count)) +df_summarized_total_year +#+end_src + +#+RESULTS: +#+begin_example +# A tibble: 8 x 2 + Year Cout + +1 2011 24 +2 2012 57 +3 2013 68 +4 2014 21 +5 2015 80 +6 2016 133 +7 2017 135 +8 2018 48 +#+end_example + +Ah, visiblement, je m'améliore au fil du temps et en 2014, j'ai oublié +de le faire régulièrement. + +L'annotation étant libre, certains mots-clés sont peut-être très peu +présents. Regardons ça. +#+begin_src R :results output :session *R* :exports both +df_summarized %>% group_by(Keyword) %>% summarize(Count=sum(Count)) %>% arrange(Count) %>% as.data.frame() +#+end_src + +#+RESULTS: +#+begin_example + Keyword Count +1 Gradient 1 +2 LaTeX 1 +3 Orange 1 +4 PF 1 +5 twitter 2 +6 WP1 2 +7 WP6 2 +8 Epistemology 3 +9 BULL 4 +10 Vulgarization 4 +11 Workload 4 +12 GameTheory 5 +13 noexport 5 +14 autotuning 7 +15 Python 7 +16 Stats 7 +17 WP0 7 +18 SG 8 +19 git 9 +20 HACSPECIS 10 +21 Blog 12 +22 BOINC 12 +23 HOME 12 +24 WP3 12 +25 OrgMode 14 +26 Argonne 15 +27 Europe 18 +28 Seminar 28 +29 WP8 28 +30 INRIA 30 +31 WP7 36 +32 Teaching 38 +33 LIG 40 +34 R 48 +35 POLARIS 56 +36 WP4 77 +#+end_example + +OK, par la suite, je me restraindrai probablement ceux qui +apparaissent au moins trois fois. + +* Représentations graphiques +Pour bien faire, il faudrait que je mette une sémantique et une +hiérarchie sur ces mots-clés mais je manque de temps là. Comme +j'enlève les mots-clés peu fréquents, je vais quand même aussi +rajouter le nombre total de mots-clé pour avoir une idée de ce que +j'ai perdu. Tentons une première représentation graphique: +#+begin_src R :results output graphics :file barchart1.png :exports both :width 600 :height 400 :session *R* +library(ggplot2) +df_summarized %>% filter(Count > 3) %>% + ggplot(aes(x=Year, y=Count)) + + geom_bar(aes(fill=Keyword),stat="identity") + + geom_point(data=df_summarized %>% group_by(Year) %>% summarize(Count=sum(Count))) + + theme_bw() +#+end_src + +#+RESULTS: +[[file:barchart1.png]] + +Aouch. C'est illisible avec une telle palette de couleurs mais vu +qu'il y a beaucoup de valeurs différences, difficile d'utiliser une +palette plus discriminante. Je vais quand même essayer rapidement +histoire de dire... Pour ça, j'utiliserai une palette de couleur +("Set1") où les couleurs sont toutes bien différentes mais elle n'a +que 9 couleurs. Je vais donc commencer par sélectionner les 9 +mots-clés les plus fréquents. + +#+begin_src R :results output graphics :file barchart2.png :exports both :width 600 :height 400 :session *R* +library(ggplot2) +frequent_keywords = df_summarized %>% group_by(Keyword) %>% + summarize(Count=sum(Count)) %>% arrange(Count) %>% + as.data.frame() %>% tail(n=9) + +df_summarized %>% filter(Keyword %in% frequent_keywords$Keyword) %>% + ggplot(aes(x=Year, y=Count)) + + geom_bar(aes(fill=Keyword),stat="identity") + + geom_point(data=df_summarized %>% group_by(Year) %>% summarize(Count=sum(Count))) + + theme_bw() + scale_fill_brewer(palette="Set1") +#+end_src + +#+RESULTS: +[[file:barchart2.png]] + +OK. Visiblement, la part liée à l'administration (~Inria~, ~LIG~, ~POLARIS~) +et à l'enseignement (~Teaching~) augmente. L'augmentation des parties +sur ~R~ est à mes yeux signe d'une amélioration de ma maîtrise de +l'outil. L'augmentation de la partie ~Seminar~ ne signifie pas grand +chose car ce n'est que récemment que j'ai commencé à étiqueter +systématiquement les notes que je prenais quand j'assiste à un +exposé. Les étiquettes sur ~WP~ ont trait à la terminologie d'un ancien +projet ANR que j'ai continuer à utiliser (~WP4~ = prédiction de +performance HPC, ~WP7~ = analyse et visualisation, ~WP8~ = plans +d'expérience et moteurs d'expérimentation, ...). Le fait que ~WP4~ +diminue est plutôt le fait que les informations à ce sujet sont +maintenant plutôt les journaux de mes doctorants qui réalisent +vraiment les choses que je ne fais que superviser. + +Bon, une analyse de ce genre ne serait pas digne de ce nom sans un +/wordcloud/ (souvent illisible, mais tellement sexy! \smiley). Pour ça, je +m'inspire librement de ce post: +http://onertipaday.blogspot.com/2011/07/word-cloud-in-r.html + +#+begin_src R :results output graphics :file wordcloud.png :exports both :width 600 :height 400 :session *R* +library(wordcloud) # à installer via install.package("wordcloud") +library(RColorBrewer) +pal2 <- brewer.pal(8,"Dark2") +df_summarized %>% group_by(Keyword) %>% summarize(Count=sum(Count)) -> df_summarized_keyword +wordcloud(df_summarized_keyword$Keyword, df_summarized_keyword$Count, + random.order=FALSE, rot.per=.15, colors=pal2, vfont=c("sans serif","plain")) +#+end_src + +#+RESULTS: +[[file:wordcloud.png]] + +Bon... voilà, c'est "joli" mais sans grand intérêt, tout +particulièrement quand il y a si peu de mots différents. diff --git a/module2/exo4/wordcloud.png b/module2/exo4/wordcloud.png new file mode 100644 index 0000000000000000000000000000000000000000..95cb7343027266dd3187a69db1e0351aeda84dce GIT binary patch literal 24697 zcmeEt1yfvIu)`J0?m+?sx8Om8yL*BKhhV|o-5uV1_tyInuj*Az z70ke#(|hmk)vLSLiBwjUdXIvS0sz2!8R^fe0065605I_&Sm-A&kjM!DAO&PTi>iBN z9j|zL>Fz8DpFc64baphG@q1)-a?41Q9%D(OBFNG)bubaRb=v2JHFY!;Mc*PZDT^)C zi=c~dU+}NaZX`ClZ|bGBr6o4!DvM0~^2T+X9V7|{$U?!g zknON8m{73TzSwWl&mgkoxlbT8F;EfbJ2B{o*6+W7$wHNNdjJ2Q{{L?LzvLT_Vrzg{ z8mSUx%ZjEH`X}}RWtN1v^>^=cPAzh$i7)Xequ3NA)z@9NGgP{jLcvDS;Jn(Ju8sTQ z5M%~a`lbf;xZ`(W^e?~d>NOd4zuR*SC2KVjn#yp{Cv?tD855;yiWpeh@b*!?L>+V z8?fF`PSF$$KK%Hf5p0eedO!XSHc4Q<2XZ-xy4z|Fqe7x$gOGp^Zk#DL>{ZNJ4bAn| z1|An!2v`aRG=Sft+vVdX-8`n^;)+48(>P+Bzf7#Txq(FIAPkVpncG(DH4MG0XTvNC zX_kja)o8U=f?;dz1w2q;%i|+HG((<}H*Sg)G+m{L+@Cc_0*GzBLnIR`7$sH7a%+MU z$sT-d?$w0{^8{N;qX2c=Ho%|wQWKVEMw2Oi;1~xd0N7^u84y415}k5A0k0yI#A;;J$bEM8UCY z1SaPgj#7W5j_bvFZ#go9hk^wYsz_e#>>1v=?`*k5iljJchE;l<^o|!TmFOAWd{MrB zkw-KQZ%3>1v%^)pR*vvSO}d#Z5dT;3L^w%ad$0D0Dr)M{2Be<|g+=CTK~lHU$n#?l z-S=eRt2((p=mxhh9(}PZRJR>Yur>7;h57L|z@=-SY>8v8Yn3RkL)KM0Yk}outWuQ@ z|Cc1jZ$YyhZN$P1^STNSsMb7dEwHnw2>uF|Mfn2Glfz&EE!lIbW~8U9@KnHw+kF;` z9@s4gx8ZISsDv`3A?w>|;7RG``Jk6bs^ecZ)?|Z6hvG6-ojS(n zD2yFCfDd&Iy3)IUC!&FsKg-okGb~1tf*RjT!NXARvyItc02P(O>=`uYITm@wd-&Lea%?SiQg+Qs3Ft}qQJjJAD;jZWB@E;#(++fEo0>FCO@+S1bxphAmsKk zul%f8GywxNY7Jlbb?8x~4h(CU(2ZOHB3TCz?(O%a99__mNk*^K(kx?z3Hn+H^bjHU zOST;KU2^4?4@`UiTWuTD#2{!^E@Snd^K)sd1p~B+!zxxVM$qjOvD~_FSfcc221ZB! z2+z#+T|6_YO~peD6V;klG~obPP^A#$xM5Wq1l+oFJr)=P>s~^`u7GmY1mE8kSU{AE zJ}>>BAitPkws{C4Di9kV`0pw$2QOr5)AhrdNGP+zf18-_C%#;G--{MrQIuE zXr5F>i(`Puz7eQtu6J%UALxn=w+oBfYVEz9Q&kuUAHYDZV>0GyD}9)$>$rR$L$hn1 z&Kn#T7x=NZf(2jm)8=cMS`;Oo%WOL*lAm3nSQ-K#=fYSGIa7%&@~I`)&4UR-SlH#R z^iA8-kmuaCx8c2Mau58x?!Y+#1Vuh(r74}{OXsU6?PBYMP^-~4gSnjZCeT@;e{^fpA2_mp_-1Gv~E(g-rYG|a7dk4_0m~~MN>fU&tRokl5)I58i zZw&C9*1!M~U#Fp9O{aGs)kA6QI1;r!wKaw5|v&bP%=Emj)gDPjW^#Ykx^9>Ix?L2%-^C#OIIZx2Sh^WnP`Ns-fZmsakm644TRS|t?QS+Q%OOLxoRe$;YgagKT0Ln# z+tv;RXH)BWymR6MhaH5xReQ)Ma^Pzv8t$|&Keh4;LXFB6lhT0D<89Z8@O^^cA!q5^ z4_s5{p2s4)%d+}Cf!eUCy`libb>6(S7_wxc8i}vWs_v&%_D%RolpvrnXB^67SSB*h zwMR-pgYHQF?l}&P(rp~g-*7^a7b{8!1i}kf%LS7QCawDFPMR{3Vw*|_I!3M-;uh`G z_8`je2taOgR#%4-1S>W1W;?j0^PdEE6T%+N|f-b^-vr=qGZa?dV)e_2!7Vy}K^inN{#f*-_xz z)a|sLr<_<`k0iPMY*xGJ5675EDn#ATeR7QouJJL(So`wNs<5Ca(mu0^x7w?^DF3NR z58X;hMrIYufz?~{;TZ&3BH)kp#p*a>j20pgW+MpnrQTtvy@P>QK+k92BMXY3A_w9p z^Jynaaan@C)_T;o`$ozIW7g(DniP>p=J%UA7 z-z*W8&Bx3q3rT2cdQJk%@cvXt)}@2sBg-B17%eFzg^5&i&1&6GV9fd2>5|lLzU;egaKNl+ErfT9m^Csm2VU-3BgueFO4T)5Ot3 zzndtwE%LuOr0z*1%hI7Y-)HsHi|5EbnfnS3x}w&Psg_yN8rV_Xp6P|%ZWV9!Txo>s zMUhHi>K9FD&wHtVR;DhM{q^<5?tW`v>n5k_L7NJXZ5HW9>a<$#(GH(@>~UmmziWOV`qf1@$qNdE|78itLvjS9sva1`RLjhFbui;bYda zd^vlvt3#asvERe5d$I;<1}8gHyQTI$qW*@Xj`p>0{%%$Ns=obqbVV@0{g0*ETbY-b zZbV>jP>H}HAmoPx0OsqYnDN5}M8F;VucjSaN`iw`zKQOOR`$0+ZwcTwN+WQ7^vu|< z^@aVH&uETBuuyUU2hcZaUnCwy{{(^*$>VSoS$A(%zrHNxv+8gR+^fhYzynqEB~fXN zV@yavN*Rhk5I=gw-}k97__fEuWfDL%P@_acOkp@#5b7HPDRhX;gL?H@YCZ@mp!=mB-ZKs8=iSnGpfX zd&`0g0g|(gXjC4nDY90KU@z@<=!>8OBA?L7j&aBZr=6shlw40efcWow;WnPx z$Z{aUwZ1$3W1KuW^d=BmTl_W#i>IUa`0MEeoV~&t;}8;yZ($wHnOvBE=+j~z;($EV_dm77_kUxM!wBJ1Tcb_+ zRslI*0w}mcrGq{q(Y97S^%@>k2Qt>;69oU8p6MFAgyE(<`ri9Q1W!dy86|Y%orB6F zlkg4v{+}s!o*eRjt2qZHd_x~XmrIH<{5Ff3FADxjIlFm=`9!=V4C_0*V=3u#U8R(m zyeZI`EU|9_J>@i<8q?|d0L!Os%3g2v$d3n{w9 zWeDq=*cyV^K6)_J+l$^S3?c^`Avjn&q;ohEvxS235#Nb%ydED|eYg2D5?`v7v$pJF zBT=p4F+l?JJ9pkEcU3k6GlYWHz$SG~I1~2=1Iii5E1*8o))~VkVf}q+Kx1O*pYs?0 zpPRa_rmi_Rzb=BCAylv0YE!)Ic6&>qw_enF`Lq`V*++w&u$RoH2?e`yoqqEuDG$ zVa#ukQGNq|Eeq@nVP=2GS;+GO5$szLLi=l5aam{!;$833hjHFhWpDdbAm^2s-Y}R| z$v#An957OyA%}6Pdsg26JY6e4FcBBqncQp4$#slhuj=&z5w@l4$*^gm$jeDc%>t9$ z&dRp)r3~lYnSacv@@*Ba;M@noH5$;DsmWse1<20@NVizpesY|Fq9wgI;1Plr6OiuL#eIs;w{xE z?NmrWPW8BN?>N$G%Cb7u+u}DZWP~1d3pVyELc_qphKJx)G<3hW?{90qH)qQd=C_m> zDL)e!>stcba?TX9CNk{Z+Pbd{XD3o+Q*}2}B-HA~kCb@3FPd&2W((Vtnw2ITxzS`J zH&&|qGgG3_;X)TCEj1S)i4)5!5u`jMeue>0$zJC4O1f!y-;!lugYBdzg&4+ z=60ZEiIRaeguB=_Hp+L^wzv6_OW6FyZ^!#cC}=rdR&DZ zML@L)ECl*7B$R6e-=g-g2816Cm&GAwl$8sH*H)Q57iQgVgz?`M|4tzS0ODc&bTfMV z<#wk%GMWPYlUe3lm|*_!XkiLk8$2{qJMU^W+Xq6X)lG>3p56fPdPfroA((y=e{MBX zR$rFoCu*bkd^DL1pYYD`9*%WP7|RnPd4|AH<00F2TXeB-VD0z%H% z%!V=Ymfq>dWvThe7g2@HU!QDo)IM>rJMgUs`B;Wu&pGc5F0VG&v2}{409|I!Jf%cJ zwNct9M-2=Fk@ZK*{cgusD`j|ktoZYqim4=zb0kv`V(XIAI~If0|58uko5_5wPs*VQ zz5o3*-ud&+d8&O=2Bhrn*sfZ50)jI(e)nq3P~-Qe9}M{r%B49dteP&niiP6XbXyID zQoVMTy!g`L>t_$wL^+i8m)^PksV3L9GgpzFvIh@GFW*EG&b5QBlgKR*Fuvh`H>vNg zf5?-G#<9rk*5Mk#6Iu&Im8&jKX5?%q_Axw{@=5c3YZGiJlI$o^x>H=qSn3E|#Mbex z^CZ(fb6S1E&XczrFC%XKrX0Bv7Xa&5-N>o+>!m)<+cLiO$BKrVt;3a2E7i4(`u=f;j(j2EWQrp8*k}r%LD?I}XM^n74pm<4yE3h?;yp zr61&8Z8Cg=zJt-I*t0p_$c|BOl6^W>fV)8x6fO~n*;Sh7Bk>WwA6J38w-|Hmv2_%& zP09*4|M}%Bs+TD!n_n-FI7W_)xvlc%x?MILiiF}aqNWeobAdd zIQi>KoOwiX-HBZMYC{rns8<-AjLA0R)83>LT`8y(R*4VeP@B9y2!P#5DEg@ZAlMQv z=5RL-59*4WR!dSeNfexk7iIP;z8cvq3enai*5YIF`jN z@!0w$N72cyn|k>nU7BA_=bTd(-Y0|628i{pZ3U{WIfs3!(+!n`ge$&cI`ly?Rmv>-cp?-SB#@oG!cm449IXO!_Sb-V1Uk*?GQ6=AfCmtZF#76`!G& z2I8?+8+EF%#+o$6F(KUMK;U25flqYw@FX*+AnEJbNG&tHvg&7=x0f7RQ5 zy4YYIY)XNrn_^iQ-nXFYHlC2VTlFR4ubO39l^=@mLW_nTMla2z7rGh6Pkkcl(!WH= zZ4|#i6N+4gkMG#s8-C{-Hl!!w+*bw?mc*JqasJxneka#NT}%o9;0Cegbqei`&e%%1 zUVD<5N1|J7D=(Eq_adml!Qp9=M_I`o%FRx21sVI*ul^nJ;3;_Vg=*i@rzXgHzi-yO z#tVjo+FG9SCT!2?;pxNC+^vn=8_*ac?-q%R~E*1w?Y= zJBNuI$J$@>nY?)w&{Z^if`u0}|E}8_&WW{u&6BSzX*=Fb4i?G_9_={I&p8d!2o-=YmwuBgA2hgV_*@rw&-LWYghQ%7G4rL`R{-1k}3P1qT;kT zDWSHWkdZ(uqLr_$>p=+n8iC3YxA~sbjTo9hFQk5b%{G4X zZA5BbuvvUQW$jR{Q)&8@>M8N)UFsREqWH|T$ItXxDsbg9vlXhRT{8AE))VbetBTRf zM(l*-84B#tzln!K)e5HZE*-PBQP0DnsdkvqaisqUcgg3!nX<*JT5RsdO}uhd#E(H} z==rA<6?^Jp)+IYcGN)suxe|rBa#0F-w|Php?;$l8=92u`DoRoQl(eOkXQ?8+-BL%- zd2??lu;m%gZif+nWV>-n0-2Y)j2lj2@~(jYU~@%u&G4h+szv$3MCpnzKf%C0ecs$% zFezqA+zqpt|IdQcFNqbl5w6rBn#m7}0zze;NC4RGIj-XTbd{>^cYANs$NQR>Wu@_m zMSb716f;AqsPJ078puLF56@4Z zu+!ElR!;rb;&)dRqtJ^h$wa}@2j|q1#_#HpGDgk&$Zt>deuyTvw@rk(xzdL5{(IhS z%}T!^yvy;bxY}aV(a6hr9CiAbmKLDIzt>puWHs34H+ZW-wuA(W!iKPT&B^wb$gY3T#NT!Bp{R-^xrY>Q$_KnOB@lz zD$H2o(B71i{E-q20lS~JaUK{1qt>08>eZxcYDCp*mKMK;nT21dpZlR}1=j2kopg9U zoh4!~AMn0jl^lT!(*FiJ+Sz^K*&7I@o4a>PJKL`APlvFzEkM)C?P#WtLm`5v9O|j2 z($;T%U2!JI_Pao}^^k@RY4#@#Le5}j`v1zs3n>asPe_jHJodR8g1^QiA*%#jPi)g7 zdSmU-lKxSX(#)RvK|RI?N@>KPA3Kp0O_^%qxy$u?~K~|Ww;PNK27rI+~ERb`NyFvH1?BN$KH?!0|IVoaa zs}@YA1kurnP7ar?#XK)k;1>-_5&HG9UPj+ySb53lxSffV>q?`ZIiEd+*B#1)5Dt9X zhHeVf)LY`Wotn1D4{)L~bycZm`eQzdJWbVyt95^B+z9A~@RMxGI0*mS7wbztYzy7K z|C)5xcdff-*bC1Nou3uK;N5&mQ2=1&8fi^xKnEq>WSKQgs|nK|3UNgdP4fi$7y7ny z-0dol@DJI7vPjQ2<~~w-mnT7_qkhazzvcRmh{>EXi8Hl3D_UuUIrm>w#W8iMDU}sJ zn;$cWDo6bf38fu;7F|J$`HcScv&DCm!f&)vc`yJTh0nuG6?6>9dtfz^TspA%w~#|O z%h|i+rgP?t@_Mhzp25j7<=K@a_2fDEPzhX&En=y-@}|g3cQ{Tc@Xe#RV|(coZjFt3 z33X`B8lMTC38D}<-gsAjd6}#HkM=VTbg+mYNE^~oYbN{M)U+CLOLJSJkBfSL;QUMz zYV#_F5-rUub^jyTQUv_a*O+L@y-QdUC@|Oz8x}qo;uT^a@vhz+s54K>4_$`4`|R}5 zh!M~{DGFE8zFoAg?1L#6AaL=)ieFH)gOMeP&@n0~^W%3k_TTxhfvsQkJyU+mR<2OMo7| zdqYS;v=bIX9Hwq?h0-hxubMrNG%|B#WDHXJNZO7u&iy4tE zGrFO%4*#j+u4r>KB{2)iIJzngJFHs<$vKGsOFM%Y$iz*}up;#n-r9=Rse1m}4tM}` zOfmiKVQ&Kwb4U1853fF?;Mx+Rhmm(gibX7|k$GTTs zw-coA6cYkoCmWws6&~c~2Zlv@GeYT>5eI$Bv)dhJ$9&`Pje=wy{aT`LW^1}KHdYD5 z3O&DDa%f_x|MPTO>lZXR_j#71M+(yd1w)L;6l{Ec`=Cg0!aRR?1_*8|XG{57yYuwG5X9a#m zV7PaJ+~K6LXV6{#J&Rkv1>@^OgNASBCB~2@e@6N-4cCS~ztzVaRp`_mxN^Z5M=GCfMm^x_wJ!{(OG;Snf z1;k9r-w+ZjDx)P^?8=e%K3B!4`OPX(>3@&^=!tmvy3m-Hg?{9Y${j!YkBK-$x$Jz3 z7C&$^PEvg8&$rRvUaeW^YpRRvWgARK!L?oQtye4kN@fk8s>g308ay=ZkPSuG3$im8 zjH3UwXbGO=7FyNdt+yyk)jZskJe|kSqgz%KV(peZl`sd|A9~Vq8AwK5L$hTOf@g8S z3|^?sqVRF9BC@9+^|)5fr6|-ye4J$h8}B9GYs-fG&^h%4ayS4~!MzDh`bSpg>3Nzgpnj%H^X2kH-rC~gBk_ym;LUHMgIpna; zf9gD%#zS#}_Ip5a+^CuVDW!ib1?HsOw%?yU{_|iPgUu4xxh1T!mCElPL;xtnX}u>{ zJ)|ZtFL>`EJUkp3gZiC8ePd%|K>>yJ;)MVU==W$kyE~u$Tc)EHtMU$`LdZB)|BLaT&`G1aXQcEYgL(bV=z{xeMn|k) zks?b1Tu&NNjE3bfuOT;GB3gdmK-PlYYOSdh2fq1tvSN(-r4v9|SC`)mtW&88)Mzoj zct(CE2eew8jI|elk66AN-mljO(@%G2Yqh3><<(tfQ&!Z9Sv=b+UrH(~^}7Q))#+!g z25ds9#I`VRp|$NOm+pHBaN3@NR+bvR(yz|!7$}UM%@BT7;JY$@F_yYM9=_Qq?p3jr zdsEY9#7;FQz{f}IHj$E&svy%)W552mF}?=e}P@DtgfyOfebo}Gxne_N;Mo#HIixo@>ocF-Ni~2nt{G<>X zvaRmib>cZ~-6Kxy6TSpd{T9aBSN&nsXOnPU77}Tbpw5)|ml7caY%Pe!(?#dxr`B>| z^ykssj$f-Y=Htz`@@Xp$pH89MPp)9iat%gor5piX!VlcsGyx&;wLHh5YO_?@K zzePWnD6)B44d^tPcV_l?{0yadtog03ql8Q^Ws%=i9Q-}Wqu?P8ohcZ zRiG-L)zQ<_)6qczI5|1P!ot4He9Lyd?$VCaDAzn$?R>hKH+(zw?B=h4JMnlrs_xFo z%?&(hoR59fzqy?(q{2^l2PpC_4L8V0>XEul{ld>9@n&Vf*sv&##TCe_$xC`vpmK4 z`}6Zu?g0}81suS}9>M+<9JKfF-}!<=pHAE3ilrW!SNY;zpqMSnycrV;1i_*M$7E}C zmV;cnF)aARD9ahtmq(Xad6JtB8jfPowjdm?NhNprY(`p| z-%8hNr-+=atYWSZ6X>@{HDGIF6BQjTCFrsle!P-lbh6m!?(Xin;tpYylA790O^S7L z%3ysPn|=b;Pm!;<8nfEEyrQzO35qVE;s&vpjkYdO46_|tzMN=$G|=+{ zHme6!fTY0zwVAkR2Jc%b?dwN6KK{>w?Cff#>L31&*XvYbO7s&)=rCgEPRy^a<}?(~ zADtW@%kw#HhCrk1<$f#fr(!l=;A;&e7gx1l-rIGk!6an^YD048K#{byB#X*6gFDCV zu;>;NluHyDIV&Cz%=u%rW&I0^nywl@iu(C!_WE#@QFE+~YS zjt;MI%Su5(K~z-K4rJ7kX8m^x4eF}k&{{815Ky~XMnqJ4D;^n_)^atDHp<4wQ9OS( zIkWGcAh93Pv$i-{L@HI)I>u%i#mar_oG+Bg%YK7TH(j#3R;qtNBwOlf{}^GrWmvEh z(;3&O#Yh}SV;wPS^vSAzVKb&9D~qsHolp6ywzxQ)awtDPU*$=&^LVwB0B~`2RjVK& zVIfN!8QcsY?~&rc1~NK6_{&L2|^VirF2O=VDFcI=FA&1 zljSLaUT*Kfiz1G4XmfKjI0NchoWjC}4+S=L>Lw|Sr8`CW+%_==! zk1eV$RlcJK4E}3XUh#OuQdqzROHljMCP5cw)Bycf#pQj6r$V*4Rl^%gNJ z4&8e>zN&aX0|N%+zS2D|X+*>H?0S+MIUoe#6^Hy|rW+GbZZtb)j+rchb}4ZFcE_Im zNh~KPg!bLdz0Ijh>GOVfjSu`=tGS3#zvwXSCE?A@RyCJpaz&0pgBO~qApt(87Zq+F z_f6OCrOS|b&CSf1Sz6u&wBgzkL4Sv$3_~9E#8ttn+Q8OD$HQ*s)9nd+x;!#O-bQ{< zj?$~Q4FV3W`f>J4MsDC*3={*^gu9XL(9b}y<>3LC(B=vxhemm&l1Z#i?MLX5xv1Z;OfbcU+Yr^ zQqVj?auj6BmQL({J*93TMbLhM{<30`&O4VTvj5xzT{!|QC^0BDC;}tYt`#5n;K5nm z|JOfTfla4_XAl!g_B9&t@8^m{ zy)aEaW9=wNoF`H?tEps1O;=Zr`9i3{4-N$!Ow8**1*=9KQwmnZR$05biZ{`Vt$l`HP^+1u(4Sa&!uUx!ZUdcK8U-*m%&ZDOZq;v;3Th%3Km2% zM;v*xvfdl;me;7_3rD8{J2CWAzjq(?X-(1&(@zXM@VDyC2^8I5XWWa}y+#sfHe6?C zYPxm2P>=LhSG&9WI}9~Oa*K49Cl(4_I&E&H{U$R0m#3^mEWh}4t?fSmHHrja_{yOu zoXdcpck4*CLq7018j79FUCSEl+k06P#7op5Ro1Nmm2TEhNd!c)ws?AX?OLeOPO#zU{cO3#sG=t+{xlZw|>#Bqg_z0DkED39)JgvXTSzIU8$UP zd1_pBmu2}g0HA~*+bh?G#lo!279B@BgND%gP|fmLqfgg{&428;P(zf})Y!c*x3y$U zO-(7$@h%aJ?F_!Bvs)I|5pOv456B5TpZA)w8vOP=rx^Q-1oQ-Mo07`h{Px`ptN59e zcvM(~3KMj<&@SvJ#=FPm?0^MGM-`(&rG{ur$aAYa`&i(%cqc-#wid=Qx~GbVLfIL1 z5LsWXOt}g?o+Hz&?=eeDHQR+Xd%9jZ<+vm-9hSz&Ro$n%6G;6-JVllA0=8s)?Lou)B@ zDF{q_O?Ke>Ll5uh_EuSoxx*)0d!T7D-h|!!jyiwe2J+OKC82QdWPn@%HxSUU8cikxD>EAi2CfwHZMYOqS0sEbBq_M?H3Y(GofsChLL|!@>N| zD<0#%I!TF9(Np+a7jWhoJYpaOAe^RFbhEO8px`DCl}D{oO1Ba)N^ z5U{SoyiMak$fvn=f_>|s3wE!Y(Ja3=pyU!8KCi2*tFF!k*U(q}!A~foxJb2h#et-b zZKRHH@W$}ifIfw~a;?7EOtHkHxy1>;XcBJ1IY6q!Bd$*X2MF5Jg6KAse*m;R+uwSm z$|OARgfxBoKWag2=XHg-s$RQ|1K2~yF`&?e#%topdve?|CGZ|-TBv|3%)qW}QC5l9 zpF?W1t|WV1bf5}nEOJ&Dc;Gx_-I799a`{Oeo&rXakf%w7%UPo1)1t=N%1ztF+}d4t zgFN-f@NiV~RfT4`YU#1?y!tvKN- z)za|x60#)Y+uVPB5pb$kdH_hf`lh$6z29)G^ywJSAKWD&$UFGnq|USFPgW6LWmi3(4=hQNCo4|IYk9DMT@VA|iEWXI6XI>U#R?elGHVhWQP433(SS}_ z4B&&2f=W7r6U$`0C%%e2B$rz$c)U??;KvwLSC^Km(5INxdi~%$@^zRnS%4Ol2^3OU zihHz0FgF&@%$!i8$bPhvP&|LI{- zYE(Qa_dkSXC6GdehJRUfl=kRuh(xPHExdv~r9$4xpaC2*5BbKPP)(<-q}YH-BI!(Y z_o{0dMy9oY4z20_Dpy^4!|I_WSo@_Z5&I=Oh-%1wiYjU94 zV{}Kl0y)_K_HySBXN*Baa=v5ZD16XCv7hgsGn5BM`WzGh!)-x92nm>k*RC2-j_QLV zJRm=5kqFOupN?eAmFao1h=mdso>et%#%9ft(bmS7AkE>m*Xd z$=+O^^?5vetVEqVBa?6$Un(*r`46 zh|=$Uf2sQfLn|gi0k4{d2Db_v0lqg-f_(G+5&X)u!chC(Nza8s-LSceuYY0vfKzX^ z$-HOs(E}zTZD2AcQoYT)QM7x3FZ7mmbGyfNNPdCrJTXtE7Vfzsarp`?yEj zw>!T;*3iUXbaP-n26px&W86eaC?ANZ$Vy9t<^&6i?u8X*-pvrYie@69!?3IBq_L%T zx9(|WX^v8JJd=>;H68q(D!JaEeScI>xKJI-k(%7?m%dH+5cy1jr)7GTk8JUWVc)rA zl9Kv&02tnw1OFwUTbjcSGMk@I4$v|~hq#-FFvg>h`~dyqs0!Ad3MQ>F6%+%rt6RP1W`?BH+; zZIlRx=;BMPJ@0a>l@3UKnHon7F#$;3Y*2qmgAx$|)ePMH7dap(+1g56^b83qWu$xe zVoUDE3MFy08iW&)t&^tZLMPpFK;D?XYlZ#DnQ*%V^WSHeSsHSingxEAA6Ae~@cRM2 zGSCzldPzw|+s6tkC7Ic}s1cJhka^0;@ApW4NUIR}?u08|^zpfFN=bvpzfj3{U#n$K zSd@7}Roj#yDN5edf5N$QT+AW=s zb=05muz_=;dy!;~50qFZ6|Ad|Ga_(gw2gHC$w{rkm={<2_I(3jUz0M6BqEQz`m9s^ zN9td8{&CUGU%+^tb>^@bs%6Q33$X<9m@R)WrKnxN zE*%T7N+VeQ@K?LJddi$TanxzP*zV5P^ZMh8qL)0kTb3q7TCPW3u4nOhXm}qlRezm1 z-0FG%At3%5JbvaBa7nW>stbrTo*V2v3fIJ10HE0uWa2gQ%odj)w*AEMk`s(W4Apvb zFB=%J1TerI&Rf^^-lpgl2wDZ+ukU}bYEVrScxtw!{N1$F@et;(8GqLFbQ7LK3(nzK^nP$rttb~G5mtUfg{u}&1-AXH7{z~rRJYY9oKq32!wr%n2Z^szxl zHs%4rvRyAnXyN7|buoh2V6uHN;!V(b!k^uAiNA?+G|S(kgnvRjbF9-=s^AxG_r|V} z?QNBJ01G(u7cDz3RsskDIeRvHDNV1xvKS}cIR6~&Ts&s0&?X0l2Zt86Kh6`azkAMD ziGwd#9n|!vHXiTttbf9Pt37$0D9bf8@K_VEr2MQ(cDx72tXd2Myj>_s6r%%1M3rUf z+=Jyq^r@o#b=#Ikl!rx;f({_b-?-60&<_cD$y~DUQP%T=&DQo!w^3&w-5f#sw9r15 zA1(dd?7aKkhu^8#+zNN;p9hZKm#bU0yU}ZGF1RL9E(E@IzV+4KMnwv4y(#AGE0^|j zFSC_;W=ns6nXhk`A`Jc6ehW`tl|aN_XxX$XuC{r`Xdn*uH?YUWL=e__U3KI(Ao}K0 zoqpdL{9(Szr?2&50zMuV$M{_s)D3~48MZ!oK9K(J|0F;pm#7U)3jRL24b9#PcqnNM zxGbgRC(QJ7@4d@(9de%^b{FplW4R1#scJ2|rRAsd(Oxt5-!GK&dj`1gCQBGnV;pf zn@2u!iK&2{wvT@}?y=@r;#!CvijK?#$+G8RduMHXLpihIO}01jzD z&8}Yhp@AgzW87;Ox$6a~DLY#-RXvJ>6B0iXFEYuckH_m^pqKsdM{BgUWatxk91dn? z^nCn&cdKHjzDhJ3!R%#xYA*J~G?P~F((rA{eM;l8>kYk|bDh&zbt-Cw$z&V08agtzX zUJsIxRIbRQ48Q=dty@c-sNOm52umrda0u7t=68DB2N6Er%->=T$FnEWa z_F1R@_0io#;?UD5k1W)}?p6!k-!YwScYzdk>p87~A*|TOy$gqbU3tIsgqIqe2&*#w z{4Qi~^;WAyn8hO-4o}2S`C7J#Y$1fU;Jht(B9ey2Z>qZ?WRY zfxa-NiEie^ZS{tCaEuFgWe#N$YiGHCYyFf@+10PJ@woS@9JrWN7XH4OcexX%uelL> zcf^rA@tMWX*R?kzN)3T339VM@T?ZmoiD=V%97=d(sjkcf=X!Rh$I?qO@z=b@laEwX znot2o!++*rR4VSeAb$B}Wzoc@sj8m8)ZX5j&sI<{mYGnxudiK@!mO>yw$1zT#P;Qp z+wz9E>?4q_J^X+gCA6kqZ`VJ`^a;73#q_9|>-GO?0R|im7Os+{ApSnFqVB|25WnW9 z-nDp>)}C-t%IQi!p04PRPjs!RAH5M`sc4@^V2V(m1Bqg2B>LMP`J_I9W9~k1;$!J& z3#IN@hZFv)(BJq(lc-AWoCxj9(3p2z9Ohw8u+v#CjJI*m6Te(3s0}*RE_@<5k4RE- z@h`lo_fnc-4!lww>BLWGwN{Wd|7-X*QrPb2yQU%EopZGaH^?gYqaI?2=?G&ni$9N<8ieg{<$T_PU!VTEcszNt9)j^?jN2^r{435;%A# zCey^IKUOI_7G zB;f4zP9{<|u$Kin>LB2aHQk(;P6ICJZJ$PrvZVXKS(Opm7Y&5ADpWiW058wZai8{g z&Cl4t@!3mAp_TK-HQI9vSQZT$bV}+rkxN9dK;-uETbnmRMsI{&r=^-)ww8QYuO826 z)DtI49MJ(St^6?$AEJWmYT0Gf)WtnZ3slPlVZh9UiHjAec+fK$TWC?4tK1BUXF3f8ayp&;}3Y&%rnzMk?_dZXrY@1hoXqQ>AnBT_-eTdrd zK)Atx_s#<_63kBb6eh4$DBJb#e>hmXp4S9K3M+L2drfN}!wCZI1Mi@nRV(@brjFs{ zGOhVaj%oQOD>*Eg=*1ruRvPelCxn~#c4swegYkf#y60DarlsaN!ROu$_W*4zm%-EU zHwV6#&8W+#h$=yH@5SM`*w+Jst6aQ7#rmVq@i$bM!_aiq-@;G7k7C3liCOJ_%16dU|v@4w!j3JW4TwB(!%d%jMLc z)8(eJg?YbcFdnCm(Qs`4U!k@DQjpLUj_m}@$1T}>m-5Gxw84ZLfb@HX% z6aO3Cjcz)7b&pZ}$;!&|%(|*|Ujhi{LoG%*+nKMCBE7z(F9qnbN?S?r;owHi6@rh2 z(96dq!L9JHW*F$#N@E6*No2V~XTCLipP_ZEU}QRWd$snJ75p-uLF(@JI7Z~8$;nRu3sIQ%p90%@Eh&6nTsi(M zXP8bDT}sIX}cDx3V(B#G5_=^}Kq6Z0h~6KB{I` zJj$J>29?+O^Rgd6OM& z*0`Q33U@`3b(4lia28w7ZyDnfmy#E6$lYaO7C$ZaKJ+8`k%?&9uH9#DJF+1b9_>|o zyi-BVZ;z;y;}c6dM?!nN5^g-1tjuwRb(?(viZK3XgtaozmuU#-YC=S@jXrB|;u{UX zWy<=y9c#9oucn7GB5dDh`U!*QtFVjBtpVFLeFf_#V}zoA1L`3e0c5v38XZia_@~$m zLE`>+i)+`!a?3#35Ld-kbvN8$`QAQ!x`%Xvj?4Tf73mSL0Su2}2WK(3*M6tq>LYp> zYCbe?g=SUwhN4z0vpuGUGghE1J~@H3LrTRZ0U+9^<)dMaTX1~1<+Tnm@sT}I&Nqdv z(Y(E?e#67?faoLsp8K>Oc}Ccs_e#~B%6fIMh;ZL8uZ3)GWo>;6DaZ}9wxgW^y#L%~ zLP>53l#t*Oe(AM7kP)61nHGs`*%!x-N;?1M34i-OVWUWC@*g9kqFnO~E!ExPQx_Hv2oa z!B%s8wG*!w{&WR2VNUVJDf{Aa*AK#6Q|~j0qu;%BT9(u7rK?SLgZ07%PXKYsJLMhQ z0`b0j2yRfe+D$+sqd!ME$c8QxJ53kox-dO1V93o^sj=aAd*AmYCv4jf$-N#q(uQNY z)ds318#8+5txA@SQL{j0P7QSJFuxGFXFwf9YyL}oIaxQ-wgHJ@b<;haRi@F8F%%&G z>O`IG+mDs_K0R{1X+EN_7k~*FSd^MM3|DspXsMCwuOpe4lf|nl%t@ixPg1hrkbMtI^kTLgudzWb0I2RfZ{gPbEv4%c}{`_rHdMjN0sq2FL39L%`E*ry74YypCh+ z{Zfj5n7M5_ek|vBs{TBlG1=%6Ik@TN76FK}qXk1^>ocUc_glKnM8Na=*O5%#0R?mZ z;K5y!aNCXVKAT-%1E~KAvSr^5BwwC<(^$vLe|Kskt7W=?MO@Hi9$NfW8_lDS8(De5 z&^&_e13RTE*|~Ax4;$NM9djG(5!KLF52shYw&ZgF^G1ELVfdBb?2jU2KR&1`Qc=kJ zq_QI`BZ54FnqH)E`Tj0tr;QYBt6O$)zkAU0h8W6UhOPa*O*IKFCJ7=F+|#1@q`Ah^ ztDc@kI7fu%s8ri9cGXcj1_41>ZYiNux@Dy}61~+pvzIcc;Z;?bpEO9fx^MjYT0$8? zH)gDvA|mEhD;@{%&PUHh@1FcF<2TXoh;d5eY)`o#M4Q@fgFZH&3oA7q)VC+L=RUQ1 zAe{3{RA1Bm-iolG0h>~4B9y18rA;y2RK#KB;9`E1O@Qs(k!BLb=ncWfCB4$%D1ZVscMfVofv8f zNiN>wh?w1N_#-{!t+Ze{?uL=3l2kTz|68wbhP?gnC4vVDxSgEc5dLY=a8Vf`9mLng zM90M=(s=q)v(IdQvmVkT&Pi#iD>9;_4^64ZL`Io&C+Q4Qhy$wwk=Wk_aCmButFh73 zGnH%8oOwT)ao6dyM=_1iv89t&8nZ2%2e)WUq~m>b?(fDxSynvZeQYMaBMr;({z)ao zT9bz#8wMmSMGHHYv+GUwMGd8iqTeZm$kjG8BQtkbz2HUtqA-8Et#LejR7ncX$avyJ zOCM1@qAtDC>w`vj?K^??PCsybTq`gt(S9EMbfc-t&&UsE@FDp`IpL^agh#^npmVj@ z&nJzGnn4kLgmMPT-&dP9F$;GKMKTA`e)#yz1A@8r>*1&6Fr{Lm!&+BSff$oBHuUad zYL;yQOVg99vnIeP?>=<%+zdL48hzx!BYHe3(0A+Mz2R2hlD%zu%n{2w1vyUE*q=_- zyC=ezcy%L3@kpJV0r)$wESysesSN$* z0Gxl_J;{_aJ1=cT$j3ak8yOU8yK26knxJ6f=bd)9BrGIHwG}sGN++fXE(SfpEu5;o z&Qh=q^X-b9i&cE+g;Q&-=>3gw&aW?M!?MIt{-lTXU7Yl?sTIqwXS#xf-*MUAYhvuM-8 zNp7>hP)Lm}&9r6WUIWDW{_{o2@^Jz`I@EcE4N&kJdCF zU1YV;PCmMRlh${7VtDFfO?iy~|1^V8DZ8rNF$I4R$M>u>?-ytCe=gt~Q&TAPo-O_D z!^Q$y*4BCPag8cT8vj?)D0&}%W-J$1?G64o`;!%La%Rb#Q*MO&lUc?m4DcGLv)&zE zbeeOmYb`Bnss9{YvXx;9^4xx`6VKMRcQI%tU3+LaGY4l@9^zmTsq`$7- z;+ey)AI+$<#K>2I`%Po(yKl_HL|h|(7b<5a7Q)_nHFp~-0D;lLE*0QK-biE|B;!|_ z<+zO1U@ZkFtDV2$ma;ToL=vb4qHvk;Eqh_DK^BYdxCb*$wq5XDf32%ufML)a6^JbQ zjf`V;urqcVGQp{F-nURGqOCP!)R2(6rcnD)0s zSzR%td|zR?9^$pp73t+v{z~0`(^rGoI9;~zxiMJ2zNK&m|7UL1&RIL#``5_b-f&DK z;0oux>K358F#qprA--cj4DIQgGV?UHW1y+2$$}A3&QpG|mP^z7*M$Egp`?lk$o z$&G##0||d}+`w;=73Z-3LsS4>nU`0#zRsE=iHLvEo^m6I_AhYiY?&>G(*&b)XRp5- zOKMn!(^L@-S$u4*3q(%MqK1`9jpGI(RTbrGW)xcKYksyW>tqub6ItIBH6R5imt#dL zIs7j(Uk=ruXcq1@luFdfxny;1_;;;+o|@upBkZ=8;Jb#JoNj+Td>$Z7VpsWt^)C>0 zw!EK3SC~(ht-BI|@Oi_srhSq7kR5coN50LUAZVGRUwYOF-D+wAUbptYs3UB;dDKne z4L6IvlY>gi0&1|vzoQn}eDJT_Z%v(F`Q@!z`}c8ay$$1#htaQb^`@=_bd+5WwP1>pLU^!MHpZ>1 zf1rv6#YY=f{9WKVSWfQZwiXDka_bE^SyW3T-zqiFmWw_|jo0Lr+q@FWUx-qBRn5d| zOZJi88@ZW3?ojyrr{#&+Pgi%_F;qlR6^U9G!S}}TPh2;U+5T|=y56nA^#lv=t6&lu zd8rj$Q*uoPmfZJ@cEuT4Ra{zHSiwaqhP`##-kf%D*Maa(9qoZS@?#Rv00A4UUl*ge z!}ZCvg&d*Biv?qNc-Q7p>-{?@fxl*2&!UCvrY1sdf5JkP|MhGEuiIpW-UwkD`oqO?5doiv z8$ezUpi=EdSr!@(0pDa%jp?S=H_quR?!BNaJ0u^ z$JV4}y(KS;CCR8`qhnDFfTIxJ9ag{HSa&@JfFZmh(h+2hsP+!)^)7nua(3OFL#mmp zJ6XT$e&t|dPg{}|#bx6Jyt_hm*+sTcr*67sxFD&hzw2Zduz3lpm*rYdW_GE$h6QN4 z>Ki>{0>sTu%{87M&Q)ABH#W?^UyDu&FuyJ7I5kZlC(t+h>Z%-aD52UTHC|iCgpXFU z-fp1GFCb}MB^E(1fCa!ptMeY3*ew%)m1e?j^zliA-7;I|OF=$v;Lu=r6-xj@Sv*F zbuWEV7;KP`C~=v%0&2y{faI3>uNj}X1ogynWPYO9nX~21c?<>3!epZb&9P!%R70QK zeozIVjJ3~N>K`KWrqSiETWffc-(Kh4v=RuCFMI+}G?n~B0Gp9|ZSU$3VQ1rq6KeCM z$Mzng{PjqvOjIGl2Wo?yNuKloa@HK19+>!&>x=-&Kb6iuJncM`lCSNbxmo+cwDx5e zn|lxY-#A-jd-=~)^4fOmUcY&t8k-@-F>=g%X{0nExGZzx`61>`d}xQJ>G;pD8Xp)a zp5^t`7y6_AOd;_s+RYi4PTEOPo?-OE3ahEkI>=}n?N;rGtYSo%5$Rbck&$ovi2XL6 z{*}G;K-qG;WMFWKVrz5sqtRP4P`hF9L4`*lzANq9#%Jg~VVBWMFlN1P;LnNe567-o z#Mx?@68&I_8*d}unWF`rQ3H5)ZNNER?LI>>bSa(#j4}|mr_fOb)bl;5L*8;L$+C(v3Xo>6HBgAsh7n1nIbjNL(p7d&83>L%sRhRjHSC-l|ZVw0;gs*$JwL zZj8tNR59S-p6T9Mu+_T8P;sg#gus>084!qX&9zFfBOR{Ldf1>9G)Jt%Na%pI#=M!8 z!o@oD-!QW$mVWNM@M@RkU5Ff22RxonQz_cfPCT76jVdpRQ*U2{h3eTD`QDYnB|ToB zz7Jzq9j1hu8aW{=%jLmS{?Ikst(zpgFl45geJPAqe1#mdzh+4R_3@Vn{?BZkP|h46xMcM8iD?! zTf6JF`Uh=oCd#dZFV{Q_Qlz<@f*1V3%O1q5e`dNP_DwF zMjGWjrRo1hq2%ssXcI|f4&HuE?_A8rvZ$Hk(Y;caT3BRR@%&-`%m`4n^uqj&jjl zOZsP3Z-s{Qe9uDDOSg7`8zp)In*;06a(g>4 z;%rie_{qxat25#j(3tx=KGUx%hUu)}2HST~%Nvj-XV7$8TAG-KGf{ig(Zl@WO=A<;UQ-q6`X`TRizh~DeGp*1N|DjiR_a_%WxIgDI|(dQpvX#Ask5X zzC<>AD{Ai5BqEcIqBjAuP*+Hx7;in_`D<(5-Fec)l(MQ2zvTE$h3>R&%F=$Sp8+4k zWWbg3!vY$ob^@CQ8Sjr7$s{sr-rHEBm3mcDgUEElPQ6zst8)axYilIlM(P*K^h&fMzs2~zmxZQWiw(}UNc=f z&yOOfxN}N7i%nCr~F+A;SugWFly3q>Fvi+i?# zSL>tmkal?y~JPC+=e=PF0#@2c_0phQ+3i?KH1vinl&G( zMA9{)eZ|W^KOymDJ&2}F<)~*#`p$JC$yb($WZQ@RKCcw976K@0`qGvX66r^XOCIuU zAaH!m))u+#T^Z%sA!b*lE8=CILq4{GUQMR=n{ezkb39e&%=pK&?G)bqO7Q)0Dog1^nU=;;vWwH literal 0 HcmV?d00001 -- 2.18.1