From 965bf636b17dbcd3943fd1902dc9a87b7b5e9a38 Mon Sep 17 00:00:00 2001 From: piri Date: Tue, 21 May 2024 16:19:46 +0900 Subject: [PATCH 01/21] =?UTF-8?q?Refactor:=20=EB=B3=B5=EC=9A=A9=EB=8B=AC?= =?UTF-8?q?=EB=A0=A5=EB=AA=A8=EB=8D=B8=EC=9D=98=20=ED=95=98=EB=A3=A8=20?= =?UTF-8?q?=EB=8D=B0=EC=9D=B4=ED=84=B0=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- MC2-Team3-Pilling/Model/Config.swift | 13 ++++++++++++- MC2-Team3-Pilling/Model/Model.swift | 22 +++++++++++++++++++--- 2 files changed, 31 insertions(+), 4 deletions(-) diff --git a/MC2-Team3-Pilling/Model/Config.swift b/MC2-Team3-Pilling/Model/Config.swift index 7772349..c94e0c7 100644 --- a/MC2-Team3-Pilling/Model/Config.swift +++ b/MC2-Team3-Pilling/Model/Config.swift @@ -80,7 +80,18 @@ class Config{ return dateFormatter.date(from: dateString) } - + let dummyPillInfos: [PillInfo] = [ + PillInfo(pillName: "머시론정", intakeDay: 24, placeboDay: 4), + PillInfo(pillName: "야즈", intakeDay: 21, placeboDay: 7), + PillInfo(pillName: "마이보라", intakeDay: 28, placeboDay: 0), + PillInfo(pillName: "디미아", intakeDay: 24, placeboDay: 4), + PillInfo(pillName: "클레라", intakeDay: 21, placeboDay: 7), + PillInfo(pillName: "벨라라", intakeDay: 21, placeboDay: 7), + PillInfo(pillName: "레보니아", intakeDay: 28, placeboDay: 0), + PillInfo(pillName: "디안느35", intakeDay: 21, placeboDay: 7), + PillInfo(pillName: "로젠정", intakeDay: 24, placeboDay: 4), + PillInfo(pillName: "센시발", intakeDay: 28, placeboDay: 0) + ] } let myArray: [Int] = [1, 2 , 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3] diff --git a/MC2-Team3-Pilling/Model/Model.swift b/MC2-Team3-Pilling/Model/Model.swift index 44ebbc2..0f7e283 100644 --- a/MC2-Team3-Pilling/Model/Model.swift +++ b/MC2-Team3-Pilling/Model/Model.swift @@ -35,8 +35,7 @@ final class PeriodPill:Identifiable{ @Relationship var pillInfo:PillInfo var startIntake:String var finishIntake:String? = nil - var intakeCal:[Int] - var intakeCalTime:[String] + var intakeCal:[DayData] var missDay:Int init(pillInfo: PillInfo, startIntake: String) { @@ -44,12 +43,29 @@ final class PeriodPill:Identifiable{ self.pillInfo = pillInfo self.startIntake = startIntake self.intakeCal = [] - self.intakeCalTime = [] self.missDay = 0 } } +@Model +final class DayData:Identifiable{ + @Attribute(.unique) let id:UUID + var status:Int + var time:String? + var sideEffect:[Bool] + var memo:String + + init(sideEffect: [Bool], memo: String) { + self.id = UUID() + self.status = 0 + self.sideEffect = Array(repeating: false, count: 3) + self.memo = "" + } + + +} + @Model final class PillInfo:Identifiable{ @Attribute(.unique) let id:UUID From fbe2c1214250efce620ba3800746b11e7563d2be Mon Sep 17 00:00:00 2001 From: soaringwave <82134672+treesofgroo@users.noreply.github.com> Date: Tue, 21 May 2024 17:00:45 +0900 Subject: [PATCH 02/21] Docs: change Scheme version to 1.7 automatically --- .../xcshareddata/xcschemes/MC2-Team3-Pilling.xcscheme | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MC2-Team3-Pilling.xcodeproj/xcshareddata/xcschemes/MC2-Team3-Pilling.xcscheme b/MC2-Team3-Pilling.xcodeproj/xcshareddata/xcschemes/MC2-Team3-Pilling.xcscheme index 2a75591..5acce62 100644 --- a/MC2-Team3-Pilling.xcodeproj/xcshareddata/xcschemes/MC2-Team3-Pilling.xcscheme +++ b/MC2-Team3-Pilling.xcodeproj/xcshareddata/xcschemes/MC2-Team3-Pilling.xcscheme @@ -1,7 +1,7 @@ + version = "1.7"> Date: Tue, 21 May 2024 17:24:27 +0900 Subject: [PATCH 03/21] =?UTF-8?q?Refactor:=20=EB=AA=A8=EB=8D=B8=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- MC2-Team3-Pilling/Model/Model.swift | 2 +- MC2-Team3-Pilling/View/SwiftDataTestView.swift | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/MC2-Team3-Pilling/Model/Model.swift b/MC2-Team3-Pilling/Model/Model.swift index 0f7e283..4c5b4b9 100644 --- a/MC2-Team3-Pilling/Model/Model.swift +++ b/MC2-Team3-Pilling/Model/Model.swift @@ -56,7 +56,7 @@ final class DayData:Identifiable{ var sideEffect:[Bool] var memo:String - init(sideEffect: [Bool], memo: String) { + init() { self.id = UUID() self.status = 0 self.sideEffect = Array(repeating: false, count: 3) diff --git a/MC2-Team3-Pilling/View/SwiftDataTestView.swift b/MC2-Team3-Pilling/View/SwiftDataTestView.swift index 531ce95..5cb3071 100644 --- a/MC2-Team3-Pilling/View/SwiftDataTestView.swift +++ b/MC2-Team3-Pilling/View/SwiftDataTestView.swift @@ -11,6 +11,7 @@ import SwiftData struct SwiftDataTestView: View { @Environment(\.modelContext) private var modelContext @State var txt = "" + @Query var user:[UserInfo] var body: some View { @@ -28,7 +29,9 @@ struct SwiftDataTestView: View { , label: { /*@START_MENU_TOKEN@*/Text("Button")/*@END_MENU_TOKEN@*/ }) - + withAnimation{ + Text(user.first?.curPill.pillInfo.pillName ?? "없음") + } } .padding() From 85d76b847ecbf2084ac4c5c26abecfc8f3928469 Mon Sep 17 00:00:00 2001 From: piri Date: Tue, 21 May 2024 20:05:00 +0900 Subject: [PATCH 04/21] =?UTF-8?q?[Refactor]=EC=8A=A4=EB=8D=B0=20=ED=85=8C?= =?UTF-8?q?=EC=8A=A4=ED=8A=B8=20=EC=BD=94=EB=93=9C=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- MC2-Team3-Pilling/View/MainView.swift | 2 ++ MC2-Team3-Pilling/View/SwiftDataTestView.swift | 3 ++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/MC2-Team3-Pilling/View/MainView.swift b/MC2-Team3-Pilling/View/MainView.swift index 7999f25..cd42a72 100644 --- a/MC2-Team3-Pilling/View/MainView.swift +++ b/MC2-Team3-Pilling/View/MainView.swift @@ -12,6 +12,7 @@ struct MainView: View { @State var startNum = 4 @State var statusMessage: Config.StatusMessage = .plantGrass @State var isModal = false + var body: some View { NavigationStack { ZStack { @@ -23,6 +24,7 @@ struct MainView: View { Button(action: { showingPopover = true }, label: { + Image(systemName: "info.circle.fill") .Icon() }) diff --git a/MC2-Team3-Pilling/View/SwiftDataTestView.swift b/MC2-Team3-Pilling/View/SwiftDataTestView.swift index 5cb3071..4c31ae6 100644 --- a/MC2-Team3-Pilling/View/SwiftDataTestView.swift +++ b/MC2-Team3-Pilling/View/SwiftDataTestView.swift @@ -11,7 +11,7 @@ import SwiftData struct SwiftDataTestView: View { @Environment(\.modelContext) private var modelContext @State var txt = "" - @Query var user:[UserInfo] + @Query var user: [UserInfo] var body: some View { @@ -25,6 +25,7 @@ struct SwiftDataTestView: View { } catch { print("Failed to save context: \(error.localizedDescription)") } + } , label: { /*@START_MENU_TOKEN@*/Text("Button")/*@END_MENU_TOKEN@*/ From 7854f4b2fb770a48caadfdf844fcf37d561549e6 Mon Sep 17 00:00:00 2001 From: Lee Sohyeon Date: Tue, 21 May 2024 20:16:07 +0900 Subject: [PATCH 05/21] =?UTF-8?q?Feat:=20enum=20DosageType=20=EC=83=9D?= =?UTF-8?q?=EC=84=B1=20=EB=B0=8F=20picker=EC=97=90=20=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- MC2-Team3-Pilling/View/ChooseStatusView.swift | 40 +++++++++++++++---- 1 file changed, 32 insertions(+), 8 deletions(-) diff --git a/MC2-Team3-Pilling/View/ChooseStatusView.swift b/MC2-Team3-Pilling/View/ChooseStatusView.swift index 84d917e..487b29f 100644 --- a/MC2-Team3-Pilling/View/ChooseStatusView.swift +++ b/MC2-Team3-Pilling/View/ChooseStatusView.swift @@ -7,8 +7,28 @@ import SwiftUI +// 복용 여부 enum +enum DosageType: Int, CaseIterable, Identifiable { + case notYet = 0 + case onePill = 1 + case twoPills = 2 + + var id: Self { self } + + var takingType: String { + switch self { + case .notYet: + "미복용" + case .onePill: + "복용" + case .twoPills: + "2알 복용" + } + } +} + struct ChooseStatusView: View { - @State private var selectedNum = 0 +// @State private var selectedNum = 0 @State private var takeMedicineTime: Date = Date() // 부작용 섹션 vars @@ -17,6 +37,8 @@ struct ChooseStatusView: View { @State private var swellingToggle = false @State var sideEffectMemo: String = "" + @State private var dosageType: DosageType = .notYet + var body: some View { VStack { @@ -29,12 +51,13 @@ struct ChooseStatusView: View { } // 약 복용 여부 확인 - Picker("selection", selection: $selectedNum) { - ForEach(1..<4) { num in - Text("\(num)") + Picker("selection", selection: $dosageType) { + ForEach(DosageType.allCases) { dosageType in + Text("\(dosageType.takingType)").tag(dosageType.rawValue) } } .pickerStyle(.segmented) + .padding() // selection Print 되는 값 확인 // .onChange(of: selectedNum) { newValue in // print("Selected number: \(newValue)") @@ -63,14 +86,15 @@ struct ChooseStatusView: View { .foregroundColor(.secondary) .padding() + // 부작용 섹션 VStack { Toggle("부정출혈", isOn: $irrBleedingToggle) - .padding([.leading, .trailing], 20) + Toggle("구역질", isOn: $nauseaToggle) - .padding([.leading, .trailing], 20) + Toggle("붓기", isOn: $swellingToggle) - .padding([.leading, .trailing], 20) + HStack { Text("메모") @@ -80,8 +104,8 @@ struct ChooseStatusView: View { .background(Color(uiColor: .secondarySystemBackground)) } - .padding() } + .padding() // footer button From 66f90d90fdb4d778e81568b29728ef6ef525c7fa Mon Sep 17 00:00:00 2001 From: Lee Sohyeon Date: Tue, 21 May 2024 20:27:58 +0900 Subject: [PATCH 06/21] =?UTF-8?q?Feat:=20ChooseStatusView=20=EB=B7=B0=20?= =?UTF-8?q?=EA=B7=B8=EB=A6=AC=EA=B8=B0=20=EC=99=84=EB=A3=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- MC2-Team3-Pilling/View/ChooseStatusView.swift | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/MC2-Team3-Pilling/View/ChooseStatusView.swift b/MC2-Team3-Pilling/View/ChooseStatusView.swift index 487b29f..0b320b5 100644 --- a/MC2-Team3-Pilling/View/ChooseStatusView.swift +++ b/MC2-Team3-Pilling/View/ChooseStatusView.swift @@ -57,7 +57,7 @@ struct ChooseStatusView: View { } } .pickerStyle(.segmented) - .padding() + .padding([.leading, .trailing], 17) // selection Print 되는 값 확인 // .onChange(of: selectedNum) { newValue in // print("Selected number: \(newValue)") @@ -98,14 +98,14 @@ struct ChooseStatusView: View { HStack { Text("메모") - - TextField("Enter your side effect", text: $sideEffectMemo) + .padding(.trailing, 10) + TextField("", text: $sideEffectMemo) .padding(5) .background(Color(uiColor: .secondarySystemBackground)) - } } - .padding() + .padding([.leading, .trailing], 20) + .padding([.top, .bottom], 10) // footer button From 16e5962509cfabc38153cb7c46c492bc946fb39a Mon Sep 17 00:00:00 2001 From: piri Date: Tue, 21 May 2024 20:39:36 +0900 Subject: [PATCH 07/21] =?UTF-8?q?[Refactor]days=EB=A5=BC=20=EC=A0=84?= =?UTF-8?q?=EC=97=AD=EB=B3=80=EC=88=98=EB=A1=9C=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- MC2-Team3-Pilling/Model/Config.swift | 4 ++-- MC2-Team3-Pilling/View/MainView.swift | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/MC2-Team3-Pilling/Model/Config.swift b/MC2-Team3-Pilling/Model/Config.swift index c94e0c7..8c2bbaa 100644 --- a/MC2-Team3-Pilling/Model/Config.swift +++ b/MC2-Team3-Pilling/Model/Config.swift @@ -50,7 +50,7 @@ class Config{ } } - let days = ["일", "월", "화", "수", "목", "금", "토"] + func DayDateToString(date: Date) -> String { let format = "yyyy-MM-dd HH:mm:ss" let dateFormatter = DateFormatter() @@ -96,4 +96,4 @@ class Config{ } let myArray: [Int] = [1, 2 , 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3] var colorArr:[Color] = [.customGray,.customGreen,.customGreen,.white] - +let days = ["일", "월", "화", "수", "목", "금", "토"] diff --git a/MC2-Team3-Pilling/View/MainView.swift b/MC2-Team3-Pilling/View/MainView.swift index cd42a72..d74e229 100644 --- a/MC2-Team3-Pilling/View/MainView.swift +++ b/MC2-Team3-Pilling/View/MainView.swift @@ -143,7 +143,7 @@ struct GreenGradient: View { struct DayView: View { var num:Int var body: some View { - Text(Config().days[num]) + Text(days[num]) .frame(width: 45, height: 45) } } From df44094c5f5dc576d406c637317f55dfa0da80d7 Mon Sep 17 00:00:00 2001 From: Lee Sohyeon Date: Tue, 21 May 2024 20:49:01 +0900 Subject: [PATCH 08/21] =?UTF-8?q?Feat:=20ChooseStatusView=20ScrollView=20?= =?UTF-8?q?=EC=A0=81=EC=9A=A9=20=EB=B0=8F=20=EB=B2=84=ED=8A=BC=20=ED=81=B4?= =?UTF-8?q?=EB=A6=AD=20=EC=8B=9C=20=EB=AA=A8=EB=8B=AC=20=EA=BA=BC=EC=A7=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- MC2-Team3-Pilling/View/ChooseStatusView.swift | 115 ++++++++++-------- MC2-Team3-Pilling/View/ContentView.swift | 6 +- MC2-Team3-Pilling/View/MainView.swift | 6 +- .../View/MedicineSheetView.swift | 1 - 4 files changed, 71 insertions(+), 57 deletions(-) diff --git a/MC2-Team3-Pilling/View/ChooseStatusView.swift b/MC2-Team3-Pilling/View/ChooseStatusView.swift index 0b320b5..c43bdd1 100644 --- a/MC2-Team3-Pilling/View/ChooseStatusView.swift +++ b/MC2-Team3-Pilling/View/ChooseStatusView.swift @@ -39,6 +39,8 @@ struct ChooseStatusView: View { @State private var dosageType: DosageType = .notYet + @Binding var showingChooseStatus: Bool + var body: some View { VStack { @@ -48,68 +50,74 @@ struct ChooseStatusView: View { .largeTitle() Text("/28") .secondaryTitle() + + Spacer() } - // 약 복용 여부 확인 - Picker("selection", selection: $dosageType) { - ForEach(DosageType.allCases) { dosageType in - Text("\(dosageType.takingType)").tag(dosageType.rawValue) + ScrollView() { + // 약 복용 여부 확인 + Picker("selection", selection: $dosageType) { + ForEach(DosageType.allCases) { dosageType in + Text("\(dosageType.takingType)").tag(dosageType.rawValue) + } } - } - .pickerStyle(.segmented) - .padding([.leading, .trailing], 17) - // selection Print 되는 값 확인 -// .onChange(of: selectedNum) { newValue in -// print("Selected number: \(newValue)") -// } - - // 복용시간 버튼 - Button(action: { + .pickerStyle(.segmented) + .padding(.vertical, 15) + // selection Print 되는 값 확인 + // .onChange(of: selectedNum) { newValue in + // print("Selected number: \(newValue)") + // } - }, label: { - ZStack{ - HStack { - Image(systemName: "clock") - Text("복용 시간") - .secondaryRegular() - Spacer() - + // 복용시간 버튼 + Button(action: { + + }, label: { + ZStack{ + HStack { + Image(systemName: "clock") + Text("복용 시간") + .secondaryRegular() + Spacer() + + } + DatePicker("", selection: $takeMedicineTime, displayedComponents: .hourAndMinute) } - DatePicker("", selection: $takeMedicineTime, displayedComponents: .hourAndMinute) - } - .padding([.leading, .trailing], 20) - }) - .padding(.vertical, 16) - .frame(maxWidth: .infinity) - .background(.customGray02) - .clipShape(RoundedRectangle(cornerRadius: 10)) - .foregroundColor(.secondary) - .padding() - - - // 부작용 섹션 - VStack { - Toggle("부정출혈", isOn: $irrBleedingToggle) + .padding([.leading, .trailing], 20) + }) + .padding(.vertical, 16) + .frame(maxWidth: .infinity) + .background(.customGray02) + .clipShape(RoundedRectangle(cornerRadius: 10)) + .foregroundColor(.secondary) + + + + // 부작용 섹션 + VStack { + Toggle("부정출혈", isOn: $irrBleedingToggle) - Toggle("구역질", isOn: $nauseaToggle) + Toggle("구역질", isOn: $nauseaToggle) - Toggle("붓기", isOn: $swellingToggle) + Toggle("붓기", isOn: $swellingToggle) - - HStack { - Text("메모") - .padding(.trailing, 10) - TextField("", text: $sideEffectMemo) - .padding(5) - .background(Color(uiColor: .secondarySystemBackground)) + + HStack { + Text("메모") + .padding(.trailing, 10) + TextField("", text: $sideEffectMemo) + .padding(5) + .background(Color(uiColor: .secondarySystemBackground)) + } } + .padding([.top, .bottom], 15) + .padding([.leading, .trailing], 10) + } - .padding([.leading, .trailing], 20) - .padding([.top, .bottom], 10) - // footer button - Button(action: {}, label: { + Button(action: { + self.showingChooseStatus = false + }, label: { Text("수정") .font(.title3) .bold() @@ -119,12 +127,15 @@ struct ChooseStatusView: View { .background(.customGreen) .clipShape(RoundedRectangle(cornerRadius: 20)) .foregroundColor(.black) - .padding() } + + .padding(25) + } } #Preview { - ChooseStatusView() +// ChooseStatusView() + MainView() } diff --git a/MC2-Team3-Pilling/View/ContentView.swift b/MC2-Team3-Pilling/View/ContentView.swift index 4668330..48165dc 100644 --- a/MC2-Team3-Pilling/View/ContentView.swift +++ b/MC2-Team3-Pilling/View/ContentView.swift @@ -42,9 +42,9 @@ struct ContentView: View { NavigationLink(destination: SplashScreenView()){ Text("SplashScreenView") } - NavigationLink(destination: ChooseStatusView()){ - Text("ChooseStatusView") - } +// NavigationLink(destination: ChooseStatusView( showingChooseStatus: $showingChooseStatus)){ +// Text("ChooseStatusView") +// } } diff --git a/MC2-Team3-Pilling/View/MainView.swift b/MC2-Team3-Pilling/View/MainView.swift index 7999f25..b04642b 100644 --- a/MC2-Team3-Pilling/View/MainView.swift +++ b/MC2-Team3-Pilling/View/MainView.swift @@ -12,6 +12,8 @@ struct MainView: View { @State var startNum = 4 @State var statusMessage: Config.StatusMessage = .plantGrass @State var isModal = false + + var body: some View { NavigationStack { ZStack { @@ -120,7 +122,9 @@ struct MainView: View { .padding() } .sheet(isPresented: $isModal){ - EmptyView() + ChooseStatusView(showingChooseStatus: $isModal) +// ChooseStatusView() + .presentationDetents([.medium]) } } diff --git a/MC2-Team3-Pilling/View/MedicineSheetView.swift b/MC2-Team3-Pilling/View/MedicineSheetView.swift index ddc5d1e..638c5bb 100644 --- a/MC2-Team3-Pilling/View/MedicineSheetView.swift +++ b/MC2-Team3-Pilling/View/MedicineSheetView.swift @@ -4,7 +4,6 @@ import SwiftUI struct MedicineSheetView: View { @State private var searchText = "" @Binding var showingMedicineSheet: Bool -// @State var showingMedicineSheet = false let BirthControlNames = [ "쎄스콘정", "미뉴렛정", "에이리스정", "머시론정", From 923567eead21fc2aadc937bcb62b0f29df99be40 Mon Sep 17 00:00:00 2001 From: soaringwave <82134672+treesofgroo@users.noreply.github.com> Date: Tue, 21 May 2024 21:22:33 +0900 Subject: [PATCH 09/21] Design: set wide button with Divider and Spacer on expanded --- LiveTimeWidget/LiveTimeWidget.swift | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/LiveTimeWidget/LiveTimeWidget.swift b/LiveTimeWidget/LiveTimeWidget.swift index 0001d76..d597bca 100644 --- a/LiveTimeWidget/LiveTimeWidget.swift +++ b/LiveTimeWidget/LiveTimeWidget.swift @@ -32,8 +32,16 @@ struct LiveTimeWidget: Widget { Text("잔디 심을 시간이에요!") Text(context.state.restOfTime, style: .relative) .foregroundStyle(.customGreen) - Button("click") {} - .tint(.customGreen) + Divider() + .frame(minHeight: 1) + .overlay(.customGreen) + Button(action: {}, label: { + Spacer() + Text("Button") + Spacer() + }) + .foregroundColor(.customGreen) + .buttonStyle(.plain) } .padding() } From 2bff646c0cee6d6a19423787b28302e4d7735085 Mon Sep 17 00:00:00 2001 From: soaringwave <82134672+treesofgroo@users.noreply.github.com> Date: Tue, 21 May 2024 21:24:36 +0900 Subject: [PATCH 10/21] Docs: change alarm.png to 20*20 pixel --- .../Assets.xcassets/alarm.imageset/alarm.png | Bin 91054 -> 2102 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/LiveTimeWidget/Assets.xcassets/alarm.imageset/alarm.png b/LiveTimeWidget/Assets.xcassets/alarm.imageset/alarm.png index a8ddeab1bb22fc086b6171ed2ce1175050d854cd..c619dd8847b125e128ae6a65f6151f2c972d7a1b 100644 GIT binary patch literal 2102 zcmcIlc`(~s8~%kZ_x6@*Z*_OCqN*FAqLpejx0c3|YcGmg5`@OqR8XQ-TrFxTZBT73 zP3>D$Ezu&W2qDy35uv0JvS>@Cirn1!X12%K6CEbAj}oE z9oPl{fCBuoiJc60|FeIRmz~X5gvK&Z^|@?k4FFM^0B}1V09Iw8+j9VL6AS?Jo&W$P z0KndmC(X7-03g?HW948fd+=lJ$MW};rIqDn$v4TWN#LcSYYl`t8T=e2`7qYp6`Bg0aAbOfXv#%M*9N-rY3LZS| z4(^yuWbpA>w5x3+q*tsI8ZSDp_gdp{q4cwq%8kkILp|@omXS+4W@G#2@8Ij;DWo7- znaqWFn^bkjBrrPNiuNh7cj5M}24mNUI;bpI13Nso(-~EK>RKMyDg7v#s2yHw828#L zt;NSb^D^?G@%0zbuu@}mwu#?kF6z}Z zs&c}oVAv(S+myKw%N8{aEflo#Fio?_+9{6`mQ(JarK}c?_|3GK&YXWh;bB_2e)ZEH zrK~H3Lmn(K@#7+GNRZVz7t%cAS2pgR%XCPgTE)D+FeWCj#myA%-GV{e`xMi=Z%jg~ z4ccdJ*A`&2^>8dD##bVeJt1GW>rm&}PjjJ+opbTOGMO z`A3`9))ulIO0AFeKHMUgJFmNUBzE7}z`iY{jk}v8Br)=^W%>@Sxpg`m`eoQh+3foo zpYyrzyrOS}<4IM>zMTF%o-9X@x23ts`F@P8i|n!$3%54iI=5MQyRr(^+W(x)o0d@y z&R9DyoN7o|urK;LN);O!f>MpZgaE+Vo>WJ8W-)j>c|rN>CUyEQykgd8jN0lL^I4XE zK*1w)l2)6mUUsJY()vpB29-<7a6?K2?=*kCTGM zzwlovl;eCjz!xN|*WA}>c7zyZ*ldC^^pG=Zd!L~|C*>-)60F@mva}nT;#1{7*N4m& z(@|&K*bnKa6h=mp`U5vTh6YwAob6Iz9zm1oRF&v$LB&dGkWC<~O-u=@H2O{|#XSBm ztB$O+Zk4yDdu$1Nc7|%d%!|E`EI#dWyj)HC>SFgcoX>8;eN<{n|ribsLgRf+R2L`g-hqgT<3?M|7z5Mm7bTX3zO%Jv1`o2Q< zp{hh3-kH|L%RHbf7Z803Z&;(=n%Jfc*N?g)?>WZB>mTzYdA?4;W=5Yd4D!tU8c*-d zZ^S`j8rhz9qy&A&F3fAK=K+HPwkW>PHE8&Vud``+*u}P^#L3U+=<$x~`9u0u5{9k4 z6V*S#-ri6>aJQO=&zUV0c|uj!>aM1z8641{!uPY_-}(a)wIG$>Bhn_bi@1gi+wTv)KH~jsL=)S7t$zRO{IJ(`hb|Y zH}+>OwDDU0%HWd?P-;WaYLNjOE1NoXxCzW*-=L4DDzGny;NrZ~%^+M6p&j&_#|1nH zMj)hzM8qeR5F(Hc_3;`GRu-naYJSb4y7kKBa2Mw$6Kg+IvDGqEv+ zoC)UFaZfl^b?eyJkKX<%V9%aP4^lXLRpDT=Wqo~t*?iU`%s3gf&>%b){%Bzywt4x) zah!0HgyU?;Z!IrV*q+)J*9m#`m*Ve+Q3A=mhc}lMG>M+D(_cI7UoxMZ$8B`Hv$XC# zwZ{`?Sw7OxbEV3o1wZqtk|k6bQM!bIwumNLang2*Is1HTL%0&`$D0k>pHDB`+VJk6 z!WADNlwdr%y$2%SAf}VyqFogvvN;pUczPN)xwiS2y^&Fo6!|{dDAQOKtaVmHKgA}! zNFLZ78-U-jsM{wq<`Jx^GZyKEML~VSP%;4YzrgVx(>Q}P(59!p8g3i7zzf@ zVJGVTgMbM}qJ1O(HzDU3Qc*_G`nLiWjX~YOddVFA-y(+p5~*I$*eT=e|A%8A?2E;D lg`of#GT0lX3deZ)q3lpz$jDGSO7^(}0NfN|QuT*t+}{Xp`Pl#f literal 91054 zcmeFYcR1YNw?B#~L68Iy(S;zQM>l%!B_hfgA|mRD8AcmKi6A;5dM6P>^g4tf+UO-} zqRr@GMjP!;KIeSD=l*fd@BVY1`_H}eJRbAjR(ZYGT6^ua*WRLx4Yg>f?okmD5z**q ztD6!LUBmqSxqgi>;t%JUBK%^8YCMCQfnP#l_Fj%eDlfp#9XWN}?VTJ=9qnKEz3y{V zAaL+IKY0dyW}q+U0CpF)|4Sq6>+VV5CL&T$^7XWLaCL-oK6i9-_5g72wX}0{I==vL zTSyv+8hENXzH-*~_i{AzH+xqT&)F zV&WoVl0ssla*xI3B&0e2^TSP0==I{IoT<9zf2t!q0k~g5p`LOgA}|2toWjp!U8(9+3P0lA!Jgaqx2XggS#gIR8qte-8GB0=Nla|Kly( zJ^wA%1M;7iBG^pC*WOb^Ojz{qTm6gBz~KK(>hAt;Y6#TS@xSo?w}K&0{5%~+OdTO$ zZ!ZUe?_S>jtIAVO&CAgq3if&e2D|;skjAgTP%z{b*ppLSQdpXk-@x9%+2iksz&|Vo z268$c5U9O}gQJc*fSVvh*xC7ooVbLVhN`%vx~R0YsF;|Bri!Mzx{8L1tgNcqV+~PR zwSV!dgB`rx9X+7`;(hU7yc+)_@85uM_atamcl2`haeSfa1$O8B=dIep#DuJkLtVeCQsx2|{(YUsJ7 zFa0TQUuBBM-I}`_dUpoU*tsuj^{E3^!&`BP@r3$;vJc}L0bSDJ8GZxkK%YWmXtQYF z;<#n%{gpr6J?QYB;qN7L_MrC)PqNtaP;Rqm)Te2;e)Rje0R>2_T*kOY*_>51Dl4(e zws*^~cgr1nv^Rhb+rrK-?X`X$s7>oC`tZ9TW=!_Oh^}4lbHvKakQU1&Y_pQTYSx^_ zw_jN~3kHam&ylE{XYmhXC)GV`)k9Gdi32+31#A&RvY)44%q)aP* z9nW3a8=l%i#}vFo#5SZl>MBosXSdse^(SG?do7+#MBhjgpFsjz2j1z4 zMStiJlk@mi#ltT&DmJPO@pv5Fug*6WGP6D35~e%uzzY1HLMMCJ)cq!<)+oOCr}V&Vy91 zGGk+R_7+vob3|* z{qGU|qwjyP_`lWtFBARa;s4*A{}tr_vpaW69c!G1k^U7WCCp#yo7QJ1%a@H#l&Hf{ zM=;XUN!Ove2%6K=)0hJb5vyAN#1qu8$fGY6P5o687`I>!UEA?TcR_8h4lgImk42uf z1z&|;EC*Z#?F)D^RY`2!keiEV!wS_!oc=f==?Hw|%d9qkjF!GWb=uBAP_S}1lS!@8 zZ*gsfcA0&KY->8*n>>3*E9$gv_HAI%{F^`t~rMow{s2N)q4>CYgg~({)(?IucKi|pUZ03PN%TGc!~Rk zrLGj;{0mAAPR{C zJPkZGaWZil`NCt`$l5eCq^K23Jem@6$Mp!3gflKbo_kU!#^X^IcS&j2=xbqTh&N z+@Qt0Yrc7SEIm!Vmkrq?xIoRZhT3S>xv?UX6rK5g1p#^eDGVAbJG*==Eh1BuTkiIk zrrWRLXbv>r?A>!CJTUoS&Rqla=^1FdWFg8s46pmUeQyagKq*U5`ulel{cmoWGHkuk&ye?3y6S6ZP7D<<#~b0KJy0eJiZ~GL%W*| znqMzY7f~K(oBadLp_$82X6L)?tLDPZ2U{LPwU~np%>{9;4Hl(mRqbzh2@w~d%?h(r zUTW5{Y9R+SER5fA5^Q#XNvkyX_ZEMXcON=9mev33>DzPMY{$$JQp~PPt2_%8Us^0i zX)vzaoNTXi?{`8GC4^Z-7nY~j3okeDYuTTN%mKWisoq*DAmMBnIKsdMf41HFmnMD% z>HqDe^{~M@0G2N2AF_w+aS)8aE)HHL62gsR79qtC;2U#t>jv&*nvX5?b(7UKhm~1Z z?ADjWOdkx*bN1%dT>J@*s}L_klj5h=*M&L_H}5X&rdc|_@ql#*`xMInG-N@w`6{3<}|r_p6QsYmM1Rvq4DDWMte z3d@U`=jNjpa?v@|bDRxSyh{%c=e7Ld);KQ`eU4~lf>LMZ{>gwtwC6(M~ zou)(btjTc6Nq=6(`eQ@MG6RRi%l3Dyi-%@h&UV!C&p$$XD=nl%mVe$MzfigCM&do( z?bXzRs1<~S2uYJBqE1q2fnGH|+B%P)>GDiR59L_3*y^a_fpBuLk#{+Ls)oNIvMIO& z&3ZRRZ8^q_qtNoRw=d#d^lDqfA8yH4Hf+x~VLv+M5YM;<6*R|vk|{s*)~s1+8W?60 z8tiiimkRAtd5NHR#5vMR4qme?p-Y$vKq3lN2Udha_w)0!)k60V<)^9XL36o&CHcSk zJ_>d2TC^N`*D&S`ytjcsurDj~)O_Qz!1XpTi_y7-sgK9UHG8N$rJItKWMWJSbTkn@ zZ>J)sL?|mPq}(r#obE_YoZ}ul`Q*oqIALBgQ(%Rx4LufCIZWIeM5mE0U48+Gwbs(& zwoW9$6P%Zt?bI%DS&;-0s-XuXNxWNW9W2JfmhJF>OQYT8j&0Y76tC&}S%XFgA;9!T zj0B=3wka2CA5-!D?0{^$MFKhxbXY$#JDMA?ND}d zRN*o}#Zx#(>IM9)Aa}}Hd9W$-I=rWE{iQW(108du9^m|z0eyI#0g(p9*w$9WRn8Ut?VNHNT6E?k zKpG+d+czmOe`LW}XuaPQzR=seu%A=EjtwNwR^iY&hQ|MDt-dX5kw@KMXkrYht(W56 z48a%V(r$38gQ|2q;O2FbLhC7B;N!!7QUUx^>j~-nCE-q-jniW|$_3RUhPmH++LDJ> zs~7`Q2+?VgZG^}P_yethK;Ycx`ugR10kh4BGbE;T*+G>N4rw88yXamQS~P^wVHTy1 zQzj+B0zmbRn5HCDUi|#hnh*_})v%Fv1K^>ImKvZkGbF1rV}^V<1y2A}<7#mYGkfPT z`0L9j`y7VN@?5;=7$J?^e9om!o$k8fSFj_a)=o9T{CoGaF4!ZA6a6$qST>i)=y@mC zH$ULQLlytmujjr;nU$PFTVXSoa$UZ=6GAHj1x7=Mz*od$kT!v1P6*%36zeZH)-c8A z!KwEXPZA~|g&5P}LQ0~Gn_je1UmJZ3MsNa3jAQnKtM89|qQ~Y+H*c8>>MAiS%L+6n zLY2^&n6|#n(1pgAL&WUnjw4zRmBAr_ExO+$j1qDL#}cuWk(&$~-Q^+BFyf?ow! z@V5tK%~ebpZ9A1DxKB+UGytZw?lliKDb>=z`3Fw0`HW-P9fEmopr`Xp-jd+xxeC`w z{kap0J=HG6NW73k&E1J4t7krPoRoCt5XBJe z?`cbK5=t9L_nrLt*Hz^~etf{v?!fkDfB!?qr@&^H-Oo*-SWDHhH@IBo&Fp^64`2CT z$h@YX@==$n9wWNi`4|aPSTopkVRr|yb@`3^pHNkyi=h9i?#9VX58kIt=nc@P1)8?ETQSwaVL^Qf=amR!MDd5jdG z=j~lFJ46BUh~%*>@Cyy65iRX1?nGJ!oaYUFFGZrk<1`!ojq@WL=8zo8^i=aiTQ1|J zI=uu%%>>%l{uj0FXHB~K80&q^*pnYk!6&~b=#*^WNguQ%!*-k%o6H?N9zw? zlZ25>@_MX z7#+jEI0T|eU%Ago5mrejo$KbI__Njfvq2MmzTk*c(I%W`=0R$Gq6)!2oh~d^9T2*R zLLExE!006sToN0ToV?MVpkQ*I(;+8D!bwVqrEd3BY?#`FsmSO|ez;Zo8fFY;5q3c*0t|UY(Y<2Dl1zaJZjIj~NCvQF}bT$mz>PlYH4;26_E({dB{qB@wO zaW@n>BX?HPE|_YQO$!39F6XHNR=!;DFa z=5LU{R;fi=`DKFlyFPJS^(tj<1M;a#`dwAxT0R%Zx9vK!jQg%g5Ojvx&W#X9v+LTG z0P#C{7`uyX`R@?KwvEYykV}K7MjCI3fG4}{9P&qN@ekH04VJ2YZwZX=Cd6kNq=CXG zLnftSw4QOzzflPb{_K9|YBS?xNx^LbM5ZxZ#{fLp5xI^81)BK&!SoruonEz(r{PmE zO7x=mF*g}+qcu9d?m0zB@x;RbkpJ#8`S?C6mWTdVWKVD?aeK}UOUotPlOiU&gv*Z! zxX~+9Z@0_V9?Kde!U(9JOH-Piu~BbkPbfgt6k88|N4&fkj110ygV`=i{Y#@{~$WEFKNOps5p9zvrFcCS$2 zH`5ZQLc<+uQwM_uPTzA^Mf#;Rzjys?C|9aN4wH|})uBDETcpshli>QA>X!@=0VDj> zT*9EtFG5w$s$)uMF>~^ZOTLVI2ls`z)s0ea$mkruIQXKR&Cph(@4HLn|8)4H1Y<|j zP25uZAz0)Ju{j{p9=Q5)qkCL3liTku8U~NsvCItmHfG|`KVe{ z619$*CdG&Yru9BXqf?w1C&8Ewz1pr>y1G2RIs#ukAiWq6xvDDIKWzh{mB}eJTA6S1 z<=W)C^Dhy~w=MbKDVe?)Ec5A{NDNAKUiRJigsj%p37Z!Yy&3Q2~)YCRDT2gY8^#{^0 z1O#r%i3aD&{RdMpDj=pQya5 z=KDAV2m8E_Qz!lupE+(9$%i1nzPYjz#~jZgBv+}&ti!i#O~sXw0SDWbCuIzI#~Q+i zhY{ai6U;%3YrpjN$McO}9sP8oP&#{L6c{vCk1W<#@>I>C^p;x5KDIOg~s_!Z8Vv|63(|y9OI95c%|lEDi64 zgl?B}=Qr?hx5%>1!{&A<;=<=S{A&BlkiGj&Ix?Gxw(d@Fns+3#VdH zmbc6&TF-L2l-CLfM2F9Hu(hhRmCoSY<73b2y4de+?23@^@8}L@3*Q)~D1~?OzWXu8 z(^?ae?RX?9z(VRrAV2W9PilEq@zOVw6n=Wpy|dZ|uFm+qy6^a10mfTASGR@CRfCdW zAm>_W5`mO12D6 z(Ir_Z@VO$7CRfVil zb&&bd{N@;?TIwkE#mus>j8dkX2CAE0_q@0L@-Pz|Wc}1MNn4#Se3~x*Ll9>jO`vI?l-xgmY3iy;yXcNa1Gki*Cm0YK++;kHj(e{~RALyyg0K zI=?+O#+#b|;&v9SqqSXWifjG|sb^IGfiX2)55-GvtL5tyQ%jQkp9n2UURy zM~4TI*BbE3n|!t3$}1`mG|0{CScWp{0q3rcHg-auQ<%s@GNcQCLZpnl4K`mzsQX0WV`E-B{}WuFwNf<2V&r6Qr#o=c@f0B9eFWgkqHPPljDGB8YzZ z&*v@FI*4?NLoX=a@tu7#vSe zxCun2o%3;CtgI;|J9@?9`+cenc5ddCT6zS`I&3!)rX?9ZyeaqmbU1jvuDtd!-rY$@ z=|(=^6@VEoe((a^o3nV+#Dmp`s((6?XD6hIN5M@;cK*q6bQ8DDv+Q3@wEPrRe4Oj* zGGfB*7Ncg56fppkKtrA>KHWFD1v(&Za{vY0*Y4tye5;P*k?pydi@)-1L&4^+shm5i z^IW>1n)SCSyDZMD-3}3OKdX#IDXuwCaQ7z}ayXB2rSm8H=u0j87F{Oc^ZFtV{qT*- zqnr?fJv%jqw89UOwF!ce0JkXFAoVoPRU#i~XntU*hTj5dC~Hu`UYx102Ar`qR$yLb z%7SatowRukd2OSUXLG!kA~#qGaPpJF^A_u7ZKN0PDlIzt-2FC|`^Dc~(ZSZ|a;2t|UNnd)1Nmppu=CvQQN}y&HLe@|j&^apk59*Zw{X_aL}?SO z<#xZd#&Jq3iHTMwTg9QL*T{TgUY~H0vK6)gJ4olx2{k63S3EA?Hjf(vbfFXD@fwTPf^ zPA!!EwEeeFZjsCh2!JXbZCbXKn|wt@<28Br;u1KxksIcG7sr&|JeVJi%FVR4?&U=# z4LY-YNd;k7w6y1+rPh!}ZZ#0E5qS#`Sp7n=P%+?M2<>GfA2qtpeSLb_eU7leiBa?d z41$L8VIH1r<+y5%=g{tpX{?rtg^V1_5+s@A4ynpIV z;>R4;mbCi|GxpV%_n+Hp|Q=#KJkY4*_x)JAzTX9)I-J?OQ_=CKjPKeQf=$fBNz0cL7*yle8kw!yR2 zSz8rGFJjUTo2o?eh%S-8!S`~UO|T|BsM_EQ6e5?6T*_O|TazBMf#3pHxbHy8;YG^v z*EOzIlZ`GvQ0Vb+tNX=pwnlK$MLYq}+)4wV5-r^WTbihS@7C%}g<#E{+|2We=npi< zV}2)AECYFuhPhNa(#4PzufBQ*CHl%- z_bw;d#_fBXEIxsV?XR`HicWtU1~+k=o14)_iUNzw!+e94FAFI#4R`7_UUfshEINfzJnx$CfP>WR@ugP zIln&<)4Pm^d*b=9J=Z>42ZhU~;f^^EF*%+_2{hN2d|zM@QhbK&*K5-KQNfK$RbjV%=YPQv<{$T{UUGixR!S#Gxb#!4`&`y98~o;6 z(1Qiw4dxWnk`*y8t31d@)a*SiT6}QLyL9G5aC|;~ zTO;Oc*rC%vnpx+LgY*LnyMS$S(hZ{+E%@CoCEslft1V?;UOXq-+J)uU$-Oc^JsT7D z0$Yo&M$|Xv&dFX<9yZZt#l@-L{H!_GcOli#4A8*3` z(w-1q*o;}#PS%M)Z7&4e2l`WubMu`)gN;wGJD+5(@~Lz&1}E?<2>iQqETZz`%z1(l z3S@nlp{&qSkjEzvXn9hAm}DiQm>`=k7N?^qqd48GiFO+5Y&e;>ZiRvOzqirTY_E1& z>of)2J}l4e>c6Xg;bhgvyZkLh4@I+f4|1;dhOlsx`w;R@V(0n2=j_rh2r&>xl48KK z=;kW^#vQ2*Ol8;o?+W>1kxZ&NA1!AmCpC&Vs61yu*M5`-_#+r>KJl0F|3FN=XIVy@ zzKf&t|I^(K*|;S|ZtD=;`!3Bl1pC}~c-HzoT{W$u!dJxRCc~#C>Zf&(OZgkwoyN1n zFV=ufK7X2S z975iAceM)UOdm>{v1pFB%}&8iZ>mq^@V0taMN_E)wdL|`xzyX5C#c2}|7^!FT^*!# zMP|OFl5cetZrVPPB!9(}K78+f_OWGm2G+9Xh-&7z0Bd-8_FX{HWEgyMS)kbBM@#$Z z7v#QnKX~3a*UqSPp=w4-DPFZ15PO(KSmpjHHq zbh|#0vbNr~nk=NJ<>i00$1Q775Lf?4GJoy5pG93!mT_rm9*HXSce9g)vTB^^9;BwG zrt*4EFPmbZ@A_cL$H?D5i^Z7sEWgX2^FLK={m#0KYa=~V2N@!4nI`v&OKi_hGp!)8GF3~)W%t)jQEMzpu@t#JPh@s0JtO7A6uHyE0*~DCNNolZI$F&YOo#SID-fYz z9$?dMJ=Z4XrmGRFZY!U_UN!Nas><+fd%5qcz{#-5FiSw3jzMKe>lvf5w~GJ9yy>?S z#{89)AGGoGF0|1ekAaOlI89V9!`|&%^6&8JmJZPi+wx_2+m>sK0(I~!ZMe@6dZv{2 zdA5(5X~oIYgyamR3bA0T&K%9=xX{a)ER8Q{!Z};tx}&J=@2yUW6)?dO!RL z^h=Hwebg}$=*uHPKgmi%3aBZ661idd5oj4^85Rbx1cU+D$BN$|m~3>IUgH^wPjT(~ zOb@OziFB~3v+-V>3m0NiGQw)*SJyhia>+7;8QJDx+WkXGMFEn4$XTcGvS9E;@L~Gx zmu2yS$g6h3EWdK+xR|2*PQ`be!0KWl`(qcI#g%zx*GYptx=g*q_#6iWT5#)$(<8+Rd;gj zcde2S?rW?<)!z<0Eo~_F4k;TKhxl{$>hFP3nhT7O_>~+P+z#^oM=f!ot!fjBK`{>L z>x3A{+q6YRtk6c_1XV|=5&UEOTYqp}rc<||b{7YT=hmaW9oIyr6MUE9Vd3z~FO3FS zCx;CCp+gK~@TB8lcS4`LSyr=$2K&*1c$-Vt>oE0ufkbK zWI3qnT>9&l*y~rkHrKi2(Ceb406(+-ihTAyXNEm^3w3QpW zlW(ATfpUp)@sFy97I@tT5kx&STdLzx2Q&ea8(^crv#lulZY61{Xr-JaNIdUh2FP7s zkJ@tvPt%g2+1ho}U!qNImd)L8~>x zBM`Qo!JJZLLCq92a?PI@Nj*mF^+vXN&*BCK(-g1Pzwdprj9A&yjCFCjC%+jh9dZbC zSoC$c0T5m{o$d3pC<-fTZ#(Ylq3hMphCx2tu~E4%DV-@=zr#Ba?E%H(o(m)6*cr1p z%Ir~uNTEdC7fOPB{>1!4P3|#YM;d9%_Uc!@#j~UN9q|~b))+k6Fw{1>%q-8tbeB{% z@OnG2fVKc(Od;7TnoSCSNv~jFFp%*<$kpZEVb9$ZZ;cZcTMdpH`@t_XV}47nt;dyo zyY7L={dla$V%D+!%3J3%rnRN8>M2%VGLz$jOfT+@H1ftRb~u{456J zr?al`By8Y)etb;}3|RfKbKg;`p9tz}qXG*&eiV9PRBSp*eDDYyVr!h3LlZ5$_^U$? zeL?lyFiS1MeO@1v;p}3X-X#&uzy|kaf^fE(1YRF2E(4EbT-GbYrzWOLr4~ugpzJ4m z$78qV&dX!t*%-MmaKYC;X?9#0?VpH622Xv>i^$)21KjL^yej8mr(02$tWQ_mO7iyD_)C8b;&Av(e+7_S|Ej zDKKN|4VHEk&*DI0Tne2h*J2Se zZ*gDL>-negEYv;94rn;{Dcsly{liW*5rGcU_#t=aCxX8hp7kCT1r^w!I$jCIHHH2G z2KD#8cTV{d_QlK=_26PXkoZ(S19u)^1sD(fl^SbAzx0B%{>gqJE^Olbt3^<^ETK3o zTDAGUo@zQQG-yO>%x<9Kr-N2hIYB~RsZMZdHqd*igdz%|n6yMjDUf%CGVf|x>rv|&BnoAuAeO=3~jdr-9k=n*V>Hc<@dKL+jG3J>y>D(&19CX z{E{H>$>bwEtHMd47VoT9@fZ5T+gH8pb23iBLTQ8mPK-i{Niq4y?Vozuw&>Od7#rP4 zf#xK?3)@i>8-8SsAp?X!)!|iE<}<&ANcoa@M~`ypx6AHr;j;p4Z_Bs%jb>S}%e!zMpEIPidxdlp7ES?Kru1v* zcTGFBXJTpZA_0khI(>@YSsB~(&xv}03hD0z2X6dXkle)7Qg^hxU|u+y7aE~{pI82p z`3ZEAOi-tk6JA0lSF~91KI_*-EPC|dfk6fikB#kU^8It|nbxAT_AE;rX%fUZ$@BB?+`TumxiIHlh^>?`D4h*pyQCV4;^} zJ8xt8mQUaW*3Zwc1s41mKZ9}TjWgc~0*+kZ??#-F`zPRNi12TFPF=yMfc=PM5jUhC zWa>R$Bj(<2m<71#d=_noe2%o5Fyd5WR;*Q!{$65x_m#4 zV))t=E7!Q4y+l=cfomchRrh$8*2+&zeRtBG2E=@J4L$s(VyQn|U9+1+xWE@8w?Kob z7K(dv@keF=mR59a#Ub-UEKtfPrKFXnjSelv~ zvN7;tRM@V`e5NyL@D5?Zg%!`i9LE79HptD@p-({KVByRKE@U%8dcha`Ui0StKiPKV<}$S*lnu>}23H63pY1x+|WSVNu_SD4Tlf6kEfV z8R=cmW`Ar<>vONx<_|5XL1pqA#E1(Mgc3Vc+vCrHontBs-u6Es3mAqwDBHDVI+ zng?pM7c{R7{>n&won|6;vTM)}YtUHWSryey3q@G=UVdz2$;oZ-x%_l0Z8Su0+j7!; zI$>r6Ki|+J+#bGk=<8hT&Htk5wJ5jR?>ACiR<+?xh7y`c^we%u6JxW1`EvB#FvTJ4 zMr!o?0gc2@%VeYdz=2$kNw`@q_VlF1Nd@*OLv%b8t@}9%r*Go zWO{i|BbC!WsreWo1T4DiUjIqj%Bgq>`?T?SH2e0Rt%|gX|K!)t4@0uQxSW68?|k|m zr2FA3w0o?s5}eNaD%c4baxo#GelcNIs(7(hd%oAs{vlR{!w*n;>rOs~1adHEE%1}p zNM_Z}5L{NmE5bvALE5mUj8=TS^P|~8PI!EpWb0E^;}3DIQT(VeIdk5(FvpQT$EFD~2z zCD(kqhudf#hL;#a!RZKBw-QN@?Pm*OVF_l#`sR%N{*0Zrj<4gsI9;E(N_>8p*-ls( z+QLKhv5yLKCnlz{$29}ZoPHvBOtsg%8Z1g%I;kt6dD@32*N|7ha z#Tu>b75zBNBQITt*2wTBZZH$iIWVYWSH~QzEKH0 zsw~!RadJkt4e&QN47c^_BZ|##Ej(cJdfhw@e7hl$ZHk|9^x>xE57slPySZa-HOh-I zU%9Zyj|G2!JL4yfrq%%o@?H#;E}jFUI_>V+RziYn7DYx}l3`Ks{>B@P2v)+aaXN=)AfcV! z^d1$FbAO$WH5c%JNNZ#i(r#Q`$n$`oDIG=*?bt26d+`{_uPh>w$!99ryp^dh&Xwk< z*W9KW&6B<8qiGnT2+Rd1gnBfCfGC~eB|OHl<=P$kz11cMDHMINs{v@V(Y}&!(G6c2 zThxBK&a|iRK)9qF83&o+p)WmQP2Q<^llg*k_>!^gluS*IA0P5(l|tACGjCFTzig82 z@Vu7fLJAQe3}I~3OWH+v4_B{0iOreI8=#U?R2?%YY_ZlZm4b~kpr@utR~#sh(k8PW zHt)*J78oCQZ#>k$>eU?Vy|{N|{6c$T>3oO@ppFXh78tkt^53_Yw@Ce zuE^Qu)8|L2vB9JpjtKByMt#aUbFQ(~)Y@ot=qX1d=Uhv^OWl1O?XfFTW2zb(uUSc(77pqAZ_I^BLM5j!mu`n7kb(oQ9Tr7KlQ2rdg`fO+a> z8uMOVu}}Kqj7<6d;VB8^8DU;CbZ-m~$#<*~t{!kDLS}i#M@jaZmTiPSRsmpoL*DF$ z_EdaZH1Ite+_E@a4^<7`y>?7k2H@Wv9h)}{yH8y!l$W2v0Gq1{|b zc2qH1?WoxqM<%s!k7-20LE+?mo#4|iz!snGz?Jsewts+ZhfB9hNS5X z(bk92i=t9jRKA6#7JB8SeCRC0zW!0^Ke zJSoRnIjtyD;`1k!c2g5BiPvO3j%nq~J+e+#%A=DQtK>P>Qr(S`_a1cvMSm94gzF>$ zEBo(@uZ05SC+UyGy5Zw{CLS;W?4)CoI2!S;H`FUMV zsz(5DJkYd}!CZNGo_K?}#SY$W@VkTBfMO&!z)9)vyLRQFg>HGx#pXDSyYlN-&AAwg z`Ck#OEtB&rQvB$qgU;$HAmj}S^#DqyFYCLDXAZZSff5G0FYf^II@c#Ap)oCzEhP`E zib_NvK7;&&O4ZM?4yF_FKP7PwCEA~QXiK94dQ6vXwDIz#d0a@cam?Wqv~@WXrMcz+lOPh6F^tY8*RY_GCx2*+;+c^eY4M%ygVGrfVZ_;~m~g znc0oke?j#4-Q|L^gaqD>|i{G-G$ihZZD_ zG*Mlr*0-UDc8Bxf8-?YMAPn$NEXCA=0&EngGF%(3!IuwY_CSGh?((_bb|b;BQ1Ywd z%%9MFFG6Vj*~bm#;lS%Rp}zvP+69WvoJRNcso7p7Cgpro9lrp)e!wg(Q+9ig@#vm_ zZ1Y=0z#E{d1s3zGK@jB_Yv2)6Q?L5G;SAGYW59>f+M1+afoC8mb`l0cD4Et;hn4D< zCkl-yCxZ8{6ppta(~dLaI0nJ(R+;e*pMLliKY`dhfP_x4&Q2%aL6dm;(r+-mcwl(4 zEpI$Zd2oAa{@&Dx(MmrhbKz3GI`COyF2r@?d)@=!gGIqC2mMWtF6iFl=C}z1frZZq zS#&x^f54h&Q);u9XVbr1Us-HnH(Wypq+3LdhF_X76X8X20&qlsgO9ERT}LCXK&Yl+ zT`KMd^}Re4twu^m$RlepJgvZ1HWSI%?z3lee6WF(zQhlM;+8go5Cm^PeK#|JLSXtM z4F1rP0yA;08|@*!r#rTzix-^(_4dzZRA3NWii)CVyN}ykQ7U6#B*bMWQz;nB1iows zxyf`)5>i^^iUMfUuegnsb^y(g858N*AZrmy=xseja8&Q!%?~Tv`xCHReae`6{_dxo z{n{)g4w2{gK}9yo1G39(BWUctOZL<{Yu$!#IqRn+B(5(BH_DD~qsp|)=3MA$wP6}h z1tjfX58ntqGz-O@x-Jdg%)467MgI8MW3Wef^Df!Cz8kmJ8M4iC2ctygc0zH_#>_0$ zMv@gZB01S`t>YYpu$+>OCqI{i;?x(`6lw+7TbTWK}J%W`LNs7^tW~0!6k^oDWeeyCK9?}Ai*%sMnAkl~7vv*2` zAI(N4wU{QvMZrLs0nLINWL`Pl+(7i)PW7yQ!_dOPg5x5PbOTJby3!iTJ|gX))6B`{ zzbbC{t@=3AH5eOAIkI%V{L?wcmzpf>@|vgcGS>FvyK#p{ce8qLizQ)+Q{RsxTAT_r zsvWE+O>g6_eO$9E?((y-iZ(1L-0R+Y4AQ)vHnjp=KjJ)(B1bZX5!6_b6M z0s>)LW1l2Y8MZ9$xcSXEJ#z!5gmV6iTVK9@gAPO+1=HH&A;a*81-L*I;s5C9vaoNp zBbVp5V?&?F&xB-0jXOdc$ew;(jH2}A-Mj>tKF-x`ajbGK83c@(rZ~%i!m?mstZO{) z2HBDSM-q8e4r#Oa3KRJ(@V$j#Z<;V%1FMFGE8nVmbLsb|yP=4k|BIyS4utyu{~;-g zipV%B*&$>*vNu`TD=T{)$5|PXEql*H$cU^vM6&nUV2$3`Vohi4TBC+$flX`z0|Bn`-x|Sh2B{S^x6yg!*F+BBo{bI<_#?VVdI^y7`-R zN{RMl#iyOX`$Bw8;6#t&aOT4mvH^nL_~419iFmxMM~=a#=)w*8sFV=%YnUn#A?;Jx z#iT^gWJ_+BY{Q34)U#ROj{p1fW+y(=LD$hT_d&(WrMKSi*nh%gp)O{w($61b|D8;z zE7U9Wo{@mmNIx5+rMs!0&inzTi9gw{4bf@JglbQoXw$aj-UToXZd%doZjsYA7PWw3 z8$xiv^xwVPpYpw!m-$czBxW^kRLbfq0U|$H?EJ-nkST!j&>R9Z{ca{Fyn6_ougyEE z)CNw7Ii@O*P$uZa%NI&DJwU-53jxp$^@BcnK}pxVNnz? zJJnnpy;amJ#1O0QRH=;y~WTdQu|^GU>#erEhubptr7^#hxDCwk!-j083>OcLd!rjRN#VO8(YY>b|<_|eORUn`AkQ8wD1)Ou!aA>{_O~W+zT4S>V|Cm|9|x~6|3u#qYr^}1#+^JO&a|hBe^xu*+okF z;sQfhzA_PxbL&hpCU8Q`t<1F)@qV~!ga`k$kS184E5vdwES}geRz%Jkgzt$SnPZ}& zasJJgVTw?v^2K%T*oA_t-PP2vxv3$q(~6_*W%NnS9H-|ZwS6>PJTk=wuGg+TnUN0q zT#i~a&wHOCPGb09^UN|Rq&g@pwH(Ry7tY9e;GJ`(42syVt4B-4$@3OCryYSHOlHL) zk!XwNj6e<-Rjlq3wE&&SJ&gAzDS@r4fAc`E&A-yl;$dZa|ObZ_^P@TNroOKg)rnFt`q&cHeF@imzATi?g^!FnbcKV6X@# zR7|Cm;(ym?f9#Z!ZVy~NT1zx;)Ny`=uIu)TQZo(+388H5*x=I`(j>{F3f{g;4jjls ziY~-5FCPdoASJuGr4?QWNX~;^5e@^_ts5a!nvGN&05N>mB}ospslrxlLoROW*WhA$ z_ZUhZcFlo6rax)zj5?=!v+3h*=8V!3`t{raBP-|NexZ{gtAbT`EP+$cz+q9l3%}+? zPYpH9jRZ8>=_GEqVZmQF0*Erd`8m)+F(+OL<7pH^qpuMA z{v8S_iX5(!8=fCjWVV#u-U!xm8^i}Fu^r>SKq2WuSWK_&2UW`u*(aNTTK8C5$v<2E z!KQ~_0Tmp5Kj7rRTz|qk)kLk!?A>Z-bHtY+YYu}Gp;*FOSc|oD-ZCRPjW%DNg(Pk= zkkM@d92+AjEY|Cf@?BG+TbmTr5gWx%xQdQ_Nt17$EuYNy5~GD_e#Ow9Trz8!Mft8L z)-GF*_Gxp!t;_(hxWsJGs0}e45Lqt@-E~7>SHq}}GGI>sz;WVaa5N|W@W zXU>b0$=PE^`NeMyutc+tW(R$+N|#>mBO1M$TA0Pi`yZ6*(-Q^+(X13pvu%Y^77Uz@ zMODFQ#>jrE8Ok(#lrNJYj|^BZDrPRXD)#ibVVn~zJv4zMOXT^hT@uZJ+>5TfB>|4J zQX8zEqSl|7uKHt!}7|Gb*=&5rq#Gcg(6_juMWieF;ak(@3bJ-;7H>99;l!JRGp8Vx_xn8*RmPjIk6u0rEpM-= zXoddzD%VkEs@m`Ed`A26uVOAn<{U(BNpU^!G z%+OE*papkzN&gh1eZo-ipwgf7S+u+onaqRfF9X2Bv{?ZP*gc`$6XciUlV`7|4W>mX z+SPs8vFpdsYt}*d+<4Xx#h(~*)zA60-`)ktZt2wxh-QB9XX<1M)&NVu_D@frA@5Yb zu=aYdqG{Rye{4NbK2_+7s}IIKm!7;3t-vr;M1T558W?cU{K`L!!EW~`G|#O+B6bjv z_ObQ%o)+{#D7jN)>anp;2B_)?Sfe%mwSVSHl}rAs%1- zhx@8AJ2FK1p3s^~Y--&Y_AP4_ri$5y^pD+$h-M^)cFXeX$cH@H9r=ETcho@(;rr3} z+1kn%bzh;I)l)djO#s)(_48k0A5-N2VD1tuqZ-=3Wdmj;bE9654d;O0P9Q+cl_fLM z!~}96l>a2O&>`L5rO>I023CRbtG}?k@*J6>l-z)w-JJO&goKU1eTX@$uB<_`8WJk~~ zbNtQa_n?rIeNW;|qpEN7)*J3k_i@0$BpfdLqx%*$`HCa0Q5wz!G!#sHR{YXHU7E@9 z+ux5}OHVNCmor{Xn&0JF@LDj1lZJEWwHZbMu6BFs>?J8J5_xpaw>nZ>?AzAF4{Rp9 zP?^c?3JO{w+L`F~voF)T0uA^a>0mRdPBHqFSpGheg-cOF@ z4^h5&y4!4|Hh^)ed70zJ{@Doy&!+U^C*4Ptht+p> z_!b7@$S>n()(z%+x$rxac90v~+YDHI=p|zD#IJ?{AMZGguSQ*YDM$B2rAULT191Xh zxV~_uyoL=yJSUw*X{GULAJor(!zt+TcdOz^jLD};Sy_iE>(lK^d=;8R!5l2L&Ev{l z66z(y)M***K5L}cVwT?X>@7S=rupVqno+Riffso%*Jdy^L6Z@k5rdasp9Ppcc=3I= z1DCoaa$aF<&xtOgC-uN#+g)ny9jMw{W_%edb6Zk-F)c4mp&9vLdQ`hmS^fqLq#Y&n zjNuNA2>yLZ7MBw!ZznJ>=crug-{su17Nvyy_=T9-mB0CZa`WxXerr15&T&!i*`!ls zK}-@&??ANLhtwyd$5sdh7VjcWy60i#BlgxXobem?&|7Mjdvx0#8ReJz8W)UI}#5^e}q~Jie253;Kc4MI3^yz zlx4gUY%a%1jtLu6Ng;`yRUeGpzmReKv_SZ#sGjz7In=K|1U@OYG(?EV#2uY+jl$d$ z#~OdPZ?{`&Lq84f!auzw?RZErFvNDY-XBxLV6Ff4h3j}(cFJLAMiTu8f#LVAgIri@ z@D9w~L?LiUTx?G%W0CNczw&>j-Gv+8O_54ffmGt%FcfK^$GiA`xjl$2^U|IXkzslh zzHbQLW@KD=j#{V60u}gsmZgh2wAY6-_L5GV!oJ8 zNzKtkfLhODeMO@|+m88{^QZdIp4COX&5nBtr$NLIfNoq0vC;xzyY)jhI=loxR1#}h zU`auIwRn9d1V3ymo+W*+>yBOJFEs%$j7$sKd?_b}l1ACa8z#nn%d6eKGLVf589D2FhV z1^otmKiRhJBUq&Pt%Mmo5PXvcgYeYf=^V04qD0`NrtZ`1GlIvz-{Ok<%{I_Q*9u_Q zXkXO}=`y`aP-jA5RyBL)jO|O-Yn=}kQ<|PlD7Z~;jg+< z8)bQI?jHy2cV!m5LTY}4SAxDl-4%yaKlZ#f3ohbwSYNC{6>*UsLLq9s)Oms5=`z%8 z%KE{ytB-DI9Q>cT_?U`g5W9#ui7NALn?yE|3QaWi{#26OubPqtM>T5K! zL7gm!$K8)kU>*IZ!1?~~<_Zy4e-2UTR1O9@yYN?jxQW4$yJ4AQ(oQJu19^#GQDE&E z0HUTxjjt07g`)B`vPpfiywjGW>wyZx!pNtI$^JAU9;3r(1_0dg$-`pej0+ThUqiMw z_|-dho;6ve4d;AcMmwvr^#|Ksvq`lRop8kjHZT_!3+8P~&Uk!o|6;Swc5w0VSZP9W z-Xx6#2f*EMLHI$iez1>0C9=CkFm-rehdDVjg}z4?pZR7QPelUQPsS~z%2F$7g)weC zPt%K&0`UeD2cOWt=hbOtWq$t%_>mZFFMPk-_ZfUTrQO#?v0n)(otxsDdn%?-?sk4P1+vJ$)jL2HEBl8aUCGc z|5}ZnDb_orlAYLs@QvdpHhz!kWY?w~t=wntd)%7BFyX_v`{-BJ=6lsiGq-!<<3Sqj z+%w1t(NjHez7pN1N&&dv&eSltEi|*30-NjeO$W-6Q`3RUE~f$wxf+x}xd84S`nSQu zeS1N~qBoYXIVdXgcoIv3#n#1q?_fH3ZrpgZt#>^Jtyyitt;Upl!>+}j$nJ7wlk4aYk#Lho54w{r;IMc>{Ju?BQ;IW6oIWt(Ptn}Fw`1ap~QY(y9u4AFR zkUPNvrpoK~8b+nn5LeQGlQ1AT_NrrS@`ygAIb>X^|Q6 zW5a#?D0pfU#75%$MzOnM@0P0X@Xaj&p2bJPd{!=uXX_r6ITXNa>&gn%KM$IEc5`o} zK$Rms?Pok2kJp`cEt)@5=nzOO-(->uf<(u`o@GTvDcFt#PJAb=Si^fM+VgT|(f$;f zFtd2pjH~$NSZGX;Q%6vobgfa(b|*KD2Akf&`?S7?qaG4Mcen;lGfk|!^8@RlSOR64ygp^M#)@ubR1_z4E|2~SsJ#;+}UJPDL8*??W&6FSY zjF>2Z-k3e+4g=}1wDp}+dmQb(Nw9$F3;{1%*A@Eikm@gDEBJ6OAJ$TZd$LiJR-ANt zaOUDtkz{k@R@AzECvIILkH_9wup#}xSS7CHaFiHR$V54aHeYz2=(|oT#?d`bBnBTq zX&&Q0W}1dPr$SU#twOx2QIG!h=+U-9pFzjWP1;i$oTxgE@u)+0y~HdpwS;EQD~bdmQJ{@-sCU;jjrQ7B2xyAEdhqJx`W+QhpQoc zizz~Kf5}x-hbp`#y9H*&Vp3pUNM&L=ts-n>pt8E!w&q$_U7b-`1K+^pAmulz71;;^qO8}Gc9ZJ{q8<= z%S17duSWWbyd)PUq74XkZ&vNPc{FDanU;dhzo zy1Wi-0D_GPD&rBH%jWzPQ!jtj*-(Kj?!_IWx2Q0|C2RZ+0b@UW4cHQbt>Ul@r6^PH zw;bX-XX$8LtN5 zYl~#oV(TNVHl40daB7(5-i3Q~04$;f!`G&?0&D`VYrz;n(&Onu^K3U8X?@mOghx+1 zep$26O~FeWWpTUfigp@wj&{ABhk5&7pzao}CF$czc11O!n<-xOgf_yi&1SN8*Br;uB^-{Bg(k z!P1C-D=gz>#3$(Z%~+$17o$q7PH)u<1DYaF`!zLrT=B2Me7%&dgvG~xB!3#JNn^(Y zs1t8m|Fnj_Ao09uKt(~|9V`EoF((A&rUq%0z?Xo{_tQ@czxo@@hdz~9`uPO5(`obp zckjebRahSjvvjd!pZG)I>ggvftsjz;zZH{7n>jqX@=|NkK19}lHYfMZ5@x+V@W)KC z6c#Q(M+#3$ZyExu5@e(fHe<&7M!>tz_t&Tdb%|b(Sejb5M);pQd_=>V-9M*0C?SaK z`j>I%U|fg6Ua43OOlW?gqsv|nOh9T*)seec-aJ06d1`%*3;p_D@!#Y&AfN&;8)mNV-OiC{LCeT=N0vTJ4D9144=m{VBt;GgX~$y}AB^%A+6Wa7M|WMPc8 z%FeyKQ2of@F6Esy-^@x13B6we^j1tYF>sRfSvoY$>j}vJUbp&W8Rs75HY`VLp`|6- z8f?2>#Nu*$*JfIs65ui7FR2erBOG#THBx61O2ffBT@HM}I93ut6K`bc{(%C`r8E;z z5b~3Y@bDl$x+S3lDa{xrUOwL?TOOYSHaD#8T;q*4fUvbtU|PTrYI;n?n|5ul_72zU z>1!=!LI{3&pwCTZ`^DB4f?{|~-&8%V){s*O&yo;Tq}M@)78VWO^_}Mz69b|pd zT5z{4PEIhzvVC$zl>X})aNq$|ySp>-&!$&hiZIay^-Ogt2+h^dB!VG6!H^%v+$WHw zmhuP!)z^L7{hdmdMavd@0{bJy)BF|C`W8__?%3(_7W{`+z+|3<_D+|;B(m8;KQ$T> z`760UmU-G=qfb+lXu2!}xekc40LkEfo&_{O8?}91MTCRC4$R&t*ptt=HFM_|vsaQH zwu55rzq>CPje7PyGR18ODB_VQYpwqt|GTamd48V$)EGJ7UF&7!4RUymCf-g%Ld9h!5_sZ=GSQrw+<^jaUW{#d)+3Vo>6 z{xU8^5FJT4ZnoYn<=&BA5%1Mp`g%pN?G;yIhuh7c_^iB-P!xN4A<&<-uD8 zJIvK08%8nxf-ygmtcKSg?Zja2v6!-kcZ-P+kYQ)SRBs07O$9Hug7lLb^4FYF;SZ`! zgCu&Zv^9l4l@`KHbm+1PiHw+>sagNO9f#`&JM_3xw_>>>HmQ{@6q`hMsy-K1yFQy} zrx}6fD#J+s=Ty4UmtSMfts_l@9<3F{=0P)3`yJQnr0Uz$!DFA+WZSwCA6w-&gfxh1 zq5<&s9`&9OH_i3}=g=_GXi{?lY+K+w#)-aSO0ePIcc0gqtP88fy%>L2E`V@_zQ2yN z0ifNZCbWx^j!(zgDpag~DlJu>Vi^@Msm`IWoW(v-%m&gw)!~DU;hU8DJ3-ka9eKpa zZS#l9`1K0?GWR*(v6yFds-)@3Urp9=IOJKUUIk&pLK73Jk9&;TzD{6#GYLk+*1WD+fWwH|#AbM7fw>vv1Y4Lm}14tWwh{z+eCq)HXXmg%t&oz?IfOFHFZD z?NpE-;mFeE>h_oK&O){17&JwldoT-uK~OB1EJKj24%G!srDLYVgOVxMy(((;Yfp7VUG4hkJtWI zKeGt-ZR1NF3T0CIzU>1gDPv8AV4D~Hr4c-n?%VS>-sTuk&176ZzZTz_<;n4A@;#Q) z5NSBG!v>)e@{@G!(7q~XX>BJC&P!>_vG-UrnAskWHw3pU(L!X9B*vyL3|5t2jO3)p zy~t{~SyD$FgOUS~#4#{yB~?4TT4Ts$IYZE-CzjYt$-oU5`p*~_OxE2-COP&~2rMzE1+an_~89!`IMG6%9vD{elSXICW# zjt|#lv*!g?_q#v%N-4o=4gNRS@p4+^FnnedKDGuAlMgnYHcOPvYKSJt=_eoLu83yT z7Rt--@KGs3IDdu3@)l{6=2XZaT+lsWIC&jL(_D>ctFhoJ_4Lw1bS;@^K6i_o#iSy( zL%#cucu=8g9H!e3?XG?kVu!yCgEJZmL)iav|H*XIr;L|QZo7u@x1Z1n2n_h`4BmJ} zqlRtL(b8+GKh8mf?L)hgn=<4saShNM)0$%)lVW9Ba5|_^3;o|8z^gu1s64KG8eMG6 zS=;R4wYa1);(Eh6wAkkf$oSZ6<;6V%S1{!{m&*-nZAjztUyHn96-1&JU0i2Wm%vzv z*fQAuP=~T1x#Bfgrg@38&Rt?>9!w5cfGfjgxz;N$!q+A1SW5RQqAEz+z-K*=Fye*T zBE;Bd@`x_``*hbZBm;Zy=x|ayb6q;8w7}C>vkt3ZtszaK&Vd}z0=;@!D29fgxn=Ppx=rowfHb35!Gi}x}k z452kUZ+xc4o#r{>Oc^7OkBh$$dRV-sv+47AKX7H{thfU{@1vxp6e-hhsPfZF4I%Qa1RdzU z4wq6U_R6Q&=*=KQ-loRPMoN&BF}Y|vj5=5Fg<8-3kwpYPuo5t13< zgI*~a=$Tm>2q+G&zzP;2k?c<4wi2ZmaR|Jzc1b3`PQ>?LVGY#$P&zngI^)Febd4LA zlYw^>;{b--D%H{^^%$)mPL$U7Qx8N>5vJ1w%cFO-AuH+c)+qG_0v1CGE8ftczn6 zpZ(qank!Gz_7Vj~bp$bPwW<%6nxj&=OGI+3Stn`uZ|^8_)+)M!XJ7a)A0ekWIBcf7 z^X2)bPLRhq2tUy7G6s2LRqB5@4*YnHb$s;J7}%64V~3nb*7+TvIAr1rK!(5$VlD(b zi6lOkGB5%GE*L;QP|qUiD=g`00-oqKWFO+wM*U7>E`Ff%gbj$kN?|ZA;lr*JRc<=uUZTRjO=yW zaA8)HHj_Lfu2niGWb3ocd1de6@p=bR)Bz8oQZ0Fv?Ru&aP`UJMc78`;_Wt$ryaej~ z{93uMX1ME_N8X~;Jl5LyU5Escz9jxejuIIAqiF~o;Sk&H-rEE z7^3|bV)h<0LKbFv@7sVv@c>+#UklIlkLs@HK`Dh!-~(%Znc_Fpg}TYBlx-d2-(z#* z=xf_vL!$}3NBO{Xy?njmi_&VEw(n{H1a252A(&aK7yMS_E$Z0GL?@0#CSX|l66Xvq z4C5<$8a78VOvuIGEZ|{9`y)NkVeA(q6He=!kUI^956iRYAC}DKuDn}$F7gP^TiYhJ zgt~%?MK`Dv)nc|dDR=celfQ#tH8*ouds=r$4v~e5-=eErD7n_Bq;jj>@!d+EA4l0w z%iY>+XIz;-&*Q>FgLJ28J|K*;5OJ$`A!*`76V^f|heS<*KbJ0}F3q`Z)*!os%vIU4uz$z|82`r>ojn4eU<6;kv7pesQJAj$9j{X zUQ?ikAV?oU$lqqIv_k3*L@;|MFIhUB<_hRA6j4!O);q;LlJ^fP*G+rZY@`ev4+=1& zY^S7+&cy`|oCL{%uU%4iwN9}&kxRUX_MhGgF*YeN2{^*_zkmx&9|ACNs%PPC!fm(P zW%Y9YhYM7H1+yOcwkO>=f0>@G$(3>R_r72b`Lx63j7&Kz#>!+orbR8{ol6xA`BP;N7$}O=TUoFbE(tX~I% zugPIsxazNQt4Lr z7-vEQ%1X#c5Q;w5?l1Caa$fYI`h2Y$(-zXI=n9k1XY=6zYImQgK=wY%rjsTZpsqS< zNI>l%bHsWPt+Z7jo(I0qLmmbC7fUqO#Shii)<*S%LXKNpj7|7tg!4&$!-a|Nr8}az zAW2maQi9XSkHRGba<{v6HLZv0g|+jVFJm`KuV779V`~1E$&%E^=}R9)_?Dpngz-JL zc^)|{g5rl+i74lR>oGM599e>pi{*CZ0IFHttK)vbxAbDkHAfm5oQX+|J}+GbCbZ?f z;x|srS;tjY+W>a3BX{x(J@%`&((d-j%#G0>_Gu00j(2zF3f2yS8Asc}FWG(Ump%30 z*{EkDTQkS+%fWWGg??*Jjqveq?8UHDWVqtrk$5jzjhwz< z$?^JooBfnnua+b$GVRr^uAv8Fah%BH8H%A9U{45a9Hv~8oPcRYhvAS6OV>c|C7Gx$ zj&J+1M9qa;ZC#pVLwSF(9e#A!zS92kJlCL>_oUe)-Pc$~4-m=RsR;KP4(Bf(3rnN8 z90~tp)G}Ul-!}wv^IS0BqJojQ+4#IBrGwVu=>te=+h}I6rhWie_i@9*_}gzl0WJ&{ zn|~Z7u)O!eDBx#2;St)pF-$(CMG&?V_U8v2T#;#_HAVBOiL$&Hc5mV7xLpYh9e*rQ^1HX#|-P)+5Ry9x)#HFaV-JZl0#hM2)7>AwjgY^E%2e z-uNQ`3I~ei@r8oNd~=xcLYr}!2+E)NAh88QNIR!T&MnXy0KDvooU(+Y)F^k5(dC5F z9~U?WvWnWB7uh!K9jDCFwr()gP0)YvOJu3OK$7~_rgFkD^gbc?^QW;s@oE1u%r=}T zlaMkJ*!t&z0)|6Z3TpIB!DeIDpl$3ci@UZ^2vIW4$ed zU-;zqb7EU@mVDKrcyk45@<9(PH7|m)e(7s4fKj}}m158n(7ir*zUK(M0O_mGt4Mq? zQX@v&CuwQ?{$S?L9Dw+*g(zR`n~yX%`(fmx#4=NIT}B~ZErUFrnz`&J zOpGe7&42nndqkkSA|`{UI?*pLDm(fF67Ybm(Nw-QWJWg;p$Sw z-v8q&^+$S{dJGazq_0_TS{a>3Ej73*F%8u`oJpUqko@%k)~#9+bUO)`w7u2|x9vf1 zi=4N)A~N0y`Se8Jz)Pjj&_f8k0KPE)SSV(@R|7g zLZnw)oC<3NSC14@^&Pb3-lM~kBR@D3oM<>|V+AWEqU%5t*rjULZa8j+^JPiOBAht1 zfP0q0sYYb*%g`%WX99FZGUICYh#3+IxO@;pvPJkLjdJhYf=;}!>oH~UK~JW9$JB6Ru`;OILC1(!Lk zQPQWe^8^zen}k29F0K;9XDWqx=(fM>iAAmyQ4@z<6Q{6brOGi!@y380a-bLH%1iMY zU=fo(d2)NQ3v|-pS0j`cdR;ms97vX{*!yHzy(7EeGHmC3?k>ZELV zB@HoSWtxE-70}9y?dqL;FTUjIl}dRxiSs=_K*>2u^y`O2;l;-6IHQPWXf$r_EjQ(P zak1^y&0B)DMyYxlOs%qHR^RJOQHPyB^tWg8mqnM)2HU;+ix(U(DhG2zemhPH?2bvQMzRjWJ3qN*yjOpnT*Kl{u@Qvdp%u9wi>^RlsDjq-@tN{ zYVW+5JPf>t-R2KJu1L&`NGsH-zJej4;Db4cN1Qwh515X*%i)q1jcKyCOyuU(=drG2 zod|hhb^`gsU1W+yqax);P#yGGDIrS8+H}#oD>-j%;s#5h_w@6W3s5p)Ipx6ty7+87 zXzZl~jo@sV`eMhFRD$VjnIy}b^^_!=SZ-^DMyofC&MhJ-z9xzO2}To?As~Y;@U5BK z4G3Y43?lFmAltpb`FDdmu~c^(6g74G`niXoib>>y>Zz;eij{DOf1_Tw zJVBQXudYXDLuzGq@Z%fntqdy({VA?&8(&rWXYN#(*4tX8L<;rEOD4&4T^B>|s6y@|6nHk!FO;MyVUnPK3bszv zwlz1To7Fdd2E%8@(h$~0=PiGU3lBv5Q*a*$f_m!Uc1&{A*O(WhQk}+~wxmu}!nPQM$rQ*$0(wH!&e3-*N^CDl9s~eN75fzH`SHkyrUJ%|E;PUl{UD)AcV6&(-C1=XRQbORX}ygkQayLaPjLfx0z#B z3VO$X{NHE9wt*jgI$u9}1NK@>o2B_CA8Wpri`r+Ww)NLR-QAUT88}4=MG6jMl*R8Y z`fQ*>Dty4h5_aU~0_~T&p7qd)y+LGKKIjUdkM+z0!#a+={ zZ@LcJK9+0W3hGxvn5v!sYUzR~*e;P%KJ!4>ik9U#+(Nz&QHFlX=QRO>Bb+7?b^RtE zH}A#-x4PLE(?=7RXxbVMhr>NHOWA9XlKnJo;$7~`R;y2sJ6!LaGO zHE!yJy~&YhUaV}H(Sd2{N8)Iasl28C@VzC8H!x=$@4g0X_8g8+qVA%zT!McdFKb<$ z5uM)q6u{INo35QcwbUpBNg9FOW@!Mrb8xx>N{9saC$1qe=^Ak32<7T*>3UH#2Q`4|2;lZuo2Dd~^6&-$J5?$F1#&a*doLvZxIFH_f> z21e~J$g2#;F=VBdTK`DkWaUdbvdi&^%kz`ro0>?I43g!ml%$0z?@#-+Vs)rMn!@TU zAmpl@{`0#5GY|#gx*Ga~B^bt8(c*2j%vPywM7%cbzi_bp4ABh(qF+Itei^uX@rRi_ zIOrGqxE9reXX!G&=N3=fy=0z5-a9&X8Q7Fd3c2w%qUV~FBv3{OF=jb3b7z;$y0GbR39ySZ-1d^Q zYw>+zh6UP}TZAV)x~yU7%O^PE5F?L|bV9M~^x{Er83d+np2|gRWPdgmh?096eW#>} z62<6r7=9XTCRqeA>tgneK^vHPs(}U@o7kE3=P0jH+kT@ZwdWN6?HPy!e3fUHgH0 zwi&wA3ZcD?DkR)E_nKVvJG{aLGE}D`+(c-syeZ~**zv{ehSncB{k0PNf(9xiw^5CQOtWv+{O#_+EWV2yw%R6dzKi;#e>VGX?iC?>sS+tqTDQI-8}sB@<#5 zXeQCZRIk=XW|d&>__C&mtj^gN~P63KLR!XQ~8;Yya#>* z63eyB-xBH;_PED<4YotTd)=L$C1pzxVH!PRmEE+yfBd(Ql*>fYz44!CD}gF_d3L7d za(@%bVc{Ro5EcI58!|3Uy70#yBKJnGd=tsw)kS?K5FKo|{KNj(7Ael4#l4O?bVF5U zF*%^kodwfjJ!?cvz|NFlD_L%Drp=UT#@)BcIBOYg(F!NkPan-kNK@B1_rvtOD7H>X z6>qPmt2&0Eym#5}B=kHG?GxHxv6^I~)+s-WWI)}vvh-t^k1K$BJKvlhHRmQUXJ4&B zQ-NAH@bRSLuHaz8I*KzB9-I}IQ3E4MNR#m+!5M2V-B}e&e?E$J-~SECq$R@$%O?0 z>cgxQ1;<_r#uvWK${1mXibcogup$@}^{Hi~KfPj5U+mi+b{j_H@@ z7`r6)?nDf=box-4>Qluq^V{ncFX_fnYwSRKHl8&UH&Bl$ut{c=%$+D(^AkvU?k;5$ z%^n6_@{rI?y`u0!2(Si++aEOa@PBnQ-3hHMcLy(wKALuAtiA~h%J5o5XHF|EV$S1k z)owAdhiD3l5Z%dft6OGSPw|gplfP-<)9VNp2q`ZyXPn*}@T7^gSQNNZ&$}c=74kg3 zexut1OW!FNHuJD8hLTl9`YoPR*OQ(?hWzsODP~|OYv>0C_IAp&RG`}0lHD0MS7-Fi zW`^rhCDz1Oxc%CG?(BWZ6oE{DyzmmmeAI)XiPR5c*|m4{^wQwo>f?6p85Egt*c$gG zIezI)dLDVh6kB;$7q`u){P?-w2Gzq$K_>3^mw8f_l*~$QgRoupvNHXwZL)mRMx~q; zCCrLy5#y`kj{;Aq?i_0scgp>HHYK%~+c;kP&&IVy&2ax&-i*`+^+wyva|?Nqcpuk_K4^m=Gbh7^S<1*>veW#P=a>rUAO z0@Gl1FzZ$fH73g?EAlAeCm}~FRUl(Phue-e-m6Ikn?mmqEqjvExC~M9KsfM&@AWxT z;aguNvWtP^yo!V@2p8k*NFJToBhf(YpVr%xhF961?Yt6;k>$3pV4&zC>Lk>bQ`76; z;o|SzsR@hK`WSn*Yu3+Yep+z?-c1@Zrw@Db#?+}Bz|Nm_T8JYz6j6uxMzD`9M&ghUHq4D3;@0O*4UHz1Wqe=q89OUu`B7rn_dyTQu0%BMfSGVoEOYV&2-8#^ff4ZMlLw;@}o zw``>>$CsUSK4cOK@?mD`dJAGC^ow^Wpepm=x5n6?5k zWJzL_$V0M)XY1mJY73X5IKk(PM|oI3RWTXFTD(~lnxJ4_WwA# z3cn`bw=0s0f_#Zdml7f+-3ZbGA`(i6bT}9cMu~Kbpa_gE>5v`+kr*ALW1!?lYy!i< z5P0`{|AXiAJokM)=Q`(H=dx>mEExRrug-V@XCdLF(WBswBdxRa!_@{(*XiewzArZ~ z@d>%NcZqy9xM>mjX!0xp9?SEm=5f$$9?LfC!=dAY8vT|Y%T%t4JS_gXLviMf?`PmPS= zc?}-0Ev-NKrNY?tq6`Srb31~7;Pw}S=DoKYLuBr^qB*MBPUM$LlfL0CJ1(Z~nH|hl z;v{2I+AxdNxgAQzYmA&*G`ol4M-!H~T_>|7ys%tr%-AN;aSpir`?5csaTj^l>Nbd? zbFgEL1gGRgsP>udK|hF(-CXQ-O=|~z7dbj$Q)BnZ6XCipv1ieT8ZVubcuw=j3!IO-sY+94+5rp$O4VyC z8K=O=yDJwaoClfm4ocke&jCfE@~Jb!Re~>jLvDj+O46i7I)i-u;>1?)uJ3+O`Cw=B z*9aIPO==1#_EHuI_U+!!eCDJ6P*F{sPaj zNxtLL_1Zn|{I<`v8!8VXPgORbKTDb^++2lYa0?r(HV<08Mzs_pFLn0W0C!!R20~KW zL!~9ZYh~ip^a^_lMP$D}Czv%9aj8IZu#=m0;vJ;D05>}<4TN7I@^leEQF?qmwm>oo zlmbGP(rP16%i8%${!cON6ai9SF1WyGT{N$@cssvBM(N)CA)l~{=g(|;H^~VFBZ^k9 z+#f8B`VqH3he!{RsT);;o`f0QaXkj6>gr67Jvmmm4~Knk|0_TKJY>pzgt^Q3^+|i> z*N{011L0ykh+|=|?1I}c&30BD91CpLqJEQA5@?SP9jGCJM&FOiDkpLGHQMSJ8=iw# z{5_wNwN>@m>O#CQ*tIGobFO5VEPE@k5VUZoHL0lXZNq!KRKl&1(9dg|Zfh8~xv%5) z`B5R&%UoZ^@NI2^ozFh~QZZ-C@=^!RdM(zKe;}As6D{KEij=mTobfK(jrS41yWo!R z>f+w9GmoPG{V+bEU3PJKnBm?mgD!n5!tu?+2g$znVB!b-5GZ?LVbzTz!>r898HIU$ zcN5q>Sm4-~mrNpuD=ChvyCnsQJ&Ro1^j&;+kQ(PT_~y~lW*!grGj>bp;Xgr&i3+|% zaH0e4(5Ba~4IQ2!V__0bkZ}ab>$TYsW4)20Q;lZS9mzJ8xj<{`%G z482OX$4;k{+V7ZFs9axrH${N;qafqRE8=Ne>~uO(B-pighj}+p2;hiMiHwZY4>KbR zD|{h_Q0iqFdCOX%|4WQktHuM_(>f#XI$)kcim0Ua>eNdEp*N*N1>w&D1r5`cd-Cg* zj$Iz~{=^vhLLCcCvu*^LDHvGA#-4=*W2Qp|{-!2nVs|ebH8S~GN5KCpzxV}i>kb#z zJb)L=A-}RNVPfyKZwQOjV9_)Q0jwJid?%>Vw3#zKL@rfmUs?twfQ@+!#i~nr;PT=BT z!^4+~52aog`s#?fSzxG!73 zm`DReF_X!>f1`g4_y}rdzYpg_HMB@iMRbG}uyT43Zu6?V%-ucY3zIdX^897X@pb6I zf1SpdyABUywlC@j9Ewudcb?5fo0>@`j!wT$N(y+q4*a|}Fb|{%IGw$*1U|&-Q2o#{LEGVA@9yP zObR)v+65d)-h63LX--Al=ZBX&1r#aMT$En&Ek-N0kpz>NhqjxCAD zm#B>7O+N63(SB1csyehp~lyHF*p0LsVp-5G@lH@_>$uti|hOR zHp1@B4fX_eyIN^#w(Wia&V)Rj!?%;pRJ+)DT3HizfUXyr_#*eV9??{6^=+1qVt{iX z7b1HUpWnb7qvCx&?6V-d{mUkI$dIvQGhjrw5jQn_V?Ah;ufq{t$qZ<&x535g!uiV&l?$hfi+$bZT zGVKlVB)`$&OC8$*o3 zVOGz|7C64Cwa8(DhGXy7N0P^2XCsl7NAE6-do_PQHON#BME3U?3n?b#*%2(5e{OCX7e9T>K5>q{=k+x)(9Nu#+aifcIJ=(7n#JvxEI-(bxB-I+I1{OO+ zS^>}zFyK%owpp)&UzQt#WfB8&SiG{dix)wq7?!>Zl*_IveqT^nf_D&3HW+(@7q@El zk0h7fjjwg7vjT-5zql*v;&tTH+`yoXBPHKOm#whN9?WD_RBZBPUR>~NZSJ|H9i z)+{!2tUpqe(o@DeKSM zsfW9@2=mP;0gah-(-J&W4ND!4JFfcTm_LJ6(XV)}H6mtcbfAotIA0AQQ+ub*zj3z1Aj9E((%h}$TERD;z4)@=q%DCG%1QJr z+@VEk@29+vCfo>*2;G$pD`U>Ds8>V>f$PfuhF%coGXM8Ebm*1@@*-{Bwclgo?FoNo zcL5*NE6!vHp?5?1IK?Y(aE?N z@{downPv(^zDdi3NUQ&RfxCYjOquK1%s3{4q!-ClyZ0hX0*9x@nws9yP4k)&%$|1t z6E0YWpC^^XdY8Ik0eF1o+8tA3J}YNG(26WcS5>=>)r-Ln9EDF!@6lLNJ#Z0pCHz2_ z>r~VqLf1=AJfV?mG1YjJ=1^Hg)!ycF4rIh}Gw@@(n_Hf@%MFbGq5o1b8Z;1*@oHjH2x6w2yk^O?B2`XD<)J!f-I`t z2(21s1TSYe{W6^}OAl7Hhl(f4!e{Kqg(wMIPy`v!d5YBVoNl~GEDZ3)R2&5tbE7yqk8U9!tsb>*t$%7r5+ ztqi3xQ{`z3K|86fFB|;`T1Z*-Y_j+I*3rhf|6lZfFpi$fYF;m;0mib6OY-+7irzOF4_;OkHx~4JJqV`-^=G$ zOe(0y{e++N7HgsddE{CI^$YGuW9Ai7nQ-n|Ys>0te#X+6E<6A9{B@CRgF;WBwb1u6 zp3t>Zrn=wNn`0kpd2eQFEf%NYp^RH7|9yn{l2BH|`Yf{*A#c#BE4KO~F3(QA<+%Xc#t+>#mCmeHM>?yj5LU!3 zsl_Ua&J5(%6Qb!3Xm1+xvDULI4uDCu-O*^0r>kFh1@CS(e`zOP^MD1-A$>DBwiM?HfG4HtQM75FRELl9<=2R3F77nO(8Ep+B#iy@?BQsMXT zkIq!Ix9Dzfm94#W_g>=o4i9qRC}h~Edb>c|nk4V7V|4xDuV>;SKMX(h3-0@9-r^Az z8q2VPz%W>O-n`6;i-SziXve9-7w@cAVbhRFpHr!hg9Q>nss^r)!~tFSt%RF%STlKB z_SSr0QGoGtq9L3Qi$`PeT`IWJE&&yOOR1+VI5fDkG4s1#l=lAUz}`78P=_x|1VKuMA9-}-O-MwuL+PXqBH`s!uNMT4QS%R>9Ra~~e@Hy}a#InlMl zS(8o_rhF3tzN=&Zlan;_Q^k#W(_2&t7;pBfjblGrcXC zO&^a~I}dJ{t(K@;d-$x=rrLCHk9Lz5rkpa2d5^yel*m$CO|T&X=oM8OLtbWK`7T2x zVrs2Gn6|@TDrI;UN@9pq93a)hesj2leaXo~1QdC5EUGPx$=3<~e!%(e>g3lOU*Gzl9omYLom50N zFedj!mw3|G^0%vHgvm&}4L6L#_LaI?O$Dy|%^**hyLcwo>-ymtmOZ3eXG!Fh&vIGY zgDJIkzjdyL6lF*K>+3#r^$+x^KH^!)J)AgsvaQ%3`cW2W%<`#GbTj#UmS+^tVffA8sRSw#2Gtu39~?=&VPt>M2O51 z-F&~4f-@=ogAYf?@0&FjZOXG}FVdFd_h_DgpW8LC{I|=Q-WU4ZtkZ zwtgz0$3X)89qTtn8aAe!-O$EQ|@I4&b&F`pPcwO?Te*^?_7E=%qR-iJx%)4qOyJQpc=R z#xdbY95I|Z@~S{;sx)m`ATMlljRI5sVVOIEd!J~nEhauQor62_@j)gjC$qPf$XnMb z2~ARRY;oAqzw2z*)6vFllz^neQ}1lVz8_)ORz*78r_O_5T(ircS7P3Pt|-6v=TpC4+?-{BjIn-3EeFDDh32n9EMLh(Z{C;ze#90F(E-?@Q$a z2k6anoMGJ6pIhzEnl@BEBU*T-?5>a23@M1;WHL2ay&Av$wiT9LuL)ns#XtFBSx~9< zydYt8II{TQCj4o~bLE7-rI5L2LavM(*;fcH$awd^jtf&K4xPSsASmawm0cu|5FHB| zH@@0sZ`P3J_StsYoo+z??e#!NUM%ob|K$9AxS}Ez)iN7z2w418%Zraje(yfk$#><9 zkKA}Gl5UVWM)47=fXL>T{n8uA+n6R2T}^#u)N^Cc=KaZ{m`!gNA}OFyfYW=+mZxal zCO_3@(T$^meg;rdAxgC&ly0^0J7g?Xl;iVS*x%u!l_9iHjvh5mlm>5yerZN(ZSNlk ztpoDvSr9yV?kzN{sy#1gNMckF;0nkSX{LU?%!GB}kn?(%e-Hgj$bORszH>7y{_a{Y zA-IdGt@`V{w6kTHL?B1o{CC!N6P*B#pz+62Q(2XIzH+)awSSc3tK6X2f`>7FJYe<9 zm(bJik?cq;6=kG9T^Rv`Cv*jrz5EkM*4gz0GT2Q+D$T+E~!+j2!U(>~WZ4f8Ba z!}#v0+yiX#$oMJ8m{Rs=5P#|h)+k)dEB$*UQb{5?rRgzu2gUWD|#@P7=E3feH()B@3@%k zhBNV_OkhqgGM38O1EBMrN}=6DzeQ6Epx_N8fb&OEqB%n=lo7TX#sm=E4o5dFEE052KI0B&5dc)u#f^-q+fYUWglr~dkC7mGL2PF-N- ziB^Tuqs6zmx#9QEtb3-#|1;$8u>^g}`Laj`(JPhKdbhS~+wye-enDlT$byT|J3(5} zqq(ht0I#%oBy-V%`=2Xq8^s@7kHDOW`Dr0)xC)K(zFUI&9coQ$hBV zRi;Fm(wmeLP(zrkNb6`KvfxJ9y2-%BTu^Y> zw9g`}@Se;^C-bbOs=pt-Z)z^?d_R_i5YEIKfd;otOPhO(5 zn$utFi?$8O1g`kuxrX&39?=GmVr(+kp7bZH>iXUaa82jpL^O`xv1yECZqDnR5rf0w z5kA-rE!JPfLN*@j0B=9qIjr<2t3-z3;Ge9sLjhpB&ZB!^FR=ZwuDlTHePJowikAX}$?yV1yXU9zN6X{gW{iqDkY($GJhW ziM7I~&AfqYDq$p#Hh@Zz9X?vAB(o>UxA@e&9HU$}_x|eet_M;NYg7g+!$Xe7t;-rr z#UDWzEJ)_Tzz&!DC}_Fd$d^&?_f2m>A(=j@iyw5sbqj82uGbB7KRYl#(1Uq6@mlEFo*#?>!|3N2(+Nct(y)GK_ImE{g}2z6 zF;odC2zT_9BvCvU`Aem)E#qS}_MCd~n^lBMC4E*uyBLc`RW*h#dy%hN$sjBX@&`e9PIS&q{cs`#;Cn6tWO}phwRtgN%93s3UYDQ zMw1Sg#~;JLPFRRa`e}%?x5>?_&P3xYLMy3@h$kV z3(3m^X-utdEuOH+{0!^cX!rjfEk-}1q#e60ok}5f6zXG)Z1b;cgT+9^I^VI^-zrRt z3ZxQ(kIun#%)O#+qSYv=a333P^AlPyEl7}iYJQTxb<1W}+=*7=>wvs13MA@T+}Sec zAn4SzY)-iP5TlPcNF9(Al(Z4408NF+gQT(*J(QSxMiEbH7Lf9`HUj1-bxvo zmfuB4w0IgY>2&$t!*=_6uIg;yGKdcp+(*?XKjg`myO_bYQw37P{7`<`mHW1n@lfJn z#tfl6%|EQ5=lq{6s%&4VwHk~Z4)G+r#2D3qW2ZMb<;pE^**d{t$Z5d(dsoSE{UH zAjE)-)c&~&djh2mY&r!%ijFfWf7#KfyG4vh5dm-`PyO_$7b_xJ?BkT{68HhXPL6;kFlu?5Cy-&0RpzX$a4}4BT*iNx^w%6MXto`I zR-hst{f4XuorMb=aM^A+8k`Jms%i`m*5;}y&mfqS6XUe8siKN97{km#I7XU|Qi|;l z+rjdi5nzT#1L{s$X;$!m7CubQp?(gyODRIZp0W|*?%QPH<2*SZ`e7C{+Qq0j^2PGaCOh>d@ZyE3&9bDbD+L|;c&>C zuD1V3ZJt9ez6LWLa9FpDmrL;`TW_Cp%=>6txwW#zmsfEZ?@8=3;=e9xK9g)cg~8X-bN_o3;|LJFk(ti-2?;C%w4q44 z?wqPj>0YO8u}ERHu?-9WeKyy`JS0i1-9u@>Ma5+?TRZ>*jKb#m*ga}+WtA@(oO9Un za}tOhYP7ACJJ!F4BHLAaiZ3?u14jG*y6}k%H|Y_l8UzC1%a=(;$6x(C2*QM9(ZB86 z$gPK$*7;pEs<63>rYaPyUP!;k`wK?!>eEXIE$N_G5WaNix$5h%KIUj(UXPvzM$m~W ze%qYo9&<404UsA%Z^vllHK;~zv^z*9vkTP3QR5U4{Kyu_x-3FW=F@1fg_v=eNMaGN z(Vm?naTXhx)O|8zta9V{W&hcwvv0jric+vi&yH9=^o0F1iK|SFC$|zU3zzze;mMEa z0^`<_!|TwyC+r35?Z@YRB72*|K!23q>0XDDg{f}ay(u+l2e?)z6{Qo8G)trNh5)Z; z0^bygsMb&2$_*fKnx!XFfjjyCP|eM`aSt zC>vqnGAG{Yxu6Gr`3;+~wbu6#RW~5|`dP6rC3WRuU=hW(%r6xj@$oL&iJKnnTHH83 z7XY#yEpOCoy(<$5)%M(e6@`6@5=I%{ESt2Uc$0=f0)QD@a7X`DmoE?2R0{1BLlQrR zQv$Ef`@md#oq1;*4{#P{x%ozGR@CTnJ;6=#ffODXEIORr#{1I-yJd zaZHs~k70$V`_Y<*dIW*XrXl_Iymezba5Xmw;ovy>NN#4K=!FwLO@72OACYKpwp}G)65w zXzEBi&5_KW9+5X=RmOdd7Z7WDHK_2ycZgs1w73*slVF~Lsvo%h%b(>?;craJ5Xz<$ z?2t?6g0l&atLyGV)*Ae~d4I!EH5xB80p!^=+UlZq=j`G?HRtTdy(ef%McVNhEtsB7 zapn?<&O0N!74b9c(*qY7X+!_9BoeCK4;)8tpky)pHQB7f^W5pIkF}+G=P=>-kbkWytToHDTec;GmFE{Sb?cTNL>3&zKvR z#v`!!3ZGQxr=(M)p4}fh%70qIaVi|&)=&k1Cf-id{myFFLrhyQ`s^GFT2PdcZ1(at zjhM|Z{=2Hr)7KuUM}VnvK}vz#zqvRsK(h#DLZ^Lo$pwX$!ffs&wZI4~LmN60HCUQO zOR4s{#pEm64e}w|BN~|@zI>%aRl%-J$i*Lhqx-_KZup3?m|c-@Bp>j&83Vr}KMCyd zQ)6v&O!|1?kc6MmGJzSh8tE{n*q<82gUk>SB}C8%qEeNy+?l)&jUZsl@&$riB7cDO+wPLu#?PsH3mUI-PxVT{o>s%EQDC#totw2GPSVj42ysV&|2x#V3BQN1?lpg%c&< z2Y=DQism?1W6Z`SRq9$=#$2*Gky;pOMNT?4vb3!xZyI`6Ib*TS2J5C6TfvH5GvpxV z`uD$|6c5UJR&O_SINh@P7>sclkmXH7Qdauk%stDcAXA>h3H*o=LZKQkR&zN_2-XZ% zXFs*-6qW6+s4QF2ydyKI@Lal*b_FtgAK(%(Gr)&DN4{;$NH?lcW&REFhpvIYRDlQ3 zi8E>I+PnvO{BF$I0yV9-r;PW{wxqh{Q&&-qTJ_{p849SQbZ6E2JJRomr6lji{Qzb6 zy8K0tVHsmm)At$@fcNWe^IJ|g&8%aqBIGPEISc-c!$~*X?)csJGv&hDVL=LkQ>)!l zB|0gNHq&=rLbjSHuSXJhC?)_Yh*yGg7!9%>=T^OH0C(Q{>ncSjF`R{>784isFgs7d86PV(>A;pwsAhaPI3<0GN zv3!N4!MM@~FHyM&`s_^VoFRGvCBs|#1$}abtYR|(tdmlT_oiu}2H&JAP1CyFoUF&r zRMatx<$Y+>*xKo*6z{c4;|RHJy!j21R#6q$W1qaqrB%E6&7>X|mSJ0JUp^Ab&o~gA zz4>YYQ{^>1ppkcgiW@hiWkW38ICW@zJxO)PwQ6ok4}uoDtjy~F+ss1a--z&*%*?+7 znkmnH+VwEFGpGa2gJSwq9*STOU~N-uao)libgx`I5L}a3NV4?w zrX)e#CVoBRKq#7Wpq1ubLSwdGe9(QliFD;aT%s2;BNy}`2=joeI*X#fDFf@at&vA8 zHW?EAq>*ajWx!GB)8<7KgX6fbkGSZzxKtx$F9Vy6jnmgi(XN59+gNQXPjieRs%RnU z+1}|$H)r9BBMbUTex*rZ&+XKni+<(T&seCJ1r%+EZB`l_KN(_l2?s$w8EXkkax!}oHSVI*jde5ap_CGa%vB>S*x|v&Ze(ift;>Q4Z^e8m?39Wv2VkJX0Bv38yU^OFo0ZvJ zQq;|lm;Nng6J#8J9#Y@^S}=LvJycJBrv}hm`D<6%NKp8I+{oco8H~7j>V!x|y_zi2 zj5Fdyp2gBfEAn4*MiYT^q%Dvy5J_{d_!e%fM_m41x;RjMx*^ZrTi$Jny`qw+M{mhI zg9vEje59;K#EMpETkDlrB&6Whv5IT%$beU-%z%T&wlZ*^@jn=8@Z zmj~box+!m4#qOG8`v?_s7?iq_Eq1qZ_CD3m0U+*f#J&nUfrj-y(cS z>3(4J)ZrrP>kA&FX*@TmFyb9)jGnLIZGWlgUKV!zwb=Iv_QV|mPYNw=`tUsG?mLDJ z`JKNBw>%Z4cw!GH9*ZGMcZ&y|wq#+h(@ z`Ri{k1wMK(hx6wxosqTS{r4^+;$r-QfD?&dm%B%;y6}SfD}Mp4QN?lI1!$#|99dtk ztAr#vO9!;XUYKk%5l{eYZQm4sUJ3u3vbSsiz!;kYJgeq@Uc_27V)L*Z+$fFg)-^XHq6dYi8&55%?x|JZK)dvkv$ z`cxzis%^t#<6zVGuU#p4VF6Q69!BgX`9^%}|E!|=tCl-LP|gi=1f89r%AA72D`iF} z6<)rXvOP|BRNb%mJph$vKIif4nTq+o zkIx(VjiM2gJ+3K!*1c3Z+x|y7Oj4SfelO&NJRr>pTGf`wA6a)wCU23mIpaH$kkKwa zK8Bz7@DfNIcN3=~;7~ao=7*jVK3Y`e93coIV}9yxVW9@;;U7uzQ2$uikbTr8+xgh6 zWM0DTlT*2`uqak9|HAj5LjlRiUzCapva4jOT;6Fz8g6u(XCp&W*HFELC zC>*yR(C2qJ4K27ZAZS?ilGA@+hi={Y2GSID@sx@f(IoE^?OmYrM<6c*q^d8DUB4F? z&c|rku!L29lIp*-DvNd&+ZJ8is`S_j9VetnNs7(!tgM6t+&ZnuEVMm|ZtywsNt;)Z zBt^U}=4vU{FB%tnxlBl7;(fb4q%1AcL{as_dHFCXkMYk!DIK~NvgW1w``b=zb=q_+o*xvuL?Cf8j zAiWl8OC2}`Z%+S4W$1rpC9_wS7=I{uz-KeLnaJE|zheB|mRsn?AUS($>^GA4s1^GA zs%upum@egmuJ1V;=!p|oCB2}+v%%t3iO%=IQv&lMt8t6Yw~gO;uBC>7jS%WtpBR3U zcRv-gDCW(B2mF?`3G?i!Ujd~YUo2Mee~+`kOgyHWx}xjGOJLg{uN4K#@pUNGhHdy2 zMqc%f8Co}_yk~#R)i9^?4H7rR@_~3&j)P>?c@QiaE#pSRiYwe!{t>aFOxS$FPz%w~)@b@TZp-1WE8BK-M&}&`OpY>}`rIOV!E>g#zQr@dt{1m$! zEAo7!r1>9P6qwRaxk7b3sZM^>>H44*_vC!cCvW((Z##wcuu3`#$BP2f&Auou@KSF z>Jdb(!a@^Y>h$)U0T1x?KRBO%r=@srb(Xlz*b|iUjHh^=d-T3sxMnl?2=mZ&Z#pa_ ztdm4kwbiX<&nQ$4CvVlYx|M|gApLL0ExffGeB%5QpNKfouf68k1@BE(&C##s z#tpL8fS^2ES*pf=Z-zw9n%o9GHYsxSw8;&X57!-)xBZk;GUh@=?bRDakD;O3gc$#? zn~p+xqknm6-(__8%=-PnyD-4j%*AlxOaZl^{}og%m!BPTD;NzP5klU{D3Gs0Uel^ zDrs0BswqtFOh`4e?dl(>)n`?H(&?#owAp$t^Wp>nGDcKJ)(@;VE+eWfa7hjpJ6aq^5DYFee$IL0|yDTTpNmhRS z?auDn{`J~z)wOBK>w%sMLIpCbid1mOsBT*htYty3IZdos$3VYZb3Zc}<~(Co7wv2Z z|7OlToHckz=1(4A0-I@z_)!U^gh>?t*$+B~RCvn1%TFJa>J0VmeHTYghhOkw(38W^ zfZ84SbF&4sS`Q-F7C7AAIT{F5>VcnFxnU|^YY>Q5Sa>) z>yBXZg#@6>W>nAh_M^S1le2HoL7`nsN^z)DOu#{EAExGuQ~~;*(U|QU*bbQu3-0U} zUgc4&OuXwiI|hqAoST%w0ET|)IhH092W|-OAwIp0k2>uFe>u)Le{TrJysJy}1Jigf z*~OAeb^0KuU1OK=W9CR{qrd38!I`!aIjn?N%pd;+6>ctQSTW2tI=$}E;dUu?g{PB* zJ#PnfQ^rB26%(i1^atVUCGFk}=!)np;NFVN$Xgfot%fhrs&&q#{zC`wo0zz-GXwOq z<$^&Iq)ufhW9t659`bG}ZKja^z&-GrS`!k?yUHDO=)2PrhP(lt_!#iITT|7@Rsw^L{5 z>s(u{OYF}jw+A?gIfctHn)-Tn4R+rGEmrT2*w51aI&;q#8In@rJPg`e_d7D1#{-%U`fcrfW%Z?uwqv$~Xy|PafJw9=~!1~l73AgcP!jW@~ zU3Bw5a=<@hYkPgWZ9OdkmeQ#+3Uu0{B_4q>$G6S^jCQmcmcWxI(7Uxr|5jsw{lu-W zo5B~ZF&z;<6@7%^gO>^zCj@`G_on8PmK30vF1$b1H0sV@TNjeStjw?{NRGx;_&_FP zoaN<@Nt#jJq6ljJ3QJkv2Nmhzr=Z(-ateGJ4&|K7dY8+A!{Qlyj2&8HL4!WI`vvAY zKhC>iK1H_Np$iBB4ev2(DMfoufSV2PtDTYQP*2L$NY_?Vg>5Gn%?3`eJy+=6b2*_( z?mj%l7y}W1XUE;}t@{Gr!3gJSdhCxJZ$Ze(llX4G&QEbxvYLA=n1u=J8F>rt2a((R zEI)()Jinafopcy^g`+3iLlksrl6P!IrzsI2Nrk>y|@my<5M}H z3!(gGQ(~RA<3d-t01qL!U`d#1Ki7aTrS#vARLhFJ%Za=Q>hLsY4#CWF%s+H+BMNK zkxb)4kNKTy&6m0HR&O=x_2D7&xT$L1Dlpi0CDJLN9u)U6Yb!LX2xx!8IbA_M1k=DW zxoJ94;~wV=S0X5y-2n=U&M<-J>)FV+r{O14 zVt7>Q&C`>Qt$R~dn*VLi`3t@g7~1|tei zdTT@}lb5sys6!kFtDbwiFV=R>4a$JHa{1%rg1x=96awXRM4zgmp>W_R6>d4SUij2x z)SLQ0HqXr6FVIDSc~2WEjE&Oc#8Zxnv0jMYkc07?9^D}0^)@a)^}}TR#hs&E0`rfH zi!_^v2%vkV@zc;M
E=q!QL(Tv1dwT|O^{eFr8r?RMKRPXyZV>P45aP=K*+oV{5 zgEn^yUHUW3Ko~7*?%KYl*naJdeE#q@TAMvf7%_`=;}9${f6eY1Rsig=6-#;^(06+B zdcouNU$mKI@+bscqixKni3yDJnXsh%(Pp9!kS;vV@~YBXVE#u}Wcz|>G;38S?beE6 z*?!pN+h{a}zLS)k8U=37MwZs`tgWrBN7#^c`MbM&=))_BUxD&Zgm4~mj@S4MgDH3v`>ZBnULHE#vB&)V-f2^&gM+HeO;XE4y6FEAOp?B zb#D%K(WQ@@d(+mep{}af_ zrRnCHO=(v03nMDYkzWGxMuJAJfQ}3F&9Lh${P@-W0ssKWQdCl6{wXs?ws(6sXTIV= z<)*)$1vYVZ@+PvSXfvS2kzwE#f#Ud*9h-otYcP8Hcm|?)M)&ujlzZ zpXd2}KJP(xXvJCA*77?&bb=&hXY;(RSvCEAaByC0H5NkI2GP|amBn$E-!eda8tMJ` z5kg#Dt2wjDW<=MkNvYgH6(?D1Y39S6!FLj)jcJ4F8qBj*nOzolu-RubViWTBE!Y2% zx+KD~bQ2n)mUGRvuba&J)16h$E}4gSfJh&hcS*2w-~xSw`^D3w*Y`r+iEo}2u+=J% zu-nbTOF71}PSoDbKpFD08>Ogg#N4@jU(nYd)#t#a!rcPZ8l!CRpJc`!D~D2dq|WkJ z&LH{HwC71YCBrU~lKvt|+!Fw#uGaOR7dfM6F(9O4-_?_czMk1}q0Mc6d9#h?THhMo z_~y0AIbn{kU+s2nuukFK!-PNV@&%+LSTMjDRd;uM@8!nE@iBl>C!}^jyCm?({0+<( zQ0nAw`Q2Nuav-hZuf1Zm5BDy){qln`+7w(k(sm-bGI`|%+$S_++QEfV0&E-%Q;?1a z9I$_fRkc$npRYpo$J3XodXkQUHdNcUxR;*D3uro-`?*SXGA^Z#dflu@Y;rerzeh5r z^OC6WBZ*$9EGstw6RSN8131)48bFY=R)&e+28wqcS((e-Q41NHYd+~+dom%jYHonn z{|~fw$RqpfRxHCJvIxKk^Ic;+FU+{#npQoKHqft3?+4YNMO$iQuAVB|CLWx#$lB-g%jMsJ~G|O zG84Gmry=z!!0)E3Lo4~hi~PmV=Gr709_XCA+!$=3n!}_mh0KQ@T^txWDnqw8cp4OW z4wTl~J&G%e)qNTUp+u?5NMK`58tfi&7~#&M+>uYDcN;6KbJ+gf3pnaozP^M$A6q^n zUr5eu^u>HIc#GA{XxY7oJ$1ZgZ+AFC4aKs6;%*gsjLQkb8E3W;w~m6s)KGU8$}Bw6 zLd{jh*gp3K%1DL5nhgAf)8^4juop8tW5AZur83vZ76WJH)o{7PiLbQ!nNEA|)V^JS zuZxd@ep=C6^E#S=PBbHAy5=b`#c{@~`-A?jwZlewwR9shk-p2i$&Ow*F3KyWhRW8}o| z*Zra9C0|Z|6?xx=)r4Q^1xuL$ID=YwjAlP_+6nJhe*|DuH(0h5=H55?*>3x z5NN3b8YPU)!$?h;uYvL_2Y6=(>USUMr>ce@F|(odPJI5ZdxbZv_)}tEN^1{T9SQQJ zPq;X}YT)<^ds$FQ#Y|lgeJgkOM0vC8WNvDk2?MMH@l~#`T!z+L=zma%czb^TD|eW|m?8PpVU-}hj#e6-!Yk<}-;qANO2ftNo9>A?Wf;p>D72cMZ2taQr z#2U}i)q-?mDNWG8%ygj_K$B&oTE>T(Q755h0W-88~UH@ z3V1GOcXq%)52g`u{MKjt!c|`eCGb0PzW+e~`!j<$JWB^`S`waY(8A176@+{4K`qnPJg#hhN)|8N}w* z^l!=gcS9PJg=U90tTMYZ`nlq!`>|0hy?}$+$_Jf%>@aC)#X`ObbbdCCvyB%&>$+6F zJrNoHLJNw9B)UJvOMB%cN-K^?_ftWxzvwxXCt?E!vtY6out<<2dr1Xx_sxDVW^$5r z@jm5R$qzIAlqA(FV4O|I%$=JSK+>;uX#3*7y=L6Rjcw_Om~KA+%X<5xY^~{{c~mUQ z>iPF|HfPkUAZa%AVfoY)$ZEP?sCaKGVrsKKCAn)tsDndO&(~t|u5|SDlniSz@ zhj%x`wCb5%+(hrh+~3mwV`Aow#s@tv%_K0*{kGz@>6i*SJ&;WE(4zxOWjSE5h)$vJWd72!I~&Big=c{%?%w-{Hi z7GB|`HL`su{oOQ46oCX?Rd#x08ol@Iy6yj$KCtn41NVNP1xU-bCC6UoA zAc{a5^+#9u^fmjhzKGZ5BtLt>(;VwpaI(@Bmtgu&(t>{(y5j@e3*uAXwdtqg3;#)H zDmWAck9!9(YZ0gv>oM7%kCJx$87qXkvC6ugn|e>DBrm|q>CnAUEZ@FkQONWtvPo01 zwl^S#3}s%+qQVz8;6Q$XB2h`cads#tWMdRPMy@HovVUnm(o*BAv?g+dIT^ z#x9#nK!Me)s^(MS>+$$ltt7aBq}9zWNVD-|^rv5g<_)Y22rNu}-@yNGc)mvXGkV=Y zI{WiSJMaLOtvX$!@L+GPr0qgCsiY+wrM$7QbJV$V&H1WUifV#lL|6m3!t(+%?3hw=F!_UFJ|cxaT@~?afDetJ|#gHDT;6 znK2-!h6gN6ngVwp~wG34MTH;hQsLujnrL8BZ3;dzp+Z z&=AAEwBmQHM!rqRCM6L7e%E0f-H4G~>eO(<*_6e)a83(k*=xy^ONV)-j-^kUtZF4x zucR{7RA6R*+ai_kIeKQ3ffn)^CeA;P`=$eezCFLRBK54Vm=yWoOAoxkriB$?awA;I z6Odn(UDsc??^nEYVEJPq0~m%t80L>-@>)K` z?RV?6PJVOKz14dCP~oyarK>1FZuT+`_5&UWG^25RFmdhuD2AAF<1BzQ>=Df+Q z_2K^m&gI-1up%dJwrl+P*<)Don1QK>h>vvu0I$Ifp;f*=_ebWv&UzRVVCkj*=Wd2;R zXj#%MyIhg~As(|=^L|+Yy%w0(;Enzv;d)`&fUk`|lwh9f@C8KC>Z)@k*#+O1LhH>2 z&srACXkV`e??22nD_q`!u1j}r1pEc4uSm>_lyS9)R6zZMfFx}2!`ADq8`~2kpeq-A zR@2{b3XkS*Gw%Fp##shYILgU3c~vt4m-=%Q-VoQF2>Sa{d`ARoX{s*Lv8c}L({HGC zowIkn^NJJfqJ*tT=-cMx@KU&0TLNfpb!3ZA?4^sD-Pn_c6Tkm?m2O_BxXZd*_mKXj z|2uIEsO!}|7ba}>bhtlg^VhlYtKAN;;EQ-MQ!v$Gneo2`-^+uidj4P{n0kvO@p7oW zTci{c;6h}Bl=DAqJ1I2@=S9&iP_3WDVelE_0>&`KoF8Zg0cs?Rc=j`f-kOfZC+Z?G z!a>l?lvga*39ii@OpUzgcY^w%eh}=q)xFe;j^d6w(Po_u%TaYRY||Ht2W=iPsZJBX z_@N+56;BHY)B$1qt#zpFO%^~HF5;cG25C}&O7G@ud6e+cVH?RIRBzJ|ATS# zz0>NbZaL&RYV9~_=YZ|jIfya4rFzv=t9qx7`kno}CiZn);krqYxiZkT>8dREC7T-Q^1LnA4mqkQnxq=rW#a{Y@qi2O2gGUw_+wDED^xdiRK2@pqivuhC#jl%} zRc;eCvwxZXf%ICWG{awWE|6}!wa@mfqZg&3#-y}@wODHThki445q(^I0TJ~qD5j_` zZ<&(jROWHe^i7M7eUCkD+XILY6Slh@Z81BI*+gnUf3`wjFQjVT8F(_V$`m z!GHmOzm^-}*d)LwPhMxffR8aLZYsW*8ht^x;x>Fzr0`oKXEO$1l8mm6p2UfxDF4NC zX8E0!0>o8JWx}aBj6Qw%qraixVr^MAqP^lTRNuwy`giX?|K5Ea zn1}N#RZ_Dp&DQGbS4cE_mmrq6P0L3X*!=PH>piseWpY2xw)3owU+#Hp9ZJ(BU*12y z$y}yKIZ?~xy#@Y7{FBr%?LMZR!&@KOZD-~S=yO@y<4tmx>%%z-tz5QjQjA8;^-mgG zTIfB4O@L?PBG*S65r-9|v_7xuI$q^Yov-3d1sULmy7zR;R(IlFk@X4n(% zzO^ByeM>dkDy}O(69A%rcg?4unVUu)B4o>$GQ*G&x zJwuI)bX**e*o>i9jS3h%N)E{TBN4w;_ptX)Jc{sbQ0m0$PnCee^_^Q2MhfS#p6-x; z|DFV)(pv(gX9Ai;(Y0M3Vejv5#f9ecc%`))8G4meU%9{kgEMYCf0pnS63WTmV-PWr zRqXX1v#upRe0MPqd~fzLx-E5gN<0V18PkwH_NH37I{Wz9%=!NGt|kf`BCJWyB7XxH z)a8N}wYAu9E=P4}l2+$2vH$GyXYC0Z!vZZfsI$av;@}Fn?3-!Ch`7raS1T;7_T!8fvMT02WF3Q$LQf zvkgGB+Uzj^bz$gK5zE-naVKE;fzg(Y zq?AL^Zei?j{Ggc6;AXdXKa(SmfyBDB5n5}fc`~0nhajY}n=9agdGI!A_)(^IYVl6D zjz@wX?CHT331qlKi`DSH%lz-CEZ1Gd%Ri?GL{3-^I^8JgC{zm3$eC1)^;)EqeseRY zMTuEWiW!IQ7}GWttv9#|UO6R@m(D9cPhG9P-0)X%orpq&R?@=#+O(EO6}_SZfRDv) z%uBC(k%zngP>|$hK{?r|+H8Se`quFB)#A8G&#}g+=7%W**`3h<)FjXX%8+H7YMC+l z$SO12vb{ylZ8lJb^3Zn}-G59?uLef} zel8O!Y)qu`{O&5r!93dvP?6#lbCs~Yy?Yvw+}HKDuYNABkV!SKM+;LMyY`sN=bOxaHv-V6`yQk?JWr;&J;iB-J zXtlR9f|gy>mX|vGk5g+jMYIJVBHI0_cwailNDtw$n*N(@318F0)wG;8ioeEc@jf8& zzmYVO5Bq{nORnGl{|+se^Iozp6%xcrtU2t0+J+Zpe|=Ny7uhRfd_+9S7lI9u9a7_U zH5ctPac`|Kt^SXDG5+t-1>4^X-dX-`DA_ClWTU+$)a(gmAP`Wv}&i>8N{)SXIxot!1!n9)x~^))DsV)cz6Abm%)tavtl_ze z*CgFMld6Y_!**OH&n~f{E)!{kBrRJo(om0)4k6$xL$-b#JzLFaa$DmS zfV1DLDQrK71xRmJz8c2F_gMbN@WF@AD!q$k$#Q8fKWeIkL@Gog_F7ms-NO{zT);0K zmzn>1n3OYr1z)Ju6)1trhTG>x#zk5>F7zH>TH{cpg_d|Mw}j9Zdp%3nRYE2${Q(kN zTh(elP%ggN8~g2oTCB%VZ?Gx4UW|omfJjM|Nh8XYS0`NxD-!2i`JoG#(~f_?A*O_0 z2LCG)am+P}#ReHXTc0(=-y;B)iyb!>Q5v79&lE6gUuT{c)TfTZBpgMr|dQa$ZQtr|0FcYtjWl>0pqWBoSVd9dW64IL}Cf|2x zvKrX4vWT0Yje(02f7>g5OEh(B@D8UsG4@{Xy$K(z zhHaj0aO2vV`K>k^*+YYalqaJB7O~6yg|gemPqhFL2!6;eKU-A0s(^5}PprrEeUd*? zJdt4_^$7g+w2sE-HP(<4^J)Hk=iMjKOfGKd0LkrQp{U&E2;V+DBaa88#)`NqyHjRv z!e$E-UKB9%6qr#MGZbW`G7ufv4vsFMv<{#EXmt6k&)TQ$v6q{n9L|=em{}hN>;v3L zPJrM2F9d@U)f$cO6$sUK894LEETq_JLyI(iKWU=)1U8!HT<6i>B#+(tdf7WK+VP-h zIl}8)GSMYsoO#$XTw{+l`pHj9HC(hixH0$N%&M~Mat|GzF?G03L@mY)QPul2D1c`37b* zq&UoJt9dRj`-!E^nIuFy;g|P|o11z%Q}z*(3&Ct?s1Oik3tnZ3;*jC2a!cNq`a8^s z>Ct?|@x0^xYp^C-(e=dne#Ms~0|-o`ttG1!xg&`ZKyg0-Go#^~i#>I&F<}yqfNm@s zikws6nP5YazbD1PA|1w-3?gkx%n>a$UiRv{sTTg%M=xTQqbXoU?YkS&C}mhSY>V^K z>gp(!^zYdM;0YI$){=Mn^=1avh9&mKr=;QkHnFC58p)vxq6xuyF&Blrr0VJnkmm2FU$s^U4iZ zm!-FsqBE@3!(pfK{=rKh5E)mW^Qpm1*%pvSSmt@Rax%9jzsJNrL)By!HJ=4v zG6lA5+=bmDYTr~!=y(q`iAjBbcR{yJRq>2R9LGg^g)%b_U5>w0sl_gd$69*PP13G> zbb%|W)*?1{IkrAe9?T6zOY2ZD1HOtb)|xVZ-qPsIXcAfj9$AzWXS}rLxqtrMhG?KS z`hXUi+0~}Ni~4snS(Y5IH*N}tHDSuThz7<(D~Ce#6O0w|6-Jr;*e%ha@ECZBbUg ziR?Mi?P_Y`4Zfw9(LmQJ0ar$oq(-rx?Sxr7Ug=o2V*`A1X{!ZqeOkbja5vT$uOR(L z?2lLzfuNm=4L2ipnK zX2i*~J5wR_R{8QsT7T%wNMY<%ipNBa34sds=|++i&rtg0(IfZQD~sd-!M-bso)1%h zGvkzIStj}pY|U53o#EkfrOZm4)S)+|6D#Cm)*wWe{BL~I0dH3zEr+hZvOaWuEdTAr z>{teBBI!pv0DJ$*%SI0bc91b)Ml-}5683|W*d+fp1TU}AUlcF*AC}0bwQOXJ zy!T@%4`yO;UVYKp`AyV0mrMSv#ocwBgn|9bD}NXA9?ify#YUG$Q;C3IQ*hLH?P$q1 zGTN#sFNsOVS*@nG^q$HH&rOSb^QJIXcS(wj20Q*&1IAVUvi+gx4a~4vM6G+z2$mri zu|UwbEt?+O)poI|$y<+zAK_{gxrEy&d7aniX{DLRD4pVb}IxlMM{St8Wd_ZDZUGePw`iA#?1l4+IrOW`^y|K3aHk}g0 zzl?KWw8tm(K@L+$#tn%j&s4l#IDp|sO|B(hB#!hxEKL#;Rs6}&l%%29)(m?J+Vp{# zkk%**`bHt!6N*?Dr7e-mR|<*_4qnn}+zLo;7?E-42xysSmS++4c!baPS=Quugw}1( zE7?)Z05*iwAUxJu|Bx8G6Wd|!BEu(Cr|M|Z66ST@P47mX*Qy#Bdd}5;-QH^Rqy5!^ zaYbf8^OMuXzvkEZCklwW%cV~hkEltK*M_Jl{bO79Z>!01@2vD{+%Td(i%s3lPz?57 z3IB1mphQp48~wq@F0d4%he$!Xe{MQ-g>=Rx#D7n@Exue5|CosRobS?3b!=Z9fS(t1 z93h}axxUb%mP!;M|8vf0zYp5DVT(v`ytU=eT0&bSYPJ#8czv}RId`h4mg~4Jt+hRY z98_bv&hA>|&3>Jjol~`ab~iOaIp<2PJ97dlmzFRG2%yA1N$y3+gJTQC2l^QYL=Kyj zcBAOlt(V%-kkYq1wy{V7&AA(-&Bd}VPUTHDUCz9WA#4>pS($dNT}V;SV2;?VgE>vT zyG}jMf(x#IBTuznp6ya?-topFLdQagEu;tSn)mXK5k4Q3F#B%MUp^j@<2F(g<_KA; z)eO8gv%XqRF;eKhGPemNC->^(VPZQ$Jl#meI0_`o=eDjr>@@+Bqg;-!2GXbpI3~GgWpBk+cTkO6V29&4pC!Cm%(ja{b;NY5B{YZXX_!VCMTq29LDKZQrb#Her%7WPkmt zF6Fe=up)dCW!im}<9t~ri@Gp#*|Qc0e))o}B;<$^Wm$#Wg-jnr zhvM!3P$mVGH?5#f^-W;NPx1}f;i~z8qw{Yx`KItYase&w8os9lAl z^PE;!`T;%>Ps8UORBH#sU0mDly4kMDAlj@1{-gihJ=Il@S>;g{f1+Z`<0ZWkmGJig z_ek~~P8Twtq=$m*e81_`l<#SBgu3l%X>st?ZS$%BeS+&-Dr9Xac*K!!N0o`RGdQu)0p&89L5?Ts?Oa@3TZs^T5^W=8 z)9H#dR%zSc^HzVbU;A=c$9Hq=dRzcUDq?@t>o*iTw14|jot{J7-ysyw7%ttcwKO~8 zN>(}*yvA*xUf4dtmG@PbV+%J<9YB>+%S~6oWo3E^ElmPAZvV{k13X^k@Ehdnn1!K; z4W5buSNE`6`hH$NV1HZE*Q7XL9aRB;>S(nauU=gRvzv)?Or1Xa;RJA8cWR(sp?4m8 z3!iJK*tnsPu_BxCp7$rN8kA}&4>IVEK!sJ2qjcRoxoA#^ZBMYDJOk6r7L z{RQnoo_mo2x_(9(Vt3&p>Q*Akr?0791*nKWII_7?p@#qDn7vXCXByqGC@Noi%-hn{ zXRFTlJ-LQ-2V3<10&oEH&+Dwc6%XRho#qx2P*h6Ss<$thOHlDFE(%X=;v0jqe`eRD zBZR8cKgeC3x^7&@_$$h0Mm)?KJ>T~Gy<_@&zoaa%6B1k_yEQLUWh>oI6GW zk0m?1EX3qRa*@{6ZY&c=G=JlW=1kH#qwsx+>nM0H$0Y6utdKt8AG|G@vSc!8P(pi| zwKpiYAh3&0?MZD?Tqt@>?{8Fa(VRuME8VY|OV zZuN-&Cw`n{=oC(6G%R$FdBCa&{t)+-n}tiRJvLup%tubxJNs@AfUbiLb3e17uw>8h zs{(6i<}*G_Fdx|^SBt%a;!$7vr3<&ieZg0jw$G2foxxf)1@VacJC#`P4GW_zeC52p z5Qap45B-h5Z-Ow2e8DB_s}N&`L|+`2We9`$^D|L`5As72&E$!c{-Lad46%pqao{Uk zvB49EClEC&nt^~9s(n-k6{6C8R`7R&NSXy-PxtK>twAq;j&XN4jyF6W@(OB5(Of?1 zBNcv5o>YZLTBw0$k&RN!6U_4zLedQApWIFQyN3ZTl-uh6T~;71iMTj@h}h-_*=}?5 zxEyDU(VCn_8ls@ownVVi9^*tQjss->J$XCKXL4Fphv(Pl(>(C*^S>$rYwd9wSdIPm zg$GR7->uZS!kIuYmbqG%pY}NGisM~%Xm{Y-z7#$zccA`NWbL-~RzI|C;Hhe7mNpiB zjSG{IvMo*H;DKMBQtFD;YXrl-z#n%VM{vDhw@&ruH*2Q-9UR_W5OVqcW>uBQABW?6 zPIFEsa}=F(F4tJ)vjq7zFMhR>J#+E4Zw$K<1b36sZHIJw7G@#7VfekX?Z8tXEokS_ zwM9l3wQOAJ3&=31FCLQoi1XYjlmDkDfTho)Z=__>fe*IyHMsY^Z}3D2GfbDju8f38 zRpi~TNXa4D@(i+GLZZiA|*$B9+!_^aGA7Jv% z!_Brwx0mAX-XGdiQGm2b&*ubqw@D|Uj;@p&bI#e!KuQ*LX9*YJ@)^%dbDdOdD=+jp zowLJp#85=uY2~NX^q_QQ)$*E-`tsIaTki2b9YOC0o9)(3&^hv*k=-NXhg2P2dVg$3 z=e`H`%5yb$0%$GVoOFL6W(zC)Y6>^}Ki|>%ZYDqlwz0shKRZ_m&{6c2PL0}WOw+iQ ziI0BS_JZC-)Ezuz{glpb{ZsPRNiGkruc~6Vvr*^!V?HQ68>RIZMNZ&MIs9}BHZ}8P z`U&PQV39b*UY1OCmSwdKoxmS?lP$!t(#r6xrg`Erb>SA44iamHINntSsYs^aV;Pc9 znwBNtnu&7**?PlY0X+1pL-kmMBLLGgEUGpn@`euy#}sHw1(w6zPWtwC7>Y8*jNPk$ zL$ky-KG`I_YBkAD)t!LyF9Keb+^8|~D-0LwnNx$wq~5qZd%fjje)S{K7OK+!-9mN1 zOak4H$edg(zAy`dlCPmezYoMMzMMjW?&p;RDvS$j%hc{9UgD zw0;Dy4-Lctofch+$q!lM$1y@ZK0g#{rnAIjNR&hh5P7S>X;y#&O^0cE?jvL) z{8&a8u5Vi%d=*)7a_}1{cnkl|pz}0HMv!Pphizp^er%M=1o{VwajBBrB=dXnhAt@A zC4jjCpaI}k7)!ol8iqG!?W=I4f@Bl3Sv5o59GBzamqlcUAty&8gc=Xu;&*Y2x!opz zeE8l%!9}KX(nagX@~ZUYXXeKyI>5v2&kC6`rL;=O2#|a9dJcdH-|&eYZUrxZ^$LkIiQs|1CyV(w}2HtnWy$+b@o`4@ZZ!d??bVObUh@X3|R z`jpRqdn~6<8kdrWUaEnyzTts7i!eVYKnZ<1ah<&$y7RMD#{AYT^+Adxm)%!q5}TZ- zT1SO?(`9*id6d;J%OcSg@vdUy)Wovbv9KzcyLNPoo}S*=gd1cQZu zob;*KpMbEoB>~I<^OwBE?|`ax;my*`y9v;pdyh+!*l;%>7No#V$DF^yKpsv7>`Y7bbUP<*}D zN#(`U8oi0Vq#ylV3xW<plq1!vNhNO!o>M!2MuC5$?x5bld!Mb}SX@N0j6a_*j$^*I@CXY7%c`zQOZRn87b*#qC5vYch2N(OulJo~jnFpvuN`~C zSam4Sx@5Ci5>GVccenoHXw1xjy^^ z62Elsa3Pwoh0GpRbhvq}VQ6sK18TfTBnas@jkB~B?3*B!T#wNt_A~Yh4qxATJqxxVOtBg*yWY$3x&A&ySIrkp(cFIj5 zNmN)^b!h(|_KEmcbTaW|lj;OikrH33a2{@>6>(4qC2209+Cu$r~`g>WV@sz>*91p$cyLAik>m&LC5?2Pcd%*nP7e4knap0 z|23PKi7%>5y&GJZfA#Jw>j%g*_G(T7p!pdd41Atoh2cG|$3*D4mJfeS4-2GPQCH}E`jW_q=YnZAEq~+d$5T}F@ zuVs{sJ?e++UGF%6RVn%(0w*D)+^o!glu5v@4mhPb)4OzV>VEV$iFXsx?+Y?lD6l_2 zb~{_CkiCH=zLCUh!uuHS;+i;6zwxbJnmbC7If1P*y;u{fDRP2|02|_qz}Ra45E!0n z1lJ-c7>Z!~r|xE41g1ZT;j2&9aE)(hOi3wzK0)9;6K{Y#tA*SDenDhD%)HjnOs-WO zFwVV&G4MVfn%__>u|?Dbw}NXBAJyquW(-(3?6N7{7uNQ-Ik8lS@_BmWUUY*$T@QB5 zb=a&a5`sk23@HlS?bxGuUm}Ao$g%h8ww|rs3yKh8ah&S!W(AsNW`D+$-p95ZXCaDi z0%y%^QlH$XO3fj{HT&?C41lida1)}84(zvaS=P8%;F3DTTC~2xyfGn9v7MuccK6gR zQT(?B_}!F2c_<*kcVIk1i`(<9g8bLknMDH~QNv`;NK4Co+o+RbrbxTBaE-wDe=vJ)ICl2G3VQ9nE2H0dUyh*oTSpmwMuYXg>@u^m zkN~2IwmoX;kBpQ@W6frscZG1eIK?PmNmt?WxdT^n7eJOvo!KA>iod z>5-(!qEed>-fW<{1Xf;bS-d z^P>O9&d^zoA%mdSubX2ocDPQ4H-2%p3ssPo_nA7c@OIcgJ&p#piujmHbK0=%CPWph)w!q<{_V= zhaG?qP;9jV8XhkdYo46=HE3kLD^Zv`ozp(p$tEsr{ZQf;hqF+u=0sJ&WDV zT|uptBdQZpJLjiaWQPIIcCO}wHOBokhW{k{)U5tFuN2v+cQ13BDXYm0l#N!%&q_9A zo$u}2+4EamuI~Hm?F4tM|LKg#fo0e1z*4*=cWz#mAJmK0(I>aH1gXCcWu*lJ9J2|# zLh?1`^SLh~YY+^{<7&a+QDo?P4wbvkQQtY#FrM&|d91 z7UDo>&Gu0ls_ZyZZ&{b6>0*NXy)daYmaKBrx}Gw<%@_DBF@pdRDJd?vuQ5pt2W!R87O-(9wG=Aow+r*c`1o$XdIf3E`FE~>WI+T&AO1vqXu|{^*sdi{j6~EKib00p z_PT?ZDea|?dvk=dJIojz$-uzQXncLfn^CiaA=Sl?y4ssjx(<@;1E-_IcLLy#1)b*J z_VeisBOmWGXygR^m!-E&92_qpo_b&1wO>&Pgbh4`BRR)C?|R<%8R_xLx~LYY8u1@; zFn?;nv!cSiJt2GJlW7FKER7SUD6}J{bZZ3?cus*>q*CfAnc?n(C4!-*>rd4woTxCB znGT6h7h9K*2k8`n$uatE;{F9^g7mq68;L0zGkG|3g^r+iK0QG%H$0aL*)JsO@E8Jo zRQi^k_$EJ%Bgg2E%y4dag`{ze0Y{BU(HFQ0F~Rxke>on46vd}eXBAa%srqC;g>q^> znw_AEl#o2!D*e~siSof&8rsg02*s2XjKtcVulV}*2+$Nz=a3I?0XO2ucAyXxwVnRV z(p-7pSlS*3%?})3RLW}feHh!ZO1q}q^-WJz_O9H~v(-<_@krNGEk##wn}2>FXgGG6 z%r1aIn*OZ|={8n8jT5`xf0s^H_D#LgW`)+)H#;=KQQ6Oz|6fcZlA z&Ek35gqaQ|R! z$)QTmvFnq09EIQ(-O{DX=pQ{$b(!CN{OyxwcIMp~)PsG($T_438}4Vn#D_d=7BU^1 zHmi2@sOuuQ2=R@iJp)@m$b(Z!2W+ojA5i*>>053vg6^G`Rv}RAiT_z z`Ajm>I%v7LE}&l5AtLPRq{i=`7^Tctg|6HRb(tp$IawCyjNy6t-E85{nZC~}(}gON zH%QhUdg}#KWwfHZb3>h{D%h1p1QPL2r}|H;bsuGOAF8*td`Q{cegU8o8L&2tP`vJ5 zS_H<&rBrxO4l|5MEBq419R70BS8h)BBh*$0Zp;$j=Fn~`pTnwv(yz3l!q?<6MzOTvmACfm zJHb96kZ{GiLM^lZlS9qIt)YIJl{Zaf^oq%YN5|aYn`673M=>R?TXfOYvJNDX4N2xh zlgWqNia{x6YT)bJD~+G$&m>cYYA*hg>H`Glu1$tZ1a6+aFMvsp z^REHl9g@%`*g?(+5yHo%3t}uv{ZTEpcF100cYabF(D>NBH|%OQxP;>PTl{#viCvJd z2?md3k#fna+Qgo<@=}iun-y0RMvNLvG!G%Y>~|^Fv#%p^>>Y=q4qI<0hUl+DvXni2 z!>eWN4Qs0J!-2Y1{RW`?#hB*X7B4z>6+E}!rsyM~zq}Z0J+x^Mbc+omfmP9iB#Bqw zGoi($-%goFuwAWyyxsX8a1`bVp7=3yq!=1<@R{sPKEs#q?edv0-+Hl^8I6}h0@Bsj zWXO%;IvqLEBII4}h*mUg1ERKNOA0>lFoNIp1b(8czC1v+& zL^}eW;O7q!4q5KTB@~9EKk`NW?Ux#!*YC?&<-}A&bAg~M@>+$B!F~zNmzdbohGNAy zIUE4;F^(6dcQl-jeVArc=9fV2!|XeDaQ^+^Jn*>@v4Y6VQt#fswi(eexp3oP-ZTPK z)oEt=$U(bV3)R=kA-3h?6A~YL4jww$vs8;#aK`~yiJIYla|TS?CwX}IPAz)6t64$!U%bX608ytwr5kU5xoXV+G2@RHsB&hS zaT!IJ4%+(qTKK^3?e8SUF#abs3|O-yI+is@_?2*NeX!#0*;kQQg%ekUw2_EgV^+`% z)P`EI;7?(ngG%jTwxA$Mmz3egORi$^z|+&`j!P8)ae1rV58TVyh{ToRDa#bz`SKaN zVSu~cu&hhYpQi!3$+;DG*iDYn(}1)V-7}fLftZh9*q@VzJCLv4uS}+m)r0U&Pi!qH+V?YG z0RCJB3BiD%>*a4^6^B`siFQkI7e?6#7M3CnY->P-@NJauHqz-@J<)BE>d-)fyggFP zctaxSDw-Z=I*P24Z3SY&WVz&A|Fcj7``ZiuVLUZJm=7c_Fpf3IU);Xk7WurSCfgMM z?e~yFaX|w|xH(yf@jW=c4KI?r$aSPS@t;Oom?NJBm(ka&KC%Bt9_pyys^cmewQX7O zA4g7ge!zrRvM)5YyzaDQML-dN7GsZB$K?KdkWJ{$40ZV>we>+*xCG!Z?EE?RV@$D{%Z?SuzXNh^~#t4AJ$zAtqGa|nfJ@<4a|DCJ?Uw8G4 zQq?`L+ks>X4bMv?IU6Uo(?_27v7Z(n)kd7>M9Dn1D3L5jN5i@xy8X;u7duwLKBU;= zv`n}@^T~>p1+Vu3Znu3??yqbiZu6YG%%E~*w&oJE4dT4&F+%Hb3Lao&3lC=YZt8Bi zAA^Tlo3Ca)d~N9$xY|0db5X|CStYB(JH158NP-4?^YjxpW=ryG3d6t8i9XB2xn{os zdhV(#R(w@*E&kdb&}UL#%sLWtt7cZM&txQo&P8gZ>#&cGvK!!b^$$X@u zf7d`~vUUP_&OE^NbXWLm^>pCn84a)CwG8fiQ*W?Ls+XbHWq!hk@5W*uPb8K?3a-Uz?(; zidt2>w5TeoYDCPhO>JtAR!dPciImu*6s1N{64b7}gIJ|DiM_W8BM2^f@i7TAVPD)JxYE!awQaQ#Pbu z(hvkAmRjiM+BL_bsz{Ymd5+_3!#y1?R{TDA6Le}Ax73mmcyV(xcD^t4EPSZ(hV29A zk!cVcO1os9+jD7R{>FP>`W=O*8(sSTw$3ZhZviT<65<0W^Y`q^N)I({EzkFgaS%$s zqJtg8ZAd8M#-Vp8S6elw?{Zsq!2is_jvC=K6iq4{%_8SF>UH*xiZLnb*KxTZYOiBx z2nSYCi6FQx*8hlIEGs<21g)?f4xq;6WB=VwZT)AC3t%u!jsxnuBQ<1b{~YwBRH{l) z4?$f4IDtY0MmqSoE4LV>-M#7HJTN|&jw&YNml=Q;Bb~2B34zsZ5B)<+*s|q{1#G|j z4t530pnsNqQk(AY?X*$2?->do+kHQuZLI>Yv>6G`XSrNtT={47MQwAYZVL$=_J{)^ z>pnhlucNXZ_G?haC~261ytZvjyFPIB;_N>Xvt$xeN^cU){BQwiyK1UMfP+iDA{(ou z4;R8D2{9E8bRQr;>w3aXodO)-hH%<`OQl^?{P#K3X#fO1k9SOqLn^Jx5f}R#{ zHnwy`9l|NTo>9JS>uWS|Xfvs#hAO^yk)z&x*<=lf6;$Z4jof&&{*!9rASKCHbYn`| zWPQewHjp&#muYBK&q7?$IKUNYbR@^H!=qAZ{ppZ2g2qH;*GDYR;ahr|)>ry;rTygI zJ<6QQTclyzbes4E(LFoW@z?)wa^`azQb=OpE3D@5ejkl1%0;5$()bEu3Ic9;)U{|c zz$O#VSYrInDm9)qg7i%X0XQ4M`gQicVX)JiZ$8_DUTufJj$zaGk9D+M7iqfloHAor z2HEZtQd;I*v#hFmWUUk=68r8ZEeb{OG7YhA@$OU2dd@UTLT8t_?e>D@ew?Ig zAVjhDw7W*RTmk2uH*ygC&1}a1HEA`^PnXRe??fXNw{}BVb!_XiH8pt;Y zMhBvIw6Fm`*!y<#sH_|I>dTiTfcF-vMg83z#1nRPEDj&t@t<#U^~`3H5Ne48@6CQ@ z`EKt~c*vBQ8NA067c&*uU${V6bQhgA_Gmh(RQM|XY=#yduDcJ731%K|Ez{_g7|v?8 z7$9^LRh{X%ItT4EKSK_7eFbaTf+TV3@7v2iycw`p0?hl{ln+Z|l( zhe5}W22YdyqiX~6=QsibGKi;+6&0_~-5+}I3T+OZwJ%@Sxq5xkxb)3e2XyOyEs{MG ztSTi#4>pE%6G{L#<;6zsL%zd;CE8R=K`;{6(#F3u%42gPgg-rS`B6JL{A2mk0R z^2Qu)UHYu|H?*XrY2df}T-_ThJBkr0{KtqcgN=nh9IF1(na9h}jLA+9^U3YuEzon% zH(BQk%ilZiEEEK2ju*kFd=bIPqCbxo4-C%V7u+b=w8AhRE@x6q1Sl6hg?Ttsw5tq_ zRttf)Htgp=k+=ie#=HBGkrWTsX+O*vjk6gy9cIfu<$a=HQu3#;WxDjjV((Y60Gp7>O&8Dr7tRzee>VS9a6Hum=h zEyPR`8E=y~{>^59!IM%zX}b%c6yjsxv}htyWMmlQ{Vhaw$jyZMujc7SmF$t1#q7x) zs*N`@_D|_rwJ>7}N4^Jt$k*U%ttWWCMh0#LvK%7!<{q(dk+)%TaoeSqur=sV0kQcV zxFA;g1HK2l5W-S0*>4?c03ea3fo;z#H)aE}Hn({y zd=;+GpRe;mg70|gJ0hH&hSJSthCS#NrJaB718`j^_#CtjN=J47|KV-6Q;) z?t*w|lSpgG;OC~yG?OzK)*s`aCjLLh){*L<3@a6>=jTu<{HMe1MSb0dlk9mRV4q6= zw^@S^9`-G;Xw zFEh`9ZfhY)rMP6R z?cDsZYkz4`3JUNDGMoW7nF#XKMp>M6sWmg;bO!UZO~jG9Sf|Q?P%3?trH{vitw}tr zziVy&p{l0#Af_rktxYS8hkrr!hXPD%)FA7vS!IFeZ!Sg61o}|FYy2x)TXprtgBp*2 z@@424boaY;P_0f`m=*QFd7IFyDmVMhoIUfY#SeBS>EhP^5hZs7sq8ID!D0Gc!|#HB zj)H2`GnL{{*)FL?{;sg4iKC*H#P94<_1qE|1+|@;`%oT^?v%ZJ2EqB(GF68*(ITte zZL`@dt_NN5uVo31CtF+vB7KstA#WsH{T@N;aBnu%MX?3WcYVpYazV=Sl-UX}O0Z>z z+-?Xt&Tc-LBc?kRYQ8Xxns4L&6X3lM#QWv_M3}h2v}fnr19s6Qa+kH~>U7R!uJxoM z4-eMSMSE#&`4e~D_jy{Rfx7Int{=^M7P%@?+u?AOE4niH39`mZX4=N?6X@Jfg6{ru zf6wJJjZMzQvAM{iyk-X;2x_LuBg<)^KB7o%Y=doqDepI&$@BXy)%b|))sdEzFi;1V zq?g02{iC5}sPb~q!JqF|Ev~SU7K+XNt3}A*R@3~Ago?oG!-{;}n#Bm*_T2Kv?f;dH zMD873PLLBqvWDd{DqdF{4f*&sRP1k-eDlK<;qTsCwUM(|88`$*sRKasl~R@z557UK zm!Bgq3qKEnEImD(1}jdT`iw9PgdJBRn|j_ZnJ>*yo)Z%)!C?BUNsL0AzQV&W{mFwL zrkL-sg-K3L$HpQ50-K3{btG5+bueJyTbn8)5BEK8EOywfE)&t|!Shzzb;!ybciv^9 zTF9Bs&C61IrK+={MqX}N-v0gFr6134_!q>bdDrZL|5ypU4th!3%)StGQQ=%7Wl3FK zl@kv294K|h=$|1ow}x27@n)RT9+ZtTB`k1Ce5!Y^vDJ&sct72_hdgF{!f__Fq5KA{n0_8-EZlN}*UN1%_x%1Z`Uxe!H`Wl=Bl1@%eB zL-o`{RM(O$O^87%I3>=YQ^vurVXfgORSrz~+LPgfFVKPg&~kFq!}@pt1)mPH_4+p3 zLP(ncH|q9^ZOr#dE=2kydP!}Yp-#{00A_gRj$+u*7>fFq#Jt8H^y{AQcEETRLYBeXjP60N%|+}ztUK(aB|18rd;pmp z$}k#~L~pdC&4*u*F!460Sl0e^_6CQnTAGRePq822#f_g|zS@u^Ul&ALzD3 znFf+3sRM1MGCj=K-(e5L_V4%U#x=uB1OvUwHtqkw!x!>-Q%hv@q%MUkc{T+lFo3Jm znwTL5&xK-(<^J!oqdpw$1rkJ_$YP=HJ6^)W;mDR=a5>ymp81~eUQ=}F8N1#YyW`wG zO^V}{p0GdXk_$;1P&4*7Ls9apA`P7QVDrwotpK;Mz0G!Ar|S%>_o#1zsQ^C|9LDe|)!uQA{cAuuyQY+_7Zw(I2a;x-Ii# zmhZG1EJgEfQrP7WQfZwW*oE14>rjB_V`#illJv<&J^Xy>`Sz6LTs;Fhwo2zqYOR}) zgr-2$3S8H+4@`W9 zqvU$96m3?|+PEoCrT|qS{u8mT&$XUvb^6Y3Y>BBezxqzhcE&w1m%yi`WDPpi|NKWl z19W@pP`#4HD=j|-_OiF8wH)G!dVEV^!Kx;7(;~of6v7b6_jV)Vngk=Zxx&`c-{=!4a9ScTMy4KX^td%t-x8hwW!4t z6)BPwN0K`~ELf;VvK__P4AmEla~R1KGn0slWbVH!w*r@`6R2EyLMqUDL2Rs-w!O`m z^W#B_JYIzNSCAz;<#(v<8c0fC!y6rQ6-j+4oa`u*)%tTYVCmYdy$A5`{`d9|+~BtO zyV+iVv>~9pui{72-0umg?N?EE=o5>}zwnK;S@9%S!S}H}GP(cw4fTgT$H;`@9Ccw@ zYX@wf_rI=k-S?cYEpRu$mm^8Cba#WiEQ(Ev4nK1P0|?|#O5LC-Ub(fC8r0qFxb`JK zImPjyobmqNeO_@Gzu_Sn*eYRrd1$iUANH2ZnpkF{OB7u7Y9Vbn_0}(ZnPTuWc``oH zB~1@E?dOXUu9TRbYI4P*-c2e^mr_jJ!K=yTwfT2Zs){9fXf5}j$=d41Y9u#6Wkf6L zqdyLX`@Mv=d873{190=RRqMI_bLyfS3)F14tL+)syOuOkxwWI}3+RlN(dHc921R^Y z)C9#5)tm%KSpNE|+uxtX4olzv#i(a*l*nbCYJ46N+IRw6D^MP$81cKD584i)8d+9= zqBm153o(mDlL~`Cj0;xn>{wS$*&K+OZL(GeXYr`EdigfnGI_OUBtAmrubl1(Ms2;B zwHy+X-jauFaLZ(C__6aLJC7c3%tRhoRJ==2GcA{Ys_pxa4^r1mJqdrlb2p2aes%wZ z@P3{cp@uHE0luM+^PC+!$rQCdd4y~~KDOROu86cMT;BVd#e#Z#dGV$C;M;U{E)-;Yo8Dw*-J&v$LUAmTs?jstT2$8c%(tgSnp zc0t-3YX_nu3gd5o=NMRi@shvEB$2jmC^|2;4;Th5Rq2nD_EjJ(dOPG9Cq-P|fc;_x zsq1`kI_I5L^nL6HcieS2qnLIS3jUUSfkkUEXfx3(!M4>`0f}vquMLEjb=vB= zcV8^@zbKcq{jk{kB;rW!c&8Nm<$TkDzWVIZPk_^GZz!>bEr`c~C&WYfdX|uhoVuihzhk2Od&GzlSkCU+scy9~7Za2(G?B`8Gp7|Kyin_jB~e?UoUI zWyiC+ui{iz<;fPU>@U-C`d+kUwi+1hy-|g9%pv*^pg_eG z(fUvNCeD9=#73Kzq)dN&h2m;|{_YQ#f%U+JStww60XBBVq0>=L(P%lgKRkNa1w3x6 z%kQldqT6V^cmE`vHLbU-aUp+&UwGsoPeEsdhA3I!+b$yWYbSBI81_NkvsRY+H!=jY zoOD+uAvfP`Ojl*pBu{mR)oBuP1B-}7-jmvFsuQ`O&n3Mq-(|dZ(nGt(&S(>YSSfMj zczQfIW6PkwNrd3Bv9?>otWc`&;?UXO5}s?ooxGmgHyWKkkgN)^7WIZwQm$-HeQNHa`hul-+Ye zqXO^mP1xVhG+0xoY3$jLXA6^VBm?iAue&jPxKw(Zl47DEq=$s9J{bnHJEvdB_wGdd z`;s(f!mIFJfJqI)Lu&0CG%M4G<7y#^Sn98M#|*6|m4tRim`J&Ei|1N5`Sx%D`-PiMd8HLT=k!?5Ilyw38;!!eQSQf9ie9s^(_X(G^C}Lx2Qtj90HY+;hC$OXw z#LYURGLp=cm*xvGGfy~q1?C`BU!GCh~3 zvP#H*6EqlkEnD+Ea?D*gGZt4#+8~f0Ga!kFugDb6rDjgvGcoUJyDy@2R7N$`M=d95_B|r~k^dU; z)bb9BpWzg1_+|UkSx<^|iV@H>=t4#*N6sOQU3}dXQ>#C=$Tj{<#@@1RYjz&oFz3GH zf7QJsUR5kza8fSyGkh}RC5~V^e%1n={DloW8ITv z3ZHvh-&7eT2UYJ{jp>fRUDQOWj{@nii*bHPf%S?G8Q+&o*qKM+`R#wPAo2lnd=R0U z+HSe*zaviE!p)g73}4BoLjbzh+hF0tiISpAQxGRc=iRyorEMC96|Xl{JZ-jtbNXF{ zc|TSU(Uid0_B0)K-0yA@F8LXj!JIx{!V_!R>Zvm#$)58sFCpe4At1t;ofk0H%P6P7 zHLl<9JISva7uCWlmTmj60{E6+`jnn0fug%YVthmMzvQNqSDzjeWw9{RlD zdduB%fyZRgzJ!rAU;9TCDy+ZnJI?@3&Co1&r4PlM{;)>W-mC`bdn#!l<*dKZtNA+j zy;tewwYGYOQOtX0UPq`y-8-by=@->rZuAzC>amD?VFE1jyfd`ZoemPy-;+1{_QIld zWk#u!aH|BMB^M(0M&H^(jALxHI<2i(x+=ZxM7oq2{b#-#iS%%Z4Wc8>iQasG*VgWX zypFcBozhEzmPWESdL%ebE3G>wO$0F60zYBb^E_`BDv$*>9iNJyC@E_bp_*0WmvHRD zQoA$(-t}LOI=dq3mj6Es~6Il6R^X%*iFR{#7sbq0|sb(vi7JTLIbcr2kxPxDN8L*XVL<74#U zwdtrcU$K%M8sUM(EOSqe_>C5bE@35g9hUnW@Q-3H!%oMNINJB7TQuAcDZ0s2Y*6wK zct!Q>vjB*!g)-K)7#r%spxn-hPsj=iG2Ug#%{~-dRLIM%LEpQ_vrPYsR90j13Hc|z z_m+_mBwE?MSnBlCZ>iGBqW72`=Vn^G%lVxa$9y`|c(@$<6qyw_HxLhJ;QITb+V79!F<9@C?L>%~)(Zurvre@`NVS9CnW`#idPyKL{41;RCZ+PV6zh`B;$ z@b>-Az|AoMCb0aeyb`YkI;-z6ME^|26!dvW3h&!+Su*AeP=;6s;IO-!*zS z*55cD(Kvf>XmaL600bt(DX>BsZ7z@7v50y46r{rqbRy`6-A_MOixWD6PmLGzhXsaf z*r>Ep#|AgW;p^BBRB{Wn%_&Z=JojdHO^WV=U+i>$SoH4B-)C)w>1V#&j7{~#xF^l# z{%-kFQV92L+wC+Q7ITdL=-X*iFg0&>y8=mMdC+D} zXv)!#lp6SbylNr4@YR2m5j>AXQGtc#(OI@fEs(#b4ut(F>FLNvWJh;H>0=aMWNg}b zd|zp0l;tgY39Q^_3t}fFZCAEa;>9snCUbE?U2cmY1=uTfENJ%ZtclsA*W<8bdcODZ zWPF(tYU?*xmBJxtW8j;CXPL3ybCa_(JyE|sfBclIqN+N`0T!-=XZ9Ul=xy?>6d2gx zc(q6A|HyH2U=xMpF8KH0Gayv|7_^EY%Us ze5>y8!v41J4gDLS$flC?jnix*$VYeb;fw_fexj_oiV(F&I(FBK8p1vEl&Bb&j-L=Mdp8-b6ZHk znM$%L_HdUeLu6n>FS+6&$X=o7h?8WfRDrTdM&IgunS4$?cnOLhX&)@RgW6(iz3yhk zdQ+nljwbE4lU_g1I5g~w!IYmjnEHVvX(1LkXGxvLk3; zqGlj3yCErYiu<0wG$zQ7l!Vl-f6k4)nOnowL!k5@(oK#*riW>6*dpAk&mbjVPV0At z=(L28*Vm?E(PNc1P1Uyn_BTQMJ89ofC= zJ{>JkqKaKKAo+?>xOt7s#CztS|1EKYC-Icr#H>LHUB2s9*Usi7@S|2%M=R4tfD91enn;bssGuQyaWHAmmy#Q zZUx}t`-RtZJj-KNEcMz3hGPm5ll5YhfdQn{q(@MDSl9Gsh2zomFFsOG4YrHE!n^Q@ zhkx1Cw}t}=mgg&P^CiRRd$=Ro|24=G9ZgF0UnV%5@5I=h%8eOb6}5135W={IN_`|W zwT1TD64CaCDMIq!Pu@09IVhBQ7p+&bmb0jzKBJ#YW zGzVTZM!nR8my|~O(7IUiJg}P=*RL zc6C{pRa8883Lyn8`@6ZGJsMC+@~IC-!*rvQkG`LAB!S5;IY3$MCI7}h8L%#94=_*7 zdOB&8-GS3K-yRN}mSY1|mbne?*7ASynF8G!QW@~%u2V5j&rUkEd4w4Ex^@0THBb}P zvi|nN0P$1}uQOr>alh;4cI#q)-B*m>$lz5@~Y*6w=_Z=;o}r->1Y4n9o5=JNIy- zJ+TqkH}kW#_EqECG}F!D>8iJO4g5ZRkbAvE{~tZ3e>Wz)@%nH@g*zLRc_+wM7#+)s zyCZk&d~_}g9&y2AqDYE02UJl4a z07i#9I7gPpiNm4)p2A5*}mqwRb8!djkyeJR%jnF4$O|~(h zI81-FWAqZztFE^wgy(iEsUxf*a=STW6!hvyMZf9cR(cF4_^PDynwzg2Kbe>J4)t}r zx_WV-I^j$Gy5dBn34F4%z~-!M z@Lt^+Exbw3Cs(-Gn^Fu#LS@|oj_Ms%-jiM=HtbrEFKK|Hvkli)lj8!;dw8XAZNrG>WV19I`lkN*yKlrL5Nxb4Y1H@))+gO2u$6>R8_b=XY~UN@er zlG4n57?=IhlPK!59e1umKV}xv#%YT(Q%(y2Ixke$`S#I_h@v4h3Xk^v`toq$DG=N# zTqWw(<;P6sT$3r1XG@`*9HSLKmF@8mmZS=qcAQ%O*5Y^={{Jd%g8v;~m4msGTl1)5 zN%fwVM|1BSpKKB3wa?`JPtx`SIi`wkN#9iz{VIv4qk1#_#ZQK&aq>nJ1O5p)QttvX zU(4|HDRa8!TAb`HKWb!8#60T;wfcz22PvWDE5_eA)V7+hJ|*@ z@(ObNb>#6pZW7E6YkWz^HU_^Rm=)`K_d6!srS}21n9buqPkpjl5t+-68Kx6A@pdULCDi+EX0M;P$uU!hwZ%$$ zmy~^qtPjfPVo|u6VK@Iy#RCW}z$<-%K!8WP_W=O zQrA9|VqlQ)VB_=wK-1FmvEgT#rl%v~l@(*Di+MQ0lzYqH7wT*GR-9hJ{LlKhOgvtG z1XeFeG(}StDa~FyB>>CH} zG}Ad>g-e@Z|iU7=WE6 zk8uAxgN+6_#3wdkffd61CHD)MJgPh>iGku2K)d=tlX{Ulo6z5ldSJ9-#1Xy-PXXeY0*rmsnULI zM=j|d>;D5Q+8P0%PqK$gDJ*J!`_cLKP7Ik;aA%9hrYF2q{TTmMcTmJwUw7Wu=rD{O zzVI@=QaZ3eGwDA#k3 za5Ux|$GpLc^b#2?w?^&PSS^@Eh$RK(i&wM&9fRKgnEHOM^VNFs`BS{d1tI6dd-jwp z*}Gt6L~I1jJc=3DKXw<{9jTD2fCtklUyFRgm&C+__`X20)9$x^G7HE8^n!toieH{6 zUJ3{NeHVdRK}$bdw?mKC%T!Jk+A61gSQxwcvO^nqXL?9fy(q&^zCug0?JV9|wrNQp zAnUV}tbEobjhjO{S}%yYf|rMLvYAw(PPvrLho4{WKO~uNE{-;e9t@$o1Lni+Wd`E+ zO5-kgJOdQ9*oo3+7J0V#yFZXRGzxrGLV0{V;>?|2-2N=|+DZgp35BMUe*dIwFUZup z@s9cQQx&1XEP;U{f#<#A9}@Y7RQiil`nBh@Cphce%u{WP)*ndQlRB8zY_#mdsOiB} zjJ@5ELp9UmUI!T<6OXgDxww|!Cq7N7y$2GWo|FT;4a&&>z)#Bguw+2m=I10!MX8}f zK~Kt!B6xt{=$c(+xiTxsUR%~t)u~Ng-yXyxTNVU>I25yfTTahk1Kl*bxIuDutShb z_L245VDDXOG6-d>ZoF3N)*KJbSSvfUBD>2~GGCIg+aM)YG5YBq)6wWw&2tgV)#3lU z5M)~Xz0CsZSO#rrNwhrLuFYMx8pr*00+=VoCj#1h)W6ukLW3L^Jf-teDpOhDGf=TA z_eT;5#uo7z9-gXtg>0YJy)(g~#wRI~#X;%dW!ztXUtCPw*DSB(O9P{utaEsm$6RIF$25-A!hDP0JkdXHca;d< zNpzUkAtjmf&FyDA5%|5Sb~mYxDZ>afyX+K+H+92G{mI8aTv`0tbg2^_DFbbY1@(R* z%@8W3+t4-RLgmdpJteYq@s2#-9JibX-<*@T9CbDa-f#~FKva$iBR5S^<$8EaS^>l> zL6YTpD4)O9Ga+@hkuGt{-X~N!!3>1&*L-|(I?dWWuWNzf6>qsS=L=}#VJnY#Wjci$ z*@v4v`~}9_tW4T6c7Sf@Oh5fnB%HOU-JdU@c`&CAJfxhcBlNTHTzX;M0vkl+zapE3 z^6>2i1IXT#gnzY}-MGJgQ{&8yC+D5yb-NBr3}iSVYJFdCIWg|r+9o!cw)UKV+zcnD z?jHS`YEa|2<`;hw$g<804xXg)b*dZ_zOe`qNAmL>O07B*hC zzs003J_1QM0GB=32`}5Ek&#Qt^<+@@6OjWc#!$>H2Ru#Ri&Av1_){Nf+eftcX5y#QP#XBQupf>}zCxop>q1Cy`-U*VM5q@#32-!5Mq%3{U zy3u!(JEk2?uW*gGi*k!MSv`BJw2=&+q@aI7qiY??Wt`)kw5Bl`np&B!|0 z;BI0fFjl=9H(lqPpZ-Y>z478tYc)R`DE9C+Gsy+tPP~Q?;1|0RMJ+u&3Kb8J?#mG) zRbxPjpv0q{ma#e*-7RX{r8Wf@NXHw9o&k8dX5(~)2cxFD^*PqK@($amrsgvJ@Bf|8 z2BXmKCwbicdMwbY7e788A*YFZB1=lubJ2Rw{{}VuVmrK%!Ch-*Ho<~t$y^sStte#u znZ)tgk0nU|4M23=0iBz*Y6Uoh+&i>pxF~CWSBj4SJZ|>c1^aHL>-6y9ZurYr$R<>0 zh--nxau^&^6ss;DCGzl-B>m(4JKE$3vR=97qZWpwVwf_6I)J$dW$(Q{mvCcV21-tqK0}dvNdXAZ~f(8 zg#%Z|XuH^d$UD|?jc@0#?i6F6;=dpu5QYo!r~^6H+^#R_;>L0D#d$di-}5gjf>ObT z;77Kv#VTw$p*dUvw$G@wH3gQlZVs&K3z@EQKP0L}`*>E#(m5mUMSX6(%R7?v2<^Sh zam&BMj_jOxKld8{A`1V|Mnh=IGdjy4Hd0f<+;+#pIIn-_A>Atn4`P=Qvkl0s7Tqa4 z#dyfibP(aQyKsj(3vsZ`&Ya?Qoz)M<2lCj+@0DA``y>=v_siZIVe>RvYRwEgs$NuU z4rvoHfhU%`Rpf}E8J=N}ezyQ$S9mSQrwfg1-x=2~9PiKHR??e0#PwHaGLODnp*;5; z>JGen%b#>On)Axd`(~d<>)o;&-hj0m5~^|!V_UU{W6xZ%Eq*TbKe&)NnRnoCY&HQW zwXvFP9g;8o3(cQENcXoA{H-}`)EB9aZs#}_y>bU&|aL2~0gYO=V_TCsF{m|ayJ6W-9 zW@e+9&|Hccol)U+F;TB4($4NsnqX29iUscYq3w6Rb$VV)CG2mINBpW_BR?Wa*9#!( z2=jGnliA*#RT~OD{JVR5s3|Zr*ZjVoJ>`@zVX3?fm4`#cNOteP>1>F+jeSBGuo*dsJ#W)%)#Q7@maXrf)!)bIAxWgS z`n+vQy-*dG@3;v+;t~kVAcb4_WnqUWA9mO*pnM9; z4GE;7R;&KR=FU7IVXBEyyz5v+wf{~+vsXV(^9po}r#luhSg=U&N%BU-{#o?oBP^ET z)8lI4uuuF)vbcpP0GqS!d8id@J~LM9JVbM393J2tv8*HHJ^_#_vU{Y+pdCWr)9O~| ze^fx$LUyz##YV(Zv_R-;cOQnF^?liN`O>V_!~|+YOS7DU#J>Ax9v3|M0I`LVpWY)k z5A_QZ)ChGJDv?_H4^^2F9#6oG7(%;!Vs?iRWGZ_sgto@UK0hd6>pk(OL^)2&-zEm% z<+TaF2wU7h`(){o0@~vpPXVORx6jl0^CF2UEdg>rVQb1G;kQVYnG4(Cf4r3+maN35 z0x2sv$7LFGUP%TzM%;JS69VwM{5|UF>wF0$7t0~Y+f4S*st@@lwlOU%$Ny-m+0q!Q z&PY`SH2JPvT>qwCQdLE!CLYN>+(bZ9zo@K54SMb7*}R5X}=M3`CT+?ectz7LO`f4TF#7=K)h=gN0n<92)h z@Fv*ssCKE!<|hEVl94%EY2t-0sHcktP-E4(k_h+MNfD_Rxi0SCWj6%mr#ug?Nn-wU z`k~UI?Oo4%e<8M+xLk2#+7B{3AM;ri#@lr>)~YN81-qsA0)JuQTD^Lr6o6x?Z@$Y} ze|k^;_+(_678Uu9I^E+q_@~i9;sc2&9zTR&Gs)fZvhs4e!YUb`q&fzmIWd>#E4L1% zhUK2vuWIpz8X7zu~3ioziMmIH5&{|>2(XuQ@$rMd7XbHK=nKA9@R$OP+O?C4y zMY;165Vzjt`L6eSjw&04lcI%W$8dnEU9mr_Zv{VpQOz zy%@ES>r$EcJt&;0mCh#IW%oO<^7GprFTr&m{nBX>Z0q;ak;N&|74u(+JUj!G3D0Wt znlKR-q)T&NQEk%tWKeF-lyq(?9Jh|%4R)6*pn5P7uXXa;e;n!!HV-hcArdl&uxf6J)Rd`j`mkf$Y zm1h8yIj8HLyP?@hAjVRO`Nt-<16&58a5sDxdvaTf1d! z*ZOqpb<7wo>qaDanpJVTdKWAzHYXt`ELXH}QDCIOqJRyFk7--+(qC##z5O9R+#pj6 z(NH-5Wsl?Z#V`6cgoHUeQRv1xi8O2tZ@UgHw^kn$;FK{AZfH~SgEn&nJQh!HvV3;~ zlpJo|8gXG5t2VInKtb;A;L-W(C5g@MmUL_xTWt<4R{?;g*B02~AW-MQ8KZM;I#hCkE-3KJ5UM#TK2>P85$ZjlFq1_}a8)Dl zm>nbwV(7wh<)4m%Rx^L=FXSRb@6g!n(CR-MbF|7_+LUd_e||=Zp9cZVQRNkFu2~PU ztuH#hs8l+kOD|Ot926@?)>;f-v{qD%yj^lv-*Zx@Mhmb-&6^0Q_0Czzr#ddOgMoXB z4~kJPfWc-F3UMA=7__#kX3A_hjOXpzjgj{2YfMzopLcpw2L020;$7(l;pF;Kq?6n z{uRoa>Pk}5Q@Zu_FALl4g-J+A6ue)M`tt3U9d> zjKA+U2|Hbj@Rq|aUy&HVGnst6IokN^?(%f}FTYxPbY^CO$5P8`=eT;!^+dz&XM9Ih zr3*1-Tu^8pItqBtkMB-&wHj!~)$kC?OCPX{*D?7-zF!o0DKw-#DpGcrdt<=@+WZmp z;boFHtuziE2XuJtVYs~eW!wz$h0$OuYQzJy6z2 zgLl^4O>)I`aM882RG|KXbKhs;n~aY6ds-HC{lrTE>bT^8lUc$}QsyyjgvX=hLn!+) z9?R{3#;TE|!~d8Ir&)dC;$xO(T{hNaaf*VIQfdkwbMHRcswh<%5?ID;^_0p6p>hB3%jeH_$?;0caaZC+_Os2iUUp>JwK`*(Xl#5;%^y;Cs#*WV7}Ktd zf!9yCO!Z&3-&m^-cT40qI8UqVRt-4<0jp=uGe=b+#i#rZyd$4(GFUIQ@<$z-M9cjP z-X7j2)d)Ofr%i-dHmT+Ft)~`KkI8{&@o}`P{dGd}ds|~P#2N>vE7>_i4G+~wJyblT zR7FH?YQo9sPZy4x&wRIswJ$}mBxyVrOl>kD;Xo!IcHyf#Pt{>!FpSGIk$G4fu zI`0KdDLQB)GCwl^2@oY|Vqckm^I495$ZJL)--}w)HS(7oUm~b&v?hhB0&ti|Jy=u# zptlTocH;Uipfa_lxqsA*!S)WPw)hLFhW|wNJjzgBOT%r5M+%OFv%gj2oBE}xl0Hq} zq2dJkZN(Jp2E>W>5H;9-S>9t*AJGK>^cJijI+pq-PjaY43#Yx>fSM5^?@e& ze%`@hciv8?-w$*T`Nji$q|WG<9KwAB%AV0@P5vQuD;@61c_@|f(VklKZVtO)g>9lD zSy~VLVCUzk)+}>7-FsTn(UgNjSh+34XLOQ+eDjsV4$CFCB0&E(1*b+Dm7KIQi6x&A z@UVwPS%wsOxzPXuRHGM9rtn7JN~|ocF5x&vFU_D`39ogkz8UpxnXX`^$W+R(QovSd z<8~xuwPidHpY(YUzh+gDJI^Zpd93vW0d)3Z0twRX;m<;PT1rJGRsFC2d$s}~yNtSV z8Qg-VlO!X);?AX5&&U52XbU88Y=w2@za+z`d zhZ*YrqEVZ)_4V~x4N!YC08j}P)cFR5)9L{~9(yMp?UP0s%|nlO2l!f* z*uZXdvkcGwIxI!Wy};gtY<(#g+1{Q=TI$PB&L!65&Z{4tJ}bBIkkb!s`)cA;dMQ0M ze$;_qSc5a~su0{rUX0B0yE+odv>Zd;(~|SJSr5Oz{KWaEkv%Y{wa(P6TlD$g=GDKK z210MItP@Mh$#E34`RhA9NF=cVnVgYekd%?^>A5G07A*$k6KU~mr90v_ngV=jYrL>{ z-#=RZeAJr*D3bb?5v+!g+vhz6WBQiZlQG@Jk_2|5@T$S=;&B?_6D6BZ6) zATOmq=?(6(BuKjBrBthTO&$_?Kljj%w|7ZAfuzCVqk=Nr{>Z>iw(L&<%r?}MuUux}rdm@)tVeFlnFW>zg+M#L}_b~7N|mx;kiX>R1MFf{@h4* z#OtMSm0=8y8NX9gavZIOatULj`fyBco6$~vV z;~vi601FSLN!xv`@IBcvRaw5LH>GiFJ1!5ub2m{&2X^P(>YR`S!z;Lo6x%$H(7@&v zsUv8xW|wW}mTfY9wOpH*ahrc~?gFM+-1xbNx3_WP5^b!pH~aYg-p$5zz2@F_T0&fN zcG;j`X=>JVjrZP9y#nP?fTB1IsMPV4?2_76N$zq$goHZ3plH&UA59>Q(}UO};m>ev zFLs$3lHih?G|_10$M{k3O<^`Zwvp?oM==s$b)y>I_DcQ@U*oPQMfny))o-{m9kg!>4}6%~Cn#{=FG zj>ilx(bJpWAw|XMyrN~v*+y<_=+KI~AF&j6UkSeSXxL5vX8)UpLq?;eQO^`fl06a_ zQ93$5Ga-T4r}=v`-prBkVc4(uLEYSSO4l3<%N*C{64+56tT?k#EG(zsCs;}z|DWo4+C@kz?@oAfxqvy!cJb`-=s`y99S z$Q7>Ii6Y*^phL=6i+}9Jt;Cf(Hf$Xhe-HkI3`jHE)i8s#$r2N85$7I^`OJV(y4X#+ zWFb;>>MD&(*%+`4{;eih{X#3M!1%{GZEyYx{)BY$;fw!v8rk?tju%BsiAs{pt5wA4 z!|cIFVz|Twg;AAHbiW!76xHl!58HnR-zc~U^qW^BMv<(fkMy@>t4^t+Hx z#*8noGw)7n37A2blrLR9Ip0nh4P{&z5(oruPmrqHYJFt}_7nMd3w9hOLg}TysUPZD z=)G)l>A67I6nHvg)YFj#7C$U4rads)$h^{2bW&l2%i(fW)^c0s&Af`lRZo0DOZm;i z;#1b8EAch7T@z#?pvOLFOV13!UBl|6s`MAq)?ITu5S$wU;c>=}f^E zbSsOsacglhr|iv6sxN=udcZI7*8o1p?z^AvDSdmW?}k^LS1`%p4TWcYG}*Rl^HV7H zS_pgGD{bRXKcoP!5~&$nmZA!+%nd1RaKDmUijlAET~^r-}mC}H2_W!xzmf-cE&7hBQw$;-~ zVYQ+yyWUd}TXwZAP|=XC#g3&lan5h{?dc%xolINHXaaQc zgyxbULP=Ou{w?^@URUm~-pS}}JUf7AsK3=wSYCUAFyv?L?9VIBJ*GYi62nLwqdxQf zQc&dm>cAd#82Q2kYHKU*+UjRDTJKk2l8V1Q=e4ee<<$cIfJQ)cl0;bx?7wmAOd6kq z{C-<7eC=B7lh^$Jn##dm^!^0=BBCQKE8L59ilH-A+FCX(S!n_od-7}OB|VsK2Npxx zQGCB81t-{j#ZeLUS+s|>5S`3g%TKi%_6vsxNzqlb(hrQsy>1zy>fD{MaHIRuEbuF) zZEVF*YiSJ?quPE`ALp=3JAl2QF$4jY<*vzRh)rn$f>u*}3Ys9BTxpUu+L25evdi;6`j zS^6d+>+QKHnd>=`)blxe=j{{G(htYh&YwJ3PrJ@XDf!|fnt_qDFKdpmoKwYCU(NGq`K=cvN|og%+s!oHy^W=xLCd^{)){U{qB3t}Rv@x&t7mzrEhG9EKj|K{drh1yKb@_VuaVtF^o5q}3rtzciX_@*nnGgudI6@@%Js|I~TM zSom`cg^B@M8$o$C)sfrO@)<@QjET9>+Ypsnbju|m`n+l zQd^@?U1gTws-`t)UBQb#i6rt~UVFt$dNU|U+ax}i>n~6Qo7q^pRnocT)4uWTA8nIs zK;3Vkc|lmi03jDePmE!JQf!O%ctSbnnpa<^mEd96jbQnP@YDS-#!F@ zeobbqF?9ohTSdjY0EcO3A5RWc)}=f_pt`ogh&&a#OWwc|5Uc44CG*`5PE$f$0c?FH zr%|B2wIK1OZDdmpZ#cDGs>RO^t=Y52g`*-^lpi_qKb+S?M0R2tvJ>@j~e{q~B* zIN1M)x~Y0(Kp?LkGmcI7YrJqpv$}_DAId4Ey z*Wg7d{y5D@-5!fUL3!k_KfpI`3>Ov$r`aB_?2?{7(gw3mynzOW=7(H)*opwQ+(^5d z1X*J^-G zM3kJrhs0}+tW`4?w}E=Ke9q6l83ddN;;aY&e#K{zG$QhjI$^D|g7Su)Zu zOc_w6%~*Eeh_;eK8DiU$;laI=4U8Z^#hy;A7$>O)dyr?6u#`FYYYL0RMQWG8i8;wN z$a~#a_2V%Q^_?WW0Zx9fpOLbKH^tc%UoI{VG;_aNwc!QoC8gD{^_h;wBNcm2dS3Pe z^sqZ)zQ()&(i5r9VC_wZ2~`pW0Y2)UsY?vC@zh~SQ){p44lA>1Ib z-z24^k3qwDm7do$gMXwm0)@0s?j1~q2YuCn?ZNb*;`i@esSH}kxUpmw(5Xwbtuq&_5l zt`X!E$?*8$79oLTIV1&6AsjO89*R62uhwsSme@0AZl3@9Cg}2JCT|x5O&%xUr%#KU)+|iRi)0 z?(;lvsP(>LG3o)~Ng9L3FR5 zf#636lW1;@(o*Nz&C+x~RviE3d*{~@_+?qa0wCPo#4UddZHw2rLOy{Hehp}LGU+OF z^xIiqUH~h*md?8}RQzVNY1^Pq|M+vSeuwb&KO0l6N_>t-Y#fR(NVnPVyxP!EJbv$S zHE7f8zC2{zs*c~x7tCAKF*8u3{W5T#=j+BEgJ4Ujv*!%JumJjfwz(*hRBEu`#7T3} z7{zHC>;vC7rVDaaaEMYeKfiz@Mje|1y}auw&w1(|@r2l&*hG0`-M3O>qdZXxVPW0! zYlWPa7U9DM)4Q_>MyAx?Am;BgvIN8$neS#SHI?H5dQ`H`0^F9B@rqIp@TOVV9d#bd z+WiSb{?WU9dB6hGH<=d&;lD2U^wt^?kL|c7Mm~WVFTH|bUM+>B^mFi@ zm+g=GnDxB1OJTtOYLhPq3?VL#;gbhW7@iY~_3q~T5`SMRANCZ+h6hx zy&vRBhb-)C7r1krlj7eZ$5}IQc(HvOhPKm3pNvJmCP~7Z7sFf^i1t*XDCtUE+Y%V z%dwd5Kib(LcGY;e>Eztr>z5Sw;HQJDLKb^~R&oA6TeQha^HQbkOx#sHdCd?QxoM7s zec3`#%3PKFekeIseSiu)CZ!1gSJ6;~XQ-A}#q*D#lWm^aKn!)}(xzVVBXWM(Wuo+u zkDp6={s2^XN2EcjQ8X)~z`y>DZ;lkCJL9!$-!wa{L!>}hy07cFCEK>(F->GPxMimT zRaQXLU{;C6XW{qeKy#o!@J^AAr`f<-k1Uo+=CLf#`CzlnmnP)sqtpJ1e#JR!^Yqpb zSy-$s_0SScJ5;qC#_u$QG`aY3WZY=6%6qh*uhn0Qn$*wbBG1I08{A2ueA(y5N$wag zRX!=M?o72t&gs)r>aU|M_#Kpee`;=X%Qf=h_Ua(UUr6@gEIi909~Lyzh>Mg>7Bl4l1eO8pC=`urJ zdbf?nZ2mM0!phR6&`qil!LV(5dpU zuF%)LXOM5cakhn0nPU9MeykTuHmW{eriaHUqNjDrxdkU~Vu$zq_^`viqhKA?Gx>vB ziuSLan7y8v*@&Tu$nRip%2B$+e(ZXcPP>vRjg8iXJTN^s3eXK0L2AGJs3>GC9SRn z2c%h5wR)7ie%aC88B3o-xWTPkI>u#`kBSq19p2oku7A;t@PD7Q_F3qFkhoi~bx>^( zncV%up&`0H55&@oyRajQ39v6 zEXX>G(!>E66#$Pn%h0h{RnuWBPNk7F-=a-ZkocG$bk1mSsVC^;@+&hrpH_kBR@Vwt zHqxvXBs>7=SBb4aJ6X&@vPrk%Jw5JR{CRKqR9wec zE(KhaySZZi&C~&WK0Z#71;5Q?4r>W81NpXge)L_POhKZnt>yt?}eX_mR(> z$b19Eh}MD&RA{y0S;q^0G=l)8K^^^IpB@_+kJqNTdUj+#6=8Z8=*#bWw6iyP)bVb^ zwM7=26uW1MSTz@I(EpU&IKqkZ{BG=@x`?(^f!Tfn+F9K3to*ziF!n z7buMOfseX$H4FH?=S4hJ65!8&D>6_3jGW=qK; z8!)!ucgYl0+O27Cqi%@<%(F|H46 zD3HMVCqvpr3n(H-=#J2tc1rDRRbL(Wl2Wk%f4IM?>2%FQ+3`9j-$s{A0obu-dWo;YFxoDeTjB0nmamrVZZCD%9mT^ z*Sv!k3hbuui_E+AF)K3Wf;hN4TtRXKeKvbkMArb*%rdU4c%#zAl^)mKU7 zs(cr1Nxt}4^xayia0}clLc)k{5riAsX*;9-H`0S3#VPM<>V;b5lk? z&O!**D_Towdho`wMMeL77g*eeP)Ma^<(wI=ttr>dO{-ZLE`t1iYFsAvh1%{&zpL@U z$4Jwckybn{=3JkIF7bHPyXSLD50hrfbX@X$4Cs5=R{pHhoRmg0!g|9}Nw#R!-+DpVU15^J-!ZmHxQ8>utG9@WkG%$9?}knZuell*<7g*5j(xw2LV_{)b9Pearnl8jnLDU>g>R4|GpbY;7)CstX)>5VU~!CzjnF$(h^ZU0^^j3;NIw`F@;2SjI*HDOa9`&)=(xme7f~^cMtLCxD zZN{4oK9u$~El6JyE2J@_xe*)(C8e%eEI*_ofpu07ebjb6kO#iTf$0X~n7W#4v^S`C zjx(X$J+}M>ZAHtcqL0Y$KOUP;0_#JBqHeXcb$n2+9S-yZzhl3`=paP6NQIBWFTb!= zxE`~aIv8qAwsPNQwE*4DTO@6z4tuHX_FW;-*gRE);Zx3C`>MBd7rcq2=Ta|RcrVhW zWlV9ZhJAf`4W0P>3h|*|Ti(6R`f9u3q6FmNmgMp4n*vF0t45_GW#j1FqeT$gMS5ZK z;MHCnq&)?9_2C&e|Fby>GibbIW_ZQvM0_YQDvu1$+#H|&@`)G3irIKG=)U0h5T*uW z`iE(VK;L0sjARNNTX7vrHHH p{=JR<#q{s&e}n&I`klnY%yeU->b(fAEtQG!>1yd~qBNd`{TK3Fox=bC From 799d81032692426a1f85a35cdcabfba687a46fda Mon Sep 17 00:00:00 2001 From: soaringwave <82134672+treesofgroo@users.noreply.github.com> Date: Tue, 21 May 2024 22:18:22 +0900 Subject: [PATCH 11/21] Feat: add big alarm.png and show in expanded --- .../Assets.xcassets/alarm.imageset/Contents.json | 1 + .../Assets.xcassets/alarm.imageset/alarm (1).png | Bin 0 -> 3912 bytes LiveTimeWidget/LiveTimeWidget.swift | 15 ++++++++++----- 3 files changed, 11 insertions(+), 5 deletions(-) create mode 100644 LiveTimeWidget/Assets.xcassets/alarm.imageset/alarm (1).png diff --git a/LiveTimeWidget/Assets.xcassets/alarm.imageset/Contents.json b/LiveTimeWidget/Assets.xcassets/alarm.imageset/Contents.json index c3bf5d5..c254524 100644 --- a/LiveTimeWidget/Assets.xcassets/alarm.imageset/Contents.json +++ b/LiveTimeWidget/Assets.xcassets/alarm.imageset/Contents.json @@ -6,6 +6,7 @@ "scale" : "1x" }, { + "filename" : "alarm (1).png", "idiom" : "universal", "scale" : "2x" }, diff --git a/LiveTimeWidget/Assets.xcassets/alarm.imageset/alarm (1).png b/LiveTimeWidget/Assets.xcassets/alarm.imageset/alarm (1).png new file mode 100644 index 0000000000000000000000000000000000000000..80d8a1d08834c53393c2e97420f948161eaab4f6 GIT binary patch literal 3912 zcmZ{nXHXMdw}nHDG^O`YOz07T&=C=&29O$1klrE$2sQMMC`fN2ND(23ycESyq$?fi zMXFQ{0Ye90LJ=;`ow+l2zWL_tbJon>^PKf>&#dRhh6p-ZFf9N8pwrdSL|&@&-%Cw- z`SPj8*IWw3Ne5{F0E7qw08z03z{zDRY8?RZhXVk=>;V9!8~}jBJHN?9`Eo$%cpsq& zxcGaDTFWvoJ5*R*11+lct8CZVu2=uj=?4IS_e0DqutxHDt<>st|va);pxpoS|bO~GPoe=$(dIbto(ett|erjJ|L)dB&NA!k7t z#sZ83(cbLj|7#<-$KL*dy^zWe1rt4WdPE6PpX$ zvBj32--I4pXjS;$`z-Qyaqmul>;r*a zFgF&aFHua;9V^25M%@i-D0puKr7pfGA>1BR9Ur}@rD&#U?)dCwh>C%(zvdc8V7Akj zT>StO+?byYb3C8Bd>C;`$|^hi_~{6K-ipI8@XlL~NE%VJ>RG|jME*HNa=qtCiTnZ< z0Jv7EtEpz@y113=p2X`C+#9)bI!yTfZ{;*;pjy(sm&2pCCi)*5lM+#!Hcq!BN{>Yc zT0ST2rdtH8V>VN-l{Ld{P?^a=%R9B$_+yM?EXT4%kznA1YWjedfP9I62)q$`c!<2t8rJ8U4L zyv=Q&-q;pDtbVVb>@(nW!)D4q!sO-8KC>+ll5931pf8&;`rdP`H}f?y^+>h1r!D%z z|9c>!u#}V4;zo6&&qtXf^6Xq=1u6NTe(sCz3cb7?ueV$H_Bx_)z1K{@v6^&&)Dj

;IE7YqEy^{9<;+ynq5?S%aVqe=SS26W9HVQtjy!gt-VNz)6#j{ zcP&YsW1h07rwtW*B;!J$Wh`g$RhqetImo~N#V4{U$r~Ym&{+-VMj*d zZWmSwX0ts}B<55ZjmNtU1{jW$LU-ttp$ChUnzn651LZfq`GdhPug-xhUr5R4H!~*l zz{u|HcKfFnB@-cd*w)*%AkwCV!EjpzhQD}&QurgzhbTVA?JSU4B9`E;RnAr>g|Ctc z;_q#;k9%cc7+!=D=JTngw^YJa8@h4yd+512Axrv`I$!a09IiH>R~E@DbAU?Q&&o{g zLR&}f1i2Rbo$Q5}EmU#fwrboX0=~VfI;z9F9-7`Dv;2!$Xg-0Uv!xd}dor(vnQW(S z4ca+-Zl5O|e+)Rld8Q9)yXK`e#ZKY`g`rch^7{3`&RpQv-#?tsJr+r!%Nx(VRGaI4 zx3)vfF6fNN1y!wicFK+3kJpwEc97srU?H;NwdKJUP1vIjmhLYz5BUt+KEN!NS8Nir5LKJ*~I!nC5Mh3Q%Lhh3aZ_?)DrleI&VLiZz5Z_ld> z8PKf~e8U~_wN+DVn-Eu*)gC_hpq_4SOAA<+UY91-U$G31rMN{8^CcJSL%xEFsqENy zQ7NM&HC+ZF2Pm(&enU#+S(D9<`O^>BU^UuC{%@NuT>)neGJy^v9ZY>toS0)(PgB-g zF74)bR@~T^?7$l^WkDbm1Y`s%b1hdWtKa+e%R1hW7n~dBzGLl|(Y>}xxRP5jvRl2Z zqFQ&LU^Pdb0J^@KPr>snXYd;Z6%e#g#0y@GW(2|(Z&TV4($x8{PLBIMAEto=A4oOI?^DKbVKpZ2CJ4LRsfM6zdTjhu2y`~gM_1=fM zr2O;UR;u$ifnkr6+?-bSqht>`>o%*bJu0q}Zq3!{Yz61zqcjrI?s+crN;c(bQd4!< zf{fLRWAEujXE56l7}cY6a#M}kkGj4eD44m4Y)d09z1r%P{n}TG&{e z3@L9;8uilJyGyV>M#$!51e_)6-^$1g6Qrf-fW&swBxl0(^s=%P9j`MXW3qq-nQqbn zq<+87=_w_AelFjm@U-ZTW+}q^o}RBxb4`hz(h7*)6o~=?b@xeNh8wJaRWC}Q<2f}{ z7O9A(;De!F;j26D}CXAP_Spjz_!G4a?=^N|L?CD%@BGH-j2CtHm8Dmj%y36 zec9u>=`S^cieoibX`W`>ha*?-->{>JO<=sK4MVJ-#uge4Gr&MXz@-u=aQmHEmGl1A z`F~d`2|vj`wPORojE{zIIga;a6)Ym6F!p1s>`iLSz%Gay zmTt)ZRLye1;5Kv*r+%No=uub$J$iuJ91?J#CN~tmL3BxOz#oODJ_PsvaB{J=<3+?k z1V!XmG8WjJ2qvU+k=88HFUT*~ps>EJ!_yrRk?9iSppMR$D$$2D4|LwC10@B`D58lh zq6{Kdt|q0JVX3^fuk%BZu++)dr(fM=mM*@|dA}>74nmWU?+1dGcb_+ZI$aLWt<_Mi zoBF;YsKXjP6VIqp^d(v(Axc9pE^gZ9k5VEVvw-Yy43=HvC=er;YuJaqhJi@&A`486 z#BAmGF0eAT%IKJr%$@DlALG0fWD;pf`xUhEx1F3}ZL@?0vjTkwzgLOV$la}8v<+G@42^K#UT@?ur*fWe zx=XIq7?t^z|H>Kt>YHbFA0GlA#c2QhMl9%fszHk(jFT1EEOeu=($|l6s(hgA&ZALa8*jjR7To3s1LDk@YdB}x;9Q6 z!WQA-qB96DPuBHN_dsITm|UI(Ff$49ejH54!AwNn&KkPbIVz>A2|}aAG8p{o>Pq)l zb_yaC&kwBHYC<4+2|I5BNhv>PCN+pxtKHuMq6M?&_qw(7>s-sw8-BI=$tfwWLKw?} zq=zCUTy@V^Sxb0()Wi~UDksr$rb*9?DOojh>yF#T92Lptc5T1&R29$cB8_D7th5kk zw%UN`@zFXedFWdCR3yP=ECK&m0Ie}MIv9kW6Y|PJ~-H!Cm&)C3m zLW49wE~GKxAiOboiFb4MxU0Q&f3j~njy_{9USoQ(J_O?Q`z3lf&E@;EHY!QLKlC~7n(Z*Y5 zx#g1ZyXIw0oH7dYZ@Idumyn{c5MOAa3ll$S*i%9y4>Xc3JjJ1BbhtL9dNA5s2tM9a z*!DJRCxhnYF})Uek9f9dS9T`yJWu~UH@O{3yMZ~?-S+PzyAsf zYti^>BO-by-`%pduaq7+v(|Kz(R|lW*k|oX6VE%%0aKx_>*>U@tPe&{xNaE##4P?+ zl{ahI+eqD<@2rl#@*Qi?u(2@0VGjD>m?pbtGS2MqA|Kqa&WDAUIn z8~)7oj+_rMTw*H}scxv?ph-suElR zaGK`NAuk%$jjwg?sz>@voLvbFtNC+kw2jhm;NTvZXR1;e9&YOoBl2kXREl99o9;-c z1TFIkvm5$M4;|S^e@;*X(5oIipmj)JkwLh2`)lSPH({fuH^w5&K>PFz~b zOiEfwT1p9iTMQ0Yg2M-%H8K1@0ORG1ejNPYfu?yN{t^)VKL;!tgYv^VTt?0RFp-k_ zUlZm;%!^Bg>n~&K^%xuI;EMvNIeR&xAi5X_7ZeiZ;2iAJkNO*T0lHd-n$_y|G5-TN Cvsaz~ literal 0 HcmV?d00001 diff --git a/LiveTimeWidget/LiveTimeWidget.swift b/LiveTimeWidget/LiveTimeWidget.swift index d597bca..2f15f90 100644 --- a/LiveTimeWidget/LiveTimeWidget.swift +++ b/LiveTimeWidget/LiveTimeWidget.swift @@ -27,11 +27,17 @@ struct LiveTimeWidget: Widget { // dynamic island DynamicIsland { // expanded dynamic island bottom(다이나믹 아일랜드 꾹 눌러서 확장되는 버전) + DynamicIslandExpandedRegion(.leading) { + Image("alarm") + .resizable() + .scaledToFit() + } + DynamicIslandExpandedRegion(.trailing) { + Text(context.state.restOfTime, style: .relative) + .foregroundStyle(.customGreen) + } DynamicIslandExpandedRegion(.bottom) { VStack { - Text("잔디 심을 시간이에요!") - Text(context.state.restOfTime, style: .relative) - .foregroundStyle(.customGreen) Divider() .frame(minHeight: 1) .overlay(.customGreen) @@ -47,8 +53,7 @@ struct LiveTimeWidget: Widget { } } compactLeading: { // compact leading(다이나믹 아일랜드 소형 버전 왼쪽) - Image(systemName: "leaf.fill") - .foregroundStyle(.customGreen) + Image("alarm") } compactTrailing: { // compact trailing(다이나믹 아일랜드 소형 버전 오른쪽) Text(context.state.restOfTime, style: .relative) From ef6dd163b3c9a4668b4d12b69e39cedc2778cc4a Mon Sep 17 00:00:00 2001 From: piri Date: Tue, 21 May 2024 22:35:43 +0900 Subject: [PATCH 12/21] =?UTF-8?q?Feat:=20=EC=98=A8=EB=B3=B4=EB=94=A9?= =?UTF-8?q?=ED=8D=BC=EC=8A=A4=ED=8A=B8=EB=B7=B0=EB=A5=BC=20=ED=8C=8C?= =?UTF-8?q?=EC=9D=B4=EB=A6=AC=EB=B7=B0=EB=A1=9C=20=EB=A7=8C=EB=93=A4?= =?UTF-8?q?=EC=96=B4=EC=84=9C=20=ED=85=8C=EC=8A=A4=ED=8A=B8=EC=A4=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- MC2-Team3-Pilling/View/PiriView.swift | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 MC2-Team3-Pilling/View/PiriView.swift diff --git a/MC2-Team3-Pilling/View/PiriView.swift b/MC2-Team3-Pilling/View/PiriView.swift new file mode 100644 index 0000000..c05e280 --- /dev/null +++ b/MC2-Team3-Pilling/View/PiriView.swift @@ -0,0 +1,18 @@ +// +// PiriView.swift +// MC2-Team3-Pilling +// +// Created by ram on 5/21/24. +// + +import SwiftUI + +struct PiriView: View { + var body: some View { + Text(/*@START_MENU_TOKEN@*/"Hello, World!"/*@END_MENU_TOKEN@*/) + } +} + +#Preview { + PiriView() +} From 76e426a1bf76f4f88557440c1eecf0edbad05c48 Mon Sep 17 00:00:00 2001 From: piri Date: Tue, 21 May 2024 22:35:54 +0900 Subject: [PATCH 13/21] =?UTF-8?q?Feat:=20=EC=98=A8=EB=B3=B4=EB=94=A9?= =?UTF-8?q?=ED=8D=BC=EC=8A=A4=ED=8A=B8=EB=B7=B0=EB=A5=BC=20=ED=8C=8C?= =?UTF-8?q?=EC=9D=B4=EB=A6=AC=EB=B7=B0=EB=A1=9C=20=EB=A7=8C=EB=93=A4?= =?UTF-8?q?=EC=96=B4=EC=84=9C=20=ED=85=8C=EC=8A=A4=ED=8A=B8=EC=A4=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- MC2-Team3-Pilling.xcodeproj/project.pbxproj | 4 + MC2-Team3-Pilling/Model/Config.swift | 40 ++++---- MC2-Team3-Pilling/Model/Model.swift | 10 +- MC2-Team3-Pilling/View/ContentView.swift | 3 + MC2-Team3-Pilling/View/MainView.swift | 4 + MC2-Team3-Pilling/View/PiriView.swift | 101 +++++++++++++++++++- 6 files changed, 142 insertions(+), 20 deletions(-) diff --git a/MC2-Team3-Pilling.xcodeproj/project.pbxproj b/MC2-Team3-Pilling.xcodeproj/project.pbxproj index b756f80..b92ef11 100644 --- a/MC2-Team3-Pilling.xcodeproj/project.pbxproj +++ b/MC2-Team3-Pilling.xcodeproj/project.pbxproj @@ -18,6 +18,7 @@ 21B273082BFB390C002BCC67 /* Model.swift in Sources */ = {isa = PBXBuildFile; fileRef = 21B273072BFB390C002BCC67 /* Model.swift */; }; 21B2730C2BFB7301002BCC67 /* SwiftDataTestView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 21B2730B2BFB7301002BCC67 /* SwiftDataTestView.swift */; }; 21B2730E2BFB85E2002BCC67 /* Config.swift in Sources */ = {isa = PBXBuildFile; fileRef = 21B2730D2BFB85E2002BCC67 /* Config.swift */; }; + 21B5E33B2BFCC83700D1FC06 /* PiriView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 21B5E33A2BFCC83700D1FC06 /* PiriView.swift */; }; 939C87E02BF307B600572EDC /* MC2_Team3_PillingApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 939C87DF2BF307B600572EDC /* MC2_Team3_PillingApp.swift */; }; 939C87E22BF307B600572EDC /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 939C87E12BF307B600572EDC /* ContentView.swift */; }; 939C87E42BF307B600572EDC /* Item.swift in Sources */ = {isa = PBXBuildFile; fileRef = 939C87E32BF307B600572EDC /* Item.swift */; }; @@ -70,6 +71,7 @@ 21B273072BFB390C002BCC67 /* Model.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Model.swift; sourceTree = ""; }; 21B2730B2BFB7301002BCC67 /* SwiftDataTestView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SwiftDataTestView.swift; sourceTree = ""; }; 21B2730D2BFB85E2002BCC67 /* Config.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Config.swift; sourceTree = ""; }; + 21B5E33A2BFCC83700D1FC06 /* PiriView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PiriView.swift; sourceTree = ""; }; 939C87DC2BF307B600572EDC /* MC2-Team3-Pilling.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "MC2-Team3-Pilling.app"; sourceTree = BUILT_PRODUCTS_DIR; }; 939C87DF2BF307B600572EDC /* MC2_Team3_PillingApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MC2_Team3_PillingApp.swift; sourceTree = ""; }; 939C87E12BF307B600572EDC /* ContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = ""; }; @@ -141,6 +143,7 @@ 939C88732BFBA01C00572EDC /* PopoverView.swift */, 21B2730B2BFB7301002BCC67 /* SwiftDataTestView.swift */, 93EF92D52BFC4187004DEEF1 /* ChooseStatusView.swift */, + 21B5E33A2BFCC83700D1FC06 /* PiriView.swift */, ); path = View; sourceTree = ""; @@ -316,6 +319,7 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + 21B5E33B2BFCC83700D1FC06 /* PiriView.swift in Sources */, 939C87E22BF307B600572EDC /* ContentView.swift in Sources */, 93EF92D62BFC4187004DEEF1 /* ChooseStatusView.swift in Sources */, 939C882E2BF5CC9100572EDC /* OnboardingFirstView.swift in Sources */, diff --git a/MC2-Team3-Pilling/Model/Config.swift b/MC2-Team3-Pilling/Model/Config.swift index 8c2bbaa..dd4f185 100644 --- a/MC2-Team3-Pilling/Model/Config.swift +++ b/MC2-Team3-Pilling/Model/Config.swift @@ -51,34 +51,34 @@ class Config{ } - func DayDateToString(date: Date) -> String { - let format = "yyyy-MM-dd HH:mm:ss" + func DateToString(date: Date,format:String) -> String { + let dateFormatter = DateFormatter() dateFormatter.timeZone = TimeZone.current dateFormatter.dateFormat = format return dateFormatter.string(from: date) } - func DayStringToDate(dateString: String) -> Date? { - let format = "yyyy-MM-dd HH:mm:ss" + func StringToDate(dateString: String,format:String) -> Date? { + let dateFormatter = DateFormatter() dateFormatter.timeZone = TimeZone.current dateFormatter.dateFormat = format return dateFormatter.date(from: dateString) } - func AlarmDateToString(date: Date) -> String { - let format = "HH:mm" - let dateFormatter = DateFormatter() - dateFormatter.timeZone = TimeZone.current - dateFormatter.dateFormat = format - return dateFormatter.string(from: date) - } - func AlarmStringToDate(dateString: String) -> Date? { - let format = "HH:mm" - let dateFormatter = DateFormatter() - dateFormatter.timeZone = TimeZone.current - dateFormatter.dateFormat = format - return dateFormatter.date(from: dateString) - } +// func AlarmDateToString(date: Date) -> String { +// let format = "HH:mm" +// let dateFormatter = DateFormatter() +// dateFormatter.timeZone = TimeZone.current +// dateFormatter.dateFormat = format +// return dateFormatter.string(from: date) +// } +// func AlarmStringToDate(dateString: String) -> Date? { +// let format = "HH:mm" +// let dateFormatter = DateFormatter() +// dateFormatter.timeZone = TimeZone.current +// dateFormatter.dateFormat = format +// return dateFormatter.date(from: dateString) +// } let dummyPillInfos: [PillInfo] = [ PillInfo(pillName: "머시론정", intakeDay: 24, placeboDay: 4), @@ -97,3 +97,7 @@ class Config{ let myArray: [Int] = [1, 2 , 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3] var colorArr:[Color] = [.customGray,.customGreen,.customGreen,.white] let days = ["일", "월", "화", "수", "목", "금", "토"] +let dayformat = "yyyy-MM-dd" +let dayToHourformat = "yyyy-MM-dd HH:mm:ss" +let Hourformat = "HH:mm" + diff --git a/MC2-Team3-Pilling/Model/Model.swift b/MC2-Team3-Pilling/Model/Model.swift index 4c5b4b9..8afc633 100644 --- a/MC2-Team3-Pilling/Model/Model.swift +++ b/MC2-Team3-Pilling/Model/Model.swift @@ -38,11 +38,19 @@ final class PeriodPill:Identifiable{ var intakeCal:[DayData] var missDay:Int +// init(pillInfo: PillInfo, startIntake: String) { +// self.id = UUID() +// self.pillInfo = pillInfo +// self.startIntake = startIntake +// self.intakeCal = [] +// self.missDay = 0 +// } init(pillInfo: PillInfo, startIntake: String) { self.id = UUID() self.pillInfo = pillInfo self.startIntake = startIntake - self.intakeCal = [] + self.intakeCal = Array(repeating: DayData(), count: pillInfo.wholeDay) + self.missDay = 0 } diff --git a/MC2-Team3-Pilling/View/ContentView.swift b/MC2-Team3-Pilling/View/ContentView.swift index 5d3865b..293f5be 100644 --- a/MC2-Team3-Pilling/View/ContentView.swift +++ b/MC2-Team3-Pilling/View/ContentView.swift @@ -45,6 +45,9 @@ struct ContentView: View { NavigationLink(destination: ChooseStatusView()){ Text("ChooseStatusView") } + NavigationLink(destination: PiriView()){ + Text("PiriView") + } } diff --git a/MC2-Team3-Pilling/View/MainView.swift b/MC2-Team3-Pilling/View/MainView.swift index d74e229..ed27923 100644 --- a/MC2-Team3-Pilling/View/MainView.swift +++ b/MC2-Team3-Pilling/View/MainView.swift @@ -12,6 +12,7 @@ struct MainView: View { @State var startNum = 4 @State var statusMessage: Config.StatusMessage = .plantGrass @State var isModal = false + @State var userInfo:UserInfo = UserInfo(scheduleTime: "11:00", curPill: PeriodPill(pillInfo: Config().dummyPillInfos[0], startIntake: "2024-05-17 11:45:46")) var body: some View { NavigationStack { @@ -125,6 +126,9 @@ struct MainView: View { EmptyView() } } + .onAppear { + print(Date()) + } } } diff --git a/MC2-Team3-Pilling/View/PiriView.swift b/MC2-Team3-Pilling/View/PiriView.swift index c05e280..0c42af6 100644 --- a/MC2-Team3-Pilling/View/PiriView.swift +++ b/MC2-Team3-Pilling/View/PiriView.swift @@ -5,12 +5,111 @@ // Created by ram on 5/21/24. // + import SwiftUI struct PiriView: View { + @State private var showingMedicineSheet = false + + var body: some View { - Text(/*@START_MENU_TOKEN@*/"Hello, World!"/*@END_MENU_TOKEN@*/) + Image("making-plan") + .resizable() + .frame(width: 240, height: 240) + + // Text + HStack { + VStack(alignment: .leading) { + Text("복용하고 계신 약을 알려주세요!") + .largeBold() + .padding(.bottom, 2) + + Text("설정은 추후에 변경 가능합니다.") + .secondaryRegular() + } + Spacer() + } + .padding() + + + // Selecting box + VStack { + Button(action: { + self.showingMedicineSheet = true + }, label: { + // sfSymbol 부재 : medicine-bottle-one + HStack { + Image(systemName: "pill.circle.fill") + Text("약 종류") + .secondaryRegular() + Spacer() + Image(systemName: "chevron.right") + } + .padding([.leading, .trailing], 25) + }) + .padding(.vertical, 20) + .frame(maxWidth: .infinity) + .background(.customGray02) + .clipShape(RoundedRectangle(cornerRadius: 10)) + .foregroundColor(.secondary) + .padding([.leading, .trailing], 16) + .sheet(isPresented: $showingMedicineSheet){ +// MedicineSheetView(showingMedicineSheet: true) + MedicineSheetView(showingMedicineSheet: $showingMedicineSheet) + .presentationDetents([.medium]) + } + + + + Button(action: {}, label: { + // sfSymbol 부재 : uis-calender + HStack { + Image(systemName: "note") + Text("현재 복용 일수") + .secondaryRegular() + Spacer() + } + .padding([.leading, .trailing], 25) + }) + .padding(.vertical, 20) + .frame(maxWidth: .infinity) + .background(.customGray02) + .clipShape(RoundedRectangle(cornerRadius: 10)) + .foregroundColor(.secondary) + .padding([.leading, .trailing], 16) + + } + + Spacer() + + // footer button + Button(action: { + + save() + + + }, label: { + Text("다음으로") + .largeBold() + }) + .padding(.vertical, 30) + .frame(maxWidth: .infinity) + .background(.customGreen) + .clipShape(RoundedRectangle(cornerRadius: 20)) + .foregroundColor(.black) + .padding() } + func save(){ + var pillInfo = Config().dummyPillInfos[0] + var curIntakeDay = 5 + var currentDate = Date() + let calendar = Calendar.current + var startDate = calendar.date(byAdding: .day, value: -curIntakeDay, to: currentDate) + let startIntakeString = Config().DateToString(date: startDate ?? currentDate,format:dayformat) //디폴트값 수정해야함 + var test = PeriodPill(pillInfo: pillInfo, startIntake: startIntakeString) + + } + } #Preview { From ad2705fcc568f21b4265e2f09bc61da77bae8c7e Mon Sep 17 00:00:00 2001 From: soaringwave <82134672+treesofgroo@users.noreply.github.com> Date: Tue, 21 May 2024 22:44:44 +0900 Subject: [PATCH 14/21] Feat: add progressAmount to ContentState and set ProgressView in lock screen --- LiveTimeWidget/LiveTimeWidget.swift | 2 ++ .../Model/LiveTimeAttributes.swift | 1 + MC2-Team3-Pilling/View/ContentView.swift | 22 ++++++++++++++++--- 3 files changed, 22 insertions(+), 3 deletions(-) diff --git a/LiveTimeWidget/LiveTimeWidget.swift b/LiveTimeWidget/LiveTimeWidget.swift index 2f15f90..283f7aa 100644 --- a/LiveTimeWidget/LiveTimeWidget.swift +++ b/LiveTimeWidget/LiveTimeWidget.swift @@ -21,6 +21,8 @@ struct LiveTimeWidget: Widget { Text(context.state.restOfTime, style: .relative) .foregroundStyle(.customGreen) .frame(width: 77, height: 30) + Divider() + ProgressView(value: context.state.progressAmount, total: 600) } .padding() } dynamicIsland: { context in diff --git a/MC2-Team3-Pilling/Model/LiveTimeAttributes.swift b/MC2-Team3-Pilling/Model/LiveTimeAttributes.swift index bf7f90e..74582ea 100644 --- a/MC2-Team3-Pilling/Model/LiveTimeAttributes.swift +++ b/MC2-Team3-Pilling/Model/LiveTimeAttributes.swift @@ -13,5 +13,6 @@ struct LiveTimeAttributes: ActivityAttributes { public struct ContentState: Codable, Hashable { var restOfTime: Date + var progressAmount: Double } } diff --git a/MC2-Team3-Pilling/View/ContentView.swift b/MC2-Team3-Pilling/View/ContentView.swift index 8294c5a..4dfd834 100644 --- a/MC2-Team3-Pilling/View/ContentView.swift +++ b/MC2-Team3-Pilling/View/ContentView.swift @@ -18,8 +18,9 @@ struct ContentView: View { @Environment(\.modelContext) private var modelContext @State private var isTracking = false - @State private var alarmTime = dateFormatter.date(from: "\(Date.now.formatted(date: .numeric, time: .omitted))_12:00:00")! + @State private var alarmTime = dateFormatter.date(from: "\(Date.now.formatted(date: .numeric, time: .omitted))_23:00:00")! @State private var activity: Activity? = nil + @State private var progressAmount = 0.0 @Query private var user: [UserInfo] // 하나만 쓰고싶다면? @@ -53,13 +54,14 @@ struct ContentView: View { isTracking.toggle() if isTracking { // start live activity + progressAmount = 0.0 let attributes = LiveTimeAttributes() - let state = LiveTimeAttributes.ContentState(restOfTime: alarmTime) + let state = LiveTimeAttributes.ContentState(restOfTime: alarmTime, progressAmount: progressAmount) let content = ActivityContent(state: state, staleDate: nil) activity = try? Activity.request(attributes: attributes, content: content, pushType: nil) } else { // end live activity - let state = LiveTimeAttributes.ContentState(restOfTime: alarmTime) + let state = LiveTimeAttributes.ContentState(restOfTime: alarmTime, progressAmount: 600) let content = ActivityContent(state: state, staleDate: alarmTime.addingTimeInterval(600)) Task { await activity?.end(content, dismissalPolicy:.immediate) @@ -69,6 +71,20 @@ struct ContentView: View { Text(isTracking ? "end live activity" : "start live activity") }) .buttonStyle(.bordered) + if isTracking { + Button(action: { + progressAmount += 10 + let attributes = LiveTimeAttributes() + let state = LiveTimeAttributes.ContentState(restOfTime: alarmTime, progressAmount: progressAmount) + let content = ActivityContent(state: state, staleDate: nil) + Task { + await activity?.update(content) + } + }, label: { + Text("update live activity") + }) + .buttonStyle(.bordered) + } if isTracking { HStack { Text("알람까지 남은 시간") From cb0ce5e4ca49f146009efd3ceb3303d63da134b9 Mon Sep 17 00:00:00 2001 From: soaringwave <82134672+treesofgroo@users.noreply.github.com> Date: Tue, 21 May 2024 22:48:54 +0900 Subject: [PATCH 15/21] Feat: adjust expanded View and change progressAmount when increase --- LiveTimeWidget/LiveTimeWidget.swift | 20 +++++++++++--------- MC2-Team3-Pilling/View/ContentView.swift | 2 +- 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/LiveTimeWidget/LiveTimeWidget.swift b/LiveTimeWidget/LiveTimeWidget.swift index 283f7aa..aaa2c75 100644 --- a/LiveTimeWidget/LiveTimeWidget.swift +++ b/LiveTimeWidget/LiveTimeWidget.swift @@ -13,18 +13,20 @@ struct LiveTimeWidget: Widget { var body: some WidgetConfiguration { ActivityConfiguration(for: LiveTimeAttributes.self) { context in // lock screen & standby(잠금 화면과 notification center, 그리고 전체화면 버전) - HStack { - Image(systemName: "leaf.fill") - .foregroundStyle(.customGreen) - Text("잔디를 심을 시간이에요!") - Spacer() - Text(context.state.restOfTime, style: .relative) - .foregroundStyle(.customGreen) - .frame(width: 77, height: 30) + VStack { + HStack { + Image(systemName: "leaf.fill") + .foregroundStyle(.customGreen) + Text("잔디를 심을 시간이에요!") + Spacer() + Text(context.state.restOfTime, style: .relative) + .foregroundStyle(.customGreen) + .frame(width: 77, height: 30) + } Divider() ProgressView(value: context.state.progressAmount, total: 600) + .padding() } - .padding() } dynamicIsland: { context in // dynamic island DynamicIsland { diff --git a/MC2-Team3-Pilling/View/ContentView.swift b/MC2-Team3-Pilling/View/ContentView.swift index 4dfd834..ef79f71 100644 --- a/MC2-Team3-Pilling/View/ContentView.swift +++ b/MC2-Team3-Pilling/View/ContentView.swift @@ -73,7 +73,7 @@ struct ContentView: View { .buttonStyle(.bordered) if isTracking { Button(action: { - progressAmount += 10 + progressAmount += 50 let attributes = LiveTimeAttributes() let state = LiveTimeAttributes.ContentState(restOfTime: alarmTime, progressAmount: progressAmount) let content = ActivityContent(state: state, staleDate: nil) From 52bfde081fd2fab79cd44021cd6d198fe0484938 Mon Sep 17 00:00:00 2001 From: piri Date: Tue, 21 May 2024 23:04:34 +0900 Subject: [PATCH 16/21] =?UTF-8?q?Feat:=20=EC=98=A8=EB=B3=B4=EB=94=A9?= =?UTF-8?q?=EB=B7=B0=EC=97=90=EC=84=9C=20=EB=8D=B0=EC=9D=B4=ED=84=B0=20?= =?UTF-8?q?=EC=83=9D=EC=84=B1=EC=A4=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- MC2-Team3-Pilling.xcodeproj/project.pbxproj | 4 + MC2-Team3-Pilling/View/PiriSecondView.swift | 98 +++++++++++++++++++++ MC2-Team3-Pilling/View/PiriView.swift | 63 +++++++------ 3 files changed, 140 insertions(+), 25 deletions(-) create mode 100644 MC2-Team3-Pilling/View/PiriSecondView.swift diff --git a/MC2-Team3-Pilling.xcodeproj/project.pbxproj b/MC2-Team3-Pilling.xcodeproj/project.pbxproj index b92ef11..49c4695 100644 --- a/MC2-Team3-Pilling.xcodeproj/project.pbxproj +++ b/MC2-Team3-Pilling.xcodeproj/project.pbxproj @@ -19,6 +19,7 @@ 21B2730C2BFB7301002BCC67 /* SwiftDataTestView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 21B2730B2BFB7301002BCC67 /* SwiftDataTestView.swift */; }; 21B2730E2BFB85E2002BCC67 /* Config.swift in Sources */ = {isa = PBXBuildFile; fileRef = 21B2730D2BFB85E2002BCC67 /* Config.swift */; }; 21B5E33B2BFCC83700D1FC06 /* PiriView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 21B5E33A2BFCC83700D1FC06 /* PiriView.swift */; }; + 21B5E33D2BFCDB3A00D1FC06 /* PiriSecondView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 21B5E33C2BFCDB3A00D1FC06 /* PiriSecondView.swift */; }; 939C87E02BF307B600572EDC /* MC2_Team3_PillingApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 939C87DF2BF307B600572EDC /* MC2_Team3_PillingApp.swift */; }; 939C87E22BF307B600572EDC /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 939C87E12BF307B600572EDC /* ContentView.swift */; }; 939C87E42BF307B600572EDC /* Item.swift in Sources */ = {isa = PBXBuildFile; fileRef = 939C87E32BF307B600572EDC /* Item.swift */; }; @@ -72,6 +73,7 @@ 21B2730B2BFB7301002BCC67 /* SwiftDataTestView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SwiftDataTestView.swift; sourceTree = ""; }; 21B2730D2BFB85E2002BCC67 /* Config.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Config.swift; sourceTree = ""; }; 21B5E33A2BFCC83700D1FC06 /* PiriView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PiriView.swift; sourceTree = ""; }; + 21B5E33C2BFCDB3A00D1FC06 /* PiriSecondView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PiriSecondView.swift; sourceTree = ""; }; 939C87DC2BF307B600572EDC /* MC2-Team3-Pilling.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "MC2-Team3-Pilling.app"; sourceTree = BUILT_PRODUCTS_DIR; }; 939C87DF2BF307B600572EDC /* MC2_Team3_PillingApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MC2_Team3_PillingApp.swift; sourceTree = ""; }; 939C87E12BF307B600572EDC /* ContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = ""; }; @@ -144,6 +146,7 @@ 21B2730B2BFB7301002BCC67 /* SwiftDataTestView.swift */, 93EF92D52BFC4187004DEEF1 /* ChooseStatusView.swift */, 21B5E33A2BFCC83700D1FC06 /* PiriView.swift */, + 21B5E33C2BFCDB3A00D1FC06 /* PiriSecondView.swift */, ); path = View; sourceTree = ""; @@ -329,6 +332,7 @@ 939C88362BF6B9BC00572EDC /* OnboardingSecondView.swift in Sources */, 939C88302BF5CC9F00572EDC /* SettingView.swift in Sources */, 939C88742BFBA01C00572EDC /* PopoverView.swift in Sources */, + 21B5E33D2BFCDB3A00D1FC06 /* PiriSecondView.swift in Sources */, 21B2730C2BFB7301002BCC67 /* SwiftDataTestView.swift in Sources */, 939C87E42BF307B600572EDC /* Item.swift in Sources */, 9BE4AA1D2BF6E280008BE893 /* CustomFont.swift in Sources */, diff --git a/MC2-Team3-Pilling/View/PiriSecondView.swift b/MC2-Team3-Pilling/View/PiriSecondView.swift new file mode 100644 index 0000000..37b3c33 --- /dev/null +++ b/MC2-Team3-Pilling/View/PiriSecondView.swift @@ -0,0 +1,98 @@ +// +// PiriSecondView.swift +// MC2-Team3-Pilling +// +// Created by ram on 5/21/24. +// + +import SwiftUI + +struct PiriSecondView: View { + @State private var alarmTime: Date = Date() + @State private var alarmToggle = false + + var body: some View { + VStack{ + Image("clock") + .resizable() + .frame(width: 240, height: 240) + + // Text + HStack { + VStack(alignment: .leading) { + // Text + Text("알람 받을 시간을 설정해주세요!") + .largeBold() .padding(.bottom, 2) + + Text("설정은 추후에 변경 가능합니다.") + .secondaryRegular() + } + Spacer() + } + .padding() + + + Button(action: { + }, label: { + + ZStack{ + HStack { + Image(systemName: "clock") + Text("복용 시간") + .secondaryTitle() + Spacer() + + } + DatePicker("", selection: $alarmTime, displayedComponents: .hourAndMinute) + + } + .padding([.leading, .trailing], 20) + + } + ) + .padding(.vertical, 20) + .frame(maxWidth: .infinity) + .background(.customGray02) + .clipShape(RoundedRectangle(cornerRadius: 10)) + .foregroundColor(.secondary) + .padding() + + + VStack(alignment: .leading){ + Toggle("소리 알람여부추가", isOn: $alarmToggle) + .regular() + .padding(.bottom, 2) + + + + HStack { + Image(systemName: "info.circle.fill") + Text("소리를 OFF하면 라이브 액티비티로만 알려줘요!") + .font(.callout) + } + .foregroundStyle(.secondary) + } + .padding() + + Spacer() + + // footer button + Button(action: {}, label: { + Text("설정완료!") + .font(.title3) + .bold() + }) + .padding(.vertical, 30) + .frame(maxWidth: .infinity) + .background(.customGreen) + .clipShape(RoundedRectangle(cornerRadius: 20)) + .foregroundColor(.black) + .padding() + + } + } +} + +#Preview { + PiriSecondView() +} diff --git a/MC2-Team3-Pilling/View/PiriView.swift b/MC2-Team3-Pilling/View/PiriView.swift index 0c42af6..443e108 100644 --- a/MC2-Team3-Pilling/View/PiriView.swift +++ b/MC2-Team3-Pilling/View/PiriView.swift @@ -10,7 +10,7 @@ import SwiftUI struct PiriView: View { @State private var showingMedicineSheet = false - + @State var isActive = false var body: some View { Image("making-plan") @@ -54,7 +54,7 @@ struct PiriView: View { .foregroundColor(.secondary) .padding([.leading, .trailing], 16) .sheet(isPresented: $showingMedicineSheet){ -// MedicineSheetView(showingMedicineSheet: true) + // MedicineSheetView(showingMedicineSheet: true) MedicineSheetView(showingMedicineSheet: $showingMedicineSheet) .presentationDetents([.medium]) } @@ -82,34 +82,47 @@ struct PiriView: View { Spacer() - // footer button - Button(action: { - - save() - - - }, label: { - Text("다음으로") - .largeBold() - }) - .padding(.vertical, 30) - .frame(maxWidth: .infinity) - .background(.customGreen) - .clipShape(RoundedRectangle(cornerRadius: 20)) - .foregroundColor(.black) - .padding() + VStack { + // footer button + Button(action: { + save() + isActive = true // 네비게이션 링크를 활성화 + }, label: { + Text("다음으로") + .largeBold() + }) + .padding(.vertical, 30) + .frame(maxWidth: .infinity) + .background(Color.customGreen) + .clipShape(RoundedRectangle(cornerRadius: 20)) + .foregroundColor(.black) + .padding() + // NavigationLink(isPresented:isActive, destination: PiriSecondView()){ + // EmptyView() + // } + // 버튼과 네비게이션링크를 같이 띄우는 방법? + NavigationLink( + destination: PiriSecondView(), + isActive: $isActive, + label: { + EmptyView() // 보이지 않게 설정 + } + ) + } + + } - func save(){ - var pillInfo = Config().dummyPillInfos[0] - var curIntakeDay = 5 - var currentDate = Date() + func save() -> PeriodPill{ + let pillInfo = Config().dummyPillInfos[0] + let curIntakeDay = 5 + let currentDate = Date() let calendar = Calendar.current - var startDate = calendar.date(byAdding: .day, value: -curIntakeDay, to: currentDate) + let startDate = calendar.date(byAdding: .day, value: -curIntakeDay, to: currentDate) let startIntakeString = Config().DateToString(date: startDate ?? currentDate,format:dayformat) //디폴트값 수정해야함 - var test = PeriodPill(pillInfo: pillInfo, startIntake: startIntakeString) + return PeriodPill(pillInfo: pillInfo, startIntake: startIntakeString) } - + } #Preview { From c10cf40fa6e4d1c611c806431199c724885c682c Mon Sep 17 00:00:00 2001 From: piri Date: Tue, 21 May 2024 23:55:07 +0900 Subject: [PATCH 17/21] =?UTF-8?q?Feat:=20=EC=98=A8=EB=B3=B4=EB=94=A9?= =?UTF-8?q?=EC=84=B8=EC=BB=A8=EB=93=9C=EB=B7=B0=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- MC2-Team3-Pilling.xcodeproj/project.pbxproj | 12 ++--- MC2-Team3-Pilling/View/ContentView.swift | 2 +- .../{PiriView.swift => PiriFirstView.swift} | 31 +++-------- MC2-Team3-Pilling/View/PiriSecondView.swift | 51 ++++++++++++------- 4 files changed, 48 insertions(+), 48 deletions(-) rename MC2-Team3-Pilling/View/{PiriView.swift => PiriFirstView.swift} (80%) diff --git a/MC2-Team3-Pilling.xcodeproj/project.pbxproj b/MC2-Team3-Pilling.xcodeproj/project.pbxproj index 49c4695..b430c0e 100644 --- a/MC2-Team3-Pilling.xcodeproj/project.pbxproj +++ b/MC2-Team3-Pilling.xcodeproj/project.pbxproj @@ -18,7 +18,7 @@ 21B273082BFB390C002BCC67 /* Model.swift in Sources */ = {isa = PBXBuildFile; fileRef = 21B273072BFB390C002BCC67 /* Model.swift */; }; 21B2730C2BFB7301002BCC67 /* SwiftDataTestView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 21B2730B2BFB7301002BCC67 /* SwiftDataTestView.swift */; }; 21B2730E2BFB85E2002BCC67 /* Config.swift in Sources */ = {isa = PBXBuildFile; fileRef = 21B2730D2BFB85E2002BCC67 /* Config.swift */; }; - 21B5E33B2BFCC83700D1FC06 /* PiriView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 21B5E33A2BFCC83700D1FC06 /* PiriView.swift */; }; + 21B5E33B2BFCC83700D1FC06 /* PiriFirstView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 21B5E33A2BFCC83700D1FC06 /* PiriFirstView.swift */; }; 21B5E33D2BFCDB3A00D1FC06 /* PiriSecondView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 21B5E33C2BFCDB3A00D1FC06 /* PiriSecondView.swift */; }; 939C87E02BF307B600572EDC /* MC2_Team3_PillingApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 939C87DF2BF307B600572EDC /* MC2_Team3_PillingApp.swift */; }; 939C87E22BF307B600572EDC /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 939C87E12BF307B600572EDC /* ContentView.swift */; }; @@ -72,7 +72,7 @@ 21B273072BFB390C002BCC67 /* Model.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Model.swift; sourceTree = ""; }; 21B2730B2BFB7301002BCC67 /* SwiftDataTestView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SwiftDataTestView.swift; sourceTree = ""; }; 21B2730D2BFB85E2002BCC67 /* Config.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Config.swift; sourceTree = ""; }; - 21B5E33A2BFCC83700D1FC06 /* PiriView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PiriView.swift; sourceTree = ""; }; + 21B5E33A2BFCC83700D1FC06 /* PiriFirstView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PiriFirstView.swift; sourceTree = ""; }; 21B5E33C2BFCDB3A00D1FC06 /* PiriSecondView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PiriSecondView.swift; sourceTree = ""; }; 939C87DC2BF307B600572EDC /* MC2-Team3-Pilling.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "MC2-Team3-Pilling.app"; sourceTree = BUILT_PRODUCTS_DIR; }; 939C87DF2BF307B600572EDC /* MC2_Team3_PillingApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MC2_Team3_PillingApp.swift; sourceTree = ""; }; @@ -142,11 +142,11 @@ 939C88352BF6B9BC00572EDC /* OnboardingSecondView.swift */, 939C882F2BF5CC9F00572EDC /* SettingView.swift */, 939C88372BF6DF7000572EDC /* SplashScreenView.swift */, + 21B5E33A2BFCC83700D1FC06 /* PiriFirstView.swift */, + 21B5E33C2BFCDB3A00D1FC06 /* PiriSecondView.swift */, 939C88732BFBA01C00572EDC /* PopoverView.swift */, - 21B2730B2BFB7301002BCC67 /* SwiftDataTestView.swift */, 93EF92D52BFC4187004DEEF1 /* ChooseStatusView.swift */, - 21B5E33A2BFCC83700D1FC06 /* PiriView.swift */, - 21B5E33C2BFCDB3A00D1FC06 /* PiriSecondView.swift */, + 21B2730B2BFB7301002BCC67 /* SwiftDataTestView.swift */, ); path = View; sourceTree = ""; @@ -322,7 +322,7 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 21B5E33B2BFCC83700D1FC06 /* PiriView.swift in Sources */, + 21B5E33B2BFCC83700D1FC06 /* PiriFirstView.swift in Sources */, 939C87E22BF307B600572EDC /* ContentView.swift in Sources */, 93EF92D62BFC4187004DEEF1 /* ChooseStatusView.swift in Sources */, 939C882E2BF5CC9100572EDC /* OnboardingFirstView.swift in Sources */, diff --git a/MC2-Team3-Pilling/View/ContentView.swift b/MC2-Team3-Pilling/View/ContentView.swift index 293f5be..18cc992 100644 --- a/MC2-Team3-Pilling/View/ContentView.swift +++ b/MC2-Team3-Pilling/View/ContentView.swift @@ -45,7 +45,7 @@ struct ContentView: View { NavigationLink(destination: ChooseStatusView()){ Text("ChooseStatusView") } - NavigationLink(destination: PiriView()){ + NavigationLink(destination: PiriFirstView()){ Text("PiriView") } diff --git a/MC2-Team3-Pilling/View/PiriView.swift b/MC2-Team3-Pilling/View/PiriFirstView.swift similarity index 80% rename from MC2-Team3-Pilling/View/PiriView.swift rename to MC2-Team3-Pilling/View/PiriFirstView.swift index 443e108..ce62b52 100644 --- a/MC2-Team3-Pilling/View/PiriView.swift +++ b/MC2-Team3-Pilling/View/PiriFirstView.swift @@ -8,10 +8,11 @@ import SwiftUI -struct PiriView: View { +struct PiriFirstView: View { @State private var showingMedicineSheet = false @State var isActive = false - + @State var pillInfo = PillInfo(pillName: "", intakeDay: 0, placeboDay: 0) + @State var intakeDay = 0 var body: some View { Image("making-plan") .resizable() @@ -85,7 +86,8 @@ struct PiriView: View { VStack { // footer button Button(action: { - save() + pillInfo = Config().dummyPillInfos[0] + intakeDay = 5 isActive = true // 네비게이션 링크를 활성화 }, label: { Text("다음으로") @@ -97,34 +99,17 @@ struct PiriView: View { .clipShape(RoundedRectangle(cornerRadius: 20)) .foregroundColor(.black) .padding() - // NavigationLink(isPresented:isActive, destination: PiriSecondView()){ - // EmptyView() - // } + // 버튼과 네비게이션링크를 같이 띄우는 방법? + NavigationLink( - destination: PiriSecondView(), + destination: PiriSecondView(pillInfo: $pillInfo,intakeDay:$intakeDay), isActive: $isActive, label: { EmptyView() // 보이지 않게 설정 } ) } - - - } - func save() -> PeriodPill{ - let pillInfo = Config().dummyPillInfos[0] - let curIntakeDay = 5 - let currentDate = Date() - let calendar = Calendar.current - let startDate = calendar.date(byAdding: .day, value: -curIntakeDay, to: currentDate) - let startIntakeString = Config().DateToString(date: startDate ?? currentDate,format:dayformat) //디폴트값 수정해야함 - return PeriodPill(pillInfo: pillInfo, startIntake: startIntakeString) - } } - -#Preview { - PiriView() -} diff --git a/MC2-Team3-Pilling/View/PiriSecondView.swift b/MC2-Team3-Pilling/View/PiriSecondView.swift index 37b3c33..c03fab0 100644 --- a/MC2-Team3-Pilling/View/PiriSecondView.swift +++ b/MC2-Team3-Pilling/View/PiriSecondView.swift @@ -10,6 +10,10 @@ import SwiftUI struct PiriSecondView: View { @State private var alarmTime: Date = Date() @State private var alarmToggle = false + @Binding var pillInfo:PillInfo + @Binding var intakeDay:Int + @State var isActive = false + var body: some View { VStack{ @@ -22,7 +26,8 @@ struct PiriSecondView: View { VStack(alignment: .leading) { // Text Text("알람 받을 시간을 설정해주세요!") - .largeBold() .padding(.bottom, 2) + .largeBold() + .padding(.bottom, 2) Text("설정은 추후에 변경 가능합니다.") .secondaryRegular() @@ -34,17 +39,17 @@ struct PiriSecondView: View { Button(action: { }, label: { - + ZStack{ HStack { Image(systemName: "clock") Text("복용 시간") .secondaryTitle() Spacer() - + } DatePicker("", selection: $alarmTime, displayedComponents: .hourAndMinute) - + } .padding([.leading, .trailing], 20) @@ -62,8 +67,6 @@ struct PiriSecondView: View { Toggle("소리 알람여부추가", isOn: $alarmToggle) .regular() .padding(.bottom, 2) - - HStack { Image(systemName: "info.circle.fill") @@ -76,23 +79,35 @@ struct PiriSecondView: View { Spacer() - // footer button - Button(action: {}, label: { + Button(action: { + isActive = true + }) { Text("설정완료!") .font(.title3) .bold() - }) - .padding(.vertical, 30) - .frame(maxWidth: .infinity) - .background(.customGreen) - .clipShape(RoundedRectangle(cornerRadius: 20)) - .foregroundColor(.black) - .padding() + .frame(maxWidth: .infinity) + .padding() + .background(Color.customGreen) + .clipShape(RoundedRectangle(cornerRadius: 20)) + .foregroundColor(.black) + .padding() + } + + // NavigationLink with isActive binding + NavigationLink(destination: MainView(), isActive: $isActive) { + EmptyView() + } } } + func save(alarmTime:Date,pillInfo:PillInfo,curIntakeDay:Int) -> PeriodPill{ + + let currentDate = Date() + let calendar = Calendar.current + let startDate = calendar.date(byAdding: .day, value: -curIntakeDay, to: currentDate) + let startIntakeString = Config().DateToString(date: startDate ?? currentDate,format:dayformat) //디폴트값 수정해야함 + return PeriodPill(pillInfo: pillInfo, startIntake: startIntakeString) + + } } -#Preview { - PiriSecondView() -} From 9d2e2647457b3ee4ecc02da29c849adfdd52a571 Mon Sep 17 00:00:00 2001 From: piri Date: Wed, 22 May 2024 00:49:08 +0900 Subject: [PATCH 18/21] =?UTF-8?q?Feat:=20=EB=A9=94=EC=9D=B8=EB=B7=B0=20?= =?UTF-8?q?=EB=8D=B0=EC=9D=B4=ED=84=B0=20=EB=B0=94=EC=9D=B8=EB=94=A9=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84=EC=A4=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- MC2-Team3-Pilling/View/MainView.swift | 34 +++++++++++++++------ MC2-Team3-Pilling/View/PiriSecondView.swift | 32 +++++++++++++------ 2 files changed, 47 insertions(+), 19 deletions(-) diff --git a/MC2-Team3-Pilling/View/MainView.swift b/MC2-Team3-Pilling/View/MainView.swift index ed27923..16684f5 100644 --- a/MC2-Team3-Pilling/View/MainView.swift +++ b/MC2-Team3-Pilling/View/MainView.swift @@ -6,13 +6,15 @@ // import SwiftUI - +import SwiftData struct MainView: View { @State private var showingPopover = false @State var startNum = 4 @State var statusMessage: Config.StatusMessage = .plantGrass @State var isModal = false @State var userInfo:UserInfo = UserInfo(scheduleTime: "11:00", curPill: PeriodPill(pillInfo: Config().dummyPillInfos[0], startIntake: "2024-05-17 11:45:46")) + @Query var user:[UserInfo] + @State var time = Date() var body: some View { NavigationStack { @@ -50,13 +52,26 @@ struct MainView: View { HStack { Text("4일차") .largeTitle() - Text("/28") - .secondaryTitle() + if let whole = user.first?.curPill.pillInfo.wholeDay{ + Text("\(String(describing: whole))") + .secondaryTitle() + } + else{ + Text("") + } + } - Label("24/4", systemImage: "calendar") - .secondaryRegular() - Label("17:00", systemImage: "clock.fill") + if let intakeDay=user.first?.curPill.pillInfo.intakeDay,let placeboday=user.first?.curPill.pillInfo.placeboDay{ + Label("\(String(describing: intakeDay))/\(String(describing: placeboday))", systemImage: "calendar") + .secondaryRegular() + }else{ + Label("", systemImage: "calendar") + .secondaryRegular() + } + + Label(user.first?.scheduleTime ?? "00:00", systemImage: "clock.fill") .secondaryRegular() + } Spacer() } @@ -127,15 +142,14 @@ struct MainView: View { } } .onAppear { - print(Date()) + var scheduleTime = user.first?.scheduleTime + print(scheduleTime) + time = Config().StringToDate(dateString: scheduleTime ?? "2024-05-21 15:14:27", format: Hourformat) ?? Date() } } } -#Preview { - MainView() -} struct GreenGradient: View { var body: some View { diff --git a/MC2-Team3-Pilling/View/PiriSecondView.swift b/MC2-Team3-Pilling/View/PiriSecondView.swift index c03fab0..96f341f 100644 --- a/MC2-Team3-Pilling/View/PiriSecondView.swift +++ b/MC2-Team3-Pilling/View/PiriSecondView.swift @@ -13,6 +13,7 @@ struct PiriSecondView: View { @Binding var pillInfo:PillInfo @Binding var intakeDay:Int @State var isActive = false + @Environment(\.modelContext) private var modelContext var body: some View { @@ -41,14 +42,14 @@ struct PiriSecondView: View { }, label: { ZStack{ - HStack { - Image(systemName: "clock") - Text("복용 시간") - .secondaryTitle() - Spacer() - - } - DatePicker("", selection: $alarmTime, displayedComponents: .hourAndMinute) +// HStack { +// Image(systemName: "clock") +// Text("복용 시간") +// .secondaryTitle() +// Spacer() +// +// } + DatePicker("복용 시간", selection: $alarmTime, displayedComponents: .hourAndMinute) } .padding([.leading, .trailing], 20) @@ -80,6 +81,19 @@ struct PiriSecondView: View { Spacer() Button(action: { + print(alarmTime) + var scheduleTime = Config().DateToString(date: alarmTime, format: Hourformat) + print(scheduleTime) + var periodPill = save(pillInfo: pillInfo, curIntakeDay: intakeDay) + print() + var userInfo = UserInfo(scheduleTime: scheduleTime, curPill: periodPill) + modelContext.insert(userInfo) + do { + try modelContext.save() + print("스데 저장 성공") + } catch { + print("Failed to save context: \(error.localizedDescription)") + } isActive = true }) { Text("설정완료!") @@ -100,7 +114,7 @@ struct PiriSecondView: View { } } - func save(alarmTime:Date,pillInfo:PillInfo,curIntakeDay:Int) -> PeriodPill{ + func save(pillInfo:PillInfo,curIntakeDay:Int) -> PeriodPill{ let currentDate = Date() let calendar = Calendar.current From c054bb401a666fdc3e98f46b8da61553ab264846 Mon Sep 17 00:00:00 2001 From: piri Date: Wed, 22 May 2024 09:13:56 +0900 Subject: [PATCH 19/21] =?UTF-8?q?Feat:=20=EB=A9=94=EC=9D=B8=EB=B7=B0=20?= =?UTF-8?q?=EB=B0=94=EC=9D=B8=EB=94=A9=20=EC=A4=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- MC2-Team3-Pilling/Model/Model.swift | 1 - MC2-Team3-Pilling/View/MainView.swift | 29 ++++++++++++++++++--- MC2-Team3-Pilling/View/PiriFirstView.swift | 5 ++-- MC2-Team3-Pilling/View/PiriSecondView.swift | 20 ++++++++++++-- 4 files changed, 47 insertions(+), 8 deletions(-) diff --git a/MC2-Team3-Pilling/Model/Model.swift b/MC2-Team3-Pilling/Model/Model.swift index 8afc633..0d8bae1 100644 --- a/MC2-Team3-Pilling/Model/Model.swift +++ b/MC2-Team3-Pilling/Model/Model.swift @@ -50,7 +50,6 @@ final class PeriodPill:Identifiable{ self.pillInfo = pillInfo self.startIntake = startIntake self.intakeCal = Array(repeating: DayData(), count: pillInfo.wholeDay) - self.missDay = 0 } diff --git a/MC2-Team3-Pilling/View/MainView.swift b/MC2-Team3-Pilling/View/MainView.swift index 16684f5..ba4f62e 100644 --- a/MC2-Team3-Pilling/View/MainView.swift +++ b/MC2-Team3-Pilling/View/MainView.swift @@ -53,7 +53,7 @@ struct MainView: View { Text("4일차") .largeTitle() if let whole = user.first?.curPill.pillInfo.wholeDay{ - Text("\(String(describing: whole))") + Text("/\(String(describing: whole))") .secondaryTitle() } else{ @@ -99,7 +99,7 @@ struct MainView: View { } .regular() - ForEach(0..<4) { y in + ForEach(0..<(user.first?.curPill.pillInfo.wholeDay ?? 28)/7) { y in HStack { ForEach(0..<7) { x in if x==3 && y==0{ @@ -111,6 +111,9 @@ struct MainView: View { else if x==0 && y == 0{ TodayCell(isModal: $isModal, backgroundColor: colorArr[myArray[y*7+x]]) } + else if x>=3 && y == 3{ + PlaceboCell(isModal: $isModal, backgroundColor: Color.white) + } else{ ActivateCell(isModal: $isModal, backgroundColor: colorArr[myArray[y*7+x]]) } @@ -179,6 +182,26 @@ struct ActivateCell: View { } } +} +struct PlaceboCell: View { + @Binding var isModal:Bool + var backgroundColor: Color + var body: some View { + Rectangle() + .foregroundColor(.clear) + .frame(width: 45, height: 45) + .cornerRadius(10) + .overlay( + RoundedRectangle(cornerRadius: 10) + .inset(by: 0.5) + .stroke(Color(red: 0.91, green: 0.91, blue: 0.92), lineWidth: 1) + ) + .onTapGesture { + isModal = true + print(isModal) + } + } + } struct TodayCell: View { @Binding var isModal:Bool @@ -187,7 +210,7 @@ struct TodayCell: View { Rectangle() .foregroundColor(.clear) .frame(width: 45, height: 45) - .background(backgroundColor) + .background(.clear) .cornerRadius(10) .overlay( RoundedRectangle(cornerRadius: 10) diff --git a/MC2-Team3-Pilling/View/PiriFirstView.swift b/MC2-Team3-Pilling/View/PiriFirstView.swift index ce62b52..06a3828 100644 --- a/MC2-Team3-Pilling/View/PiriFirstView.swift +++ b/MC2-Team3-Pilling/View/PiriFirstView.swift @@ -11,8 +11,8 @@ import SwiftUI struct PiriFirstView: View { @State private var showingMedicineSheet = false @State var isActive = false - @State var pillInfo = PillInfo(pillName: "", intakeDay: 0, placeboDay: 0) - @State var intakeDay = 0 + @State var pillInfo = PillInfo(pillName: "야즈", intakeDay: 24, placeboDay: 4) + @State var intakeDay = 4 var body: some View { Image("making-plan") .resizable() @@ -88,6 +88,7 @@ struct PiriFirstView: View { Button(action: { pillInfo = Config().dummyPillInfos[0] intakeDay = 5 + isActive = true // 네비게이션 링크를 활성화 }, label: { Text("다음으로") diff --git a/MC2-Team3-Pilling/View/PiriSecondView.swift b/MC2-Team3-Pilling/View/PiriSecondView.swift index 96f341f..8cddfd3 100644 --- a/MC2-Team3-Pilling/View/PiriSecondView.swift +++ b/MC2-Team3-Pilling/View/PiriSecondView.swift @@ -6,7 +6,7 @@ // import SwiftUI - +import SwiftData struct PiriSecondView: View { @State private var alarmTime: Date = Date() @State private var alarmToggle = false @@ -14,6 +14,7 @@ struct PiriSecondView: View { @Binding var intakeDay:Int @State var isActive = false @Environment(\.modelContext) private var modelContext + @Query var user:[UserInfo] var body: some View { @@ -85,8 +86,20 @@ struct PiriSecondView: View { var scheduleTime = Config().DateToString(date: alarmTime, format: Hourformat) print(scheduleTime) var periodPill = save(pillInfo: pillInfo, curIntakeDay: intakeDay) - print() + + print(periodPill) var userInfo = UserInfo(scheduleTime: scheduleTime, curPill: periodPill) +// print(userInfo.curPill.startIntake) + var pillInfo = user.first?.curPill +// print(userInfo) +// for index in 22...26{ +// userInfo.curPill.intakeCal[index].status = 3 +// } +// for index in (pillInfo?.pillInfo.intakeDay ?? 24)...(pillInfo?.pillInfo.wholeDay ?? 28)-1{ +// userInfo.curPill.intakeCal[index].status = 3 +// } +// print(userInfo.curPill.intakeCal) + modelContext.insert(userInfo) do { try modelContext.save() @@ -113,6 +126,9 @@ struct PiriSecondView: View { } } + .onAppear{ + print(intakeDay) + } } func save(pillInfo:PillInfo,curIntakeDay:Int) -> PeriodPill{ From a80392a02927827e33ee1a7ad0dcaf67a304a637 Mon Sep 17 00:00:00 2001 From: piri Date: Wed, 22 May 2024 09:46:28 +0900 Subject: [PATCH 20/21] =?UTF-8?q?Fix:=20=EB=A8=B8=EC=A7=80=ED=9B=84=20?= =?UTF-8?q?=EC=BB=A8=ED=94=8C=EB=A6=AD=ED=8A=B8=20=ED=95=B4=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- MC2-Team3-Pilling/Model/Config.swift | 13 +++++++------ MC2-Team3-Pilling/View/ChooseStatusView.swift | 6 +++--- MC2-Team3-Pilling/View/MainView.swift | 4 ++-- MC2-Team3-Pilling/View/PiriFirstView.swift | 12 ++++++------ 4 files changed, 18 insertions(+), 17 deletions(-) diff --git a/MC2-Team3-Pilling/Model/Config.swift b/MC2-Team3-Pilling/Model/Config.swift index bcdf6ea..dc3315b 100644 --- a/MC2-Team3-Pilling/Model/Config.swift +++ b/MC2-Team3-Pilling/Model/Config.swift @@ -59,13 +59,14 @@ class Config{ return dateFormatter.string(from: date) } func StringToDate(dateString: String,format:String) -> Date? { - - let dateFormatter = DateFormatter() - dateFormatter.timeZone = TimeZone.current - dateFormatter.dateFormat = format + + let dateFormatter = DateFormatter() + dateFormatter.timeZone = TimeZone.current + dateFormatter.dateFormat = format - return dateFormatter.string(from: date) - } + return dateFormatter.date(from: dateString) + } + func AlarmStringToDate(dateString: String) -> Date? { let format = "HH:mm" let dateFormatter = DateFormatter() diff --git a/MC2-Team3-Pilling/View/ChooseStatusView.swift b/MC2-Team3-Pilling/View/ChooseStatusView.swift index 48d0af9..7a54047 100644 --- a/MC2-Team3-Pilling/View/ChooseStatusView.swift +++ b/MC2-Team3-Pilling/View/ChooseStatusView.swift @@ -39,8 +39,8 @@ struct ChooseStatusView: View { @State private var dosageType: DosageType = .notYet - @Binding var showingChooseStatus: Bool - +// @Binding var showingChooseStatus: Bool +// var body: some View { VStack { @@ -118,7 +118,7 @@ struct ChooseStatusView: View { // footer button Button(action: { - self.showingChooseStatus = false +// self.showingChooseStatus = false }, label: { Text("수정") .font(.title3) diff --git a/MC2-Team3-Pilling/View/MainView.swift b/MC2-Team3-Pilling/View/MainView.swift index 97b3a6c..12a924e 100644 --- a/MC2-Team3-Pilling/View/MainView.swift +++ b/MC2-Team3-Pilling/View/MainView.swift @@ -12,7 +12,7 @@ struct MainView: View { @State var startNum = 4 @State var statusMessage: Config.StatusMessage = .plantGrass @State var isModal = false - @State var userInfo:UserInfo = UserInfo(scheduleTime: "11:00", curPill: PeriodPill(pillInfo: Config().dummyPillInfos[0], startIntake: "2024-05-17 11:45:46")) + @State var userInfo:UserInfo = UserInfo(scheduleTime: "11:00", curPill: PeriodPill(pillInfo: Config.dummyPillInfos[0], startIntake: "2024-05-17 11:45:46")) @Query var user:[UserInfo] @State var time = Date() @@ -141,7 +141,7 @@ struct MainView: View { .padding() } .sheet(isPresented: $isModal){ - ChooseStatusView(showingChooseStatus: $isModal) + ChooseStatusView() // ChooseStatusView() .presentationDetents([.medium]) } diff --git a/MC2-Team3-Pilling/View/PiriFirstView.swift b/MC2-Team3-Pilling/View/PiriFirstView.swift index 06a3828..696c2ae 100644 --- a/MC2-Team3-Pilling/View/PiriFirstView.swift +++ b/MC2-Team3-Pilling/View/PiriFirstView.swift @@ -54,11 +54,11 @@ struct PiriFirstView: View { .clipShape(RoundedRectangle(cornerRadius: 10)) .foregroundColor(.secondary) .padding([.leading, .trailing], 16) - .sheet(isPresented: $showingMedicineSheet){ - // MedicineSheetView(showingMedicineSheet: true) - MedicineSheetView(showingMedicineSheet: $showingMedicineSheet) - .presentationDetents([.medium]) - } +// .sheet(isPresented: $showingMedicineSheet){ +// // MedicineSheetView(showingMedicineSheet: true) +//// MedicineSheetView(selectedPill: $showingMedicineSheet) +//// .presentationDetents([.medium]) +// } @@ -86,7 +86,7 @@ struct PiriFirstView: View { VStack { // footer button Button(action: { - pillInfo = Config().dummyPillInfos[0] + pillInfo = Config.dummyPillInfos[0] intakeDay = 5 isActive = true // 네비게이션 링크를 활성화 From d8d93a0d5a16e902bf59eccf39055422736e12b4 Mon Sep 17 00:00:00 2001 From: piri Date: Wed, 22 May 2024 09:47:21 +0900 Subject: [PATCH 21/21] =?UTF-8?q?Refactor:=20=EB=94=94=EB=A0=89=ED=84=B0?= =?UTF-8?q?=EB=A6=AC=20=EA=B5=AC=EC=A1=B0=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- MC2-Team3-Pilling.xcodeproj/project.pbxproj | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/MC2-Team3-Pilling.xcodeproj/project.pbxproj b/MC2-Team3-Pilling.xcodeproj/project.pbxproj index b430c0e..23136d1 100644 --- a/MC2-Team3-Pilling.xcodeproj/project.pbxproj +++ b/MC2-Team3-Pilling.xcodeproj/project.pbxproj @@ -135,17 +135,17 @@ 219E17582BF6ED79007B7DC1 /* View */ = { isa = PBXGroup; children = ( + 93EF92D52BFC4187004DEEF1 /* ChooseStatusView.swift */, 939C87E12BF307B600572EDC /* ContentView.swift */, 9B0411752BF593A0006F8BB9 /* MainView.swift */, 939C88312BF6B4AC00572EDC /* MedicineSheetView.swift */, 939C882D2BF5CC9100572EDC /* OnboardingFirstView.swift */, 939C88352BF6B9BC00572EDC /* OnboardingSecondView.swift */, - 939C882F2BF5CC9F00572EDC /* SettingView.swift */, - 939C88372BF6DF7000572EDC /* SplashScreenView.swift */, 21B5E33A2BFCC83700D1FC06 /* PiriFirstView.swift */, 21B5E33C2BFCDB3A00D1FC06 /* PiriSecondView.swift */, 939C88732BFBA01C00572EDC /* PopoverView.swift */, - 93EF92D52BFC4187004DEEF1 /* ChooseStatusView.swift */, + 939C882F2BF5CC9F00572EDC /* SettingView.swift */, + 939C88372BF6DF7000572EDC /* SplashScreenView.swift */, 21B2730B2BFB7301002BCC67 /* SwiftDataTestView.swift */, ); path = View; @@ -154,10 +154,10 @@ 219E17592BF6ED88007B7DC1 /* Model */ = { isa = PBXGroup; children = ( - 1B6530432BFB7C1600452ACB /* LiveTimeAttributes.swift */, + 21B2730D2BFB85E2002BCC67 /* Config.swift */, 939C87E32BF307B600572EDC /* Item.swift */, + 1B6530432BFB7C1600452ACB /* LiveTimeAttributes.swift */, 21B273072BFB390C002BCC67 /* Model.swift */, - 21B2730D2BFB85E2002BCC67 /* Config.swift */, ); path = Model; sourceTree = "";