From 49fb7a22f970743ec1132d93bd83dcca7b498fcc Mon Sep 17 00:00:00 2001 From: Aaron Date: Wed, 13 Jan 2021 13:24:32 -0500 Subject: [PATCH 1/5] Added dummy image. --- ProjectClock.xcodeproj/project.pbxproj | 3 +++ .../applelogo.imageset/Contents.json | 21 ++++++++++++++++++ .../applelogo.imageset/applelogo.png | Bin 0 -> 1380 bytes 3 files changed, 24 insertions(+) create mode 100644 ProjectClock/Assets.xcassets/applelogo.imageset/Contents.json create mode 100644 ProjectClock/Assets.xcassets/applelogo.imageset/applelogo.png diff --git a/ProjectClock.xcodeproj/project.pbxproj b/ProjectClock.xcodeproj/project.pbxproj index bcbddf0..2baa858 100644 --- a/ProjectClock.xcodeproj/project.pbxproj +++ b/ProjectClock.xcodeproj/project.pbxproj @@ -126,6 +126,9 @@ 4FF0683325A5F18700304E6B /* Project object */ = { isa = PBXProject; attributes = { + KnownAssetTags = ( + New, + ); LastSwiftUpdateCheck = 1230; LastUpgradeCheck = 1230; TargetAttributes = { diff --git a/ProjectClock/Assets.xcassets/applelogo.imageset/Contents.json b/ProjectClock/Assets.xcassets/applelogo.imageset/Contents.json new file mode 100644 index 0000000..5979dd8 --- /dev/null +++ b/ProjectClock/Assets.xcassets/applelogo.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "applelogo.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/ProjectClock/Assets.xcassets/applelogo.imageset/applelogo.png b/ProjectClock/Assets.xcassets/applelogo.imageset/applelogo.png new file mode 100644 index 0000000000000000000000000000000000000000..9eca7571b052986c8fbe6d150b15f172cf62da02 GIT binary patch literal 1380 zcmV-q1)KVbP)Oj;z`wr^1qiLItoHWy>gwunZg1b; z-!3aGqoSgFdV0>z&QwxTg@c5%va;FO*pQEpjEjrAySrOiS!-!(o0^(GJUvH5MNmyn z)4N#j0|@0kY2U_7A6-Dz$NS}U^do=K(4B4qT@1`6Ilx-c>la=-X}>C%W; z#K#c0aZkE965jl8A#mwcx;z51&@IJ4x;z4=R0=_qNEhhwew9Pu(l6-}JzP6Br4Tf6 zhSU!$&EQG8L=X2;`4XDg3|3L488ojq=vJD6zmhJ|8;sx;8P)8O**Z|mF@v%bD|)O ztmhRUe>yoiA%4l%`$XHvFky>cBL68LNq0zx1kzz$M5bE1R&PyVdFiklEn*t{gq3uA zOTPP;T^N?5;|g(>QCtnc2TKd}tEdr$C+oKRlLK0fcCF#L_)zSbAMK|Oy0cF0j86Z( zpMP>dHYJKK{GjqJzuRmzZR!~Xd@<0uZQwXVzLC+y(v_)c>9NJYs+=Y7oXHf_q4gp| zo3TsOdNQSY=<==@DD4tCheoAq1?QDB1`0Qm3y1-843s7sS!3`bU7LDXW1uw6$hn^y zC|x1N6v$zVRS{TT!4THR>QyJje;ds*^7^osft@e9UX#XWB!U8S2<9|XLc z#xp5v-iDy^yqf@Co0_$*R21;}o0hY^w&XhjNMsAecfB z=)BCbm+{P)RgQ}XOkab_48s?et4-QpRqWrtkzn;L6e{kXGOK+3q3rIYlh)bMcXzHE zNb#_El;0DCQ0oM-qF+A<(VKMPxg_U;V5}dvDhN?Pb~VgRZn61~#t;*d)0000000000 m000000000000000`1A)Oi9A%A? literal 0 HcmV?d00001 From 785925e8ea55f63bd3b6d2e7bbb0501a7c6319d2 Mon Sep 17 00:00:00 2001 From: Dallon Archibald Date: Wed, 13 Jan 2021 13:43:39 -0500 Subject: [PATCH 2/5] initial updates to the view controller --- ProjectClock/ViewController.swift | 37 ++++++++++++++++++++++++++++++- 1 file changed, 36 insertions(+), 1 deletion(-) diff --git a/ProjectClock/ViewController.swift b/ProjectClock/ViewController.swift index 8967045..1846698 100644 --- a/ProjectClock/ViewController.swift +++ b/ProjectClock/ViewController.swift @@ -9,11 +9,46 @@ import UIKit class ViewController: UIViewController { + @IBOutlet var table: UITableView! + + var models = [MyAlarm]() + override func viewDidLoad() { super.viewDidLoad() - // Do any additional setup after loading the view. + table.delegate = self + table.dataSource = self } +} +extension ViewController: UITableViewDelegate { + + func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { + tableView.deselectRow(at: indexPath, animated: true) + } } +extension ViewController: UITableViewDataSource { + + func numberOfSections(in tableView: UITableView) -> Int { + return 1 + } + + func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + return models.count + } + + func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) + cell.textLabel?.text = models[indexPath.row].title + + return cell + } +} + +struct MyAlarm { + let title: String + let date: Date + let identifier: String +} + From a846210b52733166e50de6cee8d9a2b74fd485cc Mon Sep 17 00:00:00 2001 From: Aaron Date: Wed, 13 Jan 2021 14:24:45 -0500 Subject: [PATCH 3/5] Completed dummy notification. --- ProjectClock.xcodeproj/project.pbxproj | 4 ++++ ProjectClock/TestingViewController.swift | 16 +++++++--------- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/ProjectClock.xcodeproj/project.pbxproj b/ProjectClock.xcodeproj/project.pbxproj index 2baa858..6300e3b 100644 --- a/ProjectClock.xcodeproj/project.pbxproj +++ b/ProjectClock.xcodeproj/project.pbxproj @@ -17,6 +17,7 @@ 4FF0684625A5F18700304E6B /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 4FF0684425A5F18700304E6B /* Main.storyboard */; }; 4FF0684825A5F18800304E6B /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 4FF0684725A5F18800304E6B /* Assets.xcassets */; }; 4FF0684B25A5F18800304E6B /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 4FF0684925A5F18800304E6B /* LaunchScreen.storyboard */; }; + 7C5DAE9925AF7DDE00E44C52 /* applelogo.png in Resources */ = {isa = PBXBuildFile; fileRef = 7C5DAE9825AF7DDE00E44C52 /* applelogo.png */; }; 7C83963625AF375B0027A94C /* NotificationLogic.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C83963525AF375B0027A94C /* NotificationLogic.swift */; }; 7C83963925AF68980027A94C /* TestingViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C83963825AF68980027A94C /* TestingViewController.swift */; }; 7C83963C25AF6B6B0027A94C /* Alarm.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C83963B25AF6B6B0027A94C /* Alarm.swift */; }; @@ -35,6 +36,7 @@ 4FF0684725A5F18800304E6B /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 4FF0684A25A5F18800304E6B /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 4FF0684C25A5F18800304E6B /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 7C5DAE9825AF7DDE00E44C52 /* applelogo.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = applelogo.png; path = ../../../Downloads/applelogo.png; sourceTree = ""; }; 7C83962D25AF34F00027A94C /* ProjectClock.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = ProjectClock.entitlements; sourceTree = ""; }; 7C83962F25AF34F10027A94C /* HealthKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = HealthKit.framework; path = System/Library/Frameworks/HealthKit.framework; sourceTree = SDKROOT; }; 7C83963525AF375B0027A94C /* NotificationLogic.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationLogic.swift; sourceTree = ""; }; @@ -85,6 +87,7 @@ 4F8A607425A919E600D88DC3 /* Logic.swift */, 7C83963525AF375B0027A94C /* NotificationLogic.swift */, 4F98955125A9260400F51321 /* Net.swift */, + 7C5DAE9825AF7DDE00E44C52 /* applelogo.png */, 4F509BD125AE22D100726227 /* Models.swift */, 7C83963825AF68980027A94C /* TestingViewController.swift */, 7C83963B25AF6B6B0027A94C /* Alarm.swift */, @@ -163,6 +166,7 @@ 4FF0684B25A5F18800304E6B /* LaunchScreen.storyboard in Resources */, 4FF0684825A5F18800304E6B /* Assets.xcassets in Resources */, 4FF0684625A5F18700304E6B /* Main.storyboard in Resources */, + 7C5DAE9925AF7DDE00E44C52 /* applelogo.png in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/ProjectClock/TestingViewController.swift b/ProjectClock/TestingViewController.swift index 634e77f..28c0921 100644 --- a/ProjectClock/TestingViewController.swift +++ b/ProjectClock/TestingViewController.swift @@ -31,7 +31,7 @@ class TestingViewController: UIViewController { //Sends a test notification @IBAction func sendNotification(_ sender: Any) { - var alarm = Alarm(alarmTime: Date(), text: "Hello there!", wakeMethod: WVM(name: "walking", desc: "Walk")) + let alarm = Alarm(alarmTime: Date(), text: "Hello there!", wakeMethod: WVM(name: "walking", desc: "Walk")) let content = UNMutableNotificationContent() @@ -39,26 +39,24 @@ class TestingViewController: UIViewController { let today = Date() let formatter1 = DateFormatter() formatter1.dateStyle = .short - print(formatter1.string(from: today)) //Notification content content.title = alarm.text content.subtitle = formatter1.string(from: today) - content.body = "Wake method: \(alarm.wakeMethod)" + content.body = "Wake method: \(alarm.wakeMethod.name)" - // 2 + // Notification image content let imageName = "applelogo" guard let imageURL = Bundle.main.url(forResource: imageName, withExtension: "png") else { return } - let attachment = try! UNNotificationAttachment(identifier: imageName, url: imageURL, options: .none) - content.attachments = [attachment] - // 3 - let trigger = UNTimeIntervalNotificationTrigger(timeInterval: 0, repeats: false) + + // Readies notification to be sent + let trigger = UNTimeIntervalNotificationTrigger(timeInterval: 5, repeats: false) let request = UNNotificationRequest(identifier: "notification.id.01", content: content, trigger: trigger) - // 4 + // Sends notification UNUserNotificationCenter.current().add(request, withCompletionHandler: nil) } From 370903125260afc7ec6c1327f0bb7b502517f5ed Mon Sep 17 00:00:00 2001 From: Aaron Date: Wed, 13 Jan 2021 14:31:31 -0500 Subject: [PATCH 4/5] Adjusted notification style --- ProjectClock.xcodeproj/project.pbxproj | 4 ++++ ProjectClock/TestingViewController.swift | 6 +++--- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/ProjectClock.xcodeproj/project.pbxproj b/ProjectClock.xcodeproj/project.pbxproj index 6300e3b..8df2802 100644 --- a/ProjectClock.xcodeproj/project.pbxproj +++ b/ProjectClock.xcodeproj/project.pbxproj @@ -18,6 +18,7 @@ 4FF0684825A5F18800304E6B /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 4FF0684725A5F18800304E6B /* Assets.xcassets */; }; 4FF0684B25A5F18800304E6B /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 4FF0684925A5F18800304E6B /* LaunchScreen.storyboard */; }; 7C5DAE9925AF7DDE00E44C52 /* applelogo.png in Resources */ = {isa = PBXBuildFile; fileRef = 7C5DAE9825AF7DDE00E44C52 /* applelogo.png */; }; + 7C5DAE9C25AF812200E44C52 /* clock.png in Resources */ = {isa = PBXBuildFile; fileRef = 7C5DAE9B25AF812200E44C52 /* clock.png */; }; 7C83963625AF375B0027A94C /* NotificationLogic.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C83963525AF375B0027A94C /* NotificationLogic.swift */; }; 7C83963925AF68980027A94C /* TestingViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C83963825AF68980027A94C /* TestingViewController.swift */; }; 7C83963C25AF6B6B0027A94C /* Alarm.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C83963B25AF6B6B0027A94C /* Alarm.swift */; }; @@ -37,6 +38,7 @@ 4FF0684A25A5F18800304E6B /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 4FF0684C25A5F18800304E6B /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 7C5DAE9825AF7DDE00E44C52 /* applelogo.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = applelogo.png; path = ../../../Downloads/applelogo.png; sourceTree = ""; }; + 7C5DAE9B25AF812200E44C52 /* clock.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = clock.png; path = ../../../Downloads/clock.png; sourceTree = ""; }; 7C83962D25AF34F00027A94C /* ProjectClock.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = ProjectClock.entitlements; sourceTree = ""; }; 7C83962F25AF34F10027A94C /* HealthKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = HealthKit.framework; path = System/Library/Frameworks/HealthKit.framework; sourceTree = SDKROOT; }; 7C83963525AF375B0027A94C /* NotificationLogic.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationLogic.swift; sourceTree = ""; }; @@ -88,6 +90,7 @@ 7C83963525AF375B0027A94C /* NotificationLogic.swift */, 4F98955125A9260400F51321 /* Net.swift */, 7C5DAE9825AF7DDE00E44C52 /* applelogo.png */, + 7C5DAE9B25AF812200E44C52 /* clock.png */, 4F509BD125AE22D100726227 /* Models.swift */, 7C83963825AF68980027A94C /* TestingViewController.swift */, 7C83963B25AF6B6B0027A94C /* Alarm.swift */, @@ -164,6 +167,7 @@ buildActionMask = 2147483647; files = ( 4FF0684B25A5F18800304E6B /* LaunchScreen.storyboard in Resources */, + 7C5DAE9C25AF812200E44C52 /* clock.png in Resources */, 4FF0684825A5F18800304E6B /* Assets.xcassets in Resources */, 4FF0684625A5F18700304E6B /* Main.storyboard in Resources */, 7C5DAE9925AF7DDE00E44C52 /* applelogo.png in Resources */, diff --git a/ProjectClock/TestingViewController.swift b/ProjectClock/TestingViewController.swift index 28c0921..c97a9b8 100644 --- a/ProjectClock/TestingViewController.swift +++ b/ProjectClock/TestingViewController.swift @@ -31,14 +31,14 @@ class TestingViewController: UIViewController { //Sends a test notification @IBAction func sendNotification(_ sender: Any) { - let alarm = Alarm(alarmTime: Date(), text: "Hello there!", wakeMethod: WVM(name: "walking", desc: "Walk")) + let alarm = Alarm(alarmTime: Date(), text: "Good morning!", wakeMethod: WVM(name: "walking", desc: "Walk")) let content = UNMutableNotificationContent() //Date formatting to string let today = Date() let formatter1 = DateFormatter() - formatter1.dateStyle = .short + formatter1.dateStyle = .long //Notification content content.title = alarm.text @@ -46,7 +46,7 @@ class TestingViewController: UIViewController { content.body = "Wake method: \(alarm.wakeMethod.name)" // Notification image content - let imageName = "applelogo" + let imageName = "clock" guard let imageURL = Bundle.main.url(forResource: imageName, withExtension: "png") else { return } let attachment = try! UNNotificationAttachment(identifier: imageName, url: imageURL, options: .none) content.attachments = [attachment] From 70d5e2db668fb88ab695e0ed5127dedc7c738ae1 Mon Sep 17 00:00:00 2001 From: Aaron Saporito Date: Wed, 13 Jan 2021 14:33:34 -0500 Subject: [PATCH 5/5] Added notification icon. --- ProjectClock/clock.png | Bin 0 -> 14380 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 ProjectClock/clock.png diff --git a/ProjectClock/clock.png b/ProjectClock/clock.png new file mode 100644 index 0000000000000000000000000000000000000000..1d9651b8bf03211922f6e436846a5a71fa065d30 GIT binary patch literal 14380 zcmbt*by$;M`1fd#9NkElfFPX;qoqa)(kcR@q#FcbA|b6(N{7HuN~uXoDAE&<4G?KI zq$aiZ;rqLO*Y*DWzT@KBcFz5L?l{j~=Q(?BZmLgvjq@4^1fn%GfIvYYqW-IYN^)SN z%GsU|cq4Z+)`x%ySATE2smWnO9jmay-Cv|zq73{)`yFw z*fHD#GlYnj%75vW_*^I5KsMdd&;ci78J(0eU^A~hbP~QD_ruUY+o0s9R`)H@?3=Iu z8MGxC!cFYR)9Ea?jeUe5f9(NTzjdm6Vxu4~- zND==b{unuWf9LF!=GZZsJd8Aq|1tFgb0hfvU7`@;5Kt?~Y0kmsIj(ITL=QS4ra!)n zq(9bW&RjDAwUV_GwQgU8db`|D?75J``TKq1YA0#udBw5pH&@K)#$JSC+mu2UBfq0$ zMiL|%-uJO zUkk^mV<=s+uxsGqK~7{QvN3M6oUqgabpl<|E7QE%i42F>f8@aFVp!i696B?Oe_(IF zh9?cbbYt}#e1p`FlZ+QGC&Yy32_tEd9*7o7fr-0Bn$Lv4OgksOTC;ht!-2jOW`6D# zj3LE%)#j7h+I(&r;^Wg5)Tb(E3KPXeZXFER-+N7cP7~(tU~46mO1Jar;x+2p&NMnd z=OGbJZRcn8>^Ubdmtc&Qi{_@^bZt%rs_()*ej+WFS%BnC z+%My~%*&+)=si$jI%Am&&(SbaeG>i3TG~VLG#*a#mZ`n)@FXC2lp7^(3Jbs0~hu@Qz%VC#?raJs_zXdBwi&D-iIr_mS5&~ekO&Z9?d?HVlWNX!1*r&)tLGWoGP%qvW3 z61Eiy#>K$or5Q)|a(Y=bU~I+ZXn;C5y_r#}d%dd_Fx!>fEvSq)kM$eiPr&Kye@1tPHh z)OSx#;Y;7`J+Q^(8u)ls-00=iH>@0VO+KjXwy?SJF)lEksfl8$NpEen>DFWpO$D8s z@W5!CMdrLb4T=SC3nTwCbKA$O>O4JcPKUEu+Fx|jFTMM(GLB~lmCIb!rJ7QX_1!YJ>pKpmlUsz<~=?dB|$x`%~GP1h|WMBE*?3R zdxT2Y3@@Q~(FhGZbcu4#_25#a)9dX6F=$CS%7fdV+h5Z2toJo4?lxl>{ibP^T}lz5 z%@}8+=u3lB>TPqxau`v$bybC_gbNL5s<{tumfO)jv+@fZ4n=0i>^mDV6 zmtzjEZ|eV-`D)alspng~bEb%_H0YQf4Ixs_!t?!ggEeRl>GVhGD~(hV zaD3k#Q4^A%rf%tgV4DzejJ2T5vlFIUfXy}s?rHJzkt z^gz~MU6H4tV;^;=*N^5rG-xvVOf`NOSa5je zJSdO&7iuyX!7?YA#}-N04S`wyN+pseKL)OEK+fJ6qdyN-=YHX1&9Oz<;Ssmn#8Q3l zt2lp%i_+)<@k|ecGUY;!TBuRdKlb$ckR=9G^$EKBgX(COGu<`mw0cOKjTlR76*{45+P?fx9kaXtW|CFo)?IfE%rE46ytA9-%#>lM z*KPQR@-~y$fxP(=(oSkM7l+hh@$OkQgr@v-i?XVdAk=43?+kM z6yr$RkHCmw)={RArqBzSPdCW+C}L(KX`SbOx5&KCTJi2G@E_W9)Zw7!NjQ^pmBumd zymqC^p@~iluXOh2zxXi+8|`llk7 z#$hg=$NRt!B{TM_>Rq+n>kQ#E85c?NK>O--R~p57-cwblJ1U0zVZHYgY-|2aZwe=V zLZDNB!WB0(`u@}>rJb8m6bnRao8RkJr!OSo{_?@r)JTa_jZNXO<&0}hz3qb6wc*P@ zS+30N3#!07gw(F>T(vYBt~L@NAx6};Y<=8%NafFi!=g5t9&n0FH&RC`+~`*jTT25e z3C1Pw_q?Qck-5EYD%khV=h<%F{`F0@5SEg^%B{xJRwLz^D}M(`PFB#DXH6%u-m3?A z=l)MQP1gYG+yzGbwc|dK;PraO*2Rnq%+IGE9+$UwN>Lr8uk;MUAV!vm-)qrC87V*E ztl}Kqvm(fR_{Y(1qvADRn0>JO$XkGT73X&bgKhVXobg|>VGFCJ9;a0r=5xeLrG6q_ zh`kk@{60&6bFf&2*ZA`J?Ww9!HEKd@31bTx)%!GpFGWTZ?BnnI1DqUAkR`!BsW_}l zq)+8ul=WZfaT3BapZ6~%)0p#L!wI!mmERxD{29<+2#>X?Y1<8(@LeD}xfYrx$J9|Z%P#}iFi^AG zr`RNT$;0ux(tek@43W2<&z-<6Rk=mhNY5C}O*QjeuRLAU=lG&w{jtmy6p#!C=J5o| z%kgR{xQoKMZ5}UQ3)#1tg|7$_HGx0ZCPVWijwJF)&R!1X1#pVLF~ck@-GjW5P7h{^ zW?a}B8ofYUhvO7lMm+Lpc`UUxhopw5GWql6e>(e>{2}x z-;v)hiaRpwz_{M^qfv9$%F;|52;*lxkSyTuzXQm%)t8W{i z)hg83@49I_K-=RQY>?y#lylAeZZ|&N9a2h3YbHz;P80Wbd0>@}KZXD`YpNshdIp8xor zQM%v&$-d93{z?*dTkl-D-|=@-^Jg>b?B!FGQP*ThZa52>Ewn6S8=t7lPDAk7o@8Fec$TY^ao;KAs8$sju-^aGdeGj!e1^O47;OI=Wn1YrRj#J% zW!AAqw1dIa_ueO`dh89`u4l9nbEeo~_#=0tDt)S|r?=737LwlOA=V6Ev;F=s?K~!97&%0sbRK%Yj8EO;}w^g41Z;J$+YHTAjX;UNuAiD83bfK3qemZIL1U5GF4JBZ~AUH$Y2IyXcx;9-ep*{@!R+@(^p% zOR>!gDR194TJfq-=Tte)^GSCu<4fU=jI}mM+IHbmui7&|&Cf@y8+em>ea!Lm!Em9v zvQA@moi8cxQceF+6&j$6IvM|U(-&XA9~H9^{=n*1?M;(Y&7F;R(?tf(uamk`vj199 zijT6xR28aNYCj@4@)@>nMn^;>$SOk90Zzs-3C;)PjOc@9mXok?Vm z>!x)?TdVeh%X>=BMqVcxN&vMXMGHH2L^EMWBi_uN4NM@BjD8cu28%b^`d&&AY5O<> z&P_^hPkei=rTSWS$crZP#ShDyG5_LPXHxHAXe^pL;F~ zL}m`b1HicOb7!X7C(y(BrADspwvR`O=bF`ikkpRfo|8w<1OLpMuVGQmc?NeQNt7}# zFMEgpNL^OLP*wRF1Yg*M;>FnOWaW zNmd&yItnn?8fbjCtq*UTet?Sa`nspUhBgYn=0H@<^H7LQ1!jd#D|);9udCV~8r9`K z_Gu?j<9g!(eaQ<3@0xKMQBZ6O!^y~q`cCunX@@({-;c3l>dG~$_D}GdXinPuEc|=y z^b!f-#|aP8&McjZKmqvVB=Rm2he+ytNXO>9lbl4ci=-6Oei7yERbg z;a02%S^CF^mbkOqG2A!5L$jCpk&@sQ-s(jl2B26oUsY!9{ad*Ylz(;2Q{X!jOK6B3od)2zw z;|Pa^8aBOo$8NV(-q21i1UCGEMyw>!-E|>CNKOwO`f?}p(=Q2;X+-dn4=0^{2|+#&9nOCfGLWz zjXBcy&%6H2(1!lZmB&NvFpl8qjY<7xwz zZgS_>_fG^bgl~QqkI96lQN)-mVwbdGbFB2jA_FR>vPEmm8Fi94&qWftrkqzaX6X!m z1i5TPRosi54Rg%Hm1z2oco~%eCt$h9#EYqU+yd5H4$gs~ZZUtWj}FrTUfFf_1u2HW z9m`XouvY}ZsACf8&DSd=rcL)}9&z6Z>%z}}w^0YyfB--{-%Cw{bQMpeSXqmP*nQDn ziPkb3T6Y|PX07a+1}skN(R^8aVYX`jtF^w_bJ7**C(yrO%S#p#1a~Mm4I!#z!bV1j z%qlh4C2m?aUY;(o5@O7!0O5tD&UYuXmJKjZDff?iD(h7GrJ(xR`woH=1}gOI%M77= zh7;cQr%kMvA^v8|Q|&$S|3Zz8lgbdJEUPbO(soZ9>*xMXJu6y1;X`sD$Kwe7P96Ij zGy}G5{@3=G?sc+nOU~y8LJ#dj!cP#F4>4VIvM(B?VYXFY zLJY$>m5DUAzfGLM+xWI-@SQY#lHyJ#frk5!s(QBfA3g0j+xNU*MsHy3aQoJ^4p+CR zOkSj)D9!#Yy0d_pjrA~&o3e)Ga<9I{MZympyXm&K=UKepeQS{~?#Bk57KAEB%DUm~ zAI=-B8gX%?lS-#C_|f}IYdT-wSIC;B`_Tsqs65-==wrFW$X{^tGnq%wH!ozqi5=u)Y%qVnt-jZww=o7mv6Lu zIt{LON`2X>cl&_iA6JD*b_j7#8UvOQ14#}OPW|@S&$wF`SvgUbr^l1lwaRrGdFee8 zVHSYcoT58#t$`g`cfD2Dze95IK}?Dx1f-SDfW6;a$R{4tZFp94FjuB8^$nG*{KDt^ z+xI*^HhIjVs+Va8JPpYmC988tTAS*QW>07wRv&&Mj-fT(H&PCrxb*n7mzTu2M2Dp5 zjm7q?GW(5ePMPp*6P&BIm$$U`y)gx+GY)QYhn=jFlA)zcyT-El$68nwKt!AO^ou5V zEFr&W#Uz*cWCUm5uFBd&&O77a@q8H92VUvoRa>-H>p!?|)fl)T)G3>Y-tz&sE@UR7 z#+iHm*m>l6i?#MO#>ZB6W-coxYU%F^M70KHh2=18do#C^IegW0Wkpn2cFO9fI8lt8 zfYel4&@&Huoei+RS8{2p7-ICJ8fjyNrG@(=xZ>-d()?6Xr+dG~?DxKWu+Kg+^^UskKfO ztzQN?4Me^P5(v=_tPX4JR|+?_H-gK({IOnkNrL{S_M}Mj$lj4_Y_+_{AbLQJBV=-s zsPS9g_Qbs;>#{^K$y@2O-@n3|&#BM~l%IqL^tl&U$NUUp-$mfel0eQ>>{uQo>3W#3 zhA@O<3=*Xn>wNEDR$!-!@PM;&n-sjvF!o(%3CB|(`eu3a&RcOug{!&hV*DfKl`a%z z$r}!N#MqE@rF@SRz9+u63PQaV~Qy^^-|VJ9~ z;?4D%!MiCh;%A7P`K#HD19jAI?J#+bf9WtEvJo|cPo`KPcM~@gzEiRXrh25rQZdJx z^SxVq5a#msm4{oMe}yI>mURK6Z}1s^yjyxEvlgq^@mm|w#e=q&!~Tw#3Xp7a7@xu4 zszk9}%A?DJ8!i{OWs^-)xX4n}+8H8`o<%&OJid?p3z9tnInyzJ{B1&IF@I#;duW(X znyNB=YruhIkb99TC!2qTz6&Yht}`5(miQRKd&8WFOnEk4{UNA&Fpln4AoQZ4`X|gE$4wo>NhN(Wk z89fsdzk19rzQ?XSD5m;2x|&arBVBaN^dP@1AFE4c5f#k%hX=cfL?N5nvYD~hxE-wO zcPKaoIf&2AsGDf5AC;~a_5c1pAk~pz5;PunCw!Aa=4p>=7kGKRZCd z{!(0f2TCpsp<2FvepWAxlm@%`DT;p|Vr8*5Dr37o`xU{|Uh(DC8}TZAxZ}vXM6q{; z@v($pt^g;nw}^O>(_wbMR<;>%BYln!dn5Hu@q6wQz(vK}Bc*y z!Q8)qqBp!{@x22!BRu_DH6G0VA~$dRMVp8W)V}M(5src&)2s&1a~Omx=~vO?JisOh z<9#;V^=_r%BdahKL^~kIE7dsf{oQTeQoXVkRovxFGqZ!Nq#Uy_sB2Y(O18V0bQ-P+$h;3d(6_{5X$gQNUXRgm*nN&#-iJllIJG2V^csFq>~t-}y{ zx7JHrZyN#LQ41fT`7#GL%T?-B(t1&d*UN<3O=bEVTE7qm}>$PyFl~LrY_T|yr>dBV}afSd^3V?OLJ_$Q=P7mly{)8!p zZ^JXw{l9=(Sd@;w2#@}adPugga^iaYmZERP48Zx*bv>XC=L zzWuSS`AggvA7fN3cM<3A=s^<5z0Cv`AAn(^hEC~1-WzlNAi6t*WlN*`oMSGpox|8k z)pK@8CGW$TyPh0s_8V2<1Vn4*;MVeuO(wo(*nw zcN7q)P#bD$i00YO%57&WahCaoBnOOhIzee+^Z`7p6tUPC3S1E~JJ1+7q1Viqz*w3y zxQ$Hobus#lT7b^yY~10nOSW{Bi=)QIlCkik&1I*(&JLETS zMUrtl$-PQ0GRiipN~D=rI-ph`Ql8Rz`qf(e z@!Xp%#+454?a$Lq(%{V6{T)H{rd|HwXQmSVbK~2#fN{FzA4&*wCYgjrEVi}jrguH8 zNM#TuUQnJ1R%xx)gFwhzN!urD8k8_6?UL0{#+5z%K<#?6fPl`y8^vAHkl@eZix`_P}_O%tJ1Q~}C}Y)eO{z!d?3 zV9boio)HmNFz+QpDAF(ZSFq_396lXCS3K?>w_CV%tuirjuL@YNEo2}==0&q- z5#vf9lG-%*IehxdM`W34@WUPiK!?|>ijY@j274CIHE-^j9+758YTu`@Td0xN(7GD6 zz4|s<({TNX8GJ!?wt^&H7xHHPXK2K(GAm?{YGQlk8!7LTT4PAL>0aNdIel>gcWAI7 zTxq#&^(ow-=n&MVJW~O7=xjC!&!83(pi(L?Kst3?~EHv6>#WkE-zd?pS3M^QFL>$G!cV zGA%W(0J)TBR)dihfWYGXB61w;>sI-!({Ok*me2I)F32XhcGS87(3PzpiZT4ps4&$Z zyH>V&W&QV=R+3DQ)SubBN`Z&jQL3+6-C+Q`5DELH)%d9Ck-@V9MRm@MH{ZGq z5fW?sk~D`IGD#n2P|&_H)n+coT$3=8&XCJ6&}W62s!3qT6qDCZHL$E)`$yj#21LfI zZ-V_F?h-A%QKbYw*AwiA=P-VJlTrYS^&cri~E&WX1M^o{ULWY3(_oy_r6M;q|m9_Rv{3j{L=bakHET&YT1 zrl6g=PK+s>zGG#j6!PS&WDN;;b8V*0YowXzjhxgJMSLBU!a`O9xgIwPr4X0|JOu1H z(tP(IK9mSemM4;4aqSV&8422u2mbZi|ET>$iujTR#fT?r#prR)k*JeK@uDc(Z~7<; zkksx_$_^bcbj2v7hSuu8Ik|}&UXmkMyAc*P3IE$_-?;> zVR3rE+`mam*;2NmEg*P9`b%ulTQhSV!?OHdSGToH8iU~9&j#*s7FUr6epKf~VJ*q8 z=pqtBVeU0=1?kVQEtx0j+_B2Px>elHolKp^Yk0xn_@kn&*JL*WYDa;)7<_I@j{f@J zFm2IR`1cxK+fO3>Lq%Krr#Qed{9f+AveW>29$iSeg;R8`Egx25E>Zc{|2mT(q)~GT z@W3mF%RCP|s(B;l^VC**5w!7N-1?qGw5>W*AwDG%=JlRG1 zDuOq-cF6HN)xJ|z#FcpS>k8V3TMNI|3K_5fmiJ%ZD!9Sk=Qydtt-t>bi*-uRKR)Lr ze*vGKc!cMvs!BvXrD)2QQGe{31~=I5JpD0%>@yAi1cWhZ(#vJ5{9-{MkbSSCk7ls@ zZI$0q$RvRLWqR}&F#V)zW8$mbAo1TN3|-Po4gY0`Ok2L%L=<`B3nen2Ln(pD6qERt z!Y!yaEMYE39Lbx0l^h24(u2kMTU}Lgsg{mcOaHB4%W8ZI?=#E+#CtFX$QM_tyjjm> zXbi0teZ|PQLTh>iqrK~Yl?3QSh#LcIN9$zhD^01Im{8yTi^eFD9`$#L8<-H6cuU7( z`ea>5?e}eqsVIzT)#s<;{D3aLfwkT;|CtS0H{SU=HMDxuQd^s}=iM<^ymirkxo{?~ zsBmi}<}>q%A>2vQB$+5u?Z3o{MW#ppeVe$kLH>5ArXlny+Cd*;gKDd|dhVnFIomj8 zH?Jx_{cF<;cuqOVwxq`CqJ!Yj(g&y>9F(sz^HEWi&It10rkYE1MY3_x7F7dq!^!(d z2*|NFZbEUp9TjtwE_9kY_&UKMX#r@K_x`502T7mckP}yI|GJKSqLer*7&wJR&bm4^ z=L9?>Y0Z&;c+LNlrAA*o$$wcqi=@eRTAlge90B24KB%jp_~!irPV-yh{Pbst#~ z0lA)FPxBtE5(3UFtf#v1r7ELK>&cFfq|XR5#;qzMi3l5bW!q~@8R$LvH_~Ys6FlvD zV=8wC+~E6Vk~86S@N3f?RP-iE2|Y|aMy4bMo&)nauQVzQ@jYy44_z2lp>ljcqSfIc?xaIfp* z&&*<>Bh0Y*!y7}V>QyvA-5Agel%el7Cm%Rvpk)etT|Txizkmz1sLY;(AC)=u(>mJ( z3C8gK5zho3h8S)-;Ezh?bkiNl{pEqm+4!ou2B>8@!-#q=52~+9?Lp!|+?jbs23I%S zfRS&Y5nV`~`hu(b{n+^anG0X#&VU|JZf*8r#kzPgqCiFdWhWg?u|TrJrxXRwtfuR4 z8(&oL#mnWK;m-UUpI;f`t`cU>d5KFU#1mPCyBPRryol3W$3I?n9qeBqo!PF$xUM)9iu5-H&{-_^&ybM_XRE8ym;&8xF{IA2g2hK~7&lFo z>q3lL6uQUh{L;C)n^(=FVyQg6ZbOWYDWcB$695r*+3D2d(aC7qPJSVpZJJRrZVsPf*IY%1ZLrQ&2WcDEl``^%)E($`-o-?3G=?3x`eQ>!ZulPt10`|@fmbgdOq=xP~L8(F=!A?3cS2UvfG2_804Yr z6ED;xdnt+78)V&s!}}G9+u6{XKKuy7F+BrS^kA&lGPE_-6)}kj1keoG#7CUC&m%jMKF2xi_q;Yu|49k1 zsc&3H$Now^N`vYw5WU#%ddKSC7z&3c%CQivD_+F!x+`k`UG1XsrEfJ^#J@^o$ee!_ zM~ElWK(@I7GxD5-Xw%3z=K)wEe0tDtAKO@2=Gay~*MaN#5)r2ZTnv$r=`SABK*q>& z@&8j}BNV_`5qHM);06zUXvPM6N+#3g|8jb}QjMKG>fm8#Y2p!pYSe++FlenVn!C?Y zbmCtF5?`k)YXH_PfAanMU37Uu?86GxIBKfE)o5imHAuN?y6D}KAS%^)!z2Xx<-+G9 zmj%gP?kk{f$9=8Tw-jMSk#~jU$}gx6Ucgil5&a=>gHN-dVxhavK`#9v24v??Zz`=g z|ClupkZYI5$n_rH(Mm(n)xh@?f6|sx>{9XzBv3ac*wEjkWoK*Rf$~RUdYoOHRrs%% za}P08j^Des!vRd(K?{w2`@|mRamC?sNvEA}**OCMs&+*xB!0TH4)TM~0TnEY4tc-# zP(jIMT{NZHM+(EyyI2kE$gU{pLgbq1mThu07aV%v1znU%xdHScy8G{4a(} z;=ezx&$NGI@QUQw*+}CLlN-=r9^^RXT*h4r5nb=J>3QkIpU#NJb1^4Nh|mW*jC}7A zA9Y+&X^S4Ia+beR5IwFd%mkbXHx<6$GeOJE+bAwD8kK-B+&A8TBOm}Syo=IYtph%O z=rqNs_by>dp3icEsWv|*?n-{Yv(9DYRu)%48Ch1sS+5|#*lU=$E9gt6r|+Hi_4+J% z@%0^A!neouV6Y4ivW;p%Y3#Pzgu$bw+wIYmXCs~)xip#3AduE|SjkN`l(bC(~9!m^}xG0D(3W z2~WmAtr^oIU=EaGqO<1`$vI<}x7f2Sp&j4j=!en>zjDRrU;iExJz~0yyo_vqYkEzI zIC6>Ybo2wMGC#Bc($7tML*V@6Oa}SYz=x5_%da=q^>n0W!%;W$$7f1HZ#3aUXyK#h zi7kRRv%{Q$ok9thH1;&6nshinOeklXLxuXf|B@mC@ggbHBgcsv*Y6uz zNQgg_+mSqor%(2+HZb9)>ol6jHfNPGizYun^%SN{?SV7@qzRoDmm8%(4LiUdR3RVN z$X$NL?XuRC(o)8D7G#xLL45`LSVl*Y@4nc}K&2>%Wil@#>&nFjhBY{jWjsow&2?=a zaR-FFhC*|UB*Zz6bBE$IwC~eoKHVigPdG%I3G0eOpARD%Z;+enE!=q?S(4k%k+oEfO`<>grwz%xZw zZil>>=3I$fqK!li?9LCGk{9Q446!HTY|qv!KIEw6Wm%FP2ex%&w2qt<3wK9AR)gy3E%p@>&{T zB`H0*oxx&Hng?2wQkYM`*~DkwB3TK+O`(1|qHp6z?qe<_pKs$SWyQr)I;Mva@<49D#4qirA14_lMT?NwQlxtz{tEfCE9OdO zmC*qQ(#bcwMQz>IMHE+<#Ket=o^Wt9R8ya=6|8)6bN)oO8zlJeCr5j65c-8L?9Mz+ zWOdfS;zQoTSO4pN6vfostLFP9w6F<1E{HmetkC$)dSdk2J&cb}^BqCmVQ7P3U;KNb z`>e{d??#{)ZkNF1W4OG#AWU$NxzXZK#+JmAd%i5Q^ntLA+>r9q#$~t3r2}Ien%>UP;sb;Co9SB|$0s(E(n1@O)bUesN5n0bTi($(z<&@_CzePD z;+BI|Km~2#bQ%h|_^9ts91_#mL+R$-Y7%x4XR0%j%#wM5kE2*T>*S$1LbX{mXKD;# z{I}KYrRH1FE5i&^Acjv*}gNS#EYlP7z|K;4Nxb;86UGEuM9ixW;{ zKF0Ntw03|aD#h;12y-0YqsKFCs^zncGQx~tu{%+!HTkYcEmzSy%|em_SuszHV+U5nRoPdx~`!GH*kJ1=7vpz z{Y^SNZ}_DE_REq-C$Tc4ox%@=mv|9keb=+7KOYPp4SZn7ONW<`oyz7g58MGx29o@w zYtK9^`r-1BNUY-)5FJLx%kyXCoX>15rffnR4`8 z!G-W*l|L?)JIOP;sGqNEuo-$I+B*|pyoeg~Zy2Ra=GaY@3ybz$D)xme8~nPb;85wR z_L@79PBz_@8KKllxn(mMd-*L-62T-_3!I{yd}$}xmoeyN4vBOfw}OV=uh031tU#_K zZgJ_WIv1$glPxIx5!wmLWvtYukZ2?J3+Yx=!HXHC$WaRS9S6JB5tm$#)}J-K7w5xs zB8BNfJ{W&tWl`sjO^Tsb^A9E3)EWu_4*&JOpDbol)G@RmFMqJ%Ep+^TPkb^I=CnqH zVMA6m)$}MVHrRyE_BVW~igzZa&$>L=moNkIeQ8aoBN5iUm!9RST<6l5qi%AVE)5B% zi)=mQfj#IHoQarmCq^*Mwqo6UqSFuOG$60zqxH9y9UIC~rL{%s2(IHO!3UzV3Bu3# z$j-SwaXq`((tI9~`u>rdrEkX3WycDkIA6MXEp>qI`!7lq0^Ji$h;;k>qcofqFEW~* zQd^fntR)2F)1nBYz@5a!3f4*p_uCEQ+>r#*b1q?ygx!9E;Z`&|j(EqhwfiqI&aH=V zW(^BG>L#={mKCR6WI0cs#nSf`2bgSJ^yoM3SiQ7v%3l;c${R)nb{k$86`3)-riJW9o5_xLA(^}=uzb&83H2*Cj-nNE&qty#>sIT}PG6Y{nL=+oltGRB1Vx%M{Ux!H zgQ10BDzUkFf9v|C=v~HZjF;S`C}gu%sHY<}?#Sgc94A=I9nKJSlHs*RVuu}sqwayu z)4ld2vZ1NvVXn=ylrEMP{8~SJF^P}sYf5I~$BF5)yH~A;>wp~}@?8<;NvcG%6g55X zG+cCV^h=|pfZeCj#n#b3ogZ$9|Dv36RKRQ-&cdMwwxLO~(v2Ln) z<{}=7;BH~+yGpwH+2q8xy87Y8UkD^ta$`dVm}ulZ6!mV6njcGv9Cf60yVlVnR7(F{ z){3Ppmqq9;;K|R{XC+Un&xlYivjH2f%DrjpH&(TXVPZ?Z^el-7x8Y3tiR zzWvyQ?ZM-<961T3<)x0LJ!10N`mx6ewkiv z&Q{$wN>S^l>)ewDD9GCsTjN%}krk+6rkZR+&$Wsr?-OglVeCz!iJ_$-*`-cnW-cVK zg6qOMo`aRhcc@6{97BvdK5OJI#t%g_oD3>x4ojn}_g3ccf%b+%l0Wf*$!sFDNzYi$0+W^wa27ix-Kt>_D9dUSc&gLp7O3!^$N-ec-o z6UP|tfPRU_d!pVo2&9EcD#oE6!wGwS$YexJtDUt0Jo=cNj^y~k&*T&0WA8QCjxct> zQ#(6lt2b-qfs25m4?ANV%b z!}a9sV;6xS;H2kbxk2In@k#XAm}Zhj2wuVe;hP`j7OHm~fDOJ=8}R@8>)sy%k%x-q WcGf0sE%5U{kfE+Aq(R%|>Hh)D1<1?* literal 0 HcmV?d00001