From cddc864fe278ab229c7d83755f46aebcb40c0186 Mon Sep 17 00:00:00 2001 From: 2510m <2510m@LAPTOP-F3BSA9F2> Date: Mon, 18 Dec 2023 16:15:17 +0400 Subject: [PATCH] commitLABA3 --- tasks/lyamzina-ma/lab_3/.gitignore | 484 ++++++++++++++++++ tasks/lyamzina-ma/lab_3/README.md | 85 +++ tasks/lyamzina-ma/lab_3/docker-compose.yml | 15 + tasks/lyamzina-ma/lab_3/nginx.conf | 26 + tasks/lyamzina-ma/lab_3/static/index.html | 13 + tasks/lyamzina-ma/lab_3/worker-1/Dockerfile | 11 + tasks/lyamzina-ma/lab_3/worker-1/Program.cs | 111 ++++ .../worker-1/Properties/launchSettings.json | 38 ++ .../worker-1/appsettings.Development.json | 8 + .../lab_3/worker-1/appsettings.json | 9 + .../lab_3/worker-1/worker-1.csproj | 15 + tasks/lyamzina-ma/lab_3/worker-1/worker-1.sln | 22 + tasks/lyamzina-ma/lab_3/worker-2/Dockerfile | 11 + tasks/lyamzina-ma/lab_3/worker-2/Program.cs | 139 +++++ .../worker-2/Properties/launchSettings.json | 38 ++ .../worker-2/appsettings.Development.json | 8 + .../lab_3/worker-2/appsettings.json | 9 + .../lab_3/worker-2/worker-2.csproj | 15 + tasks/lyamzina-ma/lab_3/worker-2/worker-2.sln | 22 + tasks/lyamzina-ma/lab_3/скрины/1.png | Bin 0 -> 19533 bytes tasks/lyamzina-ma/lab_3/скрины/2.png | Bin 0 -> 76230 bytes tasks/lyamzina-ma/lab_3/скрины/3.png | Bin 0 -> 62442 bytes tasks/lyamzina-ma/lab_3/скрины/4.png | Bin 0 -> 25986 bytes tasks/lyamzina-ma/lab_3/скрины/5.png | Bin 0 -> 49775 bytes 24 files changed, 1079 insertions(+) create mode 100644 tasks/lyamzina-ma/lab_3/.gitignore create mode 100644 tasks/lyamzina-ma/lab_3/README.md create mode 100644 tasks/lyamzina-ma/lab_3/docker-compose.yml create mode 100644 tasks/lyamzina-ma/lab_3/nginx.conf create mode 100644 tasks/lyamzina-ma/lab_3/static/index.html create mode 100644 tasks/lyamzina-ma/lab_3/worker-1/Dockerfile create mode 100644 tasks/lyamzina-ma/lab_3/worker-1/Program.cs create mode 100644 tasks/lyamzina-ma/lab_3/worker-1/Properties/launchSettings.json create mode 100644 tasks/lyamzina-ma/lab_3/worker-1/appsettings.Development.json create mode 100644 tasks/lyamzina-ma/lab_3/worker-1/appsettings.json create mode 100644 tasks/lyamzina-ma/lab_3/worker-1/worker-1.csproj create mode 100644 tasks/lyamzina-ma/lab_3/worker-1/worker-1.sln create mode 100644 tasks/lyamzina-ma/lab_3/worker-2/Dockerfile create mode 100644 tasks/lyamzina-ma/lab_3/worker-2/Program.cs create mode 100644 tasks/lyamzina-ma/lab_3/worker-2/Properties/launchSettings.json create mode 100644 tasks/lyamzina-ma/lab_3/worker-2/appsettings.Development.json create mode 100644 tasks/lyamzina-ma/lab_3/worker-2/appsettings.json create mode 100644 tasks/lyamzina-ma/lab_3/worker-2/worker-2.csproj create mode 100644 tasks/lyamzina-ma/lab_3/worker-2/worker-2.sln create mode 100644 tasks/lyamzina-ma/lab_3/скрины/1.png create mode 100644 tasks/lyamzina-ma/lab_3/скрины/2.png create mode 100644 tasks/lyamzina-ma/lab_3/скрины/3.png create mode 100644 tasks/lyamzina-ma/lab_3/скрины/4.png create mode 100644 tasks/lyamzina-ma/lab_3/скрины/5.png diff --git a/tasks/lyamzina-ma/lab_3/.gitignore b/tasks/lyamzina-ma/lab_3/.gitignore new file mode 100644 index 0000000..0d46714 --- /dev/null +++ b/tasks/lyamzina-ma/lab_3/.gitignore @@ -0,0 +1,484 @@ +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. +## +## Get latest from `dotnet new gitignore` + +# dotenv files +.env + +# User-specific files +*.rsuser +*.suo +*.user +*.userosscache +*.sln.docstates + +# User-specific files (MonoDevelop/Xamarin Studio) +*.userprefs + +# Mono auto generated files +mono_crash.* + +# Build results +[Dd]ebug/ +[Dd]ebugPublic/ +[Rr]elease/ +[Rr]eleases/ +x64/ +x86/ +[Ww][Ii][Nn]32/ +[Aa][Rr][Mm]/ +[Aa][Rr][Mm]64/ +bld/ +[Bb]in/ +[Oo]bj/ +[Ll]og/ +[Ll]ogs/ + +# Visual Studio 2015/2017 cache/options directory +.vs/ +# Uncomment if you have tasks that create the project's static files in wwwroot +#wwwroot/ + +# Visual Studio 2017 auto generated files +Generated\ Files/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +# NUnit +*.VisualState.xml +TestResult.xml +nunit-*.xml + +# Build Results of an ATL Project +[Dd]ebugPS/ +[Rr]eleasePS/ +dlldata.c + +# Benchmark Results +BenchmarkDotNet.Artifacts/ + +# .NET +project.lock.json +project.fragment.lock.json +artifacts/ + +# Tye +.tye/ + +# ASP.NET Scaffolding +ScaffoldingReadMe.txt + +# StyleCop +StyleCopReport.xml + +# Files built by Visual Studio +*_i.c +*_p.c +*_h.h +*.ilk +*.meta +*.obj +*.iobj +*.pch +*.pdb +*.ipdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*_wpftmp.csproj +*.log +*.tlog +*.vspscc +*.vssscc +.builds +*.pidb +*.svclog +*.scc + +# Chutzpah Test files +_Chutzpah* + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opendb +*.opensdf +*.sdf +*.cachefile +*.VC.db +*.VC.VC.opendb + +# Visual Studio profiler +*.psess +*.vsp +*.vspx +*.sap + +# Visual Studio Trace Files +*.e2e + +# TFS 2012 Local Workspace +$tf/ + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper +*.DotSettings.user + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# AxoCover is a Code Coverage Tool +.axoCover/* +!.axoCover/settings.json + +# Coverlet is a free, cross platform Code Coverage Tool +coverage*.json +coverage*.xml +coverage*.info + +# Visual Studio code coverage results +*.coverage +*.coveragexml + +# NCrunch +_NCrunch_* +.*crunch*.local.xml +nCrunchTemp_* + +# MightyMoose +*.mm.* +AutoTest.Net/ + +# Web workbench (sass) +.sass-cache/ + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.[Pp]ublish.xml +*.azurePubxml +# Note: Comment the next line if you want to checkin your web deploy settings, +# but database connection strings (with potential passwords) will be unencrypted +*.pubxml +*.publishproj + +# Microsoft Azure Web App publish settings. Comment the next line if you want to +# checkin your Azure Web App publish settings, but sensitive information contained +# in these scripts will be unencrypted +PublishScripts/ + +# NuGet Packages +*.nupkg +# NuGet Symbol Packages +*.snupkg +# The packages folder can be ignored because of Package Restore +**/[Pp]ackages/* +# except build/, which is used as an MSBuild target. +!**/[Pp]ackages/build/ +# Uncomment if necessary however generally it will be regenerated when needed +#!**/[Pp]ackages/repositories.config +# NuGet v3's project.json files produces more ignorable files +*.nuget.props +*.nuget.targets + +# Microsoft Azure Build Output +csx/ +*.build.csdef + +# Microsoft Azure Emulator +ecf/ +rcf/ + +# Windows Store app package directories and files +AppPackages/ +BundleArtifacts/ +Package.StoreAssociation.xml +_pkginfo.txt +*.appx +*.appxbundle +*.appxupload + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!?*.[Cc]ache/ + +# Others +ClientBin/ +~$* +*~ +*.dbmdl +*.dbproj.schemaview +*.jfm +*.pfx +*.publishsettings +orleans.codegen.cs + +# Including strong name files can present a security risk +# (https://github.com/github/gitignore/pull/2483#issue-259490424) +#*.snk + +# Since there are multiple workflows, uncomment next line to ignore bower_components +# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) +#bower_components/ + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file +# to a newer Visual Studio version. Backup files are not needed, +# because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm +ServiceFabricBackup/ +*.rptproj.bak + +# SQL Server files +*.mdf +*.ldf +*.ndf + +# Business Intelligence projects +*.rdl.data +*.bim.layout +*.bim_*.settings +*.rptproj.rsuser +*- [Bb]ackup.rdl +*- [Bb]ackup ([0-9]).rdl +*- [Bb]ackup ([0-9][0-9]).rdl + +# Microsoft Fakes +FakesAssemblies/ + +# GhostDoc plugin setting file +*.GhostDoc.xml + +# Node.js Tools for Visual Studio +.ntvs_analysis.dat +node_modules/ + +# Visual Studio 6 build log +*.plg + +# Visual Studio 6 workspace options file +*.opt + +# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) +*.vbw + +# Visual Studio 6 auto-generated project file (contains which files were open etc.) +*.vbp + +# Visual Studio 6 workspace and project file (working project files containing files to include in project) +*.dsw +*.dsp + +# Visual Studio 6 technical files +*.ncb +*.aps + +# Visual Studio LightSwitch build output +**/*.HTMLClient/GeneratedArtifacts +**/*.DesktopClient/GeneratedArtifacts +**/*.DesktopClient/ModelManifest.xml +**/*.Server/GeneratedArtifacts +**/*.Server/ModelManifest.xml +_Pvt_Extensions + +# Paket dependency manager +.paket/paket.exe +paket-files/ + +# FAKE - F# Make +.fake/ + +# CodeRush personal settings +.cr/personal + +# Python Tools for Visual Studio (PTVS) +__pycache__/ +*.pyc + +# Cake - Uncomment if you are using it +# tools/** +# !tools/packages.config + +# Tabs Studio +*.tss + +# Telerik's JustMock configuration file +*.jmconfig + +# BizTalk build output +*.btp.cs +*.btm.cs +*.odx.cs +*.xsd.cs + +# OpenCover UI analysis results +OpenCover/ + +# Azure Stream Analytics local run output +ASALocalRun/ + +# MSBuild Binary and Structured Log +*.binlog + +# NVidia Nsight GPU debugger configuration file +*.nvuser + +# MFractors (Xamarin productivity tool) working folder +.mfractor/ + +# Local History for Visual Studio +.localhistory/ + +# Visual Studio History (VSHistory) files +.vshistory/ + +# BeatPulse healthcheck temp database +healthchecksdb + +# Backup folder for Package Reference Convert tool in Visual Studio 2017 +MigrationBackup/ + +# Ionide (cross platform F# VS Code tools) working folder +.ionide/ + +# Fody - auto-generated XML schema +FodyWeavers.xsd + +# VS Code files for those working on multiple tools +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json +*.code-workspace + +# Local History for Visual Studio Code +.history/ + +# Windows Installer files from build outputs +*.cab +*.msi +*.msix +*.msm +*.msp + +# JetBrains Rider +*.sln.iml +.idea + +## +## Visual studio for Mac +## + + +# globs +Makefile.in +*.userprefs +*.usertasks +config.make +config.status +aclocal.m4 +install-sh +autom4te.cache/ +*.tar.gz +tarballs/ +test-results/ + +# Mac bundle stuff +*.dmg +*.app + +# content below from: https://github.com/github/gitignore/blob/master/Global/macOS.gitignore +# General +.DS_Store +.AppleDouble +.LSOverride + +# Icon must end with two \r +Icon + + +# Thumbnails +._* + +# Files that might appear in the root of a volume +.DocumentRevisions-V100 +.fseventsd +.Spotlight-V100 +.TemporaryItems +.Trashes +.VolumeIcon.icns +.com.apple.timemachine.donotpresent + +# Directories potentially created on remote AFP share +.AppleDB +.AppleDesktop +Network Trash Folder +Temporary Items +.apdisk + +# content below from: https://github.com/github/gitignore/blob/master/Global/Windows.gitignore +# Windows thumbnail cache files +Thumbs.db +ehthumbs.db +ehthumbs_vista.db + +# Dump file +*.stackdump + +# Folder config file +[Dd]esktop.ini + +# Recycle Bin used on file shares +$RECYCLE.BIN/ + +# Windows Installer files +*.cab +*.msi +*.msix +*.msm +*.msp + +# Windows shortcuts +*.lnk + +# Vim temporary swap files +*.swp \ No newline at end of file diff --git a/tasks/lyamzina-ma/lab_3/README.md b/tasks/lyamzina-ma/lab_3/README.md new file mode 100644 index 0000000..92d16d0 --- /dev/null +++ b/tasks/lyamzina-ma/lab_3/README.md @@ -0,0 +1,85 @@ +# Отчет по лабораторной работе №3 + +Выполнила студентка гр. ИСЭбд-41 Лямзина М.А. + +## REST API, Gateway и синхронный обмен между микросервисами + +## Создание микросервисов + +1. С помощью команды `dotnet new web -n worker-1` в терминале создал первый микросервис +2. Добавил решение командой `dotnet new sln` +3. Связал решение и проект командой `dotnet sln worker-1.sln add worker-1.csproj` +4. Повторил действие для второго микросервиса +5. Добавил библиотеку Swagger и OpenAi в проекты и запустил с помощью команды `dotnet run` + +Скриншоты протестированных микросервисов: +![](скрины/2.png) + +## Реализация синхронного обмена + +Реализовал код, который вызывает сихронно данные из соседнего микросервиса. + +```cs +//worker-2 +app.MapGet("/Genres/", async () => +{ + var httpClient = new HttpClient(); + var secondWorkerResponse = await httpClient.GetStringAsync("http://worker-1:8080/"); + + return secondWorkerResponse.ToArray(); +}) +.WithName("GetCategories") +.WithOpenApi(); +``` + +## Реализация gateway при помощи nginx + +Добавил nginx.conf: + +```conf +server { + listen 8080; + listen [::]:8080; + server_name localhost; + + location / { + root /usr/share/nginx/html; + index index.html index.htm; + } + + location /worker-1/ { + proxy_pass http://worker-1:8080/; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_set_header X-Forwarded-Prefix /worker-1; + } + + location /worker-2/ { + proxy_pass http://worker-2:8080/; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_set_header X-Forwarded-Prefix /worker-2; + } +} + +``` + +Результат, после выполнения команды `docker-compose up`: + +Docker: + +![](скрины/3.png) + +index.html на gateway-1: + +![](скрины/1.png) + +worker-1: + +![](скрины/4.png) + +worker-2: + +![](скрины/5.png) \ No newline at end of file diff --git a/tasks/lyamzina-ma/lab_3/docker-compose.yml b/tasks/lyamzina-ma/lab_3/docker-compose.yml new file mode 100644 index 0000000..e9ca4b9 --- /dev/null +++ b/tasks/lyamzina-ma/lab_3/docker-compose.yml @@ -0,0 +1,15 @@ +version: "3.1" +services: + worker-1: + build: ./worker-1 + worker-2: + build: ./worker-2 + depends_on: + - worker-1 + gateway: + image: nginx:latest + ports: + - 8080:8080 + volumes: + - ./static:/usr/share/nginx/html:ro + - ./nginx.conf:/etc/nginx/conf.d/default.conf:ro \ No newline at end of file diff --git a/tasks/lyamzina-ma/lab_3/nginx.conf b/tasks/lyamzina-ma/lab_3/nginx.conf new file mode 100644 index 0000000..f649a4a --- /dev/null +++ b/tasks/lyamzina-ma/lab_3/nginx.conf @@ -0,0 +1,26 @@ +server { + listen 8080; + listen [::]:8080; + server_name localhost; + + location / { + root /usr/share/nginx/html; + index index.html index.htm; + } + + location /worker-1/ { + proxy_pass http://worker-1:8080/; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_set_header X-Forwarded-Prefix /worker-1; + } + + location /worker-2/ { + proxy_pass http://worker-2:8080/; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_set_header X-Forwarded-Prefix /worker-2; + } +} \ No newline at end of file diff --git a/tasks/lyamzina-ma/lab_3/static/index.html b/tasks/lyamzina-ma/lab_3/static/index.html new file mode 100644 index 0000000..a059c8a --- /dev/null +++ b/tasks/lyamzina-ma/lab_3/static/index.html @@ -0,0 +1,13 @@ + + +
+ + +Лямзина М.А. ИСЭбд-41.
+ + + + \ No newline at end of file diff --git a/tasks/lyamzina-ma/lab_3/worker-1/Dockerfile b/tasks/lyamzina-ma/lab_3/worker-1/Dockerfile new file mode 100644 index 0000000..7a8ce23 --- /dev/null +++ b/tasks/lyamzina-ma/lab_3/worker-1/Dockerfile @@ -0,0 +1,11 @@ +FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build-env +WORKDIR /app + +COPY . ./ +RUN dotnet restore +RUN dotnet publish -c Release -o out + +FROM mcr.microsoft.com/dotnet/aspnet:8.0 +WORKDIR /app +COPY --from=build-env /app/out . +ENTRYPOINT ["dotnet", "worker-1.dll"] \ No newline at end of file diff --git a/tasks/lyamzina-ma/lab_3/worker-1/Program.cs b/tasks/lyamzina-ma/lab_3/worker-1/Program.cs new file mode 100644 index 0000000..5cc943d --- /dev/null +++ b/tasks/lyamzina-ma/lab_3/worker-1/Program.cs @@ -0,0 +1,111 @@ +ListSm4HS*-yY zzkKF7-63N}rf=K%hhSxAN-DFBi1@2SRLlVLJ#e7EuMNw4;IYCEW<~G)e!p7i^_Z+! zFt$&QJo%B?43eFh>Vp3FZEAXP+g^K(kg5M+kth9Ru{G%8>kNo9`Y*W3Ojp1K~V zU@oV3CW&?FI`HpEgHJqio`u>ZrMs2LeF?A9F~XzISRk6?RjT|LlVB=1#k;I@k{@MzMMUSer^Sm`{7 zVSA%rz`**<11aX(+&t_w2v2k-MXKmhAD{rM%7AHjP%AZg0X`N%z5(xjuyiCnYON%o zY0VO>9k2n76Iz;^AKaroe!>A%Sjig1RQz+9I#s$KIx?1>@$s&HyCublaneO7Pine< z&zJj({O9ngQ4`)9 (u~B<^2#58p~em) z9`q^~96%F?WTj2MfRgRD1&wQX*_O??Xik1&b%HFZCI8G9bBq<*f(jCqU)~_q#*~X1 z&vZIw%V%ZhJnK(x8eV0}IWc5@(?7Dx$Pl8RW4Vu?XZQ5)dP9hgmhEv(?cZR g@unwiF1k7`4M)3@LHoBrTK?$^@o1lYt=)6o0V z{iAF=y2a__9XotaFs#s3lbsIPu^>0$AZ=-!lI Pr^(0&qE~_9gkx>0Brbdv%v!B}uX1V=}px2$z?`lpd zlRP1OKZpYmN~_laI;Cpqw=Q&l9-Ke_t^L2+BQ1~`%Lm^@?-&Pb3q4dzt+;V6kv*Ss z|KAGY?xp|3ON!^}{?EE+*N7HYt|(1XpGwCRM}7X^#??lTdS%=Cm=(YDn}Cs(0X5IT zI*q*Ys=>GmZ*wc33q)#t4WEwV-7EEQGc$c4lS#0Aewm~N?TfBguj!zpNTAqU9I2%v zlz6*fmPZC@#tSJ6eZ9_M3Usa) ZxA-GPhEl6 +X0HmjTB~K z98A1O>7xgRv7T$qNy&7vSaBn*ZNoT?1kS`?GWU6riN(t7;h77A;l7R=Ur(z;zXn-9 z<;iGs9c>Iu9bi&YLm0{Q=bK8{Z-E`=QnzKZ2S@)G55>bqPHN+Q^paIc(##5l7EXSF zVx{0~ctLagRrAd-vA2CJnf^* O zMc!$6Xvjveg`0H1%@epDc
J=)>$r|#nRI+2(1>m_MUGuA&x)2e z#;f+GEn_Ou<#T=apLqs7zaMi+X}-R@fz1B>#kB0_!L6wA|42pUBPAR(X~+9#0(|y6 zXuQTOsNp?b5-*nY3VK-R?=WRoB_#JBUuO9&&_Xy^{-7P&=@mLC=boRWn!>MPI{4H*vMlZg6RTH;U6sKU z_9WPC8(9%Dma7$CU2x* BpZuB{6{)dC<>w0cwq0ktXlc#}7Vz$K(N9k07#xigKj^<6eq+;Ex zj~|ymmw3=Z#dKxLJs)=Nt1f-9OZA;A@ftl9VMG_(<@PnaNpBeH0zzAL4+flV{+Sqd zS?jIsib-nE_I|}zbM#KP=GC%N5{JyUCbN#p4;_cKh$!>g#||1=q6lY%g%Lh%zSkf$ zEXcrh!#Lq>IzGO*1f `s!~3h)sXY zOI6$dS4w)v>lxku4~+B&)7s $IMH$-JGc3%>Gobx<@ z|6{Mm=dhK#61#Zhwgs#Tdq458|JGzV{v0#4lR3BN-`cBizQAuftGC$c8>?6E`ME!n zZKv(yH_wZI9I&!hvVO4Th2^fysmrc*r!KL)E-nA+Q6^WnEs| zC7%Pk7l-CwdU&<6WLDQC^CjCX_U$x(DYDFai~l~`*{@TMSw8#0St{w1w0ez1`l&bH zm)`xZzm Pug>;0hm2NArP`gJ^VWa2=7Xii?peXy@4RmF zbNg)8%9}IWckaD_GZR2VkoiiB3-xr|%}bu8*{gUhHZ5KEb6sYes(}iycr96SdA6BB zMb+M){~hx+*Ar}?@?Imeefo1YmD{I!O@?QSkLymp`%v)5v8O?0>wo_ORx=IT=bZr# z2CtcyeDHbdw%?ccoSUjUec^J}XBXxx8J&?(v0Zj`N_yA!WhF0*^`@i6ZrP?`` z{|jw}mzT|XW*n>aw{qh(k6FoLIUl!)UT1FZ`W_HxvaWr;f5HO3E1om=$-etDze*|JT)ye7^y)qB-`?zbR;6kD|9t-ixf?p6*DLvNt+fcyf9-oOZsy{r-qUWH zm!_YacB;4Tw?wnq%_-S$CMB%dd~>#Q&Z{j+&Kl<|m-&W^N3Fd%qbT?P2aQ(`>ZH`~ za=72F=>Ps8{?3eDAL N4H z>aDc8?&PoM!t<)_-|y~e%wB2q{8Q?_!g+=DYkjs|cI_#YlACKTqr oof&UyzA>pdbFMw@d6>retj5x*e_a@8A8&BP$xU?M$oRafzqv zPYFc#`R!lvVz$)VP5J!qCmfa*tB#L3W0`k4Chfk3e?;0o9iQz#dES@@r(HP`pCTNc zmm9D%gw@TuWuKN+1hlRCYxSbJZ!_hed_JVaFQxWDj-yBaVj8fidd^%g>|em`8CG&O zT1(I7>{@5w46K;0sy^Rh>r=51*j)EJIOCb*zt!6&Yi;tg0tUdIrzLkRzME(k&r#H# zJHrhq0zBTyNHYEVi-?!0os#L{HczIxU$NNzXyLu3UDnfYZv&;kd#>;03-3jyUN4*% zG1*L!p-Xu7VQ`~#?xJ$(^xaM_i7M-U%!%-rWE3wBGSJEgs2((3%kY9V0W>Mdz+eO( zj%Q#v!2lkWV^ClQjS~RP<{4Em=)++_tjj-pj@V@vo3t`cgIw$B>gTe~DWM4f!~T}P literal 0 HcmV?d00001 diff --git a/tasks/lyamzina-ma/lab_3/скрины/2.png b/tasks/lyamzina-ma/lab_3/скрины/2.png new file mode 100644 index 0000000000000000000000000000000000000000..c154bc9c7f0638b122e460441a099f112f64bb74 GIT binary patch literal 76230 zcmb@uby!=?yEaN+S}0appisQUo#GCqxVyW%1`mN!T3m`taCeFZ3u#LsxO*Uh;>C&= zLg4WJ_P6)h-yi3{GuO3}Yi3qPvetU$p69vm6|1eOM1)U;kA;Orq@paZi-m>LkA;N| zev0!@La?4({qXe&psVyAt6`jG?;-QpNmfG^3#%!a;MV5JLmtmt*#v-vMdJ7G@d)Wi zAB2Tr;?@6D|FSGW `)I;PfOKa--Pbl9jFGal`@#|!_*BYlq*5F~XAXlzW-Gl_HIG|J zs05v@!RhH_D(Zf}FwD%%y2i$Az^kJ+jonAj=Zf{o>yYfIx)l~P$Z^JI*-u}1gYtQ{ zp}si-cdpQv(r&@5-e^I8^gnZ@RaMF?nt5!zy?;yGSG(ruNPFVnNO`7rv-zU;Dpgfg zQ!}~Eh7~9*m=-L7^-Qd+h`V wz)PB|PT})v^9jIs0pOV-Eivh$-T;=jz!dw}pVDgcsvG{VI=1yrrj2J0hXf1?! zi2GP5BWEP_=Zd0fM(36Oc7Op+Aa5ox`Z!%~^yUfHtRzUf^eTslTDVoizj_qPDcck| zXbv7eY?*NwE)je|RJN 2 h&Rw~m^!KOcRmnEUqxns%n9lO=I63g{G_Cy5p;IiKm>kN} zyF=Da(7rSvcV uo==`f_=G&W~OPXIr7PgWd?x62s zoIk^reN@kV z<;JSCKR9sdYNbX#r? )y!(=G2Ia-YF6*8)!#Fg;93iGKb{VzFyw ze%Vp_cNaUm;C|iL+lx@9OL3Y0Is} C%IiyHGTEk#G5w7gLl{7lgu#S;CB*b1v2{+2HA#JI`yS4CV$i00UiRcJ#Ul1a+zf zb>c=ZL?~trcAoq^Un3v+{8c0`sgkG$o=FQVmm5*^4T@%&u5hXGbGFo4u3Sh9sF>0U zFU9mIcKaLCD#7Pmc3VIEZnc9yL%X1!^E*vkZtE{q+f WgKLznB z3h6TAFM@2O+umyPX14<>#bU7izmPL7w|kf&=#E17^68~4yK$z^CA(cni4(N1_8dKu z_iqf}Jl|1OQ*(c(cDQWD=7hQ^IPW+RGwBHdbI-|Q+dTQ)-|VqqdA(JL%tRVV^14Ap zd5M0D6?ObHzt5gnbzJe@N$eUN&>20tKNx bsFcLsTd{;tT3jb8d%`<0tg>(St9VjU z?aZXhBdlK|aQbj}Y)=;#7vaSUUXlGu;r{-9ez$opGiX#h>u-c#n(rzffK>&alr=IN zbJYvB|Gh<9ZfE_NUgC%e?@Xh7Q tDwUeV6 zQ=!WR6%?p8Ik3R{wr=k@vD?q=ykw(JLvQQ!>4?M3>`3{>mfjeZV%_|f@LQ4j@euFE z{6mFia&Wf2VKmMUOB%-J6N$>gFxS9pocE-H-~mcj@&Fh?i MfbA;TMi$L@$P)~Cr+H@kDoV)H8<7c*D{k2zRp%dU_hU_Mn zT@N2=U|1i|^7p6rZtvekd=gMUgkAj=+XpxUTo66QP^9)8JvHDs4THeQb~#FCFHlv{ zl8h!+;Iw;&1Z3t(9{FF}- BkWd_`0YuN(^x|Gtpe8kK=@ zR<2$q)d}?N-4*BP9#u02T#BhLNw2vF*jy4dR(}V{htH^=!7IEx*vf$cxm$YfM+$je zju{14txXDSnVF00S7e!k?a==1-hmaPqidB4PmQ!Cu$^ewC$8wCiV~E$Qh@_4*JVJ{ zSN)Jc)$|EZ)zpdmbgsf=k;Lm;_fXZv0h!TC$A_y>`C_Dg=X*C@qTJLafrqHpBcW}W z)kGS%8Kl$V85D&+KQrM&9nT3PF%5Umpvh90^O>yz;1Ql{7-ruJ0l*wAwQQZh>4}HP zMrdl`?38H5vPc~_F}s7H6g R{8yv9Jc2FH9Q>G`tN6&y!n>@(QJNL8k-ds>8IfN~-PtGHbL(_(QiV!Uv#99Ocj_v-^{d7PU_ErKI`AwfF;{9EZqg_Lcv9Un8_ zZheuu&l6ag!?FQb=nxUk;WtEI8^(axUhGf=b`k8V=uwpOXkca`U(ZenwpzRvh9kW| z+<`DjBV=})zOXyOF21~FV<{g#G(7c-yiMZA5!rVZ6Fc(yaH~mxqDLiqO%Tv9=Er-d zl%3}3=@9U1_;fWiAqy`+jCN4Qh&mWyP$E|CT49XF8NbYR?P4V&+4D?_4g@iuuIQ%p zfis5ztTCgamHLX8vmVQoh$YwBA2fDjH}jS6PXdVaNN*QDxK-xZxw8<**8HHeI^ *VWr`v75DoBlQ|0n^2}N rE4_JSI22SeXU8eySZbx~o3xv4ZMMsF z$vXp$(L-EsO|jcFbxV|yz3+qFF0W3vR_N_fTEK%RQ@1N~r+ZFn4()p~XJ-!l3!z4N zSzf4C%+0<5Kjy5w*>!^lXsO+V;-m~26MJu;>qYM^+&$k5G->oXc7Yez^wv{$4Ys+7t9JQBm`tn+XjOk zEY! UL)GG=4$^AAZ9jE^x+)G zz4yEjt<^2)?yt6esjp$r=p>DKI@bO{Sk>Yy6M~`^ZxWjL!+w+v5)TPX2vEEwwNDNI zup(k#r=EJ&G2f7WTk;qztKT(Y{`}d?>)# x lsR2NrF%sKgeTQYyxJr?Tt zlBGA#cEM*&j`3TXzVv?S-LZU_@FNl7%VOQ76D5J4?YFH)bYO8UPc)q78i7C!&gk8< zZWI=<2ll*GlD=_F6ti?O%<0YFNpjNE4xr*Y&~q4l;-}f}SBJbgcl&g|m5dFv%i~N_ z%w}1*Hj{xDB@jK{l_N&Pkdf{6e;G6cAfXqpQc5M_6LMMjgHs0kuocKH?Yol6u5BOe zQ =>^A?4;YPcG*GC1yFo~s zdQT{xuCcA)D-RSg n|sF4J5}li?FnCZyIP zp|;f++~YR>$|_a*=|u8fOS$|5qJKVw+Odz>6B`%2`A5Ix8fv<;+zwKhW~ 2yDJmyAq5pKbB~$Blj}HYSOM)_qzZ{G@ZZyqRWzpOj5ypNS;OJIyeVWY zNI&obLX8ODt@LnN3kHVP{d`utvD+b@$U%G6N%uq>?tic-+ZC|qeuNGfLb1y5N{nF& zsr<|{LG$8QwT%wTK>Ee7lOF~2qfcO#D4Ouw6W=9=tf3*+LYfB6CUwfU(n=L$v1Bg+ z&HcUuz3a$VT_(1@VALd;-96}?v(K~4UIQ|~@1D*@{G5vXXm5qoP6cwYvllGX16Mep z-O%|@3; poL^ _08-{b<^pU$xOQAUv$k~Zw-tsVB)RVM$aG?3W%eM4-Lbrd>(eiN_A z`}N%N{XY5GKQ=ejtIq(}9$mG5Z^)TO+r1!e_xz_sb}#_Sz4?%Fl-VLFVQkjn0Jy>K zw;Ii3e&4GX*>A}f{#uRL*)k=jY0?HG63q9cf3!JU@QoRZLD0fBmy?r(|FQslJ4XGL zO_pAVhfMA;4QJ$KaW3)&NuG5Cgu9Z7d2k2SkOq;qVzC;t;xs!uE%!f*n*J(V6UrZ+ zDEVhQe5)a=_sfp7ITIpa3IFl{Z@7U%Be`CfkB0LH*TmY^kyT~EWZ3$+O2OLkL8}~2 z>psu0G+7sI5M1Aje=Di57tbSCT!kfpet(3JXiGx)vFI5M=IZm_jttA+-m`6yR=fga zL@6S3VOOp|zXi0Nv+?Kis(gd^`^}^Yh1}e}Z#5(NN8w!Ll&4*T9|GkqZ=_}M4}6wI z5>@|v-248h$<=(@Kvc<%G=wWIV9asBtpmg)c=qOpSZT>2 zG0y}z)5J>*8O*m5QiWM~JtYd?e_U *X?>&ueMOn-Y0A6EZD#w@iUy4zvDDQP6iDwzVL+D zKw>9@=S;ls!*=g 3|mkot`)Xkt9SaR5r z$i`>)(SX0-?p~lJ(@Fhdz7;P#VLV{ZI&|+$ DIGdLn2UM>?752q zP X%X0*;*3^Sgc!E>HVs>zDIewGH;7?I`H6zV^htY>o?&Swbh*qGh1;pxaiilf zPMC4POY)I78mU{kj5AwpdWfM?I3%T*mO9(*C({rwPsZUB$DC}RJcr!ZR-R``Tm~ jVFhZxHdAA21N_!3e4k}o%j|t z`!#xkt?yUy% BeutgVvg#-E{t$$@iigT=e(i zr@Vd5Td%lo-fkrUb&__r#vg^`J%dW)FCm8~TAppAfi^qW-v|n#y?0{07dDr9&yA0T zkjGCkcWbxOYt||%nwhAC9_45I^K*C!Qu~hw#ObG16z{ifRWvjbN4{lG?^8?3oFAjC zqKN6~c-Sg*`rL<1y5|q^`yTEmFQv!OtqmG;#hAw3r+~>Z+7}^MwRoiVpEA#P$D%a= zm$ZTx_G? 79)1GZhM#a$aW_tp4*U@xFkq_|4;&oh)XX%ikGf za*kwr8Jj0UowT+?EGkQlSS_S;X6!$KZHf}PqZl_I|JGt&NZ-Lr8}405Gxk0an_&XD zJ5H*YMK>vg1odUFZz(r+M7Z!H&AsI(eBUDSI g%nT~vT;n<0`G*~Wk7|vm~CC?e*f_YO4wHxE!^9P^~X5#TI79wo- z&Oi1gtq<~{#wgdqoCZWzH{878Q`oIa@tU(NhNht<;X(JU4E!(wR^TVXs#y!Lo_Y*7 zj&%<}Qc^pILCmo*SKu3@!B=VafG7?$qN&A&*USo2-mYKdY6P`Ez}8j9=l~aX3QRNP zc74TeGm0SWP2`Q=m#zK4;h)v0!9K68 oMR>- Ok{?>4g(?TK!TB;a7 z70wKMU>}WSqH&NLCZMk-?UO
D2VeG$v zG^WSe6JD3`{EToP@$<99&l6_-`>KZc;|0}s8DBS|qR+k7&PfZT%?_VBvlj)OJpS~W z5#`7WKlM6-`$FA1@yCf}SnoIq# m23o0ObXLzyM_<8ki{ z+f1({u_eWou$9B_goZ9iKFN-tUDXCNfp_H%Lbfj*VfY5+XJ(Tpi|E8o{vRM`%8Ra& z61)2fvF7>k(WeJM$9uf t8xv2*AHAGHPq+i}DbJrvOrQE-4`I9RnohQa z8dZ}~9JRozzvbPxA91Irf6^5z27rQ{wbg=8(%VnbrC?P#K;zw_h=c=%hug79KY%=a zII4%Cg)4un +X`KLLz6U~$j)I3jh}m3S<1uazVo4+b3Z6<+ R1UzhqgJ)_I*7kJ(2XAo`n?F6eQlR9uYyP-l^7bmo zG1)`9LSi?hylbD}?b)jk534ERz%_$)I%Z{)l={0JK8J~JhJ1n#g~UV&79l5}h2OS= z;LoUEA==y^4<$zg3DEoR(MPZR)mrx{j-`#jUuB!-^GAyrw6!!vHQN_IsifJb-gDCv zeaRunbGfXUox33vF#jWm&b9F@Vf~AgZjO*V#+jqBm)n0Qa3&_~8nqH(v!K^(; ;=DUW2gu)mqx{&m2WLf;;1{+BqVaUuKV(l^2#oB`V%^U=pV zhN}aPt&c@VSP_DEz`W5WDy$q99SR*sR;L_rTJ2cFNh9`g$#-Cpbu=F$9;Tc;DqtJh zH`?U#I|%*UT35)5`heG>F(f4eiKKD=Ew*}-gY2E1=XSi~r6$iYDAfJT+4MXhoQQ0% zw4XfZ>@El;y(9HC)~9n@+{m{#I@2*+rVpaE|HN! (WWXVQm>K7af`=dJ=#%{L` 8A2g zbD}Sr0APP(B%^$Ge&f3p!?+bOh3zo !xBp}^ek}{ z9o9l?#CaC*EQXJt;;Rn*`_EM%I6eSSO`J9wEVw(sN&>BJCN8}7|0mb3<~S4)^6lx+ zI3LAT`$#o_+v$L*MM{+7_A+Xo>+|F{l@FauuWXWr(mpb>zO0hknTgw-GPEMp;DcLh zs2;4UZ#vJ^ExqyWTKaMqTr>E~Dn2wk)`W~AF4X$S29a}CC*nEkJ23ndpqaQww2Lv` zHV{`r8{FiM-L9U5gk_VF ;0+E zxIs#Tg2zdqEL=Csgl-~tpZuOcCamp(s*E9I^ipK%W>3s$qAkR3w$06GskQnS(WrE* z@B)Lw0(jflpqw;M%u|7C0>tk1F&u+P$eTPX6gv`|GDh7H1v{6Ic0F5lADIH;of(bP zkOPv#w=Vrz-@fwm*z6{sDfumTg$>F!Hwe+Ny-F@(I4#Mi4=Xqb@MshuVOm N7VPTaqL3Ch^^P?sWslRl`$LM#uHb+UEx1u$-yU zamo-$Ptd@pW(wcZsy~a33#@l`16Y7RNjIZ?JJwcSMiHLye#bPg+1CcmA?+Cjv|u&E z uEDEP<4SZ2vG3&^YdljPORp^*97 Dq-ot-1S FUJW!@t75rVEOxmb@xR%gZ!#Nf6Y} zHI?m Fd{M zmdgzO)2XZ$KfU@U2$W%g>PGb3i+zA1d1W*;P8tkM1xbPruZDc*RbqYN1pTKwka(v4 zm0xZE1X#g$Azs0EoIUpR_i?I%8m Nl4cYno(hdQx_>)1|}2p93+++Yi{S zuuq-sjn3d&Jlvbk)4M!^527U#a=e|pp=Jt+I0MLnn});2e$Hnj(o604JMp{@OIITv zKnvX|AIoDOkBtDM0w`ae^<75B6A$7=8#-M>8heT7?**Qk#*at!bq+lPy{-3}l^^>e zfptzL@W#MC_PV98{w?P~9R#8E!o^wh$W*?>bwPgf(~%~6dW_*7^SyO97jU%CF_dS1 z@Y&Uy)V!&@C6s@p+&X)U?6jiv{-5u?LYw&=qwmDF<|AyP&OBH0#9xhejEiJAX)a#U zc=G%s(FuJ C{nO?#(Rif|qjH;ux(ZO|p=yw>TR*0kv^=a7r zk^F)pD%dM@IvQyw+fix)KDSpmnb#f>C0e6zi(ANPKD`xbolwNj>mVK<9rNli!M_9D ziNMC%&D6##4T>+y+)nyJIOaU2d!22a|I`h){^LSark@S!4Ih!r1o#PNKpoHic}F__ z=U9O+PoTsD_VVetAN6a%X!BbrVI{KWPsC&1*9R!C)vWLzmhp< 6sDV@$`e>%WuC6pqk9+8E~DJKlOauc0XUwu}eI|>E!*kQ@wV(hBtgrWl!oc{~Q0< zux9qIwnP=VV;E|&P6KD4GqbaVq%;bZjLH2Ou_{)0uDICvQUBt0`}XJ*Znq;XebaaK zDjBmKBJl@mS@*L_*xbt~ldj=n=?C&7gGsAvZ5^^ljl6z|hg0| G_C3+>R3hPgxX*t)em27IEa_m0+&>M%2;j zq<3xSNHFAF? }9YinazGe05nZXh;oum3!Csqt=?%O}VI2#eJj=ANPBRPzkEtrJ{3s(Bj zzfB%8M~ipUn6IAgQgqC}kGy!*IYCAnI63d>Rp~y6Y&}c=N?bA0u<4rA`D1z|11(Jg z_|EL>2TU<)d``JI*SS4?@HKkuvZ`$F(IS&OTUow&^-X9_uD%DJ>jIQz (JS}zU5+)6HN*tt|Q3!!?Ok)&M>?}#e=4do8fG^RRd&4xfwM$$RgCbFA$Y|}J zsKw`RzSrxV*;!8!URxOxmvI4}1W2z{7Pd4N XW{gOj^vBgWR`$A4(Ea0ox zWH)@-`@6syrsYVIIGZ$temgv3j4O++Ur(&t=$bHhcPH99#|{cJxUR^g-7alLv;jBD zau`hO%p(=6n?p7{JMSVUnD$c_>>ZCn0*%ox((oHe`|9rF8adVPy%h?n`5F=U4gWsE zYg@b!Jc`>mL)D*mmU{X}K{Q;;O(+~JcNIs^d+$9#pP!wrJQ*R|UEKh1#k4rIm}a`B zsnxB3 CNk$yV|X^U`qxUtbWoS;TYh6FcZ#A+)2u*jB7y zFJAtIm96j<+4fr#^0Jx+EX`RrG=6*M>zs&RPWddOYT^bu>r!zh#%F$=`t0&YuE^HMukT1V9lJ{=2CbM)4wk6*8$7bl^u3JE9F-) zho7sDpBhz*`~fjQ`_~E!XjwjCq#Z;40L-vQZ;gV^&tN_~>KoSOA;9zZbCz|vX)WZR zMS(ek$H-aSeul~`^5DOIO$v1GL!{Rm`YCV1UtYU+Dqm$XXjw2#Ym;*NnG3wg*Sx?3 zd~EU)QwsjOHDNp*zvjL4G^E6rcja=wK1)nf)xS)&-YvI5uAb2yDd8xkNq!yB)nbW% z85fF)8VoN``@(BQa=ieJJ*_v%GO>fG!Na!I0x^fYjdbtM3ens7q--s$*H69pqA6Tf z7wB%R$4ehIL=jPUS-ezJQzO8S>({5xsV87C-@3sy%t+4Y1=VdcDVO4~Pcw1P)fL&Y z&$GakGaFWU?#C^->Br2t>2oJ2QFR%Kh|{u&Oe?2e5hq)Tq$IP>Qe& )F)ZFA(d^uUIWBRC?hUD6pW8>+D=OAC+Ims({Nz6oF<& urHG6LUo?@*8zz(FxJxH{a5f`p z3XHay7uB05U4E+4b1Y-Ibo}DD0_GU4)6g My8% PFd`A{HhBCTwOjQ+VQx0;2^b&DAk)8-GcK| zu`aKQD}f2|-jD1cD10m9q4cJS?Kp1Xd3u95zeFn1V}-KnmyQz7K9XG)24pMomhM{T zcJ7xkc$zN?Wpk=u7Se}l-X=>6?JIN(y=rePQl<;HDImlgf=?GHc7_T-3XZ_QsM>V= z2GaarEgUB28ICGZtI@U=5QC2S7?V$!;TEeMh%$TwpMR$=E(xO TfhuqU%n;ec3LDiCRm+Mw6*!s8gjB6Brr024TDLivC&xriY*nXC!HerN3%kchD zFp-C0=Ah2YBhy=jv?WqZG(Y$aPS!t? K@#p9A2hqHLJ&y2PTcL6qM@VEpaWZhi#n{%Jmgknm^spaqXQ{ z&k<6pZeo3%DIzWINdn8+{@N$`p+bcOAH=JQinQ-eesD&7SbSL;PWm)P;|{KNDdu7b zv-|D$j%z-P{)grI&pVv3r)FM8gVd);>Zi!hO;SGS;SC51PBL-T!AfC;d3Na`2!X2q z2@R_LKJFg0ce@c8Cp^vnq4qFXgD`b$8nQoRuIHl7%&xJSv&2w&Z?QSE#UOJCh;nhc zfw;QPk335mv3kk3;Kg6&7JD1;g>s^Gzd!ex5$Fdm{Z2j1o4DWn?w9jJlroYtOjtyF zds|97RK4SnInb4G|C@SXogR~thgiy9h y%lcH;zr%cXU`P&Q z^qui>1Rav?o!1Ql;vdM6 !9c>C8>nDCp;%^ts=@dF)?vsg=vx5y;99Aw(5*I#FG;_d=DU z1w5pBgDg$3{TD{Vid bJY*78;vNCRhcy7p% z=Sh;!!z7M4JsX?R*N@g7g0eZrGA6&vnMQ#0AYNG4Z`#i7UahTYf0>+p`5lrn{OI7) z1986dS0(81a{fLGVFJDbX|j#3`qMVWx*rEd4HyZS7}{v}MB=Zsbn`Ae48Zj)B(|^9 zG0EV3|L}_)aQ5uo*dMDFXQ*)^by@cQF_Rh0*i>r9^YSxGg+(+qNY(3_o!9DL? C=#gJ0$C*hS%hmNf8L?%j6TV}Mk4 z`fC? @MI=N*m!wGG`&1vHK;Z%<&m&`Tx0P9Ix((n}v>*xh$SBl!sSebSOg`FR4 zw$kC0HigyM7$lI~G4ga9-8{^bk0~#~?uAaAKbaX7Hj7 o(NA0BY|o{J%I>l{)Lp8lrC&O2?Z4mg&9? z#KTE1n`kE9@4w-M-$_Z;8E#-et^cu1xzG2d;&P05_mRSmCPsB70NL~X>@_#KB2Uw9 zPw4Ge-wZ+5bQT!&K-Xn{G+0v{Fi!)d&z`$~Mag%okKjdq4vsTF0pq9aJ!uxJ+RP=e z2b8oWawETA34_JFm+(oT%|GGb_#M^W!!>;t8DZ^bXL*mdy)uE!-)J^He8R@xwuf4U zH;F}1D+fyZWw&A1gg&x*d6AkQ&nZQ*k7rVd=Vs02lrlKUDzC{u*54SjB4}X`jG!C{ zg@l3!6)I5v$1KCC+!a njba&95yH>%ZI)eF1*9aHYw0-bS4 0iP2ztO`<1C2b;%~y}pGw z9k^(k@+vuFDQ$FaJ; IfOhkE-!-1@9AU2oBqAl?Zv50sS=^Y~Wmt7>R;y~Qi8 zHegeKh+TzKJ>(ly>F0uw)G!rtdtFH+uHGO4EBp^lbFul5!+L~k0eoN_`Af*J?$1Ip z-;X?V23T;8#RZsZ_1T!Pb#k|(6ar8z{iQj4!JXP}EHO)>st-?oGiuz-`GxNi`g*O7 zJWq?UiTIC3Y2k8iZr##b2JX>Lzz@k3uZ0+OX}Qe>Dfxz5^UbG#Fi?M9WQ%z0Ey(#} ztJ|8o96g%>4dGLGuyM_!qoQxdLR@FY<5N@p-ecQwU9kR;@uy2+b}#%AZIU6qZcp ^Wz*;YTCwa!6a<2`pLrUj4i3xb6TsJX6^3m z^`?+!%2`!(oAcC<0$wPg`>{isklVbnt7{FY^XGk$5Z6`tXUuSk!2TRL@n-k@)$f+c zi(l^2z0s!;Hlsl{M$G`OSzJA2WP^8>%uJo{i%2x_8D90z-+I}mT!{L5>D!W zK=g><)gg6mGwFXZlXMTap-dJRk_$$6ACc#?3gkzF=?{ZtskwD)OEe@nfP_OCFSd<$ z>y5fSFFMStOUg$1OyB|t`7(gK`+k7TL#W0u4Ay*kbxXdzSRgibfU6S+BZ>(*2porZ z35cP_QXbhf)G~_gE+8J_8Gfr}7sJd#LOOBr7oBn+xyAJn=bz2T!gNFGP)6GBR_5K- z%ET_nj)KERyDX{ts+c9Ze|DyxjttI|n&gnE*DQRPXP@R#L5T;1754ru#*^#6)U*1e z`o+X8aHJ7s#jZ7uu+N&iS?zBQ1xCz@pj<%q;-2vIP=Wg9R3(l^{vF=coiQI-tFQQk zV0Jg$Ahg`In^+63zByURl2P93_x$a=NB$Lm<-3 obv7T*k29U;v(mO2 z%6VRrOC-)y*I~{jXceR9{ o+_3#>J3vXIz~w{#Ja899K6;)n z4i$X9(fijr*E!nY{x$<_xfU{<&ua8wxpooe8Zj8U^3%&>bF80{a@_%$EsA+8_aZkU z( msI&*M%5srjgw$Jb{ME7{g|Z~oUt2R1 zsDKK|=+N@56JvUaO=kM$N?vT{fuq)9g^$3s&{MtU1;W~m>`VC>*lZ}OTBYfBXPRjI zUDb=i6_4>jnTo-J_bqfQz$f*j<6{F^x-Cak9s3#!9`LllkrzA1f>zl{#z)-Gbuc#< zhkX(n`wzmJ+A*vd+yJV#Ga}2FTp>5|_80|P-tD4S47uk>+r7DZXkK=3RjY@g)#+LM zXrfXRw3AB+mvvR-{MFWqp@azM<(u^DEZb)R7r&WDq7KoUX)7+~$eF^IaH!&xc9=>Ydm;G>aZ-^aLp_ z3s>{5KDhLuPZUz^g+l?aAn?=8GWn$z$UEWtRxRl~?@TDql{>OisRFYD6l=RL_Fbl( z*@T|JyHT?qg`Qlgc=2jXO&ya3$G1Cz9$Nf|pDXSQevk|~=d)A~#h#8;NLDwpD{XhD zmg!TXBy=>LTV!OLu N z0O7$q=i#>-^rsgKRtTUGD1atWx|Y|@^Sywap03Zgb7xEENb^go2SJB%tP49&0AfGq zORqRM3;Mz@d5j~cA0Uw(_zTuwsT5)t) zX_{Qo7VS3?b~WRoH1f*0s|c47NWl4d&cgJojmoy-d);bxATH8;A)#puERsbK!_Hf) zPW+|7qC4Ql^I8_F+vzSG-La@fcxlu{TA7Nel!}+WRjyD2s|IyWz|5*(eJ{q{@um`d zS@8g)=6nu19I3>)i^P|rF`npTpxV~?l>$zW4#z#>h=#QH?bY{46xmRy#b)V6NYMOb z{osyF=5Upk!u(c-N7~)Z(}*s4fl?@-D6pkS BBWupzamnkDB}J1an@X;~Ht~}8>+i)H0)Z|oZ|8as z$cf{|G#kIy0T3_MR8+Ce@IOcs&H%tTg9mRbEU@h~elrh! Sub18;Cpgb}L4)Z<`J|pBN(TTJTVJs!aTpldhQNsoj zsSylhQdH^$6q0gtw{`=*)u`7RQFJpFU68qupQ=ncUUZCqdYj;qfXNw=w^<&8X_QvH zX&~U)rifg3ryLggc(*jUokHT~0}8lS+!KwqEc&)_F@wv1oJ4lqTu%1{pRM%9Se<0C zU# Bqh!>VSrhi-eLE_BA?%)oyAQN#?!pNxyDMU;apK Ma5Pp;(E1Qc(R5quTp*a*T)h!1$F6c z4Xc;hdGCZKtdZja>bmzQ&g)osx_KPG@i)jI%k|eWz6+5i0dlA5a>TMb+6%<>GBurg zx<>!=A+oqjp#S##`YVej83l!sloKhLM9jH)82Z33r 22Zy2AG4 zk^RcPWz8MENZSRA!2Ac1+js!Be{2D@QKRL9(f4cek8+uc8AkMC{Ll;UzV@0x?1xBz zkt7Yhnnmq#WMs7*A8o7RHM{riI`<)R4&D=nx>YZ;!0|`k@X+Jy_n371>cU(mG=3bD zkeJG8{3ys>rFzu7S;Z5LCJes6Ov_u}_z;+XwHFl{><}DLw+Ln{?{bgBzxX&oIhcpb zEY?qG&S3F7Yp{{HmY21i*{(~t!`W9Lr?ab=Y00_*>KE9)VVrF<#?iWP*FRLv|M!d3 z>G1C1cp%mXsx}XVFgj0xl$L{I`zt>Opn-+Wke~-z7SRK%Ddt+rV?dmej43#O)MKwg zLzRrG$w!QMJN0ubGn5 YTDZ9)fp2fs S6e+kffw z*-<2&Q;A$pmcFU#IUVM_)L;VXDF;)i7Q-JmK4^4Gzdzy@KT1{ONpWlFjA9_uaoQ8} z-WW)1-?iptBTqyY?W!?9@b{k{kiN5cr%m`gr`x;qb_;r}4tDIOKx_oH?gOAS(-cvy z%CfYE`*dom({2SM*E4_mm}|ADoxX_{kG!971;(p-cpub`DV(m3+b$WdJ?_t~WEo!9 zNG-G4x2K#IHkeK&J>>tTAM~dlnaKp{S 7)ot zdtvv?3}jjQs0rJrk@BXFmFE9a^KLf%x0n~}_0bD5?ElWaTVed)>R=^p!vC(p@<}fG zUs7Q@S-$_N`6=~(wf+C46#oCABj~4RwBqSqhoZ_n1k}{og!sQ&k;L3LMz+dy zHI>a)&cDFIx; xizmPB*j+ v`Dyx0)`tQ~!#c7ODwWm?AnvB=$`#ZNT zG76T(BY~q8j{M{y$l=uORiff)VYuk`b{q}W%{m}Nb)?~QyF}jot$%Xp*{w8$Q}{vR zQgOS*8=k_V!GL?w(0k*WBkYlj_*Y|(g{3WGj{;_6^8CKT4p_0U*t`zhV9kYMkWep~ zeG+`72Ah1`a(SYd>PAa9cWhgt+)U-HFm#y<+V%>(O9kP`6kg4Ly@)I%aX8{k^Z<&M zGczbz=vq;=$ACz8Q81X~<)Ynml@4R@c8(L1goK%R;1L&`29S{OitjyL*k2oy-q6n5 z9hrL{_N0svc1Owa4rC#Bs_5#s>=!6bCGj#>lnm(;XPKsOq78;OZ z!6C9ovOg>;&3Zo6v{rtPk1OQE_;IdVL(0#e@|_z=5}Om@cP(7z9olj6@eU8xBoz#H zi?n@EE=u;Z{_}r2{9qbgWK2|p5|n*5l0^4uny`^XgpaE}ICe%?#qxQ*ccb2|EmL_p zLv#TdP`fVh7 epU)2wMoE&V$_UFB_1N_fD@STd%9})LrSXC@HBHS- zxo2YX51R+pd~yHg@86954i={zXNBAsCl5)fF=p5}gkR{SLOMYIJ@t3~3~Yvx;>4O6 zKbatmA3sVt)H1P`yUsy{lmkDyC_I^pw8h)rZ&zYgJCozgW?$$9X=3cAev_W{Tp@wY z4{ss3o@>l&R*-{UZ-Xz<5M;>6A*uV{KkJuh5oAzbfZN;s6eYS8X0^=0+v~F}tNWWQ z^+M^@_VDv5C4TR bV6uS zr9-Fz0_Wy=ANRYzZ;bP2k2A*JXN+_IQ2r!YYt6Z4x#pbL?b<=D*PW{n>F_xA5)hr` zK)M*z=WyM1(K`s5pZ}n7yJ^D#Hce~lch4DtgW)7j(E)prrjuspx|K%U{D^a4Zgt1H zFWKx8d@+vXYwkND`m_JBNI(+n-p@Pq^$FTGD<2Ydq&CUbod0F$^;)3`CjfJJOiEQ^ zU)8Fssg)PAkFw4}4ZdqHJveah>FtGXrRt28>kFc{MQwhvo?)-rj0eAyNvI4+9UF0j zKuP2>=NcElrjR^UEo>X(6$zPAzP&ORd*rrbrAbV>1qB5?qa|97F46Sqr(4c}JbK0+ zNlc27e%e>u1vrp_OzLW3no~U588Jh1vm^`HUyVxgBe{U{J;gJe*PK7+Vpj}gC{I!O z<;(EVGQGiz3}8GT#hOA0yCOiSwd#i=_A ahL1YfrAu;sn*WYJB$e?YsTT>E!@pTZkH%e|oLOHwL});Vydu;x(74q-gI} J`6FaW=ar$9rTb_uTx_x!L3=#Ff`r28;hxA><@ucz=?j$g z?|)>8=%f?qR=FHR3B-)k6<*5#C>E5|)S`{vwG)UaKTIE#xttDQ_T8*G8d0zPdgsm^ zi`f?MBS8rXG_Ej;R%L|uVZnD3@8u*{KzGm|MuClSi%!1_CIM!>+D_MbN=y-LQH)~4 zWMx8=V{QJvSoGY56 ~q10v3|yhZ7*5v1C- z@0@}1uYkkkBUH0jmHXDzm{qau8#Utq?6PNO+r_Cpoq)yX{=3bW7iW%-R4*%sSyK^{ z&y7P3`f>>uGv6=V6a!{89r3nT(wxD75pI;fV$t|I_}zF1lo(>owC;&zdbrAa{*=RX z-E&-=KCwv-YR*%D0MoH2R1L&u>(ABe>o!!3mGSWxP1)s03U5xhLTxisSC2~XMRJG* zPS`u8z<@kg+yP8pIk7f-kHx{=_Zpr?KVY@8BR;AdO#eFfVn7{@&)i}!2pALSNUh@o z*R80@I$j6~w%+1Mpnt2O68YEp%uWEOf`Y @mqaG~o zU?>GF-#~zmP_1%ptI&tSYma0|6Z_M}My$Fmt*oX345F5VCyd@g!U8T1M$};l#Y-3; z5im$-xio|r0!%evlD*&1UFqT1!Qq00<-|%S-`8K*H`aSxA7QEkL;~I`pB}8;_m5@* zX=Sp2y6l>5)evL2Hi3tN7Z(?x(MOzb4$qEf)F!48#)ghTHI5_9kT7rq6CNHT>t7vq zv4mM{)Yc8=PX69j77Y6EuiW5wUte&36}X%c@?O~V6!3rQhOUqf;5FvR7*lHtK;F!@ z{kf4e2ahk}v*EEvRB+z3syJ$X1IMkW+1d&$!yPR)da2M%YUL^BN|ColRjO9A0%r+> zgq|FoEXE*#dXA&9k%^QcJ=ZYXUrAPO-a@j4?ZrSJ$yDxb;mLdjM!VSVMe2;-mfjyWTP zPV@BXj5Xq5|# a?^Qo4ZeQ~>)Rs4oBw(ba56$C`Pa(cVPNbp UIU;3&CoO~t$ zF->>Y#Q~=nru+W#dRY}1F#fs#$ANt$-e`8pcx^!o8&&;lxxtd6OuO3NmIWf=N8tE) z^GJ(>_X?aohvDAw2?@)&k$mw0iG^XNALgYY%LD+baRZ*M3O7sKT|&*1{*=X?S)R$| z$L%An4Wj-1&Y=a0?_%r4d7G=pbAiq>02FR3LoT*NA;I#Co}Z^u8Nzp@Wg8b~x7?d_ zM0usqtggR%+Ud;T > pdIJH2)EG> zul3&*N2%53etq459pC$=>Kq7G?;w-nai0S2L*Y89Eb7gY>OBPs`cwFQTxe=?l}!s9 z0gg^9$efT9 4gV zW zxsnA@2 zb~#&WnA?QTl+IzBmtv#**8DNd=$Uf)I7VT%!RR^rVy(@&X$S+d(^Adz^&;4^gF7^D zUxzxCw9w;?t-m3B+BI@(pu0Qv@(giVJ7@22)XPG(|M3}%-)<0Yw5cZ%aYMoRL|q#D zBcPO0U2@3ESn6ax_-dFEl}lF7{Fu7Zq*jsH`xy|9Z553R7b@I+SYf>xEwNpVGRRS& zwaZq+_v1`|_pv`<0}ZbtePjE`X>+p1_2gF=8arl|D5^>tZ98KN2={K`A;h~yr3PdO zn^eD&> n6r1`$i*K1b%hI^7Wuf;uwZzuR8dHQrCrYnMj5e;z zq(zx84f-k-_T>&0TBklcSut4BpbA3RIjV1+VJQ=M@{35n+0!vQ`Vq)Z1K)(6 d8hwbBFdW&JUo2}wab?-X>j+g-&ulK7NUQ>}q6%!j#f&;N`gHjWO zjZbY|q7m4BXNRv2-#*>+44d%AVvzif9O&X#c^^MIDFyqahKpDaFd7mikAq-V{q$)= z1s)}~E@1{<$+V-G2>sE`hG-^<=Z*tntBexm7=ezKf2kKXl`Ss@M4Xy9q{6}}t4s42 z9lN}b_q7CaB(&>#P`!;@>||H#hK=Z@-GmV~jh4&j!cE^Iv{o+T7hD4O(5%<8OZ*yh z1svJGV(?xUD_QmK`u
_ z&0>HQ5=Lm1mxFi`3VwVEI_&X;_T*kMJ`|@2T2HBye)MkfX&16rihME3MmFcW(<=MM zcCO7|Bu{07YQ(JN^v5~iG1@C+F0q4{W5i{vkx$XM7ESa82q)o#_Z~17%Q1oHc^Lto zo-n`jy{>JI<+b d#m810fnIh`Tc(sg zTl-ntQeGopki@XRx8ClW%5XhJ`-`E%EupQ!2Bl!H8Y``kMZ#}SFRThSrx+PGy#p%# zTBY3DaW0=+@zBBHYQ#p*uH_)ccrWWs%y>W&sReYKvV(ddQx@IXnNygYzH~jXT+*19 zU^lp@ywOV4n@&@ttduulv&Gk6t}<%GB0VEoLQU3-&dcfK%@{*q+Jcq+mw1=^2B?5u zV(FfEZr3(Lqa27Thw?a*u&CdxQ>scpjvF*Sv`PHy!l_zXV3OwU5{`Mt%L^i>AJ=&e zPdiE1IG??F8K_v{C3Ac(1_%Jq)(canh-1jqk=vEq*m|wwqET+
2q({((wnK92i zRegAoCR6bxT|t));I698D$|3sk}r?(6s8yl6OqHVMvBzoS mhso9Gnflj%^Jx*fQK%qja+PX)SJ~hj zDX;zZv?xGChM%j@`Rwrb(0AD1P+4j3O-WSLL&xhK#N$Sf-xKv3?_jT+ncR*DnhR^H zO0vk9r^;#Y>9;~vKhH9ChsfQ}AQ1rRK90Rdov1TrOlG?SGpNXS)0t~F7EqYI0it=# z#_tPinfK{dSuCRkaj_QaJGCuPeZTqe>0^q!yk!s)JdIYN$5%;jeK-pc39Wxtlfk*C zx##N8uN}*H0kP{(uN^UuP=$o~GUl?<6!Q?Q$(|qE%N}a$Akd{(5Sm8+dnl>nUTEBJ zwWG7S%UKxz>*}uorTVp2s6mrfAJm%!-Gd@I4n*MP*_@`PCL8YT7-D+9KnwLfc1jyq z!vcIVTh W z)B@A@A `x}FfGB6H`rF?+3@5QfPL+ZX_ zweDsvVsD+P ztULsh$S=Qn_%oOB`yO@9NoQa{bt@YU{03ez4L%WBVtP8`ndIdW+8IJfO5d%>;%|{P z7@Yn3i-A XZ^C}yEjmVBI z#>nvL8M%b?pNelcEIQDPe-WLv2{uh#tG6BD@ZPNHny%?1xU4jWojh$l*#_qEzdWa< zC9*EGb@^-%1F`a}cbb_}L$Y)aGre9TE2lF`RV_RW#{rmG&01z8jhN2(sjV(*p(AoD zx>Dgu8vw5a0eDts&0!WPoxl&m{qwqjM~4?@J49dhhn4wz@X00LY_RRqPCRj%eqy+j zOt^aR)pa>Zua`d%tIQCBIL9Czr7R4xQ1`-qnCLj19c=+ad(p8lNA%R+ypjteR9L?n z+72=8ftysvt0JP7jfcwN C|_XPrCj#y0bO3VKF+shqFsJF()u!z KRot38Zz1XAVW zv0z=f(AO!_uCqyMkK>(NcC3EBa%aP1e0N%ITt+c$J(lH%3HP5RAp+b5Y+>=YzP@dL zgu?Xe$;$q=x*Da)8a`Bjh@HM%&F7UJ-pdBRnh(EhI+LuPWdPWs$dkifo~rJRDufgM zo78*bC0d*e*~8j>KiO{8b3N;y8pcZ`?D)19p`m?|OPNGiGwZ#|WINqZBYE&s9@EL- zJbBvoJetu~OKwnNM-tT{*6`qPr9X{GV7$p|$7zFSpB^N5SXx#Y4>1iusSV~K)bZWv zyRSO5=@sz<5EqA4SKLr>S8!O+n cTPrh&S-3i#~9L8;^Pt+xFEiRJRz0cc5y zfuepnKyb(3pDJAIQDW@c!|r5yb$dU{Xz`sHPWt@#xS7i1JhNV>*0?DTuPo_|_t1K= z+b3%D u3b9@h;+ zOC* hb67yB6cs?k9J$fvq$%E z>%PJY=KEwx^jd*!r7RG~5!~(@=e uJNBYz_ekz@^qE?0KOkv&h}ekCrL$T+ zl}M}=`r$o_YOOYJ*cbk4+E9ps^_6f(lV@9f(bh*{ECCH@q6h%qGsHL@07ea`X*<(@ zQ``UGMN`XO7Z~d89kEr}eO$}XZ72#)oQ5-?wqaq4Wbc!x!X5Mtc;{LTUE-pZ@QwY? zj_R+m_J3$vD@ P`a(~zGu>FbRVCry70u+B=Mk9U zHXtU_P;WiRe0J (GB!4ICs6G-yOzF zX12Hj9IwD<2PP|e){!-P4b=^ieH&QX(cBe7XOX1w>?y-j{7+Xhr!bxN`N1|?Rlkt6 z(wx0O=nNS-JGl8*#r3*|ueT!Eqx`4QVaIVqt@A2hflMZl#Z;rS?@Y0Mf2LIagb~UO zVPe2|>2(|WGn4$)OeWQ2^eaw!K;Ra$>FP2_6mJDCgItvj_ZQ C-F zqXYnQ1bfgc77-aZNX778cSNw>oQi6~;N|wHebQ`OcQh@?aC5{LV=-h{L(s8)ryq|2 z0QNxQkBwpn^4j@<-05h_-tmJ {4~m z+2$_f!au?2^q{c#T1|gs GFI_@eHkTs=^&F S*GXUa@B1y~?rXc+mAFf?&50ZiD^0fz*;1&4sXOZ}9ffbE(dJ&_njBC9 zMNtkQ*rWKj(PGclq_Gy A{@Tkj>9h`TlB)XsbC-RXRjv9T-v?^)6D)d#J6tq`tR5q(c%UryN z$GinVb?BS+>nY+MrAtdo-2)jCGtNH @1HUxg&fflvzShjm5O z n)pxEROD5Ockb$j*p-BW?i8F=X%-;&xQBC0BhYYj oW2A7kbp2p%|G9n+?X1rcR-GcOZ8|n{Bt9If<>NyDb5gk_3sJ zmXVB)-2g<$V+eOjI@&@bxr@>lj;I^gOUo>PN|#9W7=Wku00>nOK9N!|A?Z>CPh~8S z(f5XPX4$&@`;@x<}8Ta2SK8di}Gus(~t zql&C*J5>S>kDZv7kT!6hpkwy^A}MwulHY-K6LE>F>Pr>HDWUDW>U$=m`s_viT znY8JA-JD0S9DHDLRoVZ^Mj4onC{wfg?0qBR9!F|MzP={?6HWTxL-XnYH8Z2vv |xqkeg~!9-bb19-C!m~e4wSdJg(7gbxKyVNG-!**B&6&@}vj!y8aqZe{rg`e^bAY zI1tb+$I6q{1hMr`50`^7+6ZHX8uAV5?bxqyA&d5p1R}Eea;zB$fcvudXO6t%-sgb( ziqVNTDLJ}<-mN8oY&dqpG;rqV_@g-jx8=MH+&M52i=PH_;JJ(8U%7 O*6+`Q1phW>z&`;4 zr6#u20lLz-11-Y`^Vroa=U{#ye}s47+gXjyw+B0Fyx8a&&ONQ0Y#SZb2EGt)xN$X; zha0e0*kuS32*9`yfLI-674dZptRaL2Le+=M5Ys8VIIA!IKoL)5J}>A|MV2zYBhdQ< zbn7^HCJ_z_*>8O#=1&AXVmAS;5$jcZ!~N(d- G?R+x0O8GD{Pd{8U{cnuK;i%S@S5vxB@e09@TolwY@+#~WVNeYYY4tgD zMYu>}mlBSAGYX3U^X`c~UsDf^zpC;^i>=&cnB4aT*1v@rnY(Mx0o0KG_3TAw-!;!w zAh7#j1(cs%XFMie0%h0!TO&Rdb;jNuER}| #InE(Yez0r~Tsl%}eph767&_VpBqA^JiBdfKBBGL4Yh~ zmPWr=fhz#;NFtB&I>=~fY0+i_PZmkim alppuD9K)ytK?L%lJ`&!zD%4&spM{~-<(Rjw;2+TD(l@;yqds}n+RiMlL2YgTce<;kTp zrT;ndJlH+wnlS0C_nbXP%5d&O4`wO)C&c|eS_YyiG&0_QJDNY+I`Pg^d#p`N+Gn%d z&9knK|J)#I;eL#yd9(e;fnXrbxE=k=ChiNpALgUypO4J12CD!c0nKU%ev?d }4|HM`)uBrZs@$&<}{;fZ4X4+xTjw$hShe>LJnJBcx z$;J6=fWMo7>_Z$O4s;~`{d`!LFTDHVmMxRHv+5Zfty3dd)$&}x@Uugv%qxzz)uX82 z4;oj%v%|ex@fDFvM+pB-&u5+kpG|dNcO{SCJG$_?Kf{-mIoAtx;x#c >|X~LLUCTd(I_K^0eP{hEMOe Z7cd51y^ 2TmBR`y5|)`MP=OFH6_On`z4* zqn+TUU0MYdv=myTMBP=>;~F{F9_#Sqt~DP0-k9dQZ=|7i8E{!NL#Eh({gX>;lgd3F z6-O7&a>&>6b4^I ^y&l>$NM9`)NbxDF5u+Q$9?z3!I zvoj(nyK@kF`M1}>itJarjZiA@d95mMwRF>DzKmu+E}VmJN&rYOKNGg8zd$yjCH^VA z>}41E@^0+f;AG8r&k1D~rW^UV(r^i=RoL3xT=kDNvYW8A^NpQ P0q~=c+n=m14?dLqB~Uu+&a;i`4jsGXX$B69aZVFs=VL;7O`Dz z4*BO_+#*z{dLTdsHh9b8#j%LU=z}wn%0$!@W|mFgtjm!vBXq;seQ3oI3tMwaTeTGv zkeY$nx`Ylkxo~w+W6EjoDl ~TXe*&-Oz`3!IUC7+VzdwJ-fGO)X;i! z=Od)~^+|
hP$?Ri*P^@5Pb*bI!6!6jb=@<&yd*KO9}vD`j|ibwdP>v4+b* zF+2lz(QS*Ia8RnZz;aGF211J@g0tE4ec5QPxVCShn2Dwjw%Lcd&5=8$mA#TEy73If zDuE;@Vl*V~<&Tja3OAvdh!=Ymq0#a*^DyG6HY^kRbi|J#hYV^m3}CAIO?8fIWnO(c z+g^WUUivBfu7(~cz>wLG|HzyI$&(nv;w`tb qAeXNA?XH2Aj#rDqdt4|&8N z2ObkS(dd1O5*UoXzZ9hIoT#JV1Rv9imNct1ny1Nn-PzA}77)6WR_U`A_)t{k@chrF z@c@yiJxui8S$WYwU$2QifG{wpaEXnWCeVo$das&!pTltlwP*gZAN4VVDMR@7CEVOj zhN|7M2SRXR!l4xqJGaHt=D@lj&cGRy9D{uEYt _YbEvIF31{ZBDJ$g_Ozg8cDs)$?Z2BIW?XUfmF3s zz3ZTgkOVPJznK`%s;tfm%B8%&&K<^LEK(7m= cqKCfVV z2!tn~ro|QUCmPgX|EuFelTE*73N1(c7%u8p{80DSjiK}WU#?aS#gn01PSsp3fE&76 zM it@8#Qn!|o}WbikzD8Tywx9b)*iy?iuyvp9cotIO?Bc-l- zOW7hrbsIyS(XjZOa|1bXJ_veRW0I$Zf33Re$nl*)d{}Q>(1(c;SBoYYe8-wi&q!So zD#UN(3v}yFm0D!kf4X1_Pvzv~O3=~xb_pt%--R*r=I{|g_w=RdX&DDX^&c)xUlJi% zcloxa2i|xK?2iw*Hfv#Dr4$D$=D)#dreLuoDT2O1eh90Ca@UO%CC4cPaj&&|oaBrT z^yLNe-2{sQwHp&Gf1fbIzbAlVR-?eu&3e6EgDtF8xK#;#n3iCMX1-fYo51E~oPfg% zBHP3VP{(yg*8xi9j3K{)tld zVY?N&)JHrRZ %