From 08aef45f6350deec2aa7e93c12a8647bf2a64d52 Mon Sep 17 00:00:00 2001 From: Daniel Bosk Date: Tue, 5 Feb 2019 12:54:17 +0100 Subject: [PATCH 1/6] basics: breaks out contents and preamble --- basics/Makefile | 3 +- basics/basics.tex | 879 +------------------------------------------- basics/contents.tex | 855 ++++++++++++++++++++++++++++++++++++++++++ basics/preamble.tex | 23 ++ 4 files changed, 882 insertions(+), 878 deletions(-) create mode 100644 basics/contents.tex create mode 100644 basics/preamble.tex diff --git a/basics/Makefile b/basics/Makefile index 9b50168..8a9f84b 100644 --- a/basics/Makefile +++ b/basics/Makefile @@ -4,7 +4,8 @@ all: basics.pdf LATEXFLAGS+= -shell-escape TEX_OUTDIR= . -SRC+= basics.tex abstract.tex basics.bib +SRC+= basics.tex preamble.tex basics.bib +SRC+= abstract.tex contents.tex SRC+= hhcount.sty FIGURES+= collusion.png FIGURES+= password_strength.png password_reuse.png encryptic.png diff --git a/basics/basics.tex b/basics/basics.tex index c49c5fb..85a1f86 100644 --- a/basics/basics.tex +++ b/basics/basics.tex @@ -1,27 +1,6 @@ %\documentclass[handout]{beamer} \documentclass{beamer} -\usepackage[utf8]{inputenc} -\usepackage[T1]{fontenc} -\usepackage[swedish,british]{babel} -\usepackage{url} -\usepackage{graphicx} -\usepackage{color} -\usepackage{subfig} -\usepackage{multicol} -\usepackage{amssymb,amsmath,amsthm} -\usepackage{booktabs} -%\usepackage[squaren,binary]{SIunits} -\usepackage[binary-units]{siunitx} -\usepackage[strict]{csquotes} -\usepackage{cleveref} -\usepackage{hhcount} -\usepackage{pgfplots} - -\usepackage{mathtools} - -\setbeamertemplate{bibliography item}[text] -\usepackage[natbib,style=alphabetic,maxbibnames=99]{biblatex} -\addbibresource{basics.bib} +\input{preamble.tex} \usepackage{xparse} \ProvideDocumentEnvironment{exercise}{o}{% @@ -96,860 +75,6 @@ \tableofcontents \end{frame} - -% Since this a solution template for a generic talk, very little can -% be said about how it should be structured. However, the talk length -% of between 15min and 45min and the theme suggest that you stick to -% the following rules: - -% - Exactly two or three sections (other than the summary). -% - At *most* three subsections per section. -% - Talk about 30s to 2min per frame. So there should be between about -% 15 and 30 frames, all told. - - -\section{Introduction} - -\subsection{History} - -\begin{frame} - \begin{itemize} - \item Created 1948 by Shannon's paper - \citetitle{Shannon1948amt}~\cite{Shannon1948amt}. - - \pause{} - - \item He starts using the term \enquote{entropy} as a measure for - information. - \begin{itemize} - \item In physics entropy measures the disorder of molecules. - \item Shannon's entropy measures disorder of information. - \end{itemize} - - \pause{} - - \item He used this theory to analyse communication. - \begin{itemize} - \item What are the theoretical limits for different channels? - \item How much redundancy is needed for certain noise? - \end{itemize} - - \end{itemize} -\end{frame} - -\begin{frame} - \begin{itemize} - \item This theory is interesting on the physical layer of networking. - - \pause{} - - \item It's also interesting for security. - \begin{itemize} - \item Field of Information Theoretic Security - \item \enquote{Efficiency} of passwords - \item Measure identifiability - \item \dots - \end{itemize} - \end{itemize} -\end{frame} - - -\section{Shannon entropy} - -\subsection{Definition of Shannon Entropy} - -\begin{frame} - \begin{definition}[Shannon entropy] - \begin{itemize} - \item Stochastic variable \(\stoch X\) assumes values from \(X\). - \item Shannon entropy \(H(\stoch X)\) defined as - \begin{align*} - H(\stoch X) = -K \sum_{x\in X} \Pr(\stoch X = x)\log \Pr(\stoch X = x), - \end{align*} - \item Usually \(K = \frac{1}{\log 2}\) to give entropy in unit bits - (\si{\bit}). - \end{itemize} - \end{definition} -\end{frame} - -\begin{frame} - \begin{block}{Shannon entropy can be seen as \dots} - \begin{itemize} - \item \dots how much choice in each event. - - \item \dots the uncertainty of each event. - - \item \dots how many bits to store each event. - - \item \dots how much information it produces. - - \end{itemize} - \end{block} -\end{frame} - -\begin{frame} - \begin{example}[Toss a coin] - \begin{itemize} - \item Stochastic variable \(\stoch{S}\) takes values from \(S = \{h, - t\}\). - \item We have \(\Pr(\stoch S = h) = \Pr(\stoch S = t) = \frac{1}{2}.\) - \item This gives \(H(\stoch S)\) as follows: - \begin{align*} - H(\stoch S) &= -\left( \Pr(\stoch S = h)\log \Pr(\stoch S = h) - + \Pr(\stoch S = t) \log \Pr(\stoch S = t) \right) \\ - &= -2\times \frac{1}{2}\log \frac{1}{2} = \log 2 = 1. - \end{align*} - \end{itemize} - \end{example} -\end{frame} - -\begin{frame} - \begin{example}[Roll a die] - \begin{itemize} - \item Stochastic variable \(\stoch D\) takes values from \(D - = \{\fcdice{1}, \fcdice{2}, \fcdice{3}, \fcdice{4}, \fcdice{5}, - \fcdice{6}\}\). - \item We have \(\Pr(\stoch D = d) = \frac{1}{6}\) for all \(d\in D\). - \item The entropy \(H(\stoch D)\) is as follows: - \begin{align*} - H(\stoch D) &= -\sum_{d\in D} \Pr(\stoch D = d)\log\Pr(\stoch D = d) \\ - &= -6\times \frac{1}{6}\log\frac{1}{6} = \log 6 \approx 2.585. - \end{align*} - \end{itemize} - \end{example} -\end{frame} - -\begin{frame} - \begin{remark} - \begin{itemize} - \item If we didn't know already, we now know that a roll of a die \dots - \begin{itemize} - \item contains more \enquote{choice} than a coin toss. - \item is more uncertain to predict than a coin toss. - \item requires more bits to store than a coin toss. - \item produces more information than a coin toss. - \end{itemize} - - \item What if we modify the die a bit? - \end{itemize} - \end{remark} -\end{frame} - -\begin{frame} - \begin{example}[Roll of a modified die] - \begin{itemize} - \item Stochastic variable \(D'\) taking values from \(D\). - \item We now have \(\Pr(\stoch D' = \fcdice{6}) = \frac{9}{10}\) and - \(\Pr(\stoch D' = d) = \frac{1}{10}\times\frac{1}{5}\) for \(d\neq - \fcdice{6}\). - \item This yields - \begin{align*} - H(\stoch D') &= -\left( \frac{9}{10}\log\frac{9}{10} + \sum_{d\neq 6} - \frac{1}{50}\log\frac{1}{50} \right) \\ - &= -\frac{9}{10}\log\frac{9}{10} -5\times\frac{1}{50}\log\frac{1}{50} - \\ - &= -\frac{9}{10}\log\frac{9}{10} -\frac{1}{10}\log\frac{1}{50} - \approx 0.701. - \end{align*} - \item Note that the \(\log\) function is the logarithm in base 2 (i.e.\ - \(\log_2\)). - \end{itemize} - \end{example} -\end{frame} - -\begin{frame} - \begin{remark} - \begin{itemize} - \item This die is much easier to predict. - \item It produces much less information --- less than a coin toss! - \item Requires less data for storage etc. - \end{itemize} - \end{remark} -\end{frame} - -\subsection{Properties for Shannon entropy} - -\begin{frame} - \begin{definition} - \begin{itemize} - \item Function \(f\colon \R\to \R\) such that - \begin{align*} - tf(x) + (1-t)f(y) \leq f(tx + (1-t)y), - \end{align*} - - \item Then \(f\) is \emph{concave}. - \item With strict inequality for \(x\neq y\) we say that \(f\) is - \emph{strictly concave}. - \end{itemize} - \end{definition} - - \begin{example} - \(\log\colon \R\to \R\) is strictly concave. - \end{example} -\end{frame} - -\begin{frame}[fragile] - \begin{tikzpicture} - \begin{axis}[xlabel=$x$,xmin=0.5,ylabel=$\log x$] - \addplot gnuplot[id=log]{log(x)}; - \end{axis} - \end{tikzpicture} -\end{frame} - -%\begin{frame} -% \begin{lemma} -% Låt \(f\) vara en strikt konkav funktion. -% Då har vi att -% \begin{align*} -% tf(x) + (1-y)f(y) = f( tx + (1-t)y ) -% \end{align*} -% om och endast om \(x = y\). -% \end{lemma} -%\end{frame} -% -%\begin{frame} -% \begin{proof} -% Antag \(x = y\). -% Då har vi -% \begin{align*} -% tf(x) + (1-t)f(x) = f(x)(t+1-t) = f(x). -% \end{align*} -% Men -% \begin{align*} -% f(tx + (1-t)x) = f((t+1-t)x) = f(x) -% \end{align*} -% och alltså har vi likhet. -% -% Antag \(tf(x) + (1-t)f(y) = f(tx + (1-t)y)\). -% Då har vi -% \begin{align*} -% t( f(x) - f(y) ) + f(y) = f( t( x - y ) + y ). -% \end{align*} -% Högerledet implicerar \(f(x) = f(y)\), men då beror vänterledet enbart på -% \(f(y)\) och således måste även \(x = y\). -% \end{proof} -%\end{frame} - -\begin{frame} - \begin{theorem}[Jensen's inequality] - \begin{itemize} - \item Strictly concave function \(f\colon \R\to \R\). - \item Real numbers \(a_1, a_2,\ldots, a_n > 0\) such that \(\sum_{i=1}^n - a_i = 1\). - \item Then we have - \begin{align*} - \sum_{i=1}^n a_i f(x_i) \leq f\left( \sum_{i=1}^n a_i x_i\right). - \end{align*} - \item We have equality iff \(x_1 = x_2 = \cdots = x_n\). - \end{itemize} - \end{theorem} -\end{frame} - -%\begin{frame} -% \begin{block}{Bevis för Jensens olikhet.} -% Bevis genom induktion. -% Antag \(n=2\). -% Då har vi att \(a_1 + a_2 = 1\) och alltså \(a_1 = 1 - a_2\). -% Eftersom \(f\) är konkav har vi att -% \begin{align*} -% a_1f(x_1) + a_2f(x_2) \leq f(a_1x_1 + a_2x_2). -% \end{align*} -% -% Antag sant för \(n=k\). -% \begin{align} -% \label{eq:JensenIndhyp} -% \sum_{i=1}^k a_i = 1 \land -% \sum_{i=1}^k a_if(x_i) \leq f\left( \sum_{i=1}^k a_ix_i\right). -% \end{align} -% \end{block} -%\end{frame} -% -%\begin{frame} -% \begin{proof}[Forts. bevis för Jensens olikhet] -% Lås oss visa att detta även gäller för \(n=k+1\). -% Eftersom att \(f\) är konkav gäller att -% \begin{align} -% \label{eq:JensenInductive1} -% \sum_{i=1}^{k+1} a_if(x_i) &= a_1f(x_1) + (1-a_1)\sum_{i=2}^{k+1} -% \frac{a_i}{1-a_1}f(x_i) \\ -% \label{eq:JensenInductive2} -% &\leq f\left(a_1x_1 + (1-a_i)\sum_{i=2}^{k+1} \frac{a_i}{1-a_1} -% x_i\right). -% \end{align} -% Då \(\sum_{i=2}^{k+1}\frac{a_i}{1-a_i} = 1\) kan vi tillämpa -% induktionshypotesen \eqref{eq:JensenIndhyp} i \eqref{eq:JensenInductive1} -% och \eqref{eq:JensenInductive2}, alltså är det sant för alla \(n\in \N\). -% -% Vidare följer likhet från lemmat ovan. -% \end{proof} -%\end{frame} - -\begin{frame} - \begin{theorem} - \begin{itemize} - \item Stochastic variable \(\stoch X\) with probability distribution - \begin{equation*} - p_1, p_2,\ldots, p_n, \text{ where } p_i > 0 \text{ for } 1\leq i\leq - n. - \end{equation*} - \item Then \(H(\stoch X)\leq \log n\). - \item Equality iff \(p_1 = p_2 = \cdots = p_n = 1/n\). - \end{itemize} - \end{theorem} -\end{frame} - -\begin{frame} - \begin{proof} - The theorem follows directly from Jensen's inequality: - \begin{align*} - H(\stoch X) &= -\sum_{i=1}^n p_i\log p_i = \sum_{i=1}^n - p_i\log\frac{1}{p_i} \\ - &\leq \log\sum_{i=1}^n p_i\frac{1}{p_i} = \log n. - \end{align*} - With equality iff \(p_1 = p_2 = \cdots = p_n\). - \end{proof} -\end{frame} - -\begin{frame} - \begin{corollary} - \(H(\stoch X) = 0\) iff \(\Pr(\stoch X = x) = 1\) for some \(x\in X\) and - \(\Pr(\stoch X = x^\prime) = 0\) for all \(x\neq x^\prime \in X\). - \end{corollary} - - \begin{proof} - \begin{itemize} - \item If \(\Pr(\stoch X = x) = 1\), then \(n = 1\) and thus \(H(\stoch X) - = \log n = 0\). - - \item If \(H(\stoch X) = 0\), then \(H(\stoch X) \leq \log n = 0\). - Thus \(n = 1\). - \end{itemize} - \end{proof} -\end{frame} - -%\begin{frame} -% \begin{theorem} -% Följande egenskaper gäller: -% \begin{enumerate} -% \item\label{prop:cont} \(H\) är kontinuerlig. -% \item\label{prop:mono} Om \(\Pr(\stoch X = x) = 1/|X|\) för alla \(x\in -% X\) då är \(H\) en monotont stigande funktion med avseende på \(|X|\). -% \end{enumerate} -% \end{theorem} -% -% \begin{proof} -% \Cref{prop:cont} följer direkt av att logaritmen är kontinuerlig och -% funktionssammansättningar av kontinuerliga funktioner är kontinuerliga. -% -% \Cref{prop:mono} följer av föregående sats. -% \end{proof} -%\end{frame} - -\begin{frame} - \begin{lemma} - \begin{itemize} - \item Stochastic variables \(\stoch X\) and \(\stoch Y\). - \item Then we have - \begin{align*} - H(\stoch X, \stoch Y)\leq H(\stoch X) + H(\stoch Y). - \end{align*} - \item Equality iff \(\stoch X\) and \(\stoch Y\) are independent. - \end{itemize} - \end{lemma} -\end{frame} - -%\begin{frame} -% \begin{proof} -% \end{proof} -%\end{frame} -% -%\begin{frame} -% \begin{theorem} -% En utjämning av sannolikheterna ökar \(H(\stoch X)\). -% \end{theorem} -%\end{frame} -% -%\begin{frame} -% \begin{proof} -% \end{proof} -%\end{frame} - -\subsection{Conditional entropy} - -\begin{frame} - \begin{definition}[Conditional entropy] - \begin{itemize} - \item Define \emph{conditional entropy} \(H(\stoch Y\mid \stoch X)\) - as - \begin{align*} - H(\stoch Y\mid \stoch X) = %-\sum_{i,j} \Pr(i,j)\log \Pr(j\mid i) - -\sum_y\sum_x \Pr(\stoch Y = y)\Pr(\stoch X = x\mid y)\log \Pr(\stoch - X = x\mid y). - \end{align*} - \end{itemize} - \end{definition} - - \pause{} - - \begin{remark} - This is the uncertainty in \(\stoch Y\) which is not revealed by \(\stoch - X\). - \end{remark} -\end{frame} - -\begin{frame} - \begin{theorem} - \(H(\stoch X, \stoch Y) = {\color{red}H(\stoch X)} + {\color{green}H(\stoch - Y\mid \stoch X)}\) - \end{theorem} - - \begin{center} - \begin{tikzpicture} - \def\HX{(0,0) circle (2)} - \def\HY{(2,0) circle (2)} - \def\HYX{(1,0)} - \begin{scope}%[fill opacity=0.75] - \fill[green] \HY; - \fill[red] \HX; - \draw \HX node[left] {$H(X)$}; - \draw \HY node[right] {$H(Y\mid X)$}; - \end{scope} - \end{tikzpicture} - \end{center} -\end{frame} - -%\begin{frame} -% \begin{proof} -% \end{proof} -%\end{frame} - -\begin{frame} - \begin{corollary} - \(H(\stoch X\mid \stoch Y) \leq H(\stoch X)\). - \end{corollary} - - \begin{corollary} - \(H(\stoch X\mid \stoch Y) = H(\stoch X)\) iff \(\stoch X\) and \(\stoch - Y\) independent. - \end{corollary} -\end{frame} -% -%\begin{frame} -% \begin{proof} -% \end{proof} -%\end{frame} -% -%\begin{frame} -% \begin{theorem} -% Entropin för en Markovprocess -% \end{theorem} -%\end{frame} - -\subsection{Information density and redundancy} - -\begin{frame} - \begin{definition} - \begin{itemize} - \item Natural language \(L\). - \item Stochastic variable \(\stoch P^n_L\) of strings of length \(n\). - \item (Alphabet \(P_L\).) - \item Entropy of \(L\) defined as - \begin{align*} - H_L = \lim_{n\to \infty}\frac{H(\stoch P^n_L)}{n}. - \end{align*} - \item Redundancy in \(L\) is - \begin{align*} - R_L = 1 - \frac{H_L}{\log |P_L|}. - \end{align*} - \end{itemize} - \end{definition} -\end{frame} - -\begin{frame} - \begin{remark} - Meaning we have \(H_L\) bits per character in \(L\). - \end{remark} - - \begin{example}[\cite{Shannon1948amt}] - \begin{itemize} - \item Entropy of 1--1.5 bits per character in English. - \item Redundancy of approximately \(1 - \frac{1.25}{\log 26} \approx - 0.73\). - \end{itemize} - \end{example} - -\end{frame} - -\begin{frame} - \begin{example}[\cite{Shannon1948amt}] - Two-dimensional cross-word puzzles requires redundancy of approximately - \(0.5\). - \end{example} - - \begin{example} - \begin{itemize} - \item Redundancy of \enquote{SMS languages} is lower than for - \enquote{non-SMS languages}. - - \item Compare \enquote{också} and \enquote{oxå}. - - \end{itemize} - \end{example} - - \begin{remark} - \begin{itemize} - \item Lower redundancy is more space-efficient. - \item Incurs more errors. - \end{itemize} - \end{remark} -\end{frame} - -%\begin{frame} -% \begin{itemize} -% \item Detta säger också att vi kan uppskatta entropin för en given -% Markovprocess. -% -% \item Shannon modellerade språket som en Markovprocess i sin artikel -% \cite{Shannon1948amt}. -% -% \item Vi kan även beräkna entropin för ett givet tillstånd i en -% Markovprocess genom betingad entropi. -% -% \end{itemize} -%\end{frame} - -\subsection{Information gain} - -\begin{frame} - \begin{definition} - \begin{itemize} - \item Set \(U\) of possible outcomes. - \item Probability of outcome \(u\in U\) denoted \(p_u\). - \item We learn that some \emph{unknown} outcome is in \(A\subset U\). - \item Then the \emph{information gain} \(G(A\mid U)\) is defined as - \begin{align*} - G(A\mid U) = \log\frac{1}{\Pr(A)} = -\log\Pr(A), - \end{align*} - where \(\Pr(A) = \sum_{i\in A} p_i\). - \end{itemize} - \end{definition} -\end{frame} - -\begin{frame} - \begin{example}[Roll of dice again] - \begin{itemize} - \item Someone rolls and we should guess the result, \(\frac{1}{6}\) - chance. - \item We learn that it was an even number, we gain - \begin{align*} - -\log\left( \frac{1}{6} + \frac{1}{6} + \frac{1}{6}\right) = - -\log\frac{3}{6} = \log\frac{6}{3} = \log 2 = 1. - \end{align*} - \item The remaining uncertainty is \SI{1.58}{\bit}. - \end{itemize} - \end{example} - - \pause{} - - \begin{remark} - \begin{itemize} - \item \(X' = \{\fcdice{2}, \fcdice{4}, \fcdice{6}\}\) - \item \(H(\stoch X') = - \sum_{x\in X'} \Pr(\stoch X' = x)\log \Pr(\stoch - X' = x)\) - \item I.e.\ \(- 3 \times \frac{1}{3}\log\frac{1}{3} \approx 1.58\). - \end{itemize} - \end{remark} -\end{frame} - -\begin{frame} - \begin{example}[Dice yet again] - \begin{itemize} - \item We learn the die show less than five, i.e.\ not \fcdice{5} nor - \fcdice{6}. - \item This yields - \begin{align*} - -\log\left( 4\times\frac{1}{6}\right) = \log\frac{6}{4}\approx 0.58 - \end{align*} - \end{itemize} - \end{example} -\end{frame} - - -\section[Applications]{Application in security} - -\subsection{Passwords} - -\begin{frame} - \begin{block}{Idea~\cite{Komanduri2011opa}} - \begin{itemize} - \item Look at different aspects of passwords individually, then - summarize. - \item Can use \(H(x_1, x_2, \ldots, x_n) \leq H(x_1) + H(x_2) + \cdots - + H(x_n)\). - \item This allows us to reason about bounds. - \end{itemize} - \end{block} -\end{frame} - -\begin{frame} - \begin{example} - \begin{itemize} - \item We can look at properties such as: - \begin{itemize} - \item length, - \item number of and placement of character classes, - \item the actual characters, - \item \dots - \end{itemize} - \end{itemize} - \end{example} - - \pause{} - - \begin{remark} - \begin{itemize} - \item These are \emph{not independent}. - \item The sum will be an \emph{upper bound}. - \end{itemize} - \end{remark} -\end{frame} - -\begin{frame} - \begin{remark} - \begin{itemize} - \item With an upper bound we know it's not possible to do better. - \item With an average we know how well most users will do. - \item With a lower bound we have a guarantee --- not possible! - \end{itemize} - \end{remark} -\end{frame} - -\begin{frame} - \begin{remark} - \begin{itemize} - \item If a password policy yields low entropy, it implies it's bad. - \item If a password policy yields high entropy, it \emph{doesn't} imply - that it's good. - \end{itemize} - \end{remark} - - \pause - - \begin{exercise} - Why? - \end{exercise} -\end{frame} - -\begin{frame} - \begin{figure} - \includegraphics[height=0.7\textheight]{password_strength.png} - \caption{xkcd's strip on password strength. - Picture: xkcd~\cite{xkcd936}.} - \end{figure} -\end{frame} - -%\begin{frame}{En förklaring av xkcd} -% \begin{itemize} -% \item Vi har 1 miljon engelska ord: ger \(\log 10^6 \approx 20\) bitar -% entropi. -% (xkcd använder 16 bitar, vilket ger ca 70\,000 ord, alla ord i engelskan -% är inte vanliga.) -% -% \item Vi kan ha inledande versal: ger 1 bit entropi. -% -% \item Vi har några vanliga substitutioner: uppskattningsvis 10 stycken, -% d.v.s.~3 bitar entropi. -% -% \item Vi har specialtecken (ej substitution): uppskattningsvis 4 bitar -% entropi. -% -% \item Vi har siffror: \(\log 10\approx 3\). -% -% \item Ordningen på specialtecknet och siffran: ger 1 bit entropi. -% -% \item Totalt 32 bitar entropi: -% \begin{itemize} -% \item Tar minst 50 dagar med 1\,000 gissningar per sekund. -% \item Tar strax över en timme med 1\,000\,000 gissningar per sekund. -% \end{itemize} -% -% \end{itemize} -%\end{frame} - -\begin{frame} - \begin{example}[Standard password] - \begin{itemize} - \item We have - \begin{itemize} - \item 26 alphabetic characters, - \item 10 numbers, - \item 10 special characters (approximately). - \end{itemize} - - \item This yields \(\log( 2\times 26 + 10 + 10 ) = \log 72 \approx - \SI{6}{\bit}\) per password character. - - \item A 10-character \emph{uniformly randomly} generated password - contains \SI{60}{\bit}. - \end{itemize} - \end{example} - - \pause{} - - \begin{remark} - What happens when we require two upper and two lower-case characters, two - numbers must be included? - \end{remark} -\end{frame} - -\begin{frame} - \begin{example}[Four-word passphrase] - \begin{itemize} - \item We have 125\,000 words in the standard Swedish dictionary. - \item This yields \(\log 125\,000\approx \SI{17}{\bit}\) per word. - \item A four-word \emph{uniformly randomly} generated passphrase contains - \SI{68}{\bit}. - \end{itemize} - \end{example} -\end{frame} - -\begin{frame} - \begin{example}[Random sentence] - \begin{itemize} - \item We estimated the entropy per character in a language. - \item It was approximately \(\SI{1.25}{\bit}\) for English. - \item A 20-character \emph{uniformly randomly} generated sentence would - yield \SI{25}{\bit}. - \end{itemize} - \end{example} -\end{frame} - -\begin{frame} - \begin{remark} - \begin{itemize} - \item All these require uniform randomness. - \item Humans are bad at remembering random things. - \item Thus they will choose non-randomly. - \item The entropy will thus be (possibly much) lower. - \end{itemize} - \end{remark} -\end{frame} - -\subsection{Research about human chosen passwords} - -\begin{frame} - \begin{example}[\citetitle{Bonneau2012lpo}~\cite{Bonneau2012lpo}] - \begin{itemize} - \item Investigates how linguistics affect the choice of multi-word - passphrases. - - \item Users don't choose them randomly, prefer adapted to natural - language. - - \item \enquote{correct horse battery staple} is preferred to - \enquote{horse correct battery staple} since the first is more - grammatically correct. - \end{itemize} - \end{example} -\end{frame} - -\begin{frame} - \begin{example}[\citetitle{Kuo2006hso}~\cite{Kuo2006hso}] - \begin{itemize} - \item Studied how users creates easy-to-remember passwords. - - \item Also investigated the strength of phrase-based passwords. - - \item E.g.\ Google's example \enquote{To be or not to be, that is the - question}\footnote{% - URL\@: - \protect\url{http://www.lightbluetouchpaper.org/2011/11/08/want-to-create-a-really-strong-password-dont-ask-google/}. - } which results in \enquote{2bon2btitq}. - - \item This particular password has apparently been used by many \dots - \end{itemize} - \end{example} -\end{frame} - -\begin{frame} - \begin{remark} - \begin{itemize} - \item There is a PhD thesis on the topic of guessing passwords: - \fullcite{GuessingHumanChosenSecrets}. - \item There is even a conference dedicated to passwords: PasswordsCon. - \end{itemize} - \end{remark} -\end{frame} - -\subsection{Identifying information} - -\begin{frame} - \begin{example} - Do we get more information from zodiac signs or birthdays? - \begin{align*} - -\sum_{\mathclap{\text{zodiacs}}} \frac{1}{12} \log\frac{1}{12} &= \log 12 - \approx 3.58 \\ - &< -\sum_{\mathclap{\text{days of year}}} \frac{1}{365} \log\frac{1}{365} - = \log 365 \approx 8.51. - \end{align*} - \end{example} -\end{frame} - -\begin{frame} - \begin{exercise} - How much information do we need to uniquely identify an individual? - \end{exercise} -\end{frame} - -\begin{frame} - \begin{example} - \begin{itemize} - \item Sometime during 2011 there were \(n = 6\,973\,738\,433\)\footnote{% - According to the World Bank. - } people on earth. - - \item To give everyone a unique identifier we need \(\log n\approx - 32.7\approx 33\) bits of information. - \end{itemize} - \end{example} -\end{frame} - -\begin{frame} - \begin{block}{Identifying information in browsers} - \begin{itemize} - \item Electronic Frontier Foundation (EFF) studied~\cite{Eckersley2010hui} - how much information a web-browser shares. - - \item You can try your browser in \url{http://panopticlick.eff.org/}. - \end{itemize} - \end{block} - - \pause{} - - \begin{example}[My browser] - \begin{itemize} - \item My Firefox-browser with all addons gave 21.45 bits of entropy. - - \item Then the number of tested users were 2\,860\,696. - \end{itemize} - \end{example} -\end{frame} - -\begin{frame} - \begin{figure} - \includegraphics[height=0.7\textheight]{collusion.png} - \caption{Screenshot from Collusion (now Lightbeam) for Firefox. - Map over all pages that track me using this information.} - \end{figure} -\end{frame} - - -%%%%%%%%%%%%%%%%%%%%%% - -\subsection*{References} -\begin{frame}[allowframebreaks] - \small - \printbibliography{} -\end{frame} +\mode{\input{contents.tex}} \end{document} diff --git a/basics/contents.tex b/basics/contents.tex new file mode 100644 index 0000000..7f722e6 --- /dev/null +++ b/basics/contents.tex @@ -0,0 +1,855 @@ +% Since this a solution template for a generic talk, very little can +% be said about how it should be structured. However, the talk length +% of between 15min and 45min and the theme suggest that you stick to +% the following rules: + +% - Exactly two or three sections (other than the summary). +% - At *most* three subsections per section. +% - Talk about 30s to 2min per frame. So there should be between about +% 15 and 30 frames, all told. + + +\section{Introduction} + +\subsection{History} + +\begin{frame} + \begin{itemize} + \item Created 1948 by Shannon's paper + \citetitle{Shannon1948amt}~\cite{Shannon1948amt}. + + \pause{} + + \item He starts using the term \enquote{entropy} as a measure for + information. + \begin{itemize} + \item In physics entropy measures the disorder of molecules. + \item Shannon's entropy measures disorder of information. + \end{itemize} + + \pause{} + + \item He used this theory to analyse communication. + \begin{itemize} + \item What are the theoretical limits for different channels? + \item How much redundancy is needed for certain noise? + \end{itemize} + + \end{itemize} +\end{frame} + +\begin{frame} + \begin{itemize} + \item This theory is interesting on the physical layer of networking. + + \pause{} + + \item It's also interesting for security. + \begin{itemize} + \item Field of Information Theoretic Security + \item \enquote{Efficiency} of passwords + \item Measure identifiability + \item \dots + \end{itemize} + \end{itemize} +\end{frame} + + +\section{Shannon entropy} + +\subsection{Definition of Shannon Entropy} + +\begin{frame} + \begin{definition}[Shannon entropy] + \begin{itemize} + \item Stochastic variable \(\stoch X\) assumes values from \(X\). + \item Shannon entropy \(H(\stoch X)\) defined as + \begin{align*} + H(\stoch X) = -K \sum_{x\in X} \Pr(\stoch X = x)\log \Pr(\stoch X = x), + \end{align*} + \item Usually \(K = \frac{1}{\log 2}\) to give entropy in unit bits + (\si{\bit}). + \end{itemize} + \end{definition} +\end{frame} + +\begin{frame} + \begin{block}{Shannon entropy can be seen as \dots} + \begin{itemize} + \item \dots how much choice in each event. + + \item \dots the uncertainty of each event. + + \item \dots how many bits to store each event. + + \item \dots how much information it produces. + + \end{itemize} + \end{block} +\end{frame} + +\begin{frame} + \begin{example}[Toss a coin] + \begin{itemize} + \item Stochastic variable \(\stoch{S}\) takes values from \(S = \{h, + t\}\). + \item We have \(\Pr(\stoch S = h) = \Pr(\stoch S = t) = \frac{1}{2}.\) + \item This gives \(H(\stoch S)\) as follows: + \begin{align*} + H(\stoch S) &= -\left( \Pr(\stoch S = h)\log \Pr(\stoch S = h) + + \Pr(\stoch S = t) \log \Pr(\stoch S = t) \right) \\ + &= -2\times \frac{1}{2}\log \frac{1}{2} = \log 2 = 1. + \end{align*} + \end{itemize} + \end{example} +\end{frame} + +\begin{frame} + \begin{example}[Roll a die] + \begin{itemize} + \item Stochastic variable \(\stoch D\) takes values from \(D + = \{\fcdice{1}, \fcdice{2}, \fcdice{3}, \fcdice{4}, \fcdice{5}, + \fcdice{6}\}\). + \item We have \(\Pr(\stoch D = d) = \frac{1}{6}\) for all \(d\in D\). + \item The entropy \(H(\stoch D)\) is as follows: + \begin{align*} + H(\stoch D) &= -\sum_{d\in D} \Pr(\stoch D = d)\log\Pr(\stoch D = d) \\ + &= -6\times \frac{1}{6}\log\frac{1}{6} = \log 6 \approx 2.585. + \end{align*} + \end{itemize} + \end{example} +\end{frame} + +\begin{frame} + \begin{remark} + \begin{itemize} + \item If we didn't know already, we now know that a roll of a die \dots + \begin{itemize} + \item contains more \enquote{choice} than a coin toss. + \item is more uncertain to predict than a coin toss. + \item requires more bits to store than a coin toss. + \item produces more information than a coin toss. + \end{itemize} + + \item What if we modify the die a bit? + \end{itemize} + \end{remark} +\end{frame} + +\begin{frame} + \begin{example}[Roll of a modified die] + \begin{itemize} + \item Stochastic variable \(D'\) taking values from \(D\). + \item We now have \(\Pr(\stoch D' = \fcdice{6}) = \frac{9}{10}\) and + \(\Pr(\stoch D' = d) = \frac{1}{10}\times\frac{1}{5}\) for \(d\neq + \fcdice{6}\). + \item This yields + \begin{align*} + H(\stoch D') &= -\left( \frac{9}{10}\log\frac{9}{10} + \sum_{d\neq 6} + \frac{1}{50}\log\frac{1}{50} \right) \\ + &= -\frac{9}{10}\log\frac{9}{10} -5\times\frac{1}{50}\log\frac{1}{50} + \\ + &= -\frac{9}{10}\log\frac{9}{10} -\frac{1}{10}\log\frac{1}{50} + \approx 0.701. + \end{align*} + \item Note that the \(\log\) function is the logarithm in base 2 (i.e.\ + \(\log_2\)). + \end{itemize} + \end{example} +\end{frame} + +\begin{frame} + \begin{remark} + \begin{itemize} + \item This die is much easier to predict. + \item It produces much less information --- less than a coin toss! + \item Requires less data for storage etc. + \end{itemize} + \end{remark} +\end{frame} + +\subsection{Properties for Shannon entropy} + +\begin{frame} + \begin{definition} + \begin{itemize} + \item Function \(f\colon \R\to \R\) such that + \begin{align*} + tf(x) + (1-t)f(y) \leq f(tx + (1-t)y), + \end{align*} + + \item Then \(f\) is \emph{concave}. + \item With strict inequality for \(x\neq y\) we say that \(f\) is + \emph{strictly concave}. + \end{itemize} + \end{definition} + + \begin{example} + \(\log\colon \R\to \R\) is strictly concave. + \end{example} +\end{frame} + +\begin{frame}[fragile] + \begin{tikzpicture} + \begin{axis}[xlabel=$x$,xmin=0.5,ylabel=$\log x$] + \addplot gnuplot[id=log]{log(x)}; + \end{axis} + \end{tikzpicture} +\end{frame} + +%\begin{frame} +% \begin{lemma} +% Låt \(f\) vara en strikt konkav funktion. +% Då har vi att +% \begin{align*} +% tf(x) + (1-y)f(y) = f( tx + (1-t)y ) +% \end{align*} +% om och endast om \(x = y\). +% \end{lemma} +%\end{frame} +% +%\begin{frame} +% \begin{proof} +% Antag \(x = y\). +% Då har vi +% \begin{align*} +% tf(x) + (1-t)f(x) = f(x)(t+1-t) = f(x). +% \end{align*} +% Men +% \begin{align*} +% f(tx + (1-t)x) = f((t+1-t)x) = f(x) +% \end{align*} +% och alltså har vi likhet. +% +% Antag \(tf(x) + (1-t)f(y) = f(tx + (1-t)y)\). +% Då har vi +% \begin{align*} +% t( f(x) - f(y) ) + f(y) = f( t( x - y ) + y ). +% \end{align*} +% Högerledet implicerar \(f(x) = f(y)\), men då beror vänterledet enbart på +% \(f(y)\) och således måste även \(x = y\). +% \end{proof} +%\end{frame} + +\begin{frame} + \begin{theorem}[Jensen's inequality] + \begin{itemize} + \item Strictly concave function \(f\colon \R\to \R\). + \item Real numbers \(a_1, a_2,\ldots, a_n > 0\) such that \(\sum_{i=1}^n + a_i = 1\). + \item Then we have + \begin{align*} + \sum_{i=1}^n a_i f(x_i) \leq f\left( \sum_{i=1}^n a_i x_i\right). + \end{align*} + \item We have equality iff \(x_1 = x_2 = \cdots = x_n\). + \end{itemize} + \end{theorem} +\end{frame} + +%\begin{frame} +% \begin{block}{Bevis för Jensens olikhet.} +% Bevis genom induktion. +% Antag \(n=2\). +% Då har vi att \(a_1 + a_2 = 1\) och alltså \(a_1 = 1 - a_2\). +% Eftersom \(f\) är konkav har vi att +% \begin{align*} +% a_1f(x_1) + a_2f(x_2) \leq f(a_1x_1 + a_2x_2). +% \end{align*} +% +% Antag sant för \(n=k\). +% \begin{align} +% \label{eq:JensenIndhyp} +% \sum_{i=1}^k a_i = 1 \land +% \sum_{i=1}^k a_if(x_i) \leq f\left( \sum_{i=1}^k a_ix_i\right). +% \end{align} +% \end{block} +%\end{frame} +% +%\begin{frame} +% \begin{proof}[Forts. bevis för Jensens olikhet] +% Lås oss visa att detta även gäller för \(n=k+1\). +% Eftersom att \(f\) är konkav gäller att +% \begin{align} +% \label{eq:JensenInductive1} +% \sum_{i=1}^{k+1} a_if(x_i) &= a_1f(x_1) + (1-a_1)\sum_{i=2}^{k+1} +% \frac{a_i}{1-a_1}f(x_i) \\ +% \label{eq:JensenInductive2} +% &\leq f\left(a_1x_1 + (1-a_i)\sum_{i=2}^{k+1} \frac{a_i}{1-a_1} +% x_i\right). +% \end{align} +% Då \(\sum_{i=2}^{k+1}\frac{a_i}{1-a_i} = 1\) kan vi tillämpa +% induktionshypotesen \eqref{eq:JensenIndhyp} i \eqref{eq:JensenInductive1} +% och \eqref{eq:JensenInductive2}, alltså är det sant för alla \(n\in \N\). +% +% Vidare följer likhet från lemmat ovan. +% \end{proof} +%\end{frame} + +\begin{frame} + \begin{theorem} + \begin{itemize} + \item Stochastic variable \(\stoch X\) with probability distribution + \begin{equation*} + p_1, p_2,\ldots, p_n, \text{ where } p_i > 0 \text{ for } 1\leq i\leq + n. + \end{equation*} + \item Then \(H(\stoch X)\leq \log n\). + \item Equality iff \(p_1 = p_2 = \cdots = p_n = 1/n\). + \end{itemize} + \end{theorem} +\end{frame} + +\begin{frame} + \begin{proof} + The theorem follows directly from Jensen's inequality: + \begin{align*} + H(\stoch X) &= -\sum_{i=1}^n p_i\log p_i = \sum_{i=1}^n + p_i\log\frac{1}{p_i} \\ + &\leq \log\sum_{i=1}^n p_i\frac{1}{p_i} = \log n. + \end{align*} + With equality iff \(p_1 = p_2 = \cdots = p_n\). + \end{proof} +\end{frame} + +\begin{frame} + \begin{corollary} + \(H(\stoch X) = 0\) iff \(\Pr(\stoch X = x) = 1\) for some \(x\in X\) and + \(\Pr(\stoch X = x^\prime) = 0\) for all \(x\neq x^\prime \in X\). + \end{corollary} + + \begin{proof} + \begin{itemize} + \item If \(\Pr(\stoch X = x) = 1\), then \(n = 1\) and thus \(H(\stoch X) + = \log n = 0\). + + \item If \(H(\stoch X) = 0\), then \(H(\stoch X) \leq \log n = 0\). + Thus \(n = 1\). + \end{itemize} + \end{proof} +\end{frame} + +%\begin{frame} +% \begin{theorem} +% Följande egenskaper gäller: +% \begin{enumerate} +% \item\label{prop:cont} \(H\) är kontinuerlig. +% \item\label{prop:mono} Om \(\Pr(\stoch X = x) = 1/|X|\) för alla \(x\in +% X\) då är \(H\) en monotont stigande funktion med avseende på \(|X|\). +% \end{enumerate} +% \end{theorem} +% +% \begin{proof} +% \Cref{prop:cont} följer direkt av att logaritmen är kontinuerlig och +% funktionssammansättningar av kontinuerliga funktioner är kontinuerliga. +% +% \Cref{prop:mono} följer av föregående sats. +% \end{proof} +%\end{frame} + +\begin{frame} + \begin{lemma} + \begin{itemize} + \item Stochastic variables \(\stoch X\) and \(\stoch Y\). + \item Then we have + \begin{align*} + H(\stoch X, \stoch Y)\leq H(\stoch X) + H(\stoch Y). + \end{align*} + \item Equality iff \(\stoch X\) and \(\stoch Y\) are independent. + \end{itemize} + \end{lemma} +\end{frame} + +%\begin{frame} +% \begin{proof} +% \end{proof} +%\end{frame} +% +%\begin{frame} +% \begin{theorem} +% En utjämning av sannolikheterna ökar \(H(\stoch X)\). +% \end{theorem} +%\end{frame} +% +%\begin{frame} +% \begin{proof} +% \end{proof} +%\end{frame} + +\subsection{Conditional entropy} + +\begin{frame} + \begin{definition}[Conditional entropy] + \begin{itemize} + \item Define \emph{conditional entropy} \(H(\stoch Y\mid \stoch X)\) + as + \begin{align*} + H(\stoch Y\mid \stoch X) = %-\sum_{i,j} \Pr(i,j)\log \Pr(j\mid i) + -\sum_y\sum_x \Pr(\stoch Y = y)\Pr(\stoch X = x\mid y)\log \Pr(\stoch + X = x\mid y). + \end{align*} + \end{itemize} + \end{definition} + + \pause{} + + \begin{remark} + This is the uncertainty in \(\stoch Y\) which is not revealed by \(\stoch + X\). + \end{remark} +\end{frame} + +\begin{frame} + \begin{theorem} + \(H(\stoch X, \stoch Y) = {\color{red}H(\stoch X)} + {\color{green}H(\stoch + Y\mid \stoch X)}\) + \end{theorem} + + \begin{center} + \begin{tikzpicture} + \def\HX{(0,0) circle (2)} + \def\HY{(2,0) circle (2)} + \def\HYX{(1,0)} + \begin{scope}%[fill opacity=0.75] + \fill[green] \HY; + \fill[red] \HX; + \draw \HX node[left] {$H(X)$}; + \draw \HY node[right] {$H(Y\mid X)$}; + \end{scope} + \end{tikzpicture} + \end{center} +\end{frame} + +%\begin{frame} +% \begin{proof} +% \end{proof} +%\end{frame} + +\begin{frame} + \begin{corollary} + \(H(\stoch X\mid \stoch Y) \leq H(\stoch X)\). + \end{corollary} + + \begin{corollary} + \(H(\stoch X\mid \stoch Y) = H(\stoch X)\) iff \(\stoch X\) and \(\stoch + Y\) independent. + \end{corollary} +\end{frame} +% +%\begin{frame} +% \begin{proof} +% \end{proof} +%\end{frame} +% +%\begin{frame} +% \begin{theorem} +% Entropin för en Markovprocess +% \end{theorem} +%\end{frame} + +\subsection{Information density and redundancy} + +\begin{frame} + \begin{definition} + \begin{itemize} + \item Natural language \(L\). + \item Stochastic variable \(\stoch P^n_L\) of strings of length \(n\). + \item (Alphabet \(P_L\).) + \item Entropy of \(L\) defined as + \begin{align*} + H_L = \lim_{n\to \infty}\frac{H(\stoch P^n_L)}{n}. + \end{align*} + \item Redundancy in \(L\) is + \begin{align*} + R_L = 1 - \frac{H_L}{\log |P_L|}. + \end{align*} + \end{itemize} + \end{definition} +\end{frame} + +\begin{frame} + \begin{remark} + Meaning we have \(H_L\) bits per character in \(L\). + \end{remark} + + \begin{example}[\cite{Shannon1948amt}] + \begin{itemize} + \item Entropy of 1--1.5 bits per character in English. + \item Redundancy of approximately \(1 - \frac{1.25}{\log 26} \approx + 0.73\). + \end{itemize} + \end{example} + +\end{frame} + +\begin{frame} + \begin{example}[\cite{Shannon1948amt}] + Two-dimensional cross-word puzzles requires redundancy of approximately + \(0.5\). + \end{example} + + \begin{example} + \begin{itemize} + \item Redundancy of \enquote{SMS languages} is lower than for + \enquote{non-SMS languages}. + + \item Compare \enquote{också} and \enquote{oxå}. + + \end{itemize} + \end{example} + + \begin{remark} + \begin{itemize} + \item Lower redundancy is more space-efficient. + \item Incurs more errors. + \end{itemize} + \end{remark} +\end{frame} + +%\begin{frame} +% \begin{itemize} +% \item Detta säger också att vi kan uppskatta entropin för en given +% Markovprocess. +% +% \item Shannon modellerade språket som en Markovprocess i sin artikel +% \cite{Shannon1948amt}. +% +% \item Vi kan även beräkna entropin för ett givet tillstånd i en +% Markovprocess genom betingad entropi. +% +% \end{itemize} +%\end{frame} + +\subsection{Information gain} + +\begin{frame} + \begin{definition} + \begin{itemize} + \item Set \(U\) of possible outcomes. + \item Probability of outcome \(u\in U\) denoted \(p_u\). + \item We learn that some \emph{unknown} outcome is in \(A\subset U\). + \item Then the \emph{information gain} \(G(A\mid U)\) is defined as + \begin{align*} + G(A\mid U) = \log\frac{1}{\Pr(A)} = -\log\Pr(A), + \end{align*} + where \(\Pr(A) = \sum_{i\in A} p_i\). + \end{itemize} + \end{definition} +\end{frame} + +\begin{frame} + \begin{example}[Roll of dice again] + \begin{itemize} + \item Someone rolls and we should guess the result, \(\frac{1}{6}\) + chance. + \item We learn that it was an even number, we gain + \begin{align*} + -\log\left( \frac{1}{6} + \frac{1}{6} + \frac{1}{6}\right) = + -\log\frac{3}{6} = \log\frac{6}{3} = \log 2 = 1. + \end{align*} + \item The remaining uncertainty is \SI{1.58}{\bit}. + \end{itemize} + \end{example} + + \pause{} + + \begin{remark} + \begin{itemize} + \item \(X' = \{\fcdice{2}, \fcdice{4}, \fcdice{6}\}\) + \item \(H(\stoch X') = - \sum_{x\in X'} \Pr(\stoch X' = x)\log \Pr(\stoch + X' = x)\) + \item I.e.\ \(- 3 \times \frac{1}{3}\log\frac{1}{3} \approx 1.58\). + \end{itemize} + \end{remark} +\end{frame} + +\begin{frame} + \begin{example}[Dice yet again] + \begin{itemize} + \item We learn the die show less than five, i.e.\ not \fcdice{5} nor + \fcdice{6}. + \item This yields + \begin{align*} + -\log\left( 4\times\frac{1}{6}\right) = \log\frac{6}{4}\approx 0.58 + \end{align*} + \end{itemize} + \end{example} +\end{frame} + + +\section[Applications]{Application in security} + +\subsection{Passwords} + +\begin{frame} + \begin{block}{Idea~\cite{Komanduri2011opa}} + \begin{itemize} + \item Look at different aspects of passwords individually, then + summarize. + \item Can use \(H(x_1, x_2, \ldots, x_n) \leq H(x_1) + H(x_2) + \cdots + + H(x_n)\). + \item This allows us to reason about bounds. + \end{itemize} + \end{block} +\end{frame} + +\begin{frame} + \begin{example} + \begin{itemize} + \item We can look at properties such as: + \begin{itemize} + \item length, + \item number of and placement of character classes, + \item the actual characters, + \item \dots + \end{itemize} + \end{itemize} + \end{example} + + \pause{} + + \begin{remark} + \begin{itemize} + \item These are \emph{not independent}. + \item The sum will be an \emph{upper bound}. + \end{itemize} + \end{remark} +\end{frame} + +\begin{frame} + \begin{remark} + \begin{itemize} + \item With an upper bound we know it's not possible to do better. + \item With an average we know how well most users will do. + \item With a lower bound we have a guarantee --- not possible! + \end{itemize} + \end{remark} +\end{frame} + +\begin{frame} + \begin{remark} + \begin{itemize} + \item If a password policy yields low entropy, it implies it's bad. + \item If a password policy yields high entropy, it \emph{doesn't} imply + that it's good. + \end{itemize} + \end{remark} + + \pause + + \begin{exercise} + Why? + \end{exercise} +\end{frame} + +\begin{frame} + \begin{figure} + \includegraphics[height=0.7\textheight]{password_strength.png} + \caption{xkcd's strip on password strength. + Picture: xkcd~\cite{xkcd936}.} + \end{figure} +\end{frame} + +%\begin{frame}{En förklaring av xkcd} +% \begin{itemize} +% \item Vi har 1 miljon engelska ord: ger \(\log 10^6 \approx 20\) bitar +% entropi. +% (xkcd använder 16 bitar, vilket ger ca 70\,000 ord, alla ord i engelskan +% är inte vanliga.) +% +% \item Vi kan ha inledande versal: ger 1 bit entropi. +% +% \item Vi har några vanliga substitutioner: uppskattningsvis 10 stycken, +% d.v.s.~3 bitar entropi. +% +% \item Vi har specialtecken (ej substitution): uppskattningsvis 4 bitar +% entropi. +% +% \item Vi har siffror: \(\log 10\approx 3\). +% +% \item Ordningen på specialtecknet och siffran: ger 1 bit entropi. +% +% \item Totalt 32 bitar entropi: +% \begin{itemize} +% \item Tar minst 50 dagar med 1\,000 gissningar per sekund. +% \item Tar strax över en timme med 1\,000\,000 gissningar per sekund. +% \end{itemize} +% +% \end{itemize} +%\end{frame} + +\begin{frame} + \begin{example}[Standard password] + \begin{itemize} + \item We have + \begin{itemize} + \item 26 alphabetic characters, + \item 10 numbers, + \item 10 special characters (approximately). + \end{itemize} + + \item This yields \(\log( 2\times 26 + 10 + 10 ) = \log 72 \approx + \SI{6}{\bit}\) per password character. + + \item A 10-character \emph{uniformly randomly} generated password + contains \SI{60}{\bit}. + \end{itemize} + \end{example} + + \pause{} + + \begin{remark} + What happens when we require two upper and two lower-case characters, two + numbers must be included? + \end{remark} +\end{frame} + +\begin{frame} + \begin{example}[Four-word passphrase] + \begin{itemize} + \item We have 125\,000 words in the standard Swedish dictionary. + \item This yields \(\log 125\,000\approx \SI{17}{\bit}\) per word. + \item A four-word \emph{uniformly randomly} generated passphrase contains + \SI{68}{\bit}. + \end{itemize} + \end{example} +\end{frame} + +\begin{frame} + \begin{example}[Random sentence] + \begin{itemize} + \item We estimated the entropy per character in a language. + \item It was approximately \(\SI{1.25}{\bit}\) for English. + \item A 20-character \emph{uniformly randomly} generated sentence would + yield \SI{25}{\bit}. + \end{itemize} + \end{example} +\end{frame} + +\begin{frame} + \begin{remark} + \begin{itemize} + \item All these require uniform randomness. + \item Humans are bad at remembering random things. + \item Thus they will choose non-randomly. + \item The entropy will thus be (possibly much) lower. + \end{itemize} + \end{remark} +\end{frame} + +\subsection{Research about human chosen passwords} + +\begin{frame} + \begin{example}[\citetitle{Bonneau2012lpo}~\cite{Bonneau2012lpo}] + \begin{itemize} + \item Investigates how linguistics affect the choice of multi-word + passphrases. + + \item Users don't choose them randomly, prefer adapted to natural + language. + + \item \enquote{correct horse battery staple} is preferred to + \enquote{horse correct battery staple} since the first is more + grammatically correct. + \end{itemize} + \end{example} +\end{frame} + +\begin{frame} + \begin{example}[\citetitle{Kuo2006hso}~\cite{Kuo2006hso}] + \begin{itemize} + \item Studied how users creates easy-to-remember passwords. + + \item Also investigated the strength of phrase-based passwords. + + \item E.g.\ Google's example \enquote{To be or not to be, that is the + question}\footnote{% + URL\@: + \protect\url{http://www.lightbluetouchpaper.org/2011/11/08/want-to-create-a-really-strong-password-dont-ask-google/}. + } which results in \enquote{2bon2btitq}. + + \item This particular password has apparently been used by many \dots + \end{itemize} + \end{example} +\end{frame} + +\begin{frame} + \begin{remark} + \begin{itemize} + \item There is a PhD thesis on the topic of guessing passwords: + \fullcite{GuessingHumanChosenSecrets}. + \item There is even a conference dedicated to passwords: PasswordsCon. + \end{itemize} + \end{remark} +\end{frame} + +\subsection{Identifying information} + +\begin{frame} + \begin{example} + Do we get more information from zodiac signs or birthdays? + \begin{align*} + -\sum_{\mathclap{\text{zodiacs}}} \frac{1}{12} \log\frac{1}{12} &= \log 12 + \approx 3.58 \\ + &< -\sum_{\mathclap{\text{days of year}}} \frac{1}{365} \log\frac{1}{365} + = \log 365 \approx 8.51. + \end{align*} + \end{example} +\end{frame} + +\begin{frame} + \begin{exercise} + How much information do we need to uniquely identify an individual? + \end{exercise} +\end{frame} + +\begin{frame} + \begin{example} + \begin{itemize} + \item Sometime during 2011 there were \(n = 6\,973\,738\,433\)\footnote{% + According to the World Bank. + } people on earth. + + \item To give everyone a unique identifier we need \(\log n\approx + 32.7\approx 33\) bits of information. + \end{itemize} + \end{example} +\end{frame} + +\begin{frame} + \begin{block}{Identifying information in browsers} + \begin{itemize} + \item Electronic Frontier Foundation (EFF) studied~\cite{Eckersley2010hui} + how much information a web-browser shares. + + \item You can try your browser in \url{http://panopticlick.eff.org/}. + \end{itemize} + \end{block} + + \pause{} + + \begin{example}[My browser] + \begin{itemize} + \item My Firefox-browser with all addons gave 21.45 bits of entropy. + + \item Then the number of tested users were 2\,860\,696. + \end{itemize} + \end{example} +\end{frame} + +\begin{frame} + \begin{figure} + \includegraphics[height=0.7\textheight]{collusion.png} + \caption{Screenshot from Collusion (now Lightbeam) for Firefox. + Map over all pages that track me using this information.} + \end{figure} +\end{frame} + + +%%%%%%%%%%%%%%%%%%%%%% + +\subsection*{References} +\begin{frame}[allowframebreaks] + \small + \printbibliography{} +\end{frame} + diff --git a/basics/preamble.tex b/basics/preamble.tex new file mode 100644 index 0000000..b4650a3 --- /dev/null +++ b/basics/preamble.tex @@ -0,0 +1,23 @@ +\usepackage[utf8]{inputenc} +\usepackage[T1]{fontenc} +\usepackage[swedish,british]{babel} +\usepackage{url} +\usepackage{graphicx} +\usepackage{color} +\usepackage{subfig} +\usepackage{multicol} +\usepackage{amssymb,amsmath,amsthm} +\usepackage{booktabs} +%\usepackage[squaren,binary]{SIunits} +\usepackage[binary-units]{siunitx} +\usepackage[strict]{csquotes} +\usepackage{cleveref} +\usepackage{hhcount} +\usepackage{pgfplots} + +\usepackage{mathtools} + +\setbeamertemplate{bibliography item}[text] +\usepackage[natbib,style=alphabetic,maxbibnames=99]{biblatex} +\addbibresource{basics.bib} + From 54c78d80eef02437b1c32c65d7c17d030773645a Mon Sep 17 00:00:00 2001 From: Daniel Bosk Date: Tue, 5 Feb 2019 13:09:53 +0100 Subject: [PATCH 2/6] Rearranges sections in basics --- basics/contents.tex | 122 ++++++++++++++++++++++---------------------- 1 file changed, 60 insertions(+), 62 deletions(-) diff --git a/basics/contents.tex b/basics/contents.tex index 7f722e6..1604f73 100644 --- a/basics/contents.tex +++ b/basics/contents.tex @@ -9,7 +9,7 @@ % 15 and 30 frames, all told. -\section{Introduction} +\section{Shannon entropy} \subsection{History} @@ -55,8 +55,6 @@ \subsection{History} \end{frame} -\section{Shannon entropy} - \subsection{Definition of Shannon Entropy} \begin{frame} @@ -446,6 +444,65 @@ \subsection{Conditional entropy} % \end{theorem} %\end{frame} +\subsection{Information gain} + +\begin{frame} + \begin{definition} + \begin{itemize} + \item Set \(U\) of possible outcomes. + \item Probability of outcome \(u\in U\) denoted \(p_u\). + \item We learn that some \emph{unknown} outcome is in \(A\subset U\). + \item Then the \emph{information gain} \(G(A\mid U)\) is defined as + \begin{align*} + G(A\mid U) = \log\frac{1}{\Pr(A)} = -\log\Pr(A), + \end{align*} + where \(\Pr(A) = \sum_{i\in A} p_i\). + \end{itemize} + \end{definition} +\end{frame} + +\begin{frame} + \begin{example}[Roll of dice again] + \begin{itemize} + \item Someone rolls and we should guess the result, \(\frac{1}{6}\) + chance. + \item We learn that it was an even number, we gain + \begin{align*} + -\log\left( \frac{1}{6} + \frac{1}{6} + \frac{1}{6}\right) = + -\log\frac{3}{6} = \log\frac{6}{3} = \log 2 = 1. + \end{align*} + \item The remaining uncertainty is \SI{1.58}{\bit}. + \end{itemize} + \end{example} + + \pause{} + + \begin{remark} + \begin{itemize} + \item \(X' = \{\fcdice{2}, \fcdice{4}, \fcdice{6}\}\) + \item \(H(\stoch X') = - \sum_{x\in X'} \Pr(\stoch X' = x)\log \Pr(\stoch + X' = x)\) + \item I.e.\ \(- 3 \times \frac{1}{3}\log\frac{1}{3} \approx 1.58\). + \end{itemize} + \end{remark} +\end{frame} + +\begin{frame} + \begin{example}[Dice yet again] + \begin{itemize} + \item We learn the die show less than five, i.e.\ not \fcdice{5} nor + \fcdice{6}. + \item This yields + \begin{align*} + -\log\left( 4\times\frac{1}{6}\right) = \log\frac{6}{4}\approx 0.58 + \end{align*} + \end{itemize} + \end{example} +\end{frame} + + +\section[Applications]{Applications} + \subsection{Information density and redundancy} \begin{frame} @@ -519,65 +576,6 @@ \subsection{Information density and redundancy} % \end{itemize} %\end{frame} -\subsection{Information gain} - -\begin{frame} - \begin{definition} - \begin{itemize} - \item Set \(U\) of possible outcomes. - \item Probability of outcome \(u\in U\) denoted \(p_u\). - \item We learn that some \emph{unknown} outcome is in \(A\subset U\). - \item Then the \emph{information gain} \(G(A\mid U)\) is defined as - \begin{align*} - G(A\mid U) = \log\frac{1}{\Pr(A)} = -\log\Pr(A), - \end{align*} - where \(\Pr(A) = \sum_{i\in A} p_i\). - \end{itemize} - \end{definition} -\end{frame} - -\begin{frame} - \begin{example}[Roll of dice again] - \begin{itemize} - \item Someone rolls and we should guess the result, \(\frac{1}{6}\) - chance. - \item We learn that it was an even number, we gain - \begin{align*} - -\log\left( \frac{1}{6} + \frac{1}{6} + \frac{1}{6}\right) = - -\log\frac{3}{6} = \log\frac{6}{3} = \log 2 = 1. - \end{align*} - \item The remaining uncertainty is \SI{1.58}{\bit}. - \end{itemize} - \end{example} - - \pause{} - - \begin{remark} - \begin{itemize} - \item \(X' = \{\fcdice{2}, \fcdice{4}, \fcdice{6}\}\) - \item \(H(\stoch X') = - \sum_{x\in X'} \Pr(\stoch X' = x)\log \Pr(\stoch - X' = x)\) - \item I.e.\ \(- 3 \times \frac{1}{3}\log\frac{1}{3} \approx 1.58\). - \end{itemize} - \end{remark} -\end{frame} - -\begin{frame} - \begin{example}[Dice yet again] - \begin{itemize} - \item We learn the die show less than five, i.e.\ not \fcdice{5} nor - \fcdice{6}. - \item This yields - \begin{align*} - -\log\left( 4\times\frac{1}{6}\right) = \log\frac{6}{4}\approx 0.58 - \end{align*} - \end{itemize} - \end{example} -\end{frame} - - -\section[Applications]{Application in security} - \subsection{Passwords} \begin{frame} From 1281ac52058a542164403792a5d3ff238bb42b16 Mon Sep 17 00:00:00 2001 From: Daniel Bosk Date: Tue, 5 Feb 2019 13:49:27 +0100 Subject: [PATCH 3/6] Breaks basics into shannon-entropy and applications --- Makefile | 3 +- applications/.gitignore | 6 + {basics => applications}/Makefile | 13 +- {basics => applications}/abstract.tex | 0 .../applications.bib | 0 .../applications.tex | 0 {basics => applications}/collusion.png | Bin applications/contents.tex | 361 ++++++++++++++++++ {basics => applications}/preamble.tex | 2 +- basics/.gitignore | 6 - shannon-entropy/.gitignore | 6 + shannon-entropy/Makefile | 34 ++ shannon-entropy/abstract.tex | 13 + shannon-entropy/collusion.png | Bin 0 -> 109951 bytes {basics => shannon-entropy}/contents.tex | 342 ----------------- shannon-entropy/preamble.tex | 23 ++ shannon-entropy/shannon-entropy.bib | 123 ++++++ shannon-entropy/shannon-entropy.tex | 80 ++++ 18 files changed, 654 insertions(+), 358 deletions(-) create mode 100644 applications/.gitignore rename {basics => applications}/Makefile (73%) rename {basics => applications}/abstract.tex (100%) rename basics/basics.bib => applications/applications.bib (100%) rename basics/basics.tex => applications/applications.tex (100%) rename {basics => applications}/collusion.png (100%) create mode 100644 applications/contents.tex rename {basics => applications}/preamble.tex (94%) delete mode 100644 basics/.gitignore create mode 100644 shannon-entropy/.gitignore create mode 100644 shannon-entropy/Makefile create mode 100644 shannon-entropy/abstract.tex create mode 100644 shannon-entropy/collusion.png rename {basics => shannon-entropy}/contents.tex (60%) create mode 100644 shannon-entropy/preamble.tex create mode 100644 shannon-entropy/shannon-entropy.bib create mode 100644 shannon-entropy/shannon-entropy.tex diff --git a/Makefile b/Makefile index 55b4d89..99facbd 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,6 @@ -SUBDIR+= basics SUBDIR+= probability +SUBDIR+= shannon-entropy +SUBDIR+= applications INCLUDE_MAKEFILES=makefiles include ${INCLUDE_MAKEFILES}/subdir.mk diff --git a/applications/.gitignore b/applications/.gitignore new file mode 100644 index 0000000..116ecc4 --- /dev/null +++ b/applications/.gitignore @@ -0,0 +1,6 @@ +applications.log.gnuplot +applications.log.table +applications.pdf +encryptic.png +password_reuse.png +password_strength.png diff --git a/basics/Makefile b/applications/Makefile similarity index 73% rename from basics/Makefile rename to applications/Makefile index 8a9f84b..310affa 100644 --- a/basics/Makefile +++ b/applications/Makefile @@ -1,16 +1,13 @@ .PHONY: all -all: basics.pdf +all: applications.pdf -LATEXFLAGS+= -shell-escape -TEX_OUTDIR= . - -SRC+= basics.tex preamble.tex basics.bib +SRC+= applications.tex preamble.tex applications.bib SRC+= abstract.tex contents.tex SRC+= hhcount.sty FIGURES+= collusion.png FIGURES+= password_strength.png password_reuse.png encryptic.png -basics.pdf: ${SRC} ${FIGURES} +applications.pdf: ${SRC} ${FIGURES} password_strength.png: wget -O $@ http://imgs.xkcd.com/comics/password_strength.png @@ -29,8 +26,8 @@ hhcount.sty hhutils0.sty: .PHONY: clean clean: - ${RM} basics.pdf - ${RM} basics.bbl basics.log.gnuplot basics.log.table basics.nav basics.run.xml basics.snm basics.vrb + ${RM} applications.pdf + ${RM} applications.bbl applications.log.gnuplot applications.log.table applications.nav applications.run.xml applications.snm applications.vrb .PHONY: distclean diff --git a/basics/abstract.tex b/applications/abstract.tex similarity index 100% rename from basics/abstract.tex rename to applications/abstract.tex diff --git a/basics/basics.bib b/applications/applications.bib similarity index 100% rename from basics/basics.bib rename to applications/applications.bib diff --git a/basics/basics.tex b/applications/applications.tex similarity index 100% rename from basics/basics.tex rename to applications/applications.tex diff --git a/basics/collusion.png b/applications/collusion.png similarity index 100% rename from basics/collusion.png rename to applications/collusion.png diff --git a/applications/contents.tex b/applications/contents.tex new file mode 100644 index 0000000..c338ddf --- /dev/null +++ b/applications/contents.tex @@ -0,0 +1,361 @@ +% Since this a solution template for a generic talk, very little can +% be said about how it should be structured. However, the talk length +% of between 15min and 45min and the theme suggest that you stick to +% the following rules: + +% - Exactly two or three sections (other than the summary). +% - At *most* three subsections per section. +% - Talk about 30s to 2min per frame. So there should be between about +% 15 and 30 frames, all told. + + +\section{Applications} + +\subsection{Information density and redundancy} + +\begin{frame} + \begin{definition} + \begin{itemize} + \item Natural language \(L\). + \item Stochastic variable \(\stoch P^n_L\) of strings of length \(n\). + \item (Alphabet \(P_L\).) + \item Entropy of \(L\) defined as + \begin{align*} + H_L = \lim_{n\to \infty}\frac{H(\stoch P^n_L)}{n}. + \end{align*} + \item Redundancy in \(L\) is + \begin{align*} + R_L = 1 - \frac{H_L}{\log |P_L|}. + \end{align*} + \end{itemize} + \end{definition} +\end{frame} + +\begin{frame} + \begin{remark} + Meaning we have \(H_L\) bits per character in \(L\). + \end{remark} + + \begin{example}[\cite{Shannon1948amt}] + \begin{itemize} + \item Entropy of 1--1.5 bits per character in English. + \item Redundancy of approximately \(1 - \frac{1.25}{\log 26} \approx + 0.73\). + \end{itemize} + \end{example} + +\end{frame} + +\begin{frame} + \begin{example}[\cite{Shannon1948amt}] + Two-dimensional cross-word puzzles requires redundancy of approximately + \(0.5\). + \end{example} + + \begin{example} + \begin{itemize} + \item Redundancy of \enquote{SMS languages} is lower than for + \enquote{non-SMS languages}. + + \item Compare \enquote{också} and \enquote{oxå}. + + \end{itemize} + \end{example} + + \begin{remark} + \begin{itemize} + \item Lower redundancy is more space-efficient. + \item Incurs more errors. + \end{itemize} + \end{remark} +\end{frame} + +%\begin{frame} +% \begin{itemize} +% \item Detta säger också att vi kan uppskatta entropin för en given +% Markovprocess. +% +% \item Shannon modellerade språket som en Markovprocess i sin artikel +% \cite{Shannon1948amt}. +% +% \item Vi kan även beräkna entropin för ett givet tillstånd i en +% Markovprocess genom betingad entropi. +% +% \end{itemize} +%\end{frame} + +\subsection{Passwords} + +\begin{frame} + \begin{block}{Idea~\cite{Komanduri2011opa}} + \begin{itemize} + \item Look at different aspects of passwords individually, then + summarize. + \item Can use \(H(x_1, x_2, \ldots, x_n) \leq H(x_1) + H(x_2) + \cdots + + H(x_n)\). + \item This allows us to reason about bounds. + \end{itemize} + \end{block} +\end{frame} + +\begin{frame} + \begin{example} + \begin{itemize} + \item We can look at properties such as: + \begin{itemize} + \item length, + \item number of and placement of character classes, + \item the actual characters, + \item \dots + \end{itemize} + \end{itemize} + \end{example} + + \pause{} + + \begin{remark} + \begin{itemize} + \item These are \emph{not independent}. + \item The sum will be an \emph{upper bound}. + \end{itemize} + \end{remark} +\end{frame} + +\begin{frame} + \begin{remark} + \begin{itemize} + \item With an upper bound we know it's not possible to do better. + \item With an average we know how well most users will do. + \item With a lower bound we have a guarantee --- not possible! + \end{itemize} + \end{remark} +\end{frame} + +\begin{frame} + \begin{remark} + \begin{itemize} + \item If a password policy yields low entropy, it implies it's bad. + \item If a password policy yields high entropy, it \emph{doesn't} imply + that it's good. + \end{itemize} + \end{remark} + + \pause + + \begin{exercise} + Why? + \end{exercise} +\end{frame} + +\begin{frame} + \begin{figure} + \includegraphics[height=0.7\textheight]{password_strength.png} + \caption{xkcd's strip on password strength. + Picture: xkcd~\cite{xkcd936}.} + \end{figure} +\end{frame} + +%\begin{frame}{En förklaring av xkcd} +% \begin{itemize} +% \item Vi har 1 miljon engelska ord: ger \(\log 10^6 \approx 20\) bitar +% entropi. +% (xkcd använder 16 bitar, vilket ger ca 70\,000 ord, alla ord i engelskan +% är inte vanliga.) +% +% \item Vi kan ha inledande versal: ger 1 bit entropi. +% +% \item Vi har några vanliga substitutioner: uppskattningsvis 10 stycken, +% d.v.s.~3 bitar entropi. +% +% \item Vi har specialtecken (ej substitution): uppskattningsvis 4 bitar +% entropi. +% +% \item Vi har siffror: \(\log 10\approx 3\). +% +% \item Ordningen på specialtecknet och siffran: ger 1 bit entropi. +% +% \item Totalt 32 bitar entropi: +% \begin{itemize} +% \item Tar minst 50 dagar med 1\,000 gissningar per sekund. +% \item Tar strax över en timme med 1\,000\,000 gissningar per sekund. +% \end{itemize} +% +% \end{itemize} +%\end{frame} + +\begin{frame} + \begin{example}[Standard password] + \begin{itemize} + \item We have + \begin{itemize} + \item 26 alphabetic characters, + \item 10 numbers, + \item 10 special characters (approximately). + \end{itemize} + + \item This yields \(\log( 2\times 26 + 10 + 10 ) = \log 72 \approx + \SI{6}{\bit}\) per password character. + + \item A 10-character \emph{uniformly randomly} generated password + contains \SI{60}{\bit}. + \end{itemize} + \end{example} + + \pause{} + + \begin{remark} + What happens when we require two upper and two lower-case characters, two + numbers must be included? + \end{remark} +\end{frame} + +\begin{frame} + \begin{example}[Four-word passphrase] + \begin{itemize} + \item We have 125\,000 words in the standard Swedish dictionary. + \item This yields \(\log 125\,000\approx \SI{17}{\bit}\) per word. + \item A four-word \emph{uniformly randomly} generated passphrase contains + \SI{68}{\bit}. + \end{itemize} + \end{example} +\end{frame} + +\begin{frame} + \begin{example}[Random sentence] + \begin{itemize} + \item We estimated the entropy per character in a language. + \item It was approximately \(\SI{1.25}{\bit}\) for English. + \item A 20-character \emph{uniformly randomly} generated sentence would + yield \SI{25}{\bit}. + \end{itemize} + \end{example} +\end{frame} + +\begin{frame} + \begin{remark} + \begin{itemize} + \item All these require uniform randomness. + \item Humans are bad at remembering random things. + \item Thus they will choose non-randomly. + \item The entropy will thus be (possibly much) lower. + \end{itemize} + \end{remark} +\end{frame} + +\subsection{Research about human chosen passwords} + +\begin{frame} + \begin{example}[\citetitle{Bonneau2012lpo}~\cite{Bonneau2012lpo}] + \begin{itemize} + \item Investigates how linguistics affect the choice of multi-word + passphrases. + + \item Users don't choose them randomly, prefer adapted to natural + language. + + \item \enquote{correct horse battery staple} is preferred to + \enquote{horse correct battery staple} since the first is more + grammatically correct. + \end{itemize} + \end{example} +\end{frame} + +\begin{frame} + \begin{example}[\citetitle{Kuo2006hso}~\cite{Kuo2006hso}] + \begin{itemize} + \item Studied how users creates easy-to-remember passwords. + + \item Also investigated the strength of phrase-based passwords. + + \item E.g.\ Google's example \enquote{To be or not to be, that is the + question}\footnote{% + URL\@: + \protect\url{http://www.lightbluetouchpaper.org/2011/11/08/want-to-create-a-really-strong-password-dont-ask-google/}. + } which results in \enquote{2bon2btitq}. + + \item This particular password has apparently been used by many \dots + \end{itemize} + \end{example} +\end{frame} + +\begin{frame} + \begin{remark} + \begin{itemize} + \item There is a PhD thesis on the topic of guessing passwords: + \fullcite{GuessingHumanChosenSecrets}. + \item There is even a conference dedicated to passwords: PasswordsCon. + \end{itemize} + \end{remark} +\end{frame} + +\subsection{Identifying information} + +\begin{frame} + \begin{example} + Do we get more information from zodiac signs or birthdays? + \begin{align*} + -\sum_{\mathclap{\text{zodiacs}}} \frac{1}{12} \log\frac{1}{12} &= \log 12 + \approx 3.58 \\ + &< -\sum_{\mathclap{\text{days of year}}} \frac{1}{365} \log\frac{1}{365} + = \log 365 \approx 8.51. + \end{align*} + \end{example} +\end{frame} + +\begin{frame} + \begin{exercise} + How much information do we need to uniquely identify an individual? + \end{exercise} +\end{frame} + +\begin{frame} + \begin{example} + \begin{itemize} + \item Sometime during 2011 there were \(n = 6\,973\,738\,433\)\footnote{% + According to the World Bank. + } people on earth. + + \item To give everyone a unique identifier we need \(\log n\approx + 32.7\approx 33\) bits of information. + \end{itemize} + \end{example} +\end{frame} + +\begin{frame} + \begin{block}{Identifying information in browsers} + \begin{itemize} + \item Electronic Frontier Foundation (EFF) studied~\cite{Eckersley2010hui} + how much information a web-browser shares. + + \item You can try your browser in \url{http://panopticlick.eff.org/}. + \end{itemize} + \end{block} + + \pause{} + + \begin{example}[My browser] + \begin{itemize} + \item My Firefox-browser with all addons gave 21.45 bits of entropy. + + \item Then the number of tested users were 2\,860\,696. + \end{itemize} + \end{example} +\end{frame} + +\begin{frame} + \begin{figure} + \includegraphics[height=0.7\textheight]{collusion.png} + \caption{Screenshot from Collusion (now Lightbeam) for Firefox. + Map over all pages that track me using this information.} + \end{figure} +\end{frame} + + +%%%%%%%%%%%%%%%%%%%%%% + +\subsection*{References} +\begin{frame}[allowframebreaks] + \small + \printbibliography{} +\end{frame} + diff --git a/basics/preamble.tex b/applications/preamble.tex similarity index 94% rename from basics/preamble.tex rename to applications/preamble.tex index b4650a3..dec504b 100644 --- a/basics/preamble.tex +++ b/applications/preamble.tex @@ -19,5 +19,5 @@ \setbeamertemplate{bibliography item}[text] \usepackage[natbib,style=alphabetic,maxbibnames=99]{biblatex} -\addbibresource{basics.bib} +\addbibresource{applications.bib} diff --git a/basics/.gitignore b/basics/.gitignore deleted file mode 100644 index f8a4f0a..0000000 --- a/basics/.gitignore +++ /dev/null @@ -1,6 +0,0 @@ -basics.log.gnuplot -basics.log.table -basics.pdf -encryptic.png -password_reuse.png -password_strength.png diff --git a/shannon-entropy/.gitignore b/shannon-entropy/.gitignore new file mode 100644 index 0000000..e27d6d8 --- /dev/null +++ b/shannon-entropy/.gitignore @@ -0,0 +1,6 @@ +shannon-entropy.log.gnuplot +shannon-entropy.log.table +shannon-entropy.pdf +encryptic.png +password_reuse.png +password_strength.png diff --git a/shannon-entropy/Makefile b/shannon-entropy/Makefile new file mode 100644 index 0000000..0754a58 --- /dev/null +++ b/shannon-entropy/Makefile @@ -0,0 +1,34 @@ +.PHONY: all +all: shannon-entropy.pdf + +LATEXFLAGS+= -shell-escape +TEX_OUTDIR= . + +SRC+= shannon-entropy.tex preamble.tex shannon-entropy.bib +SRC+= abstract.tex contents.tex +SRC+= hhcount.sty + +shannon-entropy.pdf: ${SRC} + +hhcount.sty: hhutils0.sty +hhcount.sty hhutils0.sty: + wget -O $@ http://tug.ctan.org/tex-archive/usergrps/uktug/baskervi/5_5/$@ + touch $@ + + +.PHONY: clean +clean: + ${RM} shannon-entropy.pdf + ${RM} shannon-entropy.bbl shannon-entropy.log.gnuplot shannon-entropy.log.table shannon-entropy.nav shannon-entropy.run.xml shannon-entropy.snm shannon-entropy.vrb + + +.PHONY: distclean +distclean: + ${RM} password_strength.png + ${RM} password_reuse.png + ${RM} encryptic.png + ${RM} hhcount.sty hhutils0.sty + + +INCLUDE_MAKEFILES=../makefiles +include ${INCLUDE_MAKEFILES}/tex.mk diff --git a/shannon-entropy/abstract.tex b/shannon-entropy/abstract.tex new file mode 100644 index 0000000..2513055 --- /dev/null +++ b/shannon-entropy/abstract.tex @@ -0,0 +1,13 @@ +The area of Information Theory was founded in 1948 by Claude Shannon. +It concerns information, e.g.\ how much information is contained in certain +data. +Equivalently, it is also a measure of uncertainty in information, and has thus +plenty of application in security and cryptography. + +The concept of entropy, the main part of information theory, is treated in +a few short texts: \citetitle{Eckersley2010apo}~\cite{Eckersley2010apo} and +applied in \citetitle{Eckersley2010hui}~\cite{Eckersley2010hui}, but also in +\citetitle{Ueltschi2013se}~\cite{Ueltschi2013se}. +This is then utilised in the text \citetitle{Bosk2013gl}~\cite{Bosk2013gl} (in +Swedish), and \citetitle{Komanduri2011opa}~\cite{Komanduri2011opa} which treats +passwords. diff --git a/shannon-entropy/collusion.png b/shannon-entropy/collusion.png new file mode 100644 index 0000000000000000000000000000000000000000..e85f526b96924a7edf0f9555ac89143d891423f8 GIT binary patch literal 109951 zcmd43XE>bS7d1Q~WJHu8dN8`Eqj%AJiQd~NiQYvI5rjc>L5LnD1kqcx(TPrUlITS5 zyvOflr| zkA2q{cnINYrm4IK8Q=^3@TWhe+^kicfx-G}O=t}V2gmPZdt+}eR%aFh8B>k)M2A4k zpD{2nh#mCM6%`fv`1mNNa18eMy9-hx;kC2#)6*}jW|Wkb@hAnq*$z{|WJ)QpA*sGx zHt3L4k%iTU1Kots^6>hUZ}L4J7TRycw6 zs^Fv#o^%qb=M@%891idZ2?Z+?fZDyg6R4@D)2;^@>T3Xu5 z$_i7KKQ|xWF-rdL-@h0B;s(jXpF~I=VcHh>K;C?mw44VYoQmev7%-T|SE5%wG%%3S zvp-wos6~|D(BRuZfeA^q`0wLF;^PUVdeZpp8DBRI+8EV182I=I!G7YPaTWfE<%O7Y zFf%i|)Ef(Y3MVhGtJ6>ZgG3@X?4Ll)|4LecyTvxGlWb{znskqrZMV3tivZN^jA<2eG00-#@psm_l85=jySjhJ_>oE&0eC z#vuju%*@RBkjNe{AD>Bs$19s(U|ZlCCilSW?xO`~XJ>D3Z%~hM7j-jaF{lo z9rSbJ;ovm?YsW@bkU7yq%p3mO2N6t6%!|v*s>;e3YKa)Qnu^MI!>=f4lPoHu&{X^46qM56;|L@6HBqk<0&ekL)CBZ_sz5FyaHJORX$;d`L#VB$2<{M9^ zD-c|U=s%1x;&345PD%<2%q%RuJw4!g6c@)Jk>CHjo~wXx{l8pqW-z@1(76PJJ`F`i zMvjh-B9V_uCi;XndO`jD0a@|RpOzPO}hs@zPSWw58GXL#6K zkg}o7uX!OXEKGy>w^!q$&)O#x3Z-951QITjXbThk7T^Ep;y07T$B!TD{m&0JH#dL( z{=Gl^5C#I)Yv)%|e0*il?Twho%v zZQKLdHLkBC4K=8;8JzcC{Pf|&H$*qC5{uNAl9G~^7ID-LCge>KI)WcE@EDtzZMxFB zKjx`OUtb>=%62H@yhmQ#4Py$uY(Coc{JwJ|=t@E|46#62N5P}7* zty%6j*Ly({babo7Q)cqeKY#u(Ffpa1q;ywqfbY)-Ma`U}r@vns%5Gfu^X%U{64TdL z``tP^0Y@Y95*H(};+NZ1t>=TzRQ~_kc4lh@1O$Tq@?;6QEWL5HGB7ZZl$0z@!+}7w zaCPy~xk%{g>1jgaqz&al;Y%UmL-iH+<)@DKx8AW6 z_fIgPL7rcQ^kBZJH}~)$g8e?djK)idkH@7H{I{MPtE;0UcK$nogwynD887HA>4J_+ z%y90bk#HD)GyFOw`WOOPd3sk>Nb2UDLN(0Hvc@)Kpki15I))`~uL>ouH&V<3>uYNT zcz6h5-(6Qxe3N`TBLoR^rm&#f!&M z>;INJqNAgoTd!+|*P@PD|I1_2?hTK?4P`Umjr zByL&F&Xt0KTJb~N#d&#;z%$t)%sK-n5iWR?SltcxAa7WzEW09O{eRQx=;+MWI(MJR zNz999?J-H5E9&V@fqm_Wi;E+(hk;-eNR37_-(BC>ctM1Lm|I*l)7GZ%Kj6c&cXSL` zen%1(9=;fKdkxN-yP5}4VFmR)RVyt$9Xy?T3igxeophR z?Ey8Vm~SFH48Bn3ijbF=2X($Q{SkO0`dwvWlYK$VVVs(r{MSX06k%Fko12^4*y!hv zYbn)(il&(Tb$3}#gJJ;z*)9p4Y4WLhp+$K2SDM`yO0^C%@#*OlTVZ!UfT&<7#@9H_ zr+xbL^#Avh-G(iYw59q2_wQaa6wANQ~K`5<`H3B^dX}a0#Z;I zDPe?LnSAmeP|EW`&NhGzbz!B^qD~bVc#Vp9#nsk%HWq=Pb-pi8RpFynnl3i$G9)4_ zJo(jV?eH8e_<3nMsNf0caX6`j925oFaUGrW|%|ZFlKH#KH}-;p@eOuTbrB3 z#l;7&Me*lA+CXLaXd4fmj(2x=aVYp7;o^pMEb9w^Om#w|rNB?2P0$$6c*~7OGV@s> zlC3|olo^#v-&6c@F~DIb{Qf?AUDXzJPWoO3N{*09wt-ZkI0P- zP`#G?{Z$>7Tm<=@=3cM=gk=qrY}E_|=$2H2Sjo$yr=#oG@YrnFJv=uwGTH*zB|RN6 zFATBa12=y4zKoRdFMZUs* zf78o&Oc27W8Lp^Me6W{m9>M|+(=Pv(+D1l3^lPn$XhTblYMuI%*(=$Y7#RMnt%*?L zqEe@}nmsn+3tnAcUpqG+>lzsul^Q+#!3MBH1P`M39Sh%sSM-Y9e=~_>b=fL&6e`(R zA0}BT#=oaS7pjbl4?TiBJi#&(v27@Ol~%A>T=2?5RfkV!f^T*IU@6SK&8O6Ce|yEP z9t4v3*%G?KiojC`{#hpR{r6W_SKxH~YE)|)hm{8R+F$81Y4pOu!vi?%@-3ctgpSC) z)WJLe&EF`JXEmed2&_2>lb=L6R4@}q<>=E#JzcxS8otr!NtU>AFrc7q-ZT1TntQKS zPDh1{f7K6G$K}cqfgeJ#eoxb2L}fw zc%KuKQ&Kn$zpsN+Nd~GI|J{3U;iD4+q>8GP26O*+-yC0jg`j@&6WI#=CnY)+`fR%C zqUAEBH(_Zt)`}J@g;Og`B|iyuUdm$_W=4@#)P8e|yRx~5|sVFJuzFA0nd)Jn2RX7dJ?f*c>BO)da+|`q1Ekf0*rQ_R#PSX=&-L zsq($e&5$Jv^larGJoC%N*W=A9h`2a)*wVZ1IOLM|c zq47@)z(XnNveb#kp6M%JD>S%0)XF;(?kY~$c`47}LO3oyGO``gHBjpPjk-1ew}{d3+c>A76D@+0g3#(aDLL_aP*L zj_~3!nmIog;ig6C3y&vovRUfS5~*Ihkmjm1)ORxJKqydOiU0*F-$tXcjixLmyihh)0dQ}w&GOv`7@1> z(0LlG8>B7);PaJ7s8xb(*=J^&&t5!>OLSxRIo6_3^jaA#MO;mO@uZ`Br6G> zZ_mqoJodwZ2C^zCo-V||%4$E7BYXIF&|UabTEV%0%gMERlOBqm=LbI^?6fWP~QyTOBF@Fm*(*LQ8J18`3!&!^pUya>dUs_1+ zTakSXMhkv3wvjRZKCo5d0t(@JZp9MXLsbF$0sKo z-~%<8z_KyX?wvWIbAkTQH5R`T(H)b-s#lPg=djRJpOwzx4?$da#|%;xha zNe>ie#MJ1lb%nkIe|pFA_g@aUg=03gvrpBc1{r%J^O&_Yeb3fE1i4}3Vn&;DZoj85 zhie_dtdcLoo-QVUzFry%mvbUTR5+>m{~+CJ7!oQkFVE7p>L3LjMhW<1OU*s}SenZB z&ZMj1RK8#8>RxY6eog0hY!D`tlaoV(&^_U7C`HY5WP{M(phByxTKt)?mPmi~5S;KQH3;_B6HGE(n0g$pbSO9pa|4-V| z29tWGw$3pKl(An5kQH1R{(S&n9J{)@s4u6xlQ~R$-*y0umgT!y1eRKe2a3M?u$TZB z7Z-xP2`zuzrb;%Kcy+|43I^bPS^)-HFo+=NeE<|28yf*Y5v1fF>LN{7yr5T1wpM&W z)Fo9kP``w9Mg4Beoj)ud^2%lqBD6ztB2NU|xIGf#C?Ud-SmiNWZN2Bvwz|PQPY(}s zq=4fukEI{?piX5rRWlDCKKu)CFE{t-+?@ZxZ^cjzWo2b+>p!yqJTJY)Q?pX?u(JBy ze7a!okcd()fW2m}zN2hNZV)lF2N&AF{;@8>r4KNuOKaB|B>Px%=o|8A}^3a55G4Iq%mG#}e= z)=+v}eb#D{{d=O0j*g)pj<=?$MPL6@!^MH4Ha0e7Wo6Y0t8#N!d*bM_HP+MQsYJZk z`1qc{ejodKZ%?~6v+;?EiIq1UM0T&jsR}DLAe~GR4l7ArmMk0`rj1@Zd71`nW-V8s z{g4JvPnC{BF}@6HoTF@tFSYCE zj^AJxk1Q5->*Kp@91uyLt$TP{yC>EC~rgL%J#|_T~-cBqk>%`G{r;Ecz$l zyB+(IfE;$np=$lzwRP;}?Hw+ay)|z?l;JAPp8;2cB9L4rQ+zp(>EIRlyM7P#f_%?% zsf|~L9q1_{KMJzfQ`?K;lO(467R3*%gm%G+pjCk|9Q1 zQvmF2Ym;2Pp1IlThT22B|9*>B^T2C(UJf5s!e|=RRnBbUn*3K(B{JvRo zM3^~DT4v>*{TAz&Ywxcr{X>06IC%EO#YM$%n~u~WGQz)h6z*-RNHez#dpkRTXiXYV zKrdYDc5^1HRdu!(q6xZ7BMpt`&{vL*^HsLP?1dl6NJ(FVGQRC~nIjtoNURLC!m=&7 zmBE@C{%JM5AJLLlgyq{_BCt+{KJgjC$5IdQsCY*+Q6zMm1R>ZlLN*zXZ6;sSPP2uX zQ=;-u#M~Awwwf43J$Jg=C><34ZbGq+XXltke!#^V;-VwwggJkXEoI zOl@RGXXE#QL;^r4K>kjZnfU$giA$#vt>NkE;T79u35FB&Oh-!i-FShs0vj8fkdP3x zd4Tp6)?sNy5B>qpqQc*rkhvEiqxDcfzn5*r^VYY@Ea@gWC&73!4|VG zf)k%4gJ;O&(*`-tQ^w|QXf_lP@?lBk&m3twT#8IphZEyU_T9VcwV{o_niME9Y9m`7 z`@jHH&x-*@{a%f35oK# zm&)+pV(dEG+S&#N1{6Q7do_Zl{>rH{`o?KBgKmJ7BK<3uZkG%#h2j`*RfsozaCSv{ zkV&F=o}n!Sd+4q%DY)X?~lk^)F;BSXWXOfl?RZAhxl-D*I2l!^eDL{XMsDx#sG zVJ0K&HEk$<1a`2Xz?SRQY9{yO!g>SX1w*kI?x(x!K(P=K0z9!6U`=CuVnk40-Y-$C ztm+wpLqdcZ*h7yWO{=^;TpQ*zZF&vZw?ef~+!9Z4tRf7W=Sx?p&gsbKp!6tC81>~_ zclh;Nfy7b3`nI=ADaHdP;beCndm;^z`iap%0)K$Kp^Sux=w(_BIK@k%o*AnNpJbCqUZOqA0(Z0JvJ1kaFKUViU_r5Se-0uL;z>b%mwzfiiVpf(!+^Tf;&pUJhC`Ukys(H`a zK=`NPVpxOmKV@@;P@oLx#VXDVwp6I2YzE%(H8`ngM90JwTU0mYG?i2l20E((zO)6j zwSZ&=i7y3ZMBKy4PgJU;R|M-aNT%$U25@9)P_fL zVj`PS&46VEuYkbRQ{pXm% zm1JH2<;zPz(}B}$etzC|ICE!nGp%?>4f2Kz5~u19>XBici-n(GWB;GNp`n%qi{R%= z`6;G$uU`3FA5W#HrP)-z8^e*;%t&QrAIK*~IV2hwJtJRqA%09&2tRo(Z^z;S3!U0Z zqAzM{YO1Q@L6tl1a<|9b1P5niP^Pf932gGTlmCzZFi3u)_`=E{*%~_u&>;+TE$;_Z zEG$dAVIxJ%4r=OY%5IDl%lJ~2RaGhMM!Nd?>&L#snPRh}qbrB!=9&a=>d?W038ls- zCkqM-fiMAN3>G*X4q6HSZ1dK|pzY}jJ+lB$&=OQnnTmMt8b2};ainea8@QOWbg0Hz z3*i~6&1su7@mDS5}I$AaZz8%&}xZ$~=M+6bN<5gQz1A=s5+8dDR zUuh~oiZJH`h#)6?@?WPC9v(hBI|~@Jl>nyk&gena&lL{NdXY|#sZP83*iD;KH6Qwz z7iw7XXj}DuV^fZ&XH6chtbES3PDYh%EemL__c1?vLZ2xpKL7Q_+@h_%V%KO&TXoDs zb)vnvj3PEJ+F8z8%e`~AFPj9>6<}&gg(wAhW%?mWf-?rhJngv^`rm^7lRhNQ%;)v- zq>r5^HoB$y*~NCC@+8*&8zP!tRefc3ngEEf9Q{&;{QR5eKLv#C2BZ~xv3*X$WiEtO z)p&-I&X~Qj;xA72TRPInC;4=6O47(j+l!0C`1ndo(h7=DE-@cn;qjZ8h>WBp9esVE zZvL8`1q@Pl4n4&E2~gMOIyWau0>sS%0s=}Y2u=s?QSb;w6B)3uu@Xm>0vg3=KSwtE zn=mmz$ewX+08g}PigvIihaGU*?sk*Bin_!H0-UNVClP# zv==q=smYc$E(xh0zL~d$_#FNPY80P z(Up(#Ax4OuU|yJ1F*$c%%~qNmOYcx$-%ua<)2EL1_FF&z9*M#vjL*n0*3|{MmI|V{ z+VDE?c4^66OG^vfy6EICM#Y^NClG#z>ZNUMZSUA=zzqC5^X#asf1p%h_#|q=vf5yW zKZ-}T^rj#~`^Z^jzqo13v~V%}W;>;+-mE&~D(auPmLSoi2XB`(G;rRfmN79f<`opU z6?l7kop^ZLr(ufJ+E#^zhJucOK{=Tw6i{4aqoYK!SohJIo13X(!{J`*KeN#v;69I$ z;c^8!E*C8H!)8ns_y6$%sHXFSJ(MPBH6r{JnWLRkY2~z2qfZnyVOMRi?Nu_U#wuPo z+WyOcAys82WCAl9&7A(XA-t#d-?tzmI@xx;QG>| znKP!yvaz)R#Ege$@`HUlQ-<=7Z0;DqaO%Kmr&{N^I@jaP3AIA^tE#te-vaz4>baRX zyA!zIMUtH+oJ!MUi~b`N3KJF)(JR$|j2mw86~!Jg-bA0MN$@oX|GhICaa2ZXiC*CT zjrGy84hoA1=ZebY%8&OH$pPXl z=#GJ!_zsA0yiYnw?qm&Sn2fx9H_+n%m$A4P>*>CNe9`3R&{|9XaU<+WR1R}wm(s&s z>)w*gYf?8ue5rf9XE@_WY?VmbZ5e&ph=(w)YS-#?{Fz4P|?atwDfc6<{C7C~H&TB2q0-7;vRT97m_t+Px4SR(KAD@%kDY z`KTXCkp1Fc1jV8h6I|PxsW;^S(TsqI4+`3Ct86jSmOu? zk=H;lET<~2H&jyU8~P*yLQeOqAs@OU`aUj@UKr)azJrh})vurh9tFU;agI3rjN^@j zQgk)IVWbGFVZ%g=69uU=xR-f0R_RZM#gvpAe5`gMk{*$?!}6~yxpH-tG&rs@aqKvR zA#m<;1ktS={=|SO3kwVAyzbNUV8ooy&4EyAd?l%xH;mDGLfoAjSDl{fQ9Oon~D`xO_rJ1R~sH4l(pL9LPGKHid~upGvFP9 zi;JJ7^gr3E>12IeG#Z0X5Q3Or!%0)Ou>Ht+$1| zse6l~`ZVf!DqU#UTPQ4)Z*O`6>AUw*3adb}l<3J5Yg^mJ*FJ+253#YaVBnY;8-K=S z3yS;?_J{Y;KsyGAiptrY3MXabh{+nREl(Kz{k8VjL}(ZdTYiH(Gr~-~h&6Xd3E#h$ z$MhpgXX_Gy8V6pNZ>i7!vOHsJk8^COZDR`8^qJs8*`8{V+h<8vf81w!>2-SR;#FJ-IC+K^5}Hi5tI6BQqZ>gr3`n}zoil7 zw|O0J@ufmPo0eZpObtDLM~f6>T=cEoK`e@`BB08l4`%xODM;3vh1J4`xm5pTxDE}l z$_e;k-y0d+21KUwjy%e#cGjVW#ThRZ0mSO1n%B(>fUMKe(^I#K>VB$5D$Qr3PuS)$ zRNwz+Ai;<}?`9o66yK6Ezdp}Ljdd#SIhrylq7-XDT7`PD<<=_DvtldSaD0nSbI&gW z^dUo}wi)g=#zv&M0&(ToHctTRvG*bL7pJB-hWzgy`&aifM13k78Vr;F0R6;^$L4cR z2VV#RIjT7pNy7Fyu|^;h=Gc1Cf${y4wp~F(D${h2_MsFdmdQ8Bs?+gU`l#vI;mWY% zASG^ubMr8Ja8%A-ENBXU)h&fZM+4Q9pUZ(~_7M&aIJ#6%N`XP*^b#kULn|?g*19GWa zW<0l+ZP9%E`~Za4&F=ztiQ*@Q&^nKe(IdV`12`YvlD;WgKD`9ucH|RQaKgh>H~GkB z8%;R$6ct~osSSaH&d8`yVky?@JB$>oH$a76?HS|7}m9x0w0c|<)2GG zJ{P=mcXtaD+tuLuZ2#*_Ds|+XnXBYw8e@ND4l_0hN5+zAAqc@w;sFiK>Ewz)Yj! zjV);mJVI}Z0Fi|S11^hCpFUMM^*aQ^hx+@Cs_g)SB@}eyZ)9&INZCFWg0vPiF3jX{ zyESb`3y|!t7r$KQ-%u%>oEeL~5dX$27H$}rj{z!vUYL$5PIS!K+-`PAh<{txzi;6@ zVhxF;1vxff%gV|kBOm6D|52?K0myv=VD!e<`zz&v$ADf6IXG}DpQ3n#>FiHjhmcHD zgA^#02>Vh`yiL5S>fi8U) zZLdwUiWGwswBX@N8vIf27SK0MraW}UzJDXu^)#7ie}?dt3>0U`JDC&G(HWfJ=c3?? z%FoLaJs#J3|Nec@MPX0_fM)hobfJQQS7%1f%@b2or&ou=_Gw}GZi19Rh$NKC5OT+? zQ3@_;O9jt$c*m>JxU9Xs9cZ|qSo4EkLRPj5NKk;veox2*I0{k(LLG7Vc-56U&9D72 ziCiSbP^uFf&SX1GRmW3xV*DF1uDyj0b~sQV$G?@?HxzF+6xbUAyTejbPLBWdDi+3D zE_0rKjJJ}xA>Lq1fCM*aqpYHWOn&z;yaVK6>&X$)9e60++}%N|>4*Kw?Z+JOCP2pQ0kjj(DhF1oNt}-yq^rP< zLPA1v>E8kp3KV!NNKrz8#spcVA?WD4V<1&~|fb^CN5x2>!uwaW1 z)Te>Dxw$=KWsRj2;uaMZonO3$uo(HAxw}ndYLJE!6dpo_q-$)8F4l@O)IyN1X2?p=p`OVB zVBE3%rMMV0@4-h--Vwl-3EZDx(E#-o6_aoMeKY+AB>k)Z0eT>u08ycImYa`_SQ$JC z8yg$&0NvdWtxMiAp#$ocapVm3=%ve10MD2A_%GxrJA6FqD-28sO$?NS@hcr>xWV26 zdsynn25Bo>TRmOf8sI_V<^8d;B65c;2JTDs08bU5HUTkcIiEZW6m=vX0_M1+2{#( z$2dn9QW5vRkE}R= z^^S$H|DeWkR#Qt0G5;YwH<6fxWD!V8V9ho9Y&<8P-C<5WNytBfamyJ-P4NES-uksn zKcHU~)XbPCE32x01x{Sxv>?(PM}z!Gtkh=%mL_#IwHQz7vVO}7HbCwHl@aJy6}No& zpK=-|H2&IoH8vL%6aX2nm;<^Z3-I*G&MfxBhnDmBz)NUUs=EagxrEeI(ycJ#-al?% z4XVJa896!e)J^E&*cQkXPO}z^4ot;(%Xwn1T;_ZL8u|G60Bcm?gbjfVz<|9Ld?iN; z>m&~Rj+z6}qo-F0+V=)_9zbl^CdXz4zp|{F0iX`JDQ$;`X&{hJv6TMmfJ-3vQFZW} zBSCBdx@of1z}?nspNq$nNm)@5+^0dkTYe7n|Goy~Cf4bkd+dbWr*lq6HvEN_fXhdm z_?ho=c(f|nx*OPOFhQyU6}9E%NKU;Ny5HKHR$2VpvN4J-<>f`-!JH`3+ncQgmVo=Z zC7x{|7~u2O3bkGk0oDzOX``duTwE?9W+Pw^4Zkysh%|y*sjnwHk)QxXax$BN8;IxF zZo;jaHy>@RPFR_lzkL1rsRgMe5Rn_wRs@OqZ>5AL1)hDq=DQfz?`Ts#V2 zN|1cin0ONEbQ5di>YwoGQ!}vW0e>+d!kj@91}dyT55pL6C8H>ufnTEKbiogF(M<~$ zprB=BfNUV^p%G2_F+c=dx%$Ae?CtGsVlvM@?$7s@l)I&zcC~?R>?{(7cw)Ai-I_LN z`ROh88>|LecJ};44JnrFM9ueUdm04ic^@l?2_1-aktp%16t;fwEzUrn2Hs9nLqjEK zeOnv2QE;qNkdal)?jS3G*3OFiIq^<-2d3PNL#;x!>gwvEV&PANSz16Y_4D-wz0_Cc zzMnrefHTeV$KEM$nF0s^LT{@4rXCG{Yhd ztYg5Rc_YY0JPyiuGzy-mq#e(kA8*xy5P!1q0tyq?vT?24Etb$0GI=*fl1k^mJ@(IV8Q_8GY}(yniR6wU0YOMu0HnNb8FH^l#03F zwe3pADS$C2C&19Owzk$dze~aPBl1Ki?j_@>S#KrLMmcgwDW2h(VyIFlr33$JnnIAZ zmp;$A(%Pd4haaWHIQA}iC7-pqrO6EV8?g+Mtz_dF04h|BIbn_2-SH{#=zec(q_8R2b!jN`_VT*8 zz5x;w10y3YF0N_7ELY&e$e-);DKiGWk!-z{c`|>eGE_Pe5zspL23 zJM7XG!C^aKHyxoA0asTohrYDx0z5JsYo+CV0XGk5cg94)c-=elRwfH#P&1!Bd**w# z9PZ4H$n5{Kxwl9C^l8BPpA^8zB?{oJH{kMUL10Ax$wyWOrd2jLQZKJo()&Be$#=?s zzqDmwxnrkgHQ5kts#eI41n*^(XA%^y^^o75TPB|vRRQ0Q`3d&2u_d8})4F z$}U>gNU{~?Ncw(l?gxHF^@*u+Ui8KlGg}&7c z_$pw3lZ^vUhTiT-FH~l?)5XI!sXkON?SQd{QzQ_CA(yhOmm+!8)=Q6RU2eIT^nVW0 zsem^$Wge>y7!u&9RNzyT<5hx=VAVVPGK9iDxPITaC^apbcTxv9k%guHQxu#2HwXgY zh4GmgAsrlay{(;{W8Y>_TtU|WOw346_vZsHLxA80i2x4l2AAb_9^2uVm>A0tI&6o$ zo;T4WS}c`08o;dS9*QDWkdu?>6hZ*AqRJSMsS58C4(h)`94Vv0f{CZZv6qcP+5vGgxMir$~dN z=~*hfQp;)#9lW#;$oNhXSi1Wa)>a*8i3t%zSUAx+JSOYW?lZRRw^~EZQ*I~J?`zQ! z4h3hwF>O4EGu)ByB3?OL*9G{x14Y~~kfVM-H@R8qKCW0wuI4i5x zZK61H!8B{wc`l4aH_EaiekJ^Sdw0UlO7HP{nJn|XHHX_%tZY1v>|4>qd7JCX_=bMX zTl7%Zqn0Ra4#BnY?V4{isn|%_M|+(sXuzCVHKc!`<}Q(_!qA%<$c-Q`nXvSX_+vK8 zT`TdO;Pz6j$>Lt0(sNww%0A|<;6Cn=0A*Jn;)~B>unbc=ysYP&3VCxOa5aPnrH#_z ze)YOdCcPqU*Sh0Y|KqBtJ# z`j!CIX8)0`mG$6o{}@?!;xl4a_5e-xv+;1&e|S{w{cdrHIb4OP(8#fop+Bkk9s|t~ zCZZl``5dt)YjQ4xJLRvx_eajN#-QIN08;})B!Lp`3=Q(DdSq9QK09#AQ+d>Ffzhsjj%Nh3JPK-3K7%trbYHz*IEFHE_C!c z4XNhDxsOlLs|~w@w4d#_wrg%jNqBVcX(wl+8L*VOrI?$xJXILtKgd8$KZa{kzBKbL zlX*Q;+YXGb8YQBY(CI(@TQeId*1r<_*4H#cwby{qn4L7>5P1| zihy9eE0H`a=ku_1io4@mTy8~`vY8@s`;uRGwuhVbDzqcyrrRbI|Kc2vYNmGW*z9)T zX8Bnc3DI&5uB1!*ywR_l-K}fR8v&^=qJ;CUMD{ZxU+5SJCKdGlGV%)-P8XGw0P$#V zcekZ_40sx2p1L>AJJtHxQD8E1kUrX-Z`6y=+uXF1ePKCI$>mEWlj)aka%moTT% zyMB>lX3mx%EF&=WfHk6xjZl%;VFAO0-vt=+WojzMt50as=!P%=>taKaXNgcu$Nln&@K%YF30;3a69!R%!R z(5%n=TR^K03O6`QhFspZ?eO%EM1Q4clv{S9>s;R08vEq0DlQ3i9oG2Qy%=wdHL%7Y zaSmfrnA%@A6Myf1NOMWn)lYX~6;w}XLMD83Yq{OyIidQZAIv4+l3r&@j;b+*m;#qcoWV)abD+eXnQ z9{b`guGAOiC;7r>3YrWsXA0@(ayi2h3dex2w;AEx0XD*_83$lb&2rfI0;Xhux2vkQ z7D&ZjX=x7_^UKRYyA=QqQ6R?wv&(80@Cksv%r7udT#6Y6gTdi(?&6}N+ozX6&0YXL z5Sj2-P#dQ#Hl-id{R49!;4l5 z+I*dPawMN*&V07gYG62fE^$?VxGfEZ{q_kmJIHe2yc!ZXej%ayohI}z)9SCx@t$oh zkFsB9Ae61@;dDF!ixP0szblz{KW`Fo2FH|ZU4E6wh zR98t~t=Q z&=XJLun;HPPRYoSAFIsGz-}~H`M000W7#{fUm9jv@ok8IWM1e%f;ySFT;b{j8=5_E zKNO!piM&0tCx_hqkw{qoy;bbes(V$WFVmGSs zU&c0Le)jAaa00O>`ah`f+SxZnrV=Y+EZv?=g;BT2@9w?8AkL8QH`P@7N*&O1?7hg1 z%M(lTOULY9K^Egfl*5m09^Gfw{#358{>rh9@4tRRq@;711+ZYD7p6B8S^j^NcW%#c zNTeL0*IODpH+u~&*Ht5(j~em6aGmy}82p+ki>TncAvR(I6`Jl9dwjgAv#mivo}R~h zLARH{K;^evzvfHkq^%?7fA$ZUwWBWnwr_Ch^e2{>{xIF8YFa@-diAlheiTC`H zd3eYEG$Qu;Af=T^3V1(2cRZxc)5hNDa9NEXx5*y&kVEG9=)4kX`>IW9&Fm)NU$j}@ zykj!nJg1zzip4v=S$)zq8!&nxxH^+l@tafc{U-hr$4N z!XhNZA~ciqf!T;HLWASJyICj3ip&GkG|(%P#Y)8MH@95dFY*Td&1%XreDd9~`Omh& zb=wYa(aIPUR!d!tm%z&%K|qMvE=ecUS$E}M1uK>WF*7g#o)-1>x_pW5S1`Br%FZrL zA}A0{JA%e$Y(tyK8pso`U)O=gzpPA6X98p>7+L{lczprNIcWa(Z{NOs|Ly^5pMY2@ z{=t51kUwzHv|R394tck@Uw$lV`yQ28g1pbuqacRJ%gN6CC7r@uM{}QUD*z7``hE35 z*FIiTR#2p+$%=xqdi6ph&p)%V|^re0*#X*jJ2%NQd|6A2RHn$rgb+yh-f1lZ z%xeP{1mrG{?GTc)4zV5F&{Vi&qu-HQX0JI66FMDe-8QVOCKVzIWidJXWXqSO?p2T5 zJTm5D=WaI=Fj8_o==@Hivos};K)0iz3|_F6wo8qJdxH1UPTwUnBN2EFTS2tES-iW( z#t0w2vpEovh87hU3%jn!(BRiy7_=_#onCea6;xKn<8#;hM7nlhXec`~0w!ekKNCi8 zroO4^!s4Pj%R58us*m_+7RZ742galmMuK1}4#-rzCYpa5_HYGT&h=W`78l+>Nq>q3 zBXt)&#;CXBsS(+}-MWoYW!hVqExZntFP?s z8&~v>Ck8gGa)~L|kQ*u~q!U1#V$Rpr9J;x6*s0ySmfVzBWOCMjgD=I~8-oAKWAQYH z#Pz|?#Vg&6?H@H^w?D-O8}6p*?8y-gBj+wdo~pn-v$4Islp(Tx0(_>`_EXOy0Rj7S zeqKyaP!JvaDX=4eAy(h!QYSqM;4@ZL-Pzk~9g!T-z?ApSm&=q?FsC#*gL(&!Jrfcl zgC(Y=3C|D$r^bJxQpHo%`vSHLZ?T3jY>`@h9w>U0hw2o4QdsX#jQSgim|RZ(zp_W_ zr^`)NDw<N0qGO)W!n=Q z;LGKyWCQJzO)S{D05cAFPlc_152q@kJ|G`=3sT|^ zor8f{u#?Wt65hKRWm|-;<8{#(C=b5XP%hx8W=NAO${XdPda4m~n^beuA9Pak&M300 zqvYSgd4x=0@G0_h?Qm|^)4$o@oEpy@C#&^v!pB|or*weQR_0zH&-l&fJMG`~^_O7k zOdtB*;|1BtbDaS`y``&vMG1R`@e$;{Ha?z!upNnEMz z+~}*-7@p+(p*4QM$p>T*g?CtpN?Gw-enjV&3vVYa1oNPD+H}Pq%gX~&a-wcfEM%mJ}j>;)-cWNXSmUXivmtKug-*a(neaDy^1XoZlQhMVpkQ6pVQj92z?5w z#(z|Ke*YhGDym%&r8_&(WnuNI_4W0Nii&`R&KNg9M@OH^n2(U-UOfnX%wxY%_tVCq z@v`pEy%gtf542Fs*H0f|ns7|1;l2*4y3vt%r)x*K= z$${MiWBH#F6OVe;1Gzal_cqZ%t0;c6A6sr%y-Ct~)^#`HKj%KIYT<&Y&_|WWOG15` z7mO(4KSG1?V~(C=!1+)7(qy7UVZgEEw#u1zvZ(xuRev;ItzT5;tG=g^ywMG(pEK3s zq|d_tN7Gk8MfH7c4~RNQ4IvHEp>#Jmgfs{!ASKPYI38@>#RNzuim!>E8Q;v3ifcVpv~G{Ut@9dA-a zT&+f!)OOeQ2KV@9+{8y!i@)p@eGw2IQ_GwdsC+Qj5t}&aM#Me&ex`~ef`Q$Y@Zc&I z(xuI9@X6f4`3~*Vc!$18Mbx(w!K+TI2=2#=S#wWP=7PK9s@4+HZ1svvJIt&&tTGf% z`FhIwmZH10$8Py*#VO=N!vQZud}5+DxMJw)zTi!{!U5U>&vzK*V^ibfJ~TC-ifnr$ za=xTj={s9e=Vl3?)JR6@Ik6K3Q2Prl3H#OSs1*t)YqDV>0Qsn>*v|0UJ2^umzmMe7 zGDTuK+6E_B(uZ({Sc>UA1qzT5+8{`V`!vm07p?H-t7OlO{2t_uoJzBW63a(L^xU6R z+j(NrY*}J;s|FQHbiO@!ouuab%65`iLn0wDad(+J=%`nX6vO}~=YLak1O82bZ_VEc z>)hs+4-UqrTiuKR-V|N}D1ZigOvn;AJ8p?fLK^27zd^+{LI4H;wNx zmZ-R8&Tvp$Ka=@5y$If$qFQxS0QZh-L44|6*QW4yS!6eHuLZZwLlw?e2#_{3XHdUI z$uYpr0ERPT9#1yi8iX9iE1+{*e@C!?at16rsayiOtzWU54S9cWMH2AeQ|bxeUQ@qG z%|A#;hB;Aw%|){L=V@|b$mzff|ko%M*r za*GGN`6)`c!E&*^2Uc3SSc%u~^zm_we!v|S!0Qu8v*hcl&yG2sC$C;SW3x=81(5dV z^0MUl;S#XvRD=W65DejJ3LpIAs>^H~M1E1=JR-lM&{L&%5OGTa{?nzAhY<7|aP{vR zf{ezRjmwkxoa!>&r33|;J^KwqEXudpee8hO%`(e{Zn`Rrzmr!>#7OJaULuE6eaAu9`(134Y?dc z3D@sfDY=?|2~IAhv+}yF9Fg%(o;_1QW^5nYuS?=#P6!%#sPpZp^1*_*?tym>H1i#3Cm?KPv0K5|9fe!jVU{X9g#~F%x`G7Aq)Z%&DJY0f5+@zNsZI~!bgFF3? z0^HO&l-WA57*&y7JX9(3SvXwpY=7ppRY`N`OJz-?pO|+?x`<4JMbN}V1nRGEGXPCM z#aPXX1M?gLf}r{76=?oIYcl`1#$T32!jYT(mN6 z)eoVu4(r%a?g+R;&PW>5dI$S+L~yddid(u{6-S~$e^q}+Wt4&HKLu>31F?eNqD6$t z69pK6%q5KgHrD4%Sn;Oh{P5q`3)i_F=RYm22=%LScx|7};+MXhk80F@8Gs!`Jy*&I zoEj!4->&<=P<^?sG^=tjzHoyDPkB#|;@@%BZA6 z>mJ41<8PIS^z_AMD4hi~q^p*RyfD5n4jFGLDY#N7p#++)11p?4Uky3UQX)X=)8T z+A_LFb5Lq>k|{f?*zq}RX^3|H{r0%zYcK=jO1(4&f<=HMz~p|@kiiM-X@x~tq{|>h zdkF87G{vOeNk8V(9#L~umlI#bz{Ti3(t(C|DS~R%pb{=GCqRIR186mXiodp{>`LSP z_rt(>=1}(VEYR6_wxa_pCG}a7mNIr>k{#0;j%r18;Lt%x(Q4QrpyEF=%3oxO=Wrq_GJNjN z5vQAG`ke4Hk}g#u$>@(^`LthGxJ%zjRw0r5x(2xc-o{C#`(9w40A3W}( zi7f`FnA5HJV%LbiTmN)?iiMI*#shYi3@{J~dL2EzOFpCUtPf*oRI4i&p)eiM4?=SD zj&V!RstBW>p;}s#oh@4lFR-QJ)MOI>d%?s3*cniv0g)aY3A{N-6NN;_SOo~tOG`_z z7w2gri4A^es^#nCKROMz3$Y6!LbG@2(JCeWzFAnxTWR}J>WV}qg z8D{SUUE`U%7YRikSm(fm;foVl@u8L}PbQzq zpy}p6C5XM970KEKy-!Vb^=^*e76lbmeiD~{6_dC)?9mqpkyWVQTF*9}oq4q1D2i%L zBhZF2e|I7or)F1P_VLu0nj}o=TDnSKv+Qu8fivowp^#`v9+A66wv90Fm!p+Ge*%|% zJmnMe-@8{;E?PwY+;r|!aiG9|K^Ai>426l|LLZMp;xNSn&8(kzI76if+4D-)aC%%= z!WEIe+G(Fr3nY;C7X+*sKKa8o8X9pQXhC-ij~4Ks5b+gX8a_9FDee0c``q9|oBy&9*l?SHz=)|A>)RQP@);`(e(A<|fCVgCQ>*Y0H zdn(h$T}7km3L;6JNjEn)Vbwt;0B-iBS$JNlz87&MrTRD;2s(klF(lAV zeN)l!a%jI^`22b(o%c$8r=@bNJ;+i=TL?u4TAvZkk9L{yQ?l!X~AmNATs z!5n@WV*xD!FD@1wU8b~32Ua9y5K{cei=p$4rM)=CHs9_qtyklNn08ceuF4htt3-X4 zqJHD?uKyP<5iu}nbMy#CK_?PR{rH{S*Gt&lC3x7YZv7x)w9KrA%g$6PUc*d;n z_#o!*1U0-H9jo`X^aEPLk$LSGw5N#CL}NKu8Eq3v2)w<6c+UNV1WPjsFV_Zr zJ@__^p3`Iq{%$jCb+V*{4mcMe}w`R|i9MO;3e zdMP!4%o>d~H8#R3GHN`UjED}rz#k-JNeR;r8}#5*;GxL;%DqQra?TIVUY9!R)*yhC z&T_0@hD0e&bD(HHgX)`o;>g6*uwQmymdW%3RU?PC_WMuBc*>2pMoTKr%z%zHw?NLU8 zujfV{8ywYaj5^0>u3f0eCMUY&SS>au%-@az(w8+b7=3vFp-B4TXsC6skozoXC}6dh z3M?SO!p;<)z5Uptc%VH2obWEo$u*fgY*?CyM?^r5ZQn;izLOa`)Ab+axyVp6-uA^T zoio}ow~L?ZpOC07+}Ha-dm`4+@~=l;T@%li8%w!3;&;3_WsI@F_(Ue$UalUI-pFb@ zU(R7>hUSTgd;5v}OWMF^t>_z}XjkU#d(N-*5PB*5&`4elZo4Ev{|0dHbBd&-q%;`P zfx32gNV;4?RXcQa&B4}I6sGEG=O(CfX}PCXpBJE$87&@)j*ENIzF=7HZ5z;B{d>z& z-s}nX(;2le#w+>AC7ijLBeRK>)Z1G=2hst4r@z*onQXT8&~x815|bE@esX?ov4`m! zZO>E37gSBzQcrAB(RrF2E;{`zjxha9BK{b3Jen&cB;*8k9x!nIGV1|z{Cly~qA+C{ zTAhL(C?=X&YZ{p}0)~G;mDtND3Npd_^|G80Z3Ei=*Kh4k7vWgq@!@^`DzZb%B@$N$NDD*ndaD%Dd zXhLw@xoiKe&*On7Q%x2m1COrcsnDwBX|jzV3mryq`>HM{v8RVSAen<o2f=kgtX`S?m zNp0&MO~%@1{Ft4zrmAlVsntiJ&dsi4+W3;XPHSFZESF+?;=nX>+bAF2A0OVIXjA|Q zz3|d%Ms+fS{|czOsXn<#RQaDcY**dQiYrGr0gB zUpr65THJ-z{@evNIs=iTXsNCkygn{hC9U@{Le}yX$qo68yxZY7BQs?K0|R0FTxs6D z^3SxO^3Btbd|ftyH81NM^gbS#QR7FIhbd{~KfZPSIo)r6aUc-1Z?CSQ9@}Kh-E%cM z)RrM_b7?E-VeA6^)GKbTETXs~O*RtSkjM!(65(fnm_Qe}Iny*ot0W~HuEH_lxTH18 z!}A&K(#E+>GY9ZoPzx0!A_U0#NA2GA?|MJ3r@TMTHM#x?Nk1=<|B+49s`>y^lXS5S ze{g)`mnN++oq8kzJIRgC&-XeVNFu4^M?Zi`7_FEG_n=5&w>RanvHLz z&vUraLlT&ehmdhmr(c?$J10j}6s=9@`+60nETcoRF1oWxvYxvl$Zxc*J7R|YbL(4- zc4uLI?e3>4RhXb3aCM#7ZjX@=2U#N~*fg<`fRrD1CX;yZ^#>Tw-(tqxorXT!RWfKjruC zfxp++J&mLRYdMv)_#8&wT^z{B5yHmKxpV#WDGwiuje`xFdG|B*$~QNj@JSsy6`5_% znFO1(T>o%k`D2HlkyH@IG2}(IJbe}^orNu?s_KjnJ%!-z7-{w@93Wv_|nHYgOI(V$w?HU0PNWivfJaUpSw*XG2>L1)Zq~ z_dZMS{>vp-=#TDHWwgo&v&=}buM!J?oOpVb>QJ5S&>tKuMvO6XZ9Z;jXh^{ffsAjfDG4Dq~(ly6Y>ne{te zkXA`5f1wOTCp=`c%-1xe0+-vZjScEsw=@sb-fY7C9RD%WVw-SZ_X;C!Aw$vW zW&K~?C`I!w;xb0R#1x9yB<@u}=A@0#3F492X(pM`KfkPMK=2FZ-*$GlQON$IG@<|f zOhQfNI>#w5@IlHc zng0{a2@48-|Mm^kBYkND^YioR{MLX~jgOB1J<@8{>%>H}Q*|zOkP7_O9+@~J z+R(dqs(s3m4z~+-@hrf(%gFqz>vspm54L9R{PYvgd4W#tbg;T;`pK-xMv4#q!oZ^D z;N+YEIR^ZCc}0kbUe3T^3S>y=ystRiAHTwZ`O@lVmD1~15Jft_3GQ#LY0};g0 z*eqDYsz@bLG2~Q$EF0msN=9k~0y;U6VF2{1yvg7A5J_)ben7<7R^O8Fg>_jgU+-|* zbIb_5XZ$xRFMZ5z2Qe^NvqKl#knPw~gZo)tfa1)R)h+O(as_y*0iG%n~Rj7wMzQz=?7{T(! zAe@@Y_D&9gL*Pp7T$zX0-EjBVlA`jtiiN`+;+2m>J1wqem1!W$z9@W;PT(rluLijt zJd=ISoGd6JtR=aIv=5J~$gQcTDZ~(9oeir7hRRS=3wYw_a*)6gRUoPLV;-C3s^$N2 z0epyV5JyMQRJJkErnPz5bg2s}F&Z0;DE=`Ty*7<6Vb-@;=w6oN+=(riTqUx>Fa7raa_+Tm?ZDOJLRdc<93Lznp|GQBv=MIOe^! zkE;xI6}*;+bRCy}dp8{yRwXn6ix{?8yCCl%I7M>z%R}n@8qxKgpR}$5l-Z6WtaL^?i{Tf&5et)n@xRJG&P^73PWY2uW@m6+e^BK*-1k<-`)HC#dq!$}9D4A)T&^1slrKL&cyZeDJ3qVY@h5*j8$L?@w~@P5?nW9Moa4hf zfqw4E(^^}QdXW4!`3@;Qj`{>RAxXflLL0Ywe)7kp!Oha`QxVktU_cGiFX+m6&?O%} z?13A&?IPZ*`tLHZ3$i7TgxO^ji3+@Mn){9a+a+(&Q6ea@r|jkJG0AydPSTN`d0L?5aS^*gz46Q&LqLnOM$Kon)PKE-(_n|5$J#S#ETn89a4(|1DEr{}=nv&_63n5zps@X#i)q zOb;x8_k1fr)}RR0YWA1^tuNDijeakb+dmHyF4C=YTnBK~&W@+r7S;S>O+?PmoX>Z$ z=gJ4K8A}J|<#(GTBqn5MFYNfh*$g(;AULNS*tb@2nP_{Q-lqF{Yn?&@=GT_q3 zkPK~H7N|Lry>B!yaFi!XjhlTpCu=SpFX1`AN6@@1x;Lt>*;xdqaAntWFX(* zMfcG=zen$;T2iC*9)6FUo;K{OQXO@0bj0gp7mYNy7J^c!9plOSmLiD%-#{x*JiDxtrDrjL_W+zx1 zpBG#NDAoRZQrdZNmEV-D!{G9sdq3_U)eK#bQq zQWbhY1@gwY$t*BE`$>9Q5uHKq27{T}sM6ZQ{L_SP;ZI{;$Y_~Hyel#%pT2cg@*rFW zLs2SjrmJL{Wd?N_=VpC2Ff0t*PLzOj6Nr^!}Efd&XQGcD~9=%mAd zr*ScxigF3(WMmwJ3nwY=HSewIH@AsNUWUGQ0GI^kqM$}uu1m-pWtt*%w>Ua2`1smQ z#khPlI+kkOS?u3Quf5RnN$dqRB1_#G@LjMo&}#JR^e4X6i&rIjdtoHCqB5^BcuZ0| zyZho0-!Fug4Ab1-)aQ8aAHli9kW4OjG;aza#fz{OS7{-d<&sn5x3)U@UQs^&A4oov zb5Y$%#s{$KCMju=@68*XH49!%e?IOGf+3b(8jA3_?$>zlc4lfzs{0uI-U!x{K=_!`o z`&}VH0gglnIsvy2IicoDw#lWqP;~WP9IX-ToM6b+y_A=vuAu>Zw;WM-78DYaUOs~B zWv{nhLO=SxkW(Gi%MC_CRV}&6A%&A`3_b^$bHZC|KITCzks;mrB@9KD8uyAfO7i!z zJ(^~eC#JO&^AeI$K8qOp1Y<8;&CE)2e%Fbh3!%fRJJ8s2-uJ#HdlDN%7*hLvt@ zZ!GB>skIwD>XT&5uYS$szGRKpgzPUJyq8ppZxoaL_W?=`8~B8Uy`ido=uh7vipyTXUE(1>{?|NYT6&4u%f8gb#W zbo%MgPh@msJpVNdrFUg}Td)VH8xrcuP@sxLqJni_v zyge;^j+*Lruj`{Ck!i7%R^yYkoLTN^efMj#4P z4NN5H3zK5Zp5@y6-F2_b*G4uuDwqODW?C#R=Q8Chpym{InjRk>PWT5xwe0u+fq6OJ|a)r7duhALXCH{VJd3jLFgPwji@MQB&A7$ubh8|n5 zm7Sd(__=nSEMO1qoc^2@05CW0ZM z2fPd(vtTT>DP22pzsF1&Lt=b z8@3Mjy~+|j8TEi7TTpkB!QoE=F*+pNGiOe#Jqrip7X4|lp)CDh1)Tpx=D0Y`oxTXl zO-#Ik0MFp9&CN4Nk+~Tmr}fddQ-VRo{wJHNXq&Z)*NsAN#gqC0etX75$rNY+@mTweCULyIpwH(9*tC*SelxB`*KD^0VG39r=mp z^{^s%F_RNVt6XFX{Em6~IaKram%$w5wWa;9dV%VDm9mYV)ptlS@L!k%Z9K5`0^|+a z&3=)YgP2-E&|ZOrn~{-mU|<0Mg)B0`sL8GIqb=ele%e*p4_>7fQA@SOV?is@V1c>T zI6E_QHfdiD%#IB(tGzsRjFtYb$&xF%%5HBU*wOFl-X4ZXqyHGiBA&Wd7SJVPT#Q|r z2}jPUT6jvlC-i_Q>d*$3p-}BYExbYx1CPo$O6nWRUtnNcWM`E@bPpkq% zk!`rZ4u)(*EmySKC=7)uXlc918EqwOGN~rH=b0bKE6=j6(3X!i!2lGL&HD!j#lD=8 zonJnSy#(%<^kJ|x8yDC4^r{qVKHn_`4UHktHh@8N;9mZ%^deE`J31U#4o0#_7CA9| z2yqal1_aB)O2m-MIxOnPMPTVM&YUlD%Py_v!-TifM&2J9xu@r68nur0Y!&3JZN3SZQ5NQGlul1i(=yX8P5k-J> z2Sgi}cE+1tu;`jEZjbOpgM&fy-`+d$r430QWcA9xvYodPt9DuL&VZ2x&|QxHVG>n(>Z? zr-zvW`78rWr_wpNQsQ!Qb4?5lIqW~f2LtltX<*Qe2kH`cUl3NkK=hKu3y-`>PXUbGPEzdIf7aJyLWen5$`nnX>jgOD1saux^P_s zgQy*cE2*aBP}zYVJ9wJ$deeJ0M-#HpbH&NaK^A9ZJ zbFq1Gj#=krQhl5egrp-w7fG!$; zmBsILVIIxT(n=cL_iR;pn$0N-9DgonCDMV0=?b@3UWC4LV9F?3URklSwl+wCnaxck zmejw>xaR#I2GNx|+-eDC8^oe*d=9dLG0>BVd(7mCddw_*^LVmOH|zUu<3O%W0jFs* z;I7SrlY|$F;G>;F5%3Moh6|?BEGLI4`}i6h;u<4IKmJ!1LuCw1I_UO6+F@ZK*QhzT zw*HtPmF{2P-Hjw-=A_4}Jj??F?;r$#_cMz710h{LKX~G#Gh5;ThdyeG$XdvUzj$4j z!|4(U2Y(fCrnqX5U8LvF;bFNO2(FuiH$oxh4G{2FpA^Lg(Q{_m`3u$wAwNw%r-5BkYBA`0C$w9MrYZ&)nxzI(vjgz~!pTG9CKvoi71^PP~Y1w-T@MdI_WDvr@I zwknQ3zQX#1XVeee^Xu`UuLZIhY@EU(B5A*C*qlU3d#6j@SzB4bdHlhutB!PAMg@JqY*;Y*rWDp?D>d6ZksGPN(i&tVKnnO_J*t``hd< zhOt@3^C{u6vL%U~MHV*`EGfr7Sem>RR~~monn4h}px%S#3n)Z(uX7og z3rza2A>avB9o^X4Qis0mjkOR>qK>=lVoJwIy++D6Gore=WH&|9q2BrsOV_TAmy{G` z6&vu$Mf=q{o}(D3O8@Teimt**3Bv&3L+BpqeG&W?f>IWI4Y51-)1xm55P552-}x24 zUn%)}ccn~amL@n9^UvJ_?(tu|;&^1v*QV9 zC65iq4A)=VWsl*bS4y0!DW%Vg)|0xG=%MhgXgxT+!U*}zcgz_3%uDj}#PEVLZLeZ@9d_9d+oJOinI~A>8f)$nF870%jv>Q(?&|rFRnw z^n)Tx=z{*y&NYwTktNVg06iU4nZUW|qh>Gvy0_&bW;xpQu;t48GlhhEC)IvCDH#Ml zbX^OD+S|=DS@K<-!_tB*jpoB83BUY=&A!Z-X7N67%&*6U9RuwB~_?Nh0 zYBS|FE1aR^xV*Mk)$kybI$p8@!S!~Ukk%E`oXxiTP>f8pXZ-`(lr}h zs#N^x=4zhKXVCost-M38^Y9_qFYJLWKg1xw?O_{vI007UfF(eH(;Rwu%g7TRWbu@y?q)jLmvuQ~?(1hQy~f~}apec8ow zxGCtNjvjRXJ2)@QxM|HXu@HKy9jf6OPkHM-Tx^gS$CHwe93%b}W@q7TS^n|or;NBf z_=qApUt^P5H5EK!E+F}Hh5m!r<|E}b5P~HQq?tXds8~@jlFWiw3%Ay}aU`@=IE%e-*AVY z*tGwuVnDtq&E&|vCp+15f#lzRwg&~!cVVEOm(c&M{`ywg&6(JdgE8!CBH=uO@QPGj z%p>Y%{`>M>ap5J>_iafCOkA799qzVpM3OB2hX%q?_Lkb71SfKD{aD=vIuF1-p)J(m zmaD9Y|BQuAPo&l#-kq6F%u6M@C1(5lVTPlUA8w<;;UlZY17i`$ET)zw+y|#<18zuN0w9GEt&?|ysUi2hI(`2l~MELLwuYRe1Vk0n#97NhdweGU0d$K;1yNMi9&*7Zb9|CAy$ zkT^lN40SqG@!C}il?Wws%XV@wG=bd&P7JdJKJg(jrS)(hap5?ej1M>kQw)svb+M3) z{h?`DxG@UVh{v8s8(oG^!#Y2Ou=Oj{2@+{sGu+$B!!8?D37O7der#)8V9o6La-vYl zYx|xp)l~$2L17^?sB<6}OgP{X4Cu5KmmEkC|Eo&HJa1nvai0Jxa$H47ax(^iYHwW=5-&1-H5>ik{&8Z7{C*~k2D~_h%i-0KSYD|Y6m8QM@*EemJqFH zxS^-89=Yvzc1p$Fb-rzWOy)dxzQ);};DI1d$3mb8Z!slnPZ7|48!r){TNt;vxBZg< zgYM`Llkv5{_e9o^egMNmKzQzNmh3{o+66I`6R>5#q!D)E=Ela1c$LX?IFx}EzUd+Y zo`i6LF~Ha?wtIsUv-eO4@pW`m+sNpBQp{osgVNWY+j(*ZO;01duomTRJu)_P?hozp znCG4@x@dQf79LE)3htce&wQiO&5{}OmHN+3ivHDsgXkzd0isIBK&#C86AJ zY)2nE;uLv4@}&}b->$=8dz&zPZNg!_Fcax^hN7?RDb}q!wj#cSj~|!M{qYvd@~jao zBFx;r-lcF4LV-?0O7vU|f2&6j#U^Gz|^?mt$z~yP zzGCnsu&rEu;u*`G&S*+-)`dlk4p|s#X&%Axyt-X}T@{NCi+X)A2UjN}%1G=t?Q(Zx znmPvJrtfyZyIlPaP7&WX@M%nh3O5VY=u}p&p5A@?rWY{C*^KTPZzEbQb zuDn20oD$Q8Xo+GP4LSLL;La1qtyeDyyO`*mHf&!d z+2_68bSWwt8^F&&OwHXAd|boH;0Tf?~)!B^-99CoPf*j2$IsciF+{ zEOME%G9ifJZ+YhrA=Hp5Mz~7T910C^GkgsqKHIM-B_xIb)R#D%4+alG6Ieikn|ivs z-Y_?Wb{ky728Sm{LO%>CU_b1T_*%hsy`@6Irv!%{6!u>X>%kOY(AVQFGEIJbg)<9KzqlBOC4B zAwtKokq3eaqcMP+!8!AE*6&Z@@tfI5hndFj3oh{I{v+>#q`(dHTbVgI5MsKqxtSeR zQ-~8qZ*>KsUOc+sQi94_BsCREeTwR0BW#N(rb1QlV7HL{bMjlxYF8SrGNb$BzKp9d z@8<`<5Nfqi#B)6DcNt0f@!-4Ajy;TJJlwG5CW-)e4-lrGp9i89VMW0F9WY@Jqqw&o z-#^Ba+r(kFg%H_w+m>9ymui8(lAyioGeIe1GxJ#yADBk#{zNdHsI30{d3nh&sq3v| zVSXHaEAVgu08wyVJQedA8XA)J_@&821ZvrjYxXLPq!CrHY3sN6H~8MU?Zp1`iEZt3 z67T?Liexdv;Hyften?Hpd9mE&PZ$22aC_)eCxZG<=*0ojf8Bd=1H~G^z3Y8ZOo2@~ z4E!i)#s&`ko%=u=)n$#No(MEFH8ser1jrM52QXU$p(wanKx7sKV-Vq@`UT`{TwJPbY z>SXd~fuYGE?F(QnTvo;v60fW~KvVr)Fb$>Z^0A=nbmvCP|8W6ge`vRHzwv)rCj`|pB0e`aXy!l@;t`UQ zJ$D}_rEm~gUO@o;6hihO7vQofiah%Ck6|I}3i>IznJXhPmKTNkshp5cQf!NCi8|lk zHhskO(~{hKS6IwT%&@IFNF(%$Z2#kS**+@jm(|~qNTR7~=zRd0ax!#ZCnuHJIXO5= z-@biR=VZi01k*cON=h*Kbw6q3Fthlp=+#abjh#Lqv(|_^uBpbTlb=D8Q+Yk3x0QIX zu(T4oP&|h;*Cnd2o&gZ~A{%@qpg8~)cf`({K{V~;z4-6Ar?>YrId~Ns95vVaB&k7h z3eJMbRrja0T<9z2vlu(b(c#P)-d92BV;RkBMwF-(Z7w1a6K|y3Bf1(*u(!W#VSV*% z>5?aCOTkhNZ?J{Rdc1!>`afK~y>GJWd>LO7x?u_O{3|DMUnc~7YMk_c*KVdOO^I$%O z9w?GoWpXeZ=UQ;uV|py$Y33-n{~;r;B7pu|xqNqnWA0&{&#~DKTc#cdONfhDw%uvz zBI#Y^GX&NuCQ263e@;KXJ0J=|;3$+`>chuL_0*}sgYBc*SB<%?QwXDY`_$2$efD~0 zsN)!umY~OtHxMx9(rNr{SO2Z?+LXFr(&PgGILBa=mbZqVG1sx4BP5}QiR%1Z7-4(G z9RpdvBK`AMU@R6lLx|&h2W8t-1HDD zKcVI5)9SU_`8qbH3*IsRLm_rUBo18Kc&}WeQ?puXU>n3XjW#u#q~TRk9UIGB z-8cR?-oB~87R4__Rk3iok~1sCV^jmF^Du&x`0oY6I^tVg6w0=6Zt3f%@BPaH&l(yU zNd8gIbbp#1^Rh@@E@iAIEv8JIhC+QN0RvB?`?gf(>Y|2&T-}(gJQt>np-eHstV1_< z);Q6Cy{q9N#_toFuKL%n8Tj}|zklaMAoH@^At#U;J30haI}l@LoDj?jbKna^ZI4sqdQE0=v$Oy zWJz<2mU=tpD7=W!iqJ|akt&*Z)iusc(=_wQ%HLmtkTBpzAmSkNLZS z=bvOQN{bSzOICJDQxtVEom6ZDFj)Cj2SJS8T8>LEuIMCX)E9Wqv>xJ8jQrV_nMs6GO!IlTv}q}u6`ni)6&wR15js3ovmp=q#^_}Ldvk|Wm{L~X41|BG4r`V_{hCDT@5qs zU*;QqDxVzl{4kFPjF`!Bi+nk6bowW1GNE0V=oZwe57_ShnR=+m{O$WhgK2x$LSEk0 z*S517OhgSu9yigy7GB%}VcO+VEV9*YaYy&CN*{gM+1Y_m*I!L@XIr1`@6}zGc_yjR zo>Opl@v87^m-R_z%>=(1@4A|6AGxHmThnnjb7`*8-nv3tS9=YMPDkAi5?R{HNfvnXqqI?Sno+W%F2w$nLzH5|J=z58@VF2Z zWIemB^rwR+a&At#duV>L!umO(Uk)aHh#h6&CFiDWokHL0OqbR;=0}prJ`ID2beQjR zF23y>aFTrxQMpZT?Jwk(pJtw=z6xpH^{}VHILaQ}&#=c{LWKd=6z~!fdT4AM7|OB@ zv{#9X(_NTvaC}n?Kp_gF`GvQix?_>d514cW*r{9IJ3F^nEwT6?;NLoKxpjVui?w=-Ksgh zE=X7~fqIX>3*>+h z3T$nC_3Clu4??i`i|b~T#13wIWrwA0nEp;;1aj@ripRC2EXD7jsonxc!p%Dm4cD_F z?(}1EG3%W>DwIW>GG%WH_HH0|7CPI6*XT)fA9qIH^qzLT=k0w^JtXB9y0Ho(8HnC; zZi2)n4zI-yY=nylbw-gqkZT`G@bbEXbR0G=YA#rzarn&X!HGkw;sM8dpc>Knp0;=myjYwa9Fneo{Sd|*hPutg)$)VJ^7n0S zZs$C9D$~CB5LS=RG>>FB5QzM-`q>1fR}Xm-a#eqFEC(~uZWc*lUq#4(kvc2|n~W7u zL2;|tmG#5>0*MTa-sb!v`W);-yqabJAqHlgn_E>=)6|~>*4mF?^B9Il1xmHTmeyqb ztX^Q4fExn_CxiDk*sfov_4%~m0=+$i2Xb(8bHl2q#s{VW*to#%48oDE$(nUYD}H1A zh9M>)-Oy-k)QGuHoh`M`GeF$R$|~?@3On7K`$|2auYT*;`N3sqIOnakkcneyD2|A4 zg6yv>BMnB@ce4dbl#v7g(9XgH23#VXKkjtZ2yJVDXk+dkOB7^Ax^~legZ(jA70!vh zrR!}f1UUr-BorlJA9}2UoxxkLJ12C{lY;6%|=is2GqH4cJUVRwwbx?%+FM~VnO&2qfx%b@0oE};O>%rxT?zSWyKNCZ3HNzIzdqe-C)@X;b_KQ3ttl-6eE_FmT!zZ@pgc- zKfUP{v`Cy=pAkcdhLG%6eanpyTd?A58Y!;|ComK%Z*^VsAswX%G}#$@`Xba)Fn@y+ zfOL{V^8TW|fwKD`#VUZYmv|XxpMcyS`{QkUX)&z1Q_c`+rgR}Gyr4bz9johZ|4w`U zX7icd9|iO_DS^sXW#FpDZP;H})r)uGzzY1Ca1WH6+n`yTnfJt`$3m1Tk%Qer?-8!> z-}<$_*D(_a84+sZ7XK%3|KF0iWyAS1^JF#q*2Q6WUtjr;XHlrv>y1OJ_F&1HoLCx3 z^~`_RM%!7eGl2O?i>gD6%;;SRl@%#s5ffvjzk)W5#~(^YTDQ>K{v5q_=nZOhN>f zt^h zIeKuz2hAVeN=*EO)n)hWLO9NT{ggWQU90m=dvH4zn{wQXKpp*GoiE}^u!cujA zqUsuzSna<&q()p-)of?afdm@|2Sj#124j!9mi_lvH)M1D5(gyVY>@glZVn}%=}Eb7 zg5F^7H3S%sfkK)lul)={v0T2og$4 z*SF{QUmvdJy36ambLO1)yzk!6equRXdW$Y@nG5?NOgZ0X;yt6&ufNY0?nVWDc3vL; zN|qHw7!&NYEY(Id_w6Fai_$=^)CXpg`jDTjfvk9zb2$OBETBC1d8vkc54Wta@Zy&z z#v}r6cF=u+k6J0xNCNyM*{!}Xcqwpkae;v7!u@zl$?rs*ugMn5GAbj9jknPa9Puml)b72rjD;Mz$JU1d{8wMu**7yRV zl3#?ue{-y2JP2&AFoox?jSC?q%4OJ8!!xq>x@VCr*8)=AjHffo3CCktjJCt0aao>^+}1rt)q3(Vou+a&iU3u#0O*mTGz z#h@^I|72}2x*8;(($?q&oytQ7$gPJ*RFWN8;(+c9L)bbvx&j5o-PmPi16j^4v;o=G z!_yO34`z+tPjm0kF2P+TKrFAWe(voBM_-a%Gz(+RPnnjWuQ0Q=df3Arc@uaPpmkjO z+e#@5oI8OI^ zp)CYmXHR0R=Z2tqGd{dXE^7~okYsbKwtkd*RM)2LjYOKU(Yhk-H639 zN1-m+oWT`$m6tx|aOzGs`N3oj+?%BLt7@54xvt$(poeT`n7Q+A_p}pt(Gv#aNAtc4 zuA$xeVy(fajAU2mKq@rU(F6GNJpGU)S+~Jkk&iWkgObO={y2Yqjr0L(`#!1hvO98G z|3!NGAvno=tf{#%E8ao@Bd<$C+HLej@83^=+8-W+5|dPa*y5iDHi~@UMeqGDbealE zYXe>qtU>i3pE3-xwp4Bv^x-j(btgat<1|5-;EQDs=Z8Lgq`U6b)3du zS=sH@*?5HwPI!MjF^FyAq7z_%(3|dV)qe;3m7iAmB)r}%7uO2!lI4Fl6iU<85W1SI z8(JboW_8DyCX&#kV3zN_(XPQfmVlQ>Fuh7Yv`3syUS?E;4t#D1TrsHY7 z@9tyZ00zg)nvcN*3`(XCjnC-rU@EO*Ae;rrYmrRLIT;z&F^@9Bg})381mvh*wfXb6 zW~Q{POb#@m(8cHr>X$b@ZI}X8XI!Tw5kH~nln_7J%dPKDqG9abeZ9=VBKz6AnOV;+ zI-A(o*_)`D^{G)MC2*;a1|42_Snd7HzDROMUmP~xLAmo2D0gryVO7$=3|4pz;66!* z2Ig*hO9Q3q*DryE@J!lVM+Aa?0TeG09&gEs!RQwDLLUQ5HCtaLFJbr%vzG{>gH4(-f$yu$>DTARFI+J=4GvpZG9m5PB@rd~ zen(U!$xa=Y_ia0oB%ajyyFI~n#0h~xx=1Q|d%fN|&MRCcmOE$z;NNT7=lA#b2D!d> z&A{7+e#5Z4s|y%EV%nyq)17@S&(grYuo0fEZkcs9vs|D*1eXEW0@f^`0)%G_lwer4 z7G+*Afdz~S68Sdv&sXoZ)CZpWzN6ze4&N*f1Ma=<4W&(|%>iBnn@#^JKi)~oWZ;#W zJ`n}ljLk8z*4up-<0M-gHhL$0EB7;s10UP3NJUZM^Mw%V6ESQE=GyzLH95J%f-|jl ztn)wIhJFb9Cwn@+;L&qQtTFgJgK-k9db{+FDnx)$VmpAqp!4D^jUNYw(jOq_gP#dN z0Bxx-AOIK4rs`^m`Mn>6l$~)`{sY(ppiy)as_mKg*Dg&ZB;)P!VudOuowkn*qT-hn z+`6nsCwaUHV^pmZXBC9HH1F(NHhhO(gX5PyG0v122bTCGmd?z%fQ}Dxq;9kv{Gxs1 z2tL3&J3EjTL$ewteGSAqi>{wKJAeKD4MCAsCfA%4YUf<*;Qm9plp=h%2D{qmCfU1* zCLYY2*()+f5pjDyogp{ZJ^Qk7@^SV%0_;$oqIdf-PtJ+pqgoE zH}Ba%iB4R;#2u;BUpg~k9osJ+E6|rz+*9fJaja(&i{c=}`{k!q0JiA#HXK$MZX_jU zyz#c9gt-B5MK{Ss}EH^!noI&B@fxTc@bL04gT&M90UV?id{5eA8TKUO68hZr2s#qY7`beiZ0~K zD0oDE7KZ!B&(Vdvg?ZP^w%E8d@6g53ictQ#hwRsZlM6T6eDL6RQCTzNoy?L-0kDCA za>lR185ma3Bs(dHFtU1i?2LXK|xHX}cUq02Nc$dipNwZ5eX`h18ZyYnI)&#|W`fjz0# zjOU+JYSKk!=29?LhClh4*8r2OS(jh%}hUYV@3Ax3ZR zN>0;XVIUbi!*C1cK^?gcM*|q)P`Z8Uz@+5EHZ)0V9~HnwM-tz?Q@SUC-^TH6YAOKq z_)yq>o8>m2 z#J{X4RH9#UF2d}9H!5~B=_|a9FJ4fst*vcLu5-~VM$%vE4(f-s@m!MDLymp{S~RF@ zfZ6QH5HnF)EX#xdM>E()O;|odT%NIUEg@3{eh92e!BkDmb>w9dBs=TxrM&PBMLr+} zWfVTn=*Z1?Ci?Gerr5SSD3Iz3FaEdHrZH4eh`GA=^|-c#{Y(6^i8LzJl&tp;f8M>rtu_;cR}x1| zTAtA-*?n~qQ|WMp6A_Fk$m*~_$Xi`IICIX$7?U|2H~fluIpw$4$-`xMH)msc8P1cW zgH{?+r#2E+Dk>`UJh?P*OJQ07V(;sx+BXFFOJNwCzy*nS>Pa|I9lCc6h7inZw!As? z@&U-HuBsCKUW6)U^Ue${ECd`r*W$Tloz*8^`QZu`tepv@D(Q(U8yQ6?@*M}HeVCJz z3(>d1n^dkndAUWwQ9^*9VrTkt$hDf3`yyc%ycRB3o5SRq{6rLY9900^G&bE1uil)fH5pBa5zKBX7n#D(8gnl0V&wNrl*MdNl|rSRIzS)BHaV*;p|GGw1t-{@ zUuo`GkAITYt$&mdhy&K3EoajG)8F^y&c3JKK5g6h6}b4?=X@-(1h)$F7$WOU%_F)E|$^+bT}iUl%Id&I^QUN z`K&LoHdYq2-OD4c4SN}sS9$<~K`iOaMowDVLk9;psVo2w;E)5-ql69}Nsu>ng|0+s ze&@zM>?R<(oeR2d?DFank0av`V`_b*I@11+y}YkemCu{-@Uzu@FNf$4K{n`ck?J7L zEs7b2&v9=VdZXStd#>J8PGLvP9uCZUzqtC=Db?S3C&9(GE7(-BbLx3VZzs?LFy*nS z!l37^0@o-A^vex=#Q#td*8eKdmVg$7!vO#&#b#%JdAs4Qn;}LMnvD8k9Z$LsjMy7}@5mpq7@AfkuAn>I(N|4_yr7yI1Uc5iuD< z?KvTT4Mw8D2rLoh@u`VxCp93poXfa_cbFaT& z-@2ZJU&Mg%KcUAQ-RpyBUZ&c1R7 zHFQps>HfPjUwEESa4kOk&a0+<&^et4$(BPy`Zh8dW?yY z{pBAdZzj4chObc^AmcS-INs#=wx9s+X1FgcC}3}vX`x&GKNsNUGSm@$eRTgdKW;Oj z6wid5_jiRy;M<^pRApqc$p{+y7oYP=?i_7*>{auJFX&{S;u8(+*&qG8f4$CKX0uWe z2w3hwCzJt!n~ZsvRph$~B>EGWfA=j8iT!PhxJXFxY06ZwU(3f@Oh|YxtI2G1p2kQ8 z<#Te7-W@F{@xj-=(Qk|=yK$5P(W@O>8PA+mpzHN>%xzyg?3*kN4_vl?y(zri5KufY zKnDG29JE5jRqoH9~_N}sk9*+pcY^Ou=E>rI;D7vY)h6~cd7h}plOBhc`1O{uf`t7=W7>iHYp${0~tI=-h0=3R|}QLf73PCRaQK0Z(Pq5YP?$<6;*Wl&dGcTR_&9ZMANQLl_h4Y$1BBS)eL zRo3{pV@z&KVCzY~P5JAzzv;b7uklD*djO7F&WAykhy0nKt1-dC?tfS#La)Mz!DH2M z&)@hVMw>cuT2V$ZwY+)s?bDIG*1ZpN68{a26`R1dQPzhI(rUbS;kb+;>>AJd&x@l} z|2p!4)|#~CMMj7P%T3mmaM#OgW;GLo*;Lm}(eBCS8$qv+bVuTND3Z??;+<*j9?0&D zho1*Dsu~Pfgl^ootQ7vDQbrlW$DT|yplDJz^QYOoP?s_su&deqW2lV{O-%UuD3%Ap zHu{o09^W{>3sG|PZ-*ZRU201vJ!LZUFP_bux^?V%t-Uh&4kYNny5WWxG=D@RL5T{N;QIb%M&lIS|G-A^-h%AU>=MU~_jRTX(;4+{yl##ya*;~uKSKTk`Q z_}*SyH*k;&Y(M+h(l_S&^FV9#r;hE%{cNU0o63Vka8>0d;6()8=aTVl?OjG?T;W_{zx563Jt>Gz-RajX%qAvLk6@sw#I@ipoefFT(C>arw5x+-5;BMfGQ|CHfo9<34|6$4QGohY z_lCqpOXaOJ?roJ z9%iVR>e2UToS-B9h|_w&NtI%>F<{f(LXrlx*J{~no-DK-t!YQQD~Btn3T zpoLcG?4Tz=WZVb^4{a2hkZI{TZ&2#Sy1|#z><>#(4qeV8UOYXK`BLxsFW&Z^=pp4G z{e1LpXpdlMr#kmIHn?;xuozI;$dF#g`p}6!>Qz5!O?`cwAGTssG;y$SGk91)$1XTJ zx>_HXfa&jIY^DwSqfcIII&Q2zS6~r_(I*?5#j>%*!3EdSb=zS4uQcIOxLf$;CU;lU+KV-bEub)&{2-CV;i=JaE zuhHfDkc8x{7c#QKd|=eZ4*&%K1kuHXOLWoJXKG1x|3ajzr`F3!Rx3jg<$iABOM}t6 z65&=b9f0o-P9cDA1NZ_W23qGy!@${|C7zt0|9+`{reNlq{=j|xy7rx9Af@EU1vSHL z3>;z;w;9tx>>-dc0Ap{M%;ACuAd0Ug=(Pz6KgPyX zktDnK2q`Hr2_b%}5Bd)ss|Z^=>JQ~_f-0MUDLl?&>T6xxHxKjQu^r*1I|011yV~mG z9^(iExCp@1rrpPJF`I!mek?QjCFo$9WOMS~;ri{XMd13mR1mZybq?dxYzuwQHD44TRdp+2B_z(fL>58$+8uypEeI*EEoGNj*QJ zFZP=I-34)s^He?U7iUr}Jx+EEmpYc)Bs(Mfi+QFh182;&!U6y{9!D4O6&5_sFlyAZ z!zCV9Ha#hhCQB>%A+X76ozKgJXa%$jPTj|kSD`e4Mt5n;8>j>D1M!9M=QCg<0JAxA zGP0(vE+!lmhY%mYR9Lw53oe(xy@Z0O=I0e8A-X9c%ogIY!MPfMT7NUMNoE~&O-%HM`-3sWPdZybt`CKHHYCw)GFIkv~;aR*iVe@=) zEE#*}U(Z41tCC`3zm}H3PjUa`aA$5MZGOueqKx2B3*)+W?IQcX(hl7X9iV9jxPK=EJ$1?0?WmO-3& z{mACkO}RSSz*^?w=o&xsubW~wJqb=`=WokAt@7Q;nYFwQPpq}7!CN`@SX(rj{tc>K z^+dG9%x*^)=9)hjw*LIADFdvKwB{D}ek;CCa+WFvUryQfhJXyJ9lFs!KR)t9tTM!@ z^TW42<6o|yh9V05)WM_%MjOCs{EywNkZs;F2Co$n7SqxxLd0&H5Ne`lgMDKBl`!QA z>cORq&17*zu*LyA0EKvnkAQrD=Y+Z zg;`7BDR>HzAR?oqr2p+G5e33`xn{yCzz-r5E){vZ$ z%((%iZfKQ5#DpygB?d|HA`ja;bHXp#Cr9aq2f(syz>zzUuL0*oH(?uICA$*0+Yzwa z0+7X0?R-K*Y5AcOEHqy?HbN*YtDN`d>}h3}O41viY;S9@=7Cyg29mn3}~kmpX3xr3q{4n(;BS9@Y640}U$~EUpn! zI>{4={^U|8zi_q|L7DJceO=Y=6LV&g?QqLYUjJ1+o7S*OpPTOHa*$OIj6oNH=d4aHg!21X?p#229SwU|FqOk}H)={x16=PS8OD9E7 zwXZiRrl(M|?1gq+1##Zw9^QJpXSVRLpp{Ei>>FNzHAUiR1$838?~Xg6bd0wAwi<+JFI?N^nR`bHx-isP0yat?xQ0R03$ z44sEnC@p40zp6a(o2H__{|TUl@9u7`kFV%>jXgmrB|K+JFb>Zj=i~;}*~|6L-U>sXt3h3(%n0~dv+y;jJJMTZ-!sS+G zX7XRm38f`|8P?*;9}SHS$KpU*lPd;A2$lRxaPiq5S;7PE$o=CVV}U0NtSu+oeaPIP z^Zg*Xr}LP?!m^e#UlkRiRQ3FHd6k%3ZfyIUOLxOwc~D2^RQtFL;Z9aSh<{7w)!9{iCC`vKitjEz$q*u;(B&+ z2z5q5etwuIcVAaA1-jO0svc1Ik$%J3ze=v^|K#i@Idp+v~A zG<+EAmBHTyQ?mHJMc>oiv3*!NOiag98-e>PZ*wF_JJx5uk{~);yq{BjUebf7f%`N# zzr0$=X!~p=qf;N#+ko{Tlz>Ec*i?X95f4r`8vz@B5TbG7ihvFa2t)9sj>cNfcHzQd zw!a9(Om_1#4a`rn{tkD`X`YLOb2_@J(G!k+3)q7P#{|9lXmtDce`1ws*R3!VOEgWV zS%1ko>21Esbs?5>2qD^r-K!!xHWmm92XDb|e=u;bDnx!(?rcF0OzqLgInhQ@yxBd@ zH}Msg#r$H_Z&$=fSW(;f!-%o!!Qe%T%!Jncv!x1xo`L8kD-$jhM$}*K0*6C) zZ?+92Sv3>{(pw@qSbDkCw`Dwg*`%etjdh3nidS-P#i{UdTb?i?X8n13ZWGckL`9Kk z@L^m4j-EOE;swxpsYMgarWonyB;hILd~lEg-LS`=SvjvQGS6(ci1_u3VK81uCs63(lf`{QdM!=h&3c@)5LsvjN!ITSJ6a@MJ5Cm%u zAjFs)%~ZGATU&!tSVSZ#E9+F3$8|8b{0a#ra;eSn5?N*O{R0UDT^S8 z5Fo(J1A+)PpmGU3=Wybfj{mzyZz7KbZV&wVe+4SETBSq=*R-gkoQ^0_l7T){@HEP~cLZ*|Nv6VQ zvy~1>&q(4(_UivqRBrZ+H$Mizt2T^fvFAzo;9&}@8DY+QffHE1Uv%_oxMgIriX;Pj zTTc1_4UaP?mL%47AB!h5=K;|zFQ^zbBL4<+SnoE5Qr{1W<&6yAtd`nkU6s znVEjjDC9SOQsn|J6)Z0ZGXmGeIR^1-X_v?&z~Lt)Ik~@SxTvOP9|~?Dw$f!shb}54 z6bp-{a7F#581GGlk?4t^x*nHFqMeV2Cq%QM%CB2{>k&`M#Qb|W@?4eYq2GWY`ssW7 zK+X%{+`kL!x5N+m*my!hUggn{YN%PpnE%BK+GEtcT9&)Fu@;!avdQGzDn#l?PtRn= zKXLXgzS2I|@iI%!prnvcxlK2D&R|XQ04u!tKwYL^;BNTjL%Q#565}I9z7hqkFRi3h~I&0I3x8Eor#`zcraAF zd7lg0<@&Jm&0eGIX}Y=!EOuFL{ZV<-#a*scuTES zOw-;E2S^6G(Q;B5xlbiP5LzUj#Kmq>sUZ&3fJ%643*QwMLrBK8jH~>G&^_l#+1Oms z(-X~R;1?%BM%wc}=T}DEIkYO;5OffQZcWVRjdZ@>zmon&6*7xbCj`(nXmjp{lxp`XWn7Q1Fvvq=;wmd}ELWk1!NQ7s?zbC#NS*{tlhoCe-YJNIfp~N`d&exXUy& zjdx{>27mjl=;3P>2XCV7@)XM=}V+hxf!lf(g{dK(ouF9 z!?%L&7TjZ@M7!*l)3dNO-gM7O&Dwe%M&*DK0RY6Z`Vo0K8?+5R(kxxZetySLg}`PP zYJLEV5Mp}a$anW|=Gg#6lbusBTrJd}oEg!Y=~<%l@0;fX7RsMa;rbULGVEbo*4;F3a=zEw zU&(wLjSOBZ_~YqP<0V^KlJ>g~wZ_DeInsycGT}`L;j73?l1|MY>w;rX|Lk6vnkZR( zK;zYG>S}5|@Gg~=-EYiHV{J5ik&xg5Vt~yV0cz=s&_@CDbiOnN zc2lVPVk%$sNAsu_yfkwF^KgN3Ok)igtJcUs!>=}KW zX?Jm|Ifm*PSO~2oQj*oeqHtvy_k#qKN>d4tEU2pBfEZq}jR6_czy1B1>gwCt z+F`zr@Y_PI2E8+FbOC3(NGDbZi%tPB`sU z@N8Hu%PGm}tV(#KjQFHp4uw2`H)ssLVK<6vKF&teH9ngWZW$w7Ku_J^<;`y94=Y5Ur_ zG^fQ;RmZ~z>rG?w4Bn?i2V*b9W;5?FooTQ>Avp-ZYq`IFyc>L!iXAshz{J7RRZcWTy)}EBTw5~K zl}=5PuG)qMKNuB&m?rV!Hf#$}dOd$SK!Jm_q1gmGGWgw|UgcdXCkjb;DSE=vrnyrS zYZE&mQVbT?is~lueJz#jnrHFxuRp49Y=@HJ@oEt0VA~e17xI*%ugDF;3@kwLoea0_ z5=HsfhP|n~mxLQ$9)?p(ZY{j{i9uOgT3d!zSS{1r#CW(ZL^)SjIo8vgN(3yKn<3$@ z>htD9fdZ}<(7RZWvZjJM)g3^E(FD_^HvoRY7z&tb3I`W15r*1D-8zq9OZt-+Tg>Y@ zp)#D8*H#^*rtNwf#H#!>uHkL;`qg`3Ki%eTIH~AeS7$5{pYrC*O&))L30qEL$GRnx zcFD?8!nmFSLQel8seJr z+jj6?0%w_BEDDmnp#$^+@dKohDR~oJga<7hTqVu~&jV z<$MU#b&yQox}&MF^8GsvMhJz}($+4y9o0oM8o&5(f$ouIC{_PR$lnbSCM*eBj*z_n zjTV1$rU=ov;{o-|z4_BtduOtOs{8$DKCAC1Gws;dm`V~ds1G1_H!siH#l;0r(g7%b z9_AG4ft6h9Ak(?`@v#v&@w!-2BMJMMrd{v{Og3i8t*b_eXaWQsjDDn&qYzhgzSfBHqZ}49ueHOGw=`d016$ zMWhmb)J!l8K30fggrQ;8Uy*^xqhrXoAF+nf(GyStHGDC`i4es zH`RMtWt;R0jlm)n7RlbBKg8XggW?7npjB`|0!#}$P&Z~;T3)}l0gf9?9ENRO@`*|N z9}cyWIMPEEM(Tjd7{BZ}$L@I3Gmkbi>~1P=1sD0p|D1W*9X&UCsl=XFwS-?jVZ7k> z0NOj4txSA)WN_!sXsB84*jj8{oJB%W24@l%qypuGS2?sQa29F$41>D>%KFtxQFqfb zpKWS%z2u>pv%fP=j*g9hlmUPF7T``*a6`ey1y0sNVEelMLdrR6Q`yFe zi6-@m;fW2W1}|!pE};ghZOdmx$jDd%IPPf1TJ24YpSE*7Bz+umHFsT=Hxsq6e+-=? zpz1&x-(DUA^ckx^@ur{v2SGw9hU2ErTe^Yi0rGnFXzd!B<^sDfe4Vnq*@H%$=k2s+Nc zZmKf!R}GeG9QQtN)DO6PDxD!DxguqnY0_VsaZFjKH-}3Dw6MTw9Duj_d&(e2I8f<{ z7#-vg11bhYc>tO&A6J8zm(8DqW!b9r<^8#Hp>X-7OhQFtVlj6z1YHR$B~{gK$VdSI z!2wKyzkHcY->tBZdF#>dI+z)yDvw=+n(}?2@6o>%)E6wE{|b>-qy3`gN|APk-8JT4 zmp_TtupAFRQ@iAwemdSQD*-SZ0L8#Lf@fn1-szPBZX5AGZC=@sD#wl`nuumja1dvv zNLZQGkT7*R8hQi8E<7RvkUv0~#8Z{<`CUdFhgDH__VzGzz_Z`0++sELYw^5%>aV7$ zSyWuy7;x-qW5daA8+exkHu%0^lh-oqiZQ4pElF#27+NQ-#7OQE=v^EC@I#s&k&u|U zl^E|&h+cNNDGNDuJlxz9a!1EC#)I$fKRT7{khEKtHdLs2%|TKf`vmQ%$V`c}qxJ+S zb$Gby$xjKEq!WvXsnc4K5GoBVt?i>mqOPUIg!949QE`fVXBy>+dJhK}G66?qC_Wi? zb84+*v+n7%RX5K)N>oE93A5LYTCnu}NW5fVg9mVLIO<|)mLl@-&i5OPtrU-QM|TWF z44tp4tN^A@&(vA|pk-j7G-2v@j{zQZmnrkL~|Kt>a-jfr>eFN?vqQ4J%E*G$+Y?qc#)H)nedf*4N*If1hFe zY4Fvld66`A4k{-hp;ddQmZdWER%jzziIue9*xuRFJgjlx-vg)&^;pEL6YgPoi~b~K zQ{Q$Rt+6K-ct;*la4UJ)8+&f*J)%eStKBdoHS{H8+P{!4*&lLYwyS#e_d}=3R&c!} zv45aB1^rUEAp$3OGMh7cj(kyVoXjvD|GJkLBw1kD%lD z<#N+?^w)=)j|8#_YER;O*w(nRCl!hXCK^7)=J5gv9}i&$T0}h25_r=s)2&)Ml5N$K zXqD%VRE&(YzZoiz7-}!vQ+2fu{wKrr^iqt*>q_c5KA~aG*s+eeo$=pY(BisJv3}hR z&LxgPluax{8GGFUX~HO)W*4k0k*E+eY@(<4w5sB%zcp35pKhhCegEgAIwo#*UUrjf zg4dvpx?pd}VAI*p{W`7xY9BRP_^LgYIEY6+(CRpyUH6|lHLuCUy zYJzA4HTqY_>F#>nVyXeJp5`<^`L>j^e28p`hmvFg^x}fa&Rj zu->c`up^i_hW^I~Yl*VQvD;err?rb{u#vFj>*R7POU~BJNB`to9~YC**T;EW*&!&m z+9fy0eZ+!AdaeT16tor4Za@baQvv-X)V)A*yKd;@dC)p@8HENiKx#@#o!M5+#w1XB zv9u;eb)AV&o6^d%7v=ZgHlYmz}Cj3CrDE?nhMojGh~#`xzq4s2y*kDP!u2=N>;CE!K(5 zyhWYZpa=XH*vG+Jn+O4fO`wQqto-}u&W5s#nS${h=t=tCuA;po&tDiA(_2-7_4;||Ms7owW(AkrINKXWPWY<49Km$3G@xQW z#z1RN0;l~ZYSM0kCw=gHl0arxK&9ip5(gLF!yn^mk4PI$5!BOK&wQ>{b361~IqOyV zsBx6pSAhi-Md0SMjDo*VIYNXN6k2=nuz@>I*0T4xf=vN`S>q7YhV34LG@DNQjOtjw z<0GM5JEqU;lPg5XYlVs|`VJXBEqS9Wf_xVLeMVd?25s*fuAi6$j;dy;!5 z_C4Qas96*;RC+QFDXqjaVMzhGpbT{KP^Y-wWZv+_sq*`7v`mhS>~=9Ze;*sWv2~G- zS@WA(5|^fbp{|~h_H!Mze*T_~HC9VRVFuBdtfrgXZC$OWj6X9746GFp&+sJQIlb)= zRomL{DVb^QAoFcy-6Z}O98X#AYh>TL(c)1gKD$rd(Yj}t%li}d;5J3qn%4v7SmtUS z;ty0#X$+_@_U57M}|1eRjJQu+fLWuLMRG3}r5!~p<= zb`mVOluY|Cgz>1UVQm2sOW(glfH?`2DPv>Rh;Cj#7pau3yp4 z5+c9twr+k)J;sO3QCX34uM$Ya+=$Vrjp)HIUsg9Z);2aI_n+bs82(wn75$tx5q9@Z zg{AQ(1-l4SAM^_wg_b-f+n_7(^wWN~p`}D6{8?rA14PiW-?*_+_d8p0-_~S?7*h^E zFe1Kw{V$~BCLYH_k2nyXcuSABFZ%IMF16_S9pVq$a@$we&!08T>QJ;{mc8nd#MNgN znJm|Y8lP3Gu9z25z2efW`R~6b3+K)Mi2l=+a1AoYm7%Wv557*kHN41cQ+4*P^MtJ} zhtG@7=8jad_q9M84wVTQT{XOVHEY9q4Bj{|`?iv}^547xcpJ8PrBdky1yKs*e8lVkg8STVCEcC->hV<_Yhaxw_%c z@7#Uk?vumf>eG0Q9L?pwIR`~8t~xruuZAeDvGv|$mg$SPZem1r0&G$g{>EE&&$q#-9{5?lpFI*gLt;l?BJFt+R zbF8&-xKqlh%EFJ|ojL#gfTP!oR=t3GYs%y!ds7Fjpz_8vTK+~Z(Y2&&O8wT944(lp z>pGK;r-oEakPzb`TIq+6RWdxxTYgh%@O2$zUt--dL-)wgF@`^Fk)~)y7scVTdws-1 zaUj{s-I~)mWn{3*MJR;)%mMe*$2BI!!;~5b(uuV(&oOWg+}^Kt>^s-DA|jCg(Lnc7 znk0_7R|h5=OKK5~x1X{7Qf4$5l6RsIWO2b=8ZT0z>Od*HaxR2qCsKR!_!JQg3|nv} zz(>$1*S+P%V{Z%!e(AL~?UpOhw?AkL_4gn*GWWu*RIe9!h(rN(wNU9vQ#hAWjEuf9 z7cS99YimbVe3m+WwmPg6;MCpK(zvBiH?sAQ;=Jmw;Z7>Q?Dl`GMJHMDj(DFw4gI$P zf{#ra1M3HxVg-3~OnOTxc+g>?kQ^_1bR}T=fCvT@4uXMYzDGf8jtKttP0!*|T}vm` z7kQ*M6O%gD2+sbI-1iwBlvn;nM#n`zZ9kYJ(W&55;_9(KxglL=Kjz!@`Did`Tx+f0>o>Ww^x^1Y$Eo{MWsX{lKX|-+$c*csxdIae8O| z{z-2{L|H)HzTv9|Ix(|M4NU@sdmPOF{*k4T9ri~%WtJoWPzs+Iio7cFSOO6Y_2A8{ zF93XjSnqNFlFgm5`K@#zr4MYY^w8KnOY7!GWxcO@m}-@~p;?2WUPW61I`R9eV_ zg#nFM=l}iYvy%r+m-~LUvyKrfqeIh(OkjP$(A!U)=es!#dxl3kIn9RERwLCVPU%h=uBT}!Lqtp3Rtm=?m+PjcG(bxn;I z3ATneZSGMdkAQKY1n7j;HDXZuJ)MzmHwZ0%-?7s7;zUQOJ!`Ok$KEp(OM zhM+H6f%x(FHw!be=Xh@k{2d)!=jG1%i~-JJAVi5*fBXoO zYNvJ6yH?Lrya)gOt0f={jXb8@$x)b?LSz*UQY=m~60Hq|@UKquzh5D|?;ke3OstnR z^96BTw(Nnu@8_=s;Q;)zjTcX(sq4o?Px0bjG9^LE6|+hhdIJ}@!A#J|2vh>pOiY@5 zSs58%F5FHJuR$Z2B>?F@*J26Zl3UfpWJa3Y02%-TL+ue}kmWrlAECT3ChhPmFd0TM zq}AfYSO3E+c;$s}STlUa_hyyAwNG-hN4%I=WM~)+dXJBNcja4=gfLO*B7($W$J<&Y zPyhE0^l)*2LlOe#U;YDpaey}jXNATJkSM@h%E4g`zCU(2JUS~X3b=)|rjsC1d{(5}NXu2IU2j73{T7nlu5c2jGVm=0p?}-Q=RICpZ;8_&*_N(ptG-X}60v;CTJoGj= zs{9Q0o=S@h?iLh_aTrY$Gymyyjv}_Ym%@Z&8yOkGmSQqOV>DM!tS*8^z7tNc4kt*~ zZ=S&b)Jil;0K}+g7kG`A1i`+GO8x3e}FqM?ZI|5M8LsgH{cRzn_Kx1cZZSCz{ z3wkne7?c)8a$LxDz3nza|-djSt$6r2pamR2w~bcZLMI(k#&=5~RZiV%aO7fDpq;2Ku2hW9zs5kfcEjNb$CofV?GB_-+5F!E$%WsOJSCfUr)T$mV8 zmcv7X5n8TAf&8W=bb_S)70x8=FpT2rjfUUz)G9gL6gc}%(3r0>pToCFc&GVdgyC}u zVB&R?ojp+dO9ua4!Q(~?4F;QimB5RHp((8}2a0ErVZ3ssDd_wRSh3LD|CAFUU4TF5 z(aDC4^LN6^g6b2_4WtH`>g?vbylY^({o(y{%)KvuqPCu(- zGjDV8@IVl6*yH#3ZDy#?S4FIT+)YF-Q!FFpQMivYZ9PpT(LmF@*w94e^=( ziAbC2=|NW9@5BN@IAAisxaw`T?_(G_07exf(DJr}0pkMXBbb!8b|k0OU92zN-`#yO(<}oZw2n^1(H9cJ zP;PY68(fvj!}D7*Xh)LL*Jb<*>>_~BGLx$U#>U20*cd9L%$wQs3=a{){p4N#ll~Lu z&%>{ZpYWZ9k#JY9S0pDG?XqJ4?MqEf?W+WLG0N2jUKA1=dfl|T80z%H-#I#JYH166 zFnLTBG*9A!Jd!7RV^>lAOmNKL%+tsN}Z+u>N-8$>^vi@ zJ&c{TfWtMP=i0T;XD7NYHJO%!Od)K=sL%GdEE#^JX}47k>o?|x*UU=WI--G91>+Ey zO|Q92(K#C0O8sXzD<1Ni{TqTbR2dcy$ORp{7_fS*X&io4m%HE%@i>9gTWqTYR-B#%=qtUcL*)HO56N7*a8;qOE^P-QwOVK z?mJH!KM=#=%>#xwfM~fEn!j=%-2)SWoT{vaqDVG>c_i2?!^?)tpoTg`Kv2-4%ARb$ zm=lBX_1K9J20l-6PL7qyMW$w^Q5 z0kTzOAo{)t1VX|F3E-UzU3KXihy`IX1um}_=Y9~n;h~K!EC6hehrOk*^5x5yU{nTS zd{7Sg%d)cn0@6P4Ga%nC*J9-aGSF|j{!#;=T2*#Cai0;tn?46V8+t$ZAIiYog{n-K z&6^i?Woa?kj=>`UJc%wRdT$V5$_oo0!>~F!4=_6kIk_2}(E8Vwx33@02F73ZK7i2R zJ^{oQbdzyg19)C}JqaY>yJ~Cq7$?` z-W&eVZJ!PEsBMU3zD zxyU?TNcl1Y|Gx9VX}|97r`h|>>n-#+6O~k)u+`g4Ix5ZPyCN3ySUgD!Kdi)aU(g zzr4A{bK5D-?aQwAM;$7jFHKQTK1G#qn&xr!RsJgInpR4%##0DIkR&W$F&3yEY+O9s z`XY!;Rtw<@zMfXb?p>EQ5pcO7?Qmd6c5vf;S=kJHb>gXed;oprOgDIy{rnra^@)y{ znAnEuZQFIBbghwvLW}CLZL72gYu74eQ8(&%$B;jR05x%cG`8{>|qH@#o<0aCWxe zlJoVd+Ap5^R&b{U=8q$XyH(?QsX+;MI0RvbRi5TIC zj;(Q<_$FW;LR%)|wQg42A^COUqr+XGnn1Lwbj|Rp#4##|V@26} zpNx=MgvuV-D}`*wR%Rq3GYJ_Lk-c{+D=RA%Ws|J;I=}b-{?F&r(kGqgInRCH*Y&-= zoMzHueHWPX+XRh3QP&i#|s9=$iE$FHRxsRi8zCYSCDF&GBi3uWtvW19#A z;(-rk4XgJaKp4gEKWCIu)6!TaN&E18I^iNT+ANx_$yiNMz;e?%nBnK-O01RUXar3s za!%SJM>O?eODjkJRVcdiCau#kFkS$L-@K$9J7PW4=C@IYOlp1CZ5^*h-7o5sdu2yiNlHX0`z1_e^afPM8uK)u{|h*q<=zodReTN&OQ_-&Qu3!B`{ z6O}+)#S3@R1Adlls|jdznw^?)t3?%O&%dK&K^qEOksbXH6+yMAqwjm1Y_z`Ke(h zh&QoesA<_T5oCHb;!iGTRyLX`GuQ_G z6P9qkf*0uUr%zs+i<;?uXI4DY7(tvbv*#;6pToXBMw{J+Dl*YI;<^@mVA15GQ#X0g zb)ovR#lM5uR~LE;Trw-Wb zZm=%g-GO8G&_`OEd^rG8Lkvq182P}LCn=LF7kQSJ8rCfSupOlE-cMz;m$=RhM6Lzt z04wZ0%{vc{ZS#Ov0`q1dZ`6!zEN|@ts9j%Q&n#4-#%VZg;`x7E08q_Oi?#!01RqbdC7AmRpH64@Xtrec31{o= zv^0PYn4I<;qp?)qg}!NUbbtJKY44!SSYY9UgJoWK#=jM=<>2>w+sx;u|8+O)Av{?~ z5$fJM2h2j|+xr21TBkb2U^WgH-Sz0~t5>fwgF|hdoduQ;;UJD8hsn{X%Umj>@3i%mQ|j^c5&dUVmtUk@YNvb)vbmA_GfK@doK#tRitpEoI2Hc&d9`k_@#Aw=eML8;Z)=s&bPi z6}QEBRmF@RWO-xU5Z^X9oI{eTMNF=vZNP5zHE_&o+@1-SB>1St4Fcf*^4bd&4)#!x z{#XQm4_fa(8fN1tIH7NEQThA^{4fWg@&nr`vN_f%Ja{z&_|phdH+awICmx;$avfj+ zaN-d>>8_+4VS?0p@!6ACC^;G_>oN0{orkXg2%5YzPOt4n>*uJ|`Sns$n8?tRQ z>Fk;_i^z5(&T&IbUQjW=z&hepbav9y{+axPbNXjEk-jEl>%}*-ey$jLdL&B0c5Nsu zA<-cNhRL9U%uDT*&FTR8+sFt+2mtBHQ8JSdLIbm%ez*u`ivUj#kM*4~izcua`_v_K zo&ygh0@Tc47ZwP7W-xREfpkvU}(*q~CEokOM;&%syGY8-Si!s@85!P#6(MRU58>Uu#6U*SNA{#lBa_v}i zD{Vgc=lIt|p?HwUk0#NMyo1Fukis{Q&b}~&!A3^>L8hp8tg~WZJY$p9yilCkzyUa9eHxfmgY?1etE1mE^+-m!R!o4X{>+MiNLKP)~!|3sw^x+MvdQDjCl5E&qns zA2xfNo0Ut$k34|LvDS2Q93M}G*9SQcFgPGM=l!j72~plb(1rkC0~`3Fu5Hfu?_3nf zey{SROt=gV4!)cGovVKbhCcW1rFjQ|nhQiP+&?txKnRAW0`J#OSyZ^1ibWLtfPNL$ z$$7g3?09Y8J-KN7@-W3|=SFaoRq=(-5$=XULqy*gkCnQd!^FZr9azx%7ljiA^P!Qa z!kzevBX9(RCoKsaKi#{aN}VCXrlhH^=LlXMvUw5Mix&r0c37);-Vfi*P_2BJD1+n@Inhj3*=Ilr1aBZdd?DhB4k4P&Fo{S!lV$Hc2B98?8=-Y=g+D9h)3V@7HHgpOu>d>k72prD|v`{Rm`?mcU#Z|P){d;i1_@~R(Jl2YtnId@c0 z#OIigZj(_&6*&R{*vZWe?A`kYIO7dtMIKG2*g-uBI&m-w{Q&;<$!qMW;Au{|vw2hq z%T^?!S(+R%b#v~pW+>qMgV}=_kbwq6{B(!-dIUU@V64Dv>QIkE!YRox7})jgT?j%M z5gH_$fW5GN>Vl;Z#_(4fB?8gyY0|jU4pH^XmIu9IqXIU%^?to<;yvS5VnhgRJOUw5 zrF@SvQ_~`xY^L=e`@s8ca^z`pB!X4||3tWES81Kdqu%Siy`Rg@uoyqALfIuf_RSo4 z2h9dha$)C3M||KjDH}aJJj7nY^bQQ1Wn&X7*G^$k(4(W1QoeCkIH0k{mIx91iRj5q z*?Cl0^3{WQCGpkGhy8zNomPSuj+{?cMy^fUxK*k-@(_O)#G?>%JM4H)J&C=m+IzA} zq@>DkQii6+_2LUF$gA<(rU5aN$=H}FW8V-a(e{Te&pdZmO~HEj$%Y1Wd;che(Tbo5T9=O(W#D-5S$v7?+1NE zh#5r&pQF8Lw(WNd6qwM0WWZ^J{RW^Ejf8VLqy53+;E3k-SjW_q1z!QQp+g4Txi8~& zVPBrvWxT$HP7>LE`QX`NTUWABEOxrE?4jdnucrH}qvfZO zT87xMzJ5NxJqy?E+V}yl=ekjW|9lrc7k+&ainykkH1{1Di*sP?5gk~vX)RITTeeEY zb)pN{MVk>0StMlht7ll-l>jwrvGf4ry7NvxDcRZPaETC6>mltTnc1}f;mLV(l5{$% zfTx(7o0sPQ^#B4P0zubw8_8jHxaGX%Tx}S1&uZ~LTU@{Bar(lIS6L7~|NZPrPUIX{ z(dVCU%*v1$9`$){QB*6qM-!Uc(NIB7NRjqj$+NAn^cb}I>z*37Rn@J6n0D`+q$P4c zAGxB9$aRr?KB4nOe@15ULXX$s@X;%Zg`x95lSQt#m1hN=xvPg*TpQDg;yP}VKg80V zITLq-T_rYkgo9nul4j2{VzPZ(O=eodR4CX!)$ox>VX8qp->F2eZZt^<%Y5gzcP!vb zJhDc~aLBe7y3a1X>kANfc7HgWxFT3DnV@$^I$XDHO-q8%c zVRTp=*KzmJ3ph9iOV@8J>78{i0w1$TJ|6syL{yjvYJR)}qZJT;qo~Mi&USMWvO&Pl z!9>HVg3+V7txA25+CIy(ldn+lN3wkSOr6PA;X|Y{hYgY_QDplSmUm=RPR=Pf@ZF70 zq>9MzMbUFURl z9rU!tPx(;@yRwvbFr`C+%uw?=S--uvre+UhbFi%_Gts>o=|!K8z*W+;TW-t+=zc|> zX?^nJa}nMUml|qu`|Vi6G!Y}s2Uh03OYv=Df!Bh!4=W#GZiIMshvsy`nC*tc+6 z%IaDIznj9AsY?c|G7L9DCV!J5K>8ZHBU(**U{B0Od2RNC=tdNq*5Jdz#!-=fyaR=^ zQ^AEIN^i#`3^E+g$bmRx|LC~Z)hj+r;V3BsAn2>#`L{=aK8#9Y-Mzi!#+j8k9h z<;#ut!ni)ken;0QR~a}`_nhu2!Cwi`keD~BY9CI89(#2NMZnk#gS3g22>a-xHcaX< zhzVE!)cK9(qd1sRIDxkYL|gf;w~)Kvb_Z~Ge@Q5KKY|%JEiV*za!&ShK;Na!v^?D` zlaRXDbp~pitgXIuq0@G4LVOO9WDJr@VhC0c)K;6cCmT#+aE92l^QsZl$}^U4bU4whatF% zo#Kg}IH}~m;nDZcAq^REng+l;PNlNy-&xD? zaY4D(Wjit!+f+k5p9*P`hmtrRRqMYvsx)^-?}-|!(S*YSIFde%d{aA&fhy=Hf;rrsx$&&{zzDXr5~SI+1f|54@V z5nk&1AZ{p|^wy~4uJ(=K*n=R3B#F7ZW4D$WFH?C=<(H@k6r- zJ1!Xl>iwOgpO0?3U*!*+i(m#>t~(_BaL2e+>NDCwXpv@23N{>`bGUjj?#t^Sp3 zmst(CeA?p;2Qy~K&#k0WAriN%tW0CNS-H!eNF1Jd%cM}n6jaHw_+rpV&MV|=RP!FK zobKG~ZpT+wnNPS6Nd{RQQbp8R+OkCOXa{!OpkFKV8CF3SkVv2x?nvEyyDYrn*^M^e zG4(zYL*z{;M;Fq?{L)J`?6Xw1=LT&+-;rKXsK!A%#;WHqCr<|;>-Dz2m7e#rRqp@(HNb^ z+u$yZLG?8}$dRHm8F}lMZ}L3YRZ^fCJ2MOFI7=O(zsC-9r(ZNTog1g*F#LKfwVY+Z zl)bCTUl=XY&Ucwg6p4xVbFNp(gN$)3G&?+}8Wjn|{7$nTISnIvix4G1G1}CW2!UYEjpfS*pw;dKeQ0M|FZp5gg*k+^gfa=*mr+ z>soes6k{B!6+XejTa9S_c)(70GF-KHo-8jLw3Br zu(DFbz-efW%rs4h=h~rzI5iVF#u9-*5zF4s$?ms$g3=O?=cf8Red$K?^5-&h>E${S z8Y==uIvlNDoG9TxSMev6L5ZJAWYQ34l8j}sE2prN4E8zwWJjb|CXAza(}i4cNae9i z_v^5Cin7uJ{NI$ExgRuH$p$^n$TBEhT{0JmM(49>A@>oYO=O`mVvI1^b;BXGgdwnxAf`2g}fZ*Oq zMK~ zI%BcaI=Y5MuX66NWnD?ADK5)R6~^)BXZ^C5+(>Cp@n#t|2bg0s0)F)$+?c&{DR`=&06{}slCFQz-vVSP zi)(*OtL=3xEOP$ph;|Yj8A_+cld<5k52`bmAqk!Wu(U^ks_)zAEnYX@yN!_sS4BD* zF?iu`Q_EY;>sPpGRP8FtT~&8^4EQ&OlD48zHs=x*PTK%I8stDC~48*s`CB=k?_JULwz01Sf&jj`}kP5-0s>)-xLX` znd2kEP%77C)kcl1PUAX5Z!}b;{ zSSJw^GH1S4ScTViEp8>9x%sWDao2xRiPmrMvQyChqD4Ik!=+imWNTT`6r`{)12k}n zR(q-Q;o=Xz*iRondVu3RY(tFWzjpy3vdfzTZDM>3B^ig=l*jWuMUi$CL#HH7{j`Eu z{!6CP04CrFq>>A`*qi_HZu0knmLbI~1-3$}|j~_q6M4Ui!dg`ga6S$bG6!7-wgw3bn zJe59B@V|EQ*<@WNrF5mX?t(=Mxo6o*!HPw5vt%1DT}EG9fXC0ftM=UBj|`CwJfjAJ zbYSHTe7edpeQ6fyP4E3WxU648x`>9+ zNWMlwr|{+^C(UF&lq)2m%6Zs^KgnTX#9&0|-s_bF0ml%KQA{Hq-Q4j}YwpEq%$Mpj zAFXO=scEKaDO=ji_+o2E#EJRYxky_0ktR6;Rdt;d3pbq$&d3zIh8)elj%@VG*_4}H za@c#x!#_nytGveeqA_V^X6E_qs|Z{?N}Ymq%DQsA)L7<*r~r>?8V5cZONYbd>i;)! z%+=>(q=fd|QW#AcG2hFz(s=MkKu|CMf;IpgcWnh=5=?i%%zqr*w5UhAHsXhtwZUxHhta#BpaA@< zu?-Zjm1|WlrKm|+UcD|{OHudg9R616Tje_gCZ2?P^ zV9#~;u6QLA>B0pE2FERPp7b4%O2VA752%GGEj_)Qr%z*j;B1f0ZX!Z)VN1gEe_d&n zsLIlC%|cv>ANCMnPU@oZnOM=?B|;G4_=-237glr0dh!r@A!AI>?|*evUWmoF_XW){ zeq(>WaoMbvTJV;jLV6{!WqHsO!(V#`?h4+z$=J9K&c#O)EQ&WO{o3LQrozoY(65OFzg3z#r0|b@0&I7=xvjaAJ(#`z|RXB_+rM}2ez(i!m zf29n@T|n$O*{x|JuzFx1)RV%?Fux7P_<~H@rTHIY+_rT6OO2fY2^Q_qB|>a&Z9NpY z6rO73g-J&6d!Xrj=~1 z$0yvUseDINas`2C#?;Ew1ooL8_Y+pJhN0jkMU${I*W_$T6n*+Q-hM_ zN$G)X#scJq^-SsH|q3u#=rWGttrs79(FCXpu0w@ z%;x9!4szhCVUst|8hR#o1F$%FkkiuaMKhpUh6AloI~}f{IJ6lir5C^6gn=I{U&tA_ z2WhO*t3}5gQkh+E+67-px+9dq^Q!8pu)eYJy8y~U>OYb2&sQ!C(HoB<5Loq>=z9?{ z1rY(gg~5Mr9RJB;QL1I?MhXvxv#t+`l3H2uTo_UTBPmNyrhmT#;>lkuW}hb?K@E$; zQ`@@5rTSa^W+^>au7O)6JQe;EeQq@lc6O$MOex^&lx)tf(@mb<0Dc=2F3>sDuo=S4 z%h}oa-o1As9&Wjo@n@wyz8&q&!mxE37{f4@Thz$fYH4W!G9JjKRe66wUGZycA4+9U zK-B);PjZOw2-uFkv!&?qO_|EZL<=VVNKBuDqq+g3X&OWEaX&|-t*z~?y1V?aXHzAw zU*UNgSy?cLVpVeZb@)eSowq!3Tj`wgLp7;C&C-8;oVk za~_jRoAe|z;q7*pTc-(u@lISbuAYod+M#3RgTCEG^0b_yNa&Aus6K88WCfq8xUK~m zFz62@A;;q+G6#a1f}x_fH_d=zcKF85@xfZxK1Ki9-p#Vn@oXPhz+a1;T4(={3-I-8 znq~*Ze*{)or;mI%v^BtI49L?!I=MmxlR|4Fff?c$dYmv0%|-pQEt_mF<4aG=SEZxP zxIu~ifCpy;2T1RUdF(fL7*y=hvw3lKOcvfc)Ns9LLVfCOV#&)3@L5HhOjxH<(&nr? zU6%)h2tVav4pCr$3B{gsme*@XbBNS+TZ;VcR=te}d>Y1uZ{NHD#|dgGD#3e}_aSDZ zX2M0}x+Hvt5T=~*#*YL6yDykte&6TUq5;Zuig^!zEa0BW@PtZchPOaoCxr89NALWo z#pM*DUN5gqs^z6}gdsmA3e%7w5SJ3NlN=i3Pb*hY{Ju5zXY7g^kRm9-`F2WfZ<3_o3_YKPrwy2?~cT_*Ea z?;UJ9Zjm7X)`I~EoP?dSiG^)$H4tizRqR>@PULK3Lsb<$hA~jdW_5F^?_iG*9ujTj zLZJa;SV$W2VLTma?m%LddUS5tIzsE0-+^4V5Jbxb&oLWNk_>Ssl8Z9};btkmBh-*fFU68tnO0=|AALi{ge==oQ~L_T@ElMHirHgFFzr*8_T0Sgyu zYM3CJ34-^c5(K!6jM!D0!2M4+uLOkIM!TJ&SrHIGfNNRhBkPvLyay3?hZKAHxK+7; zQ4(*^OzY6qksz}iZ-7H`r_w*X11aIxjlN9WO0U*z9%8^O0{0DyNC-Wyo0I)E3Zruv zn$OhbPFwzz0S`3D1_#_2R$!%Xz3LCq|SSzZ!A6c;SMRqoa)PItLz7#Fq=x%|*?O zm6DyrMOASfK{YyzGhe-1 zxoTc+2_YsEnk@pM)E$Hf-{6zw)y)DBstGOSin;+!CV6-ZFuFjNQ%f&}PlVF7Fz4D6 zD03lLC_onc#eoN>2uX9d8V=%MG>|6Pr}@*C01y*$J%QB<@}3W-It5rw7+nD~^4XIo z6%#Hndp4ivV0Z-kF3fRNNr!2>jQRn6qD@CDU`iWUqW zb>Uw_%#ZlIq@M304@~d3fZqsAUkN7|OzZZ=HTMG=2_}f3ouUwbJ&+Ch!W#^R9L9KFp82C z2VZ2oei@_l@K-E7Fu4M2{Yovyr`O{w4hcX7A+lY=n3SA26lk%~3;by1dM24ybsaE6~&?4viIs0j;Wj7PP5;Zra~YyS4B2D_~=@r=vd1OhFcAJ z3{AM4ob$}`ln*5z3`JQAOA8Z@xzU-KY~ZheZ9{J6&hG9p*rGt`9taGWh4=O2%F4)} zD=RnQv>kDJmX#InBaJ}lo0v$8idNaGA%HoEB*2k{es#Xj0et~N*Zy@z3b^56EtZ=; zWRKI*+{P>BfI12f($nQjC|u^iC;+|F)2`d)Gx0z-#(Gz@E8o2vCqrj2VQ4ae$^HP25)jYj94_)k zG8^YL%bZ7}LC(#T%sD!Tc=7q?)_z*2Rfk*6YoPH0rgBrUrvpT*;4lJR3}MqNYHU1) zfP(Wfnmluan6--+1A!mn{;GisM7H4X0DP05&R^*xV44d5jjdVbV`+yF6*3vpEN?QI zc`6Z73|?P)3YpG^RPhbj&)TFj*z%&v_+F&*VC0g9?VGEP5f-NOPxI6FP!jS=9V|v;0EGv9WQ7bPV#c);E zx=Lo!;cD(#>gfZ$oWT5K&ASi__Ug}cmpRoQlY&?Ve2y@%n_%gYLc89b&nqx^DpB;P z_`JF=3~4E54*k*0$-MW3Yz-{qpUD8mlpzMxcxct`)t^Ox=RFY87i?wPz75s}>{pGg z5TY{ym$vq$F%hk91owykt&c!)4j$y9Mzr`2D$=CORkcyxNJNxAG7AJvwmQ0CB{S3V zBeQMI`WLy%*ON46~5Eb?L_Dw?`n(ublkd_hNtz0pAO@u20f}8q0$_&I7cAF|_B?z@$In ztkStHt5s~vW@iCgM`zDjbbtDIHX_RZP4E$spT;8VoaO{5NhSVIJ=3bXg zMF5KW8nBds-4`FT6@@GzS)E%UinHg*0_TVixAU{0ZoXbqg&OWDPjy~NHC1~<1m?A6g zaDcoobU$j^(K0a_G&6cm z)`BtlSTNc}TBWViDbXY`eiTk`&C~*~0^<_z0q~5Aiwnf^ zE^I`%hWLpBRaj2W`OWJYI3?n3VPl%AVice|VWpySW59Jo00hL%5H#h4IL?h1=UQpY z1q9Ksl%ZOAZ)yWBq1lRovZDr5XK?i#m^+DoX@AymneqNgVfZ=I?I8zMoXUoDZy9%gZ}r z|tzCkLRZ4o#-ZVaXhp8npjvU8s_i-j30xydvT|~9+!UOo{J^6{vV=s7olDPPL*};4 zL01l_1)SPXi-3f$r>ncWy&Z7JG#<(>NUF1Y55b1neYFsY0i_4L#ZIR$10Vs=GcN!mr|T&#aG}VfZQfN zpPL5h;3`cX;@xSYVlb>6+*Hb!Y8Z(sL>dwk*-{B3=50-TT_mAQp_B+0fwCBG8W0PB z@~K$A1|H;fb^jb7YL>v{X{0R`WW9Lz#m1S6Y90(v7QEhr z`w0x$-inWj!2Nz&bkWy)6Zjw?2Uuu%=)rIL)@cM7O7l$AQyk6}_)1Vr5O}^o$+iV! ze>Fo}O(13`Vb$O(X($-{EH8b382?cHlMLU~GNtted*M#FcTmPa0}QnkaN$!w!9EDb zIBfg5xfpQDIq57^=77isNJkfzmj{Yz;AwX@k$*)^O(&0Um}~a-JU@+tN&&0cQ)B7M z$3_yqf+PzEIxUn6+XqM5-y&h|k;m8D`tI2>M9RK$oFUE}fP}b|k7p$7id(Eq!{O~> zWl9~}(|ZcKV@sb9EK0$setkt9|PDkfb$51GT1Qy zR*lW8o&E#nVDNZB_xoRJ#Qm;`cJR^2$Y237CpgEzh6ca6T*|)2asynn zVP&<;#>#2vRdXQeaA+GrE7LTrDZy{g&a|Z}yQw7^FEXkyzaz_*mXb63;P=xB>k;vX zPOPdW>pUcLG&g9Z7ukuCy(MTH6k+lR z{CE3m@N+xisiavfM^&lojbEXElqL}i<8IrIf+qvT9?Sy% zCU484XVN#n6|WTd?eexOgy< zyE!ThI3{)I#gfTmuh9F4ZZTVjnma8`E%dIzhKduzk?4vE2{t1#ZGwf-g$`t z(nVu6?T1s1#U@^kPdz?wbT5G&4Izg%QRj1UwZH>F09^1cwT zL*c5^WgOxMxLu`}vqT1cZSyMcBv+XT!kz`KIP3+`l0Y*O)YJsoIKbS8TL}WHa|yhr zV}fZiuw8)HEk)Mq2O0Ij&Spz9N-unw+j&z`PI$=vdC+Kafjko8M0Gtq^i28{=tFT=&~*7m3;K z!RzP6gxSU-Rgs+0M7nyQ9njviC^5mk@pgfY|EsEb>HZZ#o znMgmdlHsGHM@>yTG}wQqL<>~Rn|8*@b|@VP$dTtY!*YTiN4VA%HZs#+XIlWc?uk{C98+51U=8Zt1Hi@VS`Qam` zZ;>2^;N<(-M5h}4qHM6b`cwbpo#&Ich=L}vISb3ysh(wKWN-S*J8_^W$*xPZcQB~! z)3XWcCD#U^(Y>9`-v)oIt?lgxfL1AZtzqwvSJ}Tu1OEVbGJNMJ5WCq-LMtvV4$T{k zHbE1Toqeh95pZKc0GFk^4CQS~F&!1)J_6y zr!b_Uia4!crlXfsX#}7Go>BlRDuq)YhPIrAL|Pxf7NDPi-G5qVRMp7HG|m0KkjQ{s z%-|ncU|Z;cBM$U*kV*r`6VS}I^&qPRP&BAefjx2-uMf9%<#kiG{C5{rWD^lSF^|vq zl|(_o6Zb7?S0iA8Evy9j_`i@ACw)kS&~&vYA?zz2Qoao{VA&BH`4SkVGaC!So#k>% z{rRQtz}Euq!j7-}{lfy!=n0qOPw9=RVEz98rZD!I;3^`&znD^1R))gGZ-5olhg6kI zNVE+oO)5?LiGgtri-{>^A`AdfJFF(kDw;b_C*eUXQSHMw1LK0g(fOD$*jV7#9^4 zZT#CIH27lu4y31}Z3g$D7zIQBD$==u^T^zCP>pRUa9X$P@fWsOeq00P?Xf-|6jYjg z`SC;uf-WXghw0S>OkE5M`v3fiA#+C-Jo$dGx=cnyO7-`k_Kz(|t)h6W=j~y1mAz>S z45->N(Apt{)$@m`b3BHD*SO5=EoeYTM@JJr(0@Ah(EJi50w2^g>r_2(*4cOaq?T_l z{zoRfU6?`e3kXbtL9Ds?xx&(Xhb%*yxvb{PNDTJhbw3}|cbp3VaP92vT_eEUHSIqI zyq`qhqnqWjp@x3@zY!2z!jcyN8mGcr^!e_F>yEr~M5SRV`XJwAj!rLCY>+R4VQqMx zclTbH#^|7caA!*BR_0Ss}^zu{u^ENk7u?AS$+0h^@fnf-3mgyK7HeNoF)X7dv_hn9B#EI-d`Nnot6OCU|)n{&;dq zNaq`Hy7OnHe&Cf!g*7M7YHzXvN-gz3!bE$iJ=p1P4_HQnRVKn z2@}t?r{C$qf3L%q_#cY~_D(CWESP$r*Wd2!fGI4=oKcxAy%aQnJSjiJ8x`X{De@g_ zW|==C5Eh4>LxZ=_W=7X=-BWpbQ05~nKNsn=njmp}cx~1C_=JSGNzZybFP?f#4KlGf z!eWXrf=hygFSZX9rU2@Xh*?WMrokN=m?k5WuIZ!UAv!dhYRrd2I(997zdEdeev{(wEoM~%oYq3OO+7XEOP%OO^O!}pKsZR@s zx#_Lf&yG*)r|Th)hMN3J8=SYGP~g%H5Xgd{zMRMc~m^SWOd-9<&YC z>h?T`APjEfPW@Pxc|H~Z(pMGyS205u$(#4@OQi{OAP|YR^O1(E&(0-a&qyOsD#7}N zshp%n5BvY&*8e#%RN7e6CeHh((csAV?T`jnP&igYE}=AU-7cYSv6FP}w^??s?Ae0n zMD2*_Lw==p_?**ymZzepOiia_bh)I63}!rzB_=7>sj>YzCXYnZ^3ud$DQU{zP_g7= z3r8nrXa6CP`)_if)_vuns_pUgZzMumIotsHr03^I>gCBnu|a~M8k)~vWa?-x&~k{} zbgg^&wDCd#qz<8I?31zgWk9)k7gngjus~#Thn(@p3>}`Mk!!Bw0FQ_ z1EOLCsqihw_TR>zrH=QX6-h)09c?+B%*(mwyqCV7nsfQ*lr~eGK833pT60pklOsP> z84iNHP+h$r!s>QF;_@ga(X)sI1zsN3>bjr|9fa~dyi>wtND+f|L2~Csk6#%_hrsv} zI&~9`%37#jEPsL|4B7!uDOFAW9^M16ABKnE{{$u zb`Jb?Bd7_^B@n!@L3e`Z>YVP2RWJ-V1oX!!G zAw`5hdEqt4&=_Zwin`p*hY$JGeLBlIBQGAM^I5plKgrl+0TN{5S9f3wa!yyAi` zyeg~rrF?X zX+WU0_|Iem-M-V$uTo6tGDV~~{<+Ze@{<0?+#l*>$DE9(h?LvjiDYeUEf4MO?eXq9 zUH^Ob%Wn@3#N9tZxwrWWRXLNfkOhbn)|!ac^&I4*8_>t=k8 z8<;O^#zXnRbT*}DyPZJ~=#b#NvO4vCD-y2*Qw2b+fDn^#R>7YUa~*6=T2BiBKw_d+ z&+$WD0*NyqiS@i>uDtm_^pG1%+Owo-ZqbKb34KRR z&ABnFrKNqhpT+jD4;uFSO-5fkw-~*}{p=)6L|0QY<_DPCFk-A#d7#UHu^o(UCS}9v zaWlaufttyHT%|&dY$Y!9o0^OfD2Mu7tA~$&F3;5Z9&f(sJBxJuQt+dz9A;-w*+Ti$ z;a8?jxy&v+sG|Co=$vE9X{oSlVRY>%uE4?z^BWp03($W_a*1bk(5*bZ^_PyV%H9t& zJK5W6lFeva_lj{2e74{B3_$WV&IjHF3$~h>zkrkx;2t)%2fGsvmvcXUQmsWR^ZEOT z0A7_0rUj7e0lQUUNu3#&OQ%Bq6G4xTl!9$wHFTDv^je5wW_AL5yuOT^PEhb?Q1rKFpfef=>?M>{9|??KQ;^ zUk(>K4)IFJ60F3!5UV!Gs9GgxAVPnj9ppJf?$nx?+&@p#$I5hRDP~7oJenImOz3@^ z{-YaSBDfsf`qOlB3>AaoMmqzv#~>F6=`bM>Y^g8Z!gnsBJK<8ooWyXcihG@%yE4_xPq$GczR_ zt|f$(>SgY8R!TY@0>WiBUV@)q(mai^t)9rck&2IoTQJP|UAKt5KNF4$i0{jT)d}+= z`oi`aa0pV`oAL%OxYFMi+T@?2;-b!}5zqgR3*fgT>7mlWD2Sof>FU*7bY{fkd~yYu>8!Wa8f>gE0)?$v+(3CXI65C~^AzHy^k|Hu8& zJ2_5#e_Kx`_{I+Jzh9Vr@`MX(aFzQiG9QiUMd7K4kt$z)bnmOCLr=iJs-vmdf))dl zpB$73AaPI$w(wE}V8PMKe{cFe5d!d&1clvk>eK1NRJ62fAlV08A8438SZCz|+gNWh z#Fr>d&qpYm>**2(m%EfxZQcqWFuc;GTW|`TqsN+%JZs@h+P>C!N_vzCjTIvh#=)uu zvIF@0w$Mw=Kno{CU)`%e0(+h~=E-@Y{KfcU8c3)G&t(H!g8YAR^Isk$-n@Q&8|IB%c(4t^;6X784nvm&1@C^9wpu^R(CQfLIO2*IyL72bW~A(|U#;&v z&+#^9tB;mo{pFn6008b=Pe1Prpr2YNf^JE2X1t|HEdBkmEwq(D%(6Pjh%d%%p*xY};0vX?{!0)h?^F?>JLZ!I-CvkFxNtt!)8hyZt+<-kTZrJbS;< z!D#v;-JR!2m$@8J2o-uuM73(qM6#f1GWWxUafS~LUDZKyTZ5CPYm-vD89S2`4ow+5 zj~rGPq}~bURARMQdnm7Spxdt!W9eeD#6HSQJ$U7GQv63F5= zV@=Z@bE8szWktn0oT0!zlgxZ*`0sba`n0a7#b%iFeYNXnbW%wT&WICn5k;O4yWLJ= zDb8w&j_k0(YFa0u)3ky7<_*@`vn+tEiAYM``|%N@^BH_|>_jub7gmQS<@3*5CMNof z5!1mSkgt7~R>AY}<8x{x|MS(otGFg--)sCW12)&Wy!CF4db9%R4=AlBudNln^+qyW z1ZEhwCgqUy2cZiB0t96W?5mJ~Si0YuM@e-g#OK!=!y zGh^nUif|j3qodrdQ^qGEMBf=8Xwx7*q!7+bbMtb?r{=F`!8odI?nzFL`<*)kPXQR8 zf;R{qj=ZlWVV3;ghqUVx?3cmJafkPmoy>idadE-SD=!_QBj8a3Xk> zGSl0%K9(wd8cVz@b#Fyo%C&zEk5U`96?J@S|JDpN<8&)arR29JJn~L?4>Se(Zz+KN z5O5m7(!F}AcG6y8k;{0-z-XktfgFW1Mp6`))Zu~w+7ZsPHA%KJNV9up{$i|8)|64r zwqG5!_yP=CaePXIS1^!1;RP0sR#v&tuj5RN39rsa85yK^iANUig13%^*?R4*pqv{U z2bXmWFVK`T5i7R&U1nfujroa_rcj1|4qG%FAd8x{fONqw|PmjTJT7$CgBxHmEa$G4|fdDIL5wSyfN3ZmT0Q3OOB z#NZwNg~MS2Y`SkO8zL^HJD=$V6MSWkirU&I9@Md=wdzP8HOM;q36bV1FQk4vR1Y7< zvUCwM72i>2YWeof^5)G+m2Li5ceT-Vc!D~jh>P{i0`GY z|IKpDHg{9lvIj6KKr90X-4Hh~FZf*+zkk1<7WXFVoIkXLzozfcN}#D=NWTX8!jV@k zyzJUym_U$<2!TXGz&sD8?|XQl5Q(+a4XKf(8!C7WLFb{}s|bYb3l$s1L^~OHs1+0f z;be!AqA8H&f`X2L4hgze9UbbDxdMZ*arf|^i|a0V-u_FPu1DiABHUIpa!MYYM*i#_ zbai%)1{kdn70y{Ha@giDZDLw1k16wd52jmO>2PG>M7S%+By0?If~`UM+?-Vr5XwlP z8>*w<7R2Vsu7`#z9Lc%#n6A59T^*yX)`1Oyum*JL9zV~*3AiBCT zk7>e|qy~C_P!GaRdDN4sE)2gL9`*!FK2@reNY?9Ne>nSBvnx#dOAAc@hpn%Uih7OO z9T0FpVhAOrB!&`@Msnzs5CNqdK}1TVr9mvZI}}h#=@3vl1eB0&5F{ie@8*2>yMNtT zXPtGH>j*Qyd1LQqKd~Jy&~EBbpsNY22e?__WqcE?#x@|X8x9TB=ah zMpqbE7=u~Pk$uPNU*87Rz_z|asT0*Cqt@>NF=x*7?Rn zhd%?d(O4RKf_klmp=FAtikKTD7;H z!wu<&pGho6;$2|jEq7|VuGhrM_Kn##jDC?*~}Zg6kHFRl(G;v^LI3k$VqnUTi9 zlE)5g~9n?1ai>f;HXbpXrUT!u?Xx-SWzWS|%qp%HI zI5{-PS|m|wEAugNSj=~LaNtbpzu}ruSHk3r2nY$mg<&zUXV5&{Y+F-k%^%cMRDdx1 zZNnD62sfu)spm>Qmk@zzqkIP9>d0m) z2O5mB9OqrISU4gDJjXY4=T#l&*+Nsj?%w>tsxWO&83Nh->5>sOs}xb^l&svebkP;# z)57S4l=%ZMiJJxa90o(Bq5N&JGcywEHyuP%d%+9?)aor3H^jt}g!mnEhmi0M@0kGx z%5XNzK<~S&9rZ*>DU3x01ngpBV~~URXJ3X<23g~|JqLtvhz2O8tYhPAXvX7}iy|H5 zljpP=phb>d^Q;uOa;mKM(S_zW@9n~OQr8hk?46FW2h4;T?u`ZSAZ_`bYGzeILFt!k zThDAKZ))iB4=a}@C)(3)yzifNdYuZ#JzWnNLu@AwD7LnG1{^4SPuNp58#l4 z+6_oQiaGo!B*bw53lThxUJ6zv=@1xK_ z&CwL2%qXcL|NYNSVPqi(mY!a%xVV~XPR+OL%Hf0qOgk2C*o<5*>=eu zO-Im@mR-;JRGRoDj>tBxqq8$9BLikTAn%7)nMt4cmqG0}GK73lbmml_s+w8AVI(nS z=h;LcnmM>djttGJ8*>)58@1YruQ3F6n}yl$fA2YrKsAJJ&biTwL*7yWcMOD_eK|Ri zK$uxrWJ4v_=s|b=`lQ)Q?SSJk=i!&|x1d3Vn(7pZXA}5JIMIyA0SJeMh3~*H8H;u1 zj)qDS6~oSPz0~XWDwPNN{{2rx~{XVK+Z8{j!;noTyyJQWV*uqy128+6?3D?OlgP zLJ2Qn1#BKF7$y}KURZ`LO!?dfo34vUVz5ss7^433`GbIjO>2a>O@$bcYpbe6hOa~r zZRHEKvK;WHKI&|0bsYG}vyL`7+}MdB1Z#Jg-h zSW_bw(|H$UkkxVnVsw2p7cROSKiBraW&qeMctNxKj}pJN!30f0TKXJfI)5$id^i`+ zA-Xubvxin8_35K&6a8AqSE5*gK!_Qi8k%ga58`N!)v{sjiN2SGBHs6sfHE0=9?txX z+hYvEz@x;_zyP$`A3r+z_@vtAi_-N$A>7h}frA3h-aj6<5i$URMFW-O)qTguWyX9)L3 zn0Z>^gqpdx@lEVCoV>oLrw7*xP>zSR-YxC7{&K8@4g$y?kN9*6h{Gzxp~8d28{n!z zS+{WdAMFTwZ?GwAfB0w(N_Q@3EH4~<;H%m~Lphn}=IMC|W2%(GuxIYbz^$!T5}1ug zg^@EqTgeIo4_R3xKIe7hY2tM6u^6F7-@oK1C&;=6rb7U+)m_{$Iya8B8}fVF z4nY$E%`b51v>!-?wW?4V1c#2yJ^{D``f0c}&MqPWO=?_l=ie~g#|eG|uo%PHR+v9{ zkj15>(5~&ZaiCh1=%2}>Jb6YmF0$!fS^Lf`_1tBFQx%He0~hC_pGQE|F1FyL4{M!u zq&lqY`;e%f59Y5AfYkuTup&T4*c=tT%+%A@_wm0NW;72^gWsumNqtQktP2HgsF*Dp z-iWqXl!4?L=8TggCh*~b!+J313Z#yuPbLIYlj4Lc_%8`%=rL$B<>7WdDe zhG}6nj4~{;@js0Tg1U^T#Q*qwuzF|gIbf~e&vq@bLGb~crrq~w3401w z{>cCB%)WC?GJAzoAp_m_Tj3yDq#sR9h*vQt0e~3r=1NOZYm4oqux_JSwojZ`#M3^4 zAG_b>Iz9>oj{j!owe2tA3O`sMv#c5y$u-10g^U!N9OzA$6<3ix0U1p`Om=m&9n*lSA-mQ}Dn%YHL0Llpx}!COf$ zuKAsRutLiKxdx=_rzA7{4ie)?a$gm0}HyHXK=Sc|}fFu*#`wV6n8yps$i*qtv}|UUtY} z3)zU(8=9LlVbGG2X-)oo7YI*+>)02Ht5;t}MM)@MI)OF_dd1V z$O-PZupG#$%MIDY#K5r1$AKzm{^OM#tvw!dY_^0S1J9b!GSsr%tkRz~K90pS3tQI7 zZ&W9N1y(t?fc|66M5x0-=O*1j3N0^2xnyKo-?%j2{^I9D7tW#r=n+Xd0t{bOke+G1 zw*)P0%u%ukal^;AbUJ6gM)x^V5Gh&-GUt%0>UeSqquu9Usu^DgJ|pxBWhM$fpdqY) z%Xub;1imcbnQT7g#dLs;B^*c_15oA9I+M|Sbc{E5YI&R964H6!waYO}G()3}zVpEe z=I#6yh5i1k;*E(S+UDDnhQF_;18rnNquc>K7stj=qO(MlcT~ z?#E5;A4Sqtj%{u6wR!saNqIQDriA68KY3Q64fk+z{s$FFp|(+{Do{_sQKYx-2XlM4 zo7>tHoj}I!EX*fiQ$d*b2^yZ9963EbkNzpV@p$#=g35e}I^MON@fe~nM1qeCO?-DM(yp~R|4Opq;zxXJvM(d}MSX zU0hxLw}Kc_C7%7=H-r?^LH6_a{~k0+y824|?E{|S8Ib?b+}u%nzbx+n_6ii9VtrE6 z6}Q?OO0SCl@H6<(=))hYsa>HIf$Bo8MKb&`DA0jK0tA%7L7idF5d16(ErQf38Kv_R z>9fVzqjGh1G!6nI3NG4zyLoxRz`e%BS|BRa6bm^E?Ho9F_ON>^!FCW36NBm3@K&OD zTAvx8L1yOYv~@G*Fax`F7QQUB=L+sF2Vecxc-|w+M#l#UDO=zW>41)iq_`H?X%UH9h^+9%c?1tOY7UkgN>vm;RUN z>;yNHEOGg#Px43*WJ8R^@}rCD=|*#0?+3FeZ*Olncj4bm!Eg*$DV^!*fm~#LAV(>w z7>+n9YU+Wt3qceFFuUSC1~Sj#N%sTLIDjbv{ALGl1C1d90s?@yTX4;bT36lhu%E+e z6A^)b_5ys}Y4OtSngqntHZF|Ejg8YZ3yMB`fQ$DN)NP2cR#49T8XH?ZIIgR$y^z;* zLJ(HAO%qstf(pNUiE`~pH$XEtjjF#~R#1qJi__E6a)u_#j*gCL_kS*T zM~zp2k6p0BAT70*+G(K}AF8$sXG1%?0911C64bed@d*Gw$H$}d;9&u0i~eczQZb3q zn9nT~=Eb*`Q1)u0n_xd4@lB9h0EinfH4yRHVq;~66pjmpM45@QPnrMu89Qa_(F{?ly z+|>mEa<8Z4fRYH8Tpcd)W&$v-K~6F_2)*zZ|G3oSYPWjle0CksYI zg^|OX2hezf!O+K_({b5oV5q~A1ZMTypO$oe1OTZ?0AdA&#RWn{gx5ML9E7??NeOAM zu(TM1;TRoueVf{gr!PDZg8Nur+Yyp~YK&-0$nqK+{mjhF<|Rum%f>Il$8oRbi(~0@ z6fT)HaMu`ufM-aiUG%8?w;AioD{;JD0cXVYVVj7R;n~-h@D2J(F<`(w-N90+T&yhQ zj=lj2FiHVK?e6Y|b-)x!YkMz&yZc^ITz^yjg=pv9QdUbbM38m?GX+M7fa-wi=(FT4 z+j(tZ=%u6_LqW8%cjP^>2$+&r!x{Wr+nCBWrZuit9PHXIG;M%K02qe`8qjdJAuSZz z5KTe4ruUT+)dHBu9(8&i8oD)`if4~ViVA-N;R}vrFqj?Q??@$51ViU$GkC*w2gU|Z z6`=lRQ5ksfKR>_r7GUx~+JSco`&FJ~YU^LZ(_9F|kW{)xNKE|k*(e?&)BYFyKzK~_ zR!3~MtrzYYK(KGR)B(SP6a#1FfFayZalN%U=&p7Ke+jsjSDI6xB!+85|}Q}F}N zNPZ!qxR@C7mp8~Ufc`@%2-d;WFXvs!u4_}ciyJE{ww-Qtc(o)QaDyM1z998NFoLcMd>~|&V@jy4TTEj)vG{_}!?I%t1pGz#T0TRDi|h<>1|0&ivcA6SDRE#e`w`s*1}recILsqu_j0x-S1O(9 zU0GQH;m-Upd#^>ASyYYeAD-Cw__oq?@XY~B_|QtlI2et=-i7>4_F7vkTaA^~RruJV zfKE1a$3ow9#;Rv@waXOyMP7z`rR zI+sONLhl*q($MHcxY+hD0gxcW_#No{Y8@hCs20fQ3D34GGk|g*IKtBWx?=+a+aRk1 zbC5vp--clNkFxMJ__j9 zYg-16g+Bnsg?d{^<3X6x!dF^ovf#*t!uA9*Q_?hT|0D8s5cIXg4!SP)H9!ayOclWn zYEjA{^<7Jx#t9km6i~LIp7*Sl`UuxMJv}IF{yWAk+h4)Ans^@AW3y8$Wcy5l9@05r zzzDQUhy|M^6?=jmTnaJ~sQ+P93LPOL0LpWKrC>-2_a9R*7$YpWsYgBW_dhQxY5X-c zH3gp-%8vGvxE3hNgu`$c+1U#~Wdb?!P-};Fzp?%|(;Rf6@0+EWLlynJ4{5+KYBS)) z0p&Hs>w?nCYm$Dzq71S`*5J0;Ccn2J9|wvFASS{T80aXIe?I^R9m*rV_TOM_UG$Sv zB^stq$;toqrS!KwiUC=wh&I?Z-Z+H;OeHP>CJAYc}8=ES}~ByeL1vMo6-=vSOK1#S^2Y`shd&0Z$C> z0Qij{7WyphWwkf`$j~|XJLn0aC~G5McuPeX3Y!@Ey*4iYa7{;D+D!{f=C-| z6vH&e8G~VN3t+qzIgo>IrSujSdNr6}ka?egzMu12DstyD(dYl=0z9%NTb{b`(|-66 z;=zpilkDjF3TM06n$4sRve70`TgdYECfufG3=lcx`2OHL2XsN%=(etin@;w2c8Op{ z1=`j=oLy|3|I9r>WTo9|4YEaI*32hV=pTD&Xq? zZ5R}#jS%xu|C>2o7Wrtb{M*CNCe_Z*`{ia>2LJ`a$GCYE6KLWKaM!-QIo`?q)$hvyg9v-h~*OYYb->-!wSY1uE z7BUf>jRxSO*xp)_Dfsa8%r?VU7-Z=ey*U?&K_LW7mgrcvI2rwW1vX0mWI|BMi!*9SydqF$qN8CP?6Iz;by+R z#i??wIlfnm+nxX|4Y!Z7k*P#Cp6!(s_wXX}`)(isg#)F}AL78X`jF~~tYMAi>ot$s#X3LNcN z7FiUIHif)43^^%qwdDh;q81s0ak8?rU7VefmPFVcM+J-lZbOtAkO2qLdhG?5Ag2gW z8RPylpES*b^@@Jz%QoTM@H^=3?ymFP&TclFv0*QRbl?vV=LwqehK97ThobmI3=UPY ziNMN-q8YqH?n4<3Y&T~td#&NpfR|s+6j;&?kYTLp2&*zGRSsM*h(ivn?JA=LHOS@h zF@*ehD3lBe3kQXisb91hzFhPZOh)EBJmW{!6p*WXNA5*8ZgO#vD?EYAv1nAkWCWJs z@u{C-yyfE0Po1PVFjki0;8=w$?I*|jy|WXyp$C0p)=ZnxUj;isV+deEmusA88+lm@ z1r;&{l~@+-XjTud?rijnTXni*@^2qSywNf;k`NQiv*#>g!$SmUP2g#jQY(Og!3FRP z0J^9@i88qIWMo`Mz>UO5#n(0vlLfa17YD~P2ocavco%D31F3OvCa;IL8j8SI2QU@n ztH4}_CWBv@c-e23Kjmc`l!liXd`f|24}~3^LPdo%>hk!3jFA?6+bogUU!6$RG?|_& zJVltv(yAgAQPdhXdOukVFTW)as;(zO#A3^%$9!aIgD%MUb01iLUjw)--E%GiU>(rc zhJ;agHNc%Q1t-S%hi!&8FusL!I=vB77)fIz0Pw9bAM_$4{t4}KbREW3n9OL*QHHM# z>=OW&9UU6H#mC1dB*`P+K?6_7kW3yDz21B^PvW59OwS5N1wQe(x8E|DT|6Rpl?m&8 zw>d3fq5)(wOo#x-o6mFsaq44hI=HYyr}sNF4{CmsoDA2|+vsTKZcuw08ySHc^~;wp z;jja06G(Oej;nt%uXw>(7-^X;=7%?^#h7YpAnJSM z=B}aPWa4+{F)x!mNZ-VSQzzW zi|xX0UP9-+(V>al{dy!;aygI@It!yZ51!#GH3Hdasr^w)xC8*o0E1@pvNy_7VEA~j zyIT*(>_y`t4UYSuwJh$OFHf8aqI+(?DP%}!YmFm2TI*gkV7HJ()2A4cp(@N)ER=%! zH8g3dac3Mz$v<{?2cwN+SuW(5?5l3&n(V6Ob{|+m?!4KxAxdhgQ~O=t{H#;xU;dQY z4|xUr%N%pP!w5 zF#!oi{dTLp0Id$?>LxcXQy*w>0RM4qBEM10Jc~v+`_{0-ED$>Mg=tBVL7!WZ%vd$X z8*pOA#py3BExx{^jtOQ-(;QxPZ?n3;W2?GoRZ$Ijoi zdl?9xsZx1e!ca)u!j08ZRo;?gj3rZ@UBVxS8qp7!DP<<#(k}J^G}jqm3`$TzCEAGMZX}bgMIv!5wdZ>Bn&j$$9t5+`# zhXy$zltVM2eeGw`(8?=@x!lN-Kf$KcL@z~p_px3J1=zEnG)cdCF#FUhM`Pp2-|#2` z(n#4@JYOK0-pD8i+80tuPP^X#MBK^grqr<#U`BBN9&ApVK6r3ERMFa0Edgo-6gC1o z5rJ^S#zvr2u@I;h2mi)RNXY~~^X{_LK@AjHmmRCX4YK6jJA?c8RW&q>zikvdgM1XO zfZo17r$FhvJvPuJg0&&|Mu4B!e~+7Z^Jpp{_#`yMS(>7VCLd8PnZDZ-l{(>LyK4IV z2haH){-Ng$W35jih)OP&zjCM!OLy$NndkX;XOJA6U5}!?KVU*uZg|fc0IIYj= zgQ9tUIBhe6J-ws1*Y{|(09RI&zuxnqmG-wESHIVD_Gt{JSeXy5J}sgmpBYg`3~m15 z2t@%{bL&CnWuI2yXF**YZCwMNb$$n|!S!cHYruK~HGE%pcTq`6e@91VESws>TS`|S z$!kwkK7t&sVF+-WtIv8&&K#M|hz#Cp7IGkbJ?1EHHrkFCx+I6&>-dI|o15Efh=k+) z`1z7{X%peDD7NdhhIS$pHVRu6D-VH`;x?0bD#-Kv@`?(e{{iR%?dBfi73Ufw2x`qn3kwMW#btV=@xl=1{{4rK9vK@L znE44`d+`kf%s+lWK>GMgM!U~6sA4sQ^>aJiJ3cP-OvzcPAkgd>~Sl}p?qjuVVBC>;a^CsnjN zB4AURP;(dS^McsG_6==a1-(HWJrqt<;AIlx7;Ljk;j|4VrvJ@;9zt(>4IC38dJZ^7 zP*FkQ1LWH>lbJLQUf#GG+Q*-R!8KyQz8X+aAjz^E&W4)}JP+`+NSC#HrUG z+*0mt{soBL*_j{AUIHk0FY=PW4C)k^yn7}7r&Gtda793rO9QlT&!0cvO1r>Ook0Zx z7#iF`5Q0Q{(LKTI+4Bxb=12=m%N*`*K<**VYq)zB2QuJd$)-&<@6GbR~vHIe{?ERY*oz51P97yg}1A&5Lm=?x`Fo! zG%Ao$&ZY|`B{*7TqXDD@M;aJqfw7mpJ%`l%KPZv2(TY*o!8BRCf(!R-6HPY~kA{U) zOvuj0lbR#lhIWX=7+&9OK_1%;Q^RF`7I3F`(WL>bav-s`2T)K3|C4QR`&koc0slPq zUvm~U@!k7*+iB*%G)sU@0m6Xd6S_vIsuL5b09{R}2`d$OX^ko2{p)HY}=3WNt%2Z%cnr$Op;{RjPz< za1%Iv{{Id{mduQ|&u(qa;o=)qF>bai%b=JjqVQx9=3lErluG-Ryw_Ch`n zoJ+4xK2C3LuC3h$Cqm$R4?#rC@1l~naRrbjzxq_u8XTWb-T!+0;F>{2wA|LNq7 zxEmhlYm)+}FVbC#>^mBL2Cay_9p<7(#>XMeXA>I%G^K>56KfzY{%tF1JSrSoJ-Jw0 z5xR{q0{ZV2fR2P61aAPSWU!V2oy7m4{W(x+=RWRjLp_M8f@QfZS3P$bISc-fdfM9C zAmDU@0_y1mAfbyFW}47_0UgK$XyF$ZuLOSG!|L*}cQPHxxd=iPx&TxlO2^pChHN0B z*{6A>daVV0*H*p;km^ zx}-NqGIg}HwjlI!_0{7xz@T9&4N|WQe)MwM)5g<3kI&bd&K!)AO5UVA%H%+hVJwNy zlgje?^{wdtqz~h-y#2fTS}7iZ1K#UOer4B3ey8n07Z1q#9jSi{7xy#tn-KNN18{-M zrKoMNfrK^~u5s9aCSI#~$44p;lOf#}UV*4Cn14d_t%^!gS{h`*Sjv^py~)hP&yNU7 zz>1n7NgH(Th&jD=??C2a+)YFT;1D25B$ZZuG_J5Gz@n<1-n$sg7Z-T|VQKmsS8_2g z&p7%~Fy*t;yJtAn25=Tprv~%<(hg^C-~fw~BO_9V{rB5}KLwhEZZ;RRrQB#z)#hG< zJJoi|3gT&nILw*@vpGtq910PDVL}`2I9a>5lW~61^^*zJ0!0Tjg{J36Bc}hl^!@&I zo3`~|jRTvup1yEo)Tr<69iGkIUf-v-=Et9Q>_&D?*Ex@xm3+rtcv{t5y+}huY+B}I zefFJZfj58tm-qZHq;Z-@K|$|OW&npdL_Ox)!<^UAQT+mMI+zV(fVB1xwdn!9{@@A~ zjDj>&ifh-vG|m@Pc3?&WzBHP@8_YTk2|{o3Gh>T%4<|U@rA3}Sc-i=t<$YP1HiZIx zVT4?CObj^wkBp8UMwEwYL!aq??x(s6=oiCRwub@$Ylbf5yE5OF3+>Mge3)^-?O(-b zcxmd}Kh}Qi?Q2U+1PB}i6HaDPOEjJg0V3ehV;PgQpUKgw^5qqR3Ilhq78On}69LTL zBs~MN-bP45N8+6L`JdFUmB;|TN!fJx4SK?hEDL1TohdBn`Szi!I$IKHdbaRZ31;ik z^4=i_9YBj|^R%&H15_7Q?$=n4p6cYkIz8p6FAH&fNd;>zBnkPaSx;YSaRw~1cdPQl zDx{s1#IuQ2E1ugPEH}*}KB7$avt=hlPdlw>kVZh#iFW1GHxZ!~=XDgIHL1 z@PPTx%ZKwG&rx?WTPiUz7aj6($FLKD_&z0l(1p91 z_sXvc!zfR|6>ElgYo~tP<>c+FK#a(=Btsx3hKzRv$o)#%m-jfOfR&@Ghl?G+NP)|u z7Tsy3s-`ADMd;O#?k<2q3Tarnv_pX7sb9V~mBZdtp5LtA^NkPclso+(CvkkD1RN0z@eBxxxkF_^HrQ8FpSC2`StVXw^$BEw*LNeBd#DAd z`f9F3vp}at#Pn58Xj>hmt{}Z?YG=oaxdjShmehI@Idnc~ukhQP z_vv{44VTexVFVC}^+%<9gjEHPHTYLpUh{69g_xHp>c+TbjM*RVQwEg{Sx(9f#=pzS zFjME-S-G)pMMpSgMr5hJDY*Lpg#)8GlD9CcPfF^PqQrSF6e+OhTDOZ2M5;AENOOA! z_DEpVH(*CNE#`P|R_^#2jG$qI>2= zY>g=yAwLs^4hGE_jP02)qX8flchUwV4H^RD%keU#<$`-}h?Z5@`z0 z?)XGJBm=GoCpC;Xj}{G{wDHu2O@7><)HgOJVv1VVHQ43!_x0Jmr9yjK))m^TQ%?%cdj82*Y>;!mGg#h%aCu;`i~L)X7#W%;^rM{m-wM9%3R*xIa;$ z5l9SD7D29RuaHcQkU?BtI*ryRlRWMeNi(jm- zuZQeG!+3aD7cA=1PvOlhR|xL&AZ3eiWs$Yk%z%!ms)t-IQwVn8V+%$_@wK4HvH7u3 z+8BH+k&HADfB0810LK%P>nkGAQ|+=S)qEQ~mRdZPyKJsH-mOkDAkC|t zd7tPJTk9`0ugT_1Ac5dqY+v|JCAqNUQj<&GNmbLc7iXslj5rAL7P52V*G;1Be_x+> zx5kC6CTih4pS*lt<G#bre3kA-~}vD8Pz%h*YCenqq5+2~;0S;J{stWh$0wY$Ft3A~9}e3`5|PZ-FBy?pV{FQ1 z;Y?XU@x459yo2A-!s^JjWIX;BlpG;rKrjLu!OB8cGnQ_Y60ZLj{;|btf}D4Miqkya!uKgmhomgqG3Uep}Tsd*B*EHp1YBq{PXv@bh6x! zZTwERE!oQRyh*xMiV~IT7O>fX$-h4Oef!3@wI70dLxRQjR1U#2Gpua*N@3Z@xp(zW zzjhBf=PH$q(7ps~!Mponv=51(3k%M>1DCD9`zt$VrN-Y^Q*^fkK93bBB_Q&su;W@v zgcke+KW%MC|KMLE;-a>~T+KgK)AaQ8 zCPlaqyfXG@|Bhfm1W$54phEDHMUFW~z-R*IAy85S$zAXK`sMcTw+zW?Y{=@Z8JK)q zqxBqlRk2tT&B(k$EP`>~y+<+;VGx+behQQfj3&x_Z|B8^JtRZEZYOVS;2n*d;`CSu z=*@I&NsC_(36zk$`%|NY<7-9Mn%qH~B@+dk`*bP`(j94;QqqY_4CeETh-DM0h zox!NulEN?UGhhtIP5xtY(ihBUU>5t}{@AIXKY(Bk4n_UT-e434_B6x4vzRU>7O*BA z+`rh#aik?DTVw%V;Rc?Uqoa0J2gaGsYYDWKg(DoRf~NWQN_81YTMgl@{E`7(8n3px5|{216(^!QfFIa?igr z4qgW{K4Vp9OTB{(5xGnZ)+|^=LHxJ>Bx46-o^97V&FB|e8sQ)6v1W2$Y2b%E5_}mF zh-MXJc{Im>3Gaui-p8XZ?bOZbObV9*38&oeiXQ(mAtLPWZytpLC*0Mrv2*4o+J7Ej zb@h0&Nm@{F7xJV)JE$5BlU18CgI%wN_W2}WEmBiw#llR^4`Q|)yaxfafcsDVJ8{~- zf6w-ZlvPx~3mcv(Oo4^;d@ZIulYD6Aw5v&!CuSjKqBXpG+N1Ks* z8O=Jld-chzciS#rYT0pl1I2G0tZzT0d2iPRj|q(OQ)yk*!$&_4ph2QlW%RCU=m}|j zqnbCPkffMUjb$K)Qc~3(0>T%I-#YO3iq5uMs!fk3e@OTyJy|PZIlKGr5+>2&N66;3 zr$p@FAxGTH+@>afGqcR<>S}Ne1-D0wGUez6us4m52luSnx;mKU4DXYYVxZoH(|_O> zy~io=H9+urw6_L)XrN$1SDu_-W}eCw^#d8^Xy8tC<)<dMfVFiAN#44%ee zk~ls&JRA?6d+_Vv{diCKdV0dZ>cTr(+js%bCWtddYoFtt4W@wZ8c*Z^7RGgs z=0Op8Gk*MVCZ;#5G|mMdmkwDdDw%>Y;rOAVsUeo%T6(C#)n7#?q;sdG$9g!ZcmD=e zQS+Lzp6*>eA|T0ga?|FSX;`*|vfTZ$bS;t9e?cFHYMvx8qV9(P~Gfvlb2 zll8%cReX}?I*;01{6$|}6&Q&Z4b~AC740ZYQBze#GC3IBalQRN&KhOq-(KK3Rn=Vx zg9_lpU0z<^oNAzD`kGwGtj55c-Lk&UOc40xmR2@e4W8egc!Os2-n$vy+}+oAI}6EG zG|4n>Wh#&)xiIVO)-SBa9Q!f#7+dR`7k`kY2>Dy?qNn}Qq;Bcp9|{vo=3$}MLphO; zz`zjlfsPJyy@EMZ3vYRwGNYOGgB)LP$2<_#hWu}Eqot0-#=qgTQeMdfw^++ysBc(E9*)M> zLbh<(F-i{~l7uBNXA#oS)zi?utMDzECR*tJyMx=?*uqhO#6YkGc)Cc9NEpZY`FwRB z`*^+@vR$dt-q>;%@ufXyf0&n-ETMDX(yzNYlyJIa&p_PmPxrWhr^qP6qub>GVkq6G#AFJC@dUS5I-Kc+ww3lgJB z?tQo(3VN0ru=Bfd!xF@E;P+5<_pEXMm%}vZtxTcIr!?_o8kAY{pip?W_fsFfSW^fW z7JU+{EPszCHYRi8elKOxe!P`RGz?dmcc!zs%a?Fjm}Si>ip{OUEe+3DrUG(jdfufB zU$3k+XQL5KU1=}Oe-EHia`rpUD}%vO`d8T;KAF8GGLQGgr!B{Vehw(+$Sfc)dc4*q zdul~3ZktLj#WzR!fZdm!{j}9Y88MO0bb2Tw>!DNHIsw2J2pd2oT?1p5_4MY3XfR?r zI3Ag3WL4MD=!NSSep2i!26hzYKYIO2M@Kk15~kU}Gg-<7yBrDy1#B{T4yq4ttqlue z+`Q6EN(9&ju1n_*w>A0UoV6>NKfj73<#7-vy=xs*P}%%UWS#KGi)ijTZ$K?rv}vfQ zww^W2KD)xLk)EkfN=u~@4XqxK@PQ2hTo@p{K?sDm_j2;c8hCpHl@nlxp8o!(lm^gE z^nesgR9qa4QU^e{v%>4&T0Ril`=>lKubx%q+G1wrTdTC(7*@l0D`Vy94o9_Xzn(Wc zUbPr2+-fE-QQ=JWxlgZ4{_xTjA&s)LN5%FAx@GwflMCNR=D$mZCk%3z!b12n8g4q9 zVNq@~xw#zHhwgwGL#LOdAoKq+0zgb9CpSvL{*%$aP?WWw`!{JNLP-A(?X6w^yD|Iv zb$=^j;$JvkV6MPTm_9!{(0&O4Zy#YDcLs%OQcZ#PK59K6FH&Y+`?)7 z51l=dDQBRAkfYvY6EHj=fnDGc(AqZc4yxfl>7?jqxsS9^Xt_=h$jCVCSwr{1oZ;57 z4hmP6qSf+ue0OLNKfWGpYi&J^=ED3!f+A6TVVv2_g2%-f8Iwu!z2cgQ^nmP6ue6&Dn9036 z{Tnj=|Gu*`ywuuKI#<2iw)|CKdb{SjUk2~Y4&I5>w@v+61g&MZxd%ZD{%Nh69W*Y0 z&BF8^igjS+Zi-NFMq0pPgfOE{D{RMoK18v~(B=VHU(e3JmR`E@6p$G@gbv7$<<@b1@gp3_pWtT>f?ynu-(9_eSkVTP_Wn$|gf@)H}^W;)Q2fv@s ziNzq0jNyoK$1yoH6UveqIg8d8{d4W+S95DYM@9;K4@?7mp>lo<4vdI zS9t5U2Gw{aA+PSON88gJAjQ5EnKGj^SSxK2!eXLewG_!2NQ{myPgB=kVtTxO({Ucm$YIG)gvH zZgmmIf0dOk8-4A+7chNcZU8gG4;$+R_P@Y00wB8-;A+A^EjAX137i=L?geNv!cXxf zgYc_z{A8KTt?$>E9Aj8j%8N%-%1wqlql?LTzUA(U@%U0ccUd6K{gNxVzd5%u9yp^H zEF(&y5JdhA5*4#DtFt0pUGQJfDx2|W|RGgD3L+@+XeZTZDM%5yFCy-H{K4>ccH z5wGYakASOn4pK;eFyM0(9-pkdOOXdA48U-LdIX5D_`ACb+EIfK*VfiRFHHaP20LD} zrw;R%(&=e)^QsvHF*r5f2*S6f4eYPDil4x@@h{5%EIh-HaU8 z8=2*d+paO6)p9L=Ys71>)xWzPos?teem3>ah} zxjp%t&{PaERYyl|F0L2qnt)k>^>nJ3Yun~QhP3}#5Q&tXz5Vt-A0QO-8|^oc=Ot>m zxIiN51+Cj}0f*V;?iFv+knvnWCKXcd@lDRSO;5qn9MtDuYPhlie4=4kp~XVx@?0`= z`$`HY#Vxg4OFVXVjT*`g-xh)`|8occ-Ed;RiI2GclZ`e-ZDEnIfKblxAbwh?`pPxq z-MzHV6I6%a_K!T@ypH#lQs=#*Ryj(6({djtyA2SxJAQv-mX>UU zX=pGYsD@!$|FUb{WMsCM>hbY0%|-2ust$-1|f!vcw^IeeD;*Nl`uS(`Q~Mv1j%<~*Qw~8E@2XM%u5!vzO&8IxjNMB z9;H6}PrriZtZD9#o`LWWX0B8I%)ZY*ILguQ`#X;8noQ6t%`-GF) z0i=XAi{uzA+D`~9L|x?S1Al^yqY%H3v*&O6d=sLn1E1LCz6ijf5DKYoPx3UPY)6@`LJleWLIi0@6o=<`?oZycTZ-!{!&K0lz#MMCv-U@@;rlm;L7=pxOiWU z--jyS3pMZJYP5=^P_jE+XCTrzBK%!G{*jdy)a6%26?R{*^~a<6?r<9CR5R zSIMe0zY=Owj7ZoFfeHW=_n#$gT1d6Y$m(sXIbzm;m7_jcu%A+TDG72TZY7|ysg8Zq zw~F{=YgBp}DY}LgmYU5)_ehu(r?fGQ%&}U^Olx0pf{XvHc9`)2oeZ!DAeHa#@BjL< zFC-z#e$NplO-tp|5PT&}K^9mXu#}63I=v*{9a-{!UN5+VG0Y8QJlQ$EG<`hwndDc( zzN5=(zb z-by;vM>Lb!4Il81Z73~;`GI9aYMsu#dtfnH8hRNn@PSn~m?SxP_Q+e+I2p(=3E+}O z1a>%v<1#L+Yio5auWbk=P<;RLdMd|kDOT8*UN+fE*cL(>^73h3DymTM4`XBbJDWVd zn=$&U%!ma=kQ4ThG0%CEb7ux=`Xbc3c{H&}EB>{y26m}pl32X^uUhwuP_7Gg7$mQ= zv(Nw2>#5-tmhZv4Nf{Y@DZP2yttZGJTE(XOEoZC~9*xZt0xLn~n@xYG&wWc*z3(Zb zo@0|4ZWCf5BrC4hdtwblNd`h_CW_1{Ifq)^1oy`E2$$%8EM&`W)Y4E>K}Z-l(Qm?m zJs|MUS7!Kx65tMRP+7oNiy^CQF#1@@&h!E&ivODJ9aH}J-QMSaqrAnZ*7TnTLX7aI z@x|R|l2|1pn+NZo2e1&}HB7~4nCcngV*wR_xDJLyolaFsIe`y9Ak!h79aDYyq~>+n zKL;KqCrr)Xnb&WOl`PcxT5#mlkza8T@@Om^sV}BNU|_->56~09fUZInOk>C{yqo^z zMh@h!=48S%Yh=iy_hU;Rp@WsbjV7}Q-_2`!YQNE|7W3W)pNtcWfGHO!CFL=)Z{yUt zon%+g1P2@wcYjb8de6I$ z(L*}W1*7t ze0b#I-OFRUGv`tRLYq=p?Z6dpn|*Lb(>N}RgyE(1(Mrx|akFf>);3hL$bwn7tg}|c zG}GRx|DzWF!#c~E5(X@;aM}U}pL4YPF~#Xi|9f{8hVBLm6~AAfOhc(-USfh#VGu3F z8xmFp>lRRcQ2HJnd1+HjZk#tY9KU+KCcYVbp6c4&lSz!%5QM-bTh}X&wvSWZSAFHk zRZhWfQZ?EqZpfZuY^!^qG3WTVGi5*Dk*>Xn#eP#UvxIY*~S@a9Fg=<;$du-jGde-Yq zG8#L7FCVEZRkD{kEo0uxirxrbI3x8I04}4wC6%I_Tx&F|+JAXTybZg96ZrmiOWd(m zF|Gk^Sy9W)-m&6tK3r0(fvdRAalRj**dpK%|cWzIT#ew1wXNzx%_da$kflz}wW)u}p) z`qe<)IOV%@;*%3+%;~;dZs8%#Yu9WBzk_FDsF<@M|F(Jaktd1WRF)z+&+ad><=TnFcyq&iN+-KY zyxP8SofWH`*G_zG?rFQ7MXCq{ek3BG-lQHs1Orns_(@e&2TWt$+*@wg-QZDNTx`_nQ)6xTYJMTGkFb}Q>~UY)`2Cza?pEF; z590rHS8fUPX5ZJTi;3mNH5CiMwxyV(G~aUP=Wn65jM8q+yxHx}cCUuqPL|{@umhm1#`wdDBma4Z9ti*SKgz zXZ1TCp2NHh`?I}s*VG_E@R=Q4n%lIeVPO!F^X$TU z9LkIhb+0=kQYqHm@y6B8<{J_vV$5~k24qY)dBHAS90x8$Kgo$a4lg&B-LU8k%doxO z=vr*{dyN`K&!>^+}8IQgHNPuF7IXWd*ilK%JougOy?U)@bW$Zm+$lE zpL|ikxCP~W_aTWp{{v*FVzZTQfRO@DLrVYcf|>lN?RnnR`{zk%v4PCNocK~hoE(CA zIjA(eWT-%THd?P<+Lk05nt?F^#bMQ(%y)~oGHZ(n*QIrOQ zWMXj$8G0@g;QCRwZ*#j1|fFh!!kMD^EyuJ%%Ve9nhkvv)b& z*-aTf@o~TL5}sPO^?0J6!P|2$k?)&ktMA4E*&hs4)p z2~|JRTm1Ml>n|n+9XGqX)2~7=Ns^Fm{;HKuzv=td#FgHw30g>FCi>U9ssKif4GqO? zmLU+IDl0FtI*1vpdXt5~iKA}Wh^Oj2$Vy)W$uxH5CN4q!D+e8A4jfm7hce%87Oqh9 z`$ZHeCeHJTv>LU$8@16biKp^I905O5Fon^Q$)o&ZTqWdNbvEeLKzRh(0AO>8ErWgm z9vm!&$M*L4ctKJbcQ_VB`+9wN(A!zJBAIRrh>Vd5(Xac6UfiC{%rt z*^c{zQM*+79$%{TRVpo;>q73?aL&!3zH% zbd)oH95!qgDiaXg&d?M{aBUMCB5$c}3GBM}yHzV_suS!pc)EXqz8fm!o!im&95N8G z3Yv@8^pfH{a`(;Z^|AAEV`YL-Z*H&V*uK`_$eo!G)UdIBQSJH1DE1&SdXlfZW=7qX zrmtqkh~Q=eN6J`r?BFEEg-DLD70#_IAsC3W01o7ywwIPVA8FA7}zHrb)A{}a4t|M7^@YyJWkwbxxs`z6u z3(k?3Hwm5S7b;y>OBagX>sMIEJllC2HqX~*)tbdbs=JL^`P7eh&kKY_8aH3Kn|fxH zt=-%-!Am>3nrV;Mv{UcZ5JT})+E_pKcUiGj&v<(QZ%wXA%%Ha;-$dq959kW6a@~Uv z%I%J~H=fbqF)j4*S^@TT3Y=cI`)w7B9C~+e%rk zKTDEsC~^1k41oaW%ApS!`B2_8QD-Ad72wEwrF&=*m4BbHbE#`S0iz0$W@40h^F4fo zLqc@XG!@fFJY`2u&yJtQZ`$cKRfjm*r55w?M+Z~(e@Qs#wo=5s>GyW8-nrAgu!u8) zVsf_HBy8}7R?P;10KZt&wP>h3L2EDEBw5DOUE4}|3e+S}`5w^vFQr5iyc3abGw)h^ z8;d~(={Qk^-ZV-0Lqx3l+cbvKvgWT_jD~UUU7fxVlbbrKlIA(ntieG24#i}F;?;}~ zo%erAdk=T2|NnpdL`FtNQpij=LdLQ8DdHG$C?lgXD|=>_Rmun_yNnzXuOlO}i=snz zb+XA0k-dHI=l!{Uf5ETI^?F@b^Le2adXrJkH@=bU#+=s=TOV-0q|y3OC-c8UAPQ z{riW#fK(4@NKyK?qx3i54Kr+bR@1>=&o>J`BK0lId0E|j=0INFLTY?0_OknD<1)>? z75AOYv90Lf-y2=c6nZ~#8fDoGU#5+kjSznOSH^$$iv=bsa*&8w>hd>?dG5Jddu^`I z4-e?M4{A^B3)hxG13kDK7rlNx3AsoB2Liu-a@OT1=zE@$lh4NqB%k*3ZXnfv&m%cR zl5(RAE&dBf3b!^`N(3(5{5tH5t6z(2kukVN4vuXOUt8yN0$!{ z8q{~U+|55D9=>OMS77+^+VY~}fqRj?fQ(eGQ@9Sn%hT`LDYS`rjy>h*+bV%Tzf@KX z(ka$3}^>OOi}9<<`s)&*}rbu@vTFV$!+$^I%UJ<)n>ZS z(g}9@_1b&3!nhum~y*=$ioR>kjR*P90ns)r*1fMN5xk?zWvqf zBojjR%;l1F^sF33qyphoOe|hV`nBEUqgG3EI=%J=uG5xXm%?U>Y>zgMHU~3DG=lrY zoGluy2J=4)*iF2UqLl}S}N)34uu`x&oNv+QBlb*d}dzey2yrG z=Y3wwzQ|lZ9hkr)lV(HlbBw>{zR;&AW|bg0et(@uidnph!EazRWs6Ds>)TRNM>cLo zYDheI#)WmOZh3UUZRfORl35TiLI@0i)hNB$m1sZd*yJ+R-W~NardL+q>D2gsf2x8_xAmpZb9O_+zSi=S zO7WQ>cy!7zP$2o0P9ZiuCdNl}xXRy=WO1S0RW0_PLvuu;`*ld-6J02dl z+PYpwX=&|*zIA?;h;0P=0-VE8-K*FMU~KuYWM2`u@rNuhzx;qb208S&Vf9o}&;^l5 zweC*EY%f-f;omdtUIe$2nhWl{s?R7jREE0vU$SG$SKsm_v}s`+@0<{Mc$nOFn0+-g zH@7y|b? z<}2^v+;kHFn+JVnjhr0qE>=Gd{l^BDN|BiM2drn$UeR5as@-5OT{rS`x7)lZi&x|` z{FPH};Y_5iA7sT+=(E2hUf{ZH)WZDz>k?tB%O+5Hr+$6X+D>==G~%?h|0WjptsuGg zy)#qZ%+!>uwPw@AkZaL;b_gIxcnLTkvXoVoU%M@Tm*>w14eI)~Udo2yL!)IeN(f4T)hR zzUI1nl5gaNUtbfMx?|whHPb#YN$hIaWx^8_f{2RhU`Gy8sUW#p9d>jG2BxIKXEUcr zzP8Xwcti?@zvooh^O_^kN zx9a}{9T{brrXu(YN-O`|>~37`bU&nhW7_AQk`g@6boeGMJ^m~1c<^x%gjM{<%-fRG zHm9LBpabYma_8hI8J};u)cRM~E#)ls^{tl;arLwCP*85xSrkUz`WmbBmSj)Y0 zLf>OV;LqU2F>*Wl!hh9&!9Ek3B7;>8P`sd~3M&4zlH7oA+SxA#-yR)-% z`E#Rmi-?L|vKy?u#qStW8~KkP4XFZaSrM^)Im++N@W~rH7oRek>@qY{B(V>C!|8ib zt&mDZ1p0b5vPSbz?{C|>VMLm)adsNedv|Gf7+%K+Y;aH^PhUu~uX93I@u2_C3@o!7 zCBG1~->jRp97Fdyum3Q!9Raiux>rHM$Z@$QH^2?_eZjI2+px)K6{qVgVCNlSe|zE}!Q9~#^;jAWkh_)uQ%_2ubl z$iKGN5F>&l-}8xIp;!n_B5v-<%bfsAyh=;c5lWU12`4!8V*h-%a7$w^}e%j z7BA$7K7(G;xRj}u&(qh+nHp0Av_)M7SvyyEEb>TpvnGG1ls) z>kF|z1JX9WuyEE;l*;xhOrb!c4jwBXum_0i*5+ncGc{kOq=Oy{mak?hcA))}25nDb zM6~+$jo^Wcv-a1eikQNs9Ii!nOiX*P?95Ibc6??C(|fr?Gh=Vn2AS0`k@H-$@)SRt z-122o`P?6DGO^?M>ZX&rZ}x#}NHyq_K+d?azCMMISIa0QD{Fyo6cqH*(`qc5LPHeJ zH4?qefmH))0^~Hgl8I8Bb%5_OV+%^G9|bA6*pSmemBUa~xBFgj%90G1U*dH3)Zs3L z9>F!|v{nvVtl)%ssgHtezxC8`>X(n2B;WF~R!{54iV{u|PNVHOwNGyyXOa+|_n$d- z&2ZvuvNHBV+JY7pXFgM3A+HSdM~r z*gBv2zRpY5{635Wce&i}w(p&tOZsM0lWCu}xu4T2pA>s_FYkAsh!v;K#+GmKr-N2} zn6cAQj81K?FZ3A%zn6DRO9-TK-Y< zPfj^-C=|MjtlDDQ>~_c5oFu$`Ec(DkzgX8L$}W?gsxW zMlLx}nz^H8=5skwCm;C8z*zxx9!s8gFx|z)3(@M7e?jCK@VOD~_je)*^KV;_18&za z$P36^kg9A5X~2FZYUe5qe;6H1-V%1|TNq2dh+aIs(9u$XUOO(7$#Eu58@iZbzx(Mq zX!YcQy^Ix9?=378RaAm!6CgkF1JH9}jI4PIoo!G!?^5SRyQkg{dtO}4?+_4BGpSJa z&l6csJo~AJIWUOv47wWaRFg0puX(#fQy$*M<*U6k$hbjYf`qvE%lAUv&W9iY0ghrw z2?-ux`l-ki^c)WZ zwtI}0zu};Hx3paAap{j~>fB=SUya7zjCL+SZ;34<-%x7Vm&RH&y+<^;fk+}lS}QQWPO)p5q2o+YX*bzE}s~PG>2@^y=W0KqG z;~v?Gtj-cnZf?*Kgu^-E%bo3tP+kvA94_5*LR6@&Wf`)af zK}gsiaU>q%KysY*=+Swf(|8;f_Z+zHR|IlNh3hee=awU|7=BZ?gA;a)wOR^J$@0*% z6HAsq1oZ}`_~hk@97POfU}z`^wmcZ6ER@`GOpYa)rT?i$0>cO>g#kC;2OZ2<`;S0s z7k_iG*X5pzi;p#kkl1_i%q&^Ec|=o>AhRlng}|zWCv+XGybJHS!$Y4@x4yXs>;8De zr{bfZ^r%{Te%Uv-&qix9nl$m_^Wp#fk_`9G)>`oAelK4FAQxmkx(@p_pIN}V_4lvd zim$DzKgle9Jk4cQ>;-0Nw4p99@6OsxXY?Zz=ea?^mO-_&+GPN1WtFuzj?wOVG*>Q4m*5gGY9a)7kYXsPz!2knKOEsA|ys3G%@?8xSp+F=Aea<=8=H*1XA~jfdUKFOnyr;!ruc9!%2ChSntS$K=|GRzM|+tw z0CGQ2X@pgCMIaG_CvP0HDZif|B)qNsA&?2g6U)W^cimc4IqZoI$+-@d{}&$K{QGy( z)Rm`!%1`2&o14pxoNwi*2b~0C2P3XK{DiJ zwbm7S4Z@wcQRHGRf#O4PgDNMtyjVw7FkpC9-J3fuLr!}x9h+1jMMX#7&(VfzFfkU_ zOIhFAIw3Lfc8AkiNATLUlj0t@KENG;@~bpPsrifo=39@J<>X_yK~lwULgAVZ|847u zky=2%EHys*c1FtW3_=G(zg6F0hK``Y{~*=bii1!1utHNDWLiTWX@p#!yrN{ccc7L%ws|Ilaaq9iT2ftTqWI2^{twExyF9PobYbUP zGm>Dv6y@7IrJxu{DrNQgfikLbj_5&IzQ1=`LMzuIg6PNtkr{*|ney%hIPKTH!AvyM zpH9=%Z=4Y6kaq1TcTIf;A`E{9Ioli@TO{89W3pHZdV0}PuKKZDOgUxV{HrPu#9tv;PhVf`Qx{2QP2;mPXH=N5#f#`YJrU zJUpYIH)SWrld!-<9q~yR`sn3TV2{F2x6^=HcDMTvH{aAFQX8pdmbczUb)pYZU-z=!Bf3CO&NAYX=qJ1> zmhJ-FB)UboLm6f32qN`}6k6x%)iy|TR$*|Sz~F>gk(NMS1=JKvO3ra|!lkhPt4-~O zt?kk1R^t{W@3sb%hMoZa0zz5$)ZBJ2ax+P_lL` zCjF{f+S=KtdUv?Ba8d7YclN7t=g%p&-JJK~`{Pz+UtTje@!@;!UsD8N5AEFHp$Y(Kg(x?)sFb?mev;0xQIo_*M4U%m8J5#y8yS z0hR%dvI_)X5I|?WoXDL=`*dTH#D5lY`I(e9RKFd(XY9M&ck{u=?0G)19)0>^hL)9| zH6j;$+FK^6RZ!ft;ON18%_q;oadcbAnP6G%W-WO(c(JSv+BNM(Wj9~*zB^Q#x7Rpk zM3ijJ|c(4wdB2-~EDcEtvd35wZ$COq#a%RFu8jak0e3({KKbU`?K_EMtUV70%_>!LXYh4fTP6e)zjjAH&v{rPuYQe* z)#K#68M+nret&xGZTs7p2hGQlZisSkJ=KL`9IThA`@iO@M2u|O+FgjZj4<=320wHB zUOmcsm_u=bCjV=Toy9lW#gPLwB)ZdH9d}ia@+2RPphup zi$rNg<^_g5u#8urheCfJ%k$%}KWwSTOV&fCM`+ab~2Y9c$*PYKe^Bt$liND`97cm%KoY)er zf6(zMGfp66awS>j>B%M`1rpP5ydYB3AfvZ1f?WlzBf|FdiU2uGh=qk=R$GTAw1wO4 zoO{U7!@%D@s~)uSajj{c*n70sjq5q_kO5Kc64C*sA{+*f4d7C$y>3=jVv70GER*Ej zRpY_xxP7zKTCg;$?%#P`D%%H|$cc=RZm$`yt_!nh+VmGo+Xqz*DzqaRpmS^W6ulEp zbZqQ%LV71RRF=127Zk@ETW-%(H}3Qat6TbQx?FdVGt5Nkn__N8ZY+k?;v2VX}5dmW$*|htwnVwwn{ijncLy4$kYvd$oS(`0$q% z&!weXWa>6UU3W2O2n2K^m#mB$;oK{Q-e~aDCggbZcdH4#V9rW^YUXF-%*!K2Z~mFc zOspA)UgMWr2o2E}wU7&e^1+&tpU*Qdy(=}oBA=*cv!uGLx~x)kIn@uwL^%#$xWB!$ z{P@HcXM*SL<7#WZ8~Z0#wt}rU8b4bQ{z^)F7WsD^f%&Vk=_5OL6gvGZXl!HS^6KHVkE^OF+oP6T z|8twxrjKi5__0)HngsX!lnq<|Wdzl!3=I$6Ova8n{ti~ZjY@zO9vdG&6U65Huh}(! zEzQ9qdvACajM3D0h}U)x4!K4fA?GXxO^ZjAG@<*Gyxq+!J*f7L&nR-;5O9?tIq{** z9l%!h4ywAHhSd5u)2BNETK4RnWeTZk>W0#Jl*+s3LS7ksPERI-De(&m-#o2I6W<&N z9UP~!f>iVKKW<=rAW9tk{^Li~1obq%-{-8hd>ly0K!yZbKTznF?_B8o2$noyOZRQL zz)S|bfyD7y?=|!8PMoIu>HFB*{rTei7|^t*`EXqcef6Z}!Pxu9wq*h|i-*fY6QzlS z<*&VyVlV9twP`qKYQOoO^{2AS^8QrAX7zOO23O?YkI+#Iwp5AaeNUgGZs3BIkG!ONyZ+>Gr5fT!+=;8VQn~aqN6i#<0-uVeQO)H4{|W^&2;!!(uG#;^`FT zj2j;~-!p?fh6)JkLYWr$q+mh|AlF54ai~17KeGmn#_fNTMW%m%vNv|{*WY@}GE=WN zIA`|mdLHif+3zqRP|N+kV3L9#lhub>G=_1cj;s9rfzLlKSit%otsG~vJXLR>|8T~w zoTkY$o3YjvIMs`P|F)hV6G@O95Mz$M?egp0Z7}f$MIjS)iAdlKG?R_zhK4dr%W~&` z%kKOfi01r`VrW@!j)Nw$AM=lU7Kv9&spETwBBRE!vt0c3ak5tKyzDj?G-74vPO1QZ zmb{QwY+2gR>&wxD$D=OvT6ua(*@-3U0J0+8x~eLIa;>+&EF!hO7W#5eXy0Ww>l0UX@srO8QIp)!tX8xWt{koA5r54C0(PL^jEv_mKg!W!ycTi^1w25W zgjra~1tNG2j4s=;k;xOdBvT9$&(FyJMw_-%wx?$aRpD@$U;PJXpopEhw+;x2|J#}x zjv%ev`WE|$9+k;yCTN4oX1lIbVuU$?543r#v8nR|=Vny%KxQWzfP(@92ZswO9q53^ zMC#m~tA)%LF7VqF>*u|}MY6hcx8D!Q(35*Uq_cQ{H5sLdm33AEbJ>KrxQV66xFXrZk^S;uWaQ}aDO<^TW*p0wp*$Do9?qO$ z_Fehw)`uSS4Qp#v6biR&%y;}Dk(xiUha1|PKm)#QJ$8mxUyhbP@-HnU8H!ZNjA+_i zWi0%41%)*D>r1n^X~iK*sACJOBOof4>0%LR8BH+;F+NFa~Jak;aS+PLer+8O}wnDELxp2-*M=f;8@iu`%$$IP7As2yn)M*So~n<;!zRgnP8H@XZbY>47GY zJD>)*J^ImgEPB zPnU+O0Yf!7xY@M>9WpkdJJSzT4jYz3mVcGm?QjaCO*kN;gn_Af0~`l(?*>dz8~6zW zf-q2ZP{n10fpin33=~i(5Xd5fGf}QRR{!^2L&g~O!+!~8H*SRfG0A>gQc~X~ZqRS_ z{vL!qwhj){Af1^+oGM{t&AkuaNiY+mZm?NFulkzGzbh6N1B~wa$dLViZJ=W}w)Sf4 zTk|jGS~V5&0FiEhWS5D_Yxz_`))+v1oKYFenw`|>uTT|(^3l-XpxdfMXw%Un8lJSY zG_tA4{Cs-v1iw!RdB*1G;A8-R2=IeXw^m%kPRCp!XIG2A%A%}4gJ5|hXmSINL_QgSNIMVthu}1=Udw4_78A)violDN{8IggUkLT&5^=?pD*$!ERxYA!ua4 zz!Vr{O4!tIzg!NUB}?Fuz=O|2A*(R4tK|3ZJ76xoar+GyT@)J5RT(M4NH?CpeA-|y z4!ZAenL_3+!&wUsn@*$b_X{lHlm&I4OQfGa)i%DH08YbBqYwn1wB56H4a$}&vP+Yi zb1ASdY5DmgRlpY*#-oMz&;xkNhjE~KsJ@z*03G=%pvzbxQ*V)?FJw~meQCrK>Pv%d z5k2Dn+am8AJ2QYx2qw#wV5;HhW{btHzS^oU1Y7_VS_<0a_VRi~X7}Yzh64x zKWDBD_}|unThbKt&Gn=lpdSM~-j-9pHW8;vV!4#N_$)Qk@s?x@zDU)=;;8H6VlAFSLGNKET}#P4&N zehEvNt30)}mzj|f{wc@70tEayG@YxB~TGQFK$~`&!o)N!6=E<56S@`Omh-k zgF!Wbi|_%kH#P9$gRUhI(@%fV%kQHKue}Nkj=#|U3ixE?^CI5atZXIUdr-QC1!QY? zS>~ztNknz!YTkU^a4Yw0)EV1gDKf=nPb5~(mys1=Ky3~=8eIiC{}Ygq%Y(R`aSYv!C-S) z*wjR}`DsNTDCGpe>0-GUtTskAl!kMNd@KQmVB#Oa4tU1t(_kSG(`qB?8v`+J7#19mdWcViu3 zh%lh?CU7ek;M%utv8=-CeU?G!2JMfn38t`ZC2KE$&BzYYU^sP5LyWzp^EmxwK4!Rt zz$Icl3*8X-e|7D>FAU zBZ1LP5z4#$kp{B= z$nbBZ#$Q`oVKciF$8`>t_wUX}B#3;HnKkr1+$@cL*#F;h9wPd-5e5oFz!m(XVAz;_ zthUT52YA#_3sHrS{;nbO18yvk)c^w*E7+k2H&Ow93ILOKz;BvB3~us}HFAbiU(Weo z?d+={I7WFv)D|(`V6ED;rN}PwFecxcWWF&lCYaOQv{{zhw0~K~TyA}rC+xEKtpN-I zIw#d&TcbFamSNS)q}`qxTvaW}#G0DsQ$h@cKZzo%_M0#M(MUdzSMi?FhvOaG3&0!- zvYNnd13-u;qRxsUI^7o9lEGUk zxboa%iBHmf4Z=Mo|J!~xb}?vu7QuIx0g@0{U-j`J)ByupN6UZCy=G&kpwl>#Z*vrb zKY&yP+@HWV7;1kPOY6P#uCpf-r$Fy-8iX}$G2{kwfB;ic*sbF)@g(^B`GGdp34Tx| zt%lO^LZo1%5f6EVnt@C^VNr~WTj0^dvk58cJOAExhw{)$72m&kG(YyZar=y2cW^p8 zyW)f%seZCKF-|&?875Ee_s1zzT;C(@M-+HmxJwB!s1eF)pyvcS)CPt96CT^-L)ls` z!~1ZO_h=gyhE-GO0Z2%JhMRX76#IgKGE_YpNKaqQhe{+{*7ErJ+b|MD&|JC{cJOl!P(L#wjuxQ{ep%XS{Mw>wbz+MVs$pB9;L5c+^-1|&R zv;EXDg-x0!>&khzVgd{9H)X>uqdRF`Mq!he6LxtwlR6>zh6FwST(2wJv5(~?aIYJQ zd>dcaVX zZ;u5~7W@W-_YnvNKiw;uren+9_R=*uGX9wHsXL5#rT(+uSBzRD8BCnG-7Q4x_@@86 ztc!$L(n$39G}cJ-I18E;af0=hWwQZj1Hgg2V8C-#=St3(MRf_Ep`EK9uFcEQdU|Pv;~L;=$qLKZO62vC0z#hhVFKAXuRnoR2ZE1-ML z1G0uiagAfJGC)~X25z@&>IXhhZFUV)Y8uO?S4wf1&v{+ZRr0cW)sJq$BEzLbO1uML zkaB%*>1q2y*Lr19cgCmm631t=WIic6={HSKaRaYTX<#^5gh-X)j2avnf#fQZJe@(1 zuN{X-;lcPL8pyEVc%CR$4%I_K2mCH@<-bh+Bl`}T&}R+TXz=Bj7>cl!y9V94gQj^2 z1e42}PF^hSk_;{169*^%xF1$mPI~5a@h;ni?K0F%oXVE z0gOnphcB{#8xm{6r`a_sibwX+imEaf`t#qs(Ya&|nOS;4x{ly_-;eF>ZG)7z=W859 zTGmstU9zXw29)}@57fdwir&A@b@*`a56|Mmwx7+d+L9uOhtEAK&%9EmR#&7fPBz~&*!cA7z;Ja z^~7QrgHFo68g9Ah+niACtumBTYZ}|!bG7}*OZzKV&U4H51>5QU0h+np==))#$p+QC7iHy{gF0%j7>1nSsyj+Xy8 z0>0T&5@H*l9$=*4`T#giC4eroZ%?{aj5N5|=tFFqy|gu;*3`|rLPc@djQ#bGiRx2r z>An+|SMVfn6LWyjxe&kR8U!M$u`Z({)a~w0_ujYhTlxpHrEj*k-+7K#q}!vC4VBX? zGj(N1|Mr4UPfu$_QNayx&=8XN^-Wfv@+tmEM@}-x!H53(J?AoQjP~n95H}V}!5F|n zCa$;qUs*_~E#LSW4Fy${OcW(tx-)dfL}_1D>T|`V>YnYROJ}e(xs& zIy_ZK@>NH|VQ$$$&pZo6nES(@D%JQ2-z@tgQ8F6lxWdK7slHcn|JK${v&h{iwxh}E zIu2Q}1cZ+7f(IWW67k6h)|mnMRZ+CPLr+d?NWbvnNNByI7RF~}Zpuz)A**-nmWd4F zV^nY0wJT338V^+8);~4M%R;R`CNeb@yxO^cNWApC+&|2YGT6^s2BFbPa+wp#5FD~^ ze}>vUMS)mlu9SgdG368gCnQnAiv?7Vh zNCMjj4xJ0RZ#giR5vjt`N;4x^%tNF&+gI7w42A=Ik&Z0nCB^Y# zj}nK?8M+}#)phoiy$c1J%4qRE2QiEB#`C{2UX|Gh5elRJD>q!t8qrFLMh=hU5IRcF z?|fg@&QBV>9Kb{~Al_o4#(}2oq|1QRB+@aVJ&FmBGX=eXqMO!9|N0Rt+Gh|S%l|OZ zw$n5RwO(a6$0r-QSRbS#>qQ>VR?@3^gwD?T@ zni1{1Ii3Zt7@d)&X$+vJ&s8^M6b}7G!qR1GZ0zlWZo2aNnS-|4Y`N4WcU%?QxhK;4 z&NuZ;JY`yjpEra!be=-2EMI-`<+Z4vAsv4t4lRnutskxxgs;@gqn-W!hiW-jJ+~@! z2lg*xX%z17d55#nC)~0d-s8`ukdAY<``Pe3xG(nO1yMwpa{h!zT3)EJn|qjjXFr}Q z?$XPs(t6!sYg?8?nQxtvDXx!+Y0Oq068PtRnY`^=GFNHE1;~p^j24lLV@6lZYx^gz zhH^!x&*M)oY_6NSSm#-`UsS%wduij+X>@q`!Hw&#^COv=YGGrm>Jp6Kv$=6c2g*+c zFLBN`&N=qg_@!k@S?64%G-Lla+1;v;#)sX@8|Lry z?tPh2FQj_Wbif?4{PupmhR8!8B=H^^J=Op2KP8{FeM?An!d}`y*BYa3lnF)^XZOH|(>;EDpUs{MpcBrA0Doe5A(T5;<0y z6>)SBzT3)zJ~bQC7S?URP-i&kYgPJ^!cJhwSW|~T>ibag+Ce1?`WZd>gP-VE?aAr4 zpnPrh`&TXPEY-3@TQ;e54(hblP7z9Z${h}Tu9S@&tJt%c3yV_Z7!hdqm3C|GEjIq< zTTTz5Ga>)8_84uhMKnOwT7q?tf92Rzl`%k|&;fP!O^d4TRVdq3iNW>UQt7PwTGS$U ze_BJtQ+s}!TUF<43svxY=0Ex&?OtoL8nq6rCa3qnOT8(MUp zd%tUIO^a3>O`dYAdb&>-jP4WWNM=o1`-{U5h}yKD4BRB|8HHrE*Oh*Edi9}8Z8x_1 zRpCVJ2`DdOb===llX98SI{=#IYH9ncKgS+pIj*4}YBkG^jQmt1X>jlC_Z*y2X*CXu zJxW4*aJxm04`=?@%bSSCEUU1Q_w*_S`8Y6iGk8k(9Fe2pQ0S7+hNW$p!f}01O0 zTt{FqK+Gb&O&mSu4)b|4`U2rHf8;71`P*=3+@1&|o5(%I=tlKS$M}BY;*)g9HmJIU z!v(6B;m~xK7QZfTa%KT)H~qgO=hCHc9pv@D_G~XuLsppXpP}K*S^ZR zEQrJHvIm410#bK!0UqpE06wNc@bw;sB~P8=b8&y+^o)J|S={}FI1^a_q{**Lt1+87 zEEX4!vXP-)Ualy7D>UmS{% + \usetheme{Berlin} + \setbeamercovered{transparent} +} +\setbeamertemplate{footline}{\insertframenumber} + +\title{% + Applied Information Theory +} +\author{% + Daniel Bosk +} +\institute[MIUN IKS]{% + Department of Information and Communication Systems,\\ + Mid Sweden University, Sundsvall. +} +\date{\today} + +\AtBeginSection[]{% + \begin{frame} + \tableofcontents[currentsection] + \end{frame} +} + +\begin{document} + +\begin{frame} + \titlepage{} +\end{frame} + +\begin{frame} + \tableofcontents +\end{frame} + +\mode{\input{contents.tex}} + +\end{document} From 54134fcd872f012cfc5d2e1b8872202b1012393d Mon Sep 17 00:00:00 2001 From: Daniel Bosk Date: Wed, 6 Feb 2019 16:06:39 +0100 Subject: [PATCH 4/6] Adapts abstracts for shannon-entropy and applications --- applications/abstract.tex | 22 +++++++++++++--------- shannon-entropy/abstract.tex | 22 ++++++++++++++-------- 2 files changed, 27 insertions(+), 17 deletions(-) diff --git a/applications/abstract.tex b/applications/abstract.tex index 2513055..6bb8a86 100644 --- a/applications/abstract.tex +++ b/applications/abstract.tex @@ -1,13 +1,17 @@ -The area of Information Theory was founded in 1948 by Claude Shannon. -It concerns information, e.g.\ how much information is contained in certain -data. -Equivalently, it is also a measure of uncertainty in information, and has thus -plenty of application in security and cryptography. +\emph{Summary:} +There are various uses for information theory. +In this session we will explore some of them. -The concept of entropy, the main part of information theory, is treated in -a few short texts: \citetitle{Eckersley2010apo}~\cite{Eckersley2010apo} and -applied in \citetitle{Eckersley2010hui}~\cite{Eckersley2010hui}, but also in -\citetitle{Ueltschi2013se}~\cite{Ueltschi2013se}. +\emph{Intended learning outcomes:} +After this session you should be able +\begin{itemize} + \item to \emph{understand} how Shannon entropy can be applied in various + areas. +\end{itemize} + +\emph{Reading:} +You should read on the use of entropy to estimate anonymity: +\citetitle{Eckersley2010hui}~\cite{Eckersley2010hui}. This is then utilised in the text \citetitle{Bosk2013gl}~\cite{Bosk2013gl} (in Swedish), and \citetitle{Komanduri2011opa}~\cite{Komanduri2011opa} which treats passwords. diff --git a/shannon-entropy/abstract.tex b/shannon-entropy/abstract.tex index 2513055..e3a4d1b 100644 --- a/shannon-entropy/abstract.tex +++ b/shannon-entropy/abstract.tex @@ -1,13 +1,19 @@ +\emph{Summary:} The area of Information Theory was founded in 1948 by Claude Shannon. -It concerns information, e.g.\ how much information is contained in certain -data. +It is a mathematical theory to reason about how much information is contained +in certain data. Equivalently, it is also a measure of uncertainty in information, and has thus plenty of application in security and cryptography. +This learning session covers the basic concept: Shannon entropy. -The concept of entropy, the main part of information theory, is treated in -a few short texts: \citetitle{Eckersley2010apo}~\cite{Eckersley2010apo} and -applied in \citetitle{Eckersley2010hui}~\cite{Eckersley2010hui}, but also in +\emph{Intended learning outcomes:} +After the session you should be able +\begin{itemize} + \item to \emph{apply} Shannon entropy in basic situations. +\end{itemize} + +\emph{Reading:} +The concept of Shannon entropy, the main part of information theory, is treated +in a few short texts: +\citetitle{Eckersley2010apo}~\cite{Eckersley2010apo} and \citetitle{Ueltschi2013se}~\cite{Ueltschi2013se}. -This is then utilised in the text \citetitle{Bosk2013gl}~\cite{Bosk2013gl} (in -Swedish), and \citetitle{Komanduri2011opa}~\cite{Komanduri2011opa} which treats -passwords. From 8ce8a08ac7c0b86f91efc181e421d507a187c701 Mon Sep 17 00:00:00 2001 From: Daniel Bosk Date: Wed, 6 Feb 2019 16:14:32 +0100 Subject: [PATCH 5/6] Updates slide titles --- applications/applications.tex | 2 +- shannon-entropy/shannon-entropy.tex | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/applications/applications.tex b/applications/applications.tex index 85a1f86..90dd7d9 100644 --- a/applications/applications.tex +++ b/applications/applications.tex @@ -48,7 +48,7 @@ \setbeamertemplate{footline}{\insertframenumber} \title{% - Applied Information Theory + Applications of information theory } \author{% Daniel Bosk diff --git a/shannon-entropy/shannon-entropy.tex b/shannon-entropy/shannon-entropy.tex index 85a1f86..03e9e94 100644 --- a/shannon-entropy/shannon-entropy.tex +++ b/shannon-entropy/shannon-entropy.tex @@ -48,7 +48,7 @@ \setbeamertemplate{footline}{\insertframenumber} \title{% - Applied Information Theory + Shannon entropy } \author{% Daniel Bosk From d98e614fe406cef4d9ae105d562350b49a17ba6b Mon Sep 17 00:00:00 2001 From: Daniel Bosk Date: Wed, 6 Feb 2019 16:16:27 +0100 Subject: [PATCH 6/6] Adds links to recordings for shannon-entropy and applications --- applications/README.md | 2 ++ shannon-entropy/README.md | 2 ++ 2 files changed, 4 insertions(+) create mode 100644 applications/README.md create mode 100644 shannon-entropy/README.md diff --git a/applications/README.md b/applications/README.md new file mode 100644 index 0000000..2e87c69 --- /dev/null +++ b/applications/README.md @@ -0,0 +1,2 @@ +- "Applications of information theory" (MP4 H.264 AAC) + \[[HTTPS](https://ver.miun.se/courses/security/dasak/infotheory-applications.mp4)\] diff --git a/shannon-entropy/README.md b/shannon-entropy/README.md new file mode 100644 index 0000000..c8da595 --- /dev/null +++ b/shannon-entropy/README.md @@ -0,0 +1,2 @@ +- "Shannon entropy" (MP4 H.264 AAC) + \[[HTTPS](https://ver.miun.se/courses/security/dasak/shannon-entropy.mp4)\]