From 95406fc8c5351bcecf8102182bf28712194b7ddf Mon Sep 17 00:00:00 2001 From: bterral Date: Fri, 24 Nov 2023 15:52:22 +0100 Subject: [PATCH 1/4] commit --- README.md | 43 ++++++++++++++++++++----- __main__.py | 66 +++++++++++++++++++++++++++++++++++++- graphs-sorts.xlsx | Bin 0 -> 11406 bytes graphs/fusion-sort.png | Bin 0 -> 23665 bytes graphs/insertion-sort.png | Bin 0 -> 20628 bytes graphs/selection-sort.png | Bin 0 -> 22123 bytes sort/fusion.py | 32 +++++++++++++++++- sort/insertion.py | 9 ++++++ sort/range.py | 23 ++++++++++++- sort/recursion.py | 7 +++- sort/selection.py | 13 ++++++-- 11 files changed, 179 insertions(+), 14 deletions(-) create mode 100644 graphs-sorts.xlsx create mode 100644 graphs/fusion-sort.png create mode 100644 graphs/insertion-sort.png create mode 100644 graphs/selection-sort.png diff --git a/README.md b/README.md index 74f925a..74fd3e2 100644 --- a/README.md +++ b/README.md @@ -53,6 +53,26 @@ Mesurez combien de temps prend python à générer un tableau composés de : - ... - 10 000 000 entrées +*Time to generate array of 1000000 numbers: 0.7310469150543213* +
+*Time to generate array of 2000000 numbers: 1.1986496448516846* +
+*Time to generate array of 3000000 numbers: 1.6297695636749268* +
+*Time to generate array of 4000000 numbers: 2.190520763397217* +
+*Time to generate array of 5000000 numbers: 2.74592661857605* +
+*Time to generate array of 6000000 numbers: 3.341700553894043* +
+*Time to generate array of 7000000 numbers: 3.849144697189331* +
+*Time to generate array of 8000000 numbers: 4.3899266719818115* +
+*Time to generate array of 9000000 numbers: 4.8259007930755615* +
+*Time to generate array of 10000000 numbers: 5.432266473770142* + **Astuce** : vous pouvez écrire les nombres avec des underscores pour mieux les lire : `1_000_000` Sur un tableur, générez un tableau permettant de visualiser le temps d'éxécution en fonction de la taille de l'entrée. @@ -73,9 +93,8 @@ Comment vous semble évoluer la courbe ? Observez bien les différentes courbes Observez attentivement l'animation de tri par sélection ci-dessous pour en comprendre le fonctionnement. - - -Écrivez en français classique ce que vous voyez. Quel est le fonctionnement ? Comment l'expliqueriez-vous à quelqu'un ? *Écrivez votre réponse ici* +Écrivez en français classique ce que vous voyez. Quel est le fonctionnement ? Comment l'expliqueriez-vous à quelqu'un ? +*On sélectionne la première valeur non triée du tableau, et on la marque comme étant la plus petite valeur du tableau. On parcourt les autres valeurs en sélectionannt une valeur plus petite s'il en existe une. Ensuite, on place la plus petite valeur au début du tableau et on répète toute l'opération avec la deuxième valeur du tableau jusqu'à ce qu'il soit trié.* Puis implémentez l'algorithme en python dans la fonction `sort` du fichier `sort/selection.py`. Vérifiez son bon fonctionnement en éxécutant le fichier `python3 -m unittest`. Le test correspondant au tri par sélection doit passer. @@ -88,7 +107,11 @@ Mesurez le temps d'éxécution pour un tableau de : Tracez le graphique correspondant. -Quelle semble être la complexité de notre fonction de tri ? Cela est-il logique par rapport au code que vous avez implémenté ? *Écrivez votre réponse ici* + + + + +Quelle semble être la complexité de notre fonction de tri ? Cela est-il logique par rapport au code que vous avez implémenté ? *Le tri par sélection semble être de complexité O(n^2) et cela semble cohérent avec les deux boucles for imbriquées dans mon code.* ### 2. Tri par insertion @@ -96,7 +119,7 @@ Observez attentivement l'animation de tri par insertion ci-dessous pour en compr -Écrivez en français classique ce que vous voyez. Quel est le fonctionnement ? Comment l'expliqueriez-vous à quelqu'un ? *Écrivez votre réponse ici* +Écrivez en français classique ce que vous voyez. Quel est le fonctionnement ? Comment l'expliqueriez-vous à quelqu'un ? *On prend la première valeur non traitée du tableau et on parcourt les valeurs vers la gauche jusqu'à temps d'insérer la valeur sélectionnée si elle est plus petite que la valeur parcourue.* Puis implémentez l'algorithme en python dans la fonction `sort` du fichier `sort/insertion.py`. Utilisez les tests automatiques pour vérifier votre implémentation. @@ -109,7 +132,9 @@ Mesurez le temps d'éxécution pour un tableau de : Tracez le graphique correspondant. -Quelle semble être la complexité de notre fonction de tri ? Cela est-il logique par rapport au code que vous avez implémenté ? *Écrivez votre réponse ici* + + +Quelle semble être la complexité de notre fonction de tri ? Cela est-il logique par rapport au code que vous avez implémenté ? *Le tri par insertion semble avoir une complexité en O(n^2). Cela est logique par rapport au code implémenté (une boucle for et une boucle while).* ### 3. Tri par fusion @@ -154,7 +179,7 @@ Observez bien le schéma suivant : il représente le concept du tri par fusion. Cet algorithme est de type "diviser pour régner". -Écrivez en français classique ce que vous voyez. Quel est le fonctionnement ? Comment l'expliqueriez-vous à quelqu'un ? *Écrivez votre réponse ici* +Écrivez en français classique ce que vous voyez. Quel est le fonctionnement ? Comment l'expliqueriez-vous à quelqu'un ? *Le tableau en entrée est séparé en deux jusqu'à ce que les tableaux ne soient que de taille 1, puis ils sont fusionnés deux à deux jusqu'à obtenir un tableau trié de la taille d'origine.* Complétez la fonction `sort` du fichier `sort/fusion.py` en suivant les instructions suivantes. @@ -174,7 +199,9 @@ Mesurez le temps d'éxécution pour un tableau de : Tracez le graphique correspondant. -Quelle semble être la complexité de notre fonction de tri ? Cela est-il logique par rapport au code que vous avez implémenté ? *Écrivez votre réponse ici* + + +Quelle semble être la complexité de notre fonction de tri ? Cela est-il logique par rapport au code que vous avez implémenté ? *Le tri par fusion semble avoir une complexité en O(n log n). Cela semble logique par rapport à monde code.* Question bonus : Y a-t-il des tailles de tableaux pour lesquelles le tri par fusion n'est pas aussi rapide que les précédents tris abordés ? *Écrivez votre réponse ici* diff --git a/__main__.py b/__main__.py index 98a585e..adadce3 100644 --- a/__main__.py +++ b/__main__.py @@ -1,5 +1,69 @@ +import sort.range +import sort.selection as selection +import matplotlib.pyplot as plt +import sort.insertion as insertion +import time +import sort.fusion as fusion + + +def get_1k_10k_arrays_execution_times(sorting_method) -> tuple[list[float], + list[int]]: + """Returns the execution times and array sizes of + generated arrays of 1k to 10k numbers with a step of 1k.""" + + times: list[float] = [] + sizes: list[int] = [] + + for i in range(1, 11): + array_size: int = 1000*i + array: list[int] = sort.range.generate_array_of_number(array_size) + execution_time: float = get_execution_time(array, sorting_method) + print(f"Execution time for {array_size} numbers: {execution_time} s") + sizes.append(array_size) + times.append(execution_time) + + return times, sizes + + +def get_execution_time(array: list[int], sorting_method) -> float: + """Returns the execution time for sorting the given array + with given sorting method.""" + + start: float = time.time() + sorting_method(array) + end: float = time.time() + return end - start + + +def draw_graph(sizes: list[int], times: list[float], title: str): + """Draws a graph with the given input sizes and execution times.""" + + plt.plot(sizes, times, 'ro-') + plt.xlabel('Input size') + plt.ylabel('Execution time (s)') + plt.title(title) + plt.show() + + def main(): - print("Hello world") + """Main function.""" + + #sort.range.execution_time_for_array_of_numbers() + + sizes: list[int] = [] + times: list[float] = [] + + # Selection sort + times, sizes = get_1k_10k_arrays_execution_times(selection.sort) + draw_graph(sizes, times, "Selection sort") + + # Insertion sort + times, sizes = get_1k_10k_arrays_execution_times(insertion.sort) + draw_graph(sizes, times, "Insertion sort") + + # Fusion sort + times, sizes = get_1k_10k_arrays_execution_times(fusion.sort) + draw_graph(sizes, times, "Fusion sort") main() diff --git a/graphs-sorts.xlsx b/graphs-sorts.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..104b413ba11311aa585cfa00a9efeefc2fb2798b GIT binary patch literal 11406 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 O^2>wJXq^7%?Ee5EqsvqP literal 0 HcmV?d00001 diff --git a/graphs/fusion-sort.png b/graphs/fusion-sort.png new file mode 100644 index 0000000000000000000000000000000000000000..a84c0288f1ff061c20a1ec0ab747995d315567d6 GIT binary patch literal 23665 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 PZ^;7p#cmm&`0x4;KvWud literal 0 HcmV?d00001 diff --git a/graphs/insertion-sort.png b/graphs/insertion-sort.png new file mode 100644 index 0000000000000000000000000000000000000000..8bde71809f4cd4eeb4a4a5824e8546defef620cd GIT binary patch literal 20628 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 literal 0 HcmV?d00001 diff --git a/graphs/selection-sort.png b/graphs/selection-sort.png new file mode 100644 index 0000000000000000000000000000000000000000..1a07178c7c1b9f89af5f9142f42fd52fd24eee77 GIT binary patch literal 22123 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 list[int]: + """Merges two sorted arrays into one sorted array.""" + + result: list[int] = [] + left_index: int = 0 + right_index: int = 0 + + while left_index < len(left) and right_index < len(right): + if left[left_index] < right[right_index]: + result.append(left[left_index]) + left_index += 1 + else: + result.append(right[right_index]) + right_index += 1 + + result.extend(left[left_index:]) + result.extend(right[right_index:]) + + return result + + def sort(array: list[int]) -> list[int]: - return array + """Sorts the given array using fusion sort.""" + + if len(array) <= 1: + return array + + mid = len(array) // 2 + left_half = sort(array[:mid]) + right_half = sort(array[mid:]) + + return merge(left_half, right_half) diff --git a/sort/insertion.py b/sort/insertion.py index 73a21d3..c7cef7d 100644 --- a/sort/insertion.py +++ b/sort/insertion.py @@ -1,2 +1,11 @@ def sort(array: list[int]) -> list[int]: + """Sorts the given array using insertion sort.""" + + for i in range(1, len(array)): + key: int = array[i] + j = i - 1 + while j >= 0 and key < array[j]: + array[j+1] = array[j] + j -= 1 + array[j+1] = key return array diff --git a/sort/range.py b/sort/range.py index fc252ab..201f44c 100644 --- a/sort/range.py +++ b/sort/range.py @@ -1,2 +1,23 @@ +import time +import random + + def generate_array_of_number(array_size: int) -> list[int]: - return [] + """Returns an array of the given size with random + numbers between 0 and 100.""" + + array: list[int] = [] + for i in range(array_size): + array.append(random.randint(0, 100)) + return array + + +def execution_time_for_array_of_numbers(): + """Prints the execution time for generating + an array of numbers.""" + + for i in range(1, 11): + start: float = time.time() + generate_array_of_number(1000000*i) + end: float = time.time() + print(f"Time to generate array of {1000000*i} numbers: {end - start}") diff --git a/sort/recursion.py b/sort/recursion.py index e7f4320..15db9e7 100644 --- a/sort/recursion.py +++ b/sort/recursion.py @@ -1,2 +1,7 @@ def get_factorial(number: int) -> int: - return number + """Returns the factorial of the given number.""" + + if number == 0: + return 1 + else: + return number * get_factorial(number - 1) diff --git a/sort/selection.py b/sort/selection.py index 73a21d3..5432396 100644 --- a/sort/selection.py +++ b/sort/selection.py @@ -1,2 +1,11 @@ -def sort(array: list[int]) -> list[int]: - return array +# Selection sort +def sort(arr) -> list[int]: + """Sorts the given array using selection sort.""" + + for i in range(len(arr)): + min_idx: int = i + for j in range(i + 1, len(arr)): + if arr[min_idx] > arr[j]: + min_idx = j + arr[i], arr[min_idx] = arr[min_idx], arr[i] + return arr From 0db03f9498d0fc22ad2c3819fc35b000dfa889c9 Mon Sep 17 00:00:00 2001 From: bterral Date: Fri, 24 Nov 2023 16:03:11 +0100 Subject: [PATCH 2/4] Added python-built-in-sort --- README.md | 6 +++++- __main__.py | 4 ++++ graphs/python-built-in-sort.png | Bin 0 -> 29702 bytes 3 files changed, 9 insertions(+), 1 deletion(-) create mode 100644 graphs/python-built-in-sort.png diff --git a/README.md b/README.md index 74fd3e2..74d5aa2 100644 --- a/README.md +++ b/README.md @@ -203,7 +203,7 @@ Tracez le graphique correspondant. Quelle semble être la complexité de notre fonction de tri ? Cela est-il logique par rapport au code que vous avez implémenté ? *Le tri par fusion semble avoir une complexité en O(n log n). Cela semble logique par rapport à monde code.* -Question bonus : Y a-t-il des tailles de tableaux pour lesquelles le tri par fusion n'est pas aussi rapide que les précédents tris abordés ? *Écrivez votre réponse ici* +Question bonus : Y a-t-il des tailles de tableaux pour lesquelles le tri par fusion n'est pas aussi rapide que les précédents tris abordés ? *Le tri par fusion est en général plus rapide que l'insertion et la sélection sur les tableaux de très grandes tailles. Sur les petits tableaux, il est moins rapide.* ### 4. sort() @@ -211,6 +211,10 @@ Bien que tout cela soit fascinant, Python possède sa propre méthode de tri : ` Une dernière fois, analysez le temps d'exécution et découvrez si python fait mieux que nos implémentations rudimentaires ;) +*Il est en effet bien plus rapide : * + + + ## Pour rendre ce TP Merci de faire une Pull Request vers ce repository. diff --git a/__main__.py b/__main__.py index adadce3..7b4c866 100644 --- a/__main__.py +++ b/__main__.py @@ -65,5 +65,9 @@ def main(): times, sizes = get_1k_10k_arrays_execution_times(fusion.sort) draw_graph(sizes, times, "Fusion sort") + # Python built-in sort + times, sizes = get_1k_10k_arrays_execution_times(sorted) + draw_graph(sizes, times, "Python built-in sort") + main() diff --git a/graphs/python-built-in-sort.png b/graphs/python-built-in-sort.png new file mode 100644 index 0000000000000000000000000000000000000000..9fe8e61af884ef1755dfef0e24b8d77d57a887b6 GIT binary patch literal 29702 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 U!htnj6#TPa{h(U9s;U3K0Al-xDF6Tf literal 0 HcmV?d00001 From 6b32cc789da85e69c9dea6e7d159d6c2820b040e Mon Sep 17 00:00:00 2001 From: bterral Date: Fri, 24 Nov 2023 16:28:32 +0100 Subject: [PATCH 3/4] ; --- __main__.py | 2 +- sort/insertion.py | 14 +++++++------- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/__main__.py b/__main__.py index 7b4c866..0b69240 100644 --- a/__main__.py +++ b/__main__.py @@ -48,7 +48,7 @@ def draw_graph(sizes: list[int], times: list[float], title: str): def main(): """Main function.""" - #sort.range.execution_time_for_array_of_numbers() + sort.range.execution_time_for_array_of_numbers() sizes: list[int] = [] times: list[float] = [] diff --git a/sort/insertion.py b/sort/insertion.py index c7cef7d..87de189 100644 --- a/sort/insertion.py +++ b/sort/insertion.py @@ -1,11 +1,11 @@ def sort(array: list[int]) -> list[int]: """Sorts the given array using insertion sort.""" - for i in range(1, len(array)): - key: int = array[i] - j = i - 1 - while j >= 0 and key < array[j]: - array[j+1] = array[j] - j -= 1 - array[j+1] = key + for index in range(1, len(array)): + key: int = array[index] + index_2 = index - 1 + while index_2 >= 0 and key < array[index_2]: + array[index_2 + 1] = array[index_2] + index_2 -= 1 + array[index_2 + 1] = key return array From ad75888ee53772ab83df0bb7379a88b57ceb1803 Mon Sep 17 00:00:00 2001 From: bterral Date: Fri, 24 Nov 2023 23:54:51 +0100 Subject: [PATCH 4/4] Added Generation times in Readme and modified excel file --- README.md | 4 +++- graphs-sorts.xlsx | Bin 11406 -> 16583 bytes graphs/Generation-times.png | Bin 0 -> 46411 bytes 3 files changed, 3 insertions(+), 1 deletion(-) create mode 100644 graphs/Generation-times.png diff --git a/README.md b/README.md index 74d5aa2..fcbed10 100644 --- a/README.md +++ b/README.md @@ -77,7 +77,9 @@ Mesurez combien de temps prend python à générer un tableau composés de : Sur un tableur, générez un tableau permettant de visualiser le temps d'éxécution en fonction de la taille de l'entrée. -Comment vous semble évoluer la courbe ? Observez bien les différentes courbes du graphique ci-dessous. Quelle est la plus ressemblante à notre situation ? *Écrivez votre réponse ici* + + +Comment vous semble évoluer la courbe ? Observez bien les différentes courbes du graphique ci-dessous. Quelle est la plus ressemblante à notre situation ? *La courbe semble évoluer de façon linéaire. La courbe la plus ressemblante est la courbe n log n.* diff --git a/graphs-sorts.xlsx b/graphs-sorts.xlsx index 104b413ba11311aa585cfa00a9efeefc2fb2798b..bca18e0b1135d6491230d549d9029d9a0e4ee782 100644 GIT binary patch delta 9114 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 delta 4158 zcmZv9XEYpI)b^M`^g*ITi8>ga=%aU|i%xV=qciFqB}R#>4X&1mVASX&1c`_)LxQK$2<4YGw!`y#XKxPyhe`9srRd zr7x8P03aoAVdVuPE#H{{rRe)gPU%XVXdQN4GFjH92PB+Y%teCU>7Z_rbv>qqNaAo|#FKBiru$Ko+8yVqaVulr7NX3vSoWvL`Z?E0-Awr_~w4(RD#RG%tZINeDdsm=cs zOM+*Zwg&TpGMG}^ev&z4>1f#4Cc}-~zXd9BLtve^m3-H{RufEe5W9~Nmcy+a?$m`p< z#LK$5$F<%!n*^2mB*Xunzd2>s`*;)2Ot~NaEWdKnVAM}(+S$7v+4bZ6`M4NM3538- z3-}uGl*K|W!L{8^LuAHj7d7u<7i`WzY1o34!|9skJ}0Yc6{a1RQK{f-Le zO!pFJ@_HeOOU|_!C7-bM#foX1H1G`W1ZZy&jAK-jqs>sObU_p+9b|K8z4yZSMtUG2 zJ*KVunYJtJta8Ykv`OvJ&q%X-OrLh?1r+=h-sJ{~!y4M~86V_Z)>%|F=2zwiPx8ML z{6SF=YpCX*+DHkrPW-SxR8YZgqo;_c6ss1Q$qymXy!EO4w(@RRz95CWJzUtAcPnFo zF)T85+eUW5eTs^XYGLCrW|%a22pEUdXpqbmg3Y|eLTpH0=xWSJ+vW3l*T zLx;IXcZ|iLe+H2&SbcuPrEMymZve9B0wXRj3GJG5ysQu61e3`xn=06ac91GjD2t>g z`vV3+v>k7c?>tHasP*Fh0(pMrsTh2tG_o zzj3IIP?r|OIJB~hVri5LUQI{Jg1IU;%255sT4W8A%xnyVvp z)Bayq71Dl<{Qc{3&R(VkQX16p*Sxw!_U8whWiBs(bG6HYb_?21R(KjiKe7Zzit>4q zFIQkzf-{W$8k9FpR@z(3G+xkbx(=6SPP8OVU?XzYvc$f?I+O32cnl(Ugfc(Bw>mPH zH{3;*HpN|%4&+zaGHZ_{b1#yMcPrjau1xkmAtAw^cxWwvjoF2iC{41Hh6Sj!rZfWb zusalbZCK-#k-A-*GUesi3S=?kq6VQJLtIE;Ll5i(hj!o<=C-tmWC!}|=evim6j!tk zAu6+qQ3|uc$43#tF;EQAxF<5&Xfpiq3TpZ=_Hrv$_1ur)QnBaF>F@)#xc(2=@i|tH zkR$ou!HX7DrfcJ-mIG3et&(87Kmb59721VX0vTd9QfDCdb;U}>33iXdS`yP4YHJmD zLf1UnnCGM|5-izC_~})MKS*h79A#*@gBgW_`QT4-FlO(>tJV4f6Dc8+4>9x|KHSw) zpEd_Ruce%gVteZW${Lz$A@))DN!HL-pqQh#y?0QRj5T#uS;VlTpT>>2>_$5dotv|o zNZBy%iEk=2cM9Nda3e{mAuv64$8O=PddqEb88KqNkLyW_T(<7>RBWC78Q~T@t)Q*? zu6qM^-u9%ZS~It8P-FPQNeMARIb@+{x$Ql zws+3mg)CICk5)ROd5Y(6y$mOz4ihn;bIYKRz@fJfzsuKXM5{BH7!anON&O61yKbVB z8g`DNgI3z;*=pP+9JaKb5}im>gkCpN1rD=x7!x-o3jC9k@@tW`Z)}9p1gqnb7975p zA4*k|a8|dxW+ex4u!D(of~-PX*X!2*|dY~bLy}gnZs-R#zTDY zFa1#!5+M?MTKsbLS#M8#QZu3oJ$>>9FKIn`_tmas^z!oGDQ|8${f#6&*(V!l*WG3V z^o0S5XMtcx3i;w`^cB zC2$FT13yNycDzQAJPTHug7L`PE5J0vz>8H3kALnSZd8f|P8O{3?e&=mCFe*ReGb4z zN3pavQ$K`@bG5QxCmVY_@ioJ4WW_5hz`1vIpMisEJ2n4H&FO+X@+RHLQ?2VM_c&W} zIf@Z;zs&*q6xZJ-3L*2`tPsd74u1;|nd_-|7o^V2NgFKFz-OIXvC4TD1!~>&POI?z zjTR$r-sZ^G(bMDLydqb-Tne+eSf+;D<~L-8s+1p!lEFr24ql~=brYMV`}4L6E`k65&WtjrsS?d-P|oYk*G5Ensj^O-NE1vYL%)tp(uFb}9&&Wp`ILiKe*P7URMHe(kt zf{_nZs}n}XB>q+4Wd%4<*%2!#25 zYvKp#4}dWXqQrm8zQzvkBqvbZu6J>E?*bVgjo_U6CNkku=r*9CKdJexdVoHQ7Kx0B z3n{JoIH-kq?B;!n(2reM!GC~yT1UJ4omj9CR^1cj zFl6N&iYR3pINagyWqQT!YRJatdIg8iyIl|dQ7eBo`+mM_c~}|D^T8@$`>VkDm_;^u z+I&(Dc?YmpKs_G8+^Z8t-k|jo(y;H*+k#_^_FOJD^F+zOb3fqFKpgM^Cd@tv)gZIo z&CHfiDWeO^Vw8t=1Z|Rx^O8>b(QZ@fTIPLEC&?AajrXN}5;PVG9rZI9vc*17H=hXP zsr^WyfMxvYxA~9b1z>!Dl`%#?>r&1tYWw)w@3#g4{#$lxygGGRyb78z67-muFfym# zWI&Qeov8my>kG`_B}mhIOPs>ThL!76RRH_6lDR+q&zQuB@>zcIQqiUT19b0loLJjg zC9hOV%DkLQs@7M&tXnH|QwXq&c1}#`b#%&g%5U9ECEuyv)r9L~3I{Ez9;O(`swoM& zJ|!E(7&*eUgsFXv$2X->2#(SF#TFYY`FNU5Yoj)zN?zP6l2C>9?z6xMHWce7G&w8T zwy7Z~eYi-Neq8@+KQ2^fvb@8J`D1w2v6@OqT7#vNLB}n7Yh4x7bX!ViWJud;{<&VC)!ux0)Y`dpq42>}`#A+OkG(%HTd4Vh^GT#Yo-T_Qfjh)^m-- zs2mZYeuS2P}o(Ra16Zc)35pYUrx( z3loFfiDm9to1yG+CQ}jtlCNV*hKg! zQ$pMpJ_WjaR)lCjWhHwO$ybTn*sO9y$qO}SLi_7~~hY!~P zLGbi`Z}d(*$|C&b=lFD^pfOs>g~F$?kw5bZ5>8IAASA83ApB_XgU91M8;pm#LsjrM^eLTX}61= zrumELP2+h7yqqgf$=iw)7JyWL8eViX%$%ejJpsG*|2i!qj0w0wjwV-z0mrG(TFRpA ze+oDNfb}X}{TX0%y0Q-Nf*w7stVWx1wHN6x5gHcd?-`0NSH8jVM>qh08-Gq+t+4E9 zV-*38KM4>3;QJ3in-e`L20=Tk2?L#Op&zO#a{QY@t|Sve`oGDXxY3`~1cZNonXW4m z_baKQ{|{L`@4ue8yZXCpdAs@q{OjEBFQtD44ZPxH_zygn5AC9^0%QK#enxK zbab@0w|91Sc6D{Z|NnbkdiYh9@a-zGQq#3k>rs`q+jkweN?rG=8y?j+J!@`xR_S?t z*VorK{I|;JS)K8-Y7-Na+s|uFpMN)dQGe$}jk&qGrEj&BU#*pYgAH7-s%--s>;miX zZ<_4k3aq&w-1s1<-Vv^#TF1~9VhEKO*6adTXq{_ht9umfaYVg`hlgiOyH|AM6H@)t zr%%0O>%9{?eG=MVym;|4f$En`f0feV@9!V*o*J0a@;a?M2(GlQ;FN~o)RxeU-mnaM zI9zFs;U8(y>5b9Z-O;%}NN{Dg#%DFff9`(=S5Dizyx#Y@P04T-_9Yh$rsQ{|<~OIo zRn+mZwEyFmp-)9EnQ)bLW`7;b{>I2Dqfy|h==xkv%dZ(NgsX~P{H?XPZm5LHEQ712 zyS%!sqLJ~nW&B%xPi19gRb6{^>u60=Z%z9|EnJQ5)DC7tb9*CPtv?#Of6>}HXq`W3 z-Q%sTt!+Q1(NpN|hZE`QpXmNM+xugn@8{%?A3p|0=LZJ|e~$hd8X6j5{bs_&njRk? zXH73o!ZkJX>({TD`Q^E}xy9wxrKP3y^>zDLpISKktxh_cx>rnHLi-pCYiaJre$cn= z{uO;k1UXZN{$o34VL(TatRJeEE?jppVXX#w9%+y4TfpzB8YYRRUs`-|&-b1$-dB5P z%k$$;9{80%jNf(BxezL{0%P@2Pc1XGQe7jVVX&R;bKQQh-eYAgqwO?- zxg!6h^EFm4x`v!kAM>N_EaBebe?2{)xuSpE>^8Fd^drkB-&-gO_akDmVI5qSl^;6EBpTx8MfU0>d+xvN?Jd1L&3n76 zI;5~LfUBTq;(~=$_gE)gBzA_?>EYatcU~A6Pq zImsg?WK~`_-;+WWt1C*FR&*=S;!k-+`|?oz3Mt{5!ae7+ckPx}r`&#)-olr*v#JWe z&1n{?5Mqq{7VVwZ8{@B+dDEsO21mPnANLUMNnG7|HFQPp1-Hgo#xjo^3qPc#?^)@2 zF`4xHvm{9anTa6!A_VL6I`BF>ClH*pu+r*oY6#efgn`g{nzc zm$Ng4mzvpRJF+o%7p4rS=Wd2xU(UM7+}nH2DOBV2v!j-ya@;GuX;1BfF9z0#yj9(n z8Mdm@nH=J&G7-(f@a20FlNauPS|?4%Dh!Emsy~Hw$&;`OJ$0FGX2!X*ALD)FcW=)vUvr?6c|Cd{8<{?S0g_9L|qIeNPgMtX^`jbY(&2nvM6uv z?MWQF^PCnj9lRy!BAjrHCh3dbd-nlAJ72&!tBTwbIMz!V^fQ?p?=X4gubjBT-t={1 zN>$b)d!0S`gGcrN&pnm))u>wb9;c7#83eW(YG?bx!yuKWIf9dg$Q!=I=Ge}Hfc1`v zYTtGGw>OymYg()&XFEb*knDH|ibC;}Co!Hoy&N#7i#pc${kGCtRAtvid1EG7Q&iTn zy@8CS@TN}UVyLVe7u@ShrI}Rzj_5R-)V>3Pd=cL=SI3%urZ+oMXOqY-&AobR!u4C_ z)MED}Z13%T6JfSXqKU_R(MoGUmA&OZ!1g5*xf7#5xA3k=-4&>lcuC*fsrZH2 zhXTDFYgI{mY}GzeY{`(Xj4ii5d45Hb-l_a-{j9RpzEUAv(jKiZ$5!}8ZNvutP?sN2 zR~-pU6nZtaJiYL?d-P<~XQQ7!jfVNDGrf$;y{!&02eTr2Vm?KyF!YF2^A)e^l=>f@ zcSU7!b$v#IT&$2{p>~Vu^_NW?{e5p@rVp=m>UuPn<$%UE8_F6_U#cTFhsP}7FDmtbvHwS+F ziScMZrZ+vQSElIJ1+=ywXid+K`8)J-ZRk0*--o`}9i}!4b^6xdt6}Dq<()pmLvy#f zX(sdKnV`nL-s|&{YctlJep$}Hje~VmZr3d~#LNTNTn4V$ABA1Rzn|Wh;_IWbotL3| zv-B^IOOK`Oc^by9PJBDAz_>IihGi}(b_o=d$E^lBH&t(b8U%1aUhZBWKdxwFdM}YH z)I5_M-2G57-Knj^U(rHh4+iVnuzl~`KF5mr5x}Ealjr1nqcS^aQx0kzow0kJ zrNy0$L`-;vMGMb5b;>F39B3SkR<|yAyQ(gq9vtn8zN_NavHw)M?ka4n@_*YJQ&+d= zuGS0sQST2kSxnjWytm_57kTC+gU!8FNFmXV^7Z0{l#N3kT#sD5%Tu?|5Q7S{|K9(0 zv@T|#&!oRHL?yMaC|+~>S@+K`9Fu$eAMQZj#$>O*Q9u8xnEcafUrTvJkZm{uH| z&&uRkmux9b{(lASD={%s>k&fBrR+aHr1r~2=2p^0LC;3@ZZ;VMBi9v-eo0nu!Lc+g z8J&mJl8?d0NY~`|qU!Zmm%fjPJC~T9xwjOuLiT7++}Kf6x}zMI5{{j^6TB$$9N<d15fHyl=0YPAYyatZIO^@iJNZM$)1TPy(JIz|L#66$N20a zsG$>}Br+qsF8MC1?(f1t0pSFzs{fhi`yVZ`=f8P=5LUVwZXdR*F}p0>%UQ1;HzT|Vw>4(Imp@(;7ognTP`B3hPnbU{>AO7|~fvew=ES_YwJ>cJE$v6<0 zm81E{d7(J?_ko|D39^f^z8`+G5{_j_QmKNXen1d?s7}j_``tT?7zN*c+P}mgZ7eOvE{1D!C~_J$Jnk@YrIwVEq5;{8?1)KWXE!a z_D|096(3)VDA)hl#(4~dUQO0rv2y6ye^>L?e@f;bkO(()s|+^xCg3soTLeEX2)c%Q zV(;{`dcP@2<}0?XU*6_gWlrYt36T1SrrKWlqs2Ka#!+5Gt|@^IN($5S4deox_ROARp-|JfcZN~f!0b0<|~r{_ip2D0>rkw+(eIo}!K zJI=Y!-mUCUA+koI#Y;`D3sv^-Mx17ouHlB3&abVoCOQ~5 zrjzFz9v0TD^{z$8d?Rw7TvbdxLO8LSoxGIzgn0$?!^VSGqta1QcQ|4U3n zYsNXlj-lM`JT_ZR(&S{>k;$4pD`nY1|v*Wkp!S>+Np%;H8G#&Uq)d&24 zdb|5{lly8j9t%+vrDxp)*ZGjLEveyH`pLm&qHwyMC$nzSW7Y~mqEhZK^@v|%)Jfkb zDZHn_JwBzuv~#XsDi;B;`Afn zoL|;Wq-so7nrJwQPWn0Q-nS10DwmoZ&_1C&^-y+bo@D#Jilq{>1lSLQ6c<<9)f7=w zcm6h)Af4D6%ZAv!eo1!hW=*JYc=WR|((#ONb2%3)`VG&!bvxuRNZC~vvm4Hq(~>uI zL>^>|Y-^6lD5^hiAiGQivph@OD&}QI=1^53A-l39G+}`7Mcf z`JZ{r9LMI_M#;%G)A%%^s8O@fTMxZC!q5CP`M^zWNv(BZ z(ySSlG>|j;zd-x@C!9*@_nf&CVpzK>D2^i4^JdP9j^9O>0jTnaaI7UYNxy{$@p9Es z2{Rtdlta91>SD0BsF)52#e~35T)L#q@l6PFwLTi#Ov}&GK#LOY>2>%|F3Y7V-mH~(y3MSw(}3)3dD<3%8D6YQNpTq z`JXA+YxlNdbN@pjPELo>fA}TU&8q3m?fa}|Vu1Vum!Mmve<5ivZrvo@lF?!w*&?z> zl;vA&t##n!qkodw5xs2^Y0PwWkGm5zaM<4(xhC?kd@EdmOVVCN>ZnxR=dvsO%HuQh zoE<598U84A`i>4Gey}?LAL@$Ypd@yTKqS#A^=CFV;l*F?HJ7JO=4`C+>m3k@N~ZLq zF=uxo9ee#$F{H%#?~%3}BVTsvGKP;7|HY7!RAGJ3f4n;R3>K&%Hs~Z-Pxh^Xv||<3HB%j z!gC*d?cVltm>!WM> zD_(0XuavTd?)yynaa^7ysxUUs%@l^pB$+8;d*A6YUenmT9=R{nHCMXpFoIJ>^e-A( zwachtkgX|a6K8T+4xxV~Q!@s;-{6C>$gVor(?DXJ8DQygBt6)siN~l~AlT3`bq$a( zfiqn2%w*TlRUp*0g|JSv64K41LO{5mN_Mzuwy|~iTJBbj_98yV<31AjLMF(~;hAAc zI0Z=`ry|fcJQAnx7bNTs>fVCA+xTFjjPhZvE*#}^_5Rzd(mMoZ#@2heHvg(gov1mH zq?wv*`$*H^I=&&FSUu1j2t#=vLO?oo?U%DSzV7y#74gtBUJwt$ijp^&zeCQ6NErqE z)XtL9qzWlY2EfXXuYCC=hOhIS7r^cMI<3oymn;wxnY^AgR7cq%yr%Bkk09Djv1=vX z{;u=uIqXl=6|5B>Gp%JK@x#_ng|k@iRN-90t7^Fc2ujP9k>?0!L_b>Ej2!5i4@ZT6 zc$LBT7p+j$w7eJ7MO-$d$>3Zp~>+LzCbB0e0g= zT@TlPQGE5hfGruKr#8UF{8YX-**kyEPOiOqeV%pYYTxO8Aaq9of#yXjm(=a|G}q7L z2JW9(b-!OFYPwHa5lLE2)0|P$pndB;0R2of5KaHOu7+vydp9B|g+CtV_Im@1 z^GX{+Re$auOd#NU*P!sv4`G9fe=rWdWXI-*LJIV4NJ<=RHC2mf+A4mUkQG0882Vfc zVBJr{h^9l(C+2Xcox+3sO8kUw>&I`e1M<3Q@!sr+uG@?+O56SzJq{F^TJUGP!gK#y z!&|`}TB#plt%6{xN0 zITHqae0%Bkc-i(8`A0!pgRvac{1QAnl2szw{eEVOzxTc59x=j+JWxFe?)GNEznkYj zkx!Ac2RBrz&?m*5jMEOD4jgSaUeiYNqHz>Fa-PXRg^^nWtE_8#5Z0IxUFyn#yq@Zj z1j_9N%5BzRq!aAMc6U#xjzoW@BVM%UoTDykYNVJ;^+eg1^UjtPEOmu^E~Kry^3MY| zV-ArAbvZW3cX|;Jf(?15Q89N&5yv49Ddz1Z$9ImpXRQI`X&sfFZsnlY$+EHf9Y;zi z?6wYMAi-lZ)9kPX^MORuRZy|Jx;8`P)pF8z-JkdB0^r#&L8V4QIyoGy% z`ZwoP|2gn}cRZ}$DfqdQJZRgCuKzgs*r9YIOWj;{Vt`%fP;$90r;Izug);>EN5yXR zy3b=nMc<4u=&pB@{(gF>I;4q7S7ic&KDx4y017#Kq6{{ zV8hOxKkOFr(%I_kWCm}hTImi%=4*!+ml8J9M#rk-LHdm#>_X2gjBohok3s@;N;X}5 zG>qMgAT1L&(`E>iQ6|4miq&uG<-+0~o;is1ZIaya!q8Y^ZH@3&}xc`e?~ zR1Cp(9qbB}1yvlCVsRd|q|C2WslUN4Q%MT)Ay{l>iy!(>VB;ZoL}6$u>Mr29W7SC* z2GK5<#+LEm>J|VSwwv^-hAi1loM85oX-%p$21SF3beyte$2xfCe%YZO29nom%B7x% zoIPn|Wlc}y^75Y^{*c8+s(&1$nV(8-amWundFq!7vs<+}x&urLp#JsrzcjY6W6e{O zsPT?fOMO+k3~*iL@dj6zDXfX95Eh#kVQ$7}zZBojk+v1a6G{#Sre8%=2S@e+t9CrErZhQK1Vrvulm;Wh)zP+4=Si$SH-a8YHhj4wc9+1T~3g1(LnTgyW=IFcIs61bi}_h>?F-r z>|<#*wXu1HXcK*?xW3K{>N-aW_JbVRuHp~>7OPrwoVhoXJ2x)fFe z99i3h&LJ6(YPL9?`(4d7a1C6(^v(YGCEO((g=L&S@jjM*Na&;Gf(Su{)nS* z_L8phqQ0w(#^!-H(y@2vh#0jF%*oTzoMp-|!5dWlckG02R0jt_&leCj;V;-o-l!k3 zX^T@RD*7J60CpH)`FEo}7YL5Z({b5iAhGsBE04CP;<7J6`*Y>H7xfHCp4U^gRT~s6 zwhLY(x8Ih}PUJH?Zxs*Fuei?yY!I#=s@cb@7R1q2=}Q6J>!V&&S>mo8*#5^lM_&6|&^`*#~Byl%I?D#D2~!MjFop#|nZSk$Gh%nd++* zGDXW@Smpt4tvn&n=(?_gd+{w2N0>0w6u=FUvsy1Dyc89Dv z-(k9tCitAk5bM`rv3iXbr{Z|N14#~dm-M~1=F=j1M9cNI<+3(=6%;Q9v61*8ys#Qz z+p{QM4GVNV%RH#uqe|RWD-(c_n#gz|mIG&4w^b6{f-e4_MH`Ik=^QZ)|s|Ud<=ua=Yz$mzJ5!Ml^ zxTFQgnS4-dS99iM@yrXhDm@MK4ahO}p zG+)7vwlUR|=-EdL#KcR6w`|$Hu#c-SSdCMT%u9QuT|ZX85n;W<1BGH&W}kq}bRMCZ zJ|PcoAzB-WM3{3Tgdbd_%5VteyxXlBy?QKC{`Pr?9=TjRveh5w#BVW7s}9n3b&`2f zxo5$5Q_41WtVY%^njAiN#aMo!dUKwSkF8vZEgjjlpB-BdPdbVAYU^%HisqvVAD=IC zB?s&k&V1oSLZ7pdlJs4ecKQ%Tq+YkB{bKVn{kzd7#xha!);c|~{q_u(^(d0U#*XF8 zc}?>z@R>Rj$IT6qD#p~XaZX~Bc{QiPG)?Ajl~V)apiX@LYLsnFz17$RRs>_d7p`EIR)%Mm>S-p7P)(i6F*cdWeCTVI$V=1_tKm}$5phO?|2O3 zfQ!8dzov!!BKHD3h^*_eEAC~eNyfEYhbJKm!@9MRwB(&5Qu{#kx312{SZWNg99UZ; zQIG>AS!t?|e>DfhJpn!!WrYo7(_I7j4F9PPrgY0CE>x>$rg1nPmn6nv<&GetjP~&B<8|^pCuag~r zvRlX#(pNnk?Qw$R1iQV;$f-P-sw6|m`m>D=<7VWUW-mT1jB3LC)QwNhnWBr$6Lgc# z-n_NkWAvFVh$Futk!3ur_UWaKj>?%K_YY!(0K??a6C8V_tEQ5YxK{5W`vWc8Z+7k_ zJN9=|m28+hoAWoVhB~^TW`*8!bgFD2J+@X|Fo-6SC~T5xxyP?X56CY#A#6ZSGAJt7`+U7Zx4 z=&uzlqN8GPiS@JXfGQ?i>lYG!t2)cJF3jY@K3&H3cNGruG1x9zlgHUl`&0t%kw6fK z*TWR@Nso@+P$PNN<_=s|6x1N~2Y~8X{dIr$Wvk+ukq(L8(DdM$LUG-4kk4e1B@t}0dMo^Z}8e%-?6m8Q596)H{c%N9!M-0`76 zG&t53OL#;j*yRjo(&U1jUntGoIEe+Id5XRH`-CtPt7p zXy-!<`d_Rjteh4<)ZPtht*2XRFelf1F&9}$CSCbgQP0`ZRz)R9u;c-mD^+ala}^|y&vHfELgAnKpjvI@UN{rV39_Tjwcyk9 zdu=&MBwz85q~nh|kVA9PmhEjCAvC^dgN4W!ZXK1w7nU1UW1Y37?EGU2*pU!8xJvWX zTgD-@>JzaVzg$K}UfpxHp+hKTEKuB5=XS<;S51@%K{Lqh;^Yx0%627%1r-~KXllwt zmke@!mK~-}aMiI=Y5wY9S6dlR__EEjA>f?rY?=u5r;1VGWZza~A4(jjVc=7Umk(ZA zr-!W%TYoj8Q`+;}7TC_;Xs8-i1NwLrE=d>=`E1#?IJ>g7LAA;x|EAO&{t_ZXzlD0; zf~WjVHPoZ9?M*h#`fXtuzPx4mtuZ-oERIv6vIp%Ke&(o5@_UhsR=#Hm&%MWdsfm&y zoH@*(*nCCwK2O3F>lP{*OLw(MW>xtDU~^q|T_wXA=qBw>djo-7yO)GSwzzjFL*xnR z?T}3VBi1sk&1=&if6cNTvmB<$Ig3NoLTo=QrL>cdRWQIJ`~582WyTsMVRfZXxm&`r_2BN)yDWFg@PG%5L!K-9Y02YA{82@pov7sjbcm#)Z7ep5A zj(caWAZu$IWESGKprgwH1+zu6W9z2gJ0u|HzA?MbZc<9%{ehJ z;Y*mLD@&KrmLHHqgbAL*Jv~d;sy)9}T!+KUtTR_5?PFHEVtaGbREsKLyY2PKj-!Gff(Naxv3DFYpLwrO z-OolD3Fig;(?Fg#pkljETb^((w1IZqfR=7>aKwJ+LtWhn#k7c{|HW=~9oRgGSk|R`xCMH|>9Y%_P9#X7d z(nc2^$x^nNKJ}M%f_X!3Xpra?0lE-(eDh!|@KsLw>V%LR*&xq@*DFM}x6!ObDoI!dpt|MXL$N@^kUC^ zIoP@|L;!|-Fkl`iVEM({8(EjhV+$NlI=m24ma*kXlk|^Z4w#5=RVV zhP|YxSJ=VsSr{?h-;zWnSyX4@!x~j-svHNPLO5{hIh9ww1<4MVAyAK~rEz?$d*k@A z1j7Gi1#$6Dy(7+mhe2g^5PeGyXc}Hjy&G>=bz7vAj|QZk4fB4O7%GI#52#A~bV8)QD6W3k zFHJ7}2>YFK=|U;=N>ip`F&A)Wo z{C#r3?Vg#h6f{x2P4>0DBDN3fa29Dq)`veC(h}F2OEZ+tr{<8S!Xf`0uVC|fSX;-c zJiMVK=U+RXva6;{{!sHJ+MCUtS@j2sm7JQlS|Ng|R~V z%NF*G7=w0-U;{wGH`VjH&83~F{rf|lM!p{3bKKqcz>y%{Ki4L(5kG*pP;_=Qe zG+nys_v!gM^cN+KhaO-6OLl+u)19`t5Ug|#FI)A#+7k-IJwt| z)K1v#Ti9i5py{_j>@=49wQ;yPjCYM40VL$z7K z=(x2iiGn{jf_o?%$kfw(w=Z)^Bx5@a89nhHBtMs(cmt`fMkWYbeSP%8{1Z4(Rv3>^Jb2PAaWk7B(qp8>3>{{@n`4G&eP|!6pom!LnZHa(={uPX= zV^iY=bWo=CNZb}^r zON3SqS`Wy9_uSZPJSQw~oh=zIG6gRr;uoSMyGzPv}GaByMJnwdhH*w)WZGcAgrX;Q;& zrrk}aHSx9F`(SrD`Urt`ZpQ%fBt*)oBvw?6sdMO(v0=Jkh zQ)K~#Sz$-F6fDhp7rSgk0cU>ul-lYCFGYD;_;`JL^e1KDm=y5YMy{RjHUZljOyi6F zDZ@r)uVVzRQ!Z;T+t>XuoA!TL536mcyWa1C^;wwhEl2?+yXNT+#WfpIs&8TM93U z^j+R=x*I568p=xwnsd@wd=h@yQ8|_rF~SNz{-Kmf(V^-ih}s1ujt>xM<2$${KV@*O zU^pi+pj4Vc!B>5y<|=MBRRsu^0D+r(A-RN<-RiGAwrA&2JI%q5e(ZhJ(TQ6oJ2}e4 zV32oRFqFAOkG)c~;|J3J?w$d(p^tF+Tq3jU0#t>;lP^28D2Xsvu6@0pIQeos$X` zaIKQPjjjwg+-50Mw?%_)Oa8>#)#wB)c;_lVR>W7HU#`w^I9%V?qRy4d(Rk&aO6D2hayW5b6a@l=h!zedc?=ltqksYn+mRzKbz(9C|miM-n$u$cAEsbYdbJNNAFuD8oRZxdudh#}JTiN34Z7q82 zElB~1S4A;Dk7rhV=E~TGCdXAznep42)qu}@Opd}j;~bIFR3Bv$DA!W96T&`b=DlmZ zT*wFfOB&xSmC!re-@(H2RWsr=Kvr9hibq}eg0td#3 zm&Ux0XD{S5Cj`6L;#~hrL+s7o_MB1hdiG86iGmm>yW3nx#(v8C(!M-jetH|y&Fen` z#~~i9rirP>;3wZIjQ{BGrwke8<$w%NgOEf&(qZbkx*Yg8`8_70QQv|070;P>Xn&VoGN%N*2PJWrX0;$C6( z(yC`RX;Dy$myy%+F1{sZFSbBoW9j?ui# zL1f6p(*pLb3t(F?Y58HB`3%=|1?T6lKs$#MGpOsgZj$JD@zYg)vg}{-O zQBisTm4?Ysp@E%NTR@+QDH#AeI0D3cnC=^6jzJ>KvD*(oFSK8 zs2*OqgjNRDjoR*r`sxF>TfpUgRJ8WBT=>f~8@tUq94X&s2A+*h0t57dlIQB%*H&g$ zE+z99nVlAQ)@+Ffu-AQ!J%3*UO>UzAK(#k|oKO$-bnX|5?H5Ms2%2 zaL3emP(I5bLb@f9YghBkg1FsIo}^5hE0{xZlYZQskL@|UG{6b#ceg>gO8S1r19wgu`1y`E;MwPYr##V^Mw9Lp zN=i?5p{oCz|GSR!iu(ap?K2zGMY3e$aXXRuO&y1BL#F=RopPxR8py0i#Ur0JMofkL zHNw}Lxex(-1ljShYXaA#9Y=;76ib+y10DSkmn0lk!{kZU8~qEh$eVqNzeAuDPjnsL z7#rFsl8_`!2tD}xAwS#AVL4|0q9%tPzH||X1}s+vaGTO1{uD`N|Lok%?aaZCn;)=A zB+Vv2vP>ux=whC>dSL&?N_ z=kQ^weZxH47?TrFy&4*ZeaDM&UP$m0aNCyl@pf+>T6vYtj!cI}V#}Tb$7w?`oe{{ zK%}N_ps@VeC|a(89E8kbivTG7Y1B5o3f~FzFn~z3!cTFkqu&Ie z<^}Azwtg#(4=sLlEL?V`2o07P-XC+0rHg)=bY>GBPeug~4$d~|)@cH@Ymc1Cn1%JS z4lnT-1Vkcr$U91R=oy2+l9$>Wei`hPym2Ukv|@H~C2FqPyX_uZG%ibh1l1%O1CDTh zCt7tFjrl!(g+4w4o%cU}W)~k!l6`o1^7E9N<=|K1{D4B)23jOI1kyb+58hbBFzBcX z#W;1WTeIlsWa4ekvHoQcPk_+f4U+_8Gv7gsFszQub_u3^DFC}`EnND(m%c_6mV23s z@4Oqq&ghcqflr_xxva)}Yy7*drEEM&lT@JsHUAGMI>5|H^9G5T=b6Kf+&u+#c?w+> zL@_k^0H1ba+;#QXec%*HHD6g<&zb z>y(ASLY1Z)4&x;{rqV0ZXr*B#2n0HP;wxe_%pij525z2gRj)U=7x zl@M?L#W_V7eddpSq7Dh1*RxkbE01SR8hwxoJ~_k)Ds+jt#EfHG`|SXAJ8RR5*+NJb zuuefn@<*aBl>d_&SLeT;!OB&zY3Hps#AauxuB^p&?MCEuxx2L9V3$5W{ar0L1TmG& zp%imB)cCM2kr1=pvq8+mHxvj?OI`8!Fg{9lOVUh?UJ<8t(CzKqsUBm-2l=;)sSnXy zPdKe$-rb@Y=aBTXptxW_1L9v_VKX13CIvjF4t~iDiIO3;gb8}2IdECO%8YV~$pkrj z1)>j1R-eL;SC}|RSwgVLKh{VgU9`&One@#s4c=DIOXd#N?nZV1@kr@ZUQ`j$3A|a= zd0aiJq(}AU@sTm}Poi4UTkg#g%$|(qowLl;GR;hVuc`9TJTEFMor3QaaQNo@Vz^E4 zb=$S&Q`pj%0ka32SY(lQwlBqNkXM+J@q4_<@8)rWlaVl^cd|EV*uQVra+a(teo5HF z%1&{OEw0)_OuoclWfW1<{s>>?eb>zy2=za=U`xMUEIuT_A2Q+XKZIWd^^WL^*ju(An;ceKXrd_!jj`rG0b1 zDz+@^4YtF`Tz1sGT;tEp^+C9?RYAnK$xk_@0mw1{-h7^ED(T;oI3p)Jiu?l~FI|FB zE2c1t7e-0JC?9kbeCa+|wAc+Xzz{$XygQkCusdw`pwHm%9H9DHxl99l9`ds?HDg*p zRSu59T)XzdpK_RP0jcfF{aKY`D|{%uWf2V|{soggsgJ_S7Wb0yo9gGMm1-lu;!t3+ zx0u}riP2rf6pWnPnqC^g0r#X}McZg>MhMnd9wkKBvb_KJ9ZzeV$^=V0&C2b`qgR0a zE7$~V-5ab=q%dnDT`R<#E*GRmlEGtW_r`@u3ov=gw*z1nd=%mgHlqa@<@-BBAg8hX zf+YI(aX@D-T!=soSf&t8u<>*fU(zn<-Vf$#Jm8q9sa%!+m=1Me)>{Dsev8xO?6K}p ze9{$+RK;%%EQokc2pN&!m~?MM0odlD<8HpSfp zVZ#~jNY{LWP3eKsRFwZHLdd-=i1ZNBr88J>lc<_`^qxR!aK8O{?S?+!WJxUAH^0M;GHoXD|IBBzwT5&`_v_7M2us$Nb7Z=%an7FG0%>(Xn@U&7vXx41x zmf-988LS5j?H)tXN^XleV8jeBD6Z;*roFu!2BfrUBc{8k%P7%3gU2$`#WQsa#0U{k z?^zbT2AO&0!Z_mP{a^5A<~`MvF}jwmrb?O`x*&3ha4Ju6=|iZrZ{KPaz`FC77O6kR zktGs4*7nf8K_*t}05Y>Exc&+hj>D=ikdNtLV7_a4G&v!@<^k$mP(_A0HBJL4F1XS9hl9-4U{a8AQ%dN!AKKk@;_^q@HmuLOb%u7gTFk%EgO z@ABl_ZHXnIfB4NIE^{T+f>l}g-gq$i!{sbnD~Xr$ z#97lha9sIT&&(fzBFwE`!{G{qGauY42YQ0AxTV{eTGbq_M*fbX>M+kML}236a{nkt~y8UJX#C!H5-Z_yp%y6)ELXPUsX!#8=JGc&!LwT z>nA%})BsDB6vq;X(YRcVLvKGppF0)$l*BjcKC-uaX@fJUAMCQsf!h@KV1G1x%{2E@ zC$8+`s$P*QLkTE1622wbDB<4K)}es~vm4QX$d24tRyY5@sN^w5sT-dO?f@zqM1UEk z1jtWYzk&2%!UwHcz(aZ$z-nzp-$r@E9d24`K?zL4UB>n+n6yN}mw?w-c;hPk)sufW z#3dY3*-N;46vGR`GZ6Un#s#M7kh>wEr3+Kugs(~W%@lx~qr;SGyL31{3?&0lK@{j! z0Q&Y5Ix`+7+X`$d8c6%X`~d=X?hRINA4)WM6(lWyNp2~9`OYt<`0rZ}Kg&L}E%eg& z?@OEkw#m2%Q3uQRZ<<>uBFW?TvuX<|q%ylohh{T=wv3lhM6jCf?K9F1-&RdmP=ts! zxF`Cr;7t;|X#h_%e<~-tJsgjcz)>6%S2FAzoa=jwS)1>k@(89%0JXm)hhlx~arSB5 zb`Y#tu75RMk>zR@RVKet!D7aNq($E&x8Sns>0;T3I23+}dkyh+rK387#6TA5l4u3&6V3z&_Vj0e1o$iClsVrJhwr0 z1w_CyYT%g?qbpE~@X%+$py0%lURkD*U&oj0u(gZTurM1)CBsmz%cP1#@u|9yF?ypP2NH=8~a1tOaZ&fI%Bc z)%~gBAV*_Yp;%K*(CLT9Id=)NB;^(LNFudzIoY!l>@D6kGBCDOtvXss!m74aQ6#!7 zPgy!We9mr1S-&+UOhQw_z#u0AV~)T#Huoo+RM`R#_J)~Lw#naH5he)&D-*Qk2=1xs z9*0K;eVmi6$4nDYcSmCYWumsLt+WVHr-NNoOsDX#7ZPZ-1#pt>yE{zl)X!B)j5ifa zG}7#D`Lh3uxc7=`vWfmiqgX+}LXobbfYMZ&1O!n50qN39Ktwu72_P*hA}Z3Gl+cTj z5^9hdKmid6E!5CEp+o2)oQePUJL`PwT%Gk@oE!0(%=665o;`c^?DCuI|FaRa0rsx~ zJR+yp%%Zor44>NTvS@6xed!{!-ExOu3aCGV)Z`4`s6aLNVFOpXc`A z=JVB|1M1h5L2T}PG%xRpNc4k+r?SJV19ZiTYNs`K3kRyVr8U7&bU=2=y>7UyGQ(7D zl;HZ`vhJTh+a8&{X@~C!ihc-G-h&}#Fv z?_wAYkDnempT*F4kp82ddN!*c;)S0d8UXby-`ZKYM?lXk#RKvMlM0V-QIWe0GQvI6yHwsJxDy%x-9 zB!QOoz}t@lQap^W1n^8PHursl)VI}(y_PvZ|JoDMA2H0wmiu zK(2ySLS~^OzvQKG7a9w2XpVf}?(7k8!EWDUAH$k7pZ9Qeh%g3DtsFK9s8X*fsZ+ie zW%vUwCC$UvK_54FB`v5{mX&Um6Ni{GA4d)j8_@UEuIf{cMKjqN&2Qa>3BPhC)}0_F z@3L^8+;Nh{M&<#w)J>5U@Rry~6`)H%F`q*3Qg$V&gk`-Bullm+m?KK1JoWQaK~Io% z?kj&W#nNDWZ(OhH%stf!K7dQ&cA7@ZMZxJwo#hJLW0I8aWTpE>zHV6=d^hvt6J+2* z9G~}=Nq!xIVgL;GM-x~u=Dt7wf?v=?a-L*4T4kn>d;k1?)-bOC7iXaj^NmZze1a zKXnmm@)t%BkgcPy=Z#B(26CN6`ue_AU!$5#P5?4Tl;eS}U^g~M=lE{DrJ@#eD=jVo zD(B(ty~VdzHBj9=MSx6$Oc-$w0N} z`Fe`_V7I<22`S};-$uss0Q!&SdeJ|CgEuyK0hMku>YVP`?WPiA2lNY=K(x51#b5=; z9@c|F{0+e?C{BgD95jSM9$05FeBa9k&0hu0=Sb-hO+Bh3onF#syz|8#44J>C!O{sj z0G5V8)xRkWsQ$U6e8E_tGeuO1hUISyIC!ksIKBExX^~ z)!_2IP`y!Ilt}enMDKn)nRD!K4lsH;wk&AJL4S%ZD(Rly$VnL!<~YEJK{@u#3{|LX z(+I*G#Xd#gtSe;UZrd}VuD^bVccL+;fWOf)+B<$!0wM4P%U4w@FL+yjE z6~1nx90LyGz5Pw2RN-Qw0upx+DvC3_b|>A<;VD+o;C40y&%HC^DMHhe+rtSh4*KApQAMs8UyRggIyD>&1VS&+FLq_?h{sN>G11k190^ z5Rkh~DyT^DcWQxH>^(uMZ`Ay#D)SBpOnod8nlwdCcQOK;{6H%Um*c(JyZZ)b!n2WV z53!7da!ejfihXaY9wR6~&II8H&&ad#*j^c>eBR1Fc0!rx_~u{sgg@^235fjzVt%cZ zRh!@EaBpvpH^uua~ zuv&(SZtnG&tiCc4cr)}j9(s76=Vms_eU6<98h1c5oMj=fO7WG`xWXn9hn3O9$*Z(7P@b( zJs^tfwBAj1sRf4>klgXNw@;ew&rvj#{u$=)T&ZZKAk%~8Srz1ERL{MC***L3s~;W{ zhoDM5M`L6wLapVFiJw4~IvdVjdJqlbLK(uVTDl|#FEONHEpUbD@Xl|?xy{`n+jpKehn=B9HMIHog9{8M9&+~_PX4OMy%O@ zTo1~md~qP8h>7Z%Lc)gfg0EU+u|3%r}$9r&k35> z;4jydk5C}l3>~ly4X@616R(6`&D9=8?1?^+#gDTHQf*9D&thwshdoH*!y zfk*xJMqQiE#VseXJHx)G>MFY21Jpvm$$Yi)=5wSsdNvGK`UeQAy4$p-GIXjEzx=GvzQ>*7i`J7BU`m zCyX96FdTo735)^Tm0~un0sHmu_@qiBJ<+Rhv)d0nb4y-BL)uCle&m zxq*7}Pcf*K1!|9h{hV5xgck0o5ZXKoa+@XL8m94-a%;;3O^Aa7 zFNjJ58XcP(HI$4O4}z&r+&VVQerEqO{rVSBJ$}@e{Uf02J7iwE#B)^ge}95}>1(t- zjOhSOSP#NP62DO2SuNOn1w_nlzwYN_rF&+o*nU7t%%6~;hU`Nw|2ly-0%PF=nU^%nB8wgX zR50CvXU|aDp^Z>TmP>_}z52eN2>R{_;3!H3FSyA@G(WW?nsW1v*vD_w@e=spw+`y2 zE1jsl=K{eY!u_$$f3xtd18&X$9|HNAN+~L85PuyZ{~-vCrh-do+z^$gCiH=xEq;Ga z{B990fMGgmVHB&8zj=g3(cUe<4QXGM*MRsiz!e9 z*(<RvvXmauWFA``Rx`PjfROCp@=jyV{>&rvH&!7N`y8ca_J> zu6q=kv|z3fdc!#7LMo*2i%~cUDmQ+*m4mZ0C`URhB6cQGZa$m26t97(&@aOG{n9x` zroIW%Bkkh&43)>iL=jZkDya)_PV_bO{Y1ZIX_y?z6xH6mpKm4oNx!T$4KWzKR!{>u|UR@C``Ff$F9|kf4se&jJ1U~&4R?U#Tqny^i zctevgs5KVuRakpa%SH31T}+usjR76{aH~?7w2Z#od90}6UnJN&J7%5ZvnAo2^3oYaW-soF@s!8`3*@Jh4hsUk}bY&d?M#6Ky!U_V>v58DU*s6#%KJtKE3C0`6 zNZklgLp1D5K|sX2&=YFCwFe*}{|cOCGCry)8(VG#dBX&tn1w{>Ag#Eb*t_ z+|9z(7@D#}zVpIopOyR|@#iCGAeSPb?v}20kgtEbshh*d;Ox*%GtxQeRSN~nO zDoZ>iqAB~>xQZIk5a)*G7=sCbPDnvylOg1JVKih zi++eh{yKj`T{0=f-!w7Z=a4xC0VvsGp(Rb(^4ae6kXyX)94#;iUuv7WSKzk)U%g>iY}Vg>WM<)SR9g{Oc_O-+n43155;r%uk)pKI(bg!JJqV(PNh=Pa(vK^J4dX z|1GS_|8Y*9Lv6;$@0KgJ{~jaTP+u8j&%(XxynWOLtH@&8b3e+YvXo>Q2os;p*7zAC zByz|SqDE8y?aZ&dQT zUxo7tfSx;mo`1c7(j~SVfaxuz&_n(@fc%ol5@RonFLR8r2nZLU`9~3Vi`P~@nCd;S z{i%p;d;!F@xBvh!;z#lUppdgHbw;v{o)hzPQb$2oU+L1f7qjVRiZI28aLE^F!wb!S_eG>XR~nqV4{wm zw}2ZVs3<;;owhC@1~Qz@Gnr7aoRg(7IN42|-3MB+I?9PslKPpzz&kYiRqa!vw}^tS z&fJzwoH!eGF-d^fxE9>YRw}{DNW|$wO3Mx6wv+)bFZc2A;+ayE4CYEdF8U;1a<4{l8#5_e~i?UiR04cud zX5$BOq0^i){l)Fak#LKi9L19NVe|N6aRty*DqEI+kAWghK>{={#wg7zBCJpN-U9by zZT!eqrMr_%>Nc^0ZoT8^5nyWA5o{T-#2soF0)WsP1gFE-CdwdXBf;jC*A-OH&HN0p zL9ik39Wr7u-`MsDh!=oNbQ_Hz@q5|^Kn!I5l`T*Hv=eT>B#Zg1fqSSk7vB7EPLymV za{^-c6{KW&x=Jc6a7xxbDw7TSFcX^Q_OszQc@7-#ZH@}K!11sXAKe6U8O%jAsxGZu ztc_r4f6w9J$*1XS62=ISTUw}e4b{2{4+GheIRkDhza-tcjaZ)9JR`ikTnWr^Z9rsn zo{!bxFU_*4VK6a@o;BW%&xwq9@JGn`{DYUFcGNXB`z;3Q!=q6({l+sZwm|C2azbC$ zC;QA6o)a5^iZ~Mxr~vq=US?6x0TCR~c&j-K*Y9}OS*lzWS1reP z5#*gty_IVl(vOvMvB_cPY^9hG^aDdYzU1bH8$WXQbz>aIuDVu9eB)kZul4O%s3Tz7@mO?HGIzwOT85_psEDNOb0pb zTf0S_Ui3Dg)aK~5Kpi1(no(b&jQw16=e;5{ZbaZ!RvJM*%4Sba@X)V2!LjiGMJK=f zJ8JXxkAYPTrn)7wu*A|=T+ipSVppgW|NdO?NP*|hZVWgLKgf3@evwJ?GZ274tievc z{49?`2H=L^K$v&7t@s$^cI&^8M{6}E2;_Fx|3Y_y^Z>-e{rfpNKrV~B157z8T#?WoEY=MIjc^?a{!)6T;NR z9)k3hxyYe;17K$Yoy+rvdf0xHoN`Im&FyqMBB$|@v4^t^u!1{*tc^ayPg1;tHD9E3 z!FeX{7^DOQU(f&y`cuID?u$tPDQgf#5cOF!GaTgPV3jLTQCisd?o*PwL=e)w?m%b_(%_uMgait$^?!F7k_H;kaJ~-0tGEc_G$EX;zdVmaB!`wzyhc%) z$gbgc1J+E)9b5)4mfOVg9f8;UkOfk7?O(Xi5~@ceMjKb2}+gA`r- zFMN4v3Yvgl2ou$~eJyfY!|6Z;U}ofhd4noVN-B>-=%qc9J&id8QOe+ZIRW0(CJU0D zrW((6vC+7B5CA$MhvPP0TA)yU?Fmm}*?U^CVK5)I+xV_rjx4%>?dc|7shKjKMIdM# zzYOXsuO3&Qd&DCRAVF`eOc&T-=t1~%X>J(9()Eu1g$nM_Sbr6y2?0P^76BYd(~|2c z!uKN}_FIQJ3_H6>Ddhz&Xzqp*bO0cmW#e9{b!YkZEh0T%@Fu8TkvY5`_#_Ou^9xny z&(F<%$;&Fvah@EFYWqKBMM5`#B$%2c={K_E>3a1wej zt&ZUT|9t1VhbjQkPQCOWQo{5ckXMqUAQR#j6(0fel$!eh8NUOl`+t1*%F|eAAO}G} zqNbc40{Nq-ft=VYytMqYdz#IBX|W4=_;e%LOKio7AFKfo%UsQ+&MaDD#+K_OGdsKv z5Dv>6!>LFFkfeO71}P53R8!>nF=FsS-%Bmv$ZFo=0|3a1T5siqZ5JXPL)WH~JLh z_xHGeF1+^BNXgqp%Xfa_=8=E^X=ysdbJri>90?V^g^s?-FS_HLq5$dMsiNGk9*YW_ zIX9ySwX*no6)cgj-*i9>aJiGNV<_X&m!+5gO>Rp45ep*-vPKX z4^4?Lpk2-LX_{^hVU8<2Uf~&e<~~yb5Q|bhRW7@crNJBk_BAm375Vg<3h^s0d-*uT z5u=JKodGyPpD(puAP99U(iS=$SeB^*>$tcV1R@3$5z{tFx_#sl$Lgf@S&c(l=T?i3 zp8v-Rb96#(xFRk4D>cT+0H>&ecmcS-wnvmrP@KBKAXD zb{1~h#18~IQ1NwDkYrBD*LptKu&|wEf~UeuWHLYfX~-MqJ6mb~+4#u5c92PlG)0)G z+FXp0^=Torjl86V3_JrHknx=Y?UZt)OnLh`GYOl?n74n4K=jjt5VgY6(qqokO-QG3 z+xeLCH_r*-!WjTG_cHM13bZGANIrNbskG@mPnwy}!bt&0WT1>di+W0KcI^~+;OdL| zds;$h>5;XqR;p&we|htdK|tso&y}IAaJT9)wv(L!CE{U)b^7O!Ny{%5I_h5NZ++?k z3l8MHdR$B-K<~-RbXz+|ovv|e!;Ezzt4CsZ8Y5>l9ps_a|AOkA^nV?LJOlTg6h01C zNfI`>C=8p^B7ykouRv3&Qv_T7&b7%mOhb5xU-<=_zobqoi)ABHlUp z4iJk3mDyXL3tg7LWnH>i8eQ5eDBzBgwcDm5;#9wQYX^bw z0eKsSRGU?zfoQeOH7QhY)aq!T%dZ`v2>~#g*vh0?0BBNYMfatqhzB z(o&7fQb{UAo5)ce;rZ)MK|1$$&W2|ub#Qzjw-nYj(lf0}$G$bMQ z7j@@UGiJp{m%OsNF1Y}?KM2s`*zZ+i_Rgyu9|1TFz)dR*T$AFFPV&QDO{XB|)zr9_ zEf#@K<`Ffp6nwKVI~$kaUXbo2FY6&T;siFC@-qAyB%V_%7jgPMWAT6l28``^HNrBS5@PpR3YK>*<;wksJgEtI3tEA9Ai0|AP% ziiphy+lhZ42Wzj)QP%??YN~@x7{q~_-kWoFJeWvd9xevRwUYe+Sx;Yw-|TQx$$VFN z8A#5dZXM+$sfBI_;OX-IAOW#>4V3XIkx6y`I0-Jm<2Q0NU^=<*0uw2&xgmcn5LjKn zGrFHoGY380Vs+f%vW*L4a{W_ z2%7pc;Gh2=@60MSM~VIToRRmo*7iNcn#qiDS&?@b_E@_ElQgj{1g$Mze)&T>6u0VF z&E})+;p##NyaN(3!{6S7G4C;hlL{%>`Q!wLXUH=N(|_k8hu;_KiGK6>9k2@ zosz+9x;kUo;zfVb$neZ*B)STZjg@bvuW5?kA}@;(^rE*^km=^>n5sJ0i7Isg0m)l{bRyo@t3+-n%4drSo&_o2g%%|sorQfH%W*AkPf9mVfJ0;Y+qD6c!=b> z3iS(thrDB~IDR+o+>M#at^1P8r^*s@Hh zA+vG*gShfK+kQ&BO!TT*viKw69Ou040ci~^g=S1q2VoRp?;t-)JO~LgZhObB%5B1X zd*vExCqs)gLvReO{}Gb4%`#Dt{QgGhDvwhyw@gAKV(4q5%Z&g0fij2oE&v%>U|Yry zTr&l&?F-h@)@&^=Ct_b4BeLC_3d=qE4%?&m^I}uph0j)5DHG8eiDGp^OM@X*PY%ni zk{BP2mFsyeJvoe(JT{fyR&`n=i=vwJW~UBTy)qCP{evsVI(W+VG+%Pg->T9Ol$ld|aVvA3-&d=(eBzZ;<|z(irsdv+rTL6B@J(BF_? zrGOisoOFln^IlhA#Ej$dl^y=;+^6>2^LBQG;C_5??iC5od?^&4PK%B1tWw*<+SnRX z37e#g2JG**^fz>ZUnX6I=0u@Li&w^ymd?(PQ+t%G@bXlHRxS(Pq}3rFR=n14kbUbW zIRQY1yWUT|cA8SK_8j&>f=x?0jQG4E&s(EmBDVHH-$M3nQ{Z&0%jKHsW zi}J9G$xH#tb%%NmH$?Sp3)R#Kuw`Q#JC(L;tiRZ0Ko{JO5B9}{BaP8(E7K>MX%S9( z-=iAGO4QMmM#RlAD+0;>ekL4X3|dx~sdpeYiRAkZ+P~G^x3F`=(x-ByzvdN+dm6(F zb+1Sd;Ped24K|d6UTh;BP2l>dCQedu^n%b?&AOJ#^cy@faQ%%(dj~Ca2;@&#yC7L= zV`uIICz-7mZ%{3X;vFM*)t3>y>{mWVgy8*V(!AQHJMQGClMnZ3msIP#2R*%PheQ+6 zoMlnyQo)DO(lDm-DD);#ah2x}A{2f-8^`zky1Ss)*5qm&s`S&X)F+fb4_4z^Q>`pE zK27@?6Gh03I$X1K`k^*ulBi6B*1bRJ{JzBe`m*Egu#x1}6sQZND}A19_5qq#isN|T zneFylbHCH%fxTnE!gQveHs_z-M@Z(ceC`yYB087)qQy*-q?gXy-q%|I=4mgFwKnDZ z=89;oL55KfEX0T6quTK;MH^qP!c{Ar*ICxpQQ1s@afKxmTQZd-@I7?ShPpIn?1niVlpCV+8IwV$O_MF2oj?-vh4o>Rgu7t}X; z?bG|#nv)xB8RiVGce<8!HrV|}w7cx_g=`&e2)RLa7W@V?3sZek9#`(R`KIR1C`# zF@P-;Fr>?r?FZPgR-ohCs-9@p)pg$zMyO!?*1JUtXbMygjp3EBC??#v^kwuSemjq5 z(GXk~7X0i=gG`xYF`HRZ%Z}{~zyEKvxHnxdEw-@zQpZx89%|#*hn3C}IJ)96yHN7X zX1lla)b`dr%3e%E~7@W^)5qqi~+lW_KD%2<&hTU@#D_2A<>c!sizTV-pD^Cop` zZ8!V$cj2|AZ&S3LgZNRY$5|=f2{-e&r^No~DOXE`5)0jkyL*vmE6ukJHU?c%{MH*K z4-Oq4_e9NxVR`uueB(sT2N+%>PAM5^QEPMy+=*EfG=e(y@q3)KK7#79!`U4Nx_*>> zW|h&2-On-15m#Ll^u@YBj8XjC({u%T0iKcSAfs%1Z?CoM)1$qIi;Ip+zilpK!aA4( z_V#x(;)Tf@2|-+;ZOj37E4zBRr9m*_Zcz||WJ_}-%r4KncTQ~V`zw8E_;k`3bX9)1 zX?bYnN?p_#cR6|H5k311yYF&a!%wGS6#VuV7vEuZLG5JFb1XsTt-H<46~lc$6u+4^f?+7gfOZQ|MGpu(wg8i%88OYeonVoX^nIanfb#QnlP z)Lf=0Y=wKjFX;MQ4v)UWGwYMsu>Jv=TEvg=gYX-Phj91VVmdczW-t=g06X2?#k{8z z@t4jSXYT9eh|b7PHX^Q%P5Vvo{62e1m~4zU_EmQEwNXPDP`+eki2FGB575b$Hlldr z4f-mQL2t0H7ZlT(MvE>z&AwaoHv5O2U_7&&C)veRWrE%Wp<-e{91F120`;|WxPMKbIZV(ZTMjSVVxeOl(_5C5$e~`=xL*J7|T$5Lr|c_ z%+y5gu+SPdaMN)x?rDji59j-8%0a#>7e>^CvO!WE7lQ2`?ikS_1_BsvlI>Kw-xYd& z+E=YBY!sE~#4wkqVC#E2c;zxL-OsEu%?lPLqk4g%z*Mc7QG4}VH2)yCQlvRyZuJ*T zvU0r5^zZIfdlcuSlG5V6&m;q$?Lr~DWozTRb#C!PKl?cf{VyWtl{(wJo&GDV8i9%b z&|tD#eH@?xf=A(U`)B-S3i-!H*@r>tn9g`_+YFtUee3nMT*9jWsn2DWsn|vP!4De= zUkXoD~w zt~Z7M?p&=rT5hde;R+U|j)bey9=CmTAQ|MhHO2p}DPNGE36#X$hp}Wu^`BC_w)S{s zNw2hX{rF)g;LgBp5Zt0HH{!GtI(r9vHs!*z2;!BRI zwMD&3r_Z}?s@UHNV&9i5%LI|o!Hn}QVdlzXhV*^3P}wWfA@S9{{h&ns7w=^q|C7sW zm!hDR4qCM*Het15c@5BXQP1f_!G1{ZcKj$o=1cx50)uJOqVTgySV(hNVVdk3@8yT7 zMO-mtSn)iTdJ6*^dWnMcMrc=SfRXbUKi?|hMzB1-l-)|=mm#x}Pl z0;z5SiUQD6+H+aZA=;sd`0^@Lrs7qDM|&NB}A0E8T2T#08hRqWCu=aFg^ z_iz{N9-ZR3z6ew5f|ILBP6MVl(6xCD?rW55pO=hBL~COXo|ILc8BK@#vLJ_A(!eW? zS9%q9Z8(OLmFD!77Zfe)qQZ&48_b!^28?XyTy}1JtX<1z z=#&SBuNLc!8#&H9BSEUi#r7HDmVd>*)8Ft3*HDeR1Bxm!s@Vz?SfM)AcA%=T(NvsX zRyeM|dnk6-Eyzr+tX}%wJ$vH`Y`=?!n^LROS>B7i@G$=y`hxID6UY1VlH>eMHde}V zn?;XKWD+>wp$ohF*LFtYrz~ZzDOE^e4yDY|(_(bWEG`evjo&I1`h~&NlTF#pUWj$Y z$79$&G7SIn^d~Q{Ia$jw+4-Lg2nam|bJWcHR1DpQ`4vks#zJF6pVF zkntBQPTPoLgp!iv?sUb#o5s|F-bEp@5BI*zUo(x?lXl~I8#;oq&^jSZ6=nZgogNOI zmRw0^RET(I-g3~VPble(*MOymo?0hC z$B9#-b(%i-?s%#9wP8DLBTK(R>39$UCug?jlXzJ_?ctKFH$iE$-UnE6muPBXxY_N7 zJi0@!O6u`Hb8NiPr)lUX3kf<}ff*WXT*Vq@Hlj0KC+HA1`D@`N_q-=|6l$!n5@%nG z(I+e$oZ`sSx6YEgFI2I)I0QNY?Mddwk!UmQ(u^BE}lgJ ztzC}UsMu-An?5KR_Z<$4>b{w3)_D_ce6ebSt|T|#UZ%4}!#IRt=4l|y$%2Bi(;2HW z%7-Oa0?Nhw1wQBYs&qO$D=5&I7QBRJSn5~bUbM~@epnlKX6Qk$tIaY{=oo}j~0-hB>|_YZqA-?$3Yx^S>*AEqn9ectxR z!z>2^!rZ_;F*+vKYhwZ`pTLg$8QC^@QHYbJ3a8t$Fi%eTPc7QqzmITsLJ*F$ut5oG zp)=7#ji7kunm>8ZeQ{T?=j{@GHDB#B6G;YcG-QV30%h3Kuf32l==WGd=?foq$No&O zIuCntlYfO7q9ETlP=l{i!CbAzyYjdAnUT7q#+?@~ovkN^u3$U^VS;@vu$osd{0K+c zOZ3o(5jV+mb`v{ueQz39fAX2^!fk|u_rhM%H|{E&Ul}jSz4W`W z@UAeAk}=z_u6!7~@8iubJ-VI0-J&0>dMi%r?5g2pDobch@O;2A9?1yzP+wAe zgXWyx-OOEu-!3;zIBdyH{aO2D zNf*-Z_1n|vzoerBPm3D!^&l71j~>al&(*f&8}1&mWrxIqD{|f5#+%VLum+4h=VGSR z>(%&0m(rL7e9~Wz-_oqzwD&DjXrKjYyE8H-3VU?u9|>df@!zv9`7M~#PTVo!+AXg3 z-snNf5$$DmyDR1{3St)a>?B<`M!3}~2hP@!mQ~UP`OJ=)%hmB#W{uK=3%mWC+~~Ei z_g=|h3*k)}m0>8+m@bj?R?6XTH0*)X*Ii<94zwH4^JHpNd>k zw3I2~DFv%(j7)x^ZdUlCZ{p6)<6+Y(O{NI=^i`Dl2RV%FIq>;Tq92 zs(WX@`vkFiaGOa0VOJ%tkZzZm>K@t~RA_Df^+mO)uVX0#lxS>t%)C%%(N8i&60;## zzerkv=Ftg%-n*qIU+xzuB;@2cgElAW=9N|``QkU!IS%pmoU8&j$-yQ3q}$dX{+WPq z#kkXAv8mc1ZvLx9tWFDS(>n9`;?k$ij32au_5FtTB!cO#^3Gijh+O!xe)X7i3siJ^ z%fa*vF!n%Ov`G%Kl-*!x_0=S!-OUQ^1?j%QDYU=nl+ClbEB2MMxf(~L`73N^dX$`G zEBU+VYwAL(!WkHO1tW)!r6PW;>eF)>S9CRKGa)L;z%pa5%(ZxSG`%-uTN5`q76aqF zX8^N{jl*828^1f; zt!FfYoW*Eod}6g7$3p2MEx%`~8|O0C*^SPa<#@mM(y#hM<5)=5NEWnP><`TS58KIF z!J4RMaA!r|`3-moBEe@Qna;g6y&fr1mGh-!%XFId_K~mL8FQw6il^sI2qkZ>KlHCZ zA27y*yc<1Pu@)I>J?X}ZF#E3#CcBK^7Fw{6`yRv&RQbWe}(VW;Z-zV)pjeVf6)Fu#|U za~d|>PDRUD5kP@ZuCvWW{sA<#{QP~r=#bPirUGQ}1*LGwk91fpmk1EIUmOI<0efA= zVo|hWn+5hCU*?7}vYE79HHY@XT3y18De34bf3GeLDTbfI!bl3HWu)w4@5-ua%de7= zJuH?ZzLV=P56*2i>%8rY!rfJb@0C^mhF80u-P#I*dA`J7GB)h7-1GC&uHdNfBAac= zc`B9qiadn1IQ;gg8u@|ie9$KmTk2J+7RtU29SwdeWqxB!6g7cPlF3|*?d)IQYeehi zVjJ67DQOb+6FcFE%gmIw$rhcB=#eu8wVACpct*2bK|4?4@0s|HL~nJUqwJkA z*(0uJI>`4(i(9ePM>EY1-3P(Hb_dpFV$1de`(XRYkW`8FL{h-XJ4kEx)n^;A=Zp~x zyv&DigBqX_oAz1aymLDXqtdqG;~s;Wv}+W%!6OPe@XGt`=u^vweV0i*3gid0wf92N zOVJ;y_4yTAvS)lbY}Cp18i&oh7{#iOpH0=?Bh3nfU~QGm0r$iGCgL3u(vT7CfrE|c zxkyoRiM%ZsjASQFb^S|s$jO`U;G@QO6*6__^yQu$>`r0|Sf0UHhTppEFVa3zuqife z6~%uxAI7M+J*+uS)|!(!!BuiEI!``N#=j-*Xm&4K;&4-&`_zWNGW`}qgPqMb*6g!JkKxdm>52Cn3usQ6;JVmkzNTh2Xw9oIh{9o3Y&`9kek~GL_DDU-94D6B`Wjuv2pf%PSYg^Brw+cE4pCEBD94HV z&?s7&UoQIhi<{*;1ZDK84bCMxBIG5scmaHAii$7Fq@mRBMRJ(+&w8Bv;na>MQ3 zJ?3tD%XlRE31Z7~^-mP`PAy+pe^&phzv-=^k@?4TioiI7!YcLu0uyDd@{7@Aeo4`1 zCNVX-+7YNtEH#zgn`^~W)rZ4<0n@(KcWExSc_pYz%g;_*@pCT@%6%07wBcnYob>E# zW>i+W4W~@q;gTlOCv@eeK~7u?~XCum~mALg^5GO8bgogpOiB z-VDCnFiK)6z5a6cCv=oc6uZz8Spqu=!z|eueOxuI#;^;mJf@v9rl=C0QIc4_Xp&9n zS-h?V@v47Z3gweK<9{QyP$ktf@bopOgr)kp)$?0<8o6Mdv`|i6$7WMYF0C``??3qb z;+zoE-u_G9Jo4|fqsd`llnDrUanE?SH2yfSYH_JdgwH8|(AD3aS`kb-!BexgSfz+r zSYT`N5;r5*Fm;4GCM#9Ivu@7@gzvYP7DkL}R}ezGQ<5KiW;9vD+APvm%0`Gm=}e8j z+;?oy4Eh|b_ks0bWTkH8!{snj{y7$KWqbOhLp^2Byu$Z^qF2BgzT4&VR-8|F_6(rYLU0o`Dw@DhET^FMzv`IySrD8rhjov4z z*5M%W7Uau`oFSOqb=p(S&`Joeg zg84;dPSLBMdtdsE%jI+4BnS1%EsBs2ni^M=*7w}csmVq9HEe{($FGR5;#|`-~IQ-$lZ%5sLO3f^ND_k*!4!(-16G6HMdQsT)67gU0-X!Zw3zfip+>1WSD*0l8&(EjGAYEX|dHmuK zf4n2KwTqHR9zz?5!X<@4EVOy8IC`yr@XoE1g4JK5BE;-_4R`Z^@VC_#I(PQ>oatOp zjlRWRwK|D&u_mIQRtS5%CdCTLx?%j*I==05M=`Du#cUW5R{PANfi(fwO)G>L5$aV$ zYCi1Z6!~)cPp=xNTemh>*Wwe#L=lqb{#reY7yDkiX3$-auk2m0vyn7WM08Z%j&EeE z5t#RjsNMWAgkLNm)2`{<3uFz-3+y75b@{cvzwSORo!ot9ghySohg&#F)hbKieccl- z;`_?XU6(C2pP5^)kr7N)K|}oub}g=469#sFx4zi-G)e|mf)b1~7A7v)kBLP4tTmt= zspK7o4ok35cCV?PPHdq?tg#Rky&S3?!Y{1b#2j2}+j@$WHdL9?;WrO_z_|}A)8D8Z zs1(@V78!XUsLhO4L5C6xmZUTT*59_gJ!C(Tv5Z!4F?bUnetS(wvYKlM?za+CSi$Yh zLWni54skk~VMCAum(IwBsK>kL1gv|&vS*(wyJ!`+Yn5q#-}a-Q?GWIQi3)tngVEC2 zbvM|MUZu|i=IBT?@5uAaPxoDmg4}eV9cO7+TyrR zv3$njQM+ZD={xA5K8Ld`n=5TmE?q5TJDD!$c$Gjhg4U{z%6*=s)8lEUs0J{--?+O3 zuQ9*B%$fR&RZlLl-2J-QR@H~Lo5F_GU9P4*2b-M}=)cS{rV^)XlQ$02batl_&5ww? z>x`LKV&WxO0uJ;1CwNY#vry8^TI$w#lmeKcGQ2!8c5v|s_x7!0lG;CYl>fXW3)XJ% zEZW{2{n5Hi7_gkPX=U|STil#TI3n7Kh92EFq3QS1J;8OdPjo-5Zw{CP12+8}`0Ff~ zbzYwUdJbDb9d~Gd){d|)LM1NdB(MQNN!jUhJWj7x1$7WNzm@Wg#OYlymJBq{w4dMm z&|Yu^J&?P=BjbulN=7BSb&ANVRQ`}#-Mh|N@RMt&qRHxeGQkL%2pW?wCQkf8DDB67?hsfxM(V!^*EojCF#?h1+3t@g zMa<>zjaLlW?BBqr%u}6ICf5VuRgT`0o>1eLhgGQx!9u{06vtZ^f^{ijMnhH&TCwpx z=c=nJO>bSVU6!KAk^(>R9Ch~I_2um~9#H0Z(xrCFRVf_t(csNk|5%QQZY);DdT?4Q z*3ac|H_RnrAKWk+>6+fU%y>FuvmuJ^g?!zVRf|jcwGljAK9Ip^_|KSQki5CN7n6)r z?Za=`Yy1w8EsUSJnJL1DOZz^F3Q5q7P?frh^;hmW&~D==JY29J;TfM2W1$fnjT)T131I}mmdc%fDbx-Y8%5o2#dG?(P(?-tw1X}JZhG!b7WrX^yaIQKa z<1iJ05!kLjFLhW*s}&miBbP>^Q(dYYy*5~L61w|0*AUo(J0n|~zkh3zjU?@)zI=E> z{@zbn4d>Y!8I|da^QVq`fju^>Yl;U4Z-a09OBqPn-kxh#Rt|zy^DPRJGe>KS8xhmM zA*ao?Hyh@&dC0aG_S^e!XG%4@_Yh8q+Ipr*tgT?d*H%sKl~RF-)=S)b+yr$pU*EEB0efBj@$ zJl6$=ad9uFsMq92ob7*h5zB{c_LEr(`m-*V?o9%wF@XXV$Z;vl2PK_H*Pj$lHWt(iSY}C*E(X$2d5} z#Rt^r6c*Z7GF6yud|`5Mku$X$ZFP}%D$rdye`7kf_m;xYZ$An1WUf_u_tz>mL1`zC z$`Tfp5wi?HEAq=`%Ri^P5_l)n_e$q3oD0l-3sPhg{^9_}>fpk}7H6+pcMo{X5NN$* z7U)n_BL9kwC^+T6>ehR~j5ZXY-H;PM?qR?&)(16l-dgA4l`vtZu8plSEvG?TBXDP7 zSAEc9lXBWGI$r{ ztLDrNL=zv)TFp*nL_rkt-Q-k6v#hH>HQIUVNn(e}W%2O33%R~7V~pNmEI##`6`1C< z`kbH4$6lh;nPe8w_?PaK{$JeVAs<+e$E1bb<}>(Icw38gu22utZuT5gW3Q~dVNkeY z#)WTBtXK3$6w+Ya#WY+bV8_S_ZnmCczuy*OOGthblJG)7_bh(2Ll^DlkF?+HW?6>l zR4TuKJHKgI4?+hRa0RHG$P_iMckkU%X}Pa3wq&a0{b%fsQWu0TGynL!2OW{-{I z4*=F^N>*>e+C6#U)--%56u&#f_|S7X`X?phD_!5vGvCE%96(^ulV;X5Irg6xG;ZzG z$&;k(&S?HdVn2ZUy@t+K#X8Ze0MLLAg6Df59v&JJHtZr@dlH)8k$0}X7(IXrb9 zGyVJ`zlGoTf>0T-0&pA899(KR;5m9%sA9e@vzY%uXf(?WI$#X7G!00a_%(f6?Ze{D zC*O?9WUlIhtX3}0Myei%`D+FHL+@Lp9TsO@PSW{8$@bV;;$6>pF7L@?bG*TL@bME= zLA{bg5-aHeXZLs86(-^Dpp>#lz}_h_=N)-Rc#rr_T{FT=lL2wp zVq)cbI}g*bVNXCUAnS;B<~N28SM)V7<4wO~bu{?R95P9h@R%z-qxVn%Tx3XUJ`Bh!#``fEFZb16xENZ^FQtRW zRhnb2vQ&QNlcC8ue|gDnKmOGTHZ5esaATJnF!!vV8$Z}Rr}%1eRk4i6?Sx2|p_G_ToHN}D;4E$IT9i;rM{OQ_Iz z1y+ANA&F3T?t&4oEs5CaL9iCV8}2_SdNNx*F?h?MAA^Llb>d97-S0gld!1F(vnfUM zS;G$R@=~UTaBK+(tLS8x;*he4EOKDsoZFk}eVN6hp?L@LLzd*Qwgv5?oYtb$pf$Fh z&@3AWrz^ReQ1x$BUPuov~7Gh~(F{&7}k8RqT#!}bF}`jHvNj&VKc>DMHmzcD*B z+@rt`195FU&O@iQf=>HFuix&C#Z3CDjC_G2>1{v^@R^io&P!T}`(m5ne}&Ypw3wg|KJd3G7{LTr`rZf|e6x6JR}`zn<` zo8_E;+&i?ZSg#Hj;}oaf>kz5%g9D^u_pas){&g2v8HAV6tofPJNtNsPcZ61vC0z(5 zquRUYiumF$aor<1@n_@rXw^r%Vm8$X8!~=k(+;e;<5dswZc+JYfC#0L=j{VMbPoCr z8oKJlHv4G`v94u?rc$kpS$&dh;>cx~@KunRbKJ4VKQfgf&Gx))`}HC>TRV;p!pZ>c z%kp!=c(O0e_H1l@rdrugh#AU!_8Ykx?Yv=_ejc-NL*@8hujn(pT9DfZ*$WGbRX0Sb ztm$-E<`NI3hJ9aV@W}0w4=!+1-6)iNKiOK3^zWl%;sEh90uOU;u(r+)lmLjz&USiWZT4 zyiK3X0R*-?(5mOVVl!N{TpVCF_zc6Rsi)u2nrluwefV(OegLk0l?GLD&sm;b#pP)W zpAXd!#nl$za2~?dsXYEAx1XHwa>rhm!tQXb>s22v6QFk5$b->fx)WdjFfbzGEM)-% zxJYP`{IWRpts6*gEAUW4w@({b{%1#=t)!M<;fD{l4R^9tU3ajS{5GB9(vA&(V7$Xt zhnWc@*a-(BBV#Bd)7%ux*SNM6?$=j&wDkKP$5EZ`94Vw|3y*ZPS}v>)Z`bqT-YKJB zkh*5ZbjUTN_wtH+Y>gw~h*kQ0_LPL@sb`at!&=AF8s*4b>5l_Tw?1||{Ai0n^$9na za0cU6>}Kc=LBKJymzn3I)WlAQMY{Z;#p=-IWv+M2SwF5iQVU7*Nn?W*?p+NS14Ce- zZzc4Ipgo7`-C!DO_=EkxQ`op`hn+BM!gb{bs-c+A_c~!c?1Mk{2KI4Tsqu#5-k)r) z1?1^s&h2XtXy=P(wbQdhJ;RdFOY>*PPOkQD4{lPWZnks{Z@j&7@PvJCch z_eRe>MvgYySgqev6eI6S-DXqWu%u&G*f40o=sjp0OS$s% zAW;P@37>w-Fojl+n)=E9PwD!hLTlkVVZ>m6fv1bb2Yol*)neFiKU?{y+2xn{nG@wC zMGt+Gk4c8aM?!t3lr8rnnqm#9@P)sH_Z;zy`jthe2%?W!k8=W{30y_mw)CsBA*gq+2O~w#^>~$(rw1Y895RYlld~OQ^YRr*zPC8sTs@(j4a*akJ>m9xR|LI|X&^5Y9P!U)w`30+^_xUr3bnbN)j+ zIIU*pHIjX&YkwV;^MFW(A~g`4C}Z9zqB@nA$?_C26}|6LB-LGcW@~WUu}Z@Te@0UPFY2Wp z3NmBhFqZ-srMxjq_=SLOISpseP}{h0=Wmc73Ba#`#--y;FHJ3fmmh%!!P$r4(&P$MhA=QrR?T zipx7tr@^|8ic89$m+1z`k-2N?V+$XeeN(g;>~2#?^DoJ|N8bcgek9pDb_F0wtC@#| zKjX^aa+3IQ=w;-K`aat%+kh{yJW5pnGrmv$tK)ZsGh`{(i8y}M8IvBAG+TM0V9QWX z9M-jrhNZi#8x*HUTluop($Pj&j-J`RS~Hj8&%Kd_|pdq_t$nonLj4wcldH~=u- zFZ`LIC}>A5F0mA>CeL559#}8V2INf^v3v&`*0Mg2zT&DnLk;#8G0y(2eyPYWH~eHX zLP)<+3)dDtR9c%+ie!f-ru5(RH6=e}IG-w&1JC^Fcn9qKT*Fyn{YyY#_=v>@aW?nq zyl2Eha%y*5w)WMM675(%=Hr*ALuxEdO@rzKgG95I%{y2nd=7Rke@jJ=zaL7BN3J>V z#9*U)V`_n(wi6w&*?gZW-K#ksz#ggJS(n4_s-RkAc$G@hQLs*pE zD%=$~6~H(aRwxFp=5NU5vL)-!70+u3e-B#C4`vPCj%F~$c52t1Y0zb(Lk<`0-R=?$ z71AfLYnv1rd!1{vyFrKE{{s*?FJ3`pl;LE4>TRsUHaDQXT1EOTyTh&NnFREF%sRej zgL_RY{9K{_4sHmy@aF6CQ{y#XacX9puPUq0i3~J6e5c+K{u&jKAWXeSq)>=SrrTcD z$Fb`9H*?dXitfRQw+J*B)1a7Y0pKvYF)JTtPmSDxAtQEoyeA0`*@MNRBc)n8MWP=@ z;KqMLS@)C(4G%H!ao_o>LQEvPiYteSk0U=tj0fd8BAh4V)Atu{qc19^Z%cawv#1@$ ziAdcX+vl}G+M@o(TNtCy6=FqPks*APkRvVg!k5i{4L5C$cyc(=+$_ZYm!dM#4&L@JLcW1%d~6=hZS3T2vvE*i|m%63J|in^gfL zQd1Or3j5lq&-RDGv(bgGMwyyw3ln3n;XVuQo|ho5IkP^_dD-x)ZI?}gqPu|Arn=Bj zi9IyLHzl@sL<1y|NG2Ty#fyID95hoTeyD2DX02s7EejMFaa-bDM=VoHX{Fv#TO@oU z@Ak={WBN9%<7LaXV`A#ycJEHOe7~5D#qJBBb}TE3_o!Se7mpL2&FyA2+%{D;dimarsP&ewc8+o85e)(#v>E zyKkDJM%5_`5$QDwq3?d-nelaTf*O z2aE=4!U;7B`X1$`|>w zV3!x&wYDR?R~-UgOLP+>V|nE>o9<)r`m-Z{sWLt5+2itL+ zN}BDmoU2~BcuV_ze`$kC{m<>VbQz~rPyM7%>HDb{@*fX&2vtREZSNjbutHt@Q-V%* z4;H)H4=P_5;Rd{VTCTmeQtgnN-TG^=zUHFJ9WGWn%{5A@ecJvj+hu{{C&LE&ZmDgg z7m@K1Id2UX_m%~y2W$)N?Sph?{@3KXFgnH2k1f zcL6#7!oboiq5ENsDt7a#!hrf^?`}l903y1c;Yp(zqjTI6ws%v0F}5I8wuzQb?!5HJ zGJNaiTbW<&s_0`Bc@Q5Fll&#qjApYobcsv8k%N*=c^f-U@*gv`Z-=+~zkVzFY<;Mf zP$uA{MV_=OF3AcnF1`G@e%`a4pqlXYD1<*?0Jf}*c#QT-(j=1_T2>cYzN;uIkdNfm zh#QwWQL|%B;~|fi%kXT_Zf+0l=b^aCw-XmGOl7@er-Md_>8-ix7CrGy`dQa(F?xxf zW}Ny%FLwYpzyc5XBH*#4xE=E?U9dEUHvw8{zBoUMey|y3JC%e373*Vv)HGR@8m>J` zx`U{A9#J2D-qS#41io3?x%UnZ)6s>E4$b7gLZV$q8&0eB5UiXKx)p={aM5!&db;}9 zm2P-%En8@wG8^{Z$bctNFJvTKULGF3lm_Lg9nIU3Lqo6aZ0)unS|bL3C_S@O!+NB5 z_=GrEXjE5x>wF~mH6Q{)@gE>0q&!A5LOzM7^omKA8=fC9Dm<)yH6LQO7R1ESbF9bi zJDyrx`Zj&}O}$|rQfxtysuq`GNdid7c0Vme7gNW1QsUv3qsxZ~^jcBRs+AThX!4%G zg|?5Vig~J+qq4`CJT-~8WlNX{x)ZUZY~GIBvg5{HQLgBW5#3!Q1m%m}N)cPXkvje0 zN{1OJ(&$ED&)%?YJkl7ih`c=PK=%aUMivd-OG1_i3}l%R-X}iAxYO6zj08MMGIU#56rBtstq-1Nu2uiY-IE5^ zVim1~Q-$8DpZa?{-IbQUE%=&T)%$9xg*G+#v6cf|7R4flmd$>!DwtpL@*YA%duSn| z42NNK5Ny&*9vq5I zCY#KH7v9OJ_XYX*LAN!DxTyGh)uyA8F?qYqNP+&_?9pIivQfIZttH(tn;B)JGkTOQ z)z+lMZSwOaK{`X1C9;gLD|ILk*qfz@h9wD)+`;(PRr^@E^ou1+hL}vPxGQ+EhS^ibX7!2vRpS7Bv1f6QKEaxk^yue=h3`@*kok^nS6`M{+Eh$SR%wU#B z{uv2(JWzc{F33(Y%zb-4SBDKqTAV(wFoGFR8NKOt>dR?aJ_IQAVe`R(EbTmt`w$5| z)ps#-w3hH~!_vJQl$y9Jb*nT}dsce+cub8O9B>m{0t+hc?3F)fRHMMo%*u#X_8>wvI^Wtf7-eZjk0LG9|USJw2!{;`(sg1_NMC}i=T8ZLO|t)q*;rz zs{i``4*cZL4u1+9pL+iW>~i<((Dz?&#XLf`}+4TRpFto6K`$T~TmcjP9U>dx-tN3eex|8{2;@%Gfx%#a-{2K|;3F1`cB{|#_>S8MjWUD=Gq4b zzFhzPyjQkCAW2^GfZfUr6q$w;umbyoc`l9+7*vNZ{%ONY z-_}rnoMo~5s)@SoQfwnW68cmHbOXQVWb#0yt=x%R{El?UP&T6fYK8q$#!Ch_=-A!o zuZHsCHPL1NwlaQTm6y)rQ-&p3S_sc(+2>4YUF3D-97Fhwzt6!%5f*s!3=hozvu{sL z(v0tj^aSm)28Vcj&vCnfRfNdEZ`^>&{%KcO3J=s52L8KYPeQY$?Q|8kv;HG79df{` zfrA{mA$mRjxA$Sl-!1nq1y><5+KwD~d=jfJ{ZH3afNMI?VA1TAt7h=K(ODc}DF+>p zN4n^Ze|vOr&^%zNsa%HTo6|B-JKzcn$?R?EKXlaXPGy4Lbkic(1NS(=RO*!||EEICHgitWv)cN# zEr-ni@n`mgwlmQ{l^ZkXLZ~g24m4XURQIV zt!}t+d0N-)krdhTYCmO=zv!%5Z8Vng^Plja6%GZZx%~eZZY}?R7!?7x(~EQN$7U0! qPFXDa5K)I~r%zpJ#qMDbPtI;GPdI#Nf2Vs2d^FW`9~7xteE1K~P5RdW literal 0 HcmV?d00001