From 8e3ae532a68bd1b3967c4155d4723dc4d653926e Mon Sep 17 00:00:00 2001 From: Philippe Weidmann Date: Wed, 12 Nov 2025 13:40:07 +0100 Subject: [PATCH 1/3] feat: DotLottie animations --- Mail/Views/Onboarding/AuthorizationView.swift | 32 +++++++++- Mail/Views/Onboarding/OnboardingView.swift | 2 +- Mail/Views/Onboarding/WaveView.swift | 38 +++++++---- .../Animations/addressBookPermission.lottie | Bin 0 -> 5011 bytes .../Animations/notificationPermission.lottie | Bin 0 -> 11424 bytes .../Contents.json | 24 ------- .../authorization-contact.svg | 27 -------- .../Contents.json | 24 ------- .../authorization-notification.svg | 60 ------------------ Tuist/Package.resolved | 13 +++- Tuist/Package.swift | 2 +- 11 files changed, 69 insertions(+), 153 deletions(-) create mode 100644 MailResources/Animations/addressBookPermission.lottie create mode 100644 MailResources/Animations/notificationPermission.lottie delete mode 100644 MailResources/Assets.xcassets/authorization-contact.imageset/Contents.json delete mode 100644 MailResources/Assets.xcassets/authorization-contact.imageset/authorization-contact.svg delete mode 100644 MailResources/Assets.xcassets/authorization-notification.imageset/Contents.json delete mode 100644 MailResources/Assets.xcassets/authorization-notification.imageset/authorization-notification.svg diff --git a/Mail/Views/Onboarding/AuthorizationView.swift b/Mail/Views/Onboarding/AuthorizationView.swift index c0451019e5..d71d097f2e 100644 --- a/Mail/Views/Onboarding/AuthorizationView.swift +++ b/Mail/Views/Onboarding/AuthorizationView.swift @@ -18,6 +18,7 @@ import Contacts import DesignSystem +import DotLottie import InfomaniakCoreCommonUI import InfomaniakCoreSwiftUI import InfomaniakDI @@ -26,18 +27,45 @@ import MailCore import MailResources import SwiftUI +extension SlideCollectionViewCell { + func setThemeFor(colorScheme: ColorScheme, accentColor: AccentColor, dotLottieViewModel: DotLottieAnimation) { + switch (colorScheme, accentColor) { + case (.light, .pink): + dotLottieViewModel.resetTheme() + case (.light, .blue): + dotLottieViewModel.setTheme("Blue-Light") + case (.dark, .pink): + dotLottieViewModel.setTheme("Pink-Dark") + case (.dark, .blue): + dotLottieViewModel.setTheme("Blue-Dark") + case (_, _): + dotLottieViewModel.resetTheme() + } + } +} + extension Slide { static let authorizationSlides = [ Slide(backgroundImage: MailResourcesAsset.onboardingBackground1.image, backgroundImageTintColor: UserDefaults.shared.accentColor.secondary.color, - content: .illustration(MailResourcesAsset.authorizationContact.image), + content: .dotLottieAnimation(IKDotLottieConfiguration( + filename: "addressBookPermission", + bundle: MailResourcesResources.bundle, + isLooping: true, + mode: .bounce + )), bottomView: OnboardingTextView( title: MailResourcesStrings.Localizable.onBoardingContactsTitle, description: MailResourcesStrings.Localizable.onBoardingContactsDescription )), Slide(backgroundImage: MailResourcesAsset.onboardingBackground2.image, backgroundImageTintColor: UserDefaults.shared.accentColor.secondary.color, - content: .illustration(MailResourcesAsset.authorizationNotification.image), + content: .dotLottieAnimation(IKDotLottieConfiguration( + filename: "notificationPermission", + bundle: MailResourcesResources.bundle, + isLooping: true, + mode: .bounce + )), bottomView: OnboardingTextView( title: MailResourcesStrings.Localizable.onBoardingNotificationsTitle, description: MailResourcesStrings.Localizable.onBoardingNotificationsDescription diff --git a/Mail/Views/Onboarding/OnboardingView.swift b/Mail/Views/Onboarding/OnboardingView.swift index 34a3827b26..fa67b51ace 100644 --- a/Mail/Views/Onboarding/OnboardingView.swift +++ b/Mail/Views/Onboarding/OnboardingView.swift @@ -239,7 +239,7 @@ final class LoginHandler: InfomaniakLoginDelegate, ObservableObject { extension SlideCollectionViewCell { func updateAnimationColors(configuration: IKLottieConfiguration) { - guard let animation = illustrationAnimationView else { return } + guard case .airbnbLottieAnimationView(let animation, _) = illustrationAnimationViewContent else { return } IlluColors.onBoardingAllColors.forEach { $0.applyColors(to: animation) } if configuration.id == 2 || configuration.id == 3 || configuration.id == 4 { diff --git a/Mail/Views/Onboarding/WaveView.swift b/Mail/Views/Onboarding/WaveView.swift index ba1bd77c05..9d3341263c 100644 --- a/Mail/Views/Onboarding/WaveView.swift +++ b/Mail/Views/Onboarding/WaveView.swift @@ -82,19 +82,33 @@ struct WaveView: UIViewControllerRepresentable { let coordinator = context.coordinator - if coordinator.currentAccentColor != accentColor || coordinator.currentColorScheme != context.environment.colorScheme { - coordinator.invalidateColors() - - let newColorScheme = context.environment.colorScheme - uiViewController.currentSlideViewCell?.backgroundImageView.tintColor = newColorScheme == .dark ? MailResourcesAsset - .backgroundSecondaryColor.color : accentColor.secondary.color - uiViewController.pageIndicator.currentPageIndicatorTintColor = accentColor.primary.color - if case .animation(let configuration) = slides[selectedSlide].content { - uiViewController.currentSlideViewCell?.updateAnimationColors(configuration: configuration) - } + guard coordinator.currentAccentColor != accentColor + || coordinator.currentColorScheme != context.environment.colorScheme + else { return } + coordinator.invalidateColors() + + let newColorScheme = context.environment.colorScheme + coordinator.currentAccentColor = accentColor + coordinator.currentColorScheme = newColorScheme + + uiViewController.currentSlideViewCell?.backgroundImageView.tintColor = newColorScheme == .dark ? MailResourcesAsset + .backgroundSecondaryColor.color : accentColor.secondary.color + uiViewController.pageIndicator.currentPageIndicatorTintColor = accentColor.primary.color + + guard let illustrationAnimationViewContent = uiViewController.currentSlideViewCell?.illustrationAnimationViewContent + else { + return + } - coordinator.currentAccentColor = accentColor - coordinator.currentColorScheme = newColorScheme + switch illustrationAnimationViewContent { + case .airbnbLottieAnimationView(_, let ikLottieConfiguration): + uiViewController.currentSlideViewCell?.updateAnimationColors(configuration: ikLottieConfiguration) + case .dotLottieAnimationView(let dotLottieAnimationView, _): + uiViewController.currentSlideViewCell?.setThemeFor( + colorScheme: newColorScheme, + accentColor: accentColor, + dotLottieViewModel: dotLottieAnimationView.dotLottieViewModel + ) } } diff --git a/MailResources/Animations/addressBookPermission.lottie b/MailResources/Animations/addressBookPermission.lottie new file mode 100644 index 0000000000000000000000000000000000000000..6ed8c3878cdaaacaeaae47927c0bb4b324dee551 GIT binary patch literal 5011 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 nho< - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/MailResources/Assets.xcassets/authorization-notification.imageset/Contents.json b/MailResources/Assets.xcassets/authorization-notification.imageset/Contents.json deleted file mode 100644 index 130d81e2a0..0000000000 --- a/MailResources/Assets.xcassets/authorization-notification.imageset/Contents.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "images" : [ - { - "filename" : "authorization-notification.svg", - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - }, - "properties" : { - "preserves-vector-representation" : true - } -} diff --git a/MailResources/Assets.xcassets/authorization-notification.imageset/authorization-notification.svg b/MailResources/Assets.xcassets/authorization-notification.imageset/authorization-notification.svg deleted file mode 100644 index a2ee50de62..0000000000 --- a/MailResources/Assets.xcassets/authorization-notification.imageset/authorization-notification.svg +++ /dev/null @@ -1,60 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Tuist/Package.resolved b/Tuist/Package.resolved index bb9b93a72a..31ba5d4806 100644 --- a/Tuist/Package.resolved +++ b/Tuist/Package.resolved @@ -18,6 +18,15 @@ "version" : "1.31.0" } }, + { + "identity" : "dotlottie-ios", + "kind" : "remoteSourceControl", + "location" : "https://github.com/LottieFiles/dotlottie-ios", + "state" : { + "revision" : "4213e7298eb94b81ce08c226302759c34ce59366", + "version" : "0.11.1" + } + }, { "identity" : "elegant-emoji-picker", "kind" : "remoteSourceControl", @@ -113,8 +122,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/Infomaniak/ios-onboarding", "state" : { - "revision" : "ca793dc5613ae4fd67b209e3f5f0222e00a6da4d", - "version" : "1.4.4" + "revision" : "df57bb493c01f7ab2753e3c6a14f947897f16e46", + "version" : "1.5.0" } }, { diff --git a/Tuist/Package.swift b/Tuist/Package.swift index 1c70aea136..3abee6183e 100644 --- a/Tuist/Package.swift +++ b/Tuist/Package.swift @@ -76,7 +76,7 @@ let package = Package( .package(url: "https://github.com/Infomaniak/ios-features", .upToNextMajor(from: "8.4.0")), .package(url: "https://github.com/Infomaniak/ios-login", .upToNextMajor(from: "7.3.0")), .package(url: "https://github.com/Infomaniak/ios-notifications", .upToNextMajor(from: "15.0.0")), - .package(url: "https://github.com/Infomaniak/ios-onboarding", .upToNextMajor(from: "1.1.0")), + .package(url: "https://github.com/Infomaniak/ios-onboarding", .upToNextMajor(from: "1.5.0")), .package(url: "https://github.com/Infomaniak/ios-version-checker", .upToNextMajor(from: "16.0.0")), .package(url: "https://github.com/Infomaniak/Popovers", .upToNextMajor(from: "1.3.3")), .package(url: "https://github.com/Infomaniak/SwiftSoup", .upToNextMajor(from: "1.3.0")), From a0ef7e01544ee456d1259bae1d16244376e94e55 Mon Sep 17 00:00:00 2001 From: Philippe Weidmann Date: Mon, 17 Nov 2025 08:50:22 +0100 Subject: [PATCH 2/3] fix: Correctly set theme on first appear --- Mail/Views/Onboarding/WaveView.swift | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/Mail/Views/Onboarding/WaveView.swift b/Mail/Views/Onboarding/WaveView.swift index 9d3341263c..e308c55e9d 100644 --- a/Mail/Views/Onboarding/WaveView.swift +++ b/Mail/Views/Onboarding/WaveView.swift @@ -157,11 +157,26 @@ struct WaveView: UIViewControllerRepresentable { MailResourcesAsset.backgroundSecondaryColor.color : UserDefaults.shared.accentColor.secondary.color - if case .animation(let configuration) = slides[index].content, - colorUpdateNeededAtIndex.contains(index) { - slideViewCell.updateAnimationColors(configuration: configuration) - colorUpdateNeededAtIndex.remove(index) + guard let illustrationAnimationViewContent = slideViewCell.illustrationAnimationViewContent, + colorUpdateNeededAtIndex.contains(index) else { + return } + + switch illustrationAnimationViewContent { + case .airbnbLottieAnimationView(_, let ikLottieConfiguration): + slideViewCell.updateAnimationColors(configuration: ikLottieConfiguration) + case .dotLottieAnimationView(let dotLottieAnimationView, _): + if let currentColorScheme, + let currentAccentColor { + slideViewCell.setThemeFor( + colorScheme: currentColorScheme, + accentColor: currentAccentColor, + dotLottieViewModel: dotLottieAnimationView.dotLottieViewModel + ) + } + } + + colorUpdateNeededAtIndex.remove(index) } func invalidateColors() { From 9ea834b0c812a087910bf998f6bc9c8bc427b162 Mon Sep 17 00:00:00 2001 From: Philippe Weidmann Date: Wed, 7 Jan 2026 11:49:41 +0100 Subject: [PATCH 3/3] feat: Add create account animation --- .../Views/Switch User/CreateAccountView.swift | 28 ++++- MailCore/Models/Settings/AccentColor.swift | 9 -- MailResources/Animations/createAccount.lottie | Bin 0 -> 20484 bytes .../Contents.json | 25 ----- .../create-account-blue-dark.svg | 98 ------------------ .../create-account-blue-light.svg | 98 ------------------ .../Contents.json | 25 ----- .../create-account-pink-dark.svg | 98 ------------------ .../create-account-pink-light.svg | 98 ------------------ Project.swift | 1 + Tuist/Package.swift | 6 +- 11 files changed, 28 insertions(+), 458 deletions(-) create mode 100644 MailResources/Animations/createAccount.lottie delete mode 100644 MailResources/Assets.xcassets/create-account-blue.imageset/Contents.json delete mode 100644 MailResources/Assets.xcassets/create-account-blue.imageset/create-account-blue-dark.svg delete mode 100644 MailResources/Assets.xcassets/create-account-blue.imageset/create-account-blue-light.svg delete mode 100644 MailResources/Assets.xcassets/create-account-pink.imageset/Contents.json delete mode 100644 MailResources/Assets.xcassets/create-account-pink.imageset/create-account-pink-dark.svg delete mode 100644 MailResources/Assets.xcassets/create-account-pink.imageset/create-account-pink-light.svg diff --git a/Mail/Views/Switch User/CreateAccountView.swift b/Mail/Views/Switch User/CreateAccountView.swift index c9db3b2b55..5380314849 100644 --- a/Mail/Views/Switch User/CreateAccountView.swift +++ b/Mail/Views/Switch User/CreateAccountView.swift @@ -17,6 +17,7 @@ */ import DesignSystem +import DotLottie import InfomaniakCore import InfomaniakCoreCommonUI import InfomaniakCoreSwiftUI @@ -33,11 +34,32 @@ struct CreateAccountView: View { @AppStorage(UserDefaults.shared.key(.accentColor)) private var accentColor = DefaultPreferences.accentColor @Environment(\.dismiss) private var dismiss + @Environment(\.colorScheme) private var colorScheme @ModalState(context: ContextKeys.createAccount) private var isPresentingCreateAccount = false @ObservedObject var loginHandler: LoginHandler + private var animation: DotLottieAnimation { + let defaultAnimation = DotLottieAnimation( + fileName: "createAccount", + bundle: MailResourcesResources.bundle, + config: AnimationConfig(autoplay: true, loop: true) + ) + + if colorScheme == .dark { + if accentColor == .blue { + defaultAnimation.setTheme("Blue-Dark") + } else { + defaultAnimation.setTheme("Pink-Dark") + } + } else if accentColor == .blue { + defaultAnimation.setTheme("Blue-Light") + } + + return defaultAnimation + } + var body: some View { VStack(spacing: 0) { CloseButton(size: .medium, dismissAction: dismiss) @@ -45,11 +67,7 @@ struct CreateAccountView: View { .padding(.top, value: .micro) .frame(maxWidth: .infinity, alignment: .leading) - accentColor.createAccountImage.swiftUIImage - .resizable() - .scaledToFit() - .padding(.top, value: .large) - .padding(.bottom, value: .giant) + animation.view() Text(MailResourcesStrings.Localizable.newAccountTitle) .textStyle(.header1) diff --git a/MailCore/Models/Settings/AccentColor.swift b/MailCore/Models/Settings/AccentColor.swift index 142ad1d372..c958e88c03 100644 --- a/MailCore/Models/Settings/AccentColor.swift +++ b/MailCore/Models/Settings/AccentColor.swift @@ -103,15 +103,6 @@ public enum AccentColor: String, CaseIterable, SettingsOptionEnum { } } - public var createAccountImage: MailResourcesImages { - switch self { - case .pink: - return MailResourcesAsset.createAccountPink - case .blue: - return MailResourcesAsset.createAccountBlue - } - } - public var defaultApp: MailResourcesImages { switch self { case .pink: diff --git a/MailResources/Animations/createAccount.lottie b/MailResources/Animations/createAccount.lottie new file mode 100644 index 0000000000000000000000000000000000000000..5e6a37ab835cc85f8d9198a579ecf064942eee28 GIT binary patch literal 20484 zcmZs?V~{3o6E)bjyQgj2wmEIvwr$(CZF8n=+qU~|bLV-#-Hq6Y{c)X>RZ$U{QBif} z$;vDR8Bj1ZARr(ppi-k??XTM34W9pwivKP6f6La;&eF`(*@fQ9+1^e!h7Wc?5H9Q| z%A~J)qfr@I0=!?58w_V-jUCc`zI4lU-YOC;5-V z>LvNdbk--h!v8168JjD|YZ)M*XlyVbb&VN1f?hQ6BL-P&MRH#$S+v2TMUOaeb@7#Cwai>i1yD~DBq={iD znUYON#|eXD3~+zC-d^`lsd+w?Aac3kU!(`2TGA{MtL6oK}zC%s!QWl}wl}etbTGw(NQLe0%#iK6U5N z=cC{C*W2Bp&3}913HV%v=K%RR1LsFRZSN=k#ObqgVk6O@O=#Z3<<-`N?HLHS3O#ht z8=}mg0uUE)TNJArq#G^3Xzx;&Z`}+L-@ZVjLIG6;KuP=^{ zp7ui;J7&M&!N6Hywn_v@b0Y$kEtDTmzLRjTV@C_rt7q_u#EZ6c#D2tq8QfVQFd{9O z@)qZBT@s}0`}zIai!2LYhOGRq&t9HZ*VpqCqR3bHsE^(p-nE6Qo zR@?a(Ov{4sTD|-uI^Yp8CD_E45Hwq^+g2FzYto2N{s?YXB1OR-C;;5*oA`S z%|7jUJk^Y8=Mq|xUxWR_^gLf^oIerpFnTJALu~b8gb((aha*`TptSThm++UjoT=1o z-Wt0`vVax@M8uW?ND?wA1zc4y6NLem*cc!wbQHjg=n~VZCpl<_4~GQH313b=k4asz zhFBf0wb`jKM?Ad6jPHsakOBe32?;;Cg?fh7*D}WdE;-7o$;dOXsZao#er`*vA$`Ks zd-@Q<$-?{>Z$^?i_AwhW$sqxlm5};O;P0(Sv*ROc3$@)s)vEoD4`49g%>IujV3eTG z?`u&%tW0~HcZgK~&ar}G9R$Q-=!#R*=m~8wvCiZ2VV>SSmr78ehDD5#!9*N6mUx5M zTKf!3jlaxpjaQj4I0CI6Lb;_z8>B^m(z-co^o^G)o%AdQpMeq8mgGJW@%+sa_THm6O1AwNvuZb2(f zsQDw0{X`6cIM?N>0aSi@==d?(5;SNxL(vC6AYL7-Eez>^L-vt|=06l478Lj%41O5H1EdoJg<@3lizA_&3ZQQ7_j3n0a7f zI0znXIan2*h#uRJ0w!j$;>wh!-Y@1$LrjJSCfD`k)Y?uu&t-hqu0IwLOye!~ZxPmh z=NZM1>pkVtIti$SCxk>|zedoX*#u6BqULq!YX6X8EF~vk5vRc@2+0X*OmRs{Duy~f z^3gSzPSFYT$2l-u%a1#vVCMK}D$TIJVF$lJonT4HJKSA!Veeg72p@}V3%JzJAN&O+ zj?|HCF)rc4k}=eP8@Z$`btNSxrN*Bj$r_!?PXpmb2iDSwNL*Bn&M>(m?l9U%^p82x z8j7qso1>LOwk2Bv`fd#ogTdKl$tSrt4sVDzQAn^2Q6i@g^+9q+TCB75k(vy6BFa<{ zHrG)QI?)i-g5cbcLNTudgDnC=Lzl{Vo9oa~G=OdmKEqV9jX`;W1Bw4$#NUJ&ryN#B5t79>!No=|`%mSc+O-uHKUl3woprzlGten zN~p`lm=ocK8>-KC#0Zic92YDZ(v{3L7w4q84xb-K84-;4r-~@ zo7L;}ae8~B=Qr*5b>6Mt=l|pJ(&42;ci_qk8_k$8d}+bf&47M>#RM1h$**1C?CRF8 z0kQ9k9@eayCf>|Rr`F6nwxH=q5OVpUiVu#ZI|8HCbO@aVxmOitT*aQycHO>|%WTF^ z8Duk8-?ym#Ubc0?k=C%k#Bf6vKL(4*)b~Kqh{=~5^sD`75{F})!2kX0g~TS2(6o2h zVhvBzkO=nIg(>_0H|48lu1 z+`TsBfg9!oocc$YO@2D^MF)>QIU(2MKR_CBg3&RWKNL;UK>&s8r+UmEw?@-9F1pNd zGcXiCwS2u_PaK6rZXS6qwhN;t21P?p0 zQE3@F4m&m7DKrmAjR(Y$P{1Pg#AmEv<~HZRg{L~Li_>ZO$vQFrUZn%Gfg|HbiAW$* z|6yURli2#)4ZaCQLoj&tzUX;$|=c(mWqC8@=Q*PK^3(uyGR$?NWb{_ z0H`r8vnSdB;pMZ^Ogo3iZ`0Y*NN=q1TmcD=$|#ef9cddUv^N1Gn0$kWv+2B$%KUw` zG;R?sZ#R?!wM2MqMx6pSS2T7D>UlpRNJ<~2~iI?Wm4+f6A1z1LN_uPRDKAuq ztn6{Z+^o7C5={{oipD7{HApawpG^{xYH@m9UKo51npk1o^&39`PnAGY8SuVNnbTb zD0R1zWNVE`bW`FBUKY*LAS&Acyq!VknP~# z9)OV3=!hH~{|nbhcGBy#PmcLFDyfCnMW@-p`Qz8-5V-p&vfW4=yWGE9-;8dj<&NSQ zou;4cz|uI>V+(RJU8Fx8jxFceY#}GVMa$h7@-9_*7aL^TY{3mLKS#?A_EemTh7JH4 z^bqYnV|^ES-Tg6t`?w--7i$?CAdE4ar`DT3uz2Fs76-;Jz9Z5<-WO@`>VP$*&NYh; zU#ITXpE+REn|e4F;nk)qK6c7Q@BiYXWA2}vZ{?hwq~~^HMOIYWyDqAqr^l|iBy`)M z&stgB$ADKi!H8XMGd0m5R+D7 zpsJ3Dh(B-ERyqlO&yiFLBg|WFvPA||C#7gI53&Q}NGPQx(MvLi>>xmE7=ZFp6FEm* zkf>EqQxyxwktC{tyw?Iop! z3

%EwiO{k0xU^Eh|*t`t=8co|u2F=VX5aVlp%uL7_@WiOu5v*5A zrUsRzf!c~}44}oO&J7ShzasxONViR8S7QW{@rQ`7mNXuh(dijZ5I6K2TkM@(i5YOC zrLi*FzWMhVA!{5MTU??2yD)4dQq-W5tW!>V=rc>y0IAD{$Uxm5IvbaM{3WenCaqz- z&>dt4#mz!S10&tHl1yA)yQ+N$rHySG@kRBR&JZ#U&ooW6htIs1?5f(On=H6JWZSxr z_=3NJ>n2(fYtuo8$E>V$WGgRo2m4v|0{!JEtHzK;hPlsCqE8Rn{31BtMHX9zcE=37 zoOU0V_g%^i+Phw7AhNd_H;VQdWhN@(^^AgtET=Nw&xshCVrs0)bd&gGm2`gy*#{OF zaMDn}AaZTm!$n(8VTS-)qXOtt0f_Z0HT^_kR#Ij4mnE2(w+rRXMjvMN_kCu4y)U}| z@%j0_zj1u(&>Fh*Ku0$W82dAC<)%-&ux^YA_U7BBXMTBQ*9bS@Z9y&!$rx+q2$TBv z|D$knQNReYS!H|L@)L+8f`Q0@ci^6}rwyECVziOD>Omwg$LWYiQqO>hvzF5$ou5#e zrXUB;vRKnJTBoIb-rwF1y`En|?&tP+Jbkp00Nc(hbFtqbD*juQ&IWK`jM6TD<&JHp zo|(w*_ac={XDO>&-;yg8Oc_Kao=)EKAI`#bZV&F^`Q|wO8ekm%m@<7AwCZbvTgg(5 z8@;J**utdS$b&c0{OOWOB>}!iY`xXiJ><{S+kBcNcW|~QNRYDxE%{RmkhU-+4 z-c#}+q9bU~fKjHUqZBL!nS(50#+5#X<(i?w%}vqk5EONHR%n4oCy6e3g2#h|0A8@wBN&U+)3MHs|1J{u4 zUb%u5B&IFT-V>M=MuB}~kr+g&07Ri)e|CAI1s`W%6vhU&fQtost!}Hzsha2bp4#Mc z(9GTH5+g^Sz6%%lfv5v%4Vs}Gef9_|)UwWiBoFhGb z{3M)1DbO(9DPR(bm*J)O6kw9Y^pzO-e5Ftm(3$9%tfG~tBiJN!tIV!&CM&HP_M&y$ zyO{Fzwk}S1l~!<|V!maE3S2LOCW0yXE8aysz8znJQ;{NTowJCnl|1^jNAO=Vsp z>_`m5hT_;z0NrP&LsTaret1Vq88Y0$cxHIA@Mi>8`3ZiQvamcFC1WGhs|^6UzV z@L+tCONtmXTF`@^SEScET{2k}oi0{l&*xR!{eH*)?RqlyNs zlJ=BUm#)e(JEoJh#$v~)UoZ_cz9z(n^xiYLx}GI5L?n&rb@wK{3JjS?#8(~w!Hpdw zbO7m-7&-)^>ABlx<2BD|iob6$Qu4R>zUB!rTBw zSdOgP_4$qbrV<~*m$2uy2N3D@ws6N)I_zJ@95%* zQW0uNI$pQn;Mi3SD{B3@j`GIX;CnSa-&l@%a%-09tFyyZn<&Cti4|(B!E#&A6ZMLN7My z@?a&3%6Iaczp624{iU`hAyCy$`KqQUVc;^n?a7n6z-F+zY{B zJxICZLCDtF{Y>BDe2^%G#U>$$nMh@`T48GywtI)IlCNR|EFTAQp{K-=vcU=fu}DiJ z&IH02k9rU8#5gi)h1B>?_>GCrjdaaFG*k?^W}+x3%4MP}5$2EsdhMc--5*J|xqTn( zM-j4bK(&?_F52@82>_rBHRTDK4^Xm2Re46f(T8j!9!LfPBxf*;fmL{6n309&UK0O9f5Tyd#dOCBbR9wms^Eu? zdhYO8W_srx8lvunK|Z1YG3hZ$3TbHse&HHZnyzZ!$naCEFoDj%-lz*0`Uc_!6mJp1 z5>p1@j-(7?*ieY39Q;1i0%v}>z5~AI=S4xXwg~2!_P&OR&ANGd7#sP^{WDkacE%lM zLDkNPQHThZ>t~9eboR~N`WyH&HFh%+jz$mGZ+Yy78fa2?s8 zDkCzPG*UDrF;y+I8tZiBM?(j$Zz^u44ue;;Tui-%h`ASZI*|GC4Y@!4G05E$JC1_! z>`3UUc_4KCc%7aG#K3ZKz22(BBdBV*9Rl7HJaU^85N!CwzG z5%*(!h(})Lh#03=M7Iw5JaP2e(=Qy?!EW@|F|k)OfYoQOrayMCR-WR6GKt;}XUI~- zO4X5E)Rw<8D-=5{a?{``Wu?}*+V2S%%N!qn!S6u5i>b4EkyuRV%%8;;02EzO=EGyB zBuD?w1cyTJ;TMC?eE$y?!nxr%Kor9j0p6KTKHtgj9LJ#c^|=M@Ig?>~9jK3~&TN95H(=~g))WN> z*gJpDkCE=+59;C)c#@kNU;1QcE8iBI@&)X7%jmE3lOlU$K4$0IEq9QeERs}~KG=H$ z{@X0|0_+#{@G|koU9ZNtKG>(_56gb$e$>xp=RVl^_z-&R7oiFJKiG4DQ0gYy&s`cF zWM^c{qeCwr?IxJaIlMW@;>$?9Ii}@N5r@5>*N@lB&m9+~t7h}mv~o{de12NKz8doJ zCr#r)%ozmTv~=$@#F=&LJUMME9i_A;9jsgGj;Y2TXT7HYfNM0sboV3x^`-)K=40Z2 ze8U;{@EHSOx#`%s`;YCQ(%p-_duYrT3=nR|czrd(-D{PO!LhJ)ccOj)v=+8v91}N! z@7=<88y?*tC7e?RcWxvxIH;TpRxxnw-5(5imySujtN2uIE(pb$ZY~V$2vTk?UJIQj zA#bT#Awdbjs$_t+tUwDc9`c%!8wW8r^eWmG8tnYlRWs$HR`1GGWv9uJw|{%Hqjt!_ zbPq~EGT1%En|@q2EdC~4(uYJPy5A&mWt%olG10^iBir8hpCpz{Qd`xf3mNpJ2#R zteK5yz`sAO{mQ4)PBTMn8Ntm}f1)j13vKCf2g{HERIW#V*yMEF5)*sm06zUq+W(U< zjLVXELR73but@4`cV&S>l0i&jW^X2xDU58k`AQ_VyT+ZX1btJ=;v366BEscSwIIQb zUv$NeF^d2csz5L@Zn`|cr&)I&?C3_{(?(k%PM$T8uZs{=+Y!mU@A|N5I^y)ow~mkC zNyafxkKhT-`VYOX8JGDHsLt}N2;8I9ELn_K$5zV1eB%&d+$J0C=j7_jaT2TSkokvC}WhF!XGb%-d`6C1dW95NK41c@9$%-y0?Z`P3=^b z8i#{oLou{^;7oXGxo0J{Mg3kPZdI2jmvGtcX6CxM+(|u8+{gFL#O1r0Pd7$3>(xnz zB#||A(($hN#WSS#B-tqVZa6Uz-w|B3kVN^SM#m-laJ3a1Id69A_dAA>=f&7cWxbaK zm1O(|4=W#ELIH;wd;^*ExwI;gSHY7?xfDTxj5_Y*wihvo)|OAoT8D=nwPn#QvvT1u zFEQ zmWJBhzJsbl%Dn|NC>ME!i_)-nBjAH+cU9Z(;75yFXCQaJty0QLDlo)mEl21<`jf{Y zDQV}V3aqx%v}%+MR?;F<9Py~=b0kLwAu+gzbH+yoF)_Fe^Z#Qc--Y553h6M!f^)?M zR5I^Tpw^m36f5vbkcnD!%eO@5?1?p441G0B%ayibeP!$_loE&4m>VT4*d{eRKV;G+ zAY>V4%1g~y;mC+4jZly~*%Gqvw3Z^JU$nhbq9tHZ7z~fGnAE`~#T1A&_)zfBUJ*`z z#qTVFWU&e(`DIm=iklz}0;MFtpA?=RhQBm+iGraJ*DxtscdB#%DfR) z55Da)Pkwn-S=ybC4W)t5gwt2{Vqg|mUdwi6gXW!)Z_fhHN+sW%CX~lpy1V@4^WDJP zZdEoiX3WM<`Mb>D;UiY{^bBlloQPde^#*Wi5Xhh;qNCS1sFk&m~XYB z1QOHll(Er})IrzhE%zSO>Gz+eN6YPf(ll`)qt2Sd7X0LnnA|k3+`F8WmlYj(+Mf=C zzC`rO@DlJo*EdtoxzsF}Vdlh?mbR%XYD+rf&Z9)Ni;u%9-Z!jM^R2|z#m^Lg^37OO zh~LB;mAg%@yuj&a4o{m`UB0v541BSaFK&2NZfM-8qVuKA#<>DZzpiy9OI|}v&vOAg zuTsr(fgBs^5UiBUyoWeIE!T>iREmR($}^csj_tVL2eOYx=9inNLVku+9FH{#46p?! zKruh#!Qg@vP@|Hb0tpI~xF%Ddv+&0td-lw>yuW8h@VNr?c(-UKg*fIqbh* z2UqL;-(mYcGzI<0*|8Il@%TyIOR4sVV$}s01pNP$a6ZIOzT`L3roD3eu0{BGK_r)Z z<6cx4Pu*h!jT$_lgZ&Ry4IbE`{#oo$G#NfVI0l*-?TO0yHob_C8kIl>b#j^UeQ-z)s0I}twWmM9YyzHXa35y-+SfCdV98PH| z3MjU`g%6tuN6;g{YQzqVX=gcR8}p&!5~~LpjAoU^<3k#%DojMXV~381#t^cCG^iqW zIE}m6OwSumcw%f10n~?$Z2nTv(}lD@R*8TtUksKgKH4(=#Cb!-I3o_1HUyE2Kpi9@x$hisHRb!W*JXL*tam@LS>>DMen zc{$txEw0ICChNb7bpF4J^x$7bDv5W&s6#FRMX}9A+DEEmKb2^srT;stl|^=X>Eh}x=E|xzR})tbCmVcab1C? zU8|qP(UfA!8q0+cY()-xN~~7WK~}x63~$$5S088L!37l-msJ)kWsENAk=6p$ znZL>go=I>q5Y65Pq~yck3X=^_jCULwRZ%5Pdpb+}iV}J&y=GrlTgt-k%tMb6ZaD&R zH*(h;xtJ^ebIx4MP1E^AFQ%S!0#{ZN6|^H1w@}$xCNzJ9p@pG{OY+D$AQO3pqe`*G z-^YSKoDlAsCk`*1^x^0t82$PKW_K8;$27qZoc(7AEjUJapmg z(AD=?Q3-K8v5x@C0aC@j$nY2*Gz==Wv98s<^Y^8&WzXE{ZOfJ<;XbS`rX5O5O zj#1fZ%80BLSZ6@aIoKPgz|%zzIhSXx+c`o&)k;EXKtZ)(ywye1Agf;v_k*z(lOirR zL(KwpRPHxzQKU6P8QK^r5M8pGv~+PU#8qVHvqCDDmCcGD{Fa<&p_>zVNjq=7lNMrb z8eLz>H8X1L>_$7wBFTua7Ykq2RyhYM>1=No3m>;_T=!=Iq$-hLYq(aU7U@zk^3@LA zwpeF8np@TB52$7ZXel0cf)2`wT6{6*Sqg%!A|xzENlecw+23QfX$Mhzu?1?7#+>Q| znBZJ`*qjrufx`k+$kAS^JIOQA0msm1eCS+B&Zf^T<3b$R(O;(d=&(W)cB6M{N>!jJ zduPh{p2E-2W-|g@=R`%A@V1h2ZBta0NTvLq0i4Xi3wnPM;kZ<($OSTt0+g5c!>g!z zJ>3OnAmada!B=OAg%Ad%!qKKlEptFjo6Y}(NaRS*&1R-$B;otBnHF(GUvFjxRFS)T z8EFtu@082|1tPW(cg$F;*>#~>&B^N>6mdkLR#&tW0nrS~Y?SW4wABdf$_Kr1mT~xK z$diccz>#uk8Qn4zd;c72Sq}z0ELDBs5>{Lt=A?IY4SshW>xj>)#GgDyB_FUWDx+bE z{ybteAJQw!B2zG)Occ6Pw31FIakB)p#_!A#Qv|~djTA&IDlN-|6GozTW9-sQr#9|QIun$D9=Eg zP*{ap9MOiBA+cezcf0>;oHLmHMeU*uU~Zd&w{}X2YrCmsN@V%?X= ziyyi9gI=!Wgm%sH=Uu28tS=lZwBuzM`Bve`wi>J16k8ayI61M)9Zc;vy zgu#eL3f70pxV#k(6^>`6r>{M(?m_q8XPZ|e#Y?RsmPH8yuFcs_5AoZDu?f&$ImyiftE|xXwqWpR=K3D9O zDSo%PzdoLu7?$#9%A^&(~O7jgNy-`>VZ;bb)}uNnNY` zd}PrAc8J#BP=Q?_()P706V?dW+?0VO`@fS>U0T=@3)%Eoj}_HGqOGtR(4q!H$I~E{ zWq_Wcs(d2{9Xxbwm9YAkq9YpJ<16uO53P3ve064bXm{%c_-Xa!rdLi#A;nVUU)DO| zq3FGBK|?0pK+o-gG{ab0TQ9qjaJv0kpKIF7_bh`+iDb3mpwKM0xHjn-=`C)84udWk zrPn?*`xA$^9e2P-sq~y6acNAPc-pgna>+Ka45H^;LQhV@HeF6${!K@flQXPc2+4kc zowQwakE_rE(I?ZLNoicY%lUXx7&h+Yg)|7F#iAcM+XllbS_U`}Q^I4?zfOA{tk&HI z>392u>R;9-H`qYd3ZhN`q$svCrrtzTJ>ED^XwzGX9-&_B1UVCt(I(GQq|E|vhDyMP zWtUb%jG{lWJ|hc~#=#DmuERNQ@p&m_;6tV}tpO^^b(yY3Gy;Fxe;e9k zB~6*2XBxV!nVigCE~lSD=U8&?sm_`2EE9H2cVk1PdqU>xmkbJfG0ZgAK@Xnybpj7| zIoF-$gpDzyACjq`amv9Z)I*i-68+-_Sn~v~TU$!PFN`@@P4k#p= znp3lCviy@1PSkLllEdJBLS*h@B|}fS(w$rHnVVH~pZ*sBN2|nL^7v(=)}~ZCBAbN9 zt;$$?`vyo+*O^X(N&L4QSCwHw{~wMLF5)mfi{*tHPn&RlwCO`FFtJ1LuBDI^{H$uW zR;$!>Y~uNcD60E0HrqG-q>N*uV@;XnhnBK8xtWVNcGaC14hMkpmi#?S=D|!9iC^3Y zmmj(FmS(5vn!s4GKTt8BrIejHDq)UvCBvsZ-47Ugi=J}0xV%xWm4 zGH6BAsi)WYR-7&zKYS(iM}P=A&6vuaYHp}43ZrIQEoj|1z55i7ZEXt-)ns1Kj)acT zHN69gbp9NqFtfYnyPDhjlm-BJ(m)D5^+-*B*(s;o57X1hVhH*@u5mhmqT7rW$Y~>e zip5PxVg&qd=r8@%#rawZiPBo+8TN==5*`>&5D<=dF+(3g4J#aq^zF6+-F}~pvZb8) z0<{x49RuuNSW`Q~IocS87Ckvjxq(0UyswTPfu6t5BS=cd1{=?hX^G;8~9pf;XLd%0u=NSstAaDjYWBzjVt z+)P_~qUAz~@ni%UII2+e1>-tonWxF6xd#}}j<9P7GJ7&pS+SRTdcpFHS(?I=)zXp> z1f(37evtUiGDFib2-Wj|sIypGmAh(cx@#!u{i(LaS$D6KczRUeOPkb+zdYaf;uJt( zRU!^*8I>7|mE-Y>oV+OOIl7qO%LI6U)<7~?w2DeJjGEaybu5z;g4{l-sh&G-tLJAj zLFFPSYa?&<19X&1_sO5{R`Wl0ki(4h&yuTX=U$v_}f1qrIeOm(92 z3t%AZ>x3MZb%0p*hWAN_7w#n7OLF&C-vIP8L4y^xq(hqf4-azMaG z>q_g;+K!&5;VnMJ>Xl;h`tsd;bhkAYa&R^cQTo!wVhiZ#WVQlo)WuqE_G0t`>O#!N z@Zz5Zcq-!w&z^en+ZRy?{l~X8Bg+6!;|EXZ#p@hw^}PWH0`~a0tGro&&rZoJuilPt zf^P8M*!enPPELl=@M5VygH3w?XD6dANF#3sdy`j#7j$3t_3*V=-X>scM|oa+10QoZk5y=XTbo|d}JY_X-Ylry4DKy5n{TL>z%d^87_u5QJP zpsVo}WTN`5JjS?#Rwvw!Fp#Z#@E2~-QTJdBZct*{KvgN%@vLwqUyD9{o0C~P>S4^q zcP!?&C<3~qYmgF=jq%z%_Sa66I?qH3T3_)xR6VUKXL6tuI1TM1BkjBx;ymNl^gm=5 zKThJgF(D7b8ZaFC^RFF_boGm$H(}h`AO*#r>tU%lBiu=&fON| z*?jd$cNP3}rBK%nc#&nNd`vc6lKv`Wfi)Jh)G}G0ykbQ2T3y8TnfJN2(98SgBi&6P z01-p?$U_8A!u_qhN4$VT=`o4DvF}UZCAY@@r@S-w>1w%-kB;Y%4?c;F$e5ZgnImki zv0y-Y6;B? zQk#uPH-#|--Vvv|h3j~6vgydty+PUKiZgqe%8UJ|ujQwxHR`5a0adTiV;uSdD-^Xf z|3b71Z>gyGig)p9Kf!yF)w{#{CBvi}@!#(a8T!nbg)#vdpOw}0YnRI~6S@L@|C%9v zpKaxG8Ybr<_h5~#13Ui{nZ92SkMU2Ht$&@?zPHe?7PlP{Baww^J7baZYr^M+VIyEo zZGat%_-!faX?oyGwZv+Bl-DW^8U@t?%1TVYE~7r+)Xduzg`>+LAN~oohTWipuy1xu ziqH0b4b+0vP9b-=jgoNdI91UKF^@5@nu=D6}<|^8ZTZy)yj^gd`C4mk!);<`-`v*{Q zgvHzVuUd7FSvN03h4>~#=Rxr$7fD6Fsm75}Xc5L?3)BTIqSU97)!6sA zj~k*~_2J|MS5>IG<*UC#G{qFMuH8h06ls<4NGo zAZ#f?U+kcJLzLi<-9vH$+S0SLlw~LyFXZAn&^~%l0mJ|k zm=Io=HdGKd91oZf-Kl5}1zw}K&hoF8G|NURC=448!;azX>OqGXj#Z!obo)Bsp*Rlp zS#FS1uF$^+w)l<5N4}K1cbn_mgM6bngPd*P>F&5jDY>M{ej3LLdAvAP@uus7q2aMy zX;CW2E%z+)WhZO`fDLX_zvEzI#?Fh#u9J7gIPg|=Ac5B zP?ldT03063{^}SxL}HOTc(f)=fb)8He<^EQIm+9HpF)(_d{Q$qr&m?l-GB-F7wx@j zE|OTxa5k=*RhkIv7~fDN$+-RgnN~c3M*ymgIP*j(P#CWrAp*`7Sa!B(wQdSlr%NB?y~k%bpR>p3I0^aUm|x*+ zgUW}phgDw#p$={?@(raiuxf)+Uwc{ke{=6I zIeOE3{tx;o^L&Z(&ezLLQmROaloZxB^ydi$l4rGlIrHk=(^-*3!_v0`?o>P*&K|Xe zAwn|f8JwhVu2#1Bw_&19#sKKYXnsF&>&D{0M4S7+M9cUu(f<9HXknmI#>gX7GMW}k z{yf~$Xt#^qj0<)S%=tYtc!q=-X8l8m17QZQh%m!TdasDKd#UuTdr&OI zt>Xpq3P+g#=FgC>F!F(Lx7lB^>vwzJPQnGIcl-b+@d7?y@8y4b-s9W#_40OWe*lj$ zQ2ZhAdh(hG+FnC`xBWQJ(CTv_2Te>Z0i5$Q>}VJd3t>vNf7Ny(RW7}W`JpRtBCr=A z@97BXBkX}4g?(_MU=KDGsE67g;{Gm?mcwi;_vzKr>uU2(hdF5rYUSBU_K@R%>g?Of zT&B{e*VnnrVoAX=fc;@t)!L7DM2$Wd6y|%Mg9BlKw`=7K!Sx0yB6pTek|bCA)7fUvnQD{*s)W-8ivJ;+6xSt*ykGsDn}9~ukCK_ z85B@fNkZavQcROmYmn%~e=6=VOo8lee*BNadnF$Sdn_{`d$$4q@k@sjAh_M|&Mia( zevu^(mtJq~h;~_S(lgpMT6Tk4sZ*S`Iu0q+b#MxYjojX1n#3iRhw9d3AjHL9rHn0q z*D|;18*^Tp!B}*L5Bu$o#OWD$LIN|%IbM^0AmKMl%-h|+j@z}FdCzrIU;It(b&E~w zftbi5?M4FgL!aJ@@bfmNmYkVzf%TS@Cj}~`um%m?+k@O?$`ga>E}oz0jPL)@Zx_!{ z@;}>9vaItKVRv5l!_IHyqpmfUSj|4Q&TS)vONWO}?5ah$GeMT4Rn8C-?WVX#`8; zLL7epXZH!-o1TvzFDtI-Uu%slV#X34+n)rz^*jXgfkTsgZ8ddW?4q0XP@Bq4ma%bd zjg3Ux?7mc%R8)0BzdzOd?9=CE9H@C0@Y_9;_MkybK4+iiOtu@+)n8RI>h`q{JMJ6A zU_jxKRMJ{iHH!nbE2cJrt3_xax-z_7C<06f?e7N5YM?A7-VZx9CdJzgA;NSJ5Gp{5 z)hwIY3PkLS{6xcdO1~ly{NV0HxL>&j5zq4=u>=&l<)n=zNO2V%I z2pog+4Nl|Rf5|rhd^x7iUC#~N1+k2hlK~`ZC={pSR)rs4twH10@eJ|=X$*g^Eh}-> z)4F);E08Ivajqu4o<8>%s|9HNwg0`Pes7QW%i2E1z5NOtwOAJ*eFo+X$-39Nn8r3n zOaK=qAhuBB4)Y?Y8;6e&5gCT+0e!>H9Odviv3Flhf$zMqk7T$RT{c>G``wYZi%X-g zegB&%)r8XcextOy#ShIKuxiadJ%Onr)i$50;=BEQ{vK^I=$KM~13Ci3FGZ<8DUv??B#+NSt{A1Q>_N^(N(wWvQ)*1M7TUphNR) zU0_3O^L31}h8d)zP>qDbUpj4}87Lh-=k|WiHzWB|aF99-BHR%wObY)iTShznb)G%W zH`Chy<2N(=Q@2g4*}aQ>2jgoi7AwyvLJ8OMGFD&R%;gJjbF;-e`Sb)D#{2iPi@QRE ze&oiIo;ldoUqI?dT1dF_)?Qf;Ke%dk}TKh z8dT4Q2kj}=whSRlS-Zuoad9c_1i_@bmz+~Q_@KqDU>-LQ3;Fku>8fCdYNyKzCz{|8$7epJmPY5RpMsmyf-fOy>i6C_A%*(3 zSfK`y_$5f94SX0;5kCW_`SUPHvJ?wv(#aH7ObErAf)zy_;m)Gy6Y)(DLh*YP_nTm* z8kY8Ef>dI$)iJ~anXt3LkL({U@77t&RCXV`Y{%|AQp^ zhsR2`d9EWS>*nfwq{~;^yBYdZvx6QJ0P*x((}@>!0_9=OvW6Q5aqrWciFAvWX>!yc z2gDuPDtKc~DFp3G@saFK9=*O4W4TKSOR?w71U$v*qjb?$tZZ5aIj^YMQg!Sk;}oF| zqmkPvW`osiM`CBEgpx#8v5=#N-U+paS>ve%YYRqV;?7U|Bkho>N%y6FH|m);>m~B8 z(FvmWBI&l>x}QRpXy}SaJGlAun8K(ji(qc_lUY?%$D@YD@~+(?;Z&Ot^sNw)EPk?b z?>f1UhbGS%gG*RM(q8&oS7io@W~~<&?J?UV+^?7vd+L57y+%Xa(vAz|P))7(Qz)Sm zE@|hmsseuEi^VM4VGOmba+<)KnO0Ch=i<>^g^0u}R;G`L$EO>W#-e<#wXE0NONV3H+ z2q&E&`@+@78Y0nZM$_%?lQodOh~4vZyblpNHpxOC4M7I-77L`9+=;>r783>(ThT`{ zZzaeD5&*U>2PUCQ_P1ggP6JXf3R4WX9LKE&ryQp!6?^J^ylbk2r^(lybzMxG{tRL( z)8g0Y{>PKy4IlA+ziCA5nasOf`jZd*%=e0`yz2_r#AAB*HUjERS}raIzTA7~3NjnM zUxtt@gfbVYDr`q0jK$gZRqO&ayx`7D+kOhrf#+V^r(RTIewsUq5qs4_EIX_0@+Lx2 zALUR|@)Eh{c*tUf)=^H&TL332pC}v=Vz?L)S{baD4KWIIY&7v)?Q`PpXCFUi6%p1Y zG$tW6i=nc@8I3zLKYOZpNdYJ>zpeSLLw{Klzn?my?lxkLoIaAMX_J*cqNs6`b+#wZ z1k?+#ks`y7ut(s(_;oj>()=}yOtXguQvJUuOHD%Me#;VnFR%zh$UqkD1{EzJ<2hWA ziT}2Cay3bJctcH&{!Rt7K3pp`uE^FNA=a?E5U~_;l9G=jO4ZN_?(rpxq+FcSF*#U_ z&|7YSdf{qwK7{6_e8W=(f36w;t4|%P;n;AuQQ+9kPNyFD#)5!o$;r!XE_13a(@&$_EPE?m~j=yP{@yR7fHG6kKxd#57g zLBDb`%Q{J(%w^H=ioW`Vh0Yb}pOm+e|Xx;?8Jd>caq=-0((BehBjCrzJh_X-W2aZ^V`D2c7f_ zC>0sC@<^zwG4T^ip%9Eqa2#_0Rv?&>wwI|OCF_n>$k!_-tBJf{1?1MDQ`q5;x4 zqUXTz31vA%$6Gj!v<*y*UN}c`H5@&NrDCo@O-9C($*uLPdc;byOv&c6hpjezV_mrK z*aHQ8EO#H-VsDqy2z2m5KeGhp&IgvnHSkz_+90Iva-Wc0$t)uCxZlqDZaG=q@gNfo zC{-#@Uy4zN5j;>_HS>_mrp`>!DPKL@LVrAA-`k+vy*&K3aMQDOpH!+vKwe{_koNR3D6rblDdWbsu zfmlx(5iub5{a@T@J#&gCVCvjcw+3?W?94 z0yOeTrM7?>>9lTTL^W>)vHZ&1>B@&H_$sl506=yxdKt6jv&2D zvZnkYYz=KOFt=8)TejVuiqbLT9(0@zw+MM(m@MAI$Xxvh{GQ^i^pkzK ztiM?s8@$I9s9764KM;*vVt!KYO#Yy{HUn!VyULx~3`T48L`-wkl*YU4QhGO~ z2vNsNZ_=vZFw-ZtFKi23jvD?c(uaJ8;=nAr!H;<_M zr*KNg*k`rxFCANaIjH6!P55g1eHO4YY(5D9t@$boJbckBzqP`$x%<`e+xBO8TeI(( z*u`<-e!$uHtJQ_oZMWLUsY5=#4hx!!youe`4@IAa!qCMRPAx-|GYeL9VJC)v3;_+J zt&NP9HX}RNN*e$j$5%WFA+h!s@z!Yz@$H4oyKEqnEfl+?f!lHIM-s<|nG>(0ok7Jz zCYeD06?t!keTf-VUAW_ofIK&1DZ{+UIWuL&n_+-q!Sy%;2XRGDsD4-j=lS|A5*FtI z8!lZrn4aoQi1R&?HkAk=Z+5`6J`#6aPqKr-F-p*14@e?;#-=%!o6X%#59=6pOY1zq zbaZJDj2k#&U8IRThNAWRtxiDaLBOXtN`PSRoN6gl(3PYbCHvSx*J+XsF)mLy{H6=- zBJG;HLXuEYW4;hDF*`J-i?dP?kCNuZd+jBlPG$_3hxJH;Vn4SjpVd;u=pNznn;Xo% zB##s+XQxFex;Dv9)>ozlSm$1Mo!0Ge-pAjhP3wGP?mM`{>s}SCndDW*WOMW-{m1#< z0tDdY^=ZBgcH)z0n@|mgtyP~2nV?|Z6bO&s?gYLjs`C!~16CJEn?D0MgT=?*gg?i-vW^_(QS975FDkI$K(976@E zdf;3IoI-(S7J^*Obk-vbQMxaI)7=&l*88pd9Ka{&4U^AYgS-wx@(&JGk1|g)1C`Z5 zdnwuZ6!%*LUF*+lE3HbTb|2?(KLQ+&NDM|1KgwF_7kLoEKi@ zK_V!JCZ2`Ay@T?z)d9IJ?4K)$X{o;={G#rO@hM8CO|k4xdoN_zL+llClf%eF08~zm zvar)h@(3>ARuAo|%N_DbeDtb`kv&xONQ_-Iy1*nN5f|}9$(DhRWXxD`iX}-neBL}! zcoMJOnP9GVC}>HdPZRz$W^g%+bL3q!&=tVkz$6?Mr)rbNoH{-HkyV71GpFhfXGqYP zhI9P0lfJMs)nQFXUmM%XoP-NYX$v;*O>UdaW{nI2O$On9m67c^3#yFZ!ID>i$HD3p z=;c(ssh2oV%0S|Y$v7H%pt&o%_OyIp?v`UPobe@)09M~>#L&XlsS{I2#R?$R5 zge8!{A?M$*|LF~eT@bz&fbj&o!UP#6JnrdW&Pw=|EI}`RS%Z}Td3aFj{J{6o<-mST z-S>JRO>J!y?@g}$K`p*w{V`phB0e>|TldlEHCpV(=TTAxasf5LSp`*%Rq?@DMNvhp zuZ2Z~#AC}Qg6UUa@V8cxkE?Tn$#p0*ls1Wn)cDl8OD1sN;l(D3LaEm63RlK$EM2h2 zLY2BFdnRvS{gdmBxiwiY495dZ{PZ#NxToL*e$KDyU}yiA-`f9;>`$HrsX6hMPGzL} zCB^|}(X1}~az%@ zv6QZ({PU+H+zBTB%IGha|KE%z7KCGnHs&;@{zbI;7g1T~2z(VeXIF|G5lQx{+td|6 z%4`}zl`(z2WO!!u<2T`rcxnI&YGVdtA`DIJ8&p{TvvnPY@4r3&FtWQ2z3wRY8<&sy z{SSY+>+tJE_Z$8}^FK@QI{JDU{6;%z{g4i?tG0H?<@8vp - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/MailResources/Assets.xcassets/create-account-blue.imageset/create-account-blue-light.svg b/MailResources/Assets.xcassets/create-account-blue.imageset/create-account-blue-light.svg deleted file mode 100644 index 7ccd514980..0000000000 --- a/MailResources/Assets.xcassets/create-account-blue.imageset/create-account-blue-light.svg +++ /dev/null @@ -1,98 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/MailResources/Assets.xcassets/create-account-pink.imageset/Contents.json b/MailResources/Assets.xcassets/create-account-pink.imageset/Contents.json deleted file mode 100644 index b67b935bbe..0000000000 --- a/MailResources/Assets.xcassets/create-account-pink.imageset/Contents.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "images" : [ - { - "filename" : "create-account-pink-light.svg", - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "filename" : "create-account-pink-dark.svg", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - }, - "properties" : { - "preserves-vector-representation" : true - } -} diff --git a/MailResources/Assets.xcassets/create-account-pink.imageset/create-account-pink-dark.svg b/MailResources/Assets.xcassets/create-account-pink.imageset/create-account-pink-dark.svg deleted file mode 100644 index 4a2f7366b6..0000000000 --- a/MailResources/Assets.xcassets/create-account-pink.imageset/create-account-pink-dark.svg +++ /dev/null @@ -1,98 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/MailResources/Assets.xcassets/create-account-pink.imageset/create-account-pink-light.svg b/MailResources/Assets.xcassets/create-account-pink.imageset/create-account-pink-light.svg deleted file mode 100644 index abf0dd978c..0000000000 --- a/MailResources/Assets.xcassets/create-account-pink.imageset/create-account-pink-light.svg +++ /dev/null @@ -1,98 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Project.swift b/Project.swift index 7455b9fa43..48ae67ce91 100644 --- a/Project.swift +++ b/Project.swift @@ -50,6 +50,7 @@ func mainTargetWith(name: String, destinations: [Destination]) -> Target { .target(name: "MailShareExtension"), .target(name: "MailAppIntentsExtension"), .external(name: "DeviceAssociation"), + .external(name: "DotLottie"), .external(name: "ElegantEmojiPicker"), .external(name: "InAppTwoFactorAuthentication"), .external(name: "InfomaniakBugTracker"), diff --git a/Tuist/Package.swift b/Tuist/Package.swift index 3abee6183e..64a0ce07ec 100644 --- a/Tuist/Package.swift +++ b/Tuist/Package.swift @@ -12,6 +12,7 @@ let packageSettings = PackageSettings( "Atlantis": .staticFramework, "DesignSystem": .framework, "DeviceAssociation": .framework, + "DotLottie": .framework, "ElegantEmojiPicker": .framework, "InAppTwoFactorAuthentication": .framework, "InfomaniakBugTracker": .framework, @@ -64,6 +65,7 @@ let package = Package( .package(url: "https://github.com/apple/swift-algorithms", .upToNextMajor(from: "1.2.0")), .package(url: "https://github.com/apple/swift-collections", .upToNextMajor(from: "1.1.4")), .package(url: "https://github.com/dkk/WrappingHStack", .upToNextMajor(from: "2.0.0")), + .package(url: "https://github.com/exyte/SVGView", .upToNextMajor(from: "1.0.6")), .package(url: "https://github.com/flowbe/SwiftRegex", .upToNextMajor(from: "1.0.0")), .package(url: "https://github.com/httpswift/swifter", .upToNextMajor(from: "1.5.0")), .package(url: "https://github.com/Infomaniak/Elegant-Emoji-Picker", .upToNextMajor(from: "1.1.0")), @@ -85,12 +87,12 @@ let package = Package( .package(url: "https://github.com/Infomaniak/swift-rich-html-editor", .upToNextMajor(from: "2.1.0")), .package(url: "https://github.com/johnpatrickmorgan/NavigationBackport", .upToNextMajor(from: "0.8.1")), .package(url: "https://github.com/kean/Nuke", .upToNextMajor(from: "12.1.3")), + .package(url: "https://github.com/LottieFiles/dotlottie-ios", .upToNextMajor(from: "0.11.1")), .package(url: "https://github.com/markiv/SwiftUI-Shimmer", .upToNextMajor(from: "1.0.1")), .package(url: "https://github.com/matomo-org/matomo-sdk-ios", .upToNextMajor(from: "7.5.1")), .package(url: "https://github.com/ProxymanApp/atlantis", .upToNextMajor(from: "1.21.0")), .package(url: "https://github.com/realm/realm-swift", .upToNextMajor(from: "10.41.0")), .package(url: "https://github.com/shaps80/SwiftUIBackports", .upToNextMajor(from: "1.15.1")), - .package(url: "https://github.com/siteline/SwiftUI-Introspect", .upToNextMajor(from: "26.0.0")), - .package(url: "https://github.com/exyte/SVGView", .upToNextMajor(from: "1.0.6")) + .package(url: "https://github.com/siteline/SwiftUI-Introspect", .upToNextMajor(from: "26.0.0")) ] )