From 1c2ce5480445d5351a82dc82bf423e81191a9cc8 Mon Sep 17 00:00:00 2001 From: bunny <1319900154@qq.com> Date: Fri, 9 Aug 2024 09:26:32 +0800 Subject: [PATCH] =?UTF-8?q?:sparkles:=20feat(=E6=96=B0=E5=A2=9E):=20EfCore?= =?UTF-8?q?=E7=9A=84CURD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Bunny.Common/EFCore/EFCoreContext.cs | 2 +- .../20240809011221_InitialCreate.Designer.cs | 173 ++++++++++++++++++ .../20240809011221_InitialCreate.cs | 117 ++++++++++++ .../Migrations/EfCoreContextModelSnapshot.cs | 170 +++++++++++++++++ Bunny.Dao/Models/Base/BaseModel.cs | 4 - Bunny.Dao/Models/System/Blog.cs | 1 - Bunny.Service/IService/IBlogService.cs | 18 ++ Bunny.Service/IService/Service/BlogService.cs | 30 +++ Bunny.Test.Until/EfCoreTest/EfCoreTest.cs | 2 +- Bunny.WebApi/Controllers/BlogController.cs | 37 ++++ Bunny.WebApi/Database/bunny.db | Bin 0 -> 49152 bytes Bunny.WebApi/Database/bunny.db-shm | Bin 0 -> 32768 bytes Bunny.WebApi/Database/bunny.db-wal | Bin 0 -> 65952 bytes 13 files changed, 547 insertions(+), 7 deletions(-) create mode 100644 Bunny.Common/Migrations/20240809011221_InitialCreate.Designer.cs create mode 100644 Bunny.Common/Migrations/20240809011221_InitialCreate.cs create mode 100644 Bunny.Common/Migrations/EfCoreContextModelSnapshot.cs create mode 100644 Bunny.WebApi/Database/bunny.db create mode 100644 Bunny.WebApi/Database/bunny.db-shm create mode 100644 Bunny.WebApi/Database/bunny.db-wal diff --git a/Bunny.Common/EFCore/EFCoreContext.cs b/Bunny.Common/EFCore/EFCoreContext.cs index 1a7c9b0..6072fda 100644 --- a/Bunny.Common/EFCore/EFCoreContext.cs +++ b/Bunny.Common/EFCore/EFCoreContext.cs @@ -7,7 +7,7 @@ public class EfCoreContext : DbContext { public EfCoreContext() { - DbPath = @"D:\Project\web\Bunny-Cli\template\CSharp\CSharp-Single-EFCore\Bunny.WebApi\Database\bunny.db"; + DbPath = @"D:\MyFolder\Bunny\Bunny-cli\Template\CSharp\CSharp-Single-EFCore\Bunny.WebApi\Database\bunny.db"; // var dataBaseConnection = AppSettings.GetAppConfig("DataBase:DataBaseConnection"); // DbPath = dataBaseConnection; } diff --git a/Bunny.Common/Migrations/20240809011221_InitialCreate.Designer.cs b/Bunny.Common/Migrations/20240809011221_InitialCreate.Designer.cs new file mode 100644 index 0000000..2b268e8 --- /dev/null +++ b/Bunny.Common/Migrations/20240809011221_InitialCreate.Designer.cs @@ -0,0 +1,173 @@ +// +using System; +using Bunny.Common.EFCore; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace Bunny.Common.Migrations +{ + [DbContext(typeof(EfCoreContext))] + [Migration("20240809011221_InitialCreate")] + partial class InitialCreate + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder.HasAnnotation("ProductVersion", "8.0.7"); + + modelBuilder.Entity("Bunny.Dao.Models.System.Blog", b => + { + b.Property("Id") + .HasColumnType("TEXT"); + + b.Property("CreateTime") + .HasColumnType("TEXT"); + + b.Property("CreateUserId") + .HasColumnType("INTEGER"); + + b.Property("UpdateTime") + .HasColumnType("TEXT"); + + b.Property("UpdateUserId") + .HasColumnType("INTEGER"); + + b.Property("Url") + .IsRequired() + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.ToTable("Blogs"); + }); + + modelBuilder.Entity("Bunny.Dao.Models.System.Post", b => + { + b.Property("Id") + .HasColumnType("TEXT"); + + b.Property("BlogId") + .HasColumnType("INTEGER"); + + b.Property("BlogId1") + .HasColumnType("TEXT"); + + b.Property("Content") + .HasColumnType("TEXT"); + + b.Property("CreateTime") + .HasColumnType("TEXT"); + + b.Property("CreateUserId") + .HasColumnType("INTEGER"); + + b.Property("PostId") + .HasColumnType("INTEGER"); + + b.Property("Title") + .HasColumnType("TEXT"); + + b.Property("UpdateTime") + .HasColumnType("TEXT"); + + b.Property("UpdateUserId") + .HasColumnType("INTEGER"); + + b.HasKey("Id"); + + b.HasIndex("BlogId1"); + + b.ToTable("Posts"); + }); + + modelBuilder.Entity("Bunny.Dao.Models.System.Product", b => + { + b.Property("Id") + .HasColumnType("TEXT"); + + b.Property("CreateTime") + .HasColumnType("TEXT"); + + b.Property("CreateUserId") + .HasColumnType("INTEGER"); + + b.Property("CustomerId") + .HasColumnType("TEXT"); + + b.Property("CustomerName") + .HasColumnType("TEXT"); + + b.Property("PackageType") + .HasColumnType("TEXT"); + + b.Property("UpdateTime") + .HasColumnType("TEXT"); + + b.Property("UpdateUserId") + .HasColumnType("INTEGER"); + + b.HasKey("Id"); + + b.ToTable("Products"); + }); + + modelBuilder.Entity("Bunny.Dao.Models.System.User", b => + { + b.Property("Id") + .HasColumnType("TEXT"); + + b.Property("CompanyCode") + .HasColumnType("TEXT"); + + b.Property("CreateTime") + .HasColumnType("TEXT"); + + b.Property("CreateUserId") + .HasColumnType("INTEGER"); + + b.Property("DeptCode") + .HasColumnType("TEXT"); + + b.Property("Email") + .HasColumnType("TEXT"); + + b.Property("Password") + .HasColumnType("TEXT"); + + b.Property("Phone") + .HasColumnType("TEXT"); + + b.Property("QrCode") + .HasColumnType("TEXT"); + + b.Property("UpdateTime") + .HasColumnType("TEXT"); + + b.Property("UpdateUserId") + .HasColumnType("INTEGER"); + + b.Property("UserName") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.ToTable("Users"); + }); + + modelBuilder.Entity("Bunny.Dao.Models.System.Post", b => + { + b.HasOne("Bunny.Dao.Models.System.Blog", "Blog") + .WithMany() + .HasForeignKey("BlogId1"); + + b.Navigation("Blog"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/Bunny.Common/Migrations/20240809011221_InitialCreate.cs b/Bunny.Common/Migrations/20240809011221_InitialCreate.cs new file mode 100644 index 0000000..04f8424 --- /dev/null +++ b/Bunny.Common/Migrations/20240809011221_InitialCreate.cs @@ -0,0 +1,117 @@ +using System; +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Bunny.Common.Migrations +{ + /// + public partial class InitialCreate : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.CreateTable( + name: "Blogs", + columns: table => new + { + Id = table.Column(type: "TEXT", nullable: false), + Url = table.Column(type: "TEXT", nullable: false), + CreateTime = table.Column(type: "TEXT", nullable: false), + UpdateTime = table.Column(type: "TEXT", nullable: false), + CreateUserId = table.Column(type: "INTEGER", nullable: false), + UpdateUserId = table.Column(type: "INTEGER", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_Blogs", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "Products", + columns: table => new + { + Id = table.Column(type: "TEXT", nullable: false), + CustomerId = table.Column(type: "TEXT", nullable: true), + CustomerName = table.Column(type: "TEXT", nullable: true), + PackageType = table.Column(type: "TEXT", nullable: true), + CreateTime = table.Column(type: "TEXT", nullable: false), + UpdateTime = table.Column(type: "TEXT", nullable: false), + CreateUserId = table.Column(type: "INTEGER", nullable: false), + UpdateUserId = table.Column(type: "INTEGER", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_Products", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "Users", + columns: table => new + { + Id = table.Column(type: "TEXT", nullable: false), + UserName = table.Column(type: "TEXT", nullable: true), + Password = table.Column(type: "TEXT", nullable: true), + Email = table.Column(type: "TEXT", nullable: true), + Phone = table.Column(type: "TEXT", nullable: true), + QrCode = table.Column(type: "TEXT", nullable: true), + CompanyCode = table.Column(type: "TEXT", nullable: true), + DeptCode = table.Column(type: "TEXT", nullable: true), + CreateTime = table.Column(type: "TEXT", nullable: false), + UpdateTime = table.Column(type: "TEXT", nullable: false), + CreateUserId = table.Column(type: "INTEGER", nullable: false), + UpdateUserId = table.Column(type: "INTEGER", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_Users", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "Posts", + columns: table => new + { + Id = table.Column(type: "TEXT", nullable: false), + PostId = table.Column(type: "INTEGER", nullable: false), + Title = table.Column(type: "TEXT", nullable: true), + Content = table.Column(type: "TEXT", nullable: true), + BlogId = table.Column(type: "INTEGER", nullable: false), + BlogId1 = table.Column(type: "TEXT", nullable: true), + CreateTime = table.Column(type: "TEXT", nullable: false), + UpdateTime = table.Column(type: "TEXT", nullable: false), + CreateUserId = table.Column(type: "INTEGER", nullable: false), + UpdateUserId = table.Column(type: "INTEGER", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_Posts", x => x.Id); + table.ForeignKey( + name: "FK_Posts_Blogs_BlogId1", + column: x => x.BlogId1, + principalTable: "Blogs", + principalColumn: "Id"); + }); + + migrationBuilder.CreateIndex( + name: "IX_Posts_BlogId1", + table: "Posts", + column: "BlogId1"); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "Posts"); + + migrationBuilder.DropTable( + name: "Products"); + + migrationBuilder.DropTable( + name: "Users"); + + migrationBuilder.DropTable( + name: "Blogs"); + } + } +} diff --git a/Bunny.Common/Migrations/EfCoreContextModelSnapshot.cs b/Bunny.Common/Migrations/EfCoreContextModelSnapshot.cs new file mode 100644 index 0000000..20a9ea3 --- /dev/null +++ b/Bunny.Common/Migrations/EfCoreContextModelSnapshot.cs @@ -0,0 +1,170 @@ +// +using System; +using Bunny.Common.EFCore; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace Bunny.Common.Migrations +{ + [DbContext(typeof(EfCoreContext))] + partial class EfCoreContextModelSnapshot : ModelSnapshot + { + protected override void BuildModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder.HasAnnotation("ProductVersion", "8.0.7"); + + modelBuilder.Entity("Bunny.Dao.Models.System.Blog", b => + { + b.Property("Id") + .HasColumnType("TEXT"); + + b.Property("CreateTime") + .HasColumnType("TEXT"); + + b.Property("CreateUserId") + .HasColumnType("INTEGER"); + + b.Property("UpdateTime") + .HasColumnType("TEXT"); + + b.Property("UpdateUserId") + .HasColumnType("INTEGER"); + + b.Property("Url") + .IsRequired() + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.ToTable("Blogs"); + }); + + modelBuilder.Entity("Bunny.Dao.Models.System.Post", b => + { + b.Property("Id") + .HasColumnType("TEXT"); + + b.Property("BlogId") + .HasColumnType("INTEGER"); + + b.Property("BlogId1") + .HasColumnType("TEXT"); + + b.Property("Content") + .HasColumnType("TEXT"); + + b.Property("CreateTime") + .HasColumnType("TEXT"); + + b.Property("CreateUserId") + .HasColumnType("INTEGER"); + + b.Property("PostId") + .HasColumnType("INTEGER"); + + b.Property("Title") + .HasColumnType("TEXT"); + + b.Property("UpdateTime") + .HasColumnType("TEXT"); + + b.Property("UpdateUserId") + .HasColumnType("INTEGER"); + + b.HasKey("Id"); + + b.HasIndex("BlogId1"); + + b.ToTable("Posts"); + }); + + modelBuilder.Entity("Bunny.Dao.Models.System.Product", b => + { + b.Property("Id") + .HasColumnType("TEXT"); + + b.Property("CreateTime") + .HasColumnType("TEXT"); + + b.Property("CreateUserId") + .HasColumnType("INTEGER"); + + b.Property("CustomerId") + .HasColumnType("TEXT"); + + b.Property("CustomerName") + .HasColumnType("TEXT"); + + b.Property("PackageType") + .HasColumnType("TEXT"); + + b.Property("UpdateTime") + .HasColumnType("TEXT"); + + b.Property("UpdateUserId") + .HasColumnType("INTEGER"); + + b.HasKey("Id"); + + b.ToTable("Products"); + }); + + modelBuilder.Entity("Bunny.Dao.Models.System.User", b => + { + b.Property("Id") + .HasColumnType("TEXT"); + + b.Property("CompanyCode") + .HasColumnType("TEXT"); + + b.Property("CreateTime") + .HasColumnType("TEXT"); + + b.Property("CreateUserId") + .HasColumnType("INTEGER"); + + b.Property("DeptCode") + .HasColumnType("TEXT"); + + b.Property("Email") + .HasColumnType("TEXT"); + + b.Property("Password") + .HasColumnType("TEXT"); + + b.Property("Phone") + .HasColumnType("TEXT"); + + b.Property("QrCode") + .HasColumnType("TEXT"); + + b.Property("UpdateTime") + .HasColumnType("TEXT"); + + b.Property("UpdateUserId") + .HasColumnType("INTEGER"); + + b.Property("UserName") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.ToTable("Users"); + }); + + modelBuilder.Entity("Bunny.Dao.Models.System.Post", b => + { + b.HasOne("Bunny.Dao.Models.System.Blog", "Blog") + .WithMany() + .HasForeignKey("BlogId1"); + + b.Navigation("Blog"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/Bunny.Dao/Models/Base/BaseModel.cs b/Bunny.Dao/Models/Base/BaseModel.cs index e358d9b..cb95a69 100644 --- a/Bunny.Dao/Models/Base/BaseModel.cs +++ b/Bunny.Dao/Models/Base/BaseModel.cs @@ -12,8 +12,4 @@ public class BaseModel public long CreateUserId { get; set; } public long UpdateUserId { get; set; } - - public string? OperationMessage { get; set; } - - public bool IsDelete { get; set; } } \ No newline at end of file diff --git a/Bunny.Dao/Models/System/Blog.cs b/Bunny.Dao/Models/System/Blog.cs index 3fd5e18..e07164d 100644 --- a/Bunny.Dao/Models/System/Blog.cs +++ b/Bunny.Dao/Models/System/Blog.cs @@ -4,6 +4,5 @@ namespace Bunny.Dao.Models.System; public class Blog : BaseModel { - public int BlogId { get; set; } public string Url { get; set; } } \ No newline at end of file diff --git a/Bunny.Service/IService/IBlogService.cs b/Bunny.Service/IService/IBlogService.cs index 7f80cd3..6800f5e 100644 --- a/Bunny.Service/IService/IBlogService.cs +++ b/Bunny.Service/IService/IBlogService.cs @@ -9,4 +9,22 @@ public interface IBlogService /// /// void AddBlog(Blog dto); + + /// + /// 查询BLog + /// + /// + List QueryBlog(); + + /// + /// 更新Blog内容 + /// + /// + void UpdateBlog(Blog dto); + + /// + /// 删除BLog + /// + /// + void DeleteBlog(string id); } \ No newline at end of file diff --git a/Bunny.Service/IService/Service/BlogService.cs b/Bunny.Service/IService/Service/BlogService.cs index 00d2705..5ff4768 100644 --- a/Bunny.Service/IService/Service/BlogService.cs +++ b/Bunny.Service/IService/Service/BlogService.cs @@ -22,4 +22,34 @@ public class BlogService : IBlogService _dbContext.Add(dto); _dbContext.SaveChanges(); } + + /// + /// 查询BLog + /// + /// + public List QueryBlog() + { + return _dbContext.Blogs.ToList(); + } + + /// + /// 更新Blog内容 + /// + /// + public void UpdateBlog(Blog dto) + { + _dbContext.Blogs.Update(dto); + _dbContext.SaveChanges(); + } + + /// + /// 删除BLog + /// + /// + public void DeleteBlog(string id) + { + var blog = new Blog { Id = id }; + _dbContext.Blogs.Remove(blog); + _dbContext.SaveChanges(); + } } \ No newline at end of file diff --git a/Bunny.Test.Until/EfCoreTest/EfCoreTest.cs b/Bunny.Test.Until/EfCoreTest/EfCoreTest.cs index 98ff862..69e031f 100644 --- a/Bunny.Test.Until/EfCoreTest/EfCoreTest.cs +++ b/Bunny.Test.Until/EfCoreTest/EfCoreTest.cs @@ -20,7 +20,7 @@ public class EfCoreTest // Read Console.WriteLine("Querying for a blog"); var blog = db.Blogs - .OrderBy(b => b.BlogId) + .OrderBy(b => b.Id) .First(); Console.WriteLine(blog.Url); } diff --git a/Bunny.WebApi/Controllers/BlogController.cs b/Bunny.WebApi/Controllers/BlogController.cs index 6135afa..13ea09c 100644 --- a/Bunny.WebApi/Controllers/BlogController.cs +++ b/Bunny.WebApi/Controllers/BlogController.cs @@ -5,6 +5,9 @@ using Microsoft.AspNetCore.Mvc; namespace Bunny.WebApi.Controllers; +/// +/// BLog相关接口 +/// [Route("/api/[controller]")] public class BlogController : ControllerBase { @@ -26,4 +29,38 @@ public class BlogController : ControllerBase _blogService.AddBlog(dto); return Result.Success(); } + + /// + /// 查询BLog + /// + /// + [HttpGet("QueryBlog")] + public Result> QueryBlog() + { + var vo = _blogService.QueryBlog(); + return Result>.Success(vo); + } + + /// + /// 更新Blog内容 + /// + /// + /// + [HttpGet("UpdateBlog")] + public Result UpdateBlog(Blog dto) + { + _blogService.UpdateBlog(dto); + return Result.Success(); + } + + /// + /// 删除BLog + /// + /// + [HttpDelete("DeleteBlog")] + public Result DeleteBlog(string id) + { + _blogService.DeleteBlog(id); + return Result.Success(); + } } \ No newline at end of file diff --git a/Bunny.WebApi/Database/bunny.db b/Bunny.WebApi/Database/bunny.db new file mode 100644 index 0000000000000000000000000000000000000000..83b121109a65bf5877852b74896b2ac99f3b80e2 GIT binary patch literal 49152 zcmeI&PjA~~9Kdlq>5?{W7KD&|s%BXns01Y`NF4_Ro#zf~U6Q3PbO$hI@rp$f7uyx| zNXMT$Z-NuAfOmn!g%fAq033Pz*iO^Q$+i<)^tIwRd7j6Q{d|5uyGfoN-aiNuUw;%v zV=vL)QC?9h73D)+R}`fp)(x>1OHI63Dc*>!I`ewo%Zjr7=SQTYyXI176cGL009ILcy@tL)@#~ZntC2ghW@wqvD**hBzA9&!V`Pg zk#9E4fwkvYy4}5P9qY!EZ4ABF)eYIw(BClfJ&mo$pRd(5O;dlmk$7K>eAz%gHS+$P zy;}#?<(|!kE*8Tc8oFa0J9@V#)}w<1-RyM_oxz^nbwuO4*$EnYe_-F+8$8hOS`XgL zcTIawcNZTFnaX=YlfC(?A>ges5sece<(PY!vl@wQmiqu4x_W zGPZFVWN}7Y&BoSNqo%#Dsfx^<`0J7Q4Cs1iNhsgvnUv+w`r~$8X2Xvk$ZSYYIF?VV zSF=Hui9xBA+BN(i??ev&D@-O zrRC0Ur*NuYyjqpl+xJx&k@Q9t%cqsAv5;lY5s18fNfeHv>2>qOt?tFi=#@noEr;fI zVluS}~cG^4dwr{rIYj-+3I~~`a1WDkHvY&NsZnw908)95)>n}w- zSP(z}0R#|0009ILKmY**5J2E16}VBg))xH;kk0>$fBI)Z009ILKmY**5I_I{1Q0*~ zfh875=l}Wszr+D%Xb2#H00IagfB*srAb1o50R^;rvH$=8 literal 0 HcmV?d00001 diff --git a/Bunny.WebApi/Database/bunny.db-shm b/Bunny.WebApi/Database/bunny.db-shm new file mode 100644 index 0000000000000000000000000000000000000000..aea5578692b9ea05db4e4cb49e3300d95fd81bea GIT binary patch literal 32768 zcmeI)KWYL|5C`DVsENjZrM-2|;i&{I(pZVPf|amW5IljTvo#k<=81)fjgVrC?+3GQ zcX+&gd3mpJpVilNzTSPWW|JrP=TVmo^Z9#| zYy0xA^4`j7->s$hsDHn&d42HOvQJ-~}Wmm=Jw5!I+>Az=QH&Of-gvfqy~>A(-4In{|ZN$p8Sr$~<34iBiM zQa4w}oTN#)d~HB8SSS<<2j;fbp-|V{=F%lTmQQ>=QoUdB)0vmPJNV^St6D{8gL2Cw zHZ%x800Izz00bZa0SG_<0uX=z1eTtFw@GOUi;q>47kK)U$3NYF;=ruT3pB2{BJu)a zhXw%%KmY;|fB*y_009U<00IzL`~sEbjbfBODM#rea+F>U(p#Ep6fB2#txJSLWNgAT z%YByS5N7IhSFpf~##+)Nd)p(S_H?{G5pQ4DDGyTN_EePg7*>967f9*4eBv@9@6uJr zd4ZYU4_dFE7=J_N1satbA}=6zXb^w^1Rwwb2tWV=5P$##AOHafEFA$~lhP1ryf-f} zKab$o-fuoUN=6R*MPY%)6>XjsZO98OofD5w0s#m>00Izz00bZa0SG|g!38Q?#1#0w zo1@X@=6j~V%h~HX4T?$cCEFS^XwjjZs7Bth87~wa(yg;xj%gDHFDKKf?Dme5ny1Nd zhnN=6C!A#e=D{7=!PLNDy062rY|hMla$D44S|m}{(~0uvhT(E%++tgY`}+olV(IKq zY-5H^v9ai;oueb0dTBNj&+Ht{4u)bw^7|tpBb_nBy33HfOIQ8m1;lAMSU>dzj0kDqEWFcy-(H` zXi~1t)fW&CXb^w^1Rwwb2tWV=5P$##AOHafEPer5Ss>c<*ZKmU>N+_^o! z%e;Wsf9!5vKpdb!00Izz00bZa0SG_<0uX?}LlWR#QAK~1tfC*Q4&3W>k{VWt+QFi= zn;C{0wCucG?Y_64=(3#tHabR9TQVeNsz%wNcE6|!Kyo>rWxJ`%NV-cG@&frVXb^w^1Rwwb2tWV=5P$##AOHafEM5Vb5r}#3n-@4d z%g!FXy5=#N7x4MJ=JNvL5DfwlfB*y_009U<00Izz00e3Ta=zutt8y4WULD3SGBe1m zJ0teuSR5M6oY+O?hxZ*au1>0QBtKXXCGA{>>0P>z7r5_w1TJbWU8pbMvPgrtq-*L6 zeDQpK<f&ZAl3weRXcjECILjVF0fB*y_009U<00IjwfV_Y~iw@;P zHS(6tc%kT!Zk^?FOq(!xIhjsnw|A7(JWYl>9Io;SC)vMwa7T79H87a&>u@ZaGc%vu z7Il~wNtE?;qCC1`xSScc*w*3xzJZ}wIy)5Gm|;^(E-xT1&4Ws%I~uLO`T{Fo|8d~z zmAyZ-Dz`*^0g)HDpTLSm^&J`1ufk00bZa0SG_<0uX=z1Rwx`1rhkWynuK! zUs&wC@?ERz5ga)%n|*)#$ZWN~Ks7HQ;sa<9fB*y_009U<00Izz00baVBY?aB@&Y}E zl_zo+Na?zKbeX~L(p70*Cf1k`d4ZOeaJ4vvK~>uf7MW&Sj+Ns<%__B5UcjeZ@F*9miGiAnA5S0v0SG_<0uX=z1Rwwb2tWV=5U6(nnG^^w`^UV%AJJAk A!T