From 657df8bddaf9a41e9cc0b50df5abb2b4fd118724 Mon Sep 17 00:00:00 2001 From: Lea Anthony Date: Fri, 1 Jan 2021 12:53:06 +1100 Subject: [PATCH] Use `assets` dir in project for all application assets --- v2/internal/project/project.go | 10 ++-- v2/pkg/commands/build/base.go | 55 +++++++++--------- v2/pkg/commands/build/desktop.go | 16 +++-- v2/pkg/commands/build/desktop_darwin.go | 26 ++++++--- v2/pkg/commands/build/packager.go | 6 +- v2/pkg/commands/build/packager_darwin.go | 15 +++-- v2/test/kitchensink/assets/appicon.png | Bin 0 -> 44860 bytes .../{icons => assets}/dialog/info-light.png | Bin .../{icons => assets}/dialog/info-light2x.png | Bin .../{icons => assets}/dialog/wails.png | Bin .../{icons => assets}/dialog/wails2x.png | Bin .../{icons => assets}/tray/dark.png | Bin .../{icons => assets}/tray/light.png | Bin .../{icons => assets}/tray/light2x.png | Bin .../{icons => assets}/tray/svelte.png | Bin 15 files changed, 73 insertions(+), 55 deletions(-) create mode 100644 v2/test/kitchensink/assets/appicon.png rename v2/test/kitchensink/{icons => assets}/dialog/info-light.png (100%) rename v2/test/kitchensink/{icons => assets}/dialog/info-light2x.png (100%) rename v2/test/kitchensink/{icons => assets}/dialog/wails.png (100%) rename v2/test/kitchensink/{icons => assets}/dialog/wails2x.png (100%) rename v2/test/kitchensink/{icons => assets}/tray/dark.png (100%) rename v2/test/kitchensink/{icons => assets}/tray/light.png (100%) rename v2/test/kitchensink/{icons => assets}/tray/light2x.png (100%) rename v2/test/kitchensink/{icons => assets}/tray/svelte.png (100%) diff --git a/v2/internal/project/project.go b/v2/internal/project/project.go index 947315ff5..ff30cfb01 100644 --- a/v2/internal/project/project.go +++ b/v2/internal/project/project.go @@ -25,8 +25,8 @@ type Project struct { // The path to the project directory Path string - // Icons directory - IconsDir string `json:"icons_dir"` + // Assets directory + AssetsDir string `json:"assetsdir"` // The output filename OutputFilename string `json:"outputfilename"` @@ -75,9 +75,9 @@ func Load(projectPath string) (*Project, error) { result.Name = "wailsapp" } - // Set default icons directory if none given - if result.IconsDir == "" { - result.IconsDir = filepath.Join(result.Path, "icons") + // Set default assets directory if none given + if result.AssetsDir == "" { + result.AssetsDir = filepath.Join(result.Path, "assets") } // Fix up OutputFilename diff --git a/v2/pkg/commands/build/base.go b/v2/pkg/commands/build/base.go index 684c8caaa..abb149e7e 100644 --- a/v2/pkg/commands/build/base.go +++ b/v2/pkg/commands/build/base.go @@ -49,39 +49,43 @@ func (b *BaseBuilder) fileExists(path string) bool { return true } -// buildStaticAssets will iterate through the projects static directory and add all files +// buildCustomAssets will iterate through the projects static directory and add all files // to the application wide asset database. -func (b *BaseBuilder) buildStaticAssets(projectData *project.Project) error { +func (b *BaseBuilder) buildCustomAssets(projectData *project.Project) error { // Add trailing slash to Asset directory - assetsDir := filepath.Join(projectData.Path, "assets") + "/" - - assets := assetdb.NewAssetDB() - if b.fileExists(assetsDir) { - err := filepath.Walk(assetsDir, func(path string, info os.FileInfo, err error) error { - if err != nil { - return err - } - normalisedPath := filepath.ToSlash(path) - localPath := strings.TrimPrefix(normalisedPath, assetsDir) - if len(localPath) == 0 { - return nil - } - if data, err := ioutil.ReadFile(filepath.Join(assetsDir, localPath)); err == nil { - assets.AddAsset(localPath, data) - } - - return nil - }) + customAssetsDir := filepath.Join(projectData.Path, "assets", "custom") + "/" + if !b.fileExists(customAssetsDir) { + err := fs.MkDirs(customAssetsDir) if err != nil { return err } } + assets := assetdb.NewAssetDB() + err := filepath.Walk(customAssetsDir, func(path string, info os.FileInfo, err error) error { + if err != nil { + return err + } + normalisedPath := filepath.ToSlash(path) + localPath := strings.TrimPrefix(normalisedPath, customAssetsDir) + if len(localPath) == 0 { + return nil + } + if data, err := ioutil.ReadFile(filepath.Join(customAssetsDir, localPath)); err == nil { + assets.AddAsset(localPath, data) + } + + return nil + }) + if err != nil { + return err + } + // Write assetdb out to root directory assetsDbFilename := fs.RelativePath("../../../assetsdb.go") b.addFileToDelete(assetsDbFilename) - err := ioutil.WriteFile(assetsDbFilename, []byte(assets.Serialize("assets", "wails")), 0644) + err = ioutil.WriteFile(assetsDbFilename, []byte(assets.Serialize("assets", "wails")), 0644) if err != nil { return err } @@ -128,7 +132,7 @@ func (b *BaseBuilder) CleanUp() { // Delete file. We ignore errors because these files will be overwritten // by the next build anyway. - os.Remove(filename) + _ = os.Remove(filename) }) } @@ -166,7 +170,7 @@ func (b *BaseBuilder) CompileProject(options *Options) error { // Get application build directory appDir := options.BuildDirectory - err := cleanBuildDirectory(options, options.Platform) + err := cleanBuildDirectory(options) if err != nil { return err } @@ -307,8 +311,7 @@ func (b *BaseBuilder) NpmRunWithEnvironment(projectDir, buildTarget string, verb } // BuildFrontend executes the `npm build` command for the frontend directory -func (b *BaseBuilder) BuildFrontend(outputLogger *clilogger.CLILogger) error { - verbose := false +func (b *BaseBuilder) BuildFrontend(outputLogger *clilogger.CLILogger, verbose bool) error { frontendDir := filepath.Join(b.projectData.Path, "frontend") diff --git a/v2/pkg/commands/build/desktop.go b/v2/pkg/commands/build/desktop.go index e06d3da7f..09c87784e 100644 --- a/v2/pkg/commands/build/desktop.go +++ b/v2/pkg/commands/build/desktop.go @@ -24,9 +24,15 @@ func newDesktopBuilder() *DesktopBuilder { func (d *DesktopBuilder) BuildAssets(options *Options) error { var err error - // Check icon directory exists - if !fs.DirExists(options.ProjectData.IconsDir) { - return fmt.Errorf("icon directory %s does not exist", options.ProjectData.IconsDir) + // Check assets directory exists + if !fs.DirExists(options.ProjectData.AssetsDir) { + // Path to default assets + defaultAssets := fs.RelativePath("./internal/assets") + // Copy the default assets directory + err := fs.CopyDir(defaultAssets, options.ProjectData.AssetsDir) + if err != nil { + return err + } } // Get a list of assets from the HTML @@ -42,7 +48,7 @@ func (d *DesktopBuilder) BuildAssets(options *Options) error { } // Build static assets - err = d.buildStaticAssets(d.projectData) + err = d.buildCustomAssets(d.projectData) if err != nil { return err } @@ -95,7 +101,7 @@ func (d *DesktopBuilder) BuildBaseAssets(assets *html.AssetBundle, options *Opti func (d *DesktopBuilder) processApplicationIcon(assetDir string) error { // Copy default icon if one doesn't exist - iconFile := filepath.Join(d.projectData.IconsDir, "appicon.png") + iconFile := filepath.Join(d.projectData.AssetsDir, "appicon.png") if !fs.FileExists(iconFile) { err := fs.CopyFile(defaultIconPath(), iconFile) if err != nil { diff --git a/v2/pkg/commands/build/desktop_darwin.go b/v2/pkg/commands/build/desktop_darwin.go index 85a9a628e..9b8d80870 100644 --- a/v2/pkg/commands/build/desktop_darwin.go +++ b/v2/pkg/commands/build/desktop_darwin.go @@ -21,21 +21,29 @@ func (d *DesktopBuilder) convertToHexLiteral(bytes []byte) string { return result } -// We will compile all tray icons found at /icons/tray/*.png into the application +// We will compile all tray icons found at /assets/trayicons/*.png into the application func (d *DesktopBuilder) processTrayIcons(assetDir string, options *Options) error { var err error // Get all the tray icon filenames - trayIconDirectory := filepath.Join(options.ProjectData.IconsDir, "tray") - var trayIconFilenames []string - if fs.DirExists(trayIconDirectory) { - trayIconFilenames, err = filepath.Glob(trayIconDirectory + "/*.png") + trayIconDirectory := filepath.Join(options.ProjectData.AssetsDir, "tray") + + // If the directory doesn't exist, create it + if !fs.DirExists(trayIconDirectory) { + err = fs.MkDirs(trayIconDirectory) if err != nil { - log.Fatal(err) return err } } + + var trayIconFilenames []string + trayIconFilenames, err = filepath.Glob(trayIconDirectory + "/*.png") + if err != nil { + log.Fatal(err) + return err + } + // Setup target targetFilename := "trayicons" targetFile := filepath.Join(assetDir, targetFilename+".c") @@ -108,12 +116,12 @@ func (d *DesktopBuilder) processDialogIcons(assetDir string, options *Options) e var err error // Get all the dialog icon filenames - dialogIconDirectory := filepath.Join(options.ProjectData.IconsDir, "dialog") + dialogIconDirectory := filepath.Join(options.ProjectData.AssetsDir, "dialog") var dialogIconFilenames []string - // If the user has no custom dialog icons, copy the defaults + // If the directory does not exist, create it if !fs.DirExists(dialogIconDirectory) { - defaultDialogIconsDirectory := fs.RelativePath("./internal/packager/icons/dialog") + defaultDialogIconsDirectory := fs.RelativePath("./internal/packager/icons/default/dialog") err := fs.CopyDir(defaultDialogIconsDirectory, dialogIconDirectory) if err != nil { return err diff --git a/v2/pkg/commands/build/packager.go b/v2/pkg/commands/build/packager.go index f48a5e55d..c32900a05 100644 --- a/v2/pkg/commands/build/packager.go +++ b/v2/pkg/commands/build/packager.go @@ -28,7 +28,7 @@ func packageProject(options *Options, platform string) error { } // cleanBuildDirectory will remove an existing build directory and recreate it -func cleanBuildDirectory(options *Options, platform string) error { +func cleanBuildDirectory(options *Options) error { buildDirectory := options.BuildDirectory @@ -49,8 +49,6 @@ func cleanBuildDirectory(options *Options, platform string) error { return nil } -func copyFileToBuildDirectory() {} - // Gets (and creates) the build base directory func getBuildBaseDirectory(options *Options) (string, error) { buildDirectory := filepath.Join(options.ProjectData.Path, "build") @@ -65,7 +63,7 @@ func getBuildBaseDirectory(options *Options) (string, error) { // Gets the path to the default icon func defaultIconPath() string { - return fs.RelativePath("internal/packager/icon64.png") + return fs.RelativePath("internal/packager/icon1024.png") } // Gets the platform dependent package assets directory diff --git a/v2/pkg/commands/build/packager_darwin.go b/v2/pkg/commands/build/packager_darwin.go index a52e01169..99f383056 100644 --- a/v2/pkg/commands/build/packager_darwin.go +++ b/v2/pkg/commands/build/packager_darwin.go @@ -47,7 +47,7 @@ func packageApplication(options *Options) error { } // Generate Icons - err = processApplicationIcon(resourceDir, options.ProjectData.IconsDir) + err = processApplicationIcon(resourceDir, options.ProjectData.AssetsDir) if err != nil { return err } @@ -56,15 +56,13 @@ func packageApplication(options *Options) error { } func processPList(options *Options, contentsDirectory string) error { + // Check if plist already exists in project dir - plistFile, err := fs.RelativeToCwd("info.plist") - if err != nil { - return err - } + plistFile := filepath.Join(options.ProjectData.AssetsDir, "mac", "info.plist") // If the file doesn't exist, generate it if !fs.FileExists(plistFile) { - err = generateDefaultPlist(options, plistFile) + err := generateDefaultPlist(options, plistFile) if err != nil { return err } @@ -100,6 +98,11 @@ func generateDefaultPlist(options *Options, targetPlistFile string) error { return err } + // Create the directory if it doesn't exist + err = fs.MkDirs(filepath.Dir(targetPlistFile)) + if err != nil { + return err + } // Save the file return ioutil.WriteFile(targetPlistFile, tpl.Bytes(), 0644) } diff --git a/v2/test/kitchensink/assets/appicon.png b/v2/test/kitchensink/assets/appicon.png new file mode 100644 index 0000000000000000000000000000000000000000..a3ad26ce7377c1b97dbada650f6f3faf86fe2cd0 GIT binary patch literal 44860 zcmbSR_g@pu*PTs5@4Z9lMVbiG1VZmciqe!wZz3oHDv(9Gh#(-KAWbQP2m&f9NJM%^ zR1g(Hks`hKB|L@UQni?G)-QC??US8hX+FD;<|M&0T=H}+Y!ouq6Dv3lA z6+)k!oRC=^9UUDU9PI7wk@0tScE~pm3=FijwUL{X@9gO4Ah(^HoBR6p>(J0pPfySI z`1rSP-@3ZG$WXJhv*ZW;`SWLcdwXVPW^!_JWo4zWukYv2p9BKo_wV2R{rzMz;v%A# zTwT>v)nuh*@Ob>4+qXY8H;bW#KYaLLWp2U6#r5v(TVEevBYguiV-w}mN{_O#loS+_ z5)y5#ZDb@QAEc&6M@D6&Ka7iw!(Mii5);?e)`g!XI?~yh1_VlW$sd-lNEaciXN=nMI($cUS zp|7f|E6U3qFIRVzydfHj-escyD9HN%LxPGjT57fp%x%_iC_-Xs)-!#uYH+JI$>Ujqm%pw7oyZ? z+Zc6-JL`!A-1-F4XHj3VA(HMJWy~jCWJAYfc}u}b`T@%j#T$)aIf7ZyS;`?WZE`Gr z%zE;0qx*n5|BZF4>gP`sdQ>)$?ir%|32SstRNa;fRSL7>{EBU|Sd7ZY& zRHDSm+2gZ^^1B|!kWZkjE61`6J{)ia%MgXh4f#%t7F2@gcrT&l&;ra3mK4v=zxRif`5ztBpK`cGam29(3!pg&iLfhQksvM;$A&xF*jvn580_h7-#MAH zrU>mio}ZcB{k2^+kpnNn!xa}GCnhqD$#$G_-J($1)&1UIOI5TBuMWPrJNZsRN|bT5 zT{o%M%Smd))n7H`0j+6b$M0QUHk=i(sR24D&oQtuk5g;d2p7U>eT=GrLtU?$pP@3L z7>mWnSHbjr=vkcyEw+`8mv2lPUthgeHhvM~LA|i%`3;;Wu57PO*Z8DZQiv_?naN;& z!~{`yEprdm|K3+9$MKQUy!S`zSDFwRH~0D-;C$q!Cgt`^(L&N<+`ecClers2zWoLC z^3fpuSVSPg*^^N&4Y*! zi-qF(kxG8>+v8swI2TC$gK8(JryjdR`Fs+D5c@X@H-rxAI)M{~#3ZObxL7&6$;9*V z`xOqUcQMJADH`eUUyf_kh@t_%qLB0ou1GO;L>v_mCV7-*pF1&}i*BS;6vcdCATWVg z-F@Pc$~#im#9GNuApHvRrvojdi~g6Oh%CxzcZVYAB=y}amZL=q>EAla>wplj7xZm6;_>V=hM zH_(N^zP#tg0XNS-azQ2NV`M0Xe$mhYC-Bdd0^RsTWfYuv@}hr(I10QMMbYZ{s@G1) zF@21lC?*Q5(*bz^BUQ&=LAHDlFCT^zU{1ZGtWAWojDQZkSQ5E!_PHBQaU06bJ?XcU9n z##f+lQ4FgKxP?UXfuG=?5CI*?AZu$?TyrKz4Bv^OfdTsXc+t?zaq8j|E0kqK+)W=^m9;sljl}958Ea>%;c{rM3Y>|bqjw;%|L_rWL^G4OS z(5~*XLnu$;YG#MLj`G#a)vHhD1X|^j0`F#>$Gk4V@c$0h z4f%4@z)LyF`Dyoa+_lN(`K#v&%v?^bwVvdLj)&@bNAE|jsn5#?3(lA;QF^ve`Hmxt zMDc5=2Z%|gso!6$zdkCGrv=L(nnf*ZvYgMOg^vHhX*Y8%@aqU%r@~l68v#IRpl|V4 z>Up}D!h5sao2GV5_yuO53VqiC6HwA-S|R61VoI!ibP8S{_5dr;m=2u*qUb$x-(kUz zbt_yIxNK>s+{Z*mpn^k(qF^Q+_efEjGYCRCEc@A($6$9UEJZLz5*SkzP`KZrE^ zs6s8Ax7qKkUT36k=c#IUcSt{;zY2^8nS=rofdv(;f!McQFlYq2P70#%3 zejM@m-(!)MOL~Ps@2G3q#n|0rq~_YiQ(SrB@zpoeyDvz}yi;$960k<~21+r*<0tC`&OQIE<1+`;{$+^ z@HK>DGs6%on56#mK>Qtpb0tH=r1*5EFiDsS|K$uA-9HWyX4tD&J}ngNKU@kwY7GDq z2WIpjn+X{Z4lU{uw2ON~CbD&VTVqnj(>Cu&YqN+0F+&DA_@S$GVFH!Oy!puG`87-B zcK8WsLSY}Sm0kr2$f8?Z>vY9c$vKR=z5QmWm7G69JP$=N^e`12{CU(aUiO?xwCbXg zo>fd4iogLypEh^LDcr+3@prC!=zMKZv$Gf*t{0 zm`W*oW$B^;Zo>!~yrPa$G&AN7<3jAKPjtDFrPqG!P5bKf2nnlEw|(Ozv3&kDrWx0% z*3_l`&0yG&&ImpWA}GkM2)bYniBYH8elhf@O=0Jdbb97`_pUK}McLkgkVZsag7FJM zhK#gt&yvaSyV~S+1nlr>@g5AB0kG~_DHGW zGx4BkJLbG+dWivi1vt_ie`n!5sLn&c{HSA#1q~6qrJ`r~8wc!1=N-P;&$q~W2fn9Y zQ9P12(~)~s5*=p12xlW;9d*2H;mio3Pn)JhljivH9t9kAlQr}?m%#LN+O9E2(z6)d zZrlp7aHfL#>iNK=Ii?gb@vfH6nOtB*+`5FBJ9wXl0v~;1K57H2%A)dfvpe_XZI5PH zzmYN%W?RZmNGChayyMd=$-cxCE(Ld5h09`@xq$n>)|Bv7?X@qGx*yPBVyzXdyXw<% z#a{lfZyfTz!@=3U;q_@T+J9Sqy(B`rScCCt<38(BTVb(BB`jzPObV%@NG% znHl=cTSC9m?%oUmj%l1l@$Qaa3$vC`uFsa@HyghcH;@c^?Y*G!(zCo~5l?vd2Aj1f zFUeb8`u27!ev=q|B`oZ$Ta(MLUsBZ*MD;VPLf(Kx~^wlur2x3vX*X~H#f zepgx=-}3Oj0C`%=c&zSQ$|-ticVx#tOd1Pvupf*4t8=*a>(8O&=Bxda&xiIQti)44 zpC+3{brq*Vm+5i^$tt#Oe61i%IP5U7B#}~;@Q3~eHx4^*#vQ)vZas!RQEqzLr=|Vg zEz5=nDJ=TtqXJu~zotS%j_`%B!}GWXAtbty62wE!#Al>eF5g)5hcw$?Za6dPQsgiLR+;Cn$+Xf)HSF+S|)Jg$_u_%-8Bi% zDsXp$Mp;NTmCs|{Qn5!0YZ$> zS{11Ce_ay#bep5kv{-2+Ll4HqCoK{ntc22ygx&?y$lO;%!Q{B|I!2MdMawN~mGlzc ze(s~9h1}DV4nZkc$0iOL)lj-ze_+sToaZkB;=ZY|BHR^Kt6nY%zas{s!pEf7qgKKME{rKkDx z1M8$+(Sr4!5C3%D=g<6k8aHqwv+%a+y?2ROOZu;i>z{pX54$B`Ppr5<9vCTz6(sXP z&L@Oyxk}dSRJKg6ah(*(gF5x3C7dFYcTr?Q9$RtQskn&5p{Z-KKYILj-iNgGcep^A zcqE=(j27EAWg%<0vv)L1`YVp{U%)-jpuCYD^|y?{OfLuO(bRhwv-K$8g`>1=;&W=n zPJMSy^TFtk(oEn?u)AyfpryyoTF$Z1c*5KcuEW9wrzsiTk^#wiffpAH?tXkDhn`)M zKUEsb!punj(I#4#xcHu*01e%e?cL-4Zk>Z`G1!k}6st5Xu@7XjX#c8CFTbk^ZYa|kYm3M2X2D&}-v=M5HGDs?UZe*|~*o1uDwTfTTbSz)l z(>ZH|Anb6~cHPXS1czxIOBj+1l7P!Ob%utN+dY#%BC*-PLO7#;e;q6^>nCFS;-2d; zz?Vj>j)bNLVj;}2@h_JUjU8y6UL60E;rP^?jP%D7zh1C(-E~2YEQS86c6|!;kF>B* zu|P88bo{F!P60FBi4wIT`3N9>drwVfyke-peU(gxyNHj5oXFNE-R8Y7jY2}_asP0^ z4BXxdJZU`;Tr!!m@>2%(+P9wNlYirS>uv*Yv(szZr*TvmA2s++#qP*o9d7m$u1=hV zU5PlL0sK2v3p>W81yiy^(#IFW<^-mN4!T7M3@_hn+~Rvog`tYTlivG%IHocMiWVv!!EN63cJ@UZ6KB-U{9{p=3O~90l*Vq_j6I&j znxn@8{XB1PpDrckd|#>YTH|2F;MKC<9bP>`$6uq^G-xEmgatxmCadbqmi(Hj@^1__ z|5*$ZLY|ObvYeDx5buQ7*Z9RHhTI1c9=9;57fz0a=q6A;%t0C4e*CpC(XgWYm_A1i zPfq(z50S>V2n0{s9o#O(g(FSdf*gJ<7W{PwB=OxfM(1CKx3PF0x-J#${7;e-CxHh( z;*Vu)<&!35EebVX|9UZeS<;gV^Ln47p{np2)jBfY)5oKYhi?5M3VsBp54))gpvLk17vD)x{JVqQEtUfea0q0i@Q^!l@$^?*=3COw zmldQcTq!YyTIC;jPP5>{g1Ln%pEHh(faLQh>Y#G1KZk~_2(Y{(yqW+8!SBBU+hhIr z4hL;duAOM^xXmh#T!%ktrif8LfOd_#NJTeKF+o9I#0So;B8%AT6@%=v*#>r!DGw(>d&Pp z7x`FZt7j#2``D`cu!ZVkMa^Z` zlghYk=n*w$Png*!-Ua!ncz7QW1;X`yN@Bd4K=1;+E(C5%srR? zRNUi!Ore!s|3X$=g{p}q`_t8Cxdv06UX#-mH2ErgLmVmX=l(D<^DdE4R1wUu=1yX6 z|9Kz*e?s&-|7E`wlyM@U03GX7GHX$2@zT{1Yv5A>DSJNSbu|tr&uP1<1~@+kAdKi{ zp6C_@^wAM0`$e4LH~SN2AZqe;URUpY>E8R9EONZG<7F0vo4OBmIAJ~=QqZwXJWJ`W zOI;_M$v6v6miP0_q|8`Z0XtPp2tTrsAIk6wPV7*KTpo6(#-o@Q_*^<_+3Dl;ekuf=vl9LQq!>f zL--tF*{%pb9h~CEf0sZv(#hLuXBI>%>wF1dfDR8!lNtq6+JE2pFXpc3>gWt!sH^CS zcM8rgJah5Q*^R0<3eq}vEs~$}Oo!L8Ftc%Mu;2x&?Ap&gfPM!cYS*qmO1bit%8`4f zUKoR8kkXUpO*PeS)sekLNuX_4T6n!ByV!D_cEDCk3wJ6?in!?aO*`|`^F#NLhE(^5 z+|UP%$VMdfu9|s3C(vF+Jt3U!<>?j1uYD0L!tqFb+>p{Td9!1D4!Qr2l38hJ*Nn4W zeKzp5j83($xel9-zngGWv~bj?T^-CdKK4X%Ecg)4M(0K64(KPJ`96&>ezy zs&iI6IJ1*y2vcEJW7+y3wM21pXyS1mHm5yr1;yT2F09}>suPjf@c2{y)%fqTS!3!D zj#9!dDVVCZ{UykoeVf2?UWI}b2Q&yBD=IOft=~yHYfo=it_<(qkxuS z=x=SDQj{Z7(s8`P?^})ZiBz=gaosM*XjrG1p3=VD4z%H>$0U`+8SK{y{Y!o;f$vN+ z;L%Ro)VCR-+^5H~5U5O=9=@X>p(b^Ud_WVABju$^1^uj^VzyM$+I-sg8jcp{Be}nc zQW0J`^am0KXn9yrQAtm>XqW9}JG&A`sTK2?taIkH# zp@uzrlB(;hqLCK%?sIs<^^^CrfLpy59CR~Z`O|$+)W`AGKB}=CzvGa#)HeQxNw?;} zxlTYPCoT(XFX?CH_=o##?X)|dJm2np-y%-t=d>Sj#aeT=a{eS`Wpl%X+-Td%TPoKG5- zd`b(G3yq@Vw;9$m6}TxBDTj=(=fY9h?*|O-9fYi!#|#d!EtlKip9+9NYBUR$&NDhW zL91`TZkL`w$BQ9}EY#nybl|&;I9mSwJAuV;W3)oZyv6odX601eD|1k+4(tE}^b7mw z>O~Pu$whgGDyAz*qnh*&hwlMXPP9=nayod9@ogDS)9d-+(_}6SqiVy)|Npd^N?E{XG{A}%Y5E0@Ggpt?C3KZO6BuS zHQ1CtH<1Ti-F-MugI6bxhi|5RdQ@?@OM4ItvWn64oK6G*=vDE%vG=JnQng>MV^1Mo z-o0wK*47)l~EbqetF+b`o-V0pE{XWhTV#Zr^|>zYg0S#7;E*Ya;ZD^ z@Vv(NsPQxUPZu9S*c6?#khjl_Cn0ARESt0P7DXsL#9gz3A+r)8*53e)m+QA;KID>2 zh>pij+oP2&)tkRs*E02iAJTw|`xe4nmdPDOXb@056x!x*b%`9yLSj)}dUV2hlGh}! zk{#T4r>te5q;5nt(*HO(Dtg$Gf6_is$bO$?eE;2HwBcg-9PyHl?i6^OprT@*v3VIz z-(o>4BDIo&0|y{Q#C_??)(PK&`;gjd-a0+Zwl<^=0%0$rruU+oI4MJEMsUOKtQ~#)i4pk#Po94Qfl1`uDT9psEa~h-~9S*qsejj4AAB_ z9$u+6S!9>3+jjk$sl!OD-4FOSXx8GfA4N+=&B-X|Cu|{t(eAuLujZU^xs+e<^k2{h zWO~|+CtSw=3!X>xgkeV{lR^95pDbMU@#`I*cDJf%$zgApa2Ifn@mqKXi`P1Qk9@%F z7&q}(@k%RH`~IGE=2VUHS*S^bZ1p+r)AELAt~~subLkPTZgp_h+8NhJ_UG~8t$fMy z0r1*47%3a9C{>NpaQ=Qf9H3vT`L~j_e2MUQ)EDMQ9t`-=(_n_O=+Gkc*#Fsa{dP?@ zX=Wka$(=#0{_Q|41Tu-o}4hPz5hEgy61LfNft zz=bW0UE0YTky)R+-@kQ}A0z@E8#KLTsk#w4YvAw1VMRcG?5()wx0`93o!u=Lh(Q%@ zkDNa&Sv(>Ib=q@xr!^lh>S1HpXW|~GUAqPh*h>j6< zUsw7S@!`j2uLq_@ zr#)vuAhjYLEvIOSOI;?r7IGm3nRFJPUS8W(N%7t_TU&;-pJkHXJ=s1zm@a^3H>bsB zU-#E|9Q>Awx+&~@j*4o$eQ$|DtQ4*>#eZE~v(Pe6I_?V;*@I@Bi@X%4iCR z!3#>gw>1D8)w}dX&myLA2>vvYNv>9Wi#iS?& zUk%Daay~RQlX1w?q+rZ9IXVpG2Uj=^<6J$C4T!l=h3nkKARF# zn5jn9SNQTOb2}8-lo7!^$lH_zDW9QRs74z~JN}8ci*DnG`n@;>dz?WKf)Ovf)j%bs zaR!yN5_{DDemwtbE@%&?R!Iw)(^b@6eQe`8H z(mzp@RP`6l3Eba(hC6n$5y8|$fFm#Y{%!gN9?UgfJY^{M6#u8+r^`vV;)yOBZXaZ2 zzVR)(b);Q%7Q@T(3DHB5XH6YGs=cb;VSPs2Fmcc;PA`|opCg=LK;oG7+>P7j(7wOm z-FxK*dXYy06X#MRC<$mk=)M!%DJ!WjHy`8!tUPdRoZDS}V zC@F!t3ok?6o+}-~bP+sPTkVOt&<;L(4fdV2`W6|?0{t*hGcY-}P=MiyK8 zS8-_`g?JIXR_-i1@A^UreEj4D{i*1Oj;UkBqYM+9xLiPksG~~fR>ajI8Hc(mDPy8p z9znhy)9NSm>kH61qdf4sT=@`sK#9jlM3rHc@;v?oN!S`iWVS*+J7u?%Ly=Bc*>@LjyQO~hl? zT()c-e}$O6Ka=OBYB!Yp(fUJ4zIZ3L9QF_URXfE2S<} zOI^Ua8osoCxpTfc&Hrlo5C1<_KBNiD>j+gE(?<38%Z+CaR+a;O!d&9|5B3LU3Id|K z=6rtN$NASfTR4kgM?o*;adTQl*4zu`g@>qxmPk6TcYk^ycgUt)USrtNYOTvvWGabt z{uFWXo>SP?8X0#+b=a*(1(wCoW_&XN-UfWIBnT(iy1eEB_gT%CM1yoi2t#lg1NTIw zu*i3wK_#FL?*)fg>WKdZufaKe$mHr>>ffkZ2|vp}8`oMq3ser?-5qbpPH$w(rE-FG zP3j)2RKgE`0VhS_M;sI|PnDc8#}5g425!DHS25bx%rL7iJi}uuu8E`Vg@-lrgy~*< zt;gfrvS82>oE>_&w0$vjc1V+Gc#t+fbtDvA{NAL(;2BGpdXL{QrJ{wRHMni{`EN=U zz%tHJrx-REz{=Psfp7s$I_h_U2rJX0_jkithc2VqhcQV@cyM~Q zb}d>-vKSrD_r+&1&$S6^n#Vo!uMqIfbJixZ!%7G%KD1bots(mZ7gHb&Gs6nOTQ{*| zAvOQ0Ur>;Qg!5Vc~4NBPe(Zx*CUDa?DvN@c8|CTtL9M%#hU3mwe^( zi%=J|t(WcAp?O~d=zA$T1xk<+2~H{IW6H2Cbc&6cRWZ})GDV>lt57&=ksn>~)>i6~ z(Hk;o8ra5V_#F#ALt2Xv{fMfEdo9$13?Qdlkj@-pHRC9vs(WcHgi=FgPQQ19Fl|Ne zDAO5&P4NqcJgzy`~TVXxqW-eHJ;L%Qv~3fgZd1Ll&W$>r;gtd8yVAHk_zzC3b{*w&Lb zcOd9@bstlL!GBG33ivlyEle!YeQMRt@1%CU|B%-#*Ss_uTuE1E+lbc7@MSeUD z_2%kuH8nFG{tOHJiC4qUMMgM1(fH!Ed;TK>JHwI6D}DBlwM#Tj3~@{m6Vd|6L}HoMt7hHW!2#x#``gj3o4)92(x_r#1`5LDc3Msc>A z-C-??GSs9~mqAErGcwa*JZ}f2WAErr-=!U#vRAoMd7cFr$DUATM!k)Vzc-X&xOkr6 zi%@(^Bca*qJzTzgLo8=O3^KAC>Osz3@W;MJe`S`@UkEIE`o^`28gq~1f4#oZ6>O`A zUQ%k7)^-l)?{mW0L0K+vPWtn#)G*!!MvH>GY_I{}XI4xps25VqvtEnUKd67DFE4aG zIgIm$d&*ZV*$iWlk&<526oav9&s04po2qNN13h?Y^O|0+&lMQ@vL<=pIec10UvogYP@RB{zCbF?E( zeM1RNfrKk{Rqtv|AcI@yX~um_uJc*~&V3hnoE0P^FzKj3O>DE{s^?&)5PbuzGphdoTHGx0SiWUo)f1EHu)G{A16Y`)m6k0gd1!2L4@x$L_nYtC~49}vP90!|&9$C6W z5oZzT7YD}F)BY1-8sbtaf1ka%2Yl~yf2^VMYp>9wD~gH{qdJema$D>M-sChwFr%TU z%x{cC0WmGS)Rs5DIZ^esrd-;S-yskG81S4oz4(|$*R@ycaij@Iz$}+Np)G1)tZ)$S z_R5mSbFJ?;hy-%#K*8p)B9ukhH<88sWX(vxrU4-|)&35D>7NIU;A>#uL1oL%Vi5Jh z4~P|5$d^#VhxR=fF7U?5h#{kCaC06gd99C`Q2msh&Hv>&1da2qG&b=36X#LfJ=Z_-51_hkLJh?8sloen9-j%&_^o;|&RLYxG!d zOG|Qj1yu0`UuL`pg&LMzC@Ma(UN0Fxr@Q!_YFW!{J&6L%s%rDOCJb4m1Tm)^g=6@e z`PpcTEWl>ES1&s(Jm3WDvB=)r+cgR}l9!hcW5fJ`H1 zPp8a|{f7{it{Ec^`b>4tRppa>!tQ#_2u*QmcOsbMg)0cQ+@P-Pv-KQSiA9hVW|ys0 zFoo=$!HQs=eckUUFvEo1c;Rji*ni3P!|Zq&l!Yu>%&iNN>(s5$WJ<+ur86xy)p#H- zY$^-RH^Q{50+iVN2X_u@$|Ig)F{1;LHO|6n+CftIP){z|p|I!APCxw{gc_$z^KhZ4 zjoLo@**F)-pwbb24lEB6Z=FB+8LMhua&tWFaVyJP=|h@ZG)WXN-41!Xsn}JJ)QO_H zZA7};KA|QJ{}*MkVpW0vB@pey8TG?5IBG|<6E&KGyID_dA_c1bPzd(j$`mP={q8cK zD)fMo@Qn7sS2)WThM%9S)u}i=5uQ!JIN)zOvb$MYF4Csk9%wZ(neKjdn!7+?Sa*CU z1G}T}Bi2t3A*iCMBW@19vL&g9ig zF|~9GM^+DUy99EXq-ObUx7c>1-&PaQp=Q{QqjVD ziEkn0j3hMCDiD^!;QEXphp&dOXn2rS+5;*Hg}fAk-slRDTVukgEWXUhxB^B zCwoD!A}R2y*UYkkXQoE+wJ5SD{aB=oTEini_cZPHs@%}CA7Y*?n4}9)o?-5Kj_?9v zUCeD`z}qP&_5!|STfG92Ym@j38L7`bG0eT7ciz6 z=^t7Y+E4ULCi&jZoMJ?=YEtM!Srq!$L=D)`OC!Uy-jM8s9Ywl|U-t&+Ev6$&>_90GF|LVB5AKz+{|>6@ zF=eRzO4l3VcW&y<0)>0N8!Cl`4nEKTx|dV>@`5ShQf;FIGQGF^A~^63V@fw`W+=5c z3Z3uK&5@2+L;aI}EFCu-D@OlchkN<;X@pumfmV4V``!gQDtskkTDnl7&+5G4eHNx= zkHdFO>O~V8YA**qdV}sw6IJbfLChNEgF+G1{0IH_2@3BH^VXYq(dLI&=tZplHC*`A zi5N1x?Qhdsxd4R@fVc3SQ-{@I3M?hG5!lHAog9UVIxqNMW&0ZN8Os|3cZTqZ zO~?oezCBUVgS)(R>zsA@!O<*@4R}P%3NMpI`KNs zPEl%NoF3oD{|4}s!|w&*4k*FQrq!n$D9=lFUJ0ol<+m)Wj$b2>m{hq6cjG!SqM$~3 z|Nhzt3(}27t}OD3%0M;i26Y`54m#@q<#~~}!7;Z_N@o;(A%K-;;ZT{-(7I3hp`7_LUOMp|LLmHzpMjJC(3>#j9 zq>}C$%anGu6q8q*p^xRHW~%!>=l)VMZQ>!h|4xy`bd7);wRU{{!5=)1>7y=subcMA zE{;c%(SaD#WYvDQHo#-D=yo-;R7bSWTzi)fG{CM!Nj^f{QNkzPn& zf^3Z{+2}B%-0>Qm8hdSD^Rl0*Oc$1EwKw_rLM9sDm+HKr)<%!FqR#9-g?fF^?l+c# z4xbMCbmusPJqtC-?C&{e`MhYB&?REFbh;&`Sj?idRi8+C#F&2FHq(#*PxZS3c9BmonP{7)SUV5yv0t3 z2_H+;*wqwB)l!IUd^?RBYGZ~kFX=GO19`##^pcV14sS5y*Zg`jkVCRYVoxEP_EXXO zs+Hpn;X8l7wJk3P-Wc(a1%KSBY5im=Xko`U@6}9Htr@JA#!%?(%a|P8dw$+jULno& zQtd%$X#0^`JICImUYT8?tzNK|)RUb9Jkeu9g}HL<+lJT3-sLb?iIL zeEmz(2j~3;UC6vd~(~U)VpGdOz2tfD9$_ z(Wdu-HD>z~W<4xpnUtGs2lTYlq#JL*#lybpa2dx1@iV}RhVW1wB}I>aDTBnn1I?NG zh6csU;!j6w&&$jjhw^u7dO$W0!cb0U3$=^SlrN56t`eNL7OqIk+tBe&z0E5PB#}j( zuOZ33V}48^pLTjLP@{shukV6$Y{;UKI*^m3_b1@dKkdM8JNt!?c}@?8wIPO7CNTG= z7yll7y_dBh6w%PWH2{D3K2s>s+_}?Y3b+T)Fd$q%cgJ6W_Md_6xV@mbE?}~T7%imE zC}e&zNu(sSq~QeW85`rITubY({++%ucA%)LlzDnEoV?0WxHJFf+gVP-jhY5yeVVhU zv9Z$T+1@dhe2GC%PIqA7IL=(=44VX|ri@q1lHD1{1++=Y(VF$7I_D+9r!Esw!sJR| z_S<`=@%q6beg|T2cb2oR%%(5n*3$2ZfXin9?GK;apXQkq>lw)3vdR{#g&B^N_@ntc z=6PW~O4te3+Q$xir?xWQ|CY6X(FTQ8<^Y z{);m2M*H4-;@;h}C08lX=ahV7n%w%tlS}BWvR9W12?IiWwY5qwe&U{NJvTpTb_?n~ z8++!g106Q{su+>)Yq{pqNYF`2(;hmdtDiOQ=lv|m*Acc>YTEjV1|Pz_vF?6Ncd!_q z2>XEPk+B$TkEd1EjY4fz}>^Kg14L9vB1Q*HaOknP9GGu z=zVlZ>@ALJv>AS8`;tbD_Dbb@6CU6Vg-tz`n|b;#>(s>Owh~@aVC5-JSTVgaxV)qj zXLit>%>p)sPPTMTZg@4gwooDq%Ji|+AYR6K3XdUIr=m@YLxtzs z%-ZNNU&v9SX>3{b>~^o>>tU^-(Q+E_B0v@hr^jo)(X(PA+3)%b5+CEfej$yNv)mlG zW8V*&c)=m}C45hmUN3at@4ch$c0gLRIB}tjo=Q*}NsXgd)G@}H3LzrzActy!)~WTr zyElbQI>r0WF>Om%T$bmAhjOo$j_m9YdY^G)0agCTOsDhfR zT>n82pOTqBSB>zhf<>_C1ufPvk^F0;Wz`9!YZtzJz%b`rUgRBD|sSm;bh3)!h zCF)!~wmcdNCC3f4joP^{sh#=4#56)?tg@kw?&v<_fhAZl%-3b(68Uq>o#SjI-{ah& z(12czye~Hy@i>|yBb-T%iiJT3_~rxMTQ^9(RADq2nkq5i4pBP+NK7hPrTkUD7gh2Qa5F*?T)=c3 z!!~NS`~B8NsP9U-2)UGTEXCt&jxgX2 zy(s_t^8IQgiNvB$HPpFeQ8V@C(nCM9mn>>DK4nMt6uHZTfpB_?Q~dpifXiym-<12( z{kM&}zyc?lO2PHx+{LMOZX{`X(+H>~gk>DJWayNCbeUMdWJ5t{e0qq)nDu>^<| z+;tFU7H06-Z^C@8_36@?zK2xYjUybw&-AWHH$<)TxXT&_(~gONOSh6Tt)Gxnbq8g; z-nRe5-L`k>0~`-NMLkZmzVM@-=X(#i0x-l*BC>+(pwo9Q$fANpP54Xd*PmU_f3&H| z=uZviZeGvO;TYHXefci;(pi1X!(?1Dy&6MEcAs1p+gL3>9V`T;&t>6m5oe2Ce@cB( z4S00d{}G2WP0{`ulOnMj`d#wa@U_Q>aNp0P8xKt#pnGTV?s_k*)5OPed9M|p7L8_1 zH-jHOL7bKI3=D9KS34?`z|TqtswGk26T$ZKL~uTWI;XTh-&RJHg8SLN&yG&Z#$dYG z#|1erC(-mva&m!yJLM-C_(Nww$d4Q=F)8BrALj<$&{lCX1{`pOCFIfrdoa%riGkgJ zN9w=S0LLU9x@UhPQt|}DIHlsK-y0lhwkWeHNE8w#PlB6y!mrqpxn^&_wL!F_+l(_e2z z9vG*{?g-^EAJrx)KFoQ``R|TF!~W=T9jD?r4St|#x)6osJiAQYbnc6iTKcF8#63#M z+mQLsK6l2duatv2BxnSAzm>hVlscH<{2bSP@~)b(>#TI}MTpxC8B|IshA0zS<()cz z_~!C+Id^u_EXi__gwt);X^u~G$KusKFXRd)jq?hOLYFSgH#U^ zi5i&=Lk8Gqi!^cj-|Z30_iUJk(vkMUUD?HyjjPY!NRNErm>9vo2FK5S-g$5Ce+DZ{ z`Sz-CaJGzOyK9~FVfV4!TZ^fZU*t(YL%hZ0tN3!nbaVZ+ZBd#X4 zvIktKLt4#XmgWCUjHcJUJf?>?5ZvW|ZgDF1|5&>2Kq|lgf1Z1!y+$Nu zq^ztcBq3#w`=AgRNk(QNDkCc-T**ioQD*ka-ut@ucl&&Qe?RBE&+EL`^E~H0jw3WV zM3I_}j3V_x9To@x70*A5pj@||(&?yMoa zD~$7tKGQ`W7Q5}`@cac@&k35;vqt@V^%&jEI@vPk`3UzQevIGYXzzW2x7k7eg1tJS zH5Rt)etLgwSdqqb_KMG|P5JuYiJoT*Z}@Y4*!;Tb@GB6$42}fb0$YZk%C$TRsyu$> zLi&Yg+wYZ>@Ec`3Jv}1pM){b}HwYFzy1rg!N7Px%2_ZhZ?_9=A4z;w#v)DATm#U~MFWK$LzP+~(H$Y?hdKa?S%X){jf6uI2U^^v0RcxR z;{hGQ;_>TQ+hia~!RUUvY=F#RaP`mt{Ey@`rL+0K1~+f|v^^cRM9=8w#G&coCF>Tn zB{UQzb3B`4n;QPKS*-`TVuIAay3Hi~C!-LESR;OsP0}Jd9(<}Ej-*NDZwCZ7C~sr_*x@;C(8T*lam_``KM^)$1@s%W;y(rE&Sx|>M5Yo=T6u004HXi69yhgXi!2l^_ z1IOBNc|vMcdOQ_H8XivxzB5nqanJHE3{}45dXRJK#$(SE=2^&E3Ra>Cb^G)-W>&$0 zhvviSBzZUEj~a3x6pAXv*#Z68O)+;RTF{EV-bVXVV0tje4kzbz52<4Q?ELmd&!V62 z=V#f9u=|lpu6f5n63$tGn^S05G$1e?L4{Ol5N=IZY1#uyYIH2sWM;Wbb^cj;S zR2v*LIQQOX4Yffw!>Yx9WLx5Fw^yrA6XJdf%m+!+A>%`ElBp#X{gg4*uY9=WQK9k6 zL}QUpG#?BA0Zvt(`#InJGd$)eARXSc^M^a#4qOmT{iPbo!t%y9;ikNI;L^!QiIQ&_w z{ONd)>^68p)?inn+)DcdJ9Lr83uE-Dw&SBH>RXMF6iTH4>WhW(^W0pxS|RM6SZDlu zL?Vj{_2&QcSFc!tc=7mIQ~;O3zT-~@7h1o?-MhkXs|n}yY255 z*Is&+pgmnRRBE74=8W=pEj%8BMfyLP>20ux1}aw#4)wZPZ#AtQJhiep<>hYJ7DxX67pHM}ru$`B; z9XW;g6=j?yus*~5^h9o+cFNc<(4*zC&yl5V$>+~YOM%@tjGXx_F714y42v*m56!Kj zwA)+e!hAhP`Xa?JgrD*}4SnDyMPxnx2!c|Yx?BC;Wic5ybGxct4)2^T*G3OWQ{y7H zw}(DL61+OEQXX7F=0Di*-f2_-B@7ZGm^aT;R7uO*k?-h%K1W}Lk=2soJA zkL4#?jjZNP{4F2(0$8)dUKBUhys2E+CCjCV&paQj@4+OTaB}tpbBFRX=?N{|?L^kD z)%OuavN4{9jjsC@OhhO5n!&=`HB>{lw%S$U>#MhKE52X(&Y{^ynJIZ|_2oCoN1adW z7%@9x&++x&!8M8xoL=OK3TqEZFDYeJ|6E$+AsIXI$-|lRO{x}1lLIN_ki|LZa%jb$ zz1<)@QM zIVc>n)2Z}p`s3x#Pw>!Y`v-ou=^ZS z_7`+d{?M7xrDB1nn7=FxTT`kqpAZTru8`+S;baj`{Wb{FnLi3%?t2nRHs{v1W!*+hFFCU*%pVXB-o}_` zvMbjg`O@QlhpZLFI5Wf9+;*`tGv3L>VYQw&x+xO0MA7bK${5Jh)%u`J`7m ztbF6s(%SElPfh#2`|0V~Tvv@PZ^i`deVYcyUtF7sH&7g9zDvcOn`JuB5;GIZQ0V+^RW0eh0F2_sJRXL9AwcYHemOQ)ik) zLqai2f{Zz+wLl7(5_YOM`q*1by+nl>Jqtf3tl1SoACoel)ocoXwGE zVq7T;W7KbB^|x3@Od~$f(BHSoL2jaQWv*tUfG!x&O1x2p^_lj3f7v|;H-Z&QlQh<( z$y`r;79Rvedc*lzXexW=%|rThzxi~9>0-{;LWs#wHiCrn=kI=y z;636hXSg#`X2`iWLOtlcn&!mc85Xr)Ap_z|9{IhdKf4Rg8nwV?j5h~fFu}cgf}5tU zPN+#L%#HliT}>%q(ff31P#`i(u`?)pWkh_I^6f9(vpOrpzzY((DGkxhMO$LMr_38P ztLbtJJR8(sk5N6mBLyVxo)wYBQw&Hpq7W^P!(V-r$;Nl(!nw#RGN;bm@)Ph*pvLJu zqQZ$OInUK55AN-(xUOOYpAKn=WLyzbd@{5b;~?66AThb{1|&8*8cGjP8J`#r9X@kgp+X z@_D05HC66Sjzn>=%4Yc*!FaFe-NdZr9{Dx5OM~b-;$p9{@agAiWLicX+Ph4+!t#8*x*O%KCd!MtNTcA5VTQDAm{pV;ndYm~Esjq_AafkmGwu?ft_Ty`Y zFIjVc3t#l4h9Ak|xH$b!MV4K;jU~%Z5|5Yh8@p2@l_W+xh+1uGL~W$+CFIkrdIJf7 z#i7_}fs#)WuS|0O)w=SS-S4%8b>mrgy=RWLY}8%<+!>yP@Umd)72jK)CNN59DxW z*Z=n)#t*WM2G8bQt;K{)=qSaDSU&8McW+13@s%zkom-0b0_Yd(flMfYq_ck!yinnW z;(3(|WPm30pwl=ei6^#r{KDUrgmK@KXO$yjRnDsoQane`~I1{DC^M<3ZsHbd>AV(;G_#41~q!$ z>JvBUFk+;0$oJpK4m>nvD>54!9L1)L5EqP~7C>XpbQpAR&jUFN31tRi+$fDA*~Kp}tbBFaIpnkc0DqP62x&XxJ;`hAaRoX+I6VK-V=^NqXbdg~fOWyjm)B8(+|O186o=C~UVmFr5rx(6 zQlzYn=ZXf&y*rfNLyrX<@3-dCJrGfI2){Ruu-yM6^!hx+NgixPUMP|LN0s_A{W$B; zY<@Rn;s$4fG$xn>(``2VXUF6ebDX2N+DKDo=cVt=xU_2n11{ECvtOJH76^IoevLM* zSE@#y#aFuBBlptVpH#)paEJ<~nLh|CXYh*Fu;qYn>_Ibnmp-%~A`)JhB2WeKm2djuHTj_h65u=%UIcDBg-Muu@n z;O>QC6?bsJ&?DQ{a9qBBG7xDLLBTY4f`Eyy2J}G?(BLF!#VRC|$ezC4D|4=};(wnL z0MS+vf3B0cc5bN|v2JBM)}b|-21&5{H#wTMV$jth^t&S6)>OTb(Do$dgiQwG!wu9y zlw4}183Ge%4V>XKJjSP<07f#0y&h?+sxgiS!%ED#@@2UX$*!pW;WnN0jFMU;e*0-O zM(j{g`DQ*tEm(tXK%lHRF>DU+0lnAMfGn7BC37!-w<*{p~#IQ!-?-Yot0!PyeH*UJc=&l`z?Ag>1wyOp4_|Mr`zARIED!?o(Y?u zv~1*jtD5J^rQd+M%Prg*W_t@s2Tiw9Ni5m`4+sowim=P8r%@0yqdpgqd zS?)UZJGs6;qNq1P$TMGT>QSzV&R{xwB|6x&47+6JU^G<(W+0g z{Q@meJiN0c(sifLgKS{A4eX%FfaI);3R|g$HxaN!MHMw8zH;!-zCBJ$xGGc$J9p%= zhGrnD`ClAtK108CB#L2)q|UvM3c19 zd?%_Y`I9-=S7)No{I9DXryUVHlD&^B$I{YK&cwRoi8{seHc(XBjXpWmdnu&e9#9}z z?Ko<=xb7TQ1qtw0$!a)RMD=qcw3;L6z)XU(z&HU6{q^)$Lp5?QzaIi z!X%$_+8>~y`F>;-`mqGa+EXS6b+OhE_lJ7??&+7eP9pw-%jNaNpM6xaXa< zo|$sX+-U&^d!9^7>7$1P1vZ8coz0x*fi5KBo|c$_wXh{VGV_XD4|w0h>rIwej}SO5 zjZ3-v0N!^PAHjOk;21Fo1}F8)I2tw1XxWlA-X)P=T`m1_!_N<6ulhT%5<|%| zqN0H=g{1#s|B(F|?9A@O@HQ8@i^?||Ur==k6$)VNO~zSqx^gFOZKq9+Z;-p9WC z()NAg(M@(l4&`gN=A_7BDpuI?k@kA160z8kAR#u!c%o>8quT2f3Z=WF2XxnkN)R8& zpUQmr5<_Byj>EH>)X0`WOVaxp_Yz#>L7)5};~W@j(gFu6j2e~iPWrorcm-q1CAAN? z2Gg5l4+p1OxK4*7uX%3!=BN%xW7Ny(*$>`bZmBJ0@cM2?)>|7QSt5}m4%ksRaa*yC zQ++-H&wscc8k`-$2EwCQ;cqAh_m>v|H@ZCZGoEc*fYSHp?)vsvIC4dEc2(oSk66eC zipQxhmv%v=u(F#?z%ml_AU`ZYHvJKt`H@!~%wu1jE_`-USxRbF;p0L3tzbw*n9BFi zSZaPkV-P(>zhX8_s%a-J;Wai#jeGgwG)i19(rWTyuc#`H)zYc%j|#Z>x!3s5HYg4R zC*Igk6>Ei>U~&`v{0S@tthRtAG7ha%B2W|gdV7Me4*NLF_Crr-BO!hJhzZ0y=wQ5m z;I3y1M*_vF_O=YewLb174_hnavW~06Os*Qi;;^QHyqyPE;B!7qrlxo zRZK#YXLPsqT9lmuHx;-Jv?H~SqiT2a)_Z<5#g<~f#6M@ja7K>!&)X#JP@9Y^FETFg zL7yZ@v1n=5Zc@ol>1V?WLknihnx4Ev$-s*PUOm247}41(!(_rwi^!G2sQ-9%f^ zZ|(2<7;p4&hCXmZbXWq{Y{0k;ePG%~TsD1hmwsdD+qmI~zG^8Y;6Ljro~sIN+~>$i zM>Bx5^S@}|Eeys+41<}`Uv4M9exHeLi+#X?S(5xAhGK>hnqZk?h(ZxRiO5|+KGdgn zXsH|j{>^9U#ja3Nc+U+Q4?WAnIOcF)cFsi+j>d_x|%XPu${#xRJmeg zuu{Uy%daKCdvY}{V9U34J@yq@7QEH zK&9YR1-E3lyqxSkRA{wI(9O#Y$@_5mdg@eRPY}P&HBcL8R%Ndhs_sJ#KMAj*o~M(* zFHeM|HnAMzq$jpt-nf_x1f%oKV0$vgf|YJzm`vZ@v>KZYE^BarC({*fS;tG;B$J{a zQPFqw3Ya{~6{8M+8p_3LANlJ=Dq7SIy1{$@_}mS^xDO#VeHioq_6frQ`tAi!-&$N* z5_M@)n{y=3fg!+>!uxbb6Q`Ll@=gp&%Eg+C&B zVa}j7VOWhjtiVkE+ZG~pPWjc~cZDMLDW7ZhUlgSein8?-H{?Z%cv1e? zG^Jj2mRmz(^hLuP?yz11O%vOIK&q&$?Q;&7$EWhf-;;R#S|ay#5v+Y7K4#!(wr^d%N#XS|`Mw-%1sAP>MLEdb~qX#edwWR`bIP=@sV>@=MSv{R=^xibn}lXF<%7 zxGVVh1ahvj_2bcs7(%JQ;^lIG(E_peeqpBT&%D%($SXP!eIEm|Zvu%e`kU(e6tZ}S zivm`W3zgQcZ?&J$VVH+696fq9`7}d&Sch>Cy0cq&UTzS3xO%?hT9QhN>}thTTc892 z5nJQW;~{}dM=miUuE3X@qPJ5v31({nhyk)cL3(p+yVxe|0;|vu%bbGYQTG>68hI{b z+Wuz%TfDk;V)mAv4`hU`Pn}tNbOy#fgzQTqf}{lQoyawmg^Ap@x!inF0%=0t8>g{D zbK8m-45B}7vfs4q!s*iS-~6crV|<|XW{m20qZ;$(J)hI>fm+J-(3&_u_&KMRU{F&Qqv?+JSWDOJu- zAsAb-^$y#u1-qfIEE{w5V9ADr<@Yy)D_lkwBXTWw3i>TR#?Cx5BczsZG5Rsgp_NhV5{ zNc)Ph7RowcB_--#uQ~E`{|(vfXthmu6rV|#`9o%VFMEuDqDhT%(O4@df<<8a7ZcvSEb!Q`~J2`P&y%l$|^J{1Y?^$U7 zw)VOWge~m$uuqP9m=`BPxN@P@TK92MR+p^9CsaOfyPgy6jGy9NJF4p>!mu;P0b9K#j+(O+?T4L`}EM?|^3VNBB(;#)bS_21$-e z8$^8G3^;2?#ZCGGT{@eq0E>BVTx0jN{o7Q3b;bba%ExO(H^7M_>#fMRTs~pcH`3FA zBvI`I>g1sMh53oGNfWWO5F$s1i{u=hPkc%o40Bz;bS|32++25I`rlApy`0^{vSQ*7 znnq%D7V6eORt^r+1&sm8)(IV2JlQi8iJta%P4y?!qv538GfjSC*IumK^7s< z8t+9(P0I`1V|i9I@^?9N|H&(xJuG>Tx0Bd!^+)k{>mk-63*0NeK&}H>QL>jnG8A9p z$-{*lbh$7R=_T+D%|9`VXaVB$9byIbOcqR&Sj0efOK3>B_o|Ggtc(~KLR|Z&uurag zeZLuiks>}gQM})9a4hGCaMtXAzMII4g$ckZein`h#+-c{NH-aJ^o+GOzfm%hsCOtZ zihWH8x=&2=Lxg_Uri_GU*Wu*O$TV<~4f9VDy297J+BZEVPijW7(Jf{9wdpPJF!gjpy3mR?DKLR>+_?2)~Mia20Z9O(pK^okJ)S5L$q6VnJYJ56t~0v(<7&|X+& zL0QYz=2fr2lfh0KVlXQDKM)GS2@5&931q7HntrSup=A$i{A6cJee&8>`D*NGuu%@t z4!~)xFT&m+aKZgD^8c9q@_;;{+*eMW`0exXNlhPdJe8QG4X-=&cie34%ORK7DJAwb zSOT0U@FIkr`nOeCI{_V+m~+8<7L>%eoe8-);(!sRn3Dat{PR8Va)K6f1L+u(Lv3Cn zCdUqnm`S=fH7)&ce#=FRpU}+G?|5XqLD=6n#p%E-A5@;6(L1T5ckrMq3Yf44tc|1v z{^^xJ(|J=Hv;^GK9S6qC+KSwd9E^?S+WINf@C$g6C^`Q&m^^i z2sQ>iXaT|*U+m9(;z)boCM2UvoH-;)FhCxsk(>fIj|SgQHCj_9-$3~bojeyK@mc$; zX4Ral6DE{Uekd17%8iLQLbB!g92)7#;|^*|iNgW*T)0-gL^E4v^zXBJ z)e7bieEJ{T`5U#=Vg_#)E(pBGs^j-1i09NqVZXQ0kJ>{WAKiQe>QkVv>4cNp;3o^l zbvJO=ox1 zKLPktdck=(rytPM>Dz4rc5s%D?-bhAq5cOoYj8^b;a`UtLWzjdmIs`ohNe!Y3 zekS0+4|SYSa1Ff`(<}o^pgNpf+`Zl1ea(&S74D!paVmtrvqu7qI|(efuVfgKSGw36 zj|-b7Tymp4lS4H9L1Lo55x`m7NhVPij*6&ge+o^PiS#YZX%}=m+JM2P>raHIFoD z9O)n6U78{cHreL{s^xiMVZ@{muDUe-$Jalk$}$3DgA)9AQ0*`E@$FLL=OXM~gynzV z6XQ1Fx{D`&JBs*$y!_!pYm>XSKfyjgvj2kL$L8s1k;h86B_10-eG4)Lu3z&vLxnUjYhG!~;hw!197UuiPhQXJ$@=jzuO+pAn(_Kz|=E z#~0C6Dog6H=6D`lK#?rg4DNp@{5&fyt>adoh7yd|d>C~UUrDHzU9{)IP#%b4cNNdK z&EJlrg~PT|W3gtYWlTpKE|d6l?L&qPFQi~JI4JK`ghj6S!R~DxAn+E@q5I3c&RXnhjTF#&=2vPS=_9aQaR*=~i**)E+>+Hykge|k1y|I!< zg;>HXCFU%JS+ru_osl0u1dr8Ts<(-#qg2ACb5o4OIU`?OX{ds9&ENGZzx&R&I}!KK zS4^sc3rBJJqw#UCH<&M#6hCplL>+Sf>} z%XEU9H@_+})XB|1YRT&lkVnM1F$`cklL;k|Zk7(?uf{^Fhda!`1MnsjQM-id;uEI> z@%Tr0(^RTX1*L)FG{h;{DOGIpJ|`jBKl*vIBYFVG+nT=E)Z3KDbr&$X6jOCv@lk5s z>0t&+@M#uo%B=Bl)0++B%v`*cWA{`a?;y6Jww7xa;hkP}QOSf;hzr-z$e@f79C3xo3`?KDp$ zh1MN7Pa+$PqsbZ3p}XXluc}>luHL0socI~947<*}y}x(5CE>fXE&@jf|1{p(kHyku zJgA^p`f^=%^&9q4Nmty>2jf5dO)o>JjcIDy; z`Ysp%*UZ7CW#a=b-pjy}0_MW?hbB;kI(zh`qHh!VvU*QOz+;_cqGfgqzn;reWn#a= z_i4F6`2`=|`z6oXoYF)>t|MDMH#V9P(DNB*y{<{`snWG!?*h~LjV`=h+r+7MHDE`! z@fpYPLvfeGa;HanYkeiyV~eIJcykW@?bWT8ukV!K07dlh`3SmNPGZFLoX997}CcQySq<}e?(krz~!X3BLf?ur*~xl zEVKNl=yV71cz2EtGU)}dd z;-Hd}!seO|)0dmE&efMHx!FWQX04GQ$a@ikLdc7;zx}alMlWY4Hs>;5h@n1YVM&%| zNS_SSF8#RBD6+9yGo-aMMrj?C9*=G^-a&`jw2x)F zgb8hir|`BWYE_O7;M0+P)e+~Bx4Z)v-#}Amj_Zy2e#g(D=S}mm?cA_3%w8LR3vAub zd@4*d(w*klVl0?Kq@q1kzxYU-?GOB1KB8yTIl22D=oKcADuFixZy&ufU9EaC!aD$7 zcikgTygWs&N`9=x;q6+RuC_;qu=*ksWwi#D8rVvOkc_I}^<1~sx$BxoK2%dzt>tRC zf0zE9@WR)SGv3oBXWTEFxjEvJh*zdORY?{0BSwTm<$Zt0BsCkUkRzXHq%{5Mc@)ji zCe4fKrJEDTypfg|B57GVwpRDsmmA}ab$0ai=7kdV3eZt5^yLq`-ao%fhmiz*VNG=& zp=*DC2mK|lE<1(wxmJIbz?0fUGPegca`CY<23b0)-aL#y2&-Ah;Y_8vJ{u%#H?(@| zK#)kd=yRu<-u89qsTgeCA(~13-PoBp(nKBQGjy|phkkZiDTa(crZMbte1XEor3wQ; z(1yW)xN?rT@%!6SUm@LJ{Iy|vSpc0MSW z!FO)9YmvcDtf{ASeV|G2q?6yPyY^T9QY|fCPipEQygg#5J~k$q(s|j}MfUm!MM}AB zU14ui9cL+hK^F%=S%c7D96lP%W`)uV=XiS6ie;i7V${;{_A3}1d=5m{XziI3tYl0142 z{Mr&365E^P*eY;7k_tE5;lN1-v?M|JH^SD^i0F=BYnNgYam=(N`9!+XI_tv+@(lsl zn^8c6_O$lhvr&<{Y|DP63{%Q0M7+*7La4Fm@xAld3jB+eoG;kgts3$T?4(;fkB+Eo z%dUL8F~B1nlrj;x-ETV~SmNR!iXJClsXt zd#8)xF$aZ))hxvpVb;yM>!dJ$);{~Ugy%^OxdUD9=vUcXzF4;V5qx4m?>zkaYftxT zNU++CDA%9(D)C>&bxmpgvfrBwr*b}!I~=x*kI9QNUAW0hytIElB`*JVLD#S3w{Y$k zLCQ2?NJv7mao`}yGftqko`13~$j>P?v&~iw+Zf*TV9gH0o7LI)V$pMC7YMG|F06ij zTX|Kvk#9#oc#wIHeaGog?NH5_s1E#rda%rJQ(tXo0H|Fj&#P~EauU3|;CwlC)`KO|4P;nq_7 z*80{Uwsfj_uxS#)4QK3}_bu}c{W?t`MS@)R8#z*uMBi+`jJav6S>vO{74&EnG0{KG zA9#J#J6oV1ckxj+5ECQr0f(R1E$91%rsD+R7W>on*E>N|X-+&LYYxp)yDEob0Nv(R zfz`%H+$RJt9ykmWIq#V-3x)oud10wBX7KXh%1O>A^sh_jh?B(0W%~^ zADN1pVh4m7#?~~MXQU<+lXA*{%0kA*aMc(>qc)w%Sb#L%tZlpD4B8Y&WiMVEDDi5l#W3&gT0qy&Lr< z8(O~sT5{-PHv!hnGnaZXPmjefBr;?K|HyvqaCB!srD>X|WHM?`$q#JGI+Au)9{eJp za!bM32}94^_k@`a;=SXAfwn8uTUrwp39ZHl2E<}pbP6{2V-uq~sP%B#?yE1(5r?OK znjdVon^)}mieT#~55+<%CR)(L&7Nb2Jv%!IPgPT}4*x&n-eTU%WfpjkLIW=~d*EdM zU~X)>`#$rA(1d|NY*TE`8vfOU4FMV~yPZ z2<`pcifmL1?igI`A8((wI4D0te_CW1`HyM(wg&cmd!@kHrD`9v8BI51^W@CadfqHo z?|o^rUY=E9dmQk*fhxzh@w##7!Vk}3i-Y<-wor?cW*dSOKlo$oM7H=onRGFjCfUw( zEqieSsVwEj@SpAiZ0p_c=y%IJ6a@pnzYPe9NeMs zJ$z4+wcqs+*`GxLWE+lHRUv`b1w9ky^ZONbJ3bA;zcg)KSq)3F)>EU>FGK{Ow=fKQ zv*T1bv;F;=KchnUnyQcJP9WQVU^0K}UOtk#X#?et5O?a(Z}|Hw>#kRKCVcdLzZ^IH z@-ZIoj(+jbVy$6Z%TAwR*P)EW$&^N;36Gq!OVnmw zXLjHFxQKzS+hVG>dq!1qm*r5Ky8QDm0zZiFpAYV+`6+%}b>M^7I0>`+4}p|O$j2yX zW6kZxczuEP-ucGQ^>(L~e^=W)dT6xEP_g;tlHXMdUpOit*JA03#vf#3^|s6*cgP5d z%Jo}K5op%>i5Ln{c*!v5cD*0mb0cVrUsP&PpXTm_;!JqA`&G_~izP7RSdNuJyoX57&>^JpZmVa8*aqe#v_kY&7VAzNKxoNi8 z)KFsn)#kYS+}K;f_)Xr9SAV)x4JdrQ#5Zs8|25DU${-nAzJMM6pM{Y!l@-)N_lXxi zR~2nUXiiat#5L%A?jCa>K%{wNs`(LWxaGgEvWK1r;Rfd-LWfpKN{Zi)v+aP~*z?Pz zcubG4(S4NJv52(i;fD=HeQrQ#&m{@E@am76VPr2IX+9#W!eI&FYr5C?`N)EK+k2L6Wf#R#ldrl8emI_qQ`}o! z#|G6kXl(t;a z?2Gb(UtEu~uUc#TxHMw?++ifx!vkJ zNyAOngaJ|Bdss}UMaW8VDrYCf!*inNWJvV;MW_yBiNSp|zp~*&dS39=pyBcOnVRSN zRfO!5=5JO-nlTA|`hVl&Gjt_OiQ)O5(O;{wllNswBi~|rB<@|?iZ&+lc6$CPP(Hu< zqiplyBT~-oV%>g^QS`?hCPw=f2$Lz-EA1Aw_Bf=8@M){(w)Cj}4Y^ctbP3@t>1Mnu z9aNfz+p!tw1mE|2wdPH8A<5g%;%icEiki+=RPI75z*U61m!~r}V8V;ug1E9*KYw|3 zRlATTJm@>ci>M*Lnd$9@h}r1BF`DoCM0i2fH;ku$pvvD@I|6?uY)0NIXKQg3d%Ck7 zx7hkE-2YRR701vFVKNqaS=`Jb_y-2(EOHFJ&UW5a``8I|h^6W-{q0KT_HVm zrVhlFhYaD(BFFpu119W|JGPG(11(tS!55_|e6sksHg9r<6IF=uejo`+8n=z?ghl+m zrtGRa|B6MS6x$7cp`qU`6Fq(@jVpYEXwvU&(oz1JaySx}eM?q*YTiw;%Ww3K6ZJ&b zB#YXKNPwRJP84I~1x)7oZ4d=V?Il{g3lTNY8PwBupE~kr271uB@`X%s-!0S+h!ary z8&2dX5%@05IR$cm(A%7Pz=I}Vo1&c9I96*RMEU;K!{q=Q#8(6bxNR=v+e^sHRP9zf z`g!FvB3v1yg8MiK!@0>S8~HfBESsLa`TMbf%Pjw8bO+{99Vth9lr) zgPA}=9U}VQ-k*LU+qmhy;b9%Y0M`;Sj`E0&V3JzUNCi+j>8$*av07AWB(i1GxecwO zseeJZ3E=n`3Cl+@aui{;A|jeivG=f+p}%qxAjc>YD;!y-=PZ;*zfb`S>;rAVPoC|C>D^cs9FhsO^!7G4cLjs7#Z&K*Krvg#H!m?B}~n3hl5A&TkS{JI}_$J z24*ZB_^Fu1dBH;_9~A}xyWk*;YG@hj)*w@kODNKNDEPj~+mb z6ujUTljGjX4gAp-gJC(@%_XxG9`Fu7_?=iZAh7B;yPuH|orwPoMbpuP3d(YXOWx+~ z3GcUB(blaCO*QyD!boWH#D}aUmaJ4V3Sjl7*0;yPIY*ka-Q3wH@g7#Gb9o~^L zxMjKPhBN$|8e|cD#{I;foB9<;`X@g_Wj9$M3Sg>R(+(Frv8_4Sr$5+l&cAcCE<-f7 zKFT`@u1!U$fN0^bXCCS}eeZ2Du|Y&w4-wBa;3;-o_E}J*xsQe-WK~K>A_)5QfH5t-=Jix3F}?+lOVTSpJP1lYjJe zS&R&4zg3?12=m>A75;|SUp!o_M2G!X1}4$C^R*^4h6{#y(( zy3pXJzq^O#KBfuH=3}q0TE(89MK9-A{`lHiH z`y>*>V_3Ij9=<8RN1AWgu#QKe?fYB9f7xRJFP{L<-f_=&tmD5?jD_h`dndTFK|wbf zPQrj?&z~#rK`)wHfXjRV8&8T#iF4C~*B8Z8b49j&uX#2#4%O3WzEl7)kF|wX?*SWP zz;TY(KR5+=x~#PF(fvIJI>gnAOd!FYMTg5Pr||oAh%O_3Bbk{*-zA>&@;9gs(39(= zx0O15$0ke*Km2)eQT{a=T>MAr;Xg_ZpONBb-kN~3;l#h%lQQuF8(=1qV{(Y)#BY%# zGOvyE=O=Z|8|dKS(f4QflNfqmzeZx%KsObPe}<X^ z?fmg(s^HRE0U#U{#KtqZ*-ryb1AnBKGU5X&e@R{IR{qFj}@QbP?2s~281)l7(9r|9|-O$}5< zam&yoVzQIuOWAI3oG@42?D9k8R=4GaB>Xz%>Z{kLp9MIt8@xh8TO2TPCCkdQAM@{e zwn4Y&DoUpkABmOgRAMCGGfG`6W>^V=!X9BxYvUc(vhKRLw^L2sS6|TC&|bK&nNv4& zR12XdWuTtT(thgkQ;4*4tM4^ljS-g;1oDG@K>|vJ-~|7 z*xFqyO|iMohqqAj-?G35qAfsdu#+x^dhx)DESCj$%R;|;w$39JEvDnAvUKGZvBwMH zMMsIdaq8pX}|+WMpKXH;|kQ#L|zut(1a%Gac2Yp_SrdT+?11X-ZbEsJ4;3;u7J(Q@(2^M!#DF1$_OT?uwXalau9D%S;0t>=Z_IE@qUQ;2|e7~n5xQhoTX zk}n!MtcKx-F1<@gF>5%|=?3k)-Gcl^g)LLyzg^q^VD&nVPN{V_29=w+l}lp;C5%n6 zA!ER3;@eP@uJkR?kP6k4pQ zkeKX=C?)$Gq6noTlx2!gWGQR5q3ml^mMoJLvXgzg)9>E<=ly){=YH<_%xC^M%X6Oh zdEe(b&pGe=e80d8?q0Yiv9KN1bg_L%@6nt{jKffDGt)IgGvqy*#J7tA;Np$gG0z+2qpXH+pjC#4MpZ99dFSyRHIZqWdJzXkN_N>9EZmfe>Duf*FvNe z2tb2hGxZ|9;BQq==SU?q1z2$Kcq{i|BltqiLBBafJ0qJedco*&^{CVEJT9Gl4T3h~ z$B?Qw*r>S}a%v{@bkU=hesDoetQ$n2z<(f{ z26coD)X9S=R-q(y1cr*g+YzDhIbbNapNdmfYinz(LRo$1^J~9>cGISf?brdH_MHQSNbw;Z+A(BJANAxguHuj~HJJRrMfPEqqOGo} z1s-J16xE_j^KXTE!rmxa9R#S6Vxx4YM}cmo91e~BTwsmwEPn|BI$t^rCHOH0CuG^U z*MAy;`Gz4diA}G!KokW$NH`8}_eTNVh3yQ}qwH{Tk|+VtR0k=_cw^Z7HP{a2qI}q( z(WEovgGtf=3<&&Cqm+xr@XW@J)p~t6xLNg%E8CnzTU&$&#nHgM?#YtBal&ah9!2KE z(~<(3Vw4F9KdY|7dGFONFI#^>B zKA?36dc0^SrB%B>>o# z)(%rKEg9EwkDUz!1}HU5$S%#@ercXFCvYiK7eJud2wo3;IW@B0MV{?P;sLRkF2ICU zD`)ls8mAA=(ILPoF<3h8;rNvy#YGZ^{D%MtC2Z8Wy2L%t0e89M-*3MP2k=Wa3NMv^ zVArKuR}}t(fWV!2@Q6F~%7Dml9Sx2aB-TJSkk#6~oXj^!2uN_j{Nz#g-oIx9X*WE{ zOnhGVlJ35)EHjG67nDpFUP! zV;!2EU+1=8*L-%p=T~vn)XzB5+hY|y3t>J{37lB~f2c_sU`{Gyfq_*V0{*|+MPz>x z7yqTmTY|t{4a9m@M9wRPr{CkEM^h3xl(&CO#K$>a3?r)vtZ&?Ay|A-!T-4Sp>`RQ_ zfg>7e!zAg?jHVdS56POA-g@_{LfeKT{)>NYmR4yhvCHGRLmk75S_#Qkr#2^{Cgnfb z4BDrn;$yHpvWWZ1_48pf-nS>dyBnl2kwLK|^v;=a(=*8t>Eh?)lIGpCPFO>SW?YF9 zjXNegB>t1fn)Z`kb4H4cj~?-}5Y|55MwO&AkDt9{F=E)n^sSE-tg5s? zWb2e2AxbcF^W5YOO-;30-z-opUyf}pU);HD{&}c%7e!-k4|GedCTp!%`Ko=k;vDI4^DDnuNqw3Cg}xh422YmOfO z(f{V8tq$E+hZv67zz>N}mA!-#;;nS?>Sle$2zo+Bzejc$XvKPbXnS8x>~oXB=j5aV zPFg|IAUB?LzsafhtmCMB+>kk#>3H<4c4L5WtB7~vYHCO7cy>Jy;I=43`826Z2RZ!- z95U&LmOiw$ok;3872LrZdAmI~9Xf^ur&*l~l)1ZZChR}EHCvGEA%8=hyMMCGX6}vg5Q=PlA)L0 zrPlt50<*U4pd2iC|B;xSYLKH~#Gg}d1@q$dx~_NDy$VulQdX2Y+P#aQ<~6sur|N?^ zIg~`N7e_hk-8K6PdtGl~H2mtG$m}pKA(W@gx_A*Bu@{U_RD5bfe9d(fWBtY z6FVxV826(!7d~cF7#sR(nV$y7tz7UeSx%5vZj3!M|9O{T_oM8%re`;ep9NZaZN=x~ z#Afsx3C^Wl05>U>9}QldvmAJYpw4|NSlX>Zix|OP`+xA#ilVx8{wGuT4!&`6CgM`$tJb+5?5<@pvZEw8%^0!zFA@ z>gpxRy!29{1d4@0I7(WSIoSduI%4=_U1M^?-~Gahr}1Njm~$`Mbkj2WSv|dNwHNEO zhf}+L-4CIULyZcr^_fLvn9z{A2i~Eb1RO_yF*4_LiDF~ z@qTKIKOG;KzxBKB$!cxJXddn>S-*RU0iIpw;D#SnbHYdqkJe3|9}kz~Y(D!giYOy` zC89G>CYjLXSk{v=1*7HYR`p}tWa;zCeTc{fFBr8n>E}OsV*h&X*fH{3ojVn6NPcLV;F*kpy=k=Dj!;LEQraUg zRDdyVjFL0(7a3iK@-5iY#&-^tr`f^bQ_J#%G6rl{TqiIQ$*`gGy~hXAZtc@GzDQIQ z2QiO^B~Qa4M)KfOe~Xm`lRI}0>&{Djwal`zr(MKJ8lQCdIeeOQoqZi<6A`IrU<*9k zD&9Ip(7|rtD5L*yVDpptl&_EIRS~@zoTq#&4dW1XQ>!lyH`A(Nxi7jB}6A;W%|S}U*-7=EHf7j;)09NQoItC+JAo&D(k z6-MFHAP;R~j`$%)L4?FRL)-+{E^i>&tZLqnOlT~i&S~efzD4{<_awxDX{n?)eGTVs zGr@yx7lm-~Kg5@TW%n_fo2GK!ao=!*mzp13^@RF-US5O|d2<&}^21^!0`X~sHzGGD zA(e_Anq55@V>?YPY=o}yf!_!7>ZNgG9trOoIzJO5O}L3H7;S$vLm4n8R4#Zxh5Ell zt^oPbtG+&TzVQMe7xt3CvqqO`7ytBSnFboCilYLcJS3YIg1M!q#vMXuGI8y(D)v=YIC-i9SBP|F)aJkk) z=6B^q8<_s%BYDCfg-gl_rj%Xe&8}Ki~l;tFr7h0+S8I(cnJAmt^bva&7s)`}ynnu)xKM%w?^K|94_;{BxZU)Rs{xAYs@kQ;Q zBt3p2I^elcq?-uA3nJHsj|D&5-?|9jB6r5#zI!Okxai_L+Un~VSu&%=*63qCf;||l zHtU~hXh@riyA!C!>VbmEt^sT5;fK3(kIUdilH8=oICxV-P5uX$d7aM-}Z6LP|WuhU$z zr5V48qZ3JH(u_;b?q;ik?H+_CNID^bY~=xFUu`A!mNaqStY4`h$ZYNvSAxijJ5##T zmos(DhFDsyk^ZCDTuEtUq^1ZXHF$2}{-EYuImnv)&~+#uzCrEB*zkiXd7{IOc224a zj(=@4kRT3TJO&=n_Pbw-v8KHZEJfmG-?7AP=+hlL_$^CU1I~#f8l4~z%tQEPa;EJa z)?_@8O6wWuoPh1EzF5QSEEo~zDVm=|raAT^j>#t(dtONP@lizNOH@lJjU`=S_;yRq z$}FeccdSm6*BP78%}q8^ls;sGz6q7irkwVkl!18<44{>;K*Gj#X(RCW(T$5B2Lv1r z*GxGlJ0LMcQigvw_Hc!Png6ooBzj15G5~ zGXxat)6-khbh}Hn_&YNFJ>_2ufBfdz9r}!LF&4RwCNip;J+PeXtUiaI``LW>1;|kd zpbdlBQg-H7Cy!jpGyr~Y(0O;-x$nAIog>ie#>20M&$NoWR7I}+brN36F{Jr1Z3OQO z=^I0y=h=ETt-H|*E!%hU?7JV_77D=g(qxOPNmMEk1_kdS(wMCYp?HrS~d=_Y6NFU~}6 zy?O;+t?)hrUw{~5e*eba8=cVh>iehBN(da|pT2!mBdGE(;z%jxzBBS!zop}R+ z-;+_9`mUFPZrs=mK=4u2t^hMp?32wsaaSqYsMvSAhAx%>YGk*lTodg5yOjtNl`AN! zdN%I}B8`SY^i@Q4e9S^bTYHy2BfN2yHcVMOcsq3AEq7c@vS&~q2A0f2SX)A;ey#BK z(`-Wi#t^%lA?PGm5unthj=*tzxO}z0U#({=eTwjcK{oaQdJsyw-7ZP2Jx9>QcXmAc z=^bt4oTttvL-SjFqZq{!zOMic^?6k7dU$z#>N<``OVZ{Nej|2{JvcFL>4YNhi9%=f zyBZ!uD}`W-!7BkP^yKP!U0NKzyIbt&74<u`)L7XavT6rE zEIpEW^LOub(b+})Uv`H`2b|WJ_5jckwnE>3~Q(F0E20W>8bBC{>2*^G}O*S{N zu}>|;0ShNP_>bQkKvud?EYDQ7eTHLrW%%*is+$*}^zimK5-M;=Y&6Hg+tDdCslRNN z54FC|CD89)Ls7b)jMgHu1x4^PGbo4a26rbDaNwW7Y07JcZG?Af$@}@W?Zc&6k2d(h zrRz!e;KHo#d+|=Y&Ug7vTbzLSvpk+~tWBq0!K>ai{Du~Q5vdqZ_xeza#(X0Et}co!%WN9(;jh?1{c8;Q*q3qSFN0%OKUa;>9N)!`% z;_%dXKOlf>wW4ujhMgnOGPLAyDdH+omGtQ%a^z7@sDV;76BmUhrfI+p^>9?9pFS zu69oCYA?$9}Z9Nf!K! z8qSB!bXLPx?F@v`ZkcEgIdF<_-umeqvTO*tJ?R=yQW)~ z5>L2fSHeXsV9*_58en7doEvaYeZ{!s{7SbwZ-7GyAek+OUP-ZPFDsrhQ{wPQPIs$S zGPQvkeJ-yf!zvJPqYNu`V`Ntc2O~pGMCPV)Z5HdQs(zaIkmRlS{^XiMfM%x1 z#D$5d544~!N}eqq5p?)v+>9@0ATTf8du@<2Q)NoCxgi6E`?r~et|cOble&N=_9R`( zpuFI!=cY=DgK%!@W#qA4wPTTS-xGH4W;pAcdS;-`D}3aFIWh$5JK;~TvfuUh6Twm=8xp~`Y=vg5eJ zZ!%aw_-(nYvKe})t02LB8sX282E-I zolh}DCR-{MaL!f0yW+51B~XfurwkWjRri4D+3Gqk=z4|SklrCsecNZ?wl>pnrUb}c zEF357t4I*7HoEwRZs%braQ$&`SCbLca~z_NkSh&XlU(@_H%ITF*dn$apjN%m{sm14 zLoHo#MkOp?y-!fVL+>y)!Bt_CfsXcOhmO&4pupjS7=&+dKNPbt@$tEASl_zdabV`C z%Uilnrb@A-^ziNTFi>zb!<>fOr$be7%u!!DfXTS-M;b69p+h($94G&QTI^B>)-St?!5oqTD$L}wrMnlu9RWogs?w1ZQ z5){t1sc-=|p+dTa<()bVek|Pl8GndLG-47%xm)>g&z*syt@)#j)zqB&O_3YE!0I#h zJ$hF`;()Ypcc`@96iD)nQQ3*}-~F`cZaWB$R4RMTr?%FCUE83IQr-QBg2VY}=RDu% zKNZNVtlh{9h4xi9XJ+~tFNkKr_8(V+&I#|!+ZSyjq2n&t3FB!BXQ^U#^DGKDZc9P)*{YI&LG6+88*LrPI z`}gC<8F|2UZiHL>kD7w2pi5f?{9uSgkS9`3MH&w2p;QIauRLG)@zsCklK0mAV}f(K z`?p%8Tx()1^#R>J8qsTxCZ1VlB-pjajk4M)ZQE&IorOzHk&JyQ-77oqIf@`jaq~X#u@hMr* zSM}U)%SQ-xaOd7@ezoNy9GvkAFbRLV9kR^W`=eE+q`JX>DYNI+Ot9-Ak+u^2iQ(&z z#qrD7GwgmZ0nutbB0(YkS;R?MlRTA27*9jW@sm0GBZV=i3VwpNF-GYf+Vo*>LYKKT z$mSE`*~+X0Acs|i8%4eyj3yh)03^+w)`c$aVsDC+rM;VNWAq!jdo^l7Me}fbdeK)u z*Oy+SQemQ=N!9q$TMJf}mO&q|gsJa5%q60OQzumHDDV}z8yRH+@QvvaN2qkvgp=V= z^||dFPZF`ke?{-}M?MXVG@`e!1HJ@NZK(_=*jHZDowu=*$6A(ZG*7Y`F+6G2EHSfO zKJ{ep#yHmc<=Za<_pdRo%jlFr4m6~`H{(0&-VvVXIQw2)^a;I=Wi7&@o=K_Rm+qdKlr^umufjWo-<{!(vWOKa&cq?_ z>7Sw?QR0lB^4(I0pc}52>b@0QT?s#r4SMrN0|SS0ik7M58KRHoJm~|g{w<+UW(|)QZ%6EnU^8~n zHEo30bUz2^^~@cLaFWuJc*p@II!rm%kV0;TAoiweck^J#sJrkwA1CL3Cd)+0zV{Utos+2V=JmLFi zKIWH3m5y5lmxNjrt>{o@JF!U38mND@kG-v#mz6GKjpHz@ScoYk#xnfYA5B7iJzM#E zGBsU*&&*q{K{@7cOL2CNf{;WtY-kt4M7f6a73mccYOh!^Ap3o*33*|ktT!5wzqe&> z>GZCLYSkUlYj#$h3+3A6W!RFh^40HR?RQ_9A^Z`_2h=pFk~t&ED=6s?d#@0CW%Fk< zKl9tr#SkWdAXY%Xx$80GW-?u`b4Shh{r(I^TF&bXcM^eu{xcDcTg+b(?E$fJFUwCN{2RVa{yqMQ0#N|ZG zT1`!PJ2pt#)wW8SZ(Z8i@pe|doZhZSx&G>Npv;D@Uug*HPM!NmQo&OGaKc2d%7^ZA zgJ*KTP2@(0=A=JWljdml#88WHzzeziK^h+;^nMo6AuldZ$_5>eo|r{L_lPIKY0vxR zg3tKB+ll6VS$9UruMWg*M8H%z4o}bF%9>LUHP73PZiZcP)S^3i#p$|m zh)&j7U5AFEke-~#NO+zFO35Oy*f#WG+^feQyg&F-?tlM-1kXjG@`m!KeG{IP&3O-l z{A5SOrpVtpR^K9*A+C!H z{v4tH6yYN^Jvzl(zn{})IURyHC>lP{ zCnWwbVl9aXKKe6?aKOT#O_+=WAICCv=0G1GWdRY&2#Y2+HYkusgejf`U}%8W*k&MC z&|}o74*_p+IkvX}l@JR=5Y)QR0?<;6j8;V1G7lQTijYza4Ve!aX^Lk9yf?prUTavG z1*Q>HBftR@I4n!~jv+eI(GjTyAz$VVgI(oxj`&RR|mc!4D@FpR{rKuK(E4yXf`o1^v^66_%9M z+K-x}UB2=w<3CwpH)uK+TmfZOuYmdosTYq9gh?RJ8-y`ux4?c_V&<&TP~yQUrIZ(&aRT;WV(BG(R+}7kW@3 zc3{d(7Te{H3|px2IW+&y)(-k|K zMV>w7R6!><8{%OeSSPn@qi@2@cQ?EGwe-LUo6F;&RVy zz4ulw9sUbQk{~X)bKx?V#emLVxuG{=`>Ol%o%O148dQqnBU) zBolb+PGm0sNk}_<8ZNJ%GjEd(8!z}+jHwsi*V?DqM&*E+3on$AL?GLw1S36OTbz|| z{iryj*fRcScNXjWi)G2^7Ymg=027Uvz6)zpxDY8>qm?wuO`xp z2ZwUo(bH-5b6=F%fD+TE;$x(~d22-1