diff --git a/iOS/AutofillCredentialProvider/Info.plist b/iOS/AutofillCredentialProvider/Info.plist index c00abcf6dc8..c15498f2dd0 100644 --- a/iOS/AutofillCredentialProvider/Info.plist +++ b/iOS/AutofillCredentialProvider/Info.plist @@ -18,6 +18,12 @@ ProvidesTextToInsert + SupportsCredentialExchange + + SupportedCredentialExchangeVersions + + 1.0 + NSExtensionPointIdentifier diff --git a/iOS/DuckDuckGo-iOS.xcodeproj/project.pbxproj b/iOS/DuckDuckGo-iOS.xcodeproj/project.pbxproj index b4a84532726..992fed113c1 100644 --- a/iOS/DuckDuckGo-iOS.xcodeproj/project.pbxproj +++ b/iOS/DuckDuckGo-iOS.xcodeproj/project.pbxproj @@ -1635,6 +1635,14 @@ A1B2C3D52F7F111100ABCDEF /* SaveRecoveryKeyViewModelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = A1B2C3D42F7F111100ABCDEF /* SaveRecoveryKeyViewModelTests.swift */; }; A1B2C3D72F7F111100ABCDEF /* SyncSettingsViewModelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = A1B2C3D62F7F111100ABCDEF /* SyncSettingsViewModelTests.swift */; }; A1D1C0E72F8CB3A400B1D001 /* DataImportUserActivityHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = A1D1C0E62F8CB3A400B1D001 /* DataImportUserActivityHandler.swift */; }; + A1F4C4E22F8A1B9300D1A111 /* DataImportEntryPointHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = A1F4C4E12F8A1B9300D1A111 /* DataImportEntryPointHandler.swift */; }; + A1F4C5042F8A300000D1A111 /* DataImportHubView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A1F4C5012F8A300000D1A111 /* DataImportHubView.swift */; }; + A1F4C5052F8A300000D1A111 /* DataImportHubViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A1F4C5022F8A300000D1A111 /* DataImportHubViewController.swift */; }; + A1F4C5062F8A300000D1A111 /* DataImportHubViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = A1F4C5032F8A300000D1A111 /* DataImportHubViewModel.swift */; }; + A1F4C50D2F8B000000D1A111 /* ImportPasswordSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = A1F4C5082F8B000000D1A111 /* ImportPasswordSource.swift */; }; + A1F4C5112F8B000000D1A111 /* ImportSourceDetailView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A1F4C50C2F8B000000D1A111 /* ImportSourceDetailView.swift */; }; + A1F4C5122F8B000000D1A111 /* ImportSourceDetailViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A1F4C50D2F8B100000D1A111 /* ImportSourceDetailViewController.swift */; }; + A1F4C5232F8D000000D1A111 /* DataImportFileUploadCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = A1F4C5212F8D000000D1A111 /* DataImportFileUploadCoordinator.swift */; }; A5B373DCAC231125EC470ADF /* RebrandedOnboardingView+AddressBarPositionContent.swift in Sources */ = {isa = PBXBuildFile; fileRef = 81E935251F047CE4825824A5 /* RebrandedOnboardingView+AddressBarPositionContent.swift */; }; AA2000010000000000000001 /* InfoPanelView.swift in Sources */ = {isa = PBXBuildFile; fileRef = AA1000010000000000000001 /* InfoPanelView.swift */; }; AA2000010000000000000002 /* TabSwitcherTrackerInfoHeaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = AA1000010000000000000002 /* TabSwitcherTrackerInfoHeaderView.swift */; }; @@ -1737,6 +1745,7 @@ BDFF031D2BA3D2BD00F324C9 /* DefaultNetworkProtectionVisibility.swift in Sources */ = {isa = PBXBuildFile; fileRef = BDFF031C2BA3D2BD00F324C9 /* DefaultNetworkProtectionVisibility.swift */; }; BDFF03222BA3D8E200F324C9 /* NetworkProtectionFeatureVisibility.swift in Sources */ = {isa = PBXBuildFile; fileRef = BDFF03192BA39C5A00F324C9 /* NetworkProtectionFeatureVisibility.swift */; }; BDFF03232BA3D8E300F324C9 /* NetworkProtectionFeatureVisibility.swift in Sources */ = {isa = PBXBuildFile; fileRef = BDFF03192BA39C5A00F324C9 /* NetworkProtectionFeatureVisibility.swift */; }; + C10454E22F8D0F2C002BB02C /* CredentialExchangeImportHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = C10454E12F8D0F2C002BB02C /* CredentialExchangeImportHandler.swift */; }; C1056A562E253D98003220BA /* AutofillCredentialsImportPresentationManagerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = C1056A552E253D98003220BA /* AutofillCredentialsImportPresentationManagerTests.swift */; }; C106BAC32E4627E000DDF54A /* DaxEasterEggFullScreenViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C106BAC22E4627E000DDF54A /* DaxEasterEggFullScreenViewController.swift */; }; C106BAC52E4628DD00DDF54A /* DaxEasterEggZoomTransitionAnimator.swift in Sources */ = {isa = PBXBuildFile; fileRef = C106BAC42E4628DD00DDF54A /* DaxEasterEggZoomTransitionAnimator.swift */; }; @@ -1790,6 +1799,8 @@ C14414792EB11A100057F921 /* AIChatFullModeFeatureTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = C14414782EB11A100057F921 /* AIChatFullModeFeatureTests.swift */; }; C14414812EB10DC30057F921 /* AIChatIPadTabFeature.swift in Sources */ = {isa = PBXBuildFile; fileRef = C14414802EB10DC30057F921 /* AIChatIPadTabFeature.swift */; }; C14414832EB11A100057F921 /* AIChatIPadTabFeatureTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = C14414822EB11A100057F921 /* AIChatIPadTabFeatureTests.swift */; }; + C145F6CB2F8D0201006CD340 /* export-passwords-dark-optimised.json in Resources */ = {isa = PBXBuildFile; fileRef = C145F6C92F8D0201006CD340 /* export-passwords-dark-optimised.json */; }; + C145F6CC2F8D0201006CD340 /* export-passwords-light-optimised.json in Resources */ = {isa = PBXBuildFile; fileRef = C145F6CA2F8D0201006CD340 /* export-passwords-light-optimised.json */; }; C14882DA27F2011C00D59F0C /* BookmarksExporter.swift in Sources */ = {isa = PBXBuildFile; fileRef = C14882D727F2011C00D59F0C /* BookmarksExporter.swift */; }; C14882DC27F2011C00D59F0C /* BookmarksImporter.swift in Sources */ = {isa = PBXBuildFile; fileRef = C14882D927F2011C00D59F0C /* BookmarksImporter.swift */; }; C14882E327F20D9A00D59F0C /* BookmarksExporterTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = C14882E127F20D9A00D59F0C /* BookmarksExporterTests.swift */; }; @@ -1817,6 +1828,8 @@ C167D9062DAD5BDA00FA1E70 /* SubscriptionFunnelOrigin.swift in Sources */ = {isa = PBXBuildFile; fileRef = C167D9052DAD5BDA00FA1E70 /* SubscriptionFunnelOrigin.swift */; }; C17023AA2E589C6E00090178 /* DaxEasterEggLogoCache.swift in Sources */ = {isa = PBXBuildFile; fileRef = C17023A92E589C6E00090178 /* DaxEasterEggLogoCache.swift */; }; C177D9F62CFDDFEB0039CBF7 /* UIAlertControllerExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = C177D9F52CFDDFEB0039CBF7 /* UIAlertControllerExtension.swift */; }; + C17813002F913C37004BFE1A /* SafariExportInterstitialView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C17812FE2F913C37004BFE1A /* SafariExportInterstitialView.swift */; }; + C17813012F913C37004BFE1A /* SafariExportInterstitialViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C17812FF2F913C37004BFE1A /* SafariExportInterstitialViewController.swift */; }; C17A8E5D2E26C7D900CAE1B9 /* ImportPasswordsPromptView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C17A8E5A2E26C7D900CAE1B9 /* ImportPasswordsPromptView.swift */; }; C17A8E5E2E26C7D900CAE1B9 /* ImportPasswordsPromptViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C17A8E5B2E26C7D900CAE1B9 /* ImportPasswordsPromptViewController.swift */; }; C17A8E5F2E26C7D900CAE1B9 /* ImportPasswordsPromptViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = C17A8E5C2E26C7D900CAE1B9 /* ImportPasswordsPromptViewModel.swift */; }; @@ -1917,13 +1930,6 @@ C1C1FF522D085AD70017ACCE /* ActionMessageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C1C1FF4C2D085AD70017ACCE /* ActionMessageView.swift */; }; C1C1FF532D085AD70017ACCE /* NibLoading.swift in Sources */ = {isa = PBXBuildFile; fileRef = C1C1FF4F2D085AD70017ACCE /* NibLoading.swift */; }; C1C23C102D490CA500B6BDF6 /* ImportArchiveReader.swift in Sources */ = {isa = PBXBuildFile; fileRef = C1C23C0F2D490CA500B6BDF6 /* ImportArchiveReader.swift */; }; - A1F4C4E22F8A1B9300D1A111 /* DataImportEntryPointHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = A1F4C4E12F8A1B9300D1A111 /* DataImportEntryPointHandler.swift */; }; - A1F4C5042F8A300000D1A111 /* DataImportHubView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A1F4C5012F8A300000D1A111 /* DataImportHubView.swift */; }; - A1F4C5052F8A300000D1A111 /* DataImportHubViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A1F4C5022F8A300000D1A111 /* DataImportHubViewController.swift */; }; - A1F4C5062F8A300000D1A111 /* DataImportHubViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = A1F4C5032F8A300000D1A111 /* DataImportHubViewModel.swift */; }; - A1F4C50D2F8B000000D1A111 /* ImportPasswordSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = A1F4C5082F8B000000D1A111 /* ImportPasswordSource.swift */; }; - A1F4C5112F8B000000D1A111 /* ImportSourceDetailView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A1F4C50C2F8B000000D1A111 /* ImportSourceDetailView.swift */; }; - A1F4C5122F8B000000D1A111 /* ImportSourceDetailViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A1F4C50D2F8B100000D1A111 /* ImportSourceDetailViewController.swift */; }; C1C23C2E2D4C0F1A00B6BDF6 /* DataImportViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C1C23C292D4C0F1A00B6BDF6 /* DataImportViewController.swift */; }; C1C23C2F2D4C0F1A00B6BDF6 /* DataImportView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C1C23C282D4C0F1A00B6BDF6 /* DataImportView.swift */; }; C1C23C302D4C0F1A00B6BDF6 /* ZipContentSelectionViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = C1C23C2D2D4C0F1A00B6BDF6 /* ZipContentSelectionViewModel.swift */; }; @@ -1936,6 +1942,11 @@ C1C23C3A2D4C349D00B6BDF6 /* DataImportManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = C1C23C372D4C349D00B6BDF6 /* DataImportManager.swift */; }; C1C725B82D63810D00361B81 /* ImportArchiveReaderTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = C1C725B62D63810D00361B81 /* ImportArchiveReaderTests.swift */; }; C1C725BA2D63810D00361B81 /* DataImportManagerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = C1C725B42D63810D00361B81 /* DataImportManagerTests.swift */; }; + D1A0B0112F92000100A1B001 /* DataImportEntryPointHandlerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1A0B0012F92000100A1B001 /* DataImportEntryPointHandlerTests.swift */; }; + D1A0B0122F92000100A1B001 /* DataImportUserActivityHandlerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1A0B0022F92000100A1B001 /* DataImportUserActivityHandlerTests.swift */; }; + D1A0B0132F92000100A1B001 /* ImportPasswordSourceTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1A0B0032F92000100A1B001 /* ImportPasswordSourceTests.swift */; }; + D1A0B0142F92000100A1B001 /* CredentialExchangeImportHandlerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1A0B0042F92000100A1B001 /* CredentialExchangeImportHandlerTests.swift */; }; + D1A0B0152F92000100A1B001 /* DataImportMocks.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1A0B0052F92000100A1B001 /* DataImportMocks.swift */; }; C1C90FFD2F102E3F006EBA73 /* PageContextUserScript.swift in Sources */ = {isa = PBXBuildFile; fileRef = C1C90FFC2F102E3F006EBA73 /* PageContextUserScript.swift */; }; C1CAAA6A2CF8BABF00C37EE6 /* CredentialProviderActivatedView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C1CAAA692CF8BABF00C37EE6 /* CredentialProviderActivatedView.swift */; }; C1CAAA712CF8BC0B00C37EE6 /* UIViewControllerExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = C1CAAA702CF8BC0B00C37EE6 /* UIViewControllerExtension.swift */; }; @@ -4166,6 +4177,14 @@ A1B2C3D4E5F60001AABB0002 /* NTPAfterIdleInstrumentationTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NTPAfterIdleInstrumentationTests.swift; sourceTree = ""; }; A1B2C3D62F7F111100ABCDEF /* SyncSettingsViewModelTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SyncSettingsViewModelTests.swift; sourceTree = ""; }; A1D1C0E62F8CB3A400B1D001 /* DataImportUserActivityHandler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DataImportUserActivityHandler.swift; sourceTree = ""; }; + A1F4C4E12F8A1B9300D1A111 /* DataImportEntryPointHandler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DataImportEntryPointHandler.swift; sourceTree = ""; }; + A1F4C5012F8A300000D1A111 /* DataImportHubView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DataImportHubView.swift; sourceTree = ""; }; + A1F4C5022F8A300000D1A111 /* DataImportHubViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DataImportHubViewController.swift; sourceTree = ""; }; + A1F4C5032F8A300000D1A111 /* DataImportHubViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DataImportHubViewModel.swift; sourceTree = ""; }; + A1F4C5082F8B000000D1A111 /* ImportPasswordSource.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ImportPasswordSource.swift; sourceTree = ""; }; + A1F4C50C2F8B000000D1A111 /* ImportSourceDetailView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ImportSourceDetailView.swift; sourceTree = ""; }; + A1F4C50D2F8B100000D1A111 /* ImportSourceDetailViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ImportSourceDetailViewController.swift; sourceTree = ""; }; + A1F4C5212F8D000000D1A111 /* DataImportFileUploadCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DataImportFileUploadCoordinator.swift; sourceTree = ""; }; A6C36CDBF1DD7FBC036F9067 /* DarkReaderFeatureSettingsTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = DarkReaderFeatureSettingsTests.swift; sourceTree = ""; }; AA1000010000000000000001 /* InfoPanelView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Components/InfoPanel/InfoPanelView.swift; sourceTree = ""; }; AA1000010000000000000002 /* TabSwitcherTrackerInfoHeaderView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TabSwitcherTrackerInfoHeaderView.swift; sourceTree = ""; }; @@ -4249,6 +4268,7 @@ BDFF03192BA39C5A00F324C9 /* NetworkProtectionFeatureVisibility.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NetworkProtectionFeatureVisibility.swift; sourceTree = ""; }; BDFF031C2BA3D2BD00F324C9 /* DefaultNetworkProtectionVisibility.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DefaultNetworkProtectionVisibility.swift; sourceTree = ""; }; BEA13CC2BC37C33434640638 /* WebViewInputAccessoryTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WebViewInputAccessoryTests.swift; sourceTree = ""; }; + C10454E12F8D0F2C002BB02C /* CredentialExchangeImportHandler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CredentialExchangeImportHandler.swift; sourceTree = ""; }; C1056A552E253D98003220BA /* AutofillCredentialsImportPresentationManagerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AutofillCredentialsImportPresentationManagerTests.swift; sourceTree = ""; }; C106BAC22E4627E000DDF54A /* DaxEasterEggFullScreenViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DaxEasterEggFullScreenViewController.swift; sourceTree = ""; }; C106BAC42E4628DD00DDF54A /* DaxEasterEggZoomTransitionAnimator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DaxEasterEggZoomTransitionAnimator.swift; sourceTree = ""; }; @@ -4314,6 +4334,8 @@ C14414822EB11A100057F921 /* AIChatIPadTabFeatureTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AIChatIPadTabFeatureTests.swift; sourceTree = ""; }; C1453E322D0863C80024449B /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/InfoPlist.strings; sourceTree = ""; }; C1453E332D0863C80024449B /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/Localizable.strings; sourceTree = ""; }; + C145F6C92F8D0201006CD340 /* export-passwords-dark-optimised.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = "export-passwords-dark-optimised.json"; sourceTree = ""; }; + C145F6CA2F8D0201006CD340 /* export-passwords-light-optimised.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = "export-passwords-light-optimised.json"; sourceTree = ""; }; C14882D727F2011C00D59F0C /* BookmarksExporter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BookmarksExporter.swift; sourceTree = ""; }; C14882D927F2011C00D59F0C /* BookmarksImporter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BookmarksImporter.swift; sourceTree = ""; }; C14882E127F20D9A00D59F0C /* BookmarksExporterTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BookmarksExporterTests.swift; sourceTree = ""; }; @@ -4350,6 +4372,8 @@ C174E08E2D08625300ACE1AF /* el */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = el; path = el.lproj/InfoPlist.strings; sourceTree = ""; }; C174E08F2D08625300ACE1AF /* el */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = el; path = el.lproj/Localizable.strings; sourceTree = ""; }; C177D9F52CFDDFEB0039CBF7 /* UIAlertControllerExtension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UIAlertControllerExtension.swift; sourceTree = ""; }; + C17812FE2F913C37004BFE1A /* SafariExportInterstitialView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SafariExportInterstitialView.swift; sourceTree = ""; }; + C17812FF2F913C37004BFE1A /* SafariExportInterstitialViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SafariExportInterstitialViewController.swift; sourceTree = ""; }; C17A8E5A2E26C7D900CAE1B9 /* ImportPasswordsPromptView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ImportPasswordsPromptView.swift; sourceTree = ""; }; C17A8E5B2E26C7D900CAE1B9 /* ImportPasswordsPromptViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ImportPasswordsPromptViewController.swift; sourceTree = ""; }; C17A8E5C2E26C7D900CAE1B9 /* ImportPasswordsPromptViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ImportPasswordsPromptViewModel.swift; sourceTree = ""; }; @@ -4458,13 +4482,6 @@ C1C1FF4E2D085AD70017ACCE /* FaviconHelper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FaviconHelper.swift; sourceTree = ""; }; C1C1FF4F2D085AD70017ACCE /* NibLoading.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NibLoading.swift; sourceTree = ""; }; C1C23C0F2D490CA500B6BDF6 /* ImportArchiveReader.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ImportArchiveReader.swift; sourceTree = ""; }; - A1F4C4E12F8A1B9300D1A111 /* DataImportEntryPointHandler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DataImportEntryPointHandler.swift; sourceTree = ""; }; - A1F4C5012F8A300000D1A111 /* DataImportHubView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DataImportHubView.swift; sourceTree = ""; }; - A1F4C5022F8A300000D1A111 /* DataImportHubViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DataImportHubViewController.swift; sourceTree = ""; }; - A1F4C5032F8A300000D1A111 /* DataImportHubViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DataImportHubViewModel.swift; sourceTree = ""; }; - A1F4C5082F8B000000D1A111 /* ImportPasswordSource.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ImportPasswordSource.swift; sourceTree = ""; }; - A1F4C50C2F8B000000D1A111 /* ImportSourceDetailView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ImportSourceDetailView.swift; sourceTree = ""; }; - A1F4C50D2F8B100000D1A111 /* ImportSourceDetailViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ImportSourceDetailViewController.swift; sourceTree = ""; }; C1C23C252D4C0F1A00B6BDF6 /* DataImportSummaryView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DataImportSummaryView.swift; sourceTree = ""; }; C1C23C262D4C0F1A00B6BDF6 /* DataImportSummaryViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DataImportSummaryViewController.swift; sourceTree = ""; }; C1C23C272D4C0F1A00B6BDF6 /* DataImportSummaryViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DataImportSummaryViewModel.swift; sourceTree = ""; }; @@ -4477,6 +4494,11 @@ C1C23C372D4C349D00B6BDF6 /* DataImportManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DataImportManager.swift; sourceTree = ""; }; C1C725B42D63810D00361B81 /* DataImportManagerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DataImportManagerTests.swift; sourceTree = ""; }; C1C725B62D63810D00361B81 /* ImportArchiveReaderTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ImportArchiveReaderTests.swift; sourceTree = ""; }; + D1A0B0012F92000100A1B001 /* DataImportEntryPointHandlerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DataImportEntryPointHandlerTests.swift; sourceTree = ""; }; + D1A0B0022F92000100A1B001 /* DataImportUserActivityHandlerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DataImportUserActivityHandlerTests.swift; sourceTree = ""; }; + D1A0B0032F92000100A1B001 /* ImportPasswordSourceTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ImportPasswordSourceTests.swift; sourceTree = ""; }; + D1A0B0042F92000100A1B001 /* CredentialExchangeImportHandlerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CredentialExchangeImportHandlerTests.swift; sourceTree = ""; }; + D1A0B0052F92000100A1B001 /* DataImportMocks.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DataImportMocks.swift; sourceTree = ""; }; C1C90FFC2F102E3F006EBA73 /* PageContextUserScript.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PageContextUserScript.swift; sourceTree = ""; }; C1CAAA672CF8B74200C37EE6 /* AutofillCredentialProviderAlpha.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = AutofillCredentialProviderAlpha.entitlements; sourceTree = ""; }; C1CAAA692CF8BABF00C37EE6 /* CredentialProviderActivatedView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CredentialProviderActivatedView.swift; sourceTree = ""; }; @@ -5927,6 +5949,7 @@ 362E3EBF2E7184DE00E4C762 /* Web */, 362E3EBE2E7184D800E4C762 /* Statistics */, 362E3EBD2E7184CC00E4C762 /* Utilities */, + D1A0B0052F92000100A1B001 /* DataImportMocks.swift */, 98E564322DE8B63E00E6E75F /* HistoryMocks.swift */, ); path = Core; @@ -8600,6 +8623,21 @@ path = DefaultBrowserPromptDebugView; sourceTree = ""; }; + A1F4C5072F8A300000D1A111 /* Hub */ = { + isa = PBXGroup; + children = ( + A1F4C5012F8A300000D1A111 /* DataImportHubView.swift */, + A1F4C5022F8A300000D1A111 /* DataImportHubViewController.swift */, + A1F4C5032F8A300000D1A111 /* DataImportHubViewModel.swift */, + A1F4C5082F8B000000D1A111 /* ImportPasswordSource.swift */, + A1F4C50C2F8B000000D1A111 /* ImportSourceDetailView.swift */, + A1F4C50D2F8B100000D1A111 /* ImportSourceDetailViewController.swift */, + C17812FE2F913C37004BFE1A /* SafariExportInterstitialView.swift */, + C17812FF2F913C37004BFE1A /* SafariExportInterstitialViewController.swift */, + ); + path = Hub; + sourceTree = ""; + }; AA2F4066CC87E0BEB71CB7BC /* DarkReader */ = { isa = PBXGroup; children = ( @@ -8870,6 +8908,8 @@ C15516042D47D2D9001B94E9 /* Resources */ = { isa = PBXGroup; children = ( + C145F6C92F8D0201006CD340 /* export-passwords-dark-optimised.json */, + C145F6CA2F8D0201006CD340 /* export-passwords-light-optimised.json */, C18578932EB7C0340049D2CE /* autofill-extension-dark.json */, C185789F2EB7D0020049D2CE /* autofill-extension-light.json */, C15516052D47D2EF001B94E9 /* burst-blob-passwords.json */, @@ -9205,34 +9245,23 @@ name = DataImport; sourceTree = ""; }; - A1F4C5072F8A300000D1A111 /* Hub */ = { - isa = PBXGroup; - children = ( - A1F4C5012F8A300000D1A111 /* DataImportHubView.swift */, - A1F4C5022F8A300000D1A111 /* DataImportHubViewController.swift */, - A1F4C5032F8A300000D1A111 /* DataImportHubViewModel.swift */, - A1F4C5082F8B000000D1A111 /* ImportPasswordSource.swift */, - A1F4C50C2F8B000000D1A111 /* ImportSourceDetailView.swift */, - A1F4C50D2F8B100000D1A111 /* ImportSourceDetailViewController.swift */, - ); - path = Hub; - sourceTree = ""; - }; C1C23C242D4C0C4F00B6BDF6 /* DataImport */ = { isa = PBXGroup; children = ( + C10454E12F8D0F2C002BB02C /* CredentialExchangeImportHandler.swift */, A1F4C4E12F8A1B9300D1A111 /* DataImportEntryPointHandler.swift */, - A1F4C5072F8A300000D1A111 /* Hub */, - C1C23C282D4C0F1A00B6BDF6 /* DataImportView.swift */, - C1C23C292D4C0F1A00B6BDF6 /* DataImportViewController.swift */, - C1C23C2A2D4C0F1A00B6BDF6 /* DataImportViewModel.swift */, - A1D1C0E62F8CB3A400B1D001 /* DataImportUserActivityHandler.swift */, + A1F4C5212F8D000000D1A111 /* DataImportFileUploadCoordinator.swift */, C1C23C252D4C0F1A00B6BDF6 /* DataImportSummaryView.swift */, C1C23C262D4C0F1A00B6BDF6 /* DataImportSummaryViewController.swift */, C1C23C272D4C0F1A00B6BDF6 /* DataImportSummaryViewModel.swift */, + A1D1C0E62F8CB3A400B1D001 /* DataImportUserActivityHandler.swift */, + C1C23C282D4C0F1A00B6BDF6 /* DataImportView.swift */, + C1C23C292D4C0F1A00B6BDF6 /* DataImportViewController.swift */, + C1C23C2A2D4C0F1A00B6BDF6 /* DataImportViewModel.swift */, C1C23C2B2D4C0F1A00B6BDF6 /* ZipContentSelectionView.swift */, C1C23C2C2D4C0F1A00B6BDF6 /* ZipContentSelectionViewController.swift */, C1C23C2D2D4C0F1A00B6BDF6 /* ZipContentSelectionViewModel.swift */, + A1F4C5072F8A300000D1A111 /* Hub */, ); path = DataImport; sourceTree = ""; @@ -9242,6 +9271,10 @@ children = ( C1C725B42D63810D00361B81 /* DataImportManagerTests.swift */, C1C725B62D63810D00361B81 /* ImportArchiveReaderTests.swift */, + D1A0B0012F92000100A1B001 /* DataImportEntryPointHandlerTests.swift */, + D1A0B0022F92000100A1B001 /* DataImportUserActivityHandlerTests.swift */, + D1A0B0032F92000100A1B001 /* ImportPasswordSourceTests.swift */, + D1A0B0042F92000100A1B001 /* CredentialExchangeImportHandlerTests.swift */, ); path = DataImport; sourceTree = ""; @@ -11586,6 +11619,8 @@ 9FADFCB92F68D54600CA16F7 /* Rebranded-AddToDock-tutorial.mp4 in Resources */, 7B4F87EC2D07396A0010B18F /* SiriEducation.xcassets in Resources */, 85C2970A247EB7AA0063A335 /* Text.xcassets in Resources */, + C145F6CB2F8D0201006CD340 /* export-passwords-dark-optimised.json in Resources */, + C145F6CC2F8D0201006CD340 /* export-passwords-light-optimised.json in Resources */, 98788E9A2521DA1E00D55218 /* Localizable.stringsdict in Resources */, CB9B873E278C93C2001F4906 /* HomeMessage.xcassets in Resources */, ); @@ -11991,6 +12026,7 @@ 9FAD6C032E41D9A600C19EEA /* DefaultBrowserPromptUIProvider.swift in Sources */, 31DE43C42C2C60E800F8C51F /* DuckPlayerModalPresenter.swift in Sources */, C1C18BF82D95925C00FFBA2E /* AutofillDeleteButtonCell.swift in Sources */, + C10454E22F8D0F2C002BB02C /* CredentialExchangeImportHandler.swift in Sources */, 37FCAAC029930E26000E420A /* FailedAssertionView.swift in Sources */, 4BBBBA922B03291700D965DA /* VPNWaitlistUserText.swift in Sources */, 6F0FEF6D2C52639E0090CDE4 /* ReorderableForEach.swift in Sources */, @@ -12426,6 +12462,7 @@ 806DF4092F3B89BD00FBCA3F /* DataClearingCapability.swift in Sources */, F1617C151E57336D00DEDCAF /* TabManager.swift in Sources */, A1F4C4E22F8A1B9300D1A111 /* DataImportEntryPointHandler.swift in Sources */, + A1F4C5232F8D000000D1A111 /* DataImportFileUploadCoordinator.swift in Sources */, A1F4C5042F8A300000D1A111 /* DataImportHubView.swift in Sources */, A1F4C5052F8A300000D1A111 /* DataImportHubViewController.swift in Sources */, A1F4C5062F8A300000D1A111 /* DataImportHubViewModel.swift in Sources */, @@ -12558,6 +12595,8 @@ AABB00010001000100010005 /* UTIViewConfig.swift in Sources */, 4BD0FCDE87FAA76BA499C80D /* UnifiedToggleInputModelMenu.swift in Sources */, 4B104AE62F6F64F600843054 /* SyncErrorHandling.swift in Sources */, + C17813002F913C37004BFE1A /* SafariExportInterstitialView.swift in Sources */, + C17813012F913C37004BFE1A /* SafariExportInterstitialViewController.swift in Sources */, 71DFABCA706A402AB4B27F50 /* UnifiedToggleInputFloatingSubmitViewController.swift in Sources */, C18390D12F50A001001939B9 /* UnifiedToggleInputImageEncoder.swift in Sources */, C18390D32F50A002001939B9 /* UnifiedToggleInputAttachmentThumbnailView.swift in Sources */, @@ -13158,6 +13197,11 @@ BBF1BDF32EA6333000358243 /* MockWinBackOfferService.swift in Sources */, C1C725B82D63810D00361B81 /* ImportArchiveReaderTests.swift in Sources */, C1C725BA2D63810D00361B81 /* DataImportManagerTests.swift in Sources */, + D1A0B0152F92000100A1B001 /* DataImportMocks.swift in Sources */, + D1A0B0112F92000100A1B001 /* DataImportEntryPointHandlerTests.swift in Sources */, + D1A0B0122F92000100A1B001 /* DataImportUserActivityHandlerTests.swift in Sources */, + D1A0B0132F92000100A1B001 /* ImportPasswordSourceTests.swift in Sources */, + D1A0B0142F92000100A1B001 /* CredentialExchangeImportHandlerTests.swift in Sources */, C13EEA1E2D64CFCA001D5DC3 /* DataImportViewModelTests.swift in Sources */, 9F7634BE2EA8633300804550 /* PromptCooldownIntervalProviderTests.swift in Sources */, 9FAB4B762E98C70B00D8298A /* HomeMessageViewModelTests.swift in Sources */, diff --git a/iOS/DuckDuckGo/AutofillLoginListViewController.swift b/iOS/DuckDuckGo/AutofillLoginListViewController.swift index dbf0c11a3c3..da5c3c4d51a 100644 --- a/iOS/DuckDuckGo/AutofillLoginListViewController.swift +++ b/iOS/DuckDuckGo/AutofillLoginListViewController.swift @@ -448,7 +448,13 @@ final class AutofillLoginListViewController: UIViewController { case .legacy(let importScreen): destinationViewController = makeDataImportViewController(importScreen: importScreen) case .hub: - destinationViewController = DataImportHubViewController(syncService: syncService) + destinationViewController = DataImportHubViewController(syncService: syncService, + keyValueStore: keyValueStore, + bookmarksDatabase: bookmarksDatabase, + favoritesDisplayMode: favoritesDisplayMode, + onFinished: { [weak self] in + self?.handleDataImportCompletion() + }) } navigationController?.pushViewController(destinationViewController, animated: true) } @@ -474,6 +480,12 @@ final class AutofillLoginListViewController: UIViewController { } } + private func handleDataImportCompletion() { + clearTableHeaderView() + importPromoPresented = false + viewModel.updateData() + } + private func segueToExtensionManagement() { if #available(iOS 18, *) { let autofillExtensionSettingsViewController = AutofillExtensionSettingsViewController(source: .passwordsPromotion) @@ -1225,9 +1237,7 @@ extension AutofillLoginListViewController: AutofillExtensionSettingsViewControll extension AutofillLoginListViewController: DataImportViewControllerDelegate { func dataImportViewControllerDidFinish(_ viewController: DataImportViewController) { - clearTableHeaderView() - importPromoPresented = false - viewModel.updateData() + handleDataImportCompletion() } } diff --git a/iOS/DuckDuckGo/AutofillSettingsViewController.swift b/iOS/DuckDuckGo/AutofillSettingsViewController.swift index cea3fcfad2f..16d157ab6bc 100644 --- a/iOS/DuckDuckGo/AutofillSettingsViewController.swift +++ b/iOS/DuckDuckGo/AutofillSettingsViewController.swift @@ -186,7 +186,13 @@ final class AutofillSettingsViewController: UIViewController { case .legacy(let importScreen): destinationViewController = makeDataImportViewController(importScreen: importScreen) case .hub: - destinationViewController = DataImportHubViewController(syncService: syncService) + destinationViewController = DataImportHubViewController(syncService: syncService, + keyValueStore: keyValueStore, + bookmarksDatabase: bookmarksDatabase, + favoritesDisplayMode: favoritesDisplayMode, + onFinished: { [weak self] in + self?.handleDataImportCompletion() + }) } navigationController?.pushViewController(destinationViewController, animated: true) Pixel.fire(pixel: .autofillImportPasswordsImportButtonTapped, withAdditionalParameters: [PixelParameters.source: "settings"]) @@ -214,6 +220,11 @@ final class AutofillSettingsViewController: UIViewController { } } + private func handleDataImportCompletion() { + AppDependencyProvider.shared.autofillLoginSession.startSession() + segueToPasswords() + } + private func segueToExtensionManagement() { if #available(iOS 18, *) { let extensionSource: AutofillExtensionSettingsViewController.Source = source == .extensionEnablePrompt ? .inlinePromotion : .autofillSettings @@ -254,8 +265,7 @@ extension AutofillSettingsViewController: AutofillSettingsViewModelDelegate { extension AutofillSettingsViewController: DataImportViewControllerDelegate { func dataImportViewControllerDidFinish(_ controller: DataImportViewController) { - AppDependencyProvider.shared.autofillLoginSession.startSession() - segueToPasswords() + handleDataImportCompletion() } } diff --git a/iOS/DuckDuckGo/BookmarksViewController.swift b/iOS/DuckDuckGo/BookmarksViewController.swift index c1149491042..0f84f105f78 100644 --- a/iOS/DuckDuckGo/BookmarksViewController.swift +++ b/iOS/DuckDuckGo/BookmarksViewController.swift @@ -688,7 +688,10 @@ class BookmarksViewController: UIViewController, UITableViewDelegate { case .legacy(let importScreen): destinationViewController = makeDataImportViewController(importScreen: importScreen) case .hub: - destinationViewController = DataImportHubViewController(syncService: syncService) + destinationViewController = DataImportHubViewController(syncService: syncService, + keyValueStore: keyValueStore, + bookmarksDatabase: bookmarksDatabase, + favoritesDisplayMode: appSettings.favoritesDisplayMode) } navigationController?.setToolbarHidden(true, animated: true) navigationController?.pushViewController(destinationViewController, animated: true) diff --git a/iOS/DuckDuckGo/DataImport/CredentialExchangeImportHandler.swift b/iOS/DuckDuckGo/DataImport/CredentialExchangeImportHandler.swift new file mode 100644 index 00000000000..9ee6fe5afd4 --- /dev/null +++ b/iOS/DuckDuckGo/DataImport/CredentialExchangeImportHandler.swift @@ -0,0 +1,257 @@ +// +// CredentialExchangeImportHandler.swift +// DuckDuckGo +// +// Copyright © 2026 DuckDuckGo. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +import Foundation +import AuthenticationServices +import BrowserServicesKit +import Common +import SecureStorage + +/// Handles ASCredential exchange import activities by receiving credentials via ASCredentialImportManager +/// and importing passwords into the secure vault. Passwords only in this phase. +final class CredentialExchangeImportHandler { + + private let loginImporter: LoginImporter + private let reporter: SecureVaultReporting + private let tld: TLD + + init(loginImporter: LoginImporter = SecureVaultLoginImporter(), + reporter: SecureVaultReporting = SecureVaultReporter(), + tld: TLD = AppDependencyProvider.shared.storageCache.tld) { + self.loginImporter = loginImporter + self.reporter = reporter + self.tld = tld + } + + func handleImport(token: UUID) async -> DataImportSummary? { + if #available(iOS 26, *) { + return await performImport(token: token) + } + Logger.autofill.error("ASCredential exchange not available on this OS version") + return nil + } + + @available(iOS 26, *) + private func performImport(token: UUID) async -> DataImportSummary? { + do { + let importManager = ASCredentialImportManager() + let credentialData = try await importManager.importCredentials(token: token) + let importedLogins = importedLoginCredentials(from: credentialData) + + let summary = try loginImporter.importLogins(importedLogins, reporter: reporter) { _ in } + Logger.autofill.debug( + "Credential exchange: imported \(summary.successful) passwords, \(summary.duplicate) duplicates, \(summary.failed) failed" + ) + return [.passwords: .success(summary)] + } catch { + Logger.autofill.error("Credential exchange import failed: \(error)") + return nil + } + } + + @available(iOS 26, *) + func importedLoginCredentials(from credentialData: ASExportedCredentialData) -> [ImportedLoginCredential] { + var importedLogins: [ImportedLoginCredential] = [] + + for account in credentialData.accounts { + for item in account.items { + for credential in item.credentials { + guard case .basicAuthentication(let basicAuth) = credential, + let passwordField = basicAuth.password else { continue } + + let password = passwordField.value + let username = nonEmptyString(basicAuth.userName?.value) + ?? nonEmptyString(account.userName) + ?? nonEmptyString(account.email) + ?? "" + let domain = preferredDomain(for: item) + let title = preferredTitle(for: item, domain: domain) + + importedLogins.append( + ImportedLoginCredential( + title: title, + url: domain, + username: username, + password: password + ) + ) + } + } + } + + return importedLogins + } + + @available(iOS 26, *) + private func preferredDomain(for item: ASImportableItem) -> String { + let scopedDomains = item.scope?.urls.compactMap { scopeURL in + nonEmptyString(scopeURL.host) ?? nonEmptyString(scopeURL.absoluteString) + } ?? [] + if let preferredScopedDomain = selectPreferredDomain(from: scopedDomains) { + return preferredScopedDomain + } + + if let subtitle = nonEmptyString(item.subtitle) { + return subtitle + } + + guard let title = nonEmptyString(item.title) else { + return "" + } + + // Apple sometimes sends host:port only in title with empty scope URLs. + if scopedDomains.isEmpty, containsHostAndPort(title) { + return title + } + + guard title.contains(".") || title.contains("://") else { + return "" + } + + return title + } + + @available(iOS 26, *) + private func preferredTitle(for item: ASImportableItem, domain: String) -> String? { + guard let title = nonEmptyString(item.title) else { + return nil + } + + let sharedNormalizedTitle = SecureVaultModels.WebsiteAccount( + title: title, + username: nil, + domain: domain + ).patternMatchedTitle() + guard !sharedNormalizedTitle.isEmpty else { + return nil + } + + let scopeDomains = item.scope?.urls.compactMap { scopeURL in + nonEmptyString(scopeURL.host) ?? nonEmptyString(scopeURL.absoluteString) + } ?? [] + if scopeDomains.contains(where: { shouldDropTitle(sharedNormalizedTitle, forDomain: $0) }) { + return nil + } + + if shouldDropTitle(sharedNormalizedTitle, forDomain: domain) { + return nil + } + + return title + } + + private func shouldDropTitle(_ normalizedTitle: String, forDomain domain: String) -> Bool { + let normalizedTitleHost = normalizedHost(from: normalizedTitle) + let normalizedDomainHost = normalizedHost(from: domain) + + if let titleETldPlusOne = tld.eTLDplus1(normalizedTitleHost), + let domainETldPlusOne = tld.eTLDplus1(normalizedDomainHost), + titleETldPlusOne == domainETldPlusOne { + return true + } + + if normalizedTitleHost == normalizedDomainHost { + return true + } + + if normalizedDomainHost.hasSuffix(".\(normalizedTitleHost)") { + return true + } + + return false + } + + private func normalizedHost(from value: String) -> String { + let lowercasedValue = value.lowercased() + return URL(string: lowercasedValue)?.host + ?? URL(string: "https://\(lowercasedValue)")?.host + ?? lowercasedValue + } + + private func selectPreferredDomain(from domains: [String]) -> String? { + guard !domains.isEmpty else { return nil } + + if domains.count == 1 { + return domains[0] + } + + if let baseDomain = domains.first(where: isBaseDomain) { + return baseDomain + } + + if let wwwDomain = domains.first(where: isWWWDomain) { + return wwwDomain + } + + return domains.min { lhs, rhs in + let lhsHost = normalizedHost(from: lhs) + let rhsHost = normalizedHost(from: rhs) + let lhsSegments = lhsHost.split(separator: ".").count + let rhsSegments = rhsHost.split(separator: ".").count + + if lhsSegments != rhsSegments { + return lhsSegments < rhsSegments + } + return lhsHost < rhsHost + } + } + + private func isBaseDomain(_ domain: String) -> Bool { + let host = normalizedHost(from: domain) + return host == eTldPlusOne(for: host) + } + + private func isWWWDomain(_ domain: String) -> Bool { + let host = normalizedHost(from: domain) + let components = host.split(separator: ".") + guard components.first == "www" else { + return false + } + return components.dropFirst().joined(separator: ".") == eTldPlusOne(for: host) + } + + private func eTldPlusOne(for host: String) -> String { + tld.eTLDplus1(host) ?? host + } + + private func containsHostAndPort(_ value: String) -> Bool { + if let components = URLComponents(string: value), + components.host != nil, + components.port != nil { + return true + } + + if let components = URLComponents(string: "https://\(value)"), + components.host != nil, + components.port != nil { + return true + } + + return false + } + + private func nonEmptyString(_ value: String?) -> String? { + guard let trimmedValue = value?.trimmingCharacters(in: .whitespacesAndNewlines), + !trimmedValue.isEmpty else { + return nil + } + + return trimmedValue + } +} diff --git a/iOS/DuckDuckGo/DataImport/DataImportFileUploadCoordinator.swift b/iOS/DuckDuckGo/DataImport/DataImportFileUploadCoordinator.swift new file mode 100644 index 00000000000..a345054a59e --- /dev/null +++ b/iOS/DuckDuckGo/DataImport/DataImportFileUploadCoordinator.swift @@ -0,0 +1,279 @@ +// +// DataImportFileUploadCoordinator.swift +// DuckDuckGo +// +// Copyright © 2026 DuckDuckGo. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +import UIKit +import Bookmarks +import BrowserServicesKit +import Common +import Core +import UniformTypeIdentifiers +import DDGSync +import Persistence +import PrivacyConfig +import os.log + +protocol DataImportFileUploadFlowOwner: AnyObject { + func dataImportUploadDidCompleteSummary() + func dataImportUploadDidRequestSync(source: String?) + func dataImportUploadDidCancel() +} + +protocol DataImportFileUploadCoordinating: AnyObject { + func startUploadFlow(from owner: UIViewController & DataImportFileUploadFlowOwner) +} + +final class DataImportFileUploadCoordinator: NSObject { + + private weak var presentingViewController: UIViewController? + private weak var flowOwner: DataImportFileUploadFlowOwner? + private let viewModel: DataImportViewModel + private let importScreen: DataImportViewModel.ImportScreen + private let syncService: DDGSyncing + private let keyValueStore: ThrowingKeyValueStoring + private let featureFlagger: FeatureFlagger + + init(viewModel: DataImportViewModel, + importScreen: DataImportViewModel.ImportScreen, + syncService: DDGSyncing, + keyValueStore: ThrowingKeyValueStoring, + featureFlagger: FeatureFlagger = AppDependencyProvider.shared.featureFlagger) { + self.viewModel = viewModel + self.importScreen = importScreen + self.syncService = syncService + self.keyValueStore = keyValueStore + self.featureFlagger = featureFlagger + super.init() + self.viewModel.delegate = self + } + + convenience init(bookmarksDatabase: CoreDataDatabase, + favoritesDisplayMode: FavoritesDisplayMode, + syncService: DDGSyncing, + keyValueStore: ThrowingKeyValueStoring, + tld: TLD = AppDependencyProvider.shared.storageCache.tld, + importScreen: DataImportViewModel.ImportScreen = .passwords, + featureFlagger: FeatureFlagger = AppDependencyProvider.shared.featureFlagger) { + let importManager = DataImportManager( + reporter: SecureVaultReporter(), + bookmarksDatabase: bookmarksDatabase, + favoritesDisplayMode: favoritesDisplayMode, + tld: tld) + let viewModel = DataImportViewModel(importScreen: importScreen, importManager: importManager) + self.init( + viewModel: viewModel, + importScreen: importScreen, + syncService: syncService, + keyValueStore: keyValueStore, + featureFlagger: featureFlagger + ) + } +} + +// MARK: - DataImportFileUploadCoordinating + +extension DataImportFileUploadCoordinator: DataImportFileUploadCoordinating { + + func startUploadFlow(from owner: UIViewController & DataImportFileUploadFlowOwner) { + presentingViewController = owner + flowOwner = owner + viewModel.selectFile() + } +} + +// MARK: - DataImportViewModelDelegate + +extension DataImportFileUploadCoordinator: DataImportViewModelDelegate { + + func dataImportViewModelDidRequestImportFile(_ viewModel: DataImportViewModel) { + viewModel.isLoading = true + presentDocumentPicker(for: viewModel) + } + + func dataImportViewModelDidRequestPresentDataPicker(_ viewModel: DataImportViewModel, contents: ImportArchiveContents) { + presentDataTypePicker(for: viewModel, contents: contents) + } + + func dataImportViewModelDidRequestPresentSummary(_ viewModel: DataImportViewModel, summary: DataImportSummary) { + DispatchQueue.main.async { [weak self] in + guard let self else { return } + viewModel.isLoading = false + self.presentSummary(for: summary) + } + } +} + +// MARK: - UIDocumentPickerDelegate + +extension DataImportFileUploadCoordinator: UIDocumentPickerDelegate { + + func documentPicker(_ controller: UIDocumentPickerViewController, didPickDocumentsAt urls: [URL]) { + var validDocumentSelected = false + + defer { + if !validDocumentSelected { + viewModel.isLoading = false + } + } + + guard let selectedFileURL = urls.first else { + return + } + + do { + let resourceValues = try selectedFileURL.resourceValues(forKeys: [.typeIdentifierKey]) + + guard let typeIdentifier = resourceValues.typeIdentifier, + let fileType = DataImportFileType(typeIdentifier: typeIdentifier) else { + ActionMessageView.present(message: UserText.dataImportFailedUnsupportedFileErrorMessage) + return + } + + validDocumentSelected = true + viewModel.handleFileSelection(selectedFileURL, type: fileType) + fireFileSelectedPixel(for: fileType, importScreen: viewModel.state.importScreen) + } catch { + Logger.autofill.debug("Failed to determine the file type: \(error)") + ActionMessageView.present(message: UserText.dataImportFailedUnsupportedFileErrorMessage) + } + } + + func documentPickerWasCancelled(_ controller: UIDocumentPickerViewController) { + viewModel.isLoading = false + viewModel.documentPickerCancelled() + flowOwner?.dataImportUploadDidCancel() + } +} + +// MARK: - Presentation + +private extension DataImportFileUploadCoordinator { + + func presentDocumentPicker(for viewModel: DataImportViewModel) { + DispatchQueue.main.async { [weak self] in + guard let self, + let presentingViewController else { return } + + let documentPicker = UIDocumentPickerViewController(forOpeningContentTypes: viewModel.state.importScreen.documentTypes, asCopy: true) + documentPicker.delegate = self + documentPicker.allowsMultipleSelection = false + presentingViewController.present(documentPicker, animated: true) + } + + Pixel.fire( + pixel: .importInstructionsFileButtonTapped, + withAdditionalParameters: [PixelParameters.source: viewModel.state.importScreen.rawValue] + ) + } + + func presentDataTypePicker(for viewModel: DataImportViewModel, contents: ImportArchiveContents) { + let dataTypes = viewModel.importDataTypes(for: contents) + + guard !dataTypes.isEmpty else { + DispatchQueue.main.async { + ActionMessageView.present(message: String(format: UserText.dataImportFailedReadErrorMessage, UserText.dataImportFileTypeZip)) + viewModel.isLoading = false + } + return + } + + let zipContentSelectionViewController = ZipContentSelectionViewController( + dataTypes, + importScreen: viewModel.state.importScreen + ) { selectedDataTypes in + viewModel.importZipArchive(from: contents, for: selectedDataTypes) + } + + if let presentationController = zipContentSelectionViewController.presentationController as? UISheetPresentationController { + if #available(iOS 16.0, *) { + presentationController.detents = [.custom(resolver: { _ in + 360.0 + })] + } else { + presentationController.detents = [.medium()] + } + } + + DispatchQueue.main.async { [weak self] in + guard let self, + let presentingViewController else { return } + viewModel.isLoading = false + presentingViewController.present(zipContentSelectionViewController, animated: true) + } + } + + func presentSummary(for summary: DataImportSummary) { + guard let presentingViewController else { + return + } + + AutofillLoginImportState(keyValueStore: keyValueStore).hasImportedLogins = true + AutofillOnboardingExperimentPixelReporter().fireImportCompleted() + + let summaryViewController = DataImportSummaryViewController( + summary: summary, + importScreen: importScreen, + syncService: syncService + ) { [weak self] source in + self?.launchSync(source: source) + } onCompletion: { [weak self] in + self?.flowOwner?.dataImportUploadDidCompleteSummary() + } + + presentingViewController.present(summaryViewController, animated: true) + + if featureFlagger.isFeatureOn(.showSettingsCompleteSetupSection) { + try? keyValueStore.set(true, forKey: SettingsViewModel.Constants.didDismissSetAsDefaultBrowserKey) + try? keyValueStore.set(true, forKey: SettingsViewModel.Constants.didDismissImportPasswordsKey) + } + } +} + +// MARK: - Helpers + +private extension DataImportFileUploadCoordinator { + + func launchSync(source: String?) { + if let flowOwner { + flowOwner.dataImportUploadDidRequestSync(source: source) + return + } + + guard let presentingViewController else { return } + + let mainViewController = presentingViewController as? MainViewController + ?? presentingViewController.presentingViewController as? MainViewController + ?? presentingViewController.navigationController?.presentingViewController as? MainViewController + + mainViewController?.dismiss(animated: true) { + mainViewController?.segueToSettingsSync(with: source) + } + } + + func fireFileSelectedPixel(for fileType: DataImportFileType, importScreen: DataImportViewModel.ImportScreen) { + let parameters = [PixelParameters.source: importScreen.rawValue] + switch fileType { + case .zip, .json: + Pixel.fire(pixel: .importInstructionsFileSelectedZip, withAdditionalParameters: parameters) + case .csv: + Pixel.fire(pixel: .importInstructionsFileSelectedCsv, withAdditionalParameters: parameters) + case .html: + Pixel.fire(pixel: .importInstructionsFileSelectedHtml, withAdditionalParameters: parameters) + } + } +} diff --git a/iOS/DuckDuckGo/DataImport/DataImportUserActivityHandler.swift b/iOS/DuckDuckGo/DataImport/DataImportUserActivityHandler.swift index fc37f237ec9..0fa4782e21c 100644 --- a/iOS/DuckDuckGo/DataImport/DataImportUserActivityHandler.swift +++ b/iOS/DuckDuckGo/DataImport/DataImportUserActivityHandler.swift @@ -18,34 +18,62 @@ // import Foundation +import AuthenticationServices import os.log import BrowserKit +import BrowserServicesKit + +typealias DataImportResultHandler = (Result) -> Void + +private enum DataImportUserActivityHandlerError: Error { + case credentialImportFailed +} protocol DataImportUserActivityHandling { @discardableResult func handle(_ userActivity: NSUserActivity) -> Bool } +protocol CredentialExchangeImportHandling { + func handleImport(token: UUID) async -> DataImportSummary? +} + final class DataImportUserActivityHandler: DataImportUserActivityHandling { static var browserKitImportActivityType: String { -#if compiler(>=6.3) if #available(iOS 26.4, *) { return BEBrowserDataImportManager.userActivityType } -#endif return "BEBrowserDataExchangeImportActivity" } + private let credentialExchangeImportHandler: CredentialExchangeImportHandling + private let onImportResult: DataImportResultHandler private var lastHandledActivityIdentifier: String? + init(credentialExchangeImportHandler: CredentialExchangeImportHandling = CredentialExchangeImportHandler(), + onImportResult: @escaping DataImportResultHandler = { _ in }) { + self.credentialExchangeImportHandler = credentialExchangeImportHandler + self.onImportResult = onImportResult + } + @discardableResult func handle(_ userActivity: NSUserActivity) -> Bool { - guard userActivity.activityType == Self.browserKitImportActivityType else { - return false + if userActivity.activityType == Self.browserKitImportActivityType { + return handleBrowserKitImport(userActivity) } - guard let importToken = Self.importToken(from: userActivity) else { + if userActivity.activityType == Self.credentialExchangeActivityType { + return handleCredentialExchange(userActivity) + } + + return false + } + + // MARK: - BrowserKit Import + + private func handleBrowserKitImport(_ userActivity: NSUserActivity) -> Bool { + guard let importToken = Self.browserKitImportToken(from: userActivity) else { Logger.general.error("Skipping BrowserKit data import activity without import token") return false } @@ -60,6 +88,33 @@ final class DataImportUserActivityHandler: DataImportUserActivityHandling { return true } + // MARK: - ASCredential Exchange + + static var credentialExchangeActivityType: String { + if #available(iOS 26.0, *) { + return ASCredentialExchangeActivity + } + return "ASCredentialExchangeActivity" + } + + private func handleCredentialExchange(_ userActivity: NSUserActivity) -> Bool { + guard let token = userActivity.userInfo?["ASCredentialImportToken"] as? UUID else { + Logger.general.error("Skipping credential exchange activity without import token") + return false + } + let activityIdentifier = token.uuidString + + guard shouldHandleActivity(withIdentifier: activityIdentifier) else { + Logger.general.debug("Skipping duplicate credential exchange activity") + return true + } + + Task { [weak self] in + await self?.importCredentials(token: token) + } + return true + } + private func shouldHandleActivity(withIdentifier identifier: String) -> Bool { guard lastHandledActivityIdentifier != identifier else { return false @@ -69,16 +124,28 @@ final class DataImportUserActivityHandler: DataImportUserActivityHandling { return true } - private static func importToken(from userActivity: NSUserActivity) -> UUID? { -#if compiler(>=6.3) + private static func browserKitImportToken(from userActivity: NSUserActivity) -> UUID? { if #available(iOS 26.4, *) { return userActivity.userInfo?[BEBrowserDataImportManager.importTokenUserInfoKey] as? UUID } -#endif return nil } + + private func importCredentials(token: UUID) async { + if let summary = await credentialExchangeImportHandler.handleImport(token: token) { + await MainActor.run { + onImportResult(.success(summary)) + } + } else { + await MainActor.run { + onImportResult(.failure(DataImportUserActivityHandlerError.credentialImportFailed)) + } + } + } } extension Notification.Name { static let didReceiveBrowserKitDataImportActivity = Notification.Name("didReceiveBrowserKitDataImportActivity") } + +extension CredentialExchangeImportHandler: CredentialExchangeImportHandling {} diff --git a/iOS/DuckDuckGo/DataImport/Hub/DataImportHubViewController.swift b/iOS/DuckDuckGo/DataImport/Hub/DataImportHubViewController.swift index ba71f760da7..2e2044b3c23 100644 --- a/iOS/DuckDuckGo/DataImport/Hub/DataImportHubViewController.swift +++ b/iOS/DuckDuckGo/DataImport/Hub/DataImportHubViewController.swift @@ -19,18 +19,36 @@ import UIKit import SwiftUI +import Core import DDGSync +import Persistence +import Bookmarks final class DataImportHubViewController: UIViewController { private let viewModel = DataImportHubViewModel() - private let syncService: DDGSyncing + private let onFinished: (() -> Void)? private let onCancelled: (() -> Void)? private var didCallOnCancelled = false + private let syncService: DDGSyncing + private let fileUploadCoordinator: DataImportFileUploadCoordinating + init(syncService: DDGSyncing, + keyValueStore: ThrowingKeyValueStoring, + bookmarksDatabase: CoreDataDatabase, + favoritesDisplayMode: FavoritesDisplayMode, + fileUploadCoordinator: DataImportFileUploadCoordinating? = nil, + onFinished: (() -> Void)? = nil, onCancelled: (() -> Void)? = nil) { self.syncService = syncService + self.fileUploadCoordinator = fileUploadCoordinator ?? DataImportFileUploadCoordinator( + bookmarksDatabase: bookmarksDatabase, + favoritesDisplayMode: favoritesDisplayMode, + syncService: syncService, + keyValueStore: keyValueStore + ) + self.onFinished = onFinished self.onCancelled = onCancelled super.init(nibName: nil, bundle: nil) } @@ -64,7 +82,13 @@ final class DataImportHubViewController: UIViewController { private func navigateToSource(_ source: ImportPasswordSource) { if source.hasDetailScreen { - let detailVC = ImportSourceDetailViewController(source: source) + let detailVC = ImportSourceDetailViewController( + source: source, + fileUploadCoordinator: fileUploadCoordinator + ) { [weak self] in + self?.didCallOnCancelled = true + self?.onFinished?() + } navigationController?.pushViewController(detailVC, animated: true) } else { navigateToImportViaSync() diff --git a/iOS/DuckDuckGo/DataImport/Hub/ImportSourceDetailViewController.swift b/iOS/DuckDuckGo/DataImport/Hub/ImportSourceDetailViewController.swift index e46124ddf59..23811b32e99 100644 --- a/iOS/DuckDuckGo/DataImport/Hub/ImportSourceDetailViewController.swift +++ b/iOS/DuckDuckGo/DataImport/Hub/ImportSourceDetailViewController.swift @@ -19,13 +19,24 @@ import UIKit import SwiftUI +import SafariServices +import Core +import Common +import BrowserKit +import os.log final class ImportSourceDetailViewController: UIViewController { private let source: ImportPasswordSource + private let fileUploadCoordinator: DataImportFileUploadCoordinating + private let onFinished: (() -> Void)? - init(source: ImportPasswordSource) { + init(source: ImportPasswordSource, + fileUploadCoordinator: DataImportFileUploadCoordinating, + onFinished: (() -> Void)? = nil) { self.source = source + self.fileUploadCoordinator = fileUploadCoordinator + self.onFinished = onFinished super.init(nibName: nil, bundle: nil) } @@ -53,11 +64,66 @@ final class ImportSourceDetailViewController: UIViewController { installChildViewController(hostingController) } + // MARK: - Primary Action + private func handlePrimaryAction() { - // Wired up in future PR + guard source == .safari else { return } + presentSafariExportInterstitial() + } + + private func presentSafariExportInterstitial() { + let interstitialVC = SafariExportInterstitialViewController() + interstitialVC.onRequestExport = { [weak self] in + self?.triggerBrowserKitImport() + } + + if let sheet = interstitialVC.sheetPresentationController { + sheet.detents = [.medium()] + } + + present(interstitialVC, animated: true) } + private func triggerBrowserKitImport() { + if #available(iOS 26.4, *) { + let scene = view.window?.windowScene + let manager = BEBrowserDataImportManager(scene: scene) + let metadata = BEImportMetadata(supportForImportFromFiles: false) + manager.requestImport(for: metadata) { _, error in + if let error { + Logger.autofill.error("BrowserKit requestImport failed: \(error)") + } + } + return + } else { + Logger.autofill.error("BrowserKit requestImport not available on this OS version") + } + } + + // MARK: - File Upload + private func handleUploadFile() { - // Wired up in future PR + fileUploadCoordinator.startUploadFlow(from: self) } } + +// MARK: - DataImportFileUploadFlowOwner + +extension ImportSourceDetailViewController: DataImportFileUploadFlowOwner { + + func dataImportUploadDidCompleteSummary() { + onFinished?() + navigationController?.popToRootViewController(animated: true) + } + + func dataImportUploadDidRequestSync(source: String?) { + let mainViewController = navigationController?.presentingViewController as? MainViewController + ?? presentingViewController as? MainViewController + + mainViewController?.dismiss(animated: true) { + mainViewController?.segueToSettingsSync(with: source) + } + } + + func dataImportUploadDidCancel() {} +} diff --git a/iOS/DuckDuckGo/DataImport/Hub/SafariExportInterstitialView.swift b/iOS/DuckDuckGo/DataImport/Hub/SafariExportInterstitialView.swift new file mode 100644 index 00000000000..7824e721e15 --- /dev/null +++ b/iOS/DuckDuckGo/DataImport/Hub/SafariExportInterstitialView.swift @@ -0,0 +1,93 @@ +// +// SafariExportInterstitialView.swift +// DuckDuckGo +// +// Copyright © 2026 DuckDuckGo. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +import SwiftUI +import DesignResourcesKit +import DuckUI + +struct SafariExportInterstitialView: View { + + var onOpenSettingsToExport: (() -> Void)? + var onCancel: (() -> Void)? + + @State private var isAnimating = false + + var body: some View { + VStack(spacing: 0) { + HStack { + Button(UserText.actionCancel) { + onCancel?() + } + .daxBodyRegular() + .foregroundColor(Color(designSystemColor: .textPrimary)) + + Spacer() + } + .padding(.horizontal, 16) + .padding(.top, 16) + + Spacer() + + ExportAnimationView(isAnimating: $isAnimating) + + Text(UserText.safariExportInterstitialTip) + .daxTitle2() + .foregroundColor(Color(designSystemColor: .textPrimary)) + .multilineTextAlignment(.center) + .padding(.horizontal, 24) + .padding(.top, 16) + + Spacer().frame(height: 24) + + Button { + onOpenSettingsToExport?() + } label: { + Text(UserText.safariExportInterstitialButton) + } + .buttonStyle(PrimaryButtonStyle()) + .padding(.horizontal, 16) + + Spacer() + } + .background(Color(designSystemColor: .background)) + .onFirstAppear { + DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) { + isAnimating = true + } + } + } + + private struct ExportAnimationView: View { + @Binding var isAnimating: Bool + @Environment(\.colorScheme) private var colorScheme + + private var lottieFileName: String { + colorScheme == .dark ? "export-passwords-dark-optimised" : "export-passwords-light-optimised" + } + + var body: some View { + LottieView( + lottieFile: lottieFileName, + loopMode: .mode(.repeat(1.0)), + isAnimating: $isAnimating + ) + .frame(width: 200, height: 200) + } + } +} diff --git a/iOS/DuckDuckGo/DataImport/Hub/SafariExportInterstitialViewController.swift b/iOS/DuckDuckGo/DataImport/Hub/SafariExportInterstitialViewController.swift new file mode 100644 index 00000000000..656d3310010 --- /dev/null +++ b/iOS/DuckDuckGo/DataImport/Hub/SafariExportInterstitialViewController.swift @@ -0,0 +1,46 @@ +// +// SafariExportInterstitialViewController.swift +// DuckDuckGo +// +// Copyright © 2026 DuckDuckGo. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +import UIKit +import SwiftUI + +final class SafariExportInterstitialViewController: UIViewController { + + var onRequestExport: (() -> Void)? + + override func viewDidLoad() { + super.viewDidLoad() + setupView() + } + + private func setupView() { + let interstitialView = SafariExportInterstitialView( + onOpenSettingsToExport: { [weak self] in + self?.dismiss(animated: true) { + self?.onRequestExport?() + } + }, + onCancel: { [weak self] in + self?.dismiss(animated: true) + }) + let hostingController = UIHostingController(rootView: interstitialView) + hostingController.view.backgroundColor = .clear + installChildViewController(hostingController) + } +} diff --git a/iOS/DuckDuckGo/Info.plist b/iOS/DuckDuckGo/Info.plist index eb69bda647e..81f40945e42 100644 --- a/iOS/DuckDuckGo/Info.plist +++ b/iOS/DuckDuckGo/Info.plist @@ -182,6 +182,7 @@ NSUserActivityTypes ConfigurationIntent + ASCredentialExchangeActivityType OSLogPreferences diff --git a/iOS/DuckDuckGo/MainViewController+Segues.swift b/iOS/DuckDuckGo/MainViewController+Segues.swift index a3824b45f13..eca2c13a135 100644 --- a/iOS/DuckDuckGo/MainViewController+Segues.swift +++ b/iOS/DuckDuckGo/MainViewController+Segues.swift @@ -389,6 +389,27 @@ extension MainViewController { } } + func presentDataImportSummary(_ summary: DataImportSummary, + importScreen: DataImportViewModel.ImportScreen = .passwords) { + let presenter = topMostPresentedViewController(startingFrom: self) + + guard !(presenter is DataImportSummaryViewController) else { + Logger.autofill.debug("Data import summary already presented") + return + } + + let summaryViewController = DataImportSummaryViewController(summary: summary, + importScreen: importScreen, + syncService: syncService) { [weak self] source in + guard let self else { return } + dismissPresentedDataImportSummaryIfNeeded { + self.segueToSettingsSync(with: source) + } + } onCompletion: { } + + presenter.present(summaryViewController, animated: true) + } + func segueToFeedback() { Logger.lifecycle.debug(#function) hideAllHighlightsIfNeeded() @@ -545,7 +566,25 @@ extension MainViewController { ViewHighlighter.hideAll() } } - + + private func dismissPresentedDataImportSummaryIfNeeded(completion: @escaping () -> Void) { + let topMostViewController = topMostPresentedViewController(startingFrom: self) + guard topMostViewController is DataImportSummaryViewController else { + completion() + return + } + + topMostViewController.dismiss(animated: true, completion: completion) + } + + private func topMostPresentedViewController(startingFrom rootViewController: UIViewController) -> UIViewController { + var currentViewController = rootViewController + while let presentedViewController = currentViewController.presentedViewController { + currentViewController = presentedViewController + } + return currentViewController + } + } // Exists to fire a did disappear notification for settings when the controller did disappear diff --git a/iOS/DuckDuckGo/MainViewController.swift b/iOS/DuckDuckGo/MainViewController.swift index ef3dd6be2d9..b0bc6e12396 100644 --- a/iOS/DuckDuckGo/MainViewController.swift +++ b/iOS/DuckDuckGo/MainViewController.swift @@ -2341,7 +2341,12 @@ class MainViewController: UIViewController { case .legacy(let importScreen): rootViewController = makeDataImportViewController(source: importScreen, onFinished: onFinished, onCancelled: onCancelled) case .hub: - rootViewController = DataImportHubViewController(syncService: syncService, onCancelled: onCancelled) + rootViewController = DataImportHubViewController(syncService: syncService, + keyValueStore: keyValueStore, + bookmarksDatabase: bookmarksDatabase, + favoritesDisplayMode: appSettings.favoritesDisplayMode, + onFinished: onFinished, + onCancelled: onCancelled) } let navigationController = UINavigationController(rootViewController: rootViewController) @@ -5477,7 +5482,10 @@ extension MainViewController: MessageNavigationDelegate { case .legacy(let importScreen): destinationViewController = makeDataImportViewController(source: importScreen) case .hub: - destinationViewController = DataImportHubViewController(syncService: syncService) + destinationViewController = DataImportHubViewController(syncService: syncService, + keyValueStore: keyValueStore, + bookmarksDatabase: bookmarksDatabase, + favoritesDisplayMode: appSettings.favoritesDisplayMode) } guard let viewController = topMostPresentedViewController() else { assertionFailure("No ViewController presented.") diff --git a/iOS/DuckDuckGo/SettingsLegacyViewProvider.swift b/iOS/DuckDuckGo/SettingsLegacyViewProvider.swift index 944bfb4b5b0..aa8c9661061 100644 --- a/iOS/DuckDuckGo/SettingsLegacyViewProvider.swift +++ b/iOS/DuckDuckGo/SettingsLegacyViewProvider.swift @@ -222,12 +222,16 @@ class SettingsLegacyViewProvider: ObservableObject { return viewController } - func importPasswords(delegate: DataImportViewControllerDelegate) -> UIViewController { + func importPasswords(delegate: DataImportViewControllerDelegate, onFinished: (() -> Void)? = nil) -> UIViewController { switch DataImportEntryPointHandler().destination(for: .settings) { case .legacy(let importScreen): return makeDataImportViewController(importScreen: importScreen, delegate: delegate) case .hub: - return DataImportHubViewController(syncService: syncService) + return DataImportHubViewController(syncService: syncService, + keyValueStore: keyValueStore, + bookmarksDatabase: bookmarksDatabase, + favoritesDisplayMode: appSettings.favoritesDisplayMode, + onFinished: onFinished) } } diff --git a/iOS/DuckDuckGo/SettingsViewModel.swift b/iOS/DuckDuckGo/SettingsViewModel.swift index a2c8a8c8208..98ba34319d0 100644 --- a/iOS/DuckDuckGo/SettingsViewModel.swift +++ b/iOS/DuckDuckGo/SettingsViewModel.swift @@ -1355,7 +1355,12 @@ extension SettingsViewModel { case .autoconsent: pushViewController(legacyViewProvider.autoConsent) case .passwordsImport: - pushViewController(legacyViewProvider.importPasswords(delegate: self)) + pushViewController(legacyViewProvider.importPasswords(delegate: self, + onFinished: { [weak self] in + Task { @MainActor [weak self] in + self?.handleDataImportCompletion() + } + })) } } @@ -1368,6 +1373,18 @@ extension SettingsViewModel { private func presentViewController(_ view: UIViewController, modal: Bool) { onRequestPresentLegacyView?(view, modal) } + + @MainActor + private func handleDataImportCompletion() { + AppDependencyProvider.shared.autofillLoginSession.startSession() + pushViewController(legacyViewProvider.loginSettings(delegate: self, + selectedAccount: nil, + selectedCard: nil, + showPasswordManagement: true, + showCreditCardManagement: false, + showSettingsScreen: nil, + source: state.autofillSource)) + } } @@ -1384,14 +1401,7 @@ extension SettingsViewModel: AutofillSettingsViewControllerDelegate { extension SettingsViewModel: DataImportViewControllerDelegate { @MainActor func dataImportViewControllerDidFinish(_ controller: DataImportViewController) { - AppDependencyProvider.shared.autofillLoginSession.startSession() - pushViewController(legacyViewProvider.loginSettings(delegate: self, - selectedAccount: nil, - selectedCard: nil, - showPasswordManagement: true, - showCreditCardManagement: false, - showSettingsScreen: nil, - source: state.autofillSource)) + handleDataImportCompletion() } } diff --git a/iOS/DuckDuckGo/UICoordination/MainCoordinator.swift b/iOS/DuckDuckGo/UICoordination/MainCoordinator.swift index 7f798cb4e14..9096ee746fc 100644 --- a/iOS/DuckDuckGo/UICoordination/MainCoordinator.swift +++ b/iOS/DuckDuckGo/UICoordination/MainCoordinator.swift @@ -665,20 +665,31 @@ extension MainCoordinator: UserActivityHandling { @discardableResult func handleUserActivity(_ userActivity: NSUserActivity) -> Bool { - switch userActivity.activityType { - case DataImportUserActivityHandler.browserKitImportActivityType: - if dataImportUserActivityHandler == nil { - dataImportUserActivityHandler = makeDataImportUserActivityHandler() - } - return dataImportUserActivityHandler?.handle(userActivity) ?? false - default: + if dataImportUserActivityHandler == nil { + dataImportUserActivityHandler = makeDataImportUserActivityHandler() + } + + guard dataImportUserActivityHandler?.handle(userActivity) == true else { Logger.general.debug("Unhandled user activity type: \(userActivity.activityType)") return false } + + return true } private func makeDataImportUserActivityHandler() -> DataImportUserActivityHandler { - DataImportUserActivityHandler() + DataImportUserActivityHandler { [weak self] result in + self?.handleDataImportResult(result) + } + } + + private func handleDataImportResult(_ result: Result) { + switch result { + case .success(let summary): + controller.presentDataImportSummary(summary, importScreen: .passwords) + case .failure(let error): + Logger.general.error("Data import failed: \(error.localizedDescription, privacy: .public)") + } } } diff --git a/iOS/DuckDuckGo/UserText.swift b/iOS/DuckDuckGo/UserText.swift index 290f0ba6fa1..3aead6620ef 100644 --- a/iOS/DuckDuckGo/UserText.swift +++ b/iOS/DuckDuckGo/UserText.swift @@ -2418,6 +2418,11 @@ public struct UserText { public static let importDetailDoneExportingHeader = NSLocalizedString("data.import.detail.done-exporting-header", value: "Done Exporting?", comment: "Section header above the upload file row on the Safari import detail screen") public static let importDetailUploadFileRow = NSLocalizedString("data.import.detail.upload-file-row", value: "Upload Exported File...", comment: "Row label on import detail screens that opens a file picker to upload an exported password file") + // MARK: Safari Export Interstitial + + public static let safariExportInterstitialTip = NSLocalizedString("data.import.safari.interstitial.tip", value: "Remember to click\n\"Export to Files\"", comment: "Tip text on the Safari export interstitial reminding users to click Export to Files") + public static let safariExportInterstitialButton = NSLocalizedString("data.import.safari.interstitial.button", value: "Open Settings to Export", comment: "Button on the Safari export interstitial that triggers the system import sheet") + public static let dataImportFailedNoDataInZipErrorMessage = NSLocalizedString("data.import.failed.no-data-in-zip-error-message", value: "No supported data found in the zip file. Please review the Safari export instructions and try again.", comment: "Error message displayed when no supported data is found in the zip file") public static let dataImportFailedReadErrorMessage = NSLocalizedString("data.import.failed.zip-read-error-message", value: "The %@ file could not be read. There may be an issue with the data in the file.", comment: "Error message displayed when the (csv|html|zip) file can't be read.") public static let dataImportFileTypeCsv = NSLocalizedString("data.import.file-type.csv", value: "CSV", comment: "File type for CSV files") diff --git a/iOS/DuckDuckGo/en.lproj/Localizable.strings b/iOS/DuckDuckGo/en.lproj/Localizable.strings index 299ad583bc6..1b67074ecc7 100644 --- a/iOS/DuckDuckGo/en.lproj/Localizable.strings +++ b/iOS/DuckDuckGo/en.lproj/Localizable.strings @@ -1276,6 +1276,12 @@ /* Title for screen to import passwords */ "data.import.passwords.title" = "Import Passwords to DuckDuckGo"; +/* Button on the Safari export interstitial that triggers the system import sheet */ +"data.import.safari.interstitial.button" = "Open Settings to Export"; + +/* Tip text on the Safari export interstitial reminding users to click Export to Files */ +"data.import.safari.interstitial.tip" = "Remember to click\n\"Export to Files\""; + /* Row title for importing passwords from Chrome */ "data.import.source.chrome" = "Chrome"; diff --git a/iOS/DuckDuckGo/export-passwords-dark-optimised.json b/iOS/DuckDuckGo/export-passwords-dark-optimised.json new file mode 100644 index 00000000000..d8e3e396ca3 --- /dev/null +++ b/iOS/DuckDuckGo/export-passwords-dark-optimised.json @@ -0,0 +1 @@ +{"nm":"updated-version-dark","ddd":0,"h":200,"w":280,"meta":{"g":"@lottiefiles/toolkit-js 0.33.2"},"layers":[{"ty":4,"nm":"pointer","sr":1,"st":0,"op":750,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0]},"s":{"a":1,"k":[{"o":{"x":0.66,"y":0},"i":{"x":0.34,"y":1},"s":[10,10,100],"t":30},{"o":{"x":0.66,"y":0},"i":{"x":0.34,"y":1},"s":[6,6,100],"t":35},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[10,10,100],"t":40},{"o":{"x":0.66,"y":0},"i":{"x":0.34,"y":1},"s":[10,10,100],"t":75},{"o":{"x":0.66,"y":0},"i":{"x":0.34,"y":1},"s":[6,6,100],"t":85},{"o":{"x":0.743,"y":0},"i":{"x":0.568,"y":1},"s":[6,6,100],"t":102},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[10,10,100],"t":108},{"o":{"x":0.66,"y":0},"i":{"x":0.34,"y":1},"s":[10,10,100],"t":124},{"o":{"x":0.66,"y":0},"i":{"x":0.34,"y":1},"s":[6,6,100],"t":129},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[10,10,100],"t":134},{"o":{"x":0.66,"y":0},"i":{"x":0.34,"y":1},"s":[10,10,100],"t":176},{"o":{"x":0.66,"y":0},"i":{"x":0.34,"y":1},"s":[6,6,100],"t":181},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[10,10,100],"t":186},{"o":{"x":0.66,"y":0},"i":{"x":0.34,"y":1},"s":[10,10,100],"t":237},{"o":{"x":0.66,"y":0},"i":{"x":0.34,"y":1},"s":[6,6,100],"t":242},{"s":[10,10,100],"t":247}]},"sk":{"a":0,"k":0},"p":{"a":1,"k":[{"o":{"x":0.66,"y":0},"i":{"x":0.34,"y":1},"s":[69.4,90.76,0],"t":10},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[140.6,166.36,0],"t":25},{"o":{"x":0.66,"y":0},"i":{"x":0.34,"y":1},"s":[140.6,166.36,0],"t":50},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[212.6,170.36,0],"t":62},{"o":{"x":0.66,"y":0},"i":{"x":0.34,"y":1},"s":[212.6,170.36,0],"t":85},{"o":{"x":0.66,"y":0},"i":{"x":0.34,"y":1},"s":[212.6,131.96,0],"t":105},{"o":{"x":0.66,"y":0},"i":{"x":0.34,"y":1},"s":[212.6,139.96,0],"t":112},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[140.6,166.36,0],"t":122},{"o":{"x":0.66,"y":0},"i":{"x":0.34,"y":1},"s":[140.6,166.36,0],"t":145},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[140.6,154.36,0],"t":162},{"o":{"x":0.374,"y":0},"i":{"x":0.34,"y":1},"s":[140.6,154.36,0],"t":207},{"s":[140.6,65.5,0],"t":225}]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":1,"k":[{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[46],"t":259},{"s":[0],"t":264}]}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"nm":"pointer","it":[{"ty":"el","bm":0,"hd":false,"nm":"Ellipse Path 1","d":1,"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[480,481.203]}},{"ty":"st","bm":0,"hd":false,"nm":"Stroke 1","lc":1,"lj":1,"ml":4,"o":{"a":0,"k":100},"w":{"a":0,"k":30},"c":{"a":0,"k":[1,0.5529,0.3608]}},{"ty":"fl","bm":0,"hd":false,"nm":"Fill 1","c":{"a":0,"k":[1,0.5529,0.3608]},"r":1,"o":{"a":0,"k":20}},{"ty":"tr","a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}}]}],"ind":1},{"ty":0,"nm":"Confetti 128 x 96","sr":1,"st":266,"op":492,"ip":266,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[256,192,0]},"s":{"a":1,"k":[{"o":{"x":0.14,"y":1.187},"i":{"x":0.34,"y":1},"s":[10,10,100],"t":272},{"s":[18.4,18.4,100],"t":291}]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[142,112.8,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":1,"k":[{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[0],"t":272},{"s":[100],"t":277}]}},"ef":[],"w":512,"h":384,"refId":"comp_0","ind":2},{"ty":4,"nm":"recent","sr":1,"st":198,"op":285,"ip":198,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0]},"s":{"a":0,"k":[10,10,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[104.5,150,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":1,"k":[{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[0],"t":198},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[100],"t":203},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[100],"t":259},{"s":[0],"t":264}]}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"nm":"recent","it":[{"ty":"sh","bm":0,"hd":false,"nm":"Path 1","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,41.974],[41.974,0],[0,-41.974],[-41.974,0]],"o":[[0,-41.974],[-41.974,0],[0,41.974],[41.974,0]],"v":[[76,0],[0,-76],[-76,0],[0,76]]}}},{"ty":"mm","bm":0,"hd":false,"nm":"Merge Paths 1","mm":5},{"ty":"sh","bm":0,"hd":false,"nm":"Path 2","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[-2.485,0],[0,-2.485],[0,0],[2.485,0],[0,0],[0,2.485],[-2.485,0],[0,0]],"o":[[0,-2.485],[2.485,0],[0,0],[0,2.485],[0,0],[-2.485,0],[0,-2.485],[0,0],[0,0]],"v":[[-4.5,-50],[0,-54.5],[4.5,-50],[4.5,3],[0,7.5],[-41,7.5],[-45.5,3],[-41,-1.5],[-4.5,-1.5]]}}},{"ty":"mm","bm":0,"hd":false,"nm":"Merge Paths 2","mm":5},{"ty":"fl","bm":0,"hd":false,"nm":"Fill 1","c":{"a":0,"k":[0.0392,0.5176,1]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}}]}],"ind":3},{"ty":5,"nm":"text-recent","sr":1,"st":198,"op":285,"ip":198,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[1.636,-34.741,0]},"s":{"a":0,"k":[10,10,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[103.9,167.7,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":1,"k":[{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[0],"t":198},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[100],"t":203},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[100],"t":259},{"s":[0],"t":264}]}},"ef":[],"t":{"m":{"a":{"a":0,"k":[0,0]},"g":1},"p":{},"a":[],"d":{"k":[{"s":{"f":"SFPro-Regular","s":100,"t":"Recent","fc":[0.0392,0.5176,1],"lh":157.5,"tr":0,"j":2,"ca":0},"t":0}]}},"ind":4},{"ty":4,"nm":"line","sr":1,"st":198,"op":285,"ip":198,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0]},"s":{"a":0,"k":[10,10,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[178.1,166.8,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":1,"k":[{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[0],"t":198},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[100],"t":203},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[100],"t":259},{"s":[0],"t":264}]}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"nm":"Rectangle 880","it":[{"ty":"rc","bm":0,"hd":false,"nm":"Rectangle Path 1","d":1,"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":120},"s":{"a":0,"k":[300,50]}},{"ty":"fl","bm":0,"hd":false,"nm":"Fill 1","c":{"a":0,"k":[0.0196,0.0196,0.0196]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}}]}],"ind":5},{"ty":4,"nm":"circle","sr":1,"st":198,"op":285,"ip":198,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0]},"s":{"a":0,"k":[10,10,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[178.1,153.2,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":1,"k":[{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[0],"t":198},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[100],"t":203},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[100],"t":259},{"s":[0],"t":264}]}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"nm":"Ellipse 2","it":[{"ty":"el","bm":0,"hd":false,"nm":"Ellipse Path 1","d":1,"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[150,150]}},{"ty":"fl","bm":0,"hd":false,"nm":"Fill 1","c":{"a":0,"k":[0.0196,0.0196,0.0196]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}}]}],"ind":6},{"ty":4,"nm":"segmented-nav-option","sr":1,"st":198,"op":285,"ip":198,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0]},"s":{"a":0,"k":[10,10,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[176.5,157.9,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":1,"k":[{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[0],"t":198},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[100],"t":203},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[100],"t":259},{"s":[0],"t":264}]}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"nm":"Rectangle 882","it":[{"ty":"rc","bm":0,"hd":false,"nm":"Rectangle Path 1","d":1,"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":1000},"s":{"a":0,"k":[696,398]}},{"ty":"fl","bm":0,"hd":false,"nm":"Fill 1","c":{"a":0,"k":[0.2,0.2,0.2]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}}]}],"ind":7},{"ty":4,"nm":"segmented-nav-option","sr":1,"st":198,"op":285,"ip":198,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0]},"s":{"a":0,"k":[10,10,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[104.3,157.9,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":1,"k":[{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[0],"t":198},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[100],"t":203},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[100],"t":259},{"s":[0],"t":264}]}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"nm":"Rectangle 881","it":[{"ty":"rc","bm":0,"hd":false,"nm":"Rectangle Path 1","d":1,"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":1000},"s":{"a":0,"k":[696,398]}},{"ty":"fl","bm":0,"hd":false,"nm":"Fill 1","c":{"a":0,"k":[0.1098,0.1098,0.1098]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}}]}],"ind":8},{"ty":4,"nm":"segmented-nav-bg","sr":1,"st":198,"op":285,"ip":198,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0]},"s":{"a":0,"k":[10,10,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[140.4,157.9,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":1,"k":[{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[0],"t":198},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[100],"t":203},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[100],"t":259},{"s":[0],"t":264}]}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"nm":"Rectangle 880","it":[{"ty":"sh","bm":0,"hd":false,"nm":"Path 1","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,-120.95],[0,0],[-120.95,0],[0,0],[0,120.95],[120.951,0]],"o":[[-120.95,0],[0,0],[0,120.95],[0,0],[120.951,0],[0,-120.95],[0,0]],"v":[[-514,-219],[-733,0],[-733,0],[-514,219],[514,219],[733,0],[514,-219]]}}},{"ty":"fl","bm":0,"hd":false,"nm":"Fill 1","c":{"a":0,"k":[0.1373,0.1373,0.1373]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}}]}],"ind":9},{"ty":5,"nm":"file-icon-name","sr":1,"st":198,"op":285,"ip":198,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[2.168,-13.347,0]},"s":{"a":0,"k":[10,10,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[140.62,102.33,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":1,"k":[{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[0],"t":198},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[100],"t":203},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[100],"t":259},{"s":[0],"t":264}]}},"ef":[],"t":{"m":{"a":{"a":0,"k":[0,0]},"g":1},"p":{},"a":[],"d":{"k":[{"s":{"f":"SFProText-Regular","s":120,"t":"Safari Export.zip","fc":[0.9608,0.9608,0.9608],"lh":144,"tr":0,"ps":[-305.25,-139.429],"sz":[610.5,278.859],"j":2,"ca":0},"t":0}]}},"ind":10},{"ty":2,"nm":"file-icon.png","sr":1,"st":198,"op":285,"ip":198,"hd":false,"cl":"png","ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[104.5,106.5,0]},"s":{"a":0,"k":[34.4,34.4,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[140.4,65.2,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":1,"k":[{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[0],"t":198},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[100],"t":203},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[100],"t":259},{"s":[0],"t":264}]}},"ef":[],"refId":"image_0","ind":11},{"ty":4,"nm":"icon-document-upload","sr":1,"st":145,"op":249,"ip":145,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0]},"s":{"a":0,"k":[10,10,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[77.2,151.9,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":1,"k":[{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[0],"t":145},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[100],"t":149},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[100],"t":193},{"s":[0],"t":198}]}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"nm":"icon-document-upload","it":[{"ty":"sh","bm":0,"hd":false,"nm":"Path 1","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[7.625,0],[0,0],[0,-27.614],[0,0],[-27.614,0],[0,0],[3.066,4.65],[2.158,0],[0,0],[0,19.33],[0,0],[-19.33,0],[0,0],[0,0],[-20.711,0],[0,0],[0,0],[-3.088,-0.821],[0,4.769],[0,0],[5.391,5.391]],"o":[[-5.391,-5.391],[0,0],[-27.614,0],[0,0],[0,27.614],[0,0],[5.57,0],[-1.188,-1.802],[0,0],[-19.33,0],[0,0],[0,-19.33],[0,0],[0,0],[0,20.711],[0,0],[0,0],[0,3.196],[4.609,1.225],[0,0],[0,-7.625],[0,0]],"v":[[16.529,-91.579],[-3.8,-100],[-40,-100],[-90,-50],[-90,50],[-40,100],[-10.668,100],[-5.13,87.977],[-10.457,85],[-40,85],[-75,50],[-75,-50],[-40,-85],[-10,-85],[-10,-57.5],[27.5,-20],[55,-20],[55,-9.704],[60.465,-2.985],[70,-9.76],[70,-26.198],[61.581,-46.528]]}}},{"ty":"mm","bm":0,"hd":false,"nm":"Merge Paths 1","mm":5},{"ty":"sh","bm":0,"hd":false,"nm":"Path 2","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,24.853],[24.853,0],[0,-24.853],[-24.853,0]],"o":[[0,-24.853],[-24.853,0],[0,24.853],[24.853,0]],"v":[[90,55],[45,10],[0,55],[45,100]]}}},{"ty":"mm","bm":0,"hd":false,"nm":"Merge Paths 2","mm":5},{"ty":"sh","bm":0,"hd":false,"nm":"Path 3","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[-1.287,-0.006],[-0.971,-0.971],[0,0],[0,0],[1.953,-1.953],[0,0],[1.953,1.953],[0,0],[0,0],[2.761,0],[0,0],[0,2.761],[0,0],[0,0],[1.953,1.952],[0,0],[-1.953,1.953],[0,0],[0,0]],"o":[[0.982,-0.982],[1.272,0.006],[0,0],[0,0],[1.953,1.953],[0,0],[-1.953,1.953],[0,0],[0,0],[0,2.761],[0,0],[-2.761,0],[0,0],[0,0],[-1.952,1.952],[0,0],[-1.952,-1.953],[0,0],[0,0],[0,0]],"v":[[41.463,25.905],[45.022,24.44],[48.536,25.905],[52.124,29.493],[72.466,49.837],[72.466,56.908],[68.931,60.443],[61.86,60.443],[52.499,51.082],[52.499,77.5],[47.499,82.5],[42.499,82.5],[37.499,77.5],[37.499,51.084],[28.178,60.405],[21.107,60.405],[17.571,56.869],[17.571,49.798],[37.876,29.493],[37.928,29.44]]}}},{"ty":"mm","bm":0,"hd":false,"nm":"Merge Paths 3","mm":5},{"ty":"sh","bm":0,"hd":false,"nm":"Path 4","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,12.426],[0,0],[-0.295,-0.295],[0,0],[-0.265,-0.317]],"o":[[-12.426,0],[0,0],[0.318,0.265],[0,0],[0.295,0.295],[0,0]],"v":[[27.5,-35],[5,-57.5],[5,-81.812],[5.921,-80.972],[50.972,-35.92],[51.81,-35]]}}},{"ty":"mm","bm":0,"hd":false,"nm":"Merge Paths 4","mm":5},{"ty":"fl","bm":0,"hd":false,"nm":"Fill 1","c":{"a":0,"k":[1,1,1]},"r":1,"o":{"a":0,"k":84}},{"ty":"tr","a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}}]}],"ind":12},{"ty":5,"nm":"button-label","sr":1,"st":145,"op":249,"ip":145,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[-28.481,-7.255,0]},"s":{"a":0,"k":[10,10,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[135.93,152.8,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":1,"k":[{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[0],"t":145},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[96],"t":149},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[96],"t":193},{"s":[0],"t":198}]}},"ef":[],"t":{"m":{"a":{"a":0,"k":[0,0]},"g":1},"p":{},"a":[],"d":{"k":[{"s":{"f":"SFProText-Regular","s":130,"t":"Upload File...","fc":[1,1,1],"lh":180,"tr":-8,"ps":[-423.21,-65.844],"sz":[846.42,131.688],"j":0,"ca":0},"t":0}]}},"ind":13},{"ty":4,"nm":"button-bg 1","sr":1,"st":145,"op":249,"ip":145,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0]},"s":{"a":0,"k":[10,10,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[140.2,151.85,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":1,"k":[{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[0],"t":145},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[100],"t":149},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[100],"t":193},{"s":[0],"t":198}]}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"nm":"button-bg","it":[{"ty":"rc","bm":0,"hd":false,"nm":"Rectangle Path 1","d":1,"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":100},"s":{"a":0,"k":[1840,357]}},{"ty":"fl","bm":0,"hd":false,"nm":"Fill 1","c":{"a":1,"k":[{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[0.1569,0.1569,0.1569],"t":167},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[0.1569,0.1569,0.1569],"t":180},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[0.0706,0.0706,0.0706],"t":181},{"s":[0.1569,0.1569,0.1569],"t":186}]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}}]}],"ind":14},{"ty":5,"nm":"button-label","sr":1,"st":145,"op":249,"ip":145,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[2.252,-33.783,0]},"s":{"a":0,"k":[10,10,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[140.2,108.1,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":1,"k":[{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[0],"t":145},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[100],"t":149},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[100],"t":193},{"s":[0],"t":198}]}},"ef":[],"t":{"m":{"a":{"a":0,"k":[0,0]},"g":1},"p":{},"a":[],"d":{"k":[{"s":{"f":"SFProText-Bold","s":112.5,"t":"Export Safari Passwords","fc":[0.0196,0.0667,0.2],"lh":150,"tr":-18,"j":2,"ca":0},"t":0}]}},"ind":15},{"ty":4,"nm":"button-bg","sr":1,"st":145,"op":249,"ip":145,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0]},"s":{"a":0,"k":[10,10,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[140.2,108.05,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":1,"k":[{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[0],"t":145},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[100],"t":149},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[100],"t":193},{"s":[0],"t":198}]}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"nm":"button-bg","it":[{"ty":"rc","bm":0,"hd":false,"nm":"Rectangle Path 1","d":1,"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":100},"s":{"a":0,"k":[1840,357]}},{"ty":"fl","bm":0,"hd":false,"nm":"Fill 1","c":{"a":0,"k":[0.4471,0.5843,0.9647]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}}]}],"ind":16},{"ty":2,"nm":"safari-ddg.png","sr":1,"st":145,"op":249,"ip":145,"hd":false,"cl":"png","ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[96,96,0]},"s":{"a":0,"k":[34,34,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[139.2,48.4,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":1,"k":[{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[0],"t":145},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[100],"t":149},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[100],"t":193},{"s":[0],"t":198}]}},"ef":[],"refId":"image_1","ind":17},{"ty":3,"nm":"null-p3","sr":1,"st":-129,"op":145,"ip":50,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[50,50,0]},"s":{"a":0,"k":[10,10,100]},"sk":{"a":0,"k":0},"p":{"a":1,"k":[{"o":{"x":0.32,"y":0.94},"i":{"x":0.6,"y":1},"s":[152,106.13,0],"t":50},{"s":[140,106.13,0],"t":55}]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":0}},"ef":[],"ind":18},{"ty":5,"nm":"text-export-browsing-data","sr":1,"st":-51,"op":145,"ip":50,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0.293,-42.275,0]},"s":{"a":0,"k":[100,100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[50,-556.75,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":1,"k":[{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[0],"t":50},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[84],"t":55},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[84],"t":140},{"s":[0],"t":144}]}},"ef":[],"t":{"m":{"a":{"a":0,"k":[0,0]},"g":1},"p":{},"a":[],"d":{"k":[{"s":{"f":"SFPro-Semibold","s":120,"t":"Export Browsing Data","fc":[0.8706,0.8706,0.8706],"lh":144,"tr":0,"j":2,"ca":0},"t":0}]}},"ind":19,"parent":18},{"ty":4,"nm":"title-bg 2","sr":1,"st":-51,"op":145,"ip":50,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0]},"s":{"a":0,"k":[10,10,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[140,111.3,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":1,"k":[{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[0],"t":50},{"s":[100],"t":55}]}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"nm":"Rectangle 1","it":[{"ty":"sh","bm":0,"hd":false,"nm":"Path 1","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,-176.731],[0,0],[0,0],[0,0],[176.73,0]],"o":[[-176.731,0],[0,0],[0,0],[0,0],[0,-176.731],[0,0]],"v":[[-760,-885],[-1080,-565],[-1080,-459],[1080,-459],[1080,-565],[760,-885]]}}},{"ty":"fl","bm":0,"hd":false,"nm":"Fill 1","c":{"a":0,"k":[0.2,0.2,0.2]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}}]}],"ind":20},{"ty":5,"nm":"button-label","sr":1,"st":50,"op":145,"ip":50,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0.467,-40.787,0]},"s":{"a":0,"k":[100,100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[921.5,1872,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":1,"k":[{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[100],"t":140},{"s":[0],"t":144}]}},"ef":[],"t":{"m":{"a":{"a":0,"k":[0,0]},"g":1},"p":{},"a":[],"d":{"k":[{"s":{"f":"SFProText-Bold","s":112.5,"t":"Save to Downloads","fc":[0.0196,0.0667,0.2],"lh":150,"tr":-18,"j":2,"ca":0},"t":0}]}},"ind":21,"parent":23},{"ty":4,"nm":"button","sr":1,"st":50,"op":145,"ip":50,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0]},"s":{"a":0,"k":[100,100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[921,1872,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":1,"k":[{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[100],"t":140},{"s":[0],"t":144}]}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"nm":"Rectangle 2","it":[{"ty":"rc","bm":0,"hd":false,"nm":"Rectangle Path 1","d":1,"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":1000},"s":{"a":0,"k":[1840,300]}},{"ty":"fl","bm":0,"hd":false,"nm":"Fill 1","c":{"a":1,"k":[{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[0.0078,0.6039,1],"t":128},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[0,0.4863,0.8078],"t":129},{"s":[0.0078,0.6039,1],"t":134}]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}}]}],"ind":22,"parent":23},{"ty":0,"nm":"browsing-data-page-dark","sr":1,"st":50,"op":145,"ip":50,"hd":false,"ddd":0,"bm":0,"tt":1,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[920.5,1010,0]},"s":{"a":0,"k":[100,100,100]},"sk":{"a":0,"k":0},"p":{"a":1,"k":[{"o":{"x":0.66,"y":0},"i":{"x":0.34,"y":1},"s":[50,656.75,0],"t":85,"ti":[0,0,0],"to":[0,0,0]},{"s":[50,-223.25,0],"t":115}]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":1,"k":[{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[0],"t":50},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[100],"t":55},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[100],"t":140},{"s":[0],"t":144}]}},"ef":[],"w":1841,"h":2020,"refId":"comp_3","ind":23,"parent":18},{"ty":4,"nm":"browsing-data-mask","sr":1,"st":50,"op":145,"ip":50,"hd":false,"ddd":0,"bm":0,"hasMask":false,"td":1,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0]},"s":{"a":0,"k":[100,100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[50,180.75,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"nm":"mobile-bg","it":[{"ty":"sh","bm":0,"hd":false,"nm":"Path 1","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,-176.731],[0,0],[0,0],[0,0],[176.731,0]],"o":[[-176.731,0],[0,0],[0,0],[0,0],[0,-176.731],[0,0]],"v":[[-760,-960],[-1080,-640],[-1080,960],[1080,960],[1080,-640],[760,-960]]}}},{"ty":"fl","bm":0,"hd":false,"nm":"Fill 1","c":{"a":0,"k":[0.8784,0.8784,0.8784]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}}]}],"ind":24,"parent":18},{"ty":3,"nm":"null-p1","sr":1,"st":0,"op":51,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[50,50,0]},"s":{"a":0,"k":[10,10,100]},"sk":{"a":0,"k":0},"p":{"a":1,"k":[{"o":{"x":0.4,"y":0},"i":{"x":0.68,"y":0.06},"s":[139.88,113.01,0],"t":45},{"s":[127.88,113.01,0],"t":50}]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":0}},"ef":[],"ind":25},{"ty":4,"nm":"Rectangle 881","sr":1,"st":0,"op":51,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0]},"s":{"a":0,"k":[100,100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[49.163,129.879,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":1,"k":[{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[100],"t":45},{"s":[0],"t":50}]}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"nm":"Rectangle 881","it":[{"ty":"rc","bm":0,"hd":false,"nm":"Rectangle Path 1","d":1,"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":290},"s":{"a":0,"k":[1510,60]}},{"ty":"fl","bm":0,"hd":false,"nm":"Fill 1","c":{"a":0,"k":[0.6784,0.6784,0.6784]},"r":1,"o":{"a":0,"k":60}},{"ty":"tr","a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}}]}],"ind":26,"parent":25},{"ty":4,"nm":"Rectangle 880","sr":1,"st":0,"op":51,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0]},"s":{"a":0,"k":[100,100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[49.163,-10.121,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":1,"k":[{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[100],"t":45},{"s":[0],"t":50}]}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"nm":"Rectangle 880","it":[{"ty":"rc","bm":0,"hd":false,"nm":"Rectangle Path 1","d":1,"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":290},"s":{"a":0,"k":[1510,60]}},{"ty":"fl","bm":0,"hd":false,"nm":"Fill 1","c":{"a":0,"k":[0.8706,0.8706,0.8706]},"r":1,"o":{"a":0,"k":84}},{"ty":"tr","a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}}]}],"ind":27,"parent":25},{"ty":4,"nm":"Ellipse 2","sr":1,"st":0,"op":51,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0]},"s":{"a":0,"k":[100,100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[48.837,-369.879,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":1,"k":[{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[100],"t":45},{"s":[0],"t":50}]}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"nm":"Ellipse 2","it":[{"ty":"el","bm":0,"hd":false,"nm":"Ellipse Path 1","d":1,"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[40,40]}},{"ty":"fl","bm":0,"hd":false,"nm":"Fill 1","c":{"a":0,"k":[0.5608,0.6706,0.9765]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}}]}],"ind":28,"parent":25},{"ty":4,"nm":"Vector 3 (Stroke)","sr":1,"st":0,"op":51,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0]},"s":{"a":0,"k":[100,100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[48.837,-489.879,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":1,"k":[{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[100],"t":45},{"s":[0],"t":50}]}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"nm":"Vector 3 (Stroke)","it":[{"ty":"sh","bm":0,"hd":false,"nm":"Path 1","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,-9.665],[0,0],[-9.665,0],[0,9.665],[0,0],[9.665,0]],"o":[[0,0],[0,9.665],[9.665,0],[0,0],[0,-9.665],[-9.665,0]],"v":[[-17.5,-50],[-17.5,50],[0,67.5],[17.5,50],[17.5,-50],[0,-67.5]]}}},{"ty":"fl","bm":0,"hd":false,"nm":"Fill 1","c":{"a":0,"k":[0.5608,0.6706,0.9765]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}}]}],"ind":29,"parent":25},{"ty":4,"nm":"Vector 2 (Stroke)","sr":1,"st":0,"op":51,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0]},"s":{"a":0,"k":[100,100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[48.947,-474,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":1,"k":[{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[100],"t":45},{"s":[0],"t":50}]}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"nm":"Vector 2 (Stroke)","it":[{"ty":"sh","bm":0,"hd":false,"nm":"Path 1","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[22.979,-40.827],[0,0],[-45.896,0],[0,0],[22.361,39.994]],"o":[[-22.864,-40.892],[0,0],[-22.511,39.996],[0,0],[45.821,0],[0,0]],"v":[[52.907,-173.402],[-51.75,-173.55],[-213.984,114.692],[-161.697,204.121],[161.697,204.121],[214.067,114.84]]}}},{"ty":"mm","bm":0,"hd":false,"nm":"Merge Paths 1","mm":5},{"ty":"sh","bm":0,"hd":false,"nm":"Path 2","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[-7.621,-13.631],[0,0],[15.274,0],[0,0],[-7.504,13.332]],"o":[[7.66,-13.609],[0,0],[7.454,13.331],[0,0],[-15.299,0],[0,0]],"v":[[-16.892,-153.931],[17.994,-153.882],[179.154,134.36],[161.697,164.121],[-161.697,164.121],[-179.125,134.311]]}}},{"ty":"mm","bm":0,"hd":false,"nm":"Merge Paths 2","mm":5},{"ty":"fl","bm":0,"hd":false,"nm":"Fill 1","c":{"a":0,"k":[0.2196,0.3961,0.6627]},"r":1,"o":{"a":0,"k":60}},{"ty":"tr","a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}}]}],"ind":30,"parent":25},{"ty":5,"nm":"button-label-active","sr":1,"st":0,"op":51,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0.522,-42.792,0]},"s":{"a":0,"k":[100,100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[51.163,589.879,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":1,"k":[{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[100],"t":45},{"s":[0],"t":50}]}},"ef":[],"t":{"m":{"a":{"a":0,"k":[0,0]},"g":1},"p":{},"a":[],"d":{"k":[{"s":{"f":"SFProText-Bold","s":112.5,"t":"Export to Files","fc":[0.0196,0.0667,0.2],"lh":150,"tr":-18,"j":2,"ca":0},"t":0}]}},"ind":31,"parent":25},{"ty":4,"nm":"button-bg-active","sr":1,"st":0,"op":51,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0]},"s":{"a":0,"k":[100,100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[51.163,589.879,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":1,"k":[{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[100],"t":45},{"s":[0],"t":50}]}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"nm":"Rectangle 2","it":[{"ty":"rc","bm":0,"hd":false,"nm":"Rectangle Path 1","d":1,"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":1000},"s":{"a":0,"k":[1840,300]}},{"ty":"fl","bm":0,"hd":false,"nm":"Fill 1","c":{"a":1,"k":[{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[0.0078,0.6039,1],"t":34},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[0,0.4863,0.8078],"t":35},{"s":[0.0078,0.6039,1],"t":40}]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}}]}],"ind":32,"parent":25},{"ty":4,"nm":"page-bg-full-dark","sr":1,"st":198,"op":285,"ip":198,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0]},"s":{"a":0,"k":[10,10,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[140,96.5,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":1,"k":[{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[0],"t":198},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[100],"t":203},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[100],"t":256},{"s":[0],"t":261}]}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"nm":"Rectangle 1","it":[{"ty":"sh","bm":0,"hd":false,"nm":"Path 1","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,-176.731],[0,0],[0,0],[0,0],[176.73,0]],"o":[[-176.731,0],[0,0],[0,0],[0,0],[0,-176.731],[0,0]],"v":[[-760,-885],[-1080,-565],[-1080,1045],[1080,1045],[1080,-565],[760,-885]]}}},{"ty":"fl","bm":0,"hd":false,"nm":"Fill 1","c":{"a":0,"k":[0.0196,0.0196,0.0196]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}}]}],"ind":33},{"ty":4,"nm":"page-bg-full","sr":1,"st":146,"op":605,"ip":145,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0]},"s":{"a":0,"k":[10,10,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[140,96.5,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":1,"k":[{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[0],"t":145},{"s":[100],"t":149}]}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"nm":"Rectangle 1","it":[{"ty":"sh","bm":0,"hd":false,"nm":"Path 1","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,-176.731],[0,0],[0,0],[0,0],[176.73,0]],"o":[[-176.731,0],[0,0],[0,0],[0,0],[0,-176.731],[0,0]],"v":[[-760,-885],[-1080,-565],[-1080,1045],[1080,1045],[1080,-565],[760,-885]]}}},{"ty":"fl","bm":0,"hd":false,"nm":"Fill 1","c":{"a":0,"k":[0.2,0.2,0.2]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}}]}],"ind":34},{"ty":4,"nm":"page-bg","sr":1,"st":0,"op":300,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0]},"s":{"a":0,"k":[10,10,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[140,111.3,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"nm":"Rectangle 1","it":[{"ty":"sh","bm":0,"hd":false,"nm":"Path 1","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,-176.731],[0,0],[0,0],[0,0],[176.73,0]],"o":[[-176.731,0],[0,0],[0,0],[0,0],[0,-176.731],[0,0]],"v":[[-760,-885],[-1080,-565],[-1080,885],[1080,885],[1080,-565],[760,-885]]}}},{"ty":"fl","bm":0,"hd":false,"nm":"Fill 1","c":{"a":0,"k":[0.2,0.2,0.2]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[2.031,2.594]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}}]}],"ind":35},{"ty":4,"nm":"mobile-frame","sr":1,"st":0,"op":758,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0]},"s":{"a":0,"k":[10,10,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[140,100,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"nm":"mobile-frame","it":[{"ty":"sh","bm":0,"hd":false,"nm":"Path 1","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[220.914,0],[0,0],[0,-220.914],[0,0],[0,0],[0,0],[-176.731,0],[0,0],[0,-176.731],[0,0],[0,0]],"o":[[0,-220.914],[0,0],[-220.914,0],[0,0],[0,0],[0,0],[0,-176.731],[0,0],[176.731,0],[0,0],[0,0],[0,0]],"v":[[1160,-600],[760,-1000],[-760,-1000],[-1160,-600],[-1160,1000],[-1080,1000],[-1080,-600],[-760,-920],[760,-920],[1080,-600],[1080,1000],[1160,1000]]}}},{"ty":"fl","bm":0,"hd":false,"nm":"Fill 1","c":{"a":0,"k":[0.6,0.6,0.6]},"r":1,"o":{"a":0,"k":60}},{"ty":"tr","a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}}]}],"ind":36},{"ty":4,"nm":"mobile-bg","sr":1,"st":0,"op":756,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0]},"s":{"a":0,"k":[10,10,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[140,104,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"nm":"mobile-bg","it":[{"ty":"sh","bm":0,"hd":false,"nm":"Path 1","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,-176.731],[0,0],[0,0],[0,0],[176.731,0]],"o":[[-176.731,0],[0,0],[0,0],[0,0],[0,-176.731],[0,0]],"v":[[-760,-960],[-1080,-640],[-1080,960],[1080,960],[1080,-640],[760,-960]]}}},{"ty":"fl","bm":0,"hd":false,"nm":"Fill 1","c":{"a":0,"k":[0.0196,0.0196,0.0196]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}}]}],"ind":37}],"v":"5.12.1","fr":25,"op":351,"ip":0,"fonts":{"list":[{"ascent":74.316,"fClass":"","fFamily":"SF Pro Text","fStyle":"Bold","fName":"SFProText-Bold","fPath":"","fWeight":"","origin":0},{"ascent":70.459,"fClass":"","fFamily":"SF Pro","fStyle":"Semibold","fName":"SFPro-Semibold","fPath":"","fWeight":"","origin":0},{"ascent":73.535,"fClass":"","fFamily":"SF Pro Text","fStyle":"Regular","fName":"SFProText-Regular","fPath":"","fWeight":"","origin":0},{"ascent":70.459,"fClass":"","fFamily":"SF Pro","fStyle":"Regular","fName":"SFPro-Regular","fPath":"","fWeight":"","origin":0}]},"assets":[{"id":"image_0","u":"","e":1,"w":209,"h":213,"p":"data:image/webp;base64,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"},{"id":"image_1","u":"","e":1,"w":192,"h":192,"p":"data:image/webp;base64,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"},{"nm":"Confetti 128 x 96","id":"comp_0","fr":25,"layers":[{"ty":4,"nm":"String 4 Mask ","sr":1,"st":0,"op":500,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"td":1,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0]},"s":{"a":0,"k":[200,-200,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[59.094,133.36,0]},"r":{"a":0,"k":180},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"nm":"Union","it":[{"ty":"sh","bm":0,"hd":false,"nm":"Path 1","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[-0.261,-3.103],[0,0],[0,0],[0,0],[0,0],[0.64,0.524],[0,0],[-1.577,-0.01],[-4.449,1.78],[-10.195,10.195],[-3.548,8.87],[0.017,2.627],[0.387,0.578]],"o":[[1.803,1.965],[0,0],[0,0],[0,0],[0,0],[-0.758,-0.372],[0,0],[0.639,0.299],[2.627,0.017],[8.87,-3.548],[10.195,-10.195],[1.78,-4.449],[-0.013,-2.014],[0,0]],"v":[[20.185,-57.5],[23.249,-49.815],[57.319,44],[44.319,57.5],[-54.181,23],[-55.219,22.17],[-57.319,20.828],[-51.681,15.131],[-48.462,15.703],[-37.775,13.223],[-7.964,-7.703],[12.963,-37.515],[15.443,-48.202],[14.618,-51.873]]}}},{"ty":"fl","bm":0,"hd":false,"nm":"Fill 1","c":{"a":0,"k":[0.851,0.851,0.851]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}}]}],"ind":1,"parent":9},{"ty":4,"nm":"String 4","sr":1,"st":0,"op":500,"ip":0,"hd":false,"ddd":0,"bm":0,"tt":2,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[-19.25,-95.75,0]},"s":{"a":0,"k":[100,100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[236.75,96.25,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"nm":"Shape 1","it":[{"ty":"sh","bm":0,"hd":false,"nm":"Path 1","d":1,"ks":{"a":0,"k":{"c":false,"i":[[0,0],[53.012,39.649],[-11.75,27.25]],"o":[[0,0],[-60.5,-45.25],[0,0]],"v":[[-94.5,62.25],[-4,-86.25],[37.25,-166.75]]}}},{"ty":"tm","bm":0,"hd":false,"nm":"Trim Paths 1","e":{"a":1,"k":[{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[3],"t":32},{"s":[12],"t":37}]},"o":{"a":1,"k":[{"o":{"x":0.4,"y":0.411},"i":{"x":0.833,"y":0.833},"s":[9],"t":32},{"s":[366],"t":50}]},"s":{"a":0,"k":0},"m":1},{"ty":"st","bm":0,"hd":false,"nm":"Stroke 1","lc":2,"lj":1,"ml":4,"o":{"a":0,"k":100},"w":{"a":0,"k":16},"c":{"a":0,"k":[0.2235,0.4118,0.9373]}},{"ty":"tr","a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}}]}],"ind":2},{"ty":4,"nm":"String 3 Mask","sr":1,"st":0,"op":500,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"td":1,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0]},"s":{"a":0,"k":[200,-200,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[59.094,133.36,0]},"r":{"a":0,"k":180},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"nm":"Union","it":[{"ty":"sh","bm":0,"hd":false,"nm":"Path 1","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[-0.261,-3.103],[0,0],[0,0],[0,0],[0,0],[0.64,0.524],[0,0],[-1.577,-0.01],[-4.449,1.78],[-10.195,10.195],[-3.548,8.87],[0.017,2.627],[0.387,0.578]],"o":[[1.803,1.965],[0,0],[0,0],[0,0],[0,0],[-0.758,-0.372],[0,0],[0.639,0.299],[2.627,0.017],[8.87,-3.548],[10.195,-10.195],[1.78,-4.449],[-0.013,-2.014],[0,0]],"v":[[20.185,-57.5],[23.249,-49.815],[57.319,44],[44.319,57.5],[-54.181,23],[-55.219,22.17],[-57.319,20.828],[-51.681,15.131],[-48.462,15.703],[-37.775,13.223],[-7.964,-7.703],[12.963,-37.515],[15.443,-48.202],[14.618,-51.873]]}}},{"ty":"fl","bm":0,"hd":false,"nm":"Fill 1","c":{"a":0,"k":[0.851,0.851,0.851]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}}]}],"ind":3,"parent":9},{"ty":4,"nm":"String 3","sr":1,"st":0,"op":500,"ip":0,"hd":false,"ddd":0,"bm":0,"tt":2,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[-19.25,-95.75,0]},"s":{"a":0,"k":[100,100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[236.75,96.25,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"nm":"Shape 1","it":[{"ty":"sh","bm":0,"hd":false,"nm":"Path 1","d":1,"ks":{"a":0,"k":{"c":false,"i":[[0,0],[-136.384,-28.823],[39,-40.25],[0,0]],"o":[[19.833,-12.667],[97,20.5],[-53.208,54.913],[0,0]],"v":[[-91.5,98.75],[164,-17.5],[127,80.25],[192.75,144.25]]}}},{"ty":"tm","bm":0,"hd":false,"nm":"Trim Paths 1","e":{"a":1,"k":[{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[3],"t":30},{"s":[12],"t":35}]},"o":{"a":1,"k":[{"o":{"x":0.4,"y":0.571},"i":{"x":0.833,"y":0.833},"s":[9],"t":30},{"s":[366],"t":55}]},"s":{"a":0,"k":0},"m":1},{"ty":"st","bm":0,"hd":false,"nm":"Stroke 1","lc":2,"lj":1,"ml":4,"o":{"a":0,"k":100},"w":{"a":0,"k":16},"c":{"a":0,"k":[0.2235,0.4118,0.9373]}},{"ty":"tr","a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}}]}],"ind":4},{"ty":4,"nm":"String 2 Mask","sr":1,"st":0,"op":500,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"td":1,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0]},"s":{"a":0,"k":[200,-200,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[59.094,133.36,0]},"r":{"a":0,"k":180},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"nm":"Union","it":[{"ty":"sh","bm":0,"hd":false,"nm":"Path 1","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[-0.261,-3.103],[0,0],[0,0],[0,0],[0,0],[0.64,0.524],[0,0],[-1.577,-0.01],[-4.449,1.78],[-10.195,10.195],[-3.548,8.87],[0.017,2.627],[0.387,0.578]],"o":[[1.803,1.965],[0,0],[0,0],[0,0],[0,0],[-0.758,-0.372],[0,0],[0.639,0.299],[2.627,0.017],[8.87,-3.548],[10.195,-10.195],[1.78,-4.449],[-0.013,-2.014],[0,0]],"v":[[20.185,-57.5],[23.249,-49.815],[57.319,44],[44.319,57.5],[-54.181,23],[-55.219,22.17],[-57.319,20.828],[-51.681,15.131],[-48.462,15.703],[-37.775,13.223],[-7.964,-7.703],[12.963,-37.515],[15.443,-48.202],[14.618,-51.873]]}}},{"ty":"fl","bm":0,"hd":false,"nm":"Fill 1","c":{"a":0,"k":[0.851,0.851,0.851]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}}]}],"ind":5,"parent":9},{"ty":4,"nm":"String 2","sr":1,"st":0,"op":500,"ip":0,"hd":false,"ddd":0,"bm":0,"tt":2,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[-19.25,-95.75,0]},"s":{"a":0,"k":[100,100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[236.75,96.25,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"nm":"Shape 1","it":[{"ty":"sh","bm":0,"hd":false,"nm":"Path 1","d":1,"ks":{"a":0,"k":{"c":false,"i":[[0,0],[-84.75,28.5],[-12.19,1.875],[-17.599,4.219],[-10.735,7.753],[-19.209,11.615],[0,0]],"o":[[36,-52.75],[11.69,-3.931],[17.887,-2.752],[12.877,-3.087],[18.197,-13.143],[17.803,-10.764],[0,0]],"v":[[-97,71.25],[61.75,-56.5],[62,-93.5],[107.25,-63.5],[98.5,-102.25],[165.75,-105.75],[195.25,-160.75]]}}},{"ty":"tm","bm":0,"hd":false,"nm":"Trim Paths 1","e":{"a":1,"k":[{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[3],"t":31},{"s":[12],"t":36}]},"o":{"a":1,"k":[{"o":{"x":0.4,"y":0.571},"i":{"x":0.833,"y":0.833},"s":[9],"t":31},{"s":[366],"t":56}]},"s":{"a":0,"k":0},"m":1},{"ty":"st","bm":0,"hd":false,"nm":"Stroke 1","lc":2,"lj":1,"ml":4,"o":{"a":0,"k":100},"w":{"a":0,"k":16},"c":{"a":0,"k":[0.8706,0.3451,0.2]}},{"ty":"tr","a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}}]}],"ind":6},{"ty":4,"nm":"String 1 Mask","sr":1,"st":0,"op":500,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"td":1,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0]},"s":{"a":0,"k":[200,-200,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[59.094,133.36,0]},"r":{"a":0,"k":180},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"nm":"Union","it":[{"ty":"sh","bm":0,"hd":false,"nm":"Path 1","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[-0.261,-3.103],[0,0],[0,0],[0,0],[0,0],[0.64,0.524],[0,0],[-1.577,-0.01],[-4.449,1.78],[-10.195,10.195],[-3.548,8.87],[0.017,2.627],[0.387,0.578]],"o":[[1.803,1.965],[0,0],[0,0],[0,0],[0,0],[-0.758,-0.372],[0,0],[0.639,0.299],[2.627,0.017],[8.87,-3.548],[10.195,-10.195],[1.78,-4.449],[-0.013,-2.014],[0,0]],"v":[[20.185,-57.5],[23.249,-49.815],[57.319,44],[44.319,57.5],[-54.181,23],[-55.219,22.17],[-57.319,20.828],[-51.681,15.131],[-48.462,15.703],[-37.775,13.223],[-7.964,-7.703],[12.963,-37.515],[15.443,-48.202],[14.618,-51.873]]}}},{"ty":"fl","bm":0,"hd":false,"nm":"Fill 1","c":{"a":0,"k":[0.851,0.851,0.851]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}}]}],"ind":7,"parent":9},{"ty":4,"nm":"String 1","sr":1,"st":0,"op":500,"ip":0,"hd":false,"ddd":0,"bm":0,"tt":2,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[-19.25,-95.75,0]},"s":{"a":0,"k":[100,100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[236.75,96.25,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"nm":"Shape 1","it":[{"ty":"sh","bm":0,"hd":false,"nm":"Path 1","d":1,"ks":{"a":0,"k":{"c":false,"i":[[0,0],[3.25,56.5],[25.575,-12.787],[17.041,-25.292],[0,0]],"o":[[19.833,-12.667],[-3.458,-60.115],[-110,55],[-23.75,35.25],[0,0]],"v":[[-91,54.25],[23.75,-116.5],[-141,-154],[-100.25,-86.25],[-225.75,-37.25]]}}},{"ty":"tm","bm":0,"hd":false,"nm":"Trim Paths 1","e":{"a":1,"k":[{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[3],"t":30},{"s":[12],"t":35}]},"o":{"a":1,"k":[{"o":{"x":0.4,"y":0.57},"i":{"x":0.833,"y":0.833},"s":[8],"t":30},{"s":[366],"t":55}]},"s":{"a":0,"k":0},"m":1},{"ty":"st","bm":0,"hd":false,"nm":"Stroke 1","lc":2,"lj":1,"ml":4,"o":{"a":0,"k":100},"w":{"a":0,"k":16},"c":{"a":0,"k":[0.8706,0.3451,0.2]}},{"ty":"tr","a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}}]}],"ind":8},{"ty":0,"nm":"Cone Inside","sr":1,"st":0,"op":500,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[96.5,95,0]},"s":{"a":0,"k":[100,100,100]},"sk":{"a":0,"k":0},"p":{"a":1,"k":[{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[278.5,153.5,0],"t":15,"ti":[0,0,0],"to":[0,0,0]},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[255.5,176.55,0],"t":16,"ti":[0,0,0],"to":[0,0,0]},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[244,188.1,0],"t":17,"ti":[0,0,0],"to":[0,0,0]},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[237.062,195.088,0],"t":18,"ti":[0,0,0],"to":[0,0,0]},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[230.609,201.141,0],"t":20,"ti":[0,0,0],"to":[0,0,0]},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[228.5,204,0],"t":25,"ti":[0,0,0],"to":[0,0,0]},{"o":{"x":0.167,"y":0.117},"i":{"x":0.833,"y":0.883},"s":[228.5,204,0],"t":30,"ti":[0,0,0],"to":[0,0,0]},{"o":{"x":0.167,"y":0.12},"i":{"x":0.833,"y":0.88},"s":[253.5,178.45,0],"t":31,"ti":[0,0,0],"to":[0,0,0]},{"o":{"x":0.167,"y":0.115},"i":{"x":0.833,"y":0.885},"s":[268.778,163.677,0],"t":32,"ti":[0,0,0],"to":[0,0,0]},{"o":{"x":0.167,"y":0.128},"i":{"x":0.833,"y":0.872},"s":[278.993,152.905,0],"t":33,"ti":[0,0,0],"to":[0,0,0]},{"o":{"x":0.167,"y":0.136},"i":{"x":0.833,"y":0.864},"s":[285.423,147.491,0],"t":34,"ti":[0,0,0],"to":[0,0,0]},{"o":{"x":0.167,"y":0.094},"i":{"x":0.833,"y":0.906},"s":[288.352,145.409,0],"t":35,"ti":[0,0,0],"to":[0,0,0]},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[288.682,144.927,0],"t":36,"ti":[0,0,0],"to":[0,0,0]},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[287.135,145.572,0],"t":37,"ti":[0,0,0],"to":[0,0,0]},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[284.746,147.724,0],"t":38,"ti":[0,0,0],"to":[0,0,0]},{"s":[278.5,153.5,0],"t":40}]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"ef":[],"w":193,"h":190,"refId":"comp_1","ind":9},{"ty":0,"nm":"Cone","sr":1,"st":0,"op":500,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[112.935,265.147,0]},"s":{"a":1,"k":[{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[100,100,100],"t":15},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[100,83.5,100],"t":16},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[100,75.6,100],"t":17},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[100,71.1,100],"t":18},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[100,68.4,100],"t":19},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[100,66.8,100],"t":20},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[100,65.9,100],"t":21},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[100,65.3,100],"t":22},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[100,65.1,100],"t":23},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[100,65,100],"t":24},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[100,65,100],"t":25},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[100,65,100],"t":30},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[100,82.3,100],"t":31},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[100,94.1,100],"t":32},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[100,100.5,100],"t":33},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[100,103.7,100],"t":34},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[100,105,100],"t":35},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[100,105.2,100],"t":36},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[100,104.6,100],"t":37},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[100,103.5,100],"t":38},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[100,101.9,100],"t":39},{"s":[100,100,100],"t":40}]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[126.457,306.86,0]},"r":{"a":0,"k":45},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"ef":[],"w":226,"h":255,"refId":"comp_2","ind":10}]},{"nm":"Cone Inside","id":"comp_1","fr":25,"layers":[{"ty":4,"nm":"Cone Inside","sr":1,"st":0,"op":500,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[128,96,0]},"s":{"a":0,"k":[200,200,100]},"sk":{"a":0,"k":0},"p":{"s":true,"x":{"a":0,"k":74.087},"y":{"a":0,"k":132.227},"z":{"a":0,"k":0}},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"nm":"Cone Rim","it":[{"ty":"sh","bm":0,"hd":false,"nm":"Path 1","d":1,"ks":{"a":0,"k":{"c":true,"i":[[21.528,21.528],[-9.226,9.226],[-21.528,-21.527],[9.226,-9.226]],"o":[[-21.527,-21.528],[9.226,-9.226],[21.528,21.528],[-9.226,9.226]],"v":[[-16.706,16.706],[-38.98,-38.98],[16.705,-16.706],[38.979,38.98]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 2","d":1,"ks":{"a":0,"k":{"c":true,"i":[[-2.627,0.018],[-0.423,0.424],[-0.017,2.58],[1.779,4.449],[10.195,10.194],[8.869,3.548],[2.627,-0.017],[0.423,-0.424],[0.017,-2.58],[-1.779,-4.449],[-10.195,-10.195],[-8.869,-3.548]],"o":[[2.58,-0.017],[0.424,-0.423],[0.018,-2.627],[-3.548,-8.869],[-10.194,-10.195],[-4.449,-1.779],[-2.58,0.017],[-0.424,0.423],[-0.017,2.627],[3.548,8.869],[10.194,10.194],[4.449,1.779]],"v":[[29.361,34.544],[33.41,33.411],[34.543,29.361],[32.063,18.674],[11.136,-11.137],[-18.675,-32.064],[-29.362,-34.544],[-33.411,-33.411],[-34.544,-29.362],[-32.064,-18.674],[-11.137,11.137],[18.674,32.064]]}}},{"ty":"fl","bm":0,"hd":false,"nm":"Fill 1","c":{"a":0,"k":[0.8863,0.6431,0.0706]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[139.779,77.685]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}}]},{"ty":"gr","bm":0,"hd":false,"nm":"Cone Inside","it":[{"ty":"sh","bm":0,"hd":false,"nm":"Path 1","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[-9.226,9.226],[21.528,21.528]],"o":[[21.528,21.528],[9.226,-9.226],[0,0]],"v":[[-32.456,0.956],[23.23,23.23],[0.956,-32.456]]}}},{"ty":"fl","bm":0,"hd":false,"nm":"Fill 1","c":{"a":0,"k":[1,0.8706,0.4784]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[155.527,93.434]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}}]},{"ty":"gr","bm":0,"hd":false,"nm":"Cone Shadow Inside","it":[{"ty":"sh","bm":0,"hd":false,"nm":"Path 1","d":1,"ks":{"a":0,"k":{"c":true,"i":[[9.226,-9.226],[21.528,21.528],[-9.226,9.227],[-21.528,-21.527]],"o":[[-9.226,9.226],[-21.527,-21.528],[9.226,-9.226],[21.528,21.528]],"v":[[38.979,38.979],[-16.706,16.706],[-38.98,-38.98],[16.705,-16.706]]}}},{"ty":"fl","bm":0,"hd":false,"nm":"Fill 1","c":{"a":0,"k":[1,0.8,0.2]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[139.779,77.685]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}}]}],"ind":1}]},{"nm":"Cone","id":"comp_2","fr":25,"layers":[{"ty":4,"nm":"Cone Inner Shadow","sr":1,"st":0,"op":500,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0]},"s":{"a":0,"k":[200,200,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[113.383,49.021,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"nm":"Cone Inner Shadow","it":[{"ty":"sh","bm":0,"hd":false,"nm":"Path 1","d":1,"ks":{"a":0,"k":{"c":true,"i":[[-30.445,0],[0,13.048],[30.445,0],[0,-13.048]],"o":[[30.445,0],[0,-13.048],[-30.445,0],[0,13.048]],"v":[[0,23.625],[55.125,0],[0,-23.625],[-55.125,0]]}}},{"ty":"fl","bm":0,"hd":false,"nm":"Fill 1","c":{"a":0,"k":[1,0.8,0.2]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}}]}],"ind":1},{"ty":4,"nm":"Stripes","sr":1,"st":0,"op":500,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0]},"s":{"a":0,"k":[200,-200,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[113.379,138.323,0]},"r":{"a":0,"k":135},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"nm":"Stripes","it":[{"ty":"sh","bm":0,"hd":false,"nm":"Path 1","d":1,"ks":{"a":0,"k":{"c":true,"i":[[9.837,-9.837],[9.933,-4.221],[0,0],[-12.763,12.763],[-1.754,10.496],[0,0]],"o":[[-9.836,9.836],[0,0],[10.496,-1.754],[12.764,-12.764],[0,0],[-4.221,9.933]],"v":[[2.134,2.135],[-28.452,23.747],[-40.788,19.328],[-3.434,-3.434],[19.327,-40.788],[23.746,-28.452]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 2","d":1,"ks":{"a":0,"k":{"c":true,"i":[[6.519,-6.519],[6.806,-3.111],[0,0],[-9.636,9.636],[-0.285,7.317],[0,0]],"o":[[-6.519,6.519],[0,0],[7.317,-0.285],[9.636,-9.636],[0,0],[-3.111,6.806]],"v":[[18.386,18.387],[-2.136,33.175],[-14.882,28.609],[12.817,12.818],[28.608,-14.881],[33.174,-2.134]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 3","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[-3.845,3.845],[-2.372,4.164],[0,0],[5.957,-5.957],[5.091,-1.177]],"o":[[4.165,-2.372],[3.845,-3.845],[0,0],[-1.177,5.091],[-5.958,5.958],[0,0]],"v":[[19.121,40.788],[31.324,31.324],[40.788,19.121],[36.864,8.165],[25.755,25.755],[8.164,36.864]]}}},{"ty":"fl","bm":0,"hd":false,"nm":"Fill 1","c":{"a":0,"k":[0.5294,0.4314,0.7961]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}}]}],"ind":2},{"ty":4,"nm":"Cone Shadow Outer","sr":1,"st":0,"op":500,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0]},"s":{"a":0,"k":[200,200,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[166.786,141.244,0]},"r":{"a":0,"k":-180},"sa":{"a":0,"k":0},"o":{"a":0,"k":40}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"nm":"Cone Shadow Outer","it":[{"ty":"sh","bm":0,"hd":false,"nm":"Path 1","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[3.591,-7.599],[0,0],[-3.852,0],[0,0],[0,2.9]],"o":[[0,-8.405],[0,0],[-1.646,3.483],[0,0],[2.899,0],[0,0]],"v":[[26.703,-38.226],[11.708,-41.591],[-26.194,38.62],[-21.447,46.113],[21.453,46.113],[26.703,40.863]]}}},{"ty":"fl","bm":0,"hd":false,"nm":"Fill 1","c":{"a":0,"k":[1,0.8,0.2]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}}]}],"ind":3},{"ty":4,"nm":"Cone 1","sr":1,"st":0,"op":500,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0]},"s":{"a":0,"k":[200,200,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[113.378,150.862,0]},"r":{"a":0,"k":-180},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"nm":"Cone","it":[{"ty":"sh","bm":0,"hd":false,"nm":"Path 1","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[4.736,-10.023],[0,0],[-3.852,0],[0,0],[1.646,3.483]],"o":[[-4.736,-10.023],[0,0],[-1.646,3.483],[0,0],[3.852,0],[0,0]],"v":[[11.867,-43.403],[-11.867,-43.403],[-52.897,43.428],[-48.15,50.921],[48.15,50.921],[52.897,43.428]]}}},{"ty":"fl","bm":0,"hd":false,"nm":"Fill 1","c":{"a":0,"k":[1,0.8392,0.3608]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}}]}],"ind":4}]},{"nm":"browsing-data-page-dark","id":"comp_3","fr":25,"layers":[{"ty":4,"nm":"Check 2","sr":1,"st":0,"op":500,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0]},"s":{"a":0,"k":[100,100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[219,1200.237,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"nm":"Check","it":[{"ty":"sh","bm":0,"hd":false,"nm":"Path 1","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[2.219,2.174],[2.174,-2.219],[0,0],[1.473,1.504],[0,0],[2.219,-2.174],[-2.174,-2.219],[0,0],[-5.885,6.007]],"o":[[2.174,-2.219],[-2.219,-2.174],[0,0],[-1.473,1.504],[0,0],[-2.174,-2.219],[-2.219,2.174],[0,0],[5.885,6.007],[0,0]],"v":[[35.893,-14.676],[35.811,-22.631],[27.857,-22.549],[-5.849,11.859],[-11.218,11.859],[-27.857,-5.126],[-35.811,-5.208],[-35.893,2.746],[-19.254,19.732],[2.187,19.732]]}}},{"ty":"fl","bm":0,"hd":false,"nm":"Fill 1","c":{"a":0,"k":[0.1569,0.1569,0.1569]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}}]}],"ind":1},{"ty":4,"nm":"BG 2","sr":1,"st":0,"op":500,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0]},"s":{"a":0,"k":[100,100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[219.5,1200,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"nm":"BG","it":[{"ty":"sh","bm":0,"hd":false,"nm":"Path 1","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,41.421],[-41.421,0],[0,-41.421],[41.421,0]],"o":[[0,-41.421],[41.421,0],[0,41.421],[-41.421,0]],"v":[[-75,0],[0,-75],[75,0],[0,75]]}}},{"ty":"fl","bm":0,"hd":false,"nm":"Fill 1","c":{"a":0,"k":[0.0078,0.6039,1]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}}]}],"ind":2},{"ty":4,"nm":"Shape 2","sr":1,"st":0,"op":500,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0]},"s":{"a":0,"k":[100,100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[516.5,1200,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"nm":"Shape","it":[{"ty":"sh","bm":0,"hd":false,"nm":"Path 1","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[27.614,0],[0,0],[0,-27.614],[0,0],[-27.614,0],[0,0],[0,27.614]],"o":[[0,-27.614],[0,0],[-27.614,0],[0,0],[0,27.614],[0,0],[27.614,0],[0,0]],"v":[[100,-40],[50,-90],[-50,-90],[-100,-40],[-100,40],[-50,90],[50,90],[100,40]]}}},{"ty":"mm","bm":0,"hd":false,"nm":"Merge Paths 1","mm":5},{"ty":"sh","bm":0,"hd":false,"nm":"Path 2","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[-19.33,0],[0,0],[0,-19.33],[0,0],[19.33,0],[0,0],[0,19.33]],"o":[[0,-19.33],[0,0],[19.33,0],[0,0],[0,19.33],[0,0],[-19.33,0],[0,0]],"v":[[-85,-40],[-50,-75],[50,-75],[85,-40],[85,40],[50,75],[-50,75],[-85,40]]}}},{"ty":"mm","bm":0,"hd":false,"nm":"Merge Paths 2","mm":5},{"ty":"sh","bm":0,"hd":false,"nm":"Path 3","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,4.142],[4.142,0],[0,0],[0,-4.142],[-4.142,0],[0,0]],"o":[[0,-4.142],[0,0],[-4.142,0],[0,4.142],[0,0],[4.142,0]],"v":[[-25,42.5],[-32.5,35],[-62.5,35],[-70,42.5],[-62.5,50],[-32.5,50]]}}},{"ty":"mm","bm":0,"hd":false,"nm":"Merge Paths 3","mm":5},{"ty":"sh","bm":0,"hd":false,"nm":"Path 4","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,4.142],[4.142,0],[0,0],[0,-4.142],[-4.142,0],[0,0]],"o":[[0,-4.142],[0,0],[-4.142,0],[0,4.142],[0,0],[4.142,0]],"v":[[2.5,42.5],[-5,35],[-7.5,35],[-15,42.5],[-7.5,50],[-5,50]]}}},{"ty":"mm","bm":0,"hd":false,"nm":"Merge Paths 4","mm":5},{"ty":"sh","bm":0,"hd":false,"nm":"Path 5","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,4.142],[4.142,0],[0,0],[0,-4.142],[-4.142,0],[0,0]],"o":[[0,-4.142],[0,0],[-4.142,0],[0,4.142],[0,0],[4.142,0]],"v":[[70,42.5],[62.5,35],[22.5,35],[15,42.5],[22.5,50],[62.5,50]]}}},{"ty":"mm","bm":0,"hd":false,"nm":"Merge Paths 5","mm":5},{"ty":"sh","bm":0,"hd":false,"nm":"Path 6","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[4.142,0],[0,0],[0,-4.142],[0,0],[-4.142,0],[0,0],[0,4.142]],"o":[[0,-4.142],[0,0],[-4.142,0],[0,0],[0,4.142],[0,0],[4.142,0],[0,0]],"v":[[-25,-5],[-32.5,-12.5],[-62.5,-12.5],[-70,-5],[-70,12.5],[-62.5,20],[-32.5,20],[-25,12.5]]}}},{"ty":"mm","bm":0,"hd":false,"nm":"Merge Paths 6","mm":5},{"ty":"fl","bm":0,"hd":false,"nm":"Fill 1","c":{"a":0,"k":[0.0078,0.6039,1]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}}]}],"ind":3},{"ty":4,"nm":"Rectangle 6","sr":1,"st":0,"op":500,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0]},"s":{"a":0,"k":[100,100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[920.5,1200,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"nm":"Rectangle 6","it":[{"ty":"rc","bm":0,"hd":false,"nm":"Rectangle Path 1","d":1,"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":195},"s":{"a":0,"k":[1840,440]}},{"ty":"fl","bm":0,"hd":false,"nm":"Fill 1","c":{"a":0,"k":[0.1569,0.1569,0.1569]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}}]}],"ind":4},{"ty":4,"nm":"Check 1","sr":1,"st":0,"op":500,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0]},"s":{"a":0,"k":[100,100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[219,710.237,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"nm":"Check","it":[{"ty":"sh","bm":0,"hd":false,"nm":"Path 1","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[2.219,2.174],[2.174,-2.219],[0,0],[1.473,1.504],[0,0],[2.219,-2.174],[-2.174,-2.219],[0,0],[-5.885,6.007]],"o":[[2.174,-2.219],[-2.219,-2.174],[0,0],[-1.473,1.504],[0,0],[-2.174,-2.219],[-2.219,2.174],[0,0],[5.885,6.007],[0,0]],"v":[[35.893,-14.676],[35.811,-22.631],[27.857,-22.549],[-5.849,11.859],[-11.218,11.859],[-27.857,-5.126],[-35.811,-5.208],[-35.893,2.746],[-19.254,19.732],[2.187,19.732]]}}},{"ty":"fl","bm":0,"hd":false,"nm":"Fill 1","c":{"a":0,"k":[0.1569,0.1569,0.1569]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}}]}],"ind":5},{"ty":4,"nm":"BG 1","sr":1,"st":0,"op":500,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0]},"s":{"a":0,"k":[100,100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[219.5,710,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"nm":"BG","it":[{"ty":"sh","bm":0,"hd":false,"nm":"Path 1","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,41.421],[-41.421,0],[0,-41.421],[41.421,0]],"o":[[0,-41.421],[41.421,0],[0,41.421],[-41.421,0]],"v":[[-75,0],[0,-75],[75,0],[0,75]]}}},{"ty":"fl","bm":0,"hd":false,"nm":"Fill 1","c":{"a":0,"k":[0.0078,0.6039,1]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}}]}],"ind":6},{"ty":4,"nm":"Shape 1","sr":1,"st":0,"op":500,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0]},"s":{"a":0,"k":[100,100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[516.5,710,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"nm":"Shape","it":[{"ty":"sh","bm":0,"hd":false,"nm":"Path 1","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,13.807],[13.807,0.001],[0,-13.807],[-13.807,0]],"o":[[0,-13.807],[-13.807,0],[0,13.807],[13.806,-0.001]],"v":[[60,-35],[35,-60],[10,-35],[35,-10]]}}},{"ty":"mm","bm":0,"hd":false,"nm":"Merge Paths 1","mm":5},{"ty":"sh","bm":0,"hd":false,"nm":"Path 2","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,5.523],[-5.523,0],[0,-5.523],[5.522,-0.001]],"o":[[0,-5.523],[5.522,0.001],[0,5.522],[-5.523,0]],"v":[[25,-35],[35,-45],[45,-35],[35,-25]]}}},{"ty":"mm","bm":0,"hd":false,"nm":"Merge Paths 2","mm":5},{"ty":"sh","bm":0,"hd":false,"nm":"Path 3","d":1,"ks":{"a":0,"k":{"c":true,"i":[[-0.002,38.688],[38.675,0.001],[0,-38.691],[-1.365,-5.463],[0.591,-0.591],[0,0],[-0.051,-10.007],[0,0],[-15.131,0],[0,0],[0,12.426],[0,0],[0,0],[-3.751,3.754],[0,0],[-1.634,-0.408],[-5.863,0]],"o":[[0,-38.69],[-38.677,0],[0,5.868],[0.408,1.632],[0,0],[-7.074,7.079],[0,0],[0.08,15.13],[0,0],[12.426,0],[0,0],[0,0],[5.307,0],[0,0],[0.591,-0.591],[5.458,1.365],[38.674,-0.001]],"v":[[100,-29.932],[29.981,-100],[-40.039,-29.932],[-37.959,-12.891],[-38.623,-9.434],[-89.023,41.006],[-100,67.705],[-99.97,72.646],[-72.47,100],[-62.549,100],[-40.049,77.5],[-40.049,70.156],[-30.224,70.156],[-16.074,64.297],[9.492,38.711],[12.949,38.037],[29.981,40.127]]}}},{"ty":"mm","bm":0,"hd":false,"nm":"Merge Paths 3","mm":5},{"ty":"sh","bm":0,"hd":false,"nm":"Path 4","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,4.633],[-30.383,0],[0,-30.415],[30.38,-0.001],[4.278,1.07],[4.898,-4.899],[0,0],[1.326,0],[0,0],[0.002,-8.283],[0,0],[4.142,0],[0,0],[0.037,6.877],[0,0],[-4.245,4.247],[0,0],[1.472,5.893]],"o":[[0,-30.416],[30.381,0.001],[-0.002,30.414],[-4.626,0],[-5.897,-1.475],[0,0],[-0.938,0.938],[0,0],[-8.283,0],[0,0],[0,4.142],[0,0],[-6.877,0],[0,0],[-0.031,-6.005],[0,0],[4.892,-4.895],[-1.071,-4.284]],"v":[[-25.039,-29.932],[29.981,-85],[85,-29.932],[29.981,25.127],[16.592,23.486],[-1.113,28.105],[-26.689,53.691],[-30.224,55.156],[-40.049,55.156],[-55.049,70.156],[-55.049,77.5],[-62.549,85],[-72.47,85],[-84.97,72.568],[-85,67.627],[-78.418,51.602],[-28.017,1.162],[-23.398,-16.523]]}}},{"ty":"mm","bm":0,"hd":false,"nm":"Merge Paths 4","mm":5},{"ty":"fl","bm":0,"hd":false,"nm":"Fill 1","c":{"a":0,"k":[0.0078,0.6039,1]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}}]}],"ind":7},{"ty":4,"nm":"Rectangle 5","sr":1,"st":0,"op":500,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0]},"s":{"a":0,"k":[100,100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[920.5,710,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"nm":"Rectangle 5","it":[{"ty":"rc","bm":0,"hd":false,"nm":"Rectangle Path 1","d":1,"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":195},"s":{"a":0,"k":[1840,440]}},{"ty":"fl","bm":0,"hd":false,"nm":"Fill 1","c":{"a":0,"k":[0.1569,0.1569,0.1569]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}}]}],"ind":8},{"ty":4,"nm":"Check","sr":1,"st":0,"op":500,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0]},"s":{"a":0,"k":[100,100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[219,220.237,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"nm":"Check","it":[{"ty":"sh","bm":0,"hd":false,"nm":"Path 1","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[2.219,2.174],[2.174,-2.219],[0,0],[1.473,1.504],[0,0],[2.219,-2.174],[-2.174,-2.219],[0,0],[-5.885,6.007]],"o":[[2.174,-2.219],[-2.219,-2.174],[0,0],[-1.473,1.504],[0,0],[-2.174,-2.219],[-2.219,2.174],[0,0],[5.885,6.007],[0,0]],"v":[[35.893,-14.676],[35.811,-22.631],[27.857,-22.549],[-5.849,11.859],[-11.218,11.859],[-27.857,-5.126],[-35.811,-5.208],[-35.893,2.746],[-19.254,19.732],[2.187,19.732]]}}},{"ty":"fl","bm":0,"hd":false,"nm":"Fill 1","c":{"a":0,"k":[0.1569,0.1569,0.1569]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}}]}],"ind":9},{"ty":4,"nm":"BG","sr":1,"st":0,"op":500,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0]},"s":{"a":0,"k":[100,100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[219.5,220,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"nm":"BG","it":[{"ty":"sh","bm":0,"hd":false,"nm":"Path 1","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,41.421],[-41.421,0],[0,-41.421],[41.421,0]],"o":[[0,-41.421],[41.421,0],[0,41.421],[-41.421,0]],"v":[[-75,0],[0,-75],[75,0],[0,75]]}}},{"ty":"fl","bm":0,"hd":false,"nm":"Fill 1","c":{"a":0,"k":[0.0078,0.6039,1]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}}]}],"ind":10},{"ty":4,"nm":"Shape","sr":1,"st":0,"op":500,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0]},"s":{"a":0,"k":[100,100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[517,220.004,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"nm":"Shape","it":[{"ty":"sh","bm":0,"hd":false,"nm":"Path 1","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0.204,-0.15],[0.389,0.241],[7.482,2.439],[26.548,-9.201],[0,-9.68],[0,0],[-6.113,-3.357],[-7,3.126],[-9.18,-4.601],[-6.269,3.142],[-26.421,-11.799],[-6.037,3.315],[0,8.332],[0,0],[10.213,3.273],[14.491,-5.012],[3.626,-2.583]],"o":[[-0.355,-0.229],[-3.993,-2.471],[-15.06,-4.909],[-9.894,3.429],[0,0],[0,8.332],[6.037,3.315],[26.421,-11.799],[6.269,3.142],[9.18,-4.601],[7,3.126],[6.113,-3.357],[0,0],[0,-10.079],[-28.847,-9.244],[-7.188,2.486],[-0.217,0.154]],"v":[[-0.364,-77.01],[-1.48,-77.716],[-18.771,-85.666],[-81.935,-83.756],[-97.5,-61.159],[-97.5,69.008],[-86.474,87.077],[-65.646,88.017],[-10.139,87.383],[10.139,87.383],[65.646,88.017],[86.474,87.077],[97.5,69.008],[97.5,-60.649],[81.16,-83.646],[16.437,-85.664],[0.268,-77.467]]}}},{"ty":"mm","bm":0,"hd":false,"nm":"Merge Paths 1","mm":5},{"ty":"sh","bm":0,"hd":false,"nm":"Path 2","d":1,"ks":{"a":0,"k":{"c":true,"i":[[13.066,-5.5],[0,0],[-0.558,0.398],[-5.68,1.965],[-25.944,-8.314],[0,-4.216],[0,0],[2.194,-1.205],[2.365,1.056]],"o":[[0,0],[0.422,-0.335],[2.601,-1.853],[11.247,-3.89],[3.399,1.089],[0,0],[0,1.924],[-2.27,1.246],[-28.367,-12.668]],"v":[[7.5,72.095],[7.5,-64.146],[8.97,-65.25],[21.34,-71.488],[76.582,-69.362],[82.5,-60.649],[82.5,69.008],[79.254,73.929],[71.762,74.321]]}}},{"ty":"mm","bm":0,"hd":false,"nm":"Merge Paths 2","mm":5},{"ty":"sh","bm":0,"hd":false,"nm":"Path 3","d":1,"ks":{"a":0,"k":{"c":true,"i":[[-2.365,1.056],[-13.066,-5.5],[0,0],[0.707,0.438],[6.173,2.012],[23.169,-8.029],[0,-4.099],[0,0],[-2.194,-1.205]],"o":[[28.367,-12.668],[0,0],[-0.541,-0.369],[-3.141,-1.944],[-12.251,-3.993],[-3.125,1.083],[0,0],[0,1.924],[2.27,1.246]],"v":[[-71.762,74.32],[-7.5,72.095],[-7.5,-63.745],[-9.374,-64.961],[-23.42,-71.405],[-77.023,-69.583],[-82.5,-61.159],[-82.5,69.008],[-79.254,73.929]]}}},{"ty":"mm","bm":0,"hd":false,"nm":"Merge Paths 3","mm":5},{"ty":"fl","bm":0,"hd":false,"nm":"Fill 1","c":{"a":0,"k":[0.0078,0.6039,1]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}}]}],"ind":11},{"ty":4,"nm":"Rectangle 4","sr":1,"st":0,"op":500,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0]},"s":{"a":0,"k":[100,100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[920.5,220,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"nm":"Rectangle 4","it":[{"ty":"rc","bm":0,"hd":false,"nm":"Rectangle Path 1","d":1,"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":195},"s":{"a":0,"k":[1840,440]}},{"ty":"fl","bm":0,"hd":false,"nm":"Fill 1","c":{"a":0,"k":[0.1569,0.1569,0.1569]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}}]}],"ind":12}]}]} \ No newline at end of file diff --git a/iOS/DuckDuckGo/export-passwords-light-optimised.json b/iOS/DuckDuckGo/export-passwords-light-optimised.json new file mode 100644 index 00000000000..5d45690f335 --- /dev/null +++ b/iOS/DuckDuckGo/export-passwords-light-optimised.json @@ -0,0 +1 @@ +{"nm":"updated-version","ddd":0,"h":200,"w":280,"meta":{"g":"@lottiefiles/toolkit-js 0.33.2"},"layers":[{"ty":4,"nm":"pointer","sr":1,"st":0,"op":750,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0]},"s":{"a":1,"k":[{"o":{"x":0.66,"y":0},"i":{"x":0.34,"y":1},"s":[10,10,100],"t":30},{"o":{"x":0.66,"y":0},"i":{"x":0.34,"y":1},"s":[6,6,100],"t":35},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[10,10,100],"t":40},{"o":{"x":0.66,"y":0},"i":{"x":0.34,"y":1},"s":[10,10,100],"t":75},{"o":{"x":0.66,"y":0},"i":{"x":0.34,"y":1},"s":[6,6,100],"t":85},{"o":{"x":0.743,"y":0},"i":{"x":0.568,"y":1},"s":[6,6,100],"t":102},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[10,10,100],"t":108},{"o":{"x":0.66,"y":0},"i":{"x":0.34,"y":1},"s":[10,10,100],"t":124},{"o":{"x":0.66,"y":0},"i":{"x":0.34,"y":1},"s":[6,6,100],"t":129},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[10,10,100],"t":134},{"o":{"x":0.66,"y":0},"i":{"x":0.34,"y":1},"s":[10,10,100],"t":176},{"o":{"x":0.66,"y":0},"i":{"x":0.34,"y":1},"s":[6,6,100],"t":181},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[10,10,100],"t":186},{"o":{"x":0.66,"y":0},"i":{"x":0.34,"y":1},"s":[10,10,100],"t":237},{"o":{"x":0.66,"y":0},"i":{"x":0.34,"y":1},"s":[6,6,100],"t":242},{"s":[10,10,100],"t":247}]},"sk":{"a":0,"k":0},"p":{"a":1,"k":[{"o":{"x":0.66,"y":0},"i":{"x":0.34,"y":1},"s":[69.4,90.76,0],"t":10},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[140.6,166.36,0],"t":25},{"o":{"x":0.66,"y":0},"i":{"x":0.34,"y":1},"s":[140.6,166.36,0],"t":50},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[212.6,170.36,0],"t":62},{"o":{"x":0.66,"y":0},"i":{"x":0.34,"y":1},"s":[212.6,170.36,0],"t":85},{"o":{"x":0.66,"y":0},"i":{"x":0.34,"y":1},"s":[212.6,131.96,0],"t":105},{"o":{"x":0.66,"y":0},"i":{"x":0.34,"y":1},"s":[212.6,139.96,0],"t":112},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[140.6,166.36,0],"t":122},{"o":{"x":0.66,"y":0},"i":{"x":0.34,"y":1},"s":[140.6,166.36,0],"t":145},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[140.6,154.36,0],"t":162},{"o":{"x":0.374,"y":0},"i":{"x":0.34,"y":1},"s":[140.6,154.36,0],"t":207},{"s":[140.6,65.5,0],"t":225}]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":1,"k":[{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[46],"t":259},{"s":[0],"t":264}]}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"nm":"pointer","it":[{"ty":"el","bm":0,"hd":false,"nm":"Ellipse Path 1","d":1,"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[480,481.203]}},{"ty":"st","bm":0,"hd":false,"nm":"Stroke 1","lc":1,"lj":1,"ml":4,"o":{"a":0,"k":100},"w":{"a":0,"k":30},"c":{"a":0,"k":[0.9412,0.3725,0.1686]}},{"ty":"fl","bm":0,"hd":false,"nm":"Fill 1","c":{"a":0,"k":[0.9412,0.3725,0.1686]},"r":1,"o":{"a":0,"k":20}},{"ty":"tr","a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}}]}],"ind":1},{"ty":0,"nm":"Confetti 128 x 96","sr":1,"st":266,"op":492,"ip":266,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[256,192,0]},"s":{"a":1,"k":[{"o":{"x":0.14,"y":1.187},"i":{"x":0.34,"y":1},"s":[10,10,100],"t":272},{"s":[18.4,18.4,100],"t":291}]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[142,112.8,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":1,"k":[{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[0],"t":272},{"s":[100],"t":277}]}},"ef":[],"w":512,"h":384,"refId":"comp_0","ind":2},{"ty":4,"nm":"recent","sr":1,"st":198,"op":285,"ip":198,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0]},"s":{"a":0,"k":[10,10,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[104.5,150,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":1,"k":[{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[0],"t":198},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[100],"t":203},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[100],"t":259},{"s":[0],"t":264}]}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"nm":"recent","it":[{"ty":"sh","bm":0,"hd":false,"nm":"Path 1","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,41.974],[41.974,0],[0,-41.974],[-41.974,0]],"o":[[0,-41.974],[-41.974,0],[0,41.974],[41.974,0]],"v":[[76,0],[0,-76],[-76,0],[0,76]]}}},{"ty":"mm","bm":0,"hd":false,"nm":"Merge Paths 1","mm":5},{"ty":"sh","bm":0,"hd":false,"nm":"Path 2","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[-2.485,0],[0,-2.485],[0,0],[2.485,0],[0,0],[0,2.485],[-2.485,0],[0,0]],"o":[[0,-2.485],[2.485,0],[0,0],[0,2.485],[0,0],[-2.485,0],[0,-2.485],[0,0],[0,0]],"v":[[-4.5,-50],[0,-54.5],[4.5,-50],[4.5,3],[0,7.5],[-41,7.5],[-45.5,3],[-41,-1.5],[-4.5,-1.5]]}}},{"ty":"mm","bm":0,"hd":false,"nm":"Merge Paths 2","mm":5},{"ty":"fl","bm":0,"hd":false,"nm":"Fill 1","c":{"a":0,"k":[0,0.4784,1]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}}]}],"ind":3},{"ty":5,"nm":"text-recent","sr":1,"st":198,"op":285,"ip":198,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[1.636,-34.741,0]},"s":{"a":0,"k":[10,10,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[103.9,167.7,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":1,"k":[{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[0],"t":198},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[100],"t":203},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[100],"t":259},{"s":[0],"t":264}]}},"ef":[],"t":{"m":{"a":{"a":0,"k":[0,0]},"g":1},"p":{},"a":[],"d":{"k":[{"s":{"f":"SFPro-Regular","s":100,"t":"Recent","fc":[0,0.4784,1],"lh":157.5,"tr":0,"j":2,"ca":0},"t":0}]}},"ind":4},{"ty":4,"nm":"line","sr":1,"st":198,"op":285,"ip":198,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0]},"s":{"a":0,"k":[10,10,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[178.1,166.8,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":1,"k":[{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[0],"t":198},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[100],"t":203},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[100],"t":259},{"s":[0],"t":264}]}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"nm":"Rectangle 880","it":[{"ty":"rc","bm":0,"hd":false,"nm":"Rectangle Path 1","d":1,"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":120},"s":{"a":0,"k":[300,50]}},{"ty":"fl","bm":0,"hd":false,"nm":"Fill 1","c":{"a":0,"k":[0.8784,0.8784,0.8784]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}}]}],"ind":5},{"ty":4,"nm":"circle","sr":1,"st":198,"op":285,"ip":198,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0]},"s":{"a":0,"k":[10,10,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[178.1,153.2,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":1,"k":[{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[0],"t":198},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[100],"t":203},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[100],"t":259},{"s":[0],"t":264}]}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"nm":"Ellipse 2","it":[{"ty":"el","bm":0,"hd":false,"nm":"Ellipse Path 1","d":1,"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[150,150]}},{"ty":"fl","bm":0,"hd":false,"nm":"Fill 1","c":{"a":0,"k":[0.8784,0.8784,0.8784]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}}]}],"ind":6},{"ty":4,"nm":"segmented-nav-option","sr":1,"st":198,"op":285,"ip":198,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0]},"s":{"a":0,"k":[10,10,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[176.5,157.9,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":1,"k":[{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[0],"t":198},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[100],"t":203},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[100],"t":259},{"s":[0],"t":264}]}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"nm":"Rectangle 882","it":[{"ty":"rc","bm":0,"hd":false,"nm":"Rectangle Path 1","d":1,"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":1000},"s":{"a":0,"k":[696,398]}},{"ty":"fl","bm":0,"hd":false,"nm":"Fill 1","c":{"a":0,"k":[0.9804,0.9804,0.9804]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}}]}],"ind":7},{"ty":4,"nm":"segmented-nav-option","sr":1,"st":198,"op":285,"ip":198,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0]},"s":{"a":0,"k":[10,10,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[104.3,157.9,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":1,"k":[{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[0],"t":198},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[100],"t":203},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[100],"t":259},{"s":[0],"t":264}]}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"nm":"Rectangle 881","it":[{"ty":"rc","bm":0,"hd":false,"nm":"Rectangle Path 1","d":1,"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":1000},"s":{"a":0,"k":[696,398]}},{"ty":"fl","bm":0,"hd":false,"nm":"Fill 1","c":{"a":0,"k":[0.9804,0.9804,0.9804]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}}]}],"ind":8},{"ty":4,"nm":"segmented-nav-bg","sr":1,"st":198,"op":285,"ip":198,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0]},"s":{"a":0,"k":[10,10,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[140.4,157.9,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":1,"k":[{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[0],"t":198},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[100],"t":203},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[100],"t":259},{"s":[0],"t":264}]}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"nm":"Rectangle 880","it":[{"ty":"sh","bm":0,"hd":false,"nm":"Path 1","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,-120.95],[0,0],[-120.95,0],[0,0],[0,120.95],[120.951,0]],"o":[[-120.95,0],[0,0],[0,120.95],[0,0],[120.951,0],[0,-120.95],[0,0]],"v":[[-514,-219],[-733,0],[-733,0],[-514,219],[514,219],[733,0],[514,-219]]}}},{"ty":"fl","bm":0,"hd":false,"nm":"Fill 1","c":{"a":0,"k":[0.9529,0.9529,0.9529]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}}]}],"ind":9},{"ty":5,"nm":"file-icon-name","sr":1,"st":198,"op":285,"ip":198,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[2.168,-13.347,0]},"s":{"a":0,"k":[10,10,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[140.62,102.33,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":1,"k":[{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[0],"t":198},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[100],"t":203},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[100],"t":259},{"s":[0],"t":264}]}},"ef":[],"t":{"m":{"a":{"a":0,"k":[0,0]},"g":1},"p":{},"a":[],"d":{"k":[{"s":{"f":"SFProText-Regular","s":120,"t":"Safari Export.zip","fc":[0,0,0],"lh":144,"tr":0,"ps":[-305.25,-139.429],"sz":[610.5,278.859],"j":2,"ca":0},"t":0}]}},"ind":10},{"ty":2,"nm":"file-icon.png","sr":1,"st":198,"op":285,"ip":198,"hd":false,"cl":"png","ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[104.5,106.5,0]},"s":{"a":0,"k":[34.4,34.4,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[140.4,65.2,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":1,"k":[{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[0],"t":198},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[100],"t":203},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[100],"t":259},{"s":[0],"t":264}]}},"ef":[],"refId":"image_0","ind":11},{"ty":4,"nm":"icon-document-upload","sr":1,"st":145,"op":249,"ip":145,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0]},"s":{"a":0,"k":[10,10,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[77.2,151.9,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":1,"k":[{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[0],"t":145},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[100],"t":149},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[100],"t":193},{"s":[0],"t":198}]}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"nm":"icon-document-upload","it":[{"ty":"sh","bm":0,"hd":false,"nm":"Path 1","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[7.625,0],[0,0],[0,-27.614],[0,0],[-27.614,0],[0,0],[3.066,4.65],[2.158,0],[0,0],[0,19.33],[0,0],[-19.33,0],[0,0],[0,0],[-20.711,0],[0,0],[0,0],[-3.088,-0.821],[0,4.769],[0,0],[5.391,5.391]],"o":[[-5.391,-5.391],[0,0],[-27.614,0],[0,0],[0,27.614],[0,0],[5.57,0],[-1.188,-1.802],[0,0],[-19.33,0],[0,0],[0,-19.33],[0,0],[0,0],[0,20.711],[0,0],[0,0],[0,3.196],[4.609,1.225],[0,0],[0,-7.625],[0,0]],"v":[[16.529,-91.579],[-3.8,-100],[-40,-100],[-90,-50],[-90,50],[-40,100],[-10.668,100],[-5.13,87.977],[-10.457,85],[-40,85],[-75,50],[-75,-50],[-40,-85],[-10,-85],[-10,-57.5],[27.5,-20],[55,-20],[55,-9.704],[60.465,-2.985],[70,-9.76],[70,-26.198],[61.581,-46.528]]}}},{"ty":"mm","bm":0,"hd":false,"nm":"Merge Paths 1","mm":5},{"ty":"sh","bm":0,"hd":false,"nm":"Path 2","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,24.853],[24.853,0],[0,-24.853],[-24.853,0]],"o":[[0,-24.853],[-24.853,0],[0,24.853],[24.853,0]],"v":[[90,55],[45,10],[0,55],[45,100]]}}},{"ty":"mm","bm":0,"hd":false,"nm":"Merge Paths 2","mm":5},{"ty":"sh","bm":0,"hd":false,"nm":"Path 3","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[-1.287,-0.006],[-0.971,-0.971],[0,0],[0,0],[1.953,-1.953],[0,0],[1.953,1.953],[0,0],[0,0],[2.761,0],[0,0],[0,2.761],[0,0],[0,0],[1.953,1.952],[0,0],[-1.953,1.953],[0,0],[0,0]],"o":[[0.982,-0.982],[1.272,0.006],[0,0],[0,0],[1.953,1.953],[0,0],[-1.953,1.953],[0,0],[0,0],[0,2.761],[0,0],[-2.761,0],[0,0],[0,0],[-1.952,1.952],[0,0],[-1.952,-1.953],[0,0],[0,0],[0,0]],"v":[[41.463,25.905],[45.022,24.44],[48.536,25.905],[52.124,29.493],[72.466,49.837],[72.466,56.908],[68.931,60.443],[61.86,60.443],[52.499,51.082],[52.499,77.5],[47.499,82.5],[42.499,82.5],[37.499,77.5],[37.499,51.084],[28.178,60.405],[21.107,60.405],[17.571,56.869],[17.571,49.798],[37.876,29.493],[37.928,29.44]]}}},{"ty":"mm","bm":0,"hd":false,"nm":"Merge Paths 3","mm":5},{"ty":"sh","bm":0,"hd":false,"nm":"Path 4","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,12.426],[0,0],[-0.295,-0.295],[0,0],[-0.265,-0.317]],"o":[[-12.426,0],[0,0],[0.318,0.265],[0,0],[0.295,0.295],[0,0]],"v":[[27.5,-35],[5,-57.5],[5,-81.812],[5.921,-80.972],[50.972,-35.92],[51.81,-35]]}}},{"ty":"mm","bm":0,"hd":false,"nm":"Merge Paths 4","mm":5},{"ty":"fl","bm":0,"hd":false,"nm":"Fill 1","c":{"a":0,"k":[0,0,0]},"r":1,"o":{"a":0,"k":84}},{"ty":"tr","a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}}]}],"ind":12},{"ty":5,"nm":"button-label","sr":1,"st":145,"op":249,"ip":145,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[-28.481,-7.255,0]},"s":{"a":0,"k":[10,10,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[135.93,152.8,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":1,"k":[{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[0],"t":145},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[96],"t":149},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[96],"t":193},{"s":[0],"t":198}]}},"ef":[],"t":{"m":{"a":{"a":0,"k":[0,0]},"g":1},"p":{},"a":[],"d":{"k":[{"s":{"f":"SFProText-Regular","s":130,"t":"Upload File...","fc":[0,0,0],"lh":180,"tr":-8,"ps":[-423.21,-65.844],"sz":[846.42,131.688],"j":0,"ca":0},"t":0}]}},"ind":13},{"ty":4,"nm":"button-bg 1","sr":1,"st":145,"op":249,"ip":145,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0]},"s":{"a":0,"k":[10,10,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[140.2,151.85,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":1,"k":[{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[0],"t":145},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[100],"t":149},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[100],"t":193},{"s":[0],"t":198}]}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"nm":"button-bg","it":[{"ty":"rc","bm":0,"hd":false,"nm":"Rectangle Path 1","d":1,"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":100},"s":{"a":0,"k":[1840,357]}},{"ty":"fl","bm":0,"hd":false,"nm":"Fill 1","c":{"a":1,"k":[{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[0.949,0.949,0.949],"t":180},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[0.8549,0.8549,0.8549],"t":181},{"s":[0.949,0.949,0.949],"t":186}]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}}]}],"ind":14},{"ty":5,"nm":"button-label","sr":1,"st":145,"op":249,"ip":145,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[2.252,-33.783,0]},"s":{"a":0,"k":[10,10,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[140.2,108.1,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":1,"k":[{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[0],"t":145},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[100],"t":149},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[100],"t":193},{"s":[0],"t":198}]}},"ef":[],"t":{"m":{"a":{"a":0,"k":[0,0]},"g":1},"p":{},"a":[],"d":{"k":[{"s":{"f":"SFProText-Bold","s":112.5,"t":"Export Safari Passwords","fc":[1,1,1],"lh":150,"tr":-18,"j":2,"ca":0},"t":0}]}},"ind":15},{"ty":4,"nm":"button-bg","sr":1,"st":145,"op":249,"ip":145,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0]},"s":{"a":0,"k":[10,10,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[140.2,108.05,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":1,"k":[{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[0],"t":145},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[100],"t":149},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[100],"t":193},{"s":[0],"t":198}]}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"nm":"button-bg","it":[{"ty":"rc","bm":0,"hd":false,"nm":"Rectangle Path 1","d":1,"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":100},"s":{"a":0,"k":[1840,357]}},{"ty":"fl","bm":0,"hd":false,"nm":"Fill 1","c":{"a":0,"k":[0.2235,0.4118,0.9373]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}}]}],"ind":16},{"ty":2,"nm":"safari-ddg.png","sr":1,"st":145,"op":249,"ip":145,"hd":false,"cl":"png","ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[96,96,0]},"s":{"a":0,"k":[34,34,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[139.2,48.4,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":1,"k":[{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[0],"t":145},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[100],"t":149},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[100],"t":193},{"s":[0],"t":198}]}},"ef":[],"refId":"image_1","ind":17},{"ty":3,"nm":"null-p3","sr":1,"st":-129,"op":145,"ip":50,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[50,50,0]},"s":{"a":0,"k":[10,10,100]},"sk":{"a":0,"k":0},"p":{"a":1,"k":[{"o":{"x":0.32,"y":0.94},"i":{"x":0.6,"y":1},"s":[152,106.13,0],"t":50},{"s":[140,106.13,0],"t":55}]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":0}},"ef":[],"ind":18},{"ty":5,"nm":"text-export-browsing-data","sr":1,"st":-51,"op":145,"ip":50,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0.293,-42.275,0]},"s":{"a":0,"k":[100,100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[50,-556.75,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":1,"k":[{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[0],"t":50},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[84],"t":55},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[84],"t":140},{"s":[0],"t":144}]}},"ef":[],"t":{"m":{"a":{"a":0,"k":[0,0]},"g":1},"p":{},"a":[],"d":{"k":[{"s":{"f":"SFPro-Semibold","s":120,"t":"Export Browsing Data","fc":[0,0,0],"lh":144,"tr":0,"j":2,"ca":0},"t":0}]}},"ind":19,"parent":18},{"ty":4,"nm":"title-bg 2","sr":1,"st":-51,"op":145,"ip":50,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0]},"s":{"a":0,"k":[10,10,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[140,111.3,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":1,"k":[{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[0],"t":50},{"s":[100],"t":55}]}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"nm":"Rectangle 1","it":[{"ty":"sh","bm":0,"hd":false,"nm":"Path 1","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,-176.731],[0,0],[0,0],[0,0],[176.73,0]],"o":[[-176.731,0],[0,0],[0,0],[0,0],[0,-176.731],[0,0]],"v":[[-760,-885],[-1080,-565],[-1080,-459],[1080,-459],[1080,-565],[760,-885]]}}},{"ty":"fl","bm":0,"hd":false,"nm":"Fill 1","c":{"a":0,"k":[0.9804,0.9804,0.9804]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}}]}],"ind":20},{"ty":5,"nm":"button-label","sr":1,"st":50,"op":145,"ip":50,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0.467,-40.787,0]},"s":{"a":0,"k":[100,100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[921.5,1872,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":1,"k":[{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[100],"t":140},{"s":[0],"t":144}]}},"ef":[],"t":{"m":{"a":{"a":0,"k":[0,0]},"g":1},"p":{},"a":[],"d":{"k":[{"s":{"f":"SFProText-Bold","s":112.5,"t":"Save to Downloads","fc":[1,1,1],"lh":150,"tr":-18,"j":2,"ca":0},"t":0}]}},"ind":21,"parent":23},{"ty":4,"nm":"button","sr":1,"st":50,"op":145,"ip":50,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0]},"s":{"a":0,"k":[100,100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[921,1872,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":1,"k":[{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[100],"t":140},{"s":[0],"t":144}]}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"nm":"Rectangle 2","it":[{"ty":"rc","bm":0,"hd":false,"nm":"Rectangle Path 1","d":1,"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":1000},"s":{"a":0,"k":[1840,300]}},{"ty":"fl","bm":0,"hd":false,"nm":"Fill 1","c":{"a":1,"k":[{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[0.0078,0.6039,1],"t":128},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[0,0.4863,0.8078],"t":129},{"s":[0.0078,0.6039,1],"t":134}]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}}]}],"ind":22,"parent":23},{"ty":0,"nm":"browsing-data-page","sr":1,"st":50,"op":145,"ip":50,"hd":false,"ddd":0,"bm":0,"tt":1,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[920.5,1010,0]},"s":{"a":0,"k":[100,100,100]},"sk":{"a":0,"k":0},"p":{"a":1,"k":[{"o":{"x":0.66,"y":0},"i":{"x":0.34,"y":1},"s":[50,656.75,0],"t":85,"ti":[0,0,0],"to":[0,0,0]},{"s":[50,-223.25,0],"t":115}]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":1,"k":[{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[0],"t":50},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[100],"t":55},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[100],"t":140},{"s":[0],"t":144}]}},"ef":[],"w":1841,"h":2020,"refId":"comp_3","ind":23,"parent":18},{"ty":4,"nm":"browsing-data-mask","sr":1,"st":50,"op":145,"ip":50,"hd":false,"ddd":0,"bm":0,"hasMask":false,"td":1,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0]},"s":{"a":0,"k":[100,100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[50,180.75,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"nm":"mobile-bg","it":[{"ty":"sh","bm":0,"hd":false,"nm":"Path 1","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,-176.731],[0,0],[0,0],[0,0],[176.731,0]],"o":[[-176.731,0],[0,0],[0,0],[0,0],[0,-176.731],[0,0]],"v":[[-760,-960],[-1080,-640],[-1080,960],[1080,960],[1080,-640],[760,-960]]}}},{"ty":"fl","bm":0,"hd":false,"nm":"Fill 1","c":{"a":0,"k":[0.8784,0.8784,0.8784]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}}]}],"ind":24,"parent":18},{"ty":3,"nm":"null-p1","sr":1,"st":0,"op":51,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[50,50,0]},"s":{"a":0,"k":[10,10,100]},"sk":{"a":0,"k":0},"p":{"a":1,"k":[{"o":{"x":0.4,"y":0},"i":{"x":0.68,"y":0.06},"s":[139.88,113.01,0],"t":45},{"s":[127.88,113.01,0],"t":50}]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":0}},"ef":[],"ind":25},{"ty":4,"nm":"Rectangle 881","sr":1,"st":0,"op":51,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0]},"s":{"a":0,"k":[100,100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[49.163,129.879,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":1,"k":[{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[100],"t":45},{"s":[0],"t":50}]}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"nm":"Rectangle 881","it":[{"ty":"rc","bm":0,"hd":false,"nm":"Rectangle Path 1","d":1,"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":290},"s":{"a":0,"k":[1510,60]}},{"ty":"fl","bm":0,"hd":false,"nm":"Fill 1","c":{"a":0,"k":[0,0,0]},"r":1,"o":{"a":0,"k":60}},{"ty":"tr","a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}}]}],"ind":26,"parent":25},{"ty":4,"nm":"Rectangle 880","sr":1,"st":0,"op":51,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0]},"s":{"a":0,"k":[100,100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[49.163,-10.121,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":1,"k":[{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[100],"t":45},{"s":[0],"t":50}]}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"nm":"Rectangle 880","it":[{"ty":"rc","bm":0,"hd":false,"nm":"Rectangle Path 1","d":1,"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":290},"s":{"a":0,"k":[1510,60]}},{"ty":"fl","bm":0,"hd":false,"nm":"Fill 1","c":{"a":0,"k":[0,0,0]},"r":1,"o":{"a":0,"k":84}},{"ty":"tr","a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}}]}],"ind":27,"parent":25},{"ty":4,"nm":"Ellipse 2","sr":1,"st":0,"op":51,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0]},"s":{"a":0,"k":[100,100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[48.837,-369.879,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":1,"k":[{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[100],"t":45},{"s":[0],"t":50}]}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"nm":"Ellipse 2","it":[{"ty":"el","bm":0,"hd":false,"nm":"Ellipse Path 1","d":1,"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[40,40]}},{"ty":"fl","bm":0,"hd":false,"nm":"Fill 1","c":{"a":0,"k":[0.2235,0.4118,0.9373]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}}]}],"ind":28,"parent":25},{"ty":4,"nm":"Vector 3 (Stroke)","sr":1,"st":0,"op":51,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0]},"s":{"a":0,"k":[100,100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[48.837,-489.879,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":1,"k":[{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[100],"t":45},{"s":[0],"t":50}]}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"nm":"Vector 3 (Stroke)","it":[{"ty":"sh","bm":0,"hd":false,"nm":"Path 1","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,-9.665],[0,0],[-9.665,0],[0,9.665],[0,0],[9.665,0]],"o":[[0,0],[0,9.665],[9.665,0],[0,0],[0,-9.665],[-9.665,0]],"v":[[-17.5,-50],[-17.5,50],[0,67.5],[17.5,50],[17.5,-50],[0,-67.5]]}}},{"ty":"fl","bm":0,"hd":false,"nm":"Fill 1","c":{"a":0,"k":[0.2235,0.4118,0.9373]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}}]}],"ind":29,"parent":25},{"ty":4,"nm":"Vector 2 (Stroke)","sr":1,"st":0,"op":51,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0]},"s":{"a":0,"k":[100,100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[48.947,-474,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":1,"k":[{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[100],"t":45},{"s":[0],"t":50}]}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"nm":"Vector 2 (Stroke)","it":[{"ty":"sh","bm":0,"hd":false,"nm":"Path 1","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[22.979,-40.827],[0,0],[-45.896,0],[0,0],[22.361,39.994]],"o":[[-22.864,-40.892],[0,0],[-22.511,39.996],[0,0],[45.821,0],[0,0]],"v":[[52.907,-173.402],[-51.75,-173.55],[-213.984,114.692],[-161.697,204.121],[161.697,204.121],[214.067,114.84]]}}},{"ty":"mm","bm":0,"hd":false,"nm":"Merge Paths 1","mm":5},{"ty":"sh","bm":0,"hd":false,"nm":"Path 2","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[-7.621,-13.631],[0,0],[15.274,0],[0,0],[-7.504,13.332]],"o":[[7.66,-13.609],[0,0],[7.454,13.331],[0,0],[-15.299,0],[0,0]],"v":[[-16.892,-153.931],[17.994,-153.882],[179.154,134.36],[161.697,164.121],[-161.697,164.121],[-179.125,134.311]]}}},{"ty":"mm","bm":0,"hd":false,"nm":"Merge Paths 2","mm":5},{"ty":"fl","bm":0,"hd":false,"nm":"Fill 1","c":{"a":0,"k":[0.2314,0.5255,0.9686]},"r":1,"o":{"a":0,"k":60}},{"ty":"tr","a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}}]}],"ind":30,"parent":25},{"ty":5,"nm":"button-label-active","sr":1,"st":0,"op":51,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0.522,-42.792,0]},"s":{"a":0,"k":[100,100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[51.163,589.879,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":1,"k":[{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[100],"t":45},{"s":[0],"t":50}]}},"ef":[],"t":{"m":{"a":{"a":0,"k":[0,0]},"g":1},"p":{},"a":[],"d":{"k":[{"s":{"f":"SFProText-Bold","s":112.5,"t":"Export to Files","fc":[1,1,1],"lh":150,"tr":-18,"j":2,"ca":0},"t":0}]}},"ind":31,"parent":25},{"ty":4,"nm":"button-bg-active","sr":1,"st":0,"op":51,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0]},"s":{"a":0,"k":[100,100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[51.163,589.879,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":1,"k":[{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[100],"t":45},{"s":[0],"t":50}]}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"nm":"Rectangle 2","it":[{"ty":"rc","bm":0,"hd":false,"nm":"Rectangle Path 1","d":1,"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":1000},"s":{"a":0,"k":[1840,300]}},{"ty":"fl","bm":0,"hd":false,"nm":"Fill 1","c":{"a":1,"k":[{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[0.0078,0.6039,1],"t":34},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[0,0.4863,0.8078],"t":35},{"s":[0.0078,0.6039,1],"t":40}]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}}]}],"ind":32,"parent":25},{"ty":4,"nm":"page-bg-full-dark","sr":1,"st":198,"op":285,"ip":198,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0]},"s":{"a":0,"k":[10,10,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[140,96.5,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":1,"k":[{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[0],"t":198},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[100],"t":203},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[100],"t":256},{"s":[0],"t":261}]}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"nm":"Rectangle 1","it":[{"ty":"sh","bm":0,"hd":false,"nm":"Path 1","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,-176.731],[0,0],[0,0],[0,0],[176.73,0]],"o":[[-176.731,0],[0,0],[0,0],[0,0],[0,-176.731],[0,0]],"v":[[-760,-885],[-1080,-565],[-1080,1045],[1080,1045],[1080,-565],[760,-885]]}}},{"ty":"fl","bm":0,"hd":false,"nm":"Fill 1","c":{"a":0,"k":[0.8784,0.8784,0.8784]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}}]}],"ind":33},{"ty":4,"nm":"page-bg-full","sr":1,"st":146,"op":605,"ip":145,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0]},"s":{"a":0,"k":[10,10,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[140,96.5,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":1,"k":[{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[0],"t":145},{"s":[100],"t":149}]}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"nm":"Rectangle 1","it":[{"ty":"sh","bm":0,"hd":false,"nm":"Path 1","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,-176.731],[0,0],[0,0],[0,0],[176.73,0]],"o":[[-176.731,0],[0,0],[0,0],[0,0],[0,-176.731],[0,0]],"v":[[-760,-885],[-1080,-565],[-1080,1045],[1080,1045],[1080,-565],[760,-885]]}}},{"ty":"fl","bm":0,"hd":false,"nm":"Fill 1","c":{"a":0,"k":[0.9804,0.9804,0.9804]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}}]}],"ind":34},{"ty":4,"nm":"page-bg","sr":1,"st":0,"op":300,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0]},"s":{"a":0,"k":[10,10,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[140,111.3,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"nm":"Rectangle 1","it":[{"ty":"sh","bm":0,"hd":false,"nm":"Path 1","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,-176.731],[0,0],[0,0],[0,0],[176.73,0]],"o":[[-176.731,0],[0,0],[0,0],[0,0],[0,-176.731],[0,0]],"v":[[-760,-885],[-1080,-565],[-1080,885],[1080,885],[1080,-565],[760,-885]]}}},{"ty":"fl","bm":0,"hd":false,"nm":"Fill 1","c":{"a":0,"k":[0.9804,0.9804,0.9804]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}}]}],"ind":35},{"ty":4,"nm":"mobile-frame","sr":1,"st":0,"op":758,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0]},"s":{"a":0,"k":[10,10,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[140,100,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"nm":"mobile-frame","it":[{"ty":"sh","bm":0,"hd":false,"nm":"Path 1","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[220.914,0],[0,0],[0,-220.914],[0,0],[0,0],[0,0],[-176.731,0],[0,0],[0,-176.731],[0,0],[0,0]],"o":[[0,-220.914],[0,0],[-220.914,0],[0,0],[0,0],[0,0],[0,-176.731],[0,0],[176.731,0],[0,0],[0,0],[0,0]],"v":[[1160,-600],[760,-1000],[-760,-1000],[-1160,-600],[-1160,1000],[-1080,1000],[-1080,-600],[-760,-920],[760,-920],[1080,-600],[1080,1000],[1160,1000]]}}},{"ty":"fl","bm":0,"hd":false,"nm":"Fill 1","c":{"a":0,"k":[0,0,0]},"r":1,"o":{"a":0,"k":60}},{"ty":"tr","a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}}]}],"ind":36},{"ty":4,"nm":"mobile-bg","sr":1,"st":0,"op":756,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0]},"s":{"a":0,"k":[10,10,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[140,104,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"nm":"mobile-bg","it":[{"ty":"sh","bm":0,"hd":false,"nm":"Path 1","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,-176.731],[0,0],[0,0],[0,0],[176.731,0]],"o":[[-176.731,0],[0,0],[0,0],[0,0],[0,-176.731],[0,0]],"v":[[-760,-960],[-1080,-640],[-1080,960],[1080,960],[1080,-640],[760,-960]]}}},{"ty":"fl","bm":0,"hd":false,"nm":"Fill 1","c":{"a":0,"k":[0.8784,0.8784,0.8784]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}}]}],"ind":37}],"v":"5.12.1","fr":25,"op":351,"ip":0,"fonts":{"list":[{"ascent":74.316,"fClass":"","fFamily":"SF Pro Text","fStyle":"Bold","fName":"SFProText-Bold","fPath":"","fWeight":"","origin":0},{"ascent":70.459,"fClass":"","fFamily":"SF Pro","fStyle":"Semibold","fName":"SFPro-Semibold","fPath":"","fWeight":"","origin":0},{"ascent":73.535,"fClass":"","fFamily":"SF Pro Text","fStyle":"Regular","fName":"SFProText-Regular","fPath":"","fWeight":"","origin":0},{"ascent":70.459,"fClass":"","fFamily":"SF Pro","fStyle":"Regular","fName":"SFPro-Regular","fPath":"","fWeight":"","origin":0}]},"assets":[{"id":"image_0","u":"","e":1,"w":209,"h":213,"p":"data:image/webp;base64,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"},{"id":"image_1","u":"","e":1,"w":192,"h":192,"p":"data:image/webp;base64,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"},{"nm":"Confetti 128 x 96","id":"comp_0","fr":25,"layers":[{"ty":4,"nm":"String 4 Mask ","sr":1,"st":0,"op":500,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"td":1,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0]},"s":{"a":0,"k":[200,-200,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[59.094,133.36,0]},"r":{"a":0,"k":180},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"nm":"Union","it":[{"ty":"sh","bm":0,"hd":false,"nm":"Path 1","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[-0.261,-3.103],[0,0],[0,0],[0,0],[0,0],[0.64,0.524],[0,0],[-1.577,-0.01],[-4.449,1.78],[-10.195,10.195],[-3.548,8.87],[0.017,2.627],[0.387,0.578]],"o":[[1.803,1.965],[0,0],[0,0],[0,0],[0,0],[-0.758,-0.372],[0,0],[0.639,0.299],[2.627,0.017],[8.87,-3.548],[10.195,-10.195],[1.78,-4.449],[-0.013,-2.014],[0,0]],"v":[[20.185,-57.5],[23.249,-49.815],[57.319,44],[44.319,57.5],[-54.181,23],[-55.219,22.17],[-57.319,20.828],[-51.681,15.131],[-48.462,15.703],[-37.775,13.223],[-7.964,-7.703],[12.963,-37.515],[15.443,-48.202],[14.618,-51.873]]}}},{"ty":"fl","bm":0,"hd":false,"nm":"Fill 1","c":{"a":0,"k":[0.851,0.851,0.851]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}}]}],"ind":1,"parent":9},{"ty":4,"nm":"String 4","sr":1,"st":0,"op":500,"ip":0,"hd":false,"ddd":0,"bm":0,"tt":2,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[-19.25,-95.75,0]},"s":{"a":0,"k":[100,100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[236.75,96.25,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"nm":"Shape 1","it":[{"ty":"sh","bm":0,"hd":false,"nm":"Path 1","d":1,"ks":{"a":0,"k":{"c":false,"i":[[0,0],[53.012,39.649],[-11.75,27.25]],"o":[[0,0],[-60.5,-45.25],[0,0]],"v":[[-94.5,62.25],[-4,-86.25],[37.25,-166.75]]}}},{"ty":"tm","bm":0,"hd":false,"nm":"Trim Paths 1","e":{"a":1,"k":[{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[3],"t":32},{"s":[12],"t":37}]},"o":{"a":1,"k":[{"o":{"x":0.4,"y":0.411},"i":{"x":0.833,"y":0.833},"s":[9],"t":32},{"s":[366],"t":50}]},"s":{"a":0,"k":0},"m":1},{"ty":"st","bm":0,"hd":false,"nm":"Stroke 1","lc":2,"lj":1,"ml":4,"o":{"a":0,"k":100},"w":{"a":0,"k":16},"c":{"a":0,"k":[0.2235,0.4118,0.9373]}},{"ty":"tr","a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}}]}],"ind":2},{"ty":4,"nm":"String 3 Mask","sr":1,"st":0,"op":500,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"td":1,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0]},"s":{"a":0,"k":[200,-200,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[59.094,133.36,0]},"r":{"a":0,"k":180},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"nm":"Union","it":[{"ty":"sh","bm":0,"hd":false,"nm":"Path 1","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[-0.261,-3.103],[0,0],[0,0],[0,0],[0,0],[0.64,0.524],[0,0],[-1.577,-0.01],[-4.449,1.78],[-10.195,10.195],[-3.548,8.87],[0.017,2.627],[0.387,0.578]],"o":[[1.803,1.965],[0,0],[0,0],[0,0],[0,0],[-0.758,-0.372],[0,0],[0.639,0.299],[2.627,0.017],[8.87,-3.548],[10.195,-10.195],[1.78,-4.449],[-0.013,-2.014],[0,0]],"v":[[20.185,-57.5],[23.249,-49.815],[57.319,44],[44.319,57.5],[-54.181,23],[-55.219,22.17],[-57.319,20.828],[-51.681,15.131],[-48.462,15.703],[-37.775,13.223],[-7.964,-7.703],[12.963,-37.515],[15.443,-48.202],[14.618,-51.873]]}}},{"ty":"fl","bm":0,"hd":false,"nm":"Fill 1","c":{"a":0,"k":[0.851,0.851,0.851]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}}]}],"ind":3,"parent":9},{"ty":4,"nm":"String 3","sr":1,"st":0,"op":500,"ip":0,"hd":false,"ddd":0,"bm":0,"tt":2,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[-19.25,-95.75,0]},"s":{"a":0,"k":[100,100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[236.75,96.25,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"nm":"Shape 1","it":[{"ty":"sh","bm":0,"hd":false,"nm":"Path 1","d":1,"ks":{"a":0,"k":{"c":false,"i":[[0,0],[-136.384,-28.823],[39,-40.25],[0,0]],"o":[[19.833,-12.667],[97,20.5],[-53.208,54.913],[0,0]],"v":[[-91.5,98.75],[164,-17.5],[127,80.25],[192.75,144.25]]}}},{"ty":"tm","bm":0,"hd":false,"nm":"Trim Paths 1","e":{"a":1,"k":[{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[3],"t":30},{"s":[12],"t":35}]},"o":{"a":1,"k":[{"o":{"x":0.4,"y":0.571},"i":{"x":0.833,"y":0.833},"s":[9],"t":30},{"s":[366],"t":55}]},"s":{"a":0,"k":0},"m":1},{"ty":"st","bm":0,"hd":false,"nm":"Stroke 1","lc":2,"lj":1,"ml":4,"o":{"a":0,"k":100},"w":{"a":0,"k":16},"c":{"a":0,"k":[0.2235,0.4118,0.9373]}},{"ty":"tr","a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}}]}],"ind":4},{"ty":4,"nm":"String 2 Mask","sr":1,"st":0,"op":500,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"td":1,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0]},"s":{"a":0,"k":[200,-200,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[59.094,133.36,0]},"r":{"a":0,"k":180},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"nm":"Union","it":[{"ty":"sh","bm":0,"hd":false,"nm":"Path 1","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[-0.261,-3.103],[0,0],[0,0],[0,0],[0,0],[0.64,0.524],[0,0],[-1.577,-0.01],[-4.449,1.78],[-10.195,10.195],[-3.548,8.87],[0.017,2.627],[0.387,0.578]],"o":[[1.803,1.965],[0,0],[0,0],[0,0],[0,0],[-0.758,-0.372],[0,0],[0.639,0.299],[2.627,0.017],[8.87,-3.548],[10.195,-10.195],[1.78,-4.449],[-0.013,-2.014],[0,0]],"v":[[20.185,-57.5],[23.249,-49.815],[57.319,44],[44.319,57.5],[-54.181,23],[-55.219,22.17],[-57.319,20.828],[-51.681,15.131],[-48.462,15.703],[-37.775,13.223],[-7.964,-7.703],[12.963,-37.515],[15.443,-48.202],[14.618,-51.873]]}}},{"ty":"fl","bm":0,"hd":false,"nm":"Fill 1","c":{"a":0,"k":[0.851,0.851,0.851]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}}]}],"ind":5,"parent":9},{"ty":4,"nm":"String 2","sr":1,"st":0,"op":500,"ip":0,"hd":false,"ddd":0,"bm":0,"tt":2,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[-19.25,-95.75,0]},"s":{"a":0,"k":[100,100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[236.75,96.25,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"nm":"Shape 1","it":[{"ty":"sh","bm":0,"hd":false,"nm":"Path 1","d":1,"ks":{"a":0,"k":{"c":false,"i":[[0,0],[-84.75,28.5],[-12.19,1.875],[-17.599,4.219],[-10.735,7.753],[-19.209,11.615],[0,0]],"o":[[36,-52.75],[11.69,-3.931],[17.887,-2.752],[12.877,-3.087],[18.197,-13.143],[17.803,-10.764],[0,0]],"v":[[-97,71.25],[61.75,-56.5],[62,-93.5],[107.25,-63.5],[98.5,-102.25],[165.75,-105.75],[195.25,-160.75]]}}},{"ty":"tm","bm":0,"hd":false,"nm":"Trim Paths 1","e":{"a":1,"k":[{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[3],"t":31},{"s":[12],"t":36}]},"o":{"a":1,"k":[{"o":{"x":0.4,"y":0.571},"i":{"x":0.833,"y":0.833},"s":[9],"t":31},{"s":[366],"t":56}]},"s":{"a":0,"k":0},"m":1},{"ty":"st","bm":0,"hd":false,"nm":"Stroke 1","lc":2,"lj":1,"ml":4,"o":{"a":0,"k":100},"w":{"a":0,"k":16},"c":{"a":0,"k":[0.8706,0.3451,0.2]}},{"ty":"tr","a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}}]}],"ind":6},{"ty":4,"nm":"String 1 Mask","sr":1,"st":0,"op":500,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"td":1,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0]},"s":{"a":0,"k":[200,-200,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[59.094,133.36,0]},"r":{"a":0,"k":180},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"nm":"Union","it":[{"ty":"sh","bm":0,"hd":false,"nm":"Path 1","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[-0.261,-3.103],[0,0],[0,0],[0,0],[0,0],[0.64,0.524],[0,0],[-1.577,-0.01],[-4.449,1.78],[-10.195,10.195],[-3.548,8.87],[0.017,2.627],[0.387,0.578]],"o":[[1.803,1.965],[0,0],[0,0],[0,0],[0,0],[-0.758,-0.372],[0,0],[0.639,0.299],[2.627,0.017],[8.87,-3.548],[10.195,-10.195],[1.78,-4.449],[-0.013,-2.014],[0,0]],"v":[[20.185,-57.5],[23.249,-49.815],[57.319,44],[44.319,57.5],[-54.181,23],[-55.219,22.17],[-57.319,20.828],[-51.681,15.131],[-48.462,15.703],[-37.775,13.223],[-7.964,-7.703],[12.963,-37.515],[15.443,-48.202],[14.618,-51.873]]}}},{"ty":"fl","bm":0,"hd":false,"nm":"Fill 1","c":{"a":0,"k":[0.851,0.851,0.851]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}}]}],"ind":7,"parent":9},{"ty":4,"nm":"String 1","sr":1,"st":0,"op":500,"ip":0,"hd":false,"ddd":0,"bm":0,"tt":2,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[-19.25,-95.75,0]},"s":{"a":0,"k":[100,100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[236.75,96.25,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"nm":"Shape 1","it":[{"ty":"sh","bm":0,"hd":false,"nm":"Path 1","d":1,"ks":{"a":0,"k":{"c":false,"i":[[0,0],[3.25,56.5],[25.575,-12.787],[17.041,-25.292],[0,0]],"o":[[19.833,-12.667],[-3.458,-60.115],[-110,55],[-23.75,35.25],[0,0]],"v":[[-91,54.25],[23.75,-116.5],[-141,-154],[-100.25,-86.25],[-225.75,-37.25]]}}},{"ty":"tm","bm":0,"hd":false,"nm":"Trim Paths 1","e":{"a":1,"k":[{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[3],"t":30},{"s":[12],"t":35}]},"o":{"a":1,"k":[{"o":{"x":0.4,"y":0.57},"i":{"x":0.833,"y":0.833},"s":[8],"t":30},{"s":[366],"t":55}]},"s":{"a":0,"k":0},"m":1},{"ty":"st","bm":0,"hd":false,"nm":"Stroke 1","lc":2,"lj":1,"ml":4,"o":{"a":0,"k":100},"w":{"a":0,"k":16},"c":{"a":0,"k":[0.8706,0.3451,0.2]}},{"ty":"tr","a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}}]}],"ind":8},{"ty":0,"nm":"Cone Inside","sr":1,"st":0,"op":500,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[96.5,95,0]},"s":{"a":0,"k":[100,100,100]},"sk":{"a":0,"k":0},"p":{"a":1,"k":[{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[278.5,153.5,0],"t":15,"ti":[0,0,0],"to":[0,0,0]},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[255.5,176.55,0],"t":16,"ti":[0,0,0],"to":[0,0,0]},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[244,188.1,0],"t":17,"ti":[0,0,0],"to":[0,0,0]},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[237.062,195.088,0],"t":18,"ti":[0,0,0],"to":[0,0,0]},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[230.609,201.141,0],"t":20,"ti":[0,0,0],"to":[0,0,0]},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[228.5,204,0],"t":25,"ti":[0,0,0],"to":[0,0,0]},{"o":{"x":0.167,"y":0.117},"i":{"x":0.833,"y":0.883},"s":[228.5,204,0],"t":30,"ti":[0,0,0],"to":[0,0,0]},{"o":{"x":0.167,"y":0.12},"i":{"x":0.833,"y":0.88},"s":[253.5,178.45,0],"t":31,"ti":[0,0,0],"to":[0,0,0]},{"o":{"x":0.167,"y":0.115},"i":{"x":0.833,"y":0.885},"s":[268.778,163.677,0],"t":32,"ti":[0,0,0],"to":[0,0,0]},{"o":{"x":0.167,"y":0.128},"i":{"x":0.833,"y":0.872},"s":[278.993,152.905,0],"t":33,"ti":[0,0,0],"to":[0,0,0]},{"o":{"x":0.167,"y":0.136},"i":{"x":0.833,"y":0.864},"s":[285.423,147.491,0],"t":34,"ti":[0,0,0],"to":[0,0,0]},{"o":{"x":0.167,"y":0.094},"i":{"x":0.833,"y":0.906},"s":[288.352,145.409,0],"t":35,"ti":[0,0,0],"to":[0,0,0]},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[288.682,144.927,0],"t":36,"ti":[0,0,0],"to":[0,0,0]},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[287.135,145.572,0],"t":37,"ti":[0,0,0],"to":[0,0,0]},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[284.746,147.724,0],"t":38,"ti":[0,0,0],"to":[0,0,0]},{"s":[278.5,153.5,0],"t":40}]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"ef":[],"w":193,"h":190,"refId":"comp_1","ind":9},{"ty":0,"nm":"Cone","sr":1,"st":0,"op":500,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[112.935,265.147,0]},"s":{"a":1,"k":[{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[100,100,100],"t":15},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[100,83.5,100],"t":16},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[100,75.6,100],"t":17},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[100,71.1,100],"t":18},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[100,68.4,100],"t":19},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[100,66.8,100],"t":20},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[100,65.9,100],"t":21},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[100,65.3,100],"t":22},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[100,65.1,100],"t":23},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[100,65,100],"t":24},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[100,65,100],"t":25},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[100,65,100],"t":30},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[100,82.3,100],"t":31},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[100,94.1,100],"t":32},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[100,100.5,100],"t":33},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[100,103.7,100],"t":34},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[100,105,100],"t":35},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[100,105.2,100],"t":36},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[100,104.6,100],"t":37},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[100,103.5,100],"t":38},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[100,101.9,100],"t":39},{"s":[100,100,100],"t":40}]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[126.457,306.86,0]},"r":{"a":0,"k":45},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"ef":[],"w":226,"h":255,"refId":"comp_2","ind":10}]},{"nm":"Cone Inside","id":"comp_1","fr":25,"layers":[{"ty":4,"nm":"Cone Inside","sr":1,"st":0,"op":500,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[128,96,0]},"s":{"a":0,"k":[200,200,100]},"sk":{"a":0,"k":0},"p":{"s":true,"x":{"a":0,"k":74.087},"y":{"a":0,"k":132.227},"z":{"a":0,"k":0}},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"nm":"Cone Rim","it":[{"ty":"sh","bm":0,"hd":false,"nm":"Path 1","d":1,"ks":{"a":0,"k":{"c":true,"i":[[21.528,21.528],[-9.226,9.226],[-21.528,-21.527],[9.226,-9.226]],"o":[[-21.527,-21.528],[9.226,-9.226],[21.528,21.528],[-9.226,9.226]],"v":[[-16.706,16.706],[-38.98,-38.98],[16.705,-16.706],[38.979,38.98]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 2","d":1,"ks":{"a":0,"k":{"c":true,"i":[[-2.627,0.018],[-0.423,0.424],[-0.017,2.58],[1.779,4.449],[10.195,10.194],[8.869,3.548],[2.627,-0.017],[0.423,-0.424],[0.017,-2.58],[-1.779,-4.449],[-10.195,-10.195],[-8.869,-3.548]],"o":[[2.58,-0.017],[0.424,-0.423],[0.018,-2.627],[-3.548,-8.869],[-10.194,-10.195],[-4.449,-1.779],[-2.58,0.017],[-0.424,0.423],[-0.017,2.627],[3.548,8.869],[10.194,10.194],[4.449,1.779]],"v":[[29.361,34.544],[33.41,33.411],[34.543,29.361],[32.063,18.674],[11.136,-11.137],[-18.675,-32.064],[-29.362,-34.544],[-33.411,-33.411],[-34.544,-29.362],[-32.064,-18.674],[-11.137,11.137],[18.674,32.064]]}}},{"ty":"fl","bm":0,"hd":false,"nm":"Fill 1","c":{"a":0,"k":[0.8863,0.6431,0.0706]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[139.779,77.685]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}}]},{"ty":"gr","bm":0,"hd":false,"nm":"Cone Inside","it":[{"ty":"sh","bm":0,"hd":false,"nm":"Path 1","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[-9.226,9.226],[21.528,21.528]],"o":[[21.528,21.528],[9.226,-9.226],[0,0]],"v":[[-32.456,0.956],[23.23,23.23],[0.956,-32.456]]}}},{"ty":"fl","bm":0,"hd":false,"nm":"Fill 1","c":{"a":0,"k":[1,0.8706,0.4784]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[155.527,93.434]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}}]},{"ty":"gr","bm":0,"hd":false,"nm":"Cone Shadow Inside","it":[{"ty":"sh","bm":0,"hd":false,"nm":"Path 1","d":1,"ks":{"a":0,"k":{"c":true,"i":[[9.226,-9.226],[21.528,21.528],[-9.226,9.227],[-21.528,-21.527]],"o":[[-9.226,9.226],[-21.527,-21.528],[9.226,-9.226],[21.528,21.528]],"v":[[38.979,38.979],[-16.706,16.706],[-38.98,-38.98],[16.705,-16.706]]}}},{"ty":"fl","bm":0,"hd":false,"nm":"Fill 1","c":{"a":0,"k":[1,0.8,0.2]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[139.779,77.685]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}}]}],"ind":1}]},{"nm":"Cone","id":"comp_2","fr":25,"layers":[{"ty":4,"nm":"Cone Inner Shadow","sr":1,"st":0,"op":500,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0]},"s":{"a":0,"k":[200,200,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[113.383,49.021,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"nm":"Cone Inner Shadow","it":[{"ty":"sh","bm":0,"hd":false,"nm":"Path 1","d":1,"ks":{"a":0,"k":{"c":true,"i":[[-30.445,0],[0,13.048],[30.445,0],[0,-13.048]],"o":[[30.445,0],[0,-13.048],[-30.445,0],[0,13.048]],"v":[[0,23.625],[55.125,0],[0,-23.625],[-55.125,0]]}}},{"ty":"fl","bm":0,"hd":false,"nm":"Fill 1","c":{"a":0,"k":[1,0.8,0.2]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}}]}],"ind":1},{"ty":4,"nm":"Stripes","sr":1,"st":0,"op":500,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0]},"s":{"a":0,"k":[200,-200,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[113.379,138.323,0]},"r":{"a":0,"k":135},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"nm":"Stripes","it":[{"ty":"sh","bm":0,"hd":false,"nm":"Path 1","d":1,"ks":{"a":0,"k":{"c":true,"i":[[9.837,-9.837],[9.933,-4.221],[0,0],[-12.763,12.763],[-1.754,10.496],[0,0]],"o":[[-9.836,9.836],[0,0],[10.496,-1.754],[12.764,-12.764],[0,0],[-4.221,9.933]],"v":[[2.134,2.135],[-28.452,23.747],[-40.788,19.328],[-3.434,-3.434],[19.327,-40.788],[23.746,-28.452]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 2","d":1,"ks":{"a":0,"k":{"c":true,"i":[[6.519,-6.519],[6.806,-3.111],[0,0],[-9.636,9.636],[-0.285,7.317],[0,0]],"o":[[-6.519,6.519],[0,0],[7.317,-0.285],[9.636,-9.636],[0,0],[-3.111,6.806]],"v":[[18.386,18.387],[-2.136,33.175],[-14.882,28.609],[12.817,12.818],[28.608,-14.881],[33.174,-2.134]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"Path 3","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[-3.845,3.845],[-2.372,4.164],[0,0],[5.957,-5.957],[5.091,-1.177]],"o":[[4.165,-2.372],[3.845,-3.845],[0,0],[-1.177,5.091],[-5.958,5.958],[0,0]],"v":[[19.121,40.788],[31.324,31.324],[40.788,19.121],[36.864,8.165],[25.755,25.755],[8.164,36.864]]}}},{"ty":"fl","bm":0,"hd":false,"nm":"Fill 1","c":{"a":0,"k":[0.5294,0.4314,0.7961]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}}]}],"ind":2},{"ty":4,"nm":"Cone Shadow Outer","sr":1,"st":0,"op":500,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0]},"s":{"a":0,"k":[200,200,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[166.786,141.244,0]},"r":{"a":0,"k":-180},"sa":{"a":0,"k":0},"o":{"a":0,"k":40}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"nm":"Cone Shadow Outer","it":[{"ty":"sh","bm":0,"hd":false,"nm":"Path 1","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[3.591,-7.599],[0,0],[-3.852,0],[0,0],[0,2.9]],"o":[[0,-8.405],[0,0],[-1.646,3.483],[0,0],[2.899,0],[0,0]],"v":[[26.703,-38.226],[11.708,-41.591],[-26.194,38.62],[-21.447,46.113],[21.453,46.113],[26.703,40.863]]}}},{"ty":"fl","bm":0,"hd":false,"nm":"Fill 1","c":{"a":0,"k":[1,0.8,0.2]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}}]}],"ind":3},{"ty":4,"nm":"Cone 1","sr":1,"st":0,"op":500,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0]},"s":{"a":0,"k":[200,200,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[113.378,150.862,0]},"r":{"a":0,"k":-180},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"nm":"Cone","it":[{"ty":"sh","bm":0,"hd":false,"nm":"Path 1","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[4.736,-10.023],[0,0],[-3.852,0],[0,0],[1.646,3.483]],"o":[[-4.736,-10.023],[0,0],[-1.646,3.483],[0,0],[3.852,0],[0,0]],"v":[[11.867,-43.403],[-11.867,-43.403],[-52.897,43.428],[-48.15,50.921],[48.15,50.921],[52.897,43.428]]}}},{"ty":"fl","bm":0,"hd":false,"nm":"Fill 1","c":{"a":0,"k":[1,0.8392,0.3608]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}}]}],"ind":4}]},{"nm":"browsing-data-page","id":"comp_3","fr":25,"layers":[{"ty":4,"nm":"Check 2","sr":1,"st":0,"op":500,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0]},"s":{"a":0,"k":[100,100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[219,1200.237,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"nm":"Check","it":[{"ty":"sh","bm":0,"hd":false,"nm":"Path 1","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[2.219,2.174],[2.174,-2.219],[0,0],[1.473,1.504],[0,0],[2.219,-2.174],[-2.174,-2.219],[0,0],[-5.885,6.007]],"o":[[2.174,-2.219],[-2.219,-2.174],[0,0],[-1.473,1.504],[0,0],[-2.174,-2.219],[-2.219,2.174],[0,0],[5.885,6.007],[0,0]],"v":[[35.893,-14.676],[35.811,-22.631],[27.857,-22.549],[-5.849,11.859],[-11.218,11.859],[-27.857,-5.126],[-35.811,-5.208],[-35.893,2.746],[-19.254,19.732],[2.187,19.732]]}}},{"ty":"fl","bm":0,"hd":false,"nm":"Fill 1","c":{"a":0,"k":[1,1,1]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}}]}],"ind":1},{"ty":4,"nm":"BG 2","sr":1,"st":0,"op":500,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0]},"s":{"a":0,"k":[100,100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[219.5,1200,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"nm":"BG","it":[{"ty":"sh","bm":0,"hd":false,"nm":"Path 1","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,41.421],[-41.421,0],[0,-41.421],[41.421,0]],"o":[[0,-41.421],[41.421,0],[0,41.421],[-41.421,0]],"v":[[-75,0],[0,-75],[75,0],[0,75]]}}},{"ty":"fl","bm":0,"hd":false,"nm":"Fill 1","c":{"a":0,"k":[0.0078,0.6039,1]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}}]}],"ind":2},{"ty":4,"nm":"Shape 2","sr":1,"st":0,"op":500,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0]},"s":{"a":0,"k":[100,100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[516.5,1200,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"nm":"Shape","it":[{"ty":"sh","bm":0,"hd":false,"nm":"Path 1","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[27.614,0],[0,0],[0,-27.614],[0,0],[-27.614,0],[0,0],[0,27.614]],"o":[[0,-27.614],[0,0],[-27.614,0],[0,0],[0,27.614],[0,0],[27.614,0],[0,0]],"v":[[100,-40],[50,-90],[-50,-90],[-100,-40],[-100,40],[-50,90],[50,90],[100,40]]}}},{"ty":"mm","bm":0,"hd":false,"nm":"Merge Paths 1","mm":5},{"ty":"sh","bm":0,"hd":false,"nm":"Path 2","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[-19.33,0],[0,0],[0,-19.33],[0,0],[19.33,0],[0,0],[0,19.33]],"o":[[0,-19.33],[0,0],[19.33,0],[0,0],[0,19.33],[0,0],[-19.33,0],[0,0]],"v":[[-85,-40],[-50,-75],[50,-75],[85,-40],[85,40],[50,75],[-50,75],[-85,40]]}}},{"ty":"mm","bm":0,"hd":false,"nm":"Merge Paths 2","mm":5},{"ty":"sh","bm":0,"hd":false,"nm":"Path 3","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,4.142],[4.142,0],[0,0],[0,-4.142],[-4.142,0],[0,0]],"o":[[0,-4.142],[0,0],[-4.142,0],[0,4.142],[0,0],[4.142,0]],"v":[[-25,42.5],[-32.5,35],[-62.5,35],[-70,42.5],[-62.5,50],[-32.5,50]]}}},{"ty":"mm","bm":0,"hd":false,"nm":"Merge Paths 3","mm":5},{"ty":"sh","bm":0,"hd":false,"nm":"Path 4","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,4.142],[4.142,0],[0,0],[0,-4.142],[-4.142,0],[0,0]],"o":[[0,-4.142],[0,0],[-4.142,0],[0,4.142],[0,0],[4.142,0]],"v":[[2.5,42.5],[-5,35],[-7.5,35],[-15,42.5],[-7.5,50],[-5,50]]}}},{"ty":"mm","bm":0,"hd":false,"nm":"Merge Paths 4","mm":5},{"ty":"sh","bm":0,"hd":false,"nm":"Path 5","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,4.142],[4.142,0],[0,0],[0,-4.142],[-4.142,0],[0,0]],"o":[[0,-4.142],[0,0],[-4.142,0],[0,4.142],[0,0],[4.142,0]],"v":[[70,42.5],[62.5,35],[22.5,35],[15,42.5],[22.5,50],[62.5,50]]}}},{"ty":"mm","bm":0,"hd":false,"nm":"Merge Paths 5","mm":5},{"ty":"sh","bm":0,"hd":false,"nm":"Path 6","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[4.142,0],[0,0],[0,-4.142],[0,0],[-4.142,0],[0,0],[0,4.142]],"o":[[0,-4.142],[0,0],[-4.142,0],[0,0],[0,4.142],[0,0],[4.142,0],[0,0]],"v":[[-25,-5],[-32.5,-12.5],[-62.5,-12.5],[-70,-5],[-70,12.5],[-62.5,20],[-32.5,20],[-25,12.5]]}}},{"ty":"mm","bm":0,"hd":false,"nm":"Merge Paths 6","mm":5},{"ty":"fl","bm":0,"hd":false,"nm":"Fill 1","c":{"a":0,"k":[0.0078,0.6039,1]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}}]}],"ind":3},{"ty":4,"nm":"Rectangle 6","sr":1,"st":0,"op":500,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0]},"s":{"a":0,"k":[100,100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[920.5,1200,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"nm":"Rectangle 6","it":[{"ty":"rc","bm":0,"hd":false,"nm":"Rectangle Path 1","d":1,"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":195},"s":{"a":0,"k":[1840,440]}},{"ty":"fl","bm":0,"hd":false,"nm":"Fill 1","c":{"a":0,"k":[0.949,0.949,0.949]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}}]}],"ind":4},{"ty":4,"nm":"Check 1","sr":1,"st":0,"op":500,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0]},"s":{"a":0,"k":[100,100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[219,710.237,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"nm":"Check","it":[{"ty":"sh","bm":0,"hd":false,"nm":"Path 1","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[2.219,2.174],[2.174,-2.219],[0,0],[1.473,1.504],[0,0],[2.219,-2.174],[-2.174,-2.219],[0,0],[-5.885,6.007]],"o":[[2.174,-2.219],[-2.219,-2.174],[0,0],[-1.473,1.504],[0,0],[-2.174,-2.219],[-2.219,2.174],[0,0],[5.885,6.007],[0,0]],"v":[[35.893,-14.676],[35.811,-22.631],[27.857,-22.549],[-5.849,11.859],[-11.218,11.859],[-27.857,-5.126],[-35.811,-5.208],[-35.893,2.746],[-19.254,19.732],[2.187,19.732]]}}},{"ty":"fl","bm":0,"hd":false,"nm":"Fill 1","c":{"a":0,"k":[1,1,1]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}}]}],"ind":5},{"ty":4,"nm":"BG 1","sr":1,"st":0,"op":500,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0]},"s":{"a":0,"k":[100,100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[219.5,710,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"nm":"BG","it":[{"ty":"sh","bm":0,"hd":false,"nm":"Path 1","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,41.421],[-41.421,0],[0,-41.421],[41.421,0]],"o":[[0,-41.421],[41.421,0],[0,41.421],[-41.421,0]],"v":[[-75,0],[0,-75],[75,0],[0,75]]}}},{"ty":"fl","bm":0,"hd":false,"nm":"Fill 1","c":{"a":0,"k":[0.0078,0.6039,1]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}}]}],"ind":6},{"ty":4,"nm":"Shape 1","sr":1,"st":0,"op":500,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0]},"s":{"a":0,"k":[100,100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[516.5,710,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"nm":"Shape","it":[{"ty":"sh","bm":0,"hd":false,"nm":"Path 1","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,13.807],[13.807,0.001],[0,-13.807],[-13.807,0]],"o":[[0,-13.807],[-13.807,0],[0,13.807],[13.806,-0.001]],"v":[[60,-35],[35,-60],[10,-35],[35,-10]]}}},{"ty":"mm","bm":0,"hd":false,"nm":"Merge Paths 1","mm":5},{"ty":"sh","bm":0,"hd":false,"nm":"Path 2","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,5.523],[-5.523,0],[0,-5.523],[5.522,-0.001]],"o":[[0,-5.523],[5.522,0.001],[0,5.522],[-5.523,0]],"v":[[25,-35],[35,-45],[45,-35],[35,-25]]}}},{"ty":"mm","bm":0,"hd":false,"nm":"Merge Paths 2","mm":5},{"ty":"sh","bm":0,"hd":false,"nm":"Path 3","d":1,"ks":{"a":0,"k":{"c":true,"i":[[-0.002,38.688],[38.675,0.001],[0,-38.691],[-1.365,-5.463],[0.591,-0.591],[0,0],[-0.051,-10.007],[0,0],[-15.131,0],[0,0],[0,12.426],[0,0],[0,0],[-3.751,3.754],[0,0],[-1.634,-0.408],[-5.863,0]],"o":[[0,-38.69],[-38.677,0],[0,5.868],[0.408,1.632],[0,0],[-7.074,7.079],[0,0],[0.08,15.13],[0,0],[12.426,0],[0,0],[0,0],[5.307,0],[0,0],[0.591,-0.591],[5.458,1.365],[38.674,-0.001]],"v":[[100,-29.932],[29.981,-100],[-40.039,-29.932],[-37.959,-12.891],[-38.623,-9.434],[-89.023,41.006],[-100,67.705],[-99.97,72.646],[-72.47,100],[-62.549,100],[-40.049,77.5],[-40.049,70.156],[-30.224,70.156],[-16.074,64.297],[9.492,38.711],[12.949,38.037],[29.981,40.127]]}}},{"ty":"mm","bm":0,"hd":false,"nm":"Merge Paths 3","mm":5},{"ty":"sh","bm":0,"hd":false,"nm":"Path 4","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,4.633],[-30.383,0],[0,-30.415],[30.38,-0.001],[4.278,1.07],[4.898,-4.899],[0,0],[1.326,0],[0,0],[0.002,-8.283],[0,0],[4.142,0],[0,0],[0.037,6.877],[0,0],[-4.245,4.247],[0,0],[1.472,5.893]],"o":[[0,-30.416],[30.381,0.001],[-0.002,30.414],[-4.626,0],[-5.897,-1.475],[0,0],[-0.938,0.938],[0,0],[-8.283,0],[0,0],[0,4.142],[0,0],[-6.877,0],[0,0],[-0.031,-6.005],[0,0],[4.892,-4.895],[-1.071,-4.284]],"v":[[-25.039,-29.932],[29.981,-85],[85,-29.932],[29.981,25.127],[16.592,23.486],[-1.113,28.105],[-26.689,53.691],[-30.224,55.156],[-40.049,55.156],[-55.049,70.156],[-55.049,77.5],[-62.549,85],[-72.47,85],[-84.97,72.568],[-85,67.627],[-78.418,51.602],[-28.017,1.162],[-23.398,-16.523]]}}},{"ty":"mm","bm":0,"hd":false,"nm":"Merge Paths 4","mm":5},{"ty":"fl","bm":0,"hd":false,"nm":"Fill 1","c":{"a":0,"k":[0.0078,0.6039,1]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}}]}],"ind":7},{"ty":4,"nm":"Rectangle 5","sr":1,"st":0,"op":500,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0]},"s":{"a":0,"k":[100,100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[920.5,710,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"nm":"Rectangle 5","it":[{"ty":"rc","bm":0,"hd":false,"nm":"Rectangle Path 1","d":1,"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":195},"s":{"a":0,"k":[1840,440]}},{"ty":"fl","bm":0,"hd":false,"nm":"Fill 1","c":{"a":0,"k":[0.949,0.949,0.949]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}}]}],"ind":8},{"ty":4,"nm":"Check","sr":1,"st":0,"op":500,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0]},"s":{"a":0,"k":[100,100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[219,220.237,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"nm":"Check","it":[{"ty":"sh","bm":0,"hd":false,"nm":"Path 1","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[2.219,2.174],[2.174,-2.219],[0,0],[1.473,1.504],[0,0],[2.219,-2.174],[-2.174,-2.219],[0,0],[-5.885,6.007]],"o":[[2.174,-2.219],[-2.219,-2.174],[0,0],[-1.473,1.504],[0,0],[-2.174,-2.219],[-2.219,2.174],[0,0],[5.885,6.007],[0,0]],"v":[[35.893,-14.676],[35.811,-22.631],[27.857,-22.549],[-5.849,11.859],[-11.218,11.859],[-27.857,-5.126],[-35.811,-5.208],[-35.893,2.746],[-19.254,19.732],[2.187,19.732]]}}},{"ty":"fl","bm":0,"hd":false,"nm":"Fill 1","c":{"a":0,"k":[1,1,1]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}}]}],"ind":9},{"ty":4,"nm":"BG","sr":1,"st":0,"op":500,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0]},"s":{"a":0,"k":[100,100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[219.5,220,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"nm":"BG","it":[{"ty":"sh","bm":0,"hd":false,"nm":"Path 1","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,41.421],[-41.421,0],[0,-41.421],[41.421,0]],"o":[[0,-41.421],[41.421,0],[0,41.421],[-41.421,0]],"v":[[-75,0],[0,-75],[75,0],[0,75]]}}},{"ty":"fl","bm":0,"hd":false,"nm":"Fill 1","c":{"a":0,"k":[0.0078,0.6039,1]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}}]}],"ind":10},{"ty":4,"nm":"Shape","sr":1,"st":0,"op":500,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0]},"s":{"a":0,"k":[100,100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[517,220.004,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"nm":"Shape","it":[{"ty":"sh","bm":0,"hd":false,"nm":"Path 1","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0.204,-0.15],[0.389,0.241],[7.482,2.439],[26.548,-9.201],[0,-9.68],[0,0],[-6.113,-3.357],[-7,3.126],[-9.18,-4.601],[-6.269,3.142],[-26.421,-11.799],[-6.037,3.315],[0,8.332],[0,0],[10.213,3.273],[14.491,-5.012],[3.626,-2.583]],"o":[[-0.355,-0.229],[-3.993,-2.471],[-15.06,-4.909],[-9.894,3.429],[0,0],[0,8.332],[6.037,3.315],[26.421,-11.799],[6.269,3.142],[9.18,-4.601],[7,3.126],[6.113,-3.357],[0,0],[0,-10.079],[-28.847,-9.244],[-7.188,2.486],[-0.217,0.154]],"v":[[-0.364,-77.01],[-1.48,-77.716],[-18.771,-85.666],[-81.935,-83.756],[-97.5,-61.159],[-97.5,69.008],[-86.474,87.077],[-65.646,88.017],[-10.139,87.383],[10.139,87.383],[65.646,88.017],[86.474,87.077],[97.5,69.008],[97.5,-60.649],[81.16,-83.646],[16.437,-85.664],[0.268,-77.467]]}}},{"ty":"mm","bm":0,"hd":false,"nm":"Merge Paths 1","mm":5},{"ty":"sh","bm":0,"hd":false,"nm":"Path 2","d":1,"ks":{"a":0,"k":{"c":true,"i":[[13.066,-5.5],[0,0],[-0.558,0.398],[-5.68,1.965],[-25.944,-8.314],[0,-4.216],[0,0],[2.194,-1.205],[2.365,1.056]],"o":[[0,0],[0.422,-0.335],[2.601,-1.853],[11.247,-3.89],[3.399,1.089],[0,0],[0,1.924],[-2.27,1.246],[-28.367,-12.668]],"v":[[7.5,72.095],[7.5,-64.146],[8.97,-65.25],[21.34,-71.488],[76.582,-69.362],[82.5,-60.649],[82.5,69.008],[79.254,73.929],[71.762,74.321]]}}},{"ty":"mm","bm":0,"hd":false,"nm":"Merge Paths 2","mm":5},{"ty":"sh","bm":0,"hd":false,"nm":"Path 3","d":1,"ks":{"a":0,"k":{"c":true,"i":[[-2.365,1.056],[-13.066,-5.5],[0,0],[0.707,0.438],[6.173,2.012],[23.169,-8.029],[0,-4.099],[0,0],[-2.194,-1.205]],"o":[[28.367,-12.668],[0,0],[-0.541,-0.369],[-3.141,-1.944],[-12.251,-3.993],[-3.125,1.083],[0,0],[0,1.924],[2.27,1.246]],"v":[[-71.762,74.32],[-7.5,72.095],[-7.5,-63.745],[-9.374,-64.961],[-23.42,-71.405],[-77.023,-69.583],[-82.5,-61.159],[-82.5,69.008],[-79.254,73.929]]}}},{"ty":"mm","bm":0,"hd":false,"nm":"Merge Paths 3","mm":5},{"ty":"fl","bm":0,"hd":false,"nm":"Fill 1","c":{"a":0,"k":[0.0078,0.6039,1]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}}]}],"ind":11},{"ty":4,"nm":"Rectangle 4","sr":1,"st":0,"op":500,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0]},"s":{"a":0,"k":[100,100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[920.5,220,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"nm":"Rectangle 4","it":[{"ty":"rc","bm":0,"hd":false,"nm":"Rectangle Path 1","d":1,"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":195},"s":{"a":0,"k":[1840,440]}},{"ty":"fl","bm":0,"hd":false,"nm":"Fill 1","c":{"a":0,"k":[0.949,0.949,0.949]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}}]}],"ind":12}]}]} \ No newline at end of file diff --git a/iOS/DuckDuckGoTests/DataImport/CredentialExchangeImportHandlerTests.swift b/iOS/DuckDuckGoTests/DataImport/CredentialExchangeImportHandlerTests.swift new file mode 100644 index 00000000000..9b2cb568689 --- /dev/null +++ b/iOS/DuckDuckGoTests/DataImport/CredentialExchangeImportHandlerTests.swift @@ -0,0 +1,554 @@ +// +// CredentialExchangeImportHandlerTests.swift +// DuckDuckGoTests +// +// Copyright © 2026 DuckDuckGo. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +import XCTest +import AuthenticationServices +@testable import BrowserServicesKit +import Common +import SecureStorage +@testable import DuckDuckGo + +@available(iOS 26.0, *) +final class CredentialExchangeImportHandlerTests: XCTestCase { + + func testWhenParsingApplePasswordsPayloadThenCustomTitleMultipleURLsAndPortAreMappedCorrectly() { + let sut = makeSUT() + let credentialData = makeCredentialData( + accounts: [ + makeAccount( + userName: "", + email: "", + items: [ + makeItem( + title: "Custom title", + scopeURLs: ["https://fill.dev"], + username: "testCustomTitle", + password: "tyqvej-muszoW-0jowco" + ), + makeItem( + title: "fill.dev", + scopeURLs: ["https://fill.dev"], + username: "test", + password: "xenqo1-kizhEm-womquc" + ), + makeItem( + title: "localhost:8000", + scopeURLs: [], + username: "dax@duck.com", + password: "hapcI9-dipvax-zitgib" + ), + makeItem( + title: "nytimes.com", + scopeURLs: ["https://myaccount.nytimes.com", "https://nytimes.com"], + username: "dax@duck.com", + password: "Xyzzoh-vufhap-2hokhy" + ) + ] + ) + ] + ) + + let importedCredentials = sut.importedLoginCredentials(from: credentialData) + + XCTAssertEqual( + importedCredentials, + [ + ImportedLoginCredential( + title: "Custom title", + url: "fill.dev", + username: "testCustomTitle", + password: "tyqvej-muszoW-0jowco" + ), + ImportedLoginCredential( + url: "fill.dev", + username: "test", + password: "xenqo1-kizhEm-womquc" + ), + ImportedLoginCredential( + url: "localhost:8000", + username: "dax@duck.com", + password: "hapcI9-dipvax-zitgib" + ), + ImportedLoginCredential( + url: "nytimes.com", + username: "dax@duck.com", + password: "Xyzzoh-vufhap-2hokhy" + ) + ] + ) + } + + func testWhenTwoEquivalentCredentialsExistThenParserKeepsBothForImporterDeduplication() { + let sut = makeSUT() + let credentialData = makeCredentialData( + accounts: [ + makeAccount( + userName: "", + email: "", + items: [ + makeItem( + title: "example.com", + scopeURLs: ["https://example.com"], + username: "duplicate-user", + password: "duplicate-pass" + ), + makeItem( + title: "example.com", + scopeURLs: ["https://example.com"], + username: "duplicate-user", + password: "duplicate-pass" + ) + ] + ) + ] + ) + + let importedCredentials = sut.importedLoginCredentials(from: credentialData) + + XCTAssertEqual( + importedCredentials, + [ + ImportedLoginCredential( + url: "example.com", + username: "duplicate-user", + password: "duplicate-pass" + ), + ImportedLoginCredential( + url: "example.com", + username: "duplicate-user", + password: "duplicate-pass" + ) + ] + ) + } + + func testWhenUsernameFieldIsBlankThenAccountEmailIsUsedAsFallbackUsername() { + let sut = makeSUT() + let credentialData = makeCredentialData( + accounts: [ + makeAccount( + userName: "", + email: "fallback@duck.com", + items: [ + makeItem( + title: "Custom title", + subtitle: "portal.example.com", + scopeURLs: nil, + username: " ", + password: "account-fallback-password" + ) + ] + ) + ] + ) + + let importedCredentials = sut.importedLoginCredentials(from: credentialData) + + XCTAssertEqual( + importedCredentials, + [ + ImportedLoginCredential( + title: "Custom title", + url: "portal.example.com", + username: "fallback@duck.com", + password: "account-fallback-password" + ) + ] + ) + } + + func testWhenScopeContainsWWWAndOtherSubdomainsThenWWWDomainIsPreferred() { + let sut = makeSUT() + let credentialData = makeCredentialData( + accounts: [ + makeAccount( + userName: "", + email: "", + items: [ + makeItem( + title: "Portal login", + scopeURLs: ["https://m.example.com", "https://www.example.com", "https://account.example.com"], + username: "duck-user", + password: "duck-password" + ) + ] + ) + ] + ) + + let importedCredentials = sut.importedLoginCredentials(from: credentialData) + + XCTAssertEqual(importedCredentials.count, 1) + XCTAssertEqual(importedCredentials.first?.url, "www.example.com") + } + + func testWhenScopeContainsOnlySubdomainsThenShortestHostIsPreferred() { + let sut = makeSUT() + let credentialData = makeCredentialData( + accounts: [ + makeAccount( + userName: "", + email: "", + items: [ + makeItem( + title: "Account login", + scopeURLs: ["https://a.b.example.com", "https://sub.example.com", "https://x.sub.example.com"], + username: "duck-user", + password: "duck-password" + ) + ] + ) + ] + ) + + let importedCredentials = sut.importedLoginCredentials(from: credentialData) + + XCTAssertEqual(importedCredentials.count, 1) + XCTAssertEqual(importedCredentials.first?.url, "sub.example.com") + } + + func testWhenScopeContainsEqualDepthSubdomainsThenAlphabeticallyFirstHostIsPreferred() { + let sut = makeSUT() + let credentialData = makeCredentialData( + accounts: [ + makeAccount( + userName: "", + email: "", + items: [ + makeItem( + title: "Account login", + scopeURLs: ["https://b.example.com", "https://a.example.com"], + username: "duck-user", + password: "duck-password" + ) + ] + ) + ] + ) + + let importedCredentials = sut.importedLoginCredentials(from: credentialData) + + XCTAssertEqual(importedCredentials.count, 1) + XCTAssertEqual(importedCredentials.first?.url, "a.example.com") + } + + func testWhenScopeAndSubtitleAreMissingAndTitleIsURLThenTitleHostIsUsedAsDomain() { + let sut = makeSUT() + let credentialData = makeCredentialData( + accounts: [ + makeAccount( + userName: "", + email: "", + items: [ + makeItem( + title: "https://account.duck.com/login", + scopeURLs: nil, + username: "duck-user", + password: "duck-password" + ) + ] + ) + ] + ) + + let importedCredentials = sut.importedLoginCredentials(from: credentialData) + + XCTAssertEqual(importedCredentials.count, 1) + XCTAssertEqual(importedCredentials.first?.url, "account.duck.com") + } + + func testWhenScopeAndSubtitleAreMissingAndTitleIsNotDomainThenDomainIsEmptyString() { + let sut = makeSUT() + let credentialData = makeCredentialData( + accounts: [ + makeAccount( + userName: "", + email: "", + items: [ + makeItem( + title: "My important account", + scopeURLs: nil, + username: "duck-user", + password: "duck-password" + ) + ] + ) + ] + ) + + let importedCredentials = sut.importedLoginCredentials(from: credentialData) + + XCTAssertEqual(importedCredentials.count, 1) + XCTAssertEqual(importedCredentials.first?.url, "") + } + + func testWhenCredentialIsNotBasicAuthenticationOrHasNoPasswordThenCredentialIsSkipped() { + let sut = makeSUT() + let credentialData = makeCredentialData( + accounts: [ + makeAccount( + userName: "", + email: "", + items: [ + makeItem( + title: "Ignored credential types", + scopeURLs: ["https://valid.example.com"], + credentials: [ + makeNoteCredential(content: "ignored-note"), + makeBasicAuthenticationCredential(username: "missing-password", password: nil), + makeBasicAuthenticationCredential(username: "kept-user", password: "kept-password") + ] + ) + ] + ) + ] + ) + + let importedCredentials = sut.importedLoginCredentials(from: credentialData) + + XCTAssertEqual(importedCredentials.count, 1) + XCTAssertEqual(importedCredentials.first?.url, "valid.example.com") + XCTAssertEqual(importedCredentials.first?.username, "kept-user") + XCTAssertEqual(importedCredentials.first?.password, "kept-password") + } + + func testWhenCredentialUsernameIsBlankThenAccountUsernameIsPreferredOverEmail() { + let sut = makeSUT() + let credentialData = makeCredentialData( + accounts: [ + makeAccount( + userName: "account-username", + email: "account-email@duck.com", + items: [ + makeItem( + title: "Account fallback", + subtitle: "fallback.example.com", + scopeURLs: nil, + username: " ", + password: "fallback-password" + ) + ] + ) + ] + ) + + let importedCredentials = sut.importedLoginCredentials(from: credentialData) + + XCTAssertEqual(importedCredentials.count, 1) + XCTAssertEqual(importedCredentials.first?.username, "account-username") + } + + func testWhenCredentialAndAccountUsernamesAndEmailAreBlankThenUsernameDefaultsToEmptyString() { + let sut = makeSUT() + let credentialData = makeCredentialData( + accounts: [ + makeAccount( + userName: " ", + email: "\n", + items: [ + makeItem( + title: "No username sources", + subtitle: "nouser.example.com", + scopeURLs: nil, + username: nil, + password: "fallback-password" + ) + ] + ) + ] + ) + + let importedCredentials = sut.importedLoginCredentials(from: credentialData) + + XCTAssertEqual(importedCredentials.count, 1) + XCTAssertEqual(importedCredentials.first?.username, "") + } + + func testWhenTitleMatchesSelectedDomainExactlyThenTitleIsDropped() { + let sut = makeSUT() + let credentialData = makeCredentialData( + accounts: [ + makeAccount( + userName: "", + email: "", + items: [ + makeItem( + title: "localhost", + subtitle: "localhost", + scopeURLs: nil, + username: "duck-user", + password: "duck-password" + ) + ] + ) + ] + ) + + let importedCredentials = sut.importedLoginCredentials(from: credentialData) + + XCTAssertEqual(importedCredentials.count, 1) + XCTAssertNil(importedCredentials.first?.title) + XCTAssertEqual(importedCredentials.first?.url, "localhost") + } + + func testWhenTitleMatchesParentHostOfSelectedDomainThenTitleIsDropped() { + let sut = makeSUT() + let credentialData = makeCredentialData( + accounts: [ + makeAccount( + userName: "", + email: "", + items: [ + makeItem( + title: "localhost", + subtitle: "api.localhost", + scopeURLs: nil, + username: "duck-user", + password: "duck-password" + ) + ] + ) + ] + ) + + let importedCredentials = sut.importedLoginCredentials(from: credentialData) + + XCTAssertEqual(importedCredentials.count, 1) + XCTAssertNil(importedCredentials.first?.title) + XCTAssertEqual(importedCredentials.first?.url, "api.localhost") + } +} + +@available(iOS 26.0, *) +private extension CredentialExchangeImportHandlerTests { + + func makeSUT() -> CredentialExchangeImportHandler { + CredentialExchangeImportHandler( + loginImporter: MockLoginImporter(), + reporter: MockSecureVaultReporting(), + tld: TLD() + ) + } + + func makeCredentialData(accounts: [ASImportableAccount]) -> ASExportedCredentialData { + ASExportedCredentialData( + accounts: accounts, + formatVersion: .v1, + exporterRelyingPartyIdentifier: "apple.com", + exporterDisplayName: "Apple Passwords", + timestamp: Date(timeIntervalSince1970: 1_776_542_457) + ) + } + + func makeAccount(userName: String, email: String, items: [ASImportableItem]) -> ASImportableAccount { + ASImportableAccount( + id: makeIdentifier(), + userName: userName, + email: email, + fullName: nil, + collections: [], + items: items + ) + } + + func makeItem(title: String, + subtitle: String? = nil, + scopeURLs: [String]?, + username: String?, + password: String) -> ASImportableItem { + makeItem( + title: title, + subtitle: subtitle, + scopeURLs: scopeURLs, + credentials: [makeBasicAuthenticationCredential(username: username, password: password)] + ) + } + + func makeItem(title: String, + subtitle: String? = nil, + scopeURLs: [String]?, + credentials: [ASImportableCredential]) -> ASImportableItem { + ASImportableItem( + id: makeIdentifier(), + created: Date(timeIntervalSince1970: 1_776_542_400), + lastModified: Date(timeIntervalSince1970: 1_776_542_400), + title: title, + subtitle: subtitle, + favorite: false, + scope: makeScope(scopeURLs), + credentials: credentials, + tags: [] + ) + } + + func makeBasicAuthenticationCredential(username: String?, password: String?) -> ASImportableCredential { + .basicAuthentication( + .init( + userName: username.map { makeStringField(value: $0) }, + password: password.map { makePasswordField(value: $0) } + ) + ) + } + + func makeNoteCredential(content: String) -> ASImportableCredential { + .note( + .init( + content: makeStringField(value: content) + ) + ) + } + + func makeScope(_ scopeURLs: [String]?) -> ASImportableCredentialScope? { + guard let scopeURLs else { + return nil + } + + return ASImportableCredentialScope( + urls: scopeURLs.map(makeURL), + androidApps: [] + ) + } + + func makeURL(_ value: String) -> URL { + guard let url = URL(string: value) else { + fatalError("Invalid URL in test data: \(value)") + } + return url + } + + func makeStringField(value: String) -> ASImportableEditableField { + ASImportableEditableField( + id: makeIdentifier(), + fieldType: .string, + value: value + ) + } + + func makePasswordField(value: String) -> ASImportableEditableField { + ASImportableEditableField( + id: makeIdentifier(), + fieldType: .concealedString, + value: value + ) + } + + func makeIdentifier() -> Data { + Data(UUID().uuidString.utf8) + } +} diff --git a/iOS/DuckDuckGoTests/DataImport/DataImportEntryPointHandlerTests.swift b/iOS/DuckDuckGoTests/DataImport/DataImportEntryPointHandlerTests.swift new file mode 100644 index 00000000000..513c287be92 --- /dev/null +++ b/iOS/DuckDuckGoTests/DataImport/DataImportEntryPointHandlerTests.swift @@ -0,0 +1,74 @@ +// +// DataImportEntryPointHandlerTests.swift +// DuckDuckGoTests +// +// Copyright © 2026 DuckDuckGo. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +import XCTest +@testable import DuckDuckGo + +final class DataImportEntryPointHandlerTests: XCTestCase { + + private var featureFlagger: MockFeatureFlagger! + + override func setUp() { + super.setUp() + featureFlagger = MockFeatureFlagger() + } + + override func tearDown() { + featureFlagger = nil + super.tearDown() + } + + func testWhenSupportedOSAndFeatureEnabledThenDestinationIsHub() { + featureFlagger.enabledFeatureFlags = [.dataImportNewUI] + let sut = DataImportEntryPointHandler( + featureFlagger: featureFlagger, + isSupportedOSVersion: { true } + ) + + XCTAssertEqual(sut.destination(for: .passwords), .hub) + } + + func testWhenSupportedOSAndFeatureDisabledThenDestinationIsLegacy() { + let sut = DataImportEntryPointHandler( + featureFlagger: featureFlagger, + isSupportedOSVersion: { true } + ) + + XCTAssertEqual(sut.destination(for: .bookmarks), .legacy(importScreen: .bookmarks)) + } + + func testWhenUnsupportedOSAndFeatureEnabledThenDestinationIsLegacy() { + featureFlagger.enabledFeatureFlags = [.dataImportNewUI] + let sut = DataImportEntryPointHandler( + featureFlagger: featureFlagger, + isSupportedOSVersion: { false } + ) + + XCTAssertEqual(sut.destination(for: .settings), .legacy(importScreen: .settings)) + } + + func testWhenRoutingToLegacyThenSelectedImportScreenIsPreserved() { + let sut = DataImportEntryPointHandler( + featureFlagger: featureFlagger, + isSupportedOSVersion: { false } + ) + + XCTAssertEqual(sut.destination(for: .whatsNew), .legacy(importScreen: .whatsNew)) + } +} diff --git a/iOS/DuckDuckGoTests/DataImport/DataImportManagerTests.swift b/iOS/DuckDuckGoTests/DataImport/DataImportManagerTests.swift index 7c62ed2481e..b9a0e4b73cf 100644 --- a/iOS/DuckDuckGoTests/DataImport/DataImportManagerTests.swift +++ b/iOS/DuckDuckGoTests/DataImport/DataImportManagerTests.swift @@ -325,17 +325,6 @@ final class DataImportManagerTests: XCTestCase { // MARK: - Mock Classes -private class MockLoginImporter: LoginImporter { - var importedLogins: DataImportSummary? - - func importLogins(_ logins: [BrowserServicesKit.ImportedLoginCredential], reporter: SecureVaultReporting, progressCallback: @escaping (Int) throws -> Void) throws -> DataImport.DataTypeSummary { - let summary = DataImport.DataTypeSummary(successful: logins.count, duplicate: 0, failed: 0) - - self.importedLogins = [.passwords: .success(summary)] - return summary - } -} - private class MockCreditCardImporter: CreditCardImporter { var importedCreditCards: DataImportSummary? diff --git a/iOS/DuckDuckGoTests/DataImport/DataImportUserActivityHandlerTests.swift b/iOS/DuckDuckGoTests/DataImport/DataImportUserActivityHandlerTests.swift new file mode 100644 index 00000000000..d5413d5b913 --- /dev/null +++ b/iOS/DuckDuckGoTests/DataImport/DataImportUserActivityHandlerTests.swift @@ -0,0 +1,148 @@ +// +// DataImportUserActivityHandlerTests.swift +// DuckDuckGoTests +// +// Copyright © 2026 DuckDuckGo. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +import XCTest +import BrowserServicesKit +@testable import DuckDuckGo + +final class DataImportUserActivityHandlerTests: XCTestCase { + + private let callbackTimeout: TimeInterval = 5.0 + private var importHandler: MockCredentialExchangeImportHandler! + + override func setUp() { + super.setUp() + importHandler = MockCredentialExchangeImportHandler() + } + + override func tearDown() { + importHandler = nil + super.tearDown() + } + + func testWhenActivityTypeIsUnknownThenHandleReturnsFalse() { + let sut = DataImportUserActivityHandler(credentialExchangeImportHandler: importHandler) + let userActivity = NSUserActivity(activityType: "com.duckduckgo.test.unknown") + + XCTAssertFalse(sut.handle(userActivity)) + XCTAssertTrue(importHandler.handledTokens.isEmpty) + } + + func testWhenCredentialExchangeActivityHasNoTokenThenHandleReturnsFalse() { + let sut = DataImportUserActivityHandler(credentialExchangeImportHandler: importHandler) + let userActivity = NSUserActivity(activityType: DataImportUserActivityHandler.credentialExchangeActivityType) + + XCTAssertFalse(sut.handle(userActivity)) + XCTAssertTrue(importHandler.handledTokens.isEmpty) + } + + func testWhenCredentialExchangeActivityHasTokenThenImportResultIsSuccess() async { + let expectedSummary = makeSummary(successful: 3) + importHandler.summaryToReturn = expectedSummary + + var receivedResult: Result? + let completionExpectation = expectation(description: "Import result callback") + let sut = DataImportUserActivityHandler(credentialExchangeImportHandler: importHandler) { result in + receivedResult = result + completionExpectation.fulfill() + } + + let token = UUID() + let userActivity = NSUserActivity(activityType: DataImportUserActivityHandler.credentialExchangeActivityType) + userActivity.userInfo = ["ASCredentialImportToken": token] + + XCTAssertTrue(sut.handle(userActivity)) + await fulfillment(of: [completionExpectation], timeout: callbackTimeout) + XCTAssertEqual(importHandler.handledTokens, [token]) + + guard case .success(let summary)? = receivedResult else { + XCTFail("Expected import success result") + return + } + + guard case .success(let passwordSummary)? = summary[.passwords] else { + XCTFail("Expected password summary in successful result") + return + } + XCTAssertEqual(passwordSummary.successful, 3) + } + + func testWhenCredentialExchangeImportReturnsNilThenImportResultIsFailure() async { + importHandler.summaryToReturn = nil + + var receivedResult: Result? + let completionExpectation = expectation(description: "Import result callback") + let sut = DataImportUserActivityHandler(credentialExchangeImportHandler: importHandler) { result in + receivedResult = result + completionExpectation.fulfill() + } + + let token = UUID() + let userActivity = NSUserActivity(activityType: DataImportUserActivityHandler.credentialExchangeActivityType) + userActivity.userInfo = ["ASCredentialImportToken": token] + + XCTAssertTrue(sut.handle(userActivity)) + await fulfillment(of: [completionExpectation], timeout: callbackTimeout) + XCTAssertEqual(importHandler.handledTokens, [token]) + + guard case .failure? = receivedResult else { + XCTFail("Expected import failure result") + return + } + } + + func testWhenCredentialExchangeActivityIsHandledTwiceThenSecondAttemptIsIgnored() async { + importHandler.summaryToReturn = makeSummary(successful: 1) + + var callbackCount = 0 + let completionExpectation = expectation(description: "Import result callback") + completionExpectation.expectedFulfillmentCount = 1 + + let sut = DataImportUserActivityHandler(credentialExchangeImportHandler: importHandler) { _ in + callbackCount += 1 + completionExpectation.fulfill() + } + + let token = UUID() + let userActivity = NSUserActivity(activityType: DataImportUserActivityHandler.credentialExchangeActivityType) + userActivity.userInfo = ["ASCredentialImportToken": token] + + XCTAssertTrue(sut.handle(userActivity)) + XCTAssertTrue(sut.handle(userActivity)) + await fulfillment(of: [completionExpectation], timeout: callbackTimeout) + + XCTAssertEqual(importHandler.handledTokens, [token]) + XCTAssertEqual(callbackCount, 1) + } + + private func makeSummary(successful: Int) -> DataImportSummary { + [.passwords: .success(DataImport.DataTypeSummary(successful: successful, duplicate: 0, failed: 0))] + } +} + +private final class MockCredentialExchangeImportHandler: CredentialExchangeImportHandling { + + var summaryToReturn: DataImportSummary? + private(set) var handledTokens: [UUID] = [] + + func handleImport(token: UUID) async -> DataImportSummary? { + handledTokens.append(token) + return summaryToReturn + } +} diff --git a/iOS/DuckDuckGoTests/DataImport/ImportPasswordSourceTests.swift b/iOS/DuckDuckGoTests/DataImport/ImportPasswordSourceTests.swift new file mode 100644 index 00000000000..1002e0156f5 --- /dev/null +++ b/iOS/DuckDuckGoTests/DataImport/ImportPasswordSourceTests.swift @@ -0,0 +1,74 @@ +// +// ImportPasswordSourceTests.swift +// DuckDuckGoTests +// +// Copyright © 2026 DuckDuckGo. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +import XCTest +@testable import DuckDuckGo + +final class ImportPasswordSourceTests: XCTestCase { + + func testWhenReadingAllCasesThenIdentifiersAreUnique() { + let allCases = ImportPasswordSource.allCases + let uniqueIDs = Set(allCases.map(\.id)) + + XCTAssertEqual(allCases.count, 4) + XCTAssertEqual(uniqueIDs.count, allCases.count) + } + + func testWhenSectionIsImportFromThenSourcesMatchExpectedOrder() { + XCTAssertEqual( + ImportPasswordSource.Section.importFrom.sources, + [.safari, .chrome, .passwordsApp] + ) + } + + func testWhenSectionIsSyncFromThenOnlySyncSourceIsAvailable() { + XCTAssertEqual( + ImportPasswordSource.Section.syncFrom.sources, + [.syncFromDuckDuckGo] + ) + } + + func testWhenSourceIsSafariThenUploadActionsAreAvailable() { + let safariSource = ImportPasswordSource.safari + + XCTAssertNotNil(safariSource.primaryButtonTitle) + XCTAssertNotNil(safariSource.bottomSection) + } + + func testWhenSourceIsNotSafariThenUploadActionsAreUnavailable() { + let nonSafariSources: [ImportPasswordSource] = [.passwordsApp, .chrome, .syncFromDuckDuckGo] + + for source in nonSafariSources { + XCTAssertNil(source.primaryButtonTitle) + XCTAssertNil(source.bottomSection) + } + } + + func testWhenSourceIsSyncFromDuckDuckGoThenDetailScreenIsDisabled() { + XCTAssertFalse(ImportPasswordSource.syncFromDuckDuckGo.hasDetailScreen) + XCTAssertEqual(ImportPasswordSource.syncFromDuckDuckGo.detailTitle, ImportPasswordSource.syncFromDuckDuckGo.title) + } + + func testWhenSourceRequiresStepByStepInstructionsThenStepCountMatchesConfiguration() { + XCTAssertEqual(ImportPasswordSource.passwordsApp.steps.count, 3) + XCTAssertEqual(ImportPasswordSource.chrome.steps.count, 3) + XCTAssertTrue(ImportPasswordSource.safari.steps.isEmpty) + XCTAssertTrue(ImportPasswordSource.syncFromDuckDuckGo.steps.isEmpty) + } +} diff --git a/iOS/SharedTestUtils/Mocks/Core/DataImportMocks.swift b/iOS/SharedTestUtils/Mocks/Core/DataImportMocks.swift new file mode 100644 index 00000000000..f1fe3814c43 --- /dev/null +++ b/iOS/SharedTestUtils/Mocks/Core/DataImportMocks.swift @@ -0,0 +1,31 @@ +// +// DataImportMocks.swift +// DuckDuckGo +// +// Copyright © 2026 DuckDuckGo. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +import BrowserServicesKit +import SecureStorage + +final class MockLoginImporter: LoginImporter { + var importedLogins: DataImportSummary? + + func importLogins(_ logins: [ImportedLoginCredential], reporter: SecureVaultReporting, progressCallback: @escaping (Int) throws -> Void) throws -> DataImport.DataTypeSummary { + let summary = DataImport.DataTypeSummary(successful: logins.count, duplicate: 0, failed: 0) + importedLogins = [.passwords: .success(summary)] + return summary + } +}