diff --git a/Cores/DeltaCore b/Cores/DeltaCore index caaf2e8..6e0ec5a 160000 --- a/Cores/DeltaCore +++ b/Cores/DeltaCore @@ -1 +1 @@ -Subproject commit caaf2e8e4bd847a2442382e121b07b4d5f139000 +Subproject commit 6e0ec5aedac746d1a5ea05d450884f1a9ad7b509 diff --git a/Cores/GBADeltaCore b/Cores/GBADeltaCore index 4eedbd4..56401b9 160000 --- a/Cores/GBADeltaCore +++ b/Cores/GBADeltaCore @@ -1 +1 @@ -Subproject commit 4eedbd481457e3c236d1f3ffab3ba2f49c6d18df +Subproject commit 56401b9649f8abe971e3a66be1a3bb2cd984a1a0 diff --git a/Cores/GBCDeltaCore b/Cores/GBCDeltaCore index 0e622c7..4e678e7 160000 --- a/Cores/GBCDeltaCore +++ b/Cores/GBCDeltaCore @@ -1 +1 @@ -Subproject commit 0e622c7887e781363e36f6c7bfcd67fba3cb00ac +Subproject commit 4e678e7eac511d342aab86522eede9fdb7b29108 diff --git a/Cores/SNESDeltaCore b/Cores/SNESDeltaCore index bdc95ae..3946277 160000 --- a/Cores/SNESDeltaCore +++ b/Cores/SNESDeltaCore @@ -1 +1 @@ -Subproject commit bdc95aeb5e7f50263c34187cbe38ddddb4a2576e +Subproject commit 394627784bd0643c26e0fc95feafa5c960786a7c diff --git a/Delta.xcodeproj/project.pbxproj b/Delta.xcodeproj/project.pbxproj index 07ef994..83a47dc 100644 --- a/Delta.xcodeproj/project.pbxproj +++ b/Delta.xcodeproj/project.pbxproj @@ -30,6 +30,7 @@ BF1173501DA32CF600047DF8 /* ControllersSettingsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF11734F1DA32CF600047DF8 /* ControllersSettingsViewController.swift */; }; BF13A7561D5D29B0000BB055 /* PreviewGameViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF13A7551D5D29B0000BB055 /* PreviewGameViewController.swift */; }; BF13A7581D5D2FD9000BB055 /* EmulatorCore+Cheats.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF13A7571D5D2FD9000BB055 /* EmulatorCore+Cheats.swift */; }; + BF15AF841F54B43B009B6AAB /* ActionInput.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF15AF831F54B43B009B6AAB /* ActionInput.swift */; }; BF18B61F1E2985F900F70067 /* UIAlertController+Importing.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF18B61E1E2985F900F70067 /* UIAlertController+Importing.swift */; }; BF1DAD5D1D9F576000E752A7 /* SystemControllerSkinsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF1DAD5C1D9F576000E752A7 /* SystemControllerSkinsViewController.swift */; }; BF27CC8E1BC9FEA200A20D89 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = BF6BB2451BB73FE800CCF94A /* Assets.xcassets */; }; @@ -39,7 +40,7 @@ BF34FA111CF1899D006624C7 /* CheatTextView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF34FA101CF1899D006624C7 /* CheatTextView.swift */; }; BF353FF21C5D7FB000C1184C /* PauseViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF353FF11C5D7FB000C1184C /* PauseViewController.swift */; }; BF353FF61C5D837600C1184C /* PauseMenu.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = BF353FF41C5D837600C1184C /* PauseMenu.storyboard */; }; - BF353FF91C5D870B00C1184C /* PauseItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF353FF81C5D870B00C1184C /* PauseItem.swift */; }; + BF353FF91C5D870B00C1184C /* MenuItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF353FF81C5D870B00C1184C /* MenuItem.swift */; }; BF353FFF1C5DA3C500C1184C /* PausePresentationController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF353FFD1C5DA3C500C1184C /* PausePresentationController.swift */; }; BF3540001C5DA3C500C1184C /* PausePresentationControllerContentView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BF353FFE1C5DA3C500C1184C /* PausePresentationControllerContentView.xib */; }; BF3540021C5DA3D500C1184C /* PauseStoryboardSegue.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF3540011C5DA3D500C1184C /* PauseStoryboardSegue.swift */; }; @@ -51,7 +52,6 @@ BF59426B1E09BBD00051894B /* GridCollectionViewLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF5942691E09BBD00051894B /* GridCollectionViewLayout.swift */; }; BF59426F1E09BC5D0051894B /* DatabaseManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF59426D1E09BC5D0051894B /* DatabaseManager.swift */; }; BF5942701E09BC5D0051894B /* GamesDatabase.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF59426E1E09BC5D0051894B /* GamesDatabase.swift */; }; - BF5942731E09BC700051894B /* Model.xcdatamodel in Sources */ = {isa = PBXBuildFile; fileRef = BF5942721E09BC700051894B /* Model.xcdatamodel */; }; BF59427C1E09BC830051894B /* Cheat.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF5942771E09BC830051894B /* Cheat.swift */; }; BF59427D1E09BC830051894B /* ControllerSkin.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF5942781E09BC830051894B /* ControllerSkin.swift */; }; BF59427E1E09BC830051894B /* Game.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF5942791E09BC830051894B /* Game.swift */; }; @@ -68,6 +68,8 @@ BF5942951E09BD1A0051894B /* NSManagedObjectContext+Conveniences.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF5942921E09BD1A0051894B /* NSManagedObjectContext+Conveniences.swift */; }; BF5E7F441B9A650B00AE44F8 /* SettingsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF5E7F431B9A650B00AE44F8 /* SettingsViewController.swift */; }; BF5E7F461B9A652600AE44F8 /* Settings.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = BF5E7F451B9A652600AE44F8 /* Settings.storyboard */; }; + BF6424831F5B8F3F00D6AB44 /* ListMenuViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF6424821F5B8F3F00D6AB44 /* ListMenuViewController.swift */; }; + BF6424851F5CBDC900D6AB44 /* UIView+ParentViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF6424841F5CBDC900D6AB44 /* UIView+ParentViewController.swift */; }; BF6866171DCAC8B900BF2D06 /* ControllerSkin+Configuring.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF6866161DCAC8B900BF2D06 /* ControllerSkin+Configuring.swift */; }; BF696B801D9B2B02009639E0 /* Theme.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF696B7F1D9B2B02009639E0 /* Theme.swift */; }; BF6BF3131EB7E47F008E83CD /* ImportOption.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF6BF3121EB7E47F008E83CD /* ImportOption.swift */; }; @@ -76,11 +78,16 @@ BF6BF31C1EB821A0008E83CD /* GamesDatabaseImportOption.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF6BF31B1EB821A0008E83CD /* GamesDatabaseImportOption.swift */; }; BF6BF3211EB82362008E83CD /* GamesDatabase.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = BF6BF31F1EB82362008E83CD /* GamesDatabase.storyboard */; }; BF6BF3271EB87EB8008E83CD /* PhotoLibraryImportOption.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF6BF3261EB87EB8008E83CD /* PhotoLibraryImportOption.swift */; }; + BF6EE5E91F7C5F860051AD6C /* _GameControllerInputMapping.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF6EE5E81F7C5F860051AD6C /* _GameControllerInputMapping.swift */; }; + BF6EE5EB1F7C5F8F0051AD6C /* GameControllerInputMapping.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF6EE5EA1F7C5F8F0051AD6C /* GameControllerInputMapping.swift */; }; BF70798C1B6B464B0019077C /* ZipZap.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BF70798B1B6B464B0019077C /* ZipZap.framework */; }; BF70798D1B6B464B0019077C /* ZipZap.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = BF70798B1B6B464B0019077C /* ZipZap.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; BF797A2D1C2D339F00F1A000 /* UILabel+FontSize.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF797A2C1C2D339F00F1A000 /* UILabel+FontSize.swift */; }; - BF7AE8081C2E858400B1B5BC /* PauseMenuViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF7AE8041C2E858400B1B5BC /* PauseMenuViewController.swift */; }; + BF7AE8081C2E858400B1B5BC /* GridMenuViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF7AE8041C2E858400B1B5BC /* GridMenuViewController.swift */; }; BF7AE80A1C2E8C7600B1B5BC /* UIColor+Delta.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF7AE8091C2E8C7600B1B5BC /* UIColor+Delta.swift */; }; + BF80E1D21F13117000847008 /* ControllerInputsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF616A121F08184A0077F8B2 /* ControllerInputsViewController.swift */; }; + BF8CA9361F5F651900499FDD /* PopoverMenuController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF8CA9351F5F651900499FDD /* PopoverMenuController.swift */; }; + BF8DDD241F4F6C880088A21B /* InputCalloutView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF8DDD231F4F6C880088A21B /* InputCalloutView.swift */; }; BF930FFD1EB6D6FF00E8DBA0 /* System.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF930FFC1EB6D6FF00E8DBA0 /* System.swift */; }; BF95E2771E4977BF0030E7AD /* GameMetadata.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF95E2761E4977BF0030E7AD /* GameMetadata.swift */; }; BF95E2791E4982A10030E7AD /* GamesDatabaseBrowserViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF95E2781E4982A10030E7AD /* GamesDatabaseBrowserViewController.swift */; }; @@ -92,15 +99,21 @@ BFA0D1271D3AE1F600565894 /* GameViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF63BDE91D389EEB00FCB040 /* GameViewController.swift */; }; BFAA1FED1B8AA4FA00495943 /* Settings.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFAA1FEC1B8AA4FA00495943 /* Settings.swift */; }; BFBAB2E31EB685A2004E0B0E /* DeltaCoreProtocol+Delta.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFBAB2E21EB685A2004E0B0E /* DeltaCoreProtocol+Delta.swift */; }; + BFC6F7B81F435BC500221B96 /* Input+Display.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFC6F7B71F435BC500221B96 /* Input+Display.swift */; }; BFC9B7391CEFCD34008629BB /* CheatsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFC9B7381CEFCD34008629BB /* CheatsViewController.swift */; }; BFCEA67E1D56FF640061A534 /* UIViewControllerContextTransitioning+Conveniences.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFCEA67D1D56FF640061A534 /* UIViewControllerContextTransitioning+Conveniences.swift */; }; BFD097211D3A01B8005A44C2 /* SaveStatesViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF3540041C5DA70400C1184C /* SaveStatesViewController.swift */; }; + BFDC7B9F1F7DE0CF0052A7C5 /* Delta.xcmappingmodel in Sources */ = {isa = PBXBuildFile; fileRef = BFDC7B9E1F7DE0CF0052A7C5 /* Delta.xcmappingmodel */; }; BFDD04F11D5E2C27002D450E /* GameCollectionViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFDD04F01D5E2C27002D450E /* GameCollectionViewController.swift */; }; + BFE022A01F5B57FF0052D888 /* PopoverMenuButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFE0229F1F5B577D0052D888 /* PopoverMenuButton.swift */; }; BFE4269E1D9C68E600DC913F /* SaveStatesStoryboardSegue.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFE4269D1D9C68E600DC913F /* SaveStatesStoryboardSegue.swift */; }; BFEC732D1AAECC4A00650035 /* Roxas.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BFEC732C1AAECC4A00650035 /* Roxas.framework */; }; BFEC732E1AAECC4A00650035 /* Roxas.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = BFEC732C1AAECC4A00650035 /* Roxas.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + BFEF24EF1F7DD3F100454C62 /* Delta.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = BFEF24EC1F7DD3F100454C62 /* Delta.xcdatamodeld */; }; + BFEF24F31F7DD4FD00454C62 /* SaveStateMigrationPolicy.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFEF24F21F7DD4FB00454C62 /* SaveStateMigrationPolicy.swift */; }; BFF0742C1E9DC17500ACDF4A /* GBCDeltaCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BFF0742B1E9DC17500ACDF4A /* GBCDeltaCore.framework */; }; BFF0742D1E9DC17500ACDF4A /* GBCDeltaCore.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = BFF0742B1E9DC17500ACDF4A /* GBCDeltaCore.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + BFF6452E1F7CC5060056533E /* GameControllerInputMappingTransformer.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF6B82A41F7CC2A300042BFB /* GameControllerInputMappingTransformer.swift */; }; BFF93AA01E0FB036005EC865 /* InputStreamOutputWriter.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFF93A9F1E0FB036005EC865 /* InputStreamOutputWriter.swift */; }; BFFA4C091E8A24D600D87934 /* GameMetadataTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFFA4C081E8A24D600D87934 /* GameMetadataTableViewCell.swift */; }; BFFA71DD1AAC406100EE9DD1 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFFA71DC1AAC406100EE9DD1 /* AppDelegate.swift */; }; @@ -144,6 +157,7 @@ BF11734F1DA32CF600047DF8 /* ControllersSettingsViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = ControllersSettingsViewController.swift; path = Controllers/ControllersSettingsViewController.swift; sourceTree = ""; }; BF13A7551D5D29B0000BB055 /* PreviewGameViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PreviewGameViewController.swift; sourceTree = ""; }; BF13A7571D5D2FD9000BB055 /* EmulatorCore+Cheats.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "EmulatorCore+Cheats.swift"; sourceTree = ""; }; + BF15AF831F54B43B009B6AAB /* ActionInput.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ActionInput.swift; sourceTree = ""; }; BF18B61E1E2985F900F70067 /* UIAlertController+Importing.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UIAlertController+Importing.swift"; sourceTree = ""; }; BF1DAD5C1D9F576000E752A7 /* SystemControllerSkinsViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = SystemControllerSkinsViewController.swift; path = "Controller Skins/SystemControllerSkinsViewController.swift"; sourceTree = ""; }; BF27CC861BC9E3C600A20D89 /* Delta.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = Delta.entitlements; sourceTree = ""; }; @@ -155,7 +169,7 @@ BF34FA101CF1899D006624C7 /* CheatTextView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = CheatTextView.swift; path = "Pause Menu/Cheats/CheatTextView.swift"; sourceTree = ""; }; BF353FF11C5D7FB000C1184C /* PauseViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = PauseViewController.swift; path = "Pause Menu/PauseViewController.swift"; sourceTree = ""; }; BF353FF51C5D837600C1184C /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/PauseMenu.storyboard; sourceTree = ""; }; - BF353FF81C5D870B00C1184C /* PauseItem.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = PauseItem.swift; path = "Pause Menu/PauseItem.swift"; sourceTree = ""; }; + BF353FF81C5D870B00C1184C /* MenuItem.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = MenuItem.swift; path = "Pause Menu/MenuItem.swift"; sourceTree = ""; }; BF353FFD1C5DA3C500C1184C /* PausePresentationController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = PausePresentationController.swift; path = "Pause Menu/Presentation Controller/PausePresentationController.swift"; sourceTree = ""; }; BF353FFE1C5DA3C500C1184C /* PausePresentationControllerContentView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; name = PausePresentationControllerContentView.xib; path = "Pause Menu/Presentation Controller/PausePresentationControllerContentView.xib"; sourceTree = ""; }; BF3540011C5DA3D500C1184C /* PauseStoryboardSegue.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = PauseStoryboardSegue.swift; path = "Pause Menu/Segues/PauseStoryboardSegue.swift"; sourceTree = ""; }; @@ -168,7 +182,6 @@ BF5942691E09BBD00051894B /* GridCollectionViewLayout.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = GridCollectionViewLayout.swift; path = "Components/Collection View/GridCollectionViewLayout.swift"; sourceTree = ""; }; BF59426D1E09BC5D0051894B /* DatabaseManager.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = DatabaseManager.swift; path = Database/DatabaseManager.swift; sourceTree = ""; }; BF59426E1E09BC5D0051894B /* GamesDatabase.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = GamesDatabase.swift; path = Database/OpenVGDB/GamesDatabase.swift; sourceTree = ""; }; - BF5942721E09BC700051894B /* Model.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; name = Model.xcdatamodel; path = Database/Model/Model.xcdatamodel; sourceTree = ""; }; BF5942771E09BC830051894B /* Cheat.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = Cheat.swift; path = Database/Model/Human/Cheat.swift; sourceTree = ""; }; BF5942781E09BC830051894B /* ControllerSkin.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = ControllerSkin.swift; path = Database/Model/Human/ControllerSkin.swift; sourceTree = ""; }; BF5942791E09BC830051894B /* Game.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = Game.swift; path = Database/Model/Human/Game.swift; sourceTree = ""; }; @@ -187,9 +200,13 @@ BF5942921E09BD1A0051894B /* NSManagedObjectContext+Conveniences.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "NSManagedObjectContext+Conveniences.swift"; sourceTree = ""; }; BF5E7F431B9A650B00AE44F8 /* SettingsViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SettingsViewController.swift; sourceTree = ""; }; BF5E7F451B9A652600AE44F8 /* Settings.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = Settings.storyboard; sourceTree = ""; }; + BF616A121F08184A0077F8B2 /* ControllerInputsViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = ControllerInputsViewController.swift; path = Controllers/ControllerInputsViewController.swift; sourceTree = ""; }; BF63BDE91D389EEB00FCB040 /* GameViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GameViewController.swift; sourceTree = ""; }; + BF6424821F5B8F3F00D6AB44 /* ListMenuViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = ListMenuViewController.swift; path = "Components/Popover Menu/ListMenuViewController.swift"; sourceTree = ""; }; + BF6424841F5CBDC900D6AB44 /* UIView+ParentViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIView+ParentViewController.swift"; sourceTree = ""; }; BF6866161DCAC8B900BF2D06 /* ControllerSkin+Configuring.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "ControllerSkin+Configuring.swift"; sourceTree = ""; }; BF696B7F1D9B2B02009639E0 /* Theme.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = Theme.swift; path = Theming/Theme.swift; sourceTree = ""; }; + BF6B82A41F7CC2A300042BFB /* GameControllerInputMappingTransformer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = GameControllerInputMappingTransformer.swift; path = Database/Model/Transformers/GameControllerInputMappingTransformer.swift; sourceTree = ""; }; BF6BB2451BB73FE800CCF94A /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; BF6BF3121EB7E47F008E83CD /* ImportOption.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = ImportOption.swift; path = Importing/ImportOption.swift; sourceTree = ""; }; BF6BF3171EB82111008E83CD /* iTunesImportOption.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = iTunesImportOption.swift; path = "Importing/Import Options/iTunesImportOption.swift"; sourceTree = ""; }; @@ -197,10 +214,14 @@ BF6BF31B1EB821A0008E83CD /* GamesDatabaseImportOption.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = GamesDatabaseImportOption.swift; path = "Importing/Import Options/GamesDatabaseImportOption.swift"; sourceTree = ""; }; BF6BF3201EB82362008E83CD /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/GamesDatabase.storyboard; sourceTree = ""; }; BF6BF3261EB87EB8008E83CD /* PhotoLibraryImportOption.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = PhotoLibraryImportOption.swift; path = "Importing/Import Options/PhotoLibraryImportOption.swift"; sourceTree = ""; }; + BF6EE5E81F7C5F860051AD6C /* _GameControllerInputMapping.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = _GameControllerInputMapping.swift; path = Database/Model/Machine/_GameControllerInputMapping.swift; sourceTree = ""; }; + BF6EE5EA1F7C5F8F0051AD6C /* GameControllerInputMapping.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = GameControllerInputMapping.swift; path = Database/Model/Human/GameControllerInputMapping.swift; sourceTree = ""; }; BF70798B1B6B464B0019077C /* ZipZap.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = ZipZap.framework; sourceTree = BUILT_PRODUCTS_DIR; }; BF797A2C1C2D339F00F1A000 /* UILabel+FontSize.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UILabel+FontSize.swift"; sourceTree = ""; }; - BF7AE8041C2E858400B1B5BC /* PauseMenuViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = PauseMenuViewController.swift; path = "Pause Menu/PauseMenuViewController.swift"; sourceTree = ""; }; + BF7AE8041C2E858400B1B5BC /* GridMenuViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = GridMenuViewController.swift; path = "Pause Menu/GridMenuViewController.swift"; sourceTree = ""; }; BF7AE8091C2E8C7600B1B5BC /* UIColor+Delta.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UIColor+Delta.swift"; sourceTree = ""; }; + BF8CA9351F5F651900499FDD /* PopoverMenuController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = PopoverMenuController.swift; path = "Components/Popover Menu/PopoverMenuController.swift"; sourceTree = ""; }; + BF8DDD231F4F6C880088A21B /* InputCalloutView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = InputCalloutView.swift; path = Controllers/InputCalloutView.swift; sourceTree = ""; }; BF930FFC1EB6D6FF00E8DBA0 /* System.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = System.swift; path = Systems/System.swift; sourceTree = ""; }; BF95E2761E4977BF0030E7AD /* GameMetadata.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = GameMetadata.swift; path = Database/OpenVGDB/GameMetadata.swift; sourceTree = ""; }; BF95E2781E4982A10030E7AD /* GamesDatabaseBrowserViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = GamesDatabaseBrowserViewController.swift; path = Database/OpenVGDB/GamesDatabaseBrowserViewController.swift; sourceTree = ""; }; @@ -209,11 +230,17 @@ BFAA1FEC1B8AA4FA00495943 /* Settings.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Settings.swift; sourceTree = ""; }; BFBAB2E21EB685A2004E0B0E /* DeltaCoreProtocol+Delta.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "DeltaCoreProtocol+Delta.swift"; sourceTree = ""; }; BFC134E01AAD82460087AD7B /* SNESDeltaCore.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = SNESDeltaCore.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + BFC6F7B71F435BC500221B96 /* Input+Display.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Input+Display.swift"; sourceTree = ""; }; BFC9B7381CEFCD34008629BB /* CheatsViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = CheatsViewController.swift; path = "Pause Menu/Cheats/CheatsViewController.swift"; sourceTree = ""; }; BFCEA67D1D56FF640061A534 /* UIViewControllerContextTransitioning+Conveniences.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UIViewControllerContextTransitioning+Conveniences.swift"; sourceTree = ""; }; + BFDC7B9E1F7DE0CF0052A7C5 /* Delta.xcmappingmodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcmappingmodel; name = Delta.xcmappingmodel; path = Database/Model/Migrations/Delta.xcmappingmodel; sourceTree = ""; }; BFDD04F01D5E2C27002D450E /* GameCollectionViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GameCollectionViewController.swift; sourceTree = ""; }; + BFE0229F1F5B577D0052D888 /* PopoverMenuButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = PopoverMenuButton.swift; path = "Components/Popover Menu/PopoverMenuButton.swift"; sourceTree = ""; }; BFE4269D1D9C68E600DC913F /* SaveStatesStoryboardSegue.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = SaveStatesStoryboardSegue.swift; path = Segues/SaveStatesStoryboardSegue.swift; sourceTree = ""; }; BFEC732C1AAECC4A00650035 /* Roxas.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = Roxas.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + BFEF24ED1F7DD3F100454C62 /* Delta 2.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = "Delta 2.xcdatamodel"; sourceTree = ""; }; + BFEF24EE1F7DD3F100454C62 /* Delta.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = Delta.xcdatamodel; sourceTree = ""; }; + BFEF24F21F7DD4FB00454C62 /* SaveStateMigrationPolicy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = SaveStateMigrationPolicy.swift; path = Database/Model/Migrations/Policies/SaveStateMigrationPolicy.swift; sourceTree = ""; }; BFF0742B1E9DC17500ACDF4A /* GBCDeltaCore.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = GBCDeltaCore.framework; sourceTree = BUILT_PRODUCTS_DIR; }; BFF93A9F1E0FB036005EC865 /* InputStreamOutputWriter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = InputStreamOutputWriter.swift; path = Database/InputStreamOutputWriter.swift; sourceTree = ""; }; BFFA4C081E8A24D600D87934 /* GameMetadataTableViewCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = GameMetadataTableViewCell.swift; path = Database/OpenVGDB/GameMetadataTableViewCell.swift; sourceTree = ""; }; @@ -262,6 +289,8 @@ BF5942921E09BD1A0051894B /* NSManagedObjectContext+Conveniences.swift */, BFBAB2E21EB685A2004E0B0E /* DeltaCoreProtocol+Delta.swift */, BF18B61E1E2985F900F70067 /* UIAlertController+Importing.swift */, + BFC6F7B71F435BC500221B96 /* Input+Display.swift */, + BF6424841F5CBDC900D6AB44 /* UIView+ParentViewController.swift */, ); path = Extensions; sourceTree = ""; @@ -270,6 +299,8 @@ isa = PBXGroup; children = ( BF11734F1DA32CF600047DF8 /* ControllersSettingsViewController.swift */, + BF616A121F08184A0077F8B2 /* ControllerInputsViewController.swift */, + BF8DDD231F4F6C880088A21B /* InputCalloutView.swift */, ); name = Controllers; sourceTree = ""; @@ -316,6 +347,7 @@ isa = PBXGroup; children = ( BF5942581E09BB810051894B /* Action.swift */, + BFE0229C1F5B56840052D888 /* Popover Menu */, BF5942671E09BBB70051894B /* Collection View */, BF5942601E09BBA80051894B /* Loading */, ); @@ -354,9 +386,11 @@ BF5942711E09BC690051894B /* Model */ = { isa = PBXGroup; children = ( - BF5942721E09BC700051894B /* Model.xcdatamodel */, + BFEF24EC1F7DD3F100454C62 /* Delta.xcdatamodeld */, BF5942741E09BC740051894B /* Human */, BF5942751E09BC780051894B /* Machine */, + BF6B82A31F7CC29A00042BFB /* Transformers */, + BFEF24F01F7DD4B600454C62 /* Migrations */, BF5942761E09BC7C0051894B /* Misc */, ); name = Model; @@ -369,6 +403,7 @@ BF5942781E09BC830051894B /* ControllerSkin.swift */, BF5942791E09BC830051894B /* Game.swift */, BF59427A1E09BC830051894B /* GameCollection.swift */, + BF6EE5EA1F7C5F8F0051AD6C /* GameControllerInputMapping.swift */, BF59427B1E09BC830051894B /* SaveState.swift */, ); name = Human; @@ -381,6 +416,7 @@ BF5942821E09BC8B0051894B /* _ControllerSkin.swift */, BF5942831E09BC8B0051894B /* _Game.swift */, BF5942841E09BC8B0051894B /* _GameCollection.swift */, + BF6EE5E81F7C5F860051AD6C /* _GameControllerInputMapping.swift */, BF5942851E09BC8B0051894B /* _SaveState.swift */, ); name = Machine; @@ -412,6 +448,14 @@ name = Theming; sourceTree = ""; }; + BF6B82A31F7CC29A00042BFB /* Transformers */ = { + isa = PBXGroup; + children = ( + BF6B82A41F7CC2A300042BFB /* GameControllerInputMappingTransformer.swift */, + ); + name = Transformers; + sourceTree = ""; + }; BF6BF3161EB820F4008E83CD /* Import Options */ = { isa = PBXGroup; children = ( @@ -428,8 +472,8 @@ children = ( BF353FF41C5D837600C1184C /* PauseMenu.storyboard */, BF353FF11C5D7FB000C1184C /* PauseViewController.swift */, - BF7AE8041C2E858400B1B5BC /* PauseMenuViewController.swift */, - BF353FF81C5D870B00C1184C /* PauseItem.swift */, + BF7AE8041C2E858400B1B5BC /* GridMenuViewController.swift */, + BF353FF81C5D870B00C1184C /* MenuItem.swift */, BF3540031C5DA6D800C1184C /* Save States */, BFC9B7371CEFCD08008629BB /* Cheats */, BF353FFB1C5DA2F600C1184C /* Presentation Controller */, @@ -508,6 +552,16 @@ name = Cheats; sourceTree = ""; }; + BFE0229C1F5B56840052D888 /* Popover Menu */ = { + isa = PBXGroup; + children = ( + BF8CA9351F5F651900499FDD /* PopoverMenuController.swift */, + BFE0229F1F5B577D0052D888 /* PopoverMenuButton.swift */, + BF6424821F5B8F3F00D6AB44 /* ListMenuViewController.swift */, + ); + name = "Popover Menu"; + sourceTree = ""; + }; BFEC732F1AAECCBD00650035 /* Resources */ = { isa = PBXGroup; children = ( @@ -517,12 +571,29 @@ path = Resources; sourceTree = ""; }; + BFEF24F01F7DD4B600454C62 /* Migrations */ = { + isa = PBXGroup; + children = ( + BFDC7B9E1F7DE0CF0052A7C5 /* Delta.xcmappingmodel */, + BFEF24F11F7DD4BE00454C62 /* Policies */, + ); + name = Migrations; + sourceTree = ""; + }; + BFEF24F11F7DD4BE00454C62 /* Policies */ = { + isa = PBXGroup; + children = ( + BFEF24F21F7DD4FB00454C62 /* SaveStateMigrationPolicy.swift */, + ); + name = Policies; + sourceTree = ""; + }; BFFA71CE1AAC406100EE9DD1 = { isa = PBXGroup; children = ( BFFA71D91AAC406100EE9DD1 /* Delta */, - BFEC732F1AAECCBD00650035 /* Resources */, BF9F4FCD1AAD7B25004C9500 /* Frameworks */, + BFEC732F1AAECCBD00650035 /* Resources */, BFFA71D81AAC406100EE9DD1 /* Products */, FD1E8AE87FA2DB8793F7B937 /* Pods */, ); @@ -572,6 +643,7 @@ children = ( BF63BDE91D389EEB00FCB040 /* GameViewController.swift */, BF13A7551D5D29B0000BB055 /* PreviewGameViewController.swift */, + BF15AF831F54B43B009B6AAB /* ActionInput.swift */, ); path = Emulation; sourceTree = ""; @@ -776,8 +848,10 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + BFC6F7B81F435BC500221B96 /* Input+Display.swift in Sources */, BF59426A1E09BBD00051894B /* GridCollectionViewCell.swift in Sources */, BF6BF3181EB82111008E83CD /* iTunesImportOption.swift in Sources */, + BFF6452E1F7CC5060056533E /* GameControllerInputMappingTransformer.swift in Sources */, BF59427C1E09BC830051894B /* Cheat.swift in Sources */, BFBAB2E31EB685A2004E0B0E /* DeltaCoreProtocol+Delta.swift in Sources */, BF3540081C5DAFAD00C1184C /* PauseTransitionCoordinator.swift in Sources */, @@ -789,24 +863,29 @@ BF59428E1E09BCFB0051894B /* ImportController.swift in Sources */, BF930FFD1EB6D6FF00E8DBA0 /* System.swift in Sources */, BF13A7581D5D2FD9000BB055 /* EmulatorCore+Cheats.swift in Sources */, + BF6424831F5B8F3F00D6AB44 /* ListMenuViewController.swift in Sources */, BF6BF3131EB7E47F008E83CD /* ImportOption.swift in Sources */, BF31878B1D489AAA00BD020D /* CheatValidator.swift in Sources */, BFFC46201D59823500AF2CC6 /* InitialGamesStoryboardSegue.swift in Sources */, - BF5942731E09BC700051894B /* Model.xcdatamodel in Sources */, + BF15AF841F54B43B009B6AAB /* ActionInput.swift in Sources */, BF5942951E09BD1A0051894B /* NSManagedObjectContext+Conveniences.swift in Sources */, - BF353FF91C5D870B00C1184C /* PauseItem.swift in Sources */, + BF353FF91C5D870B00C1184C /* MenuItem.swift in Sources */, BF18B61F1E2985F900F70067 /* UIAlertController+Importing.swift in Sources */, BFDD04F11D5E2C27002D450E /* GameCollectionViewController.swift in Sources */, BFE4269E1D9C68E600DC913F /* SaveStatesStoryboardSegue.swift in Sources */, BFFA71DD1AAC406100EE9DD1 /* AppDelegate.swift in Sources */, BF59426B1E09BBD00051894B /* GridCollectionViewLayout.swift in Sources */, + BF6424851F5CBDC900D6AB44 /* UIView+ParentViewController.swift in Sources */, + BFDC7B9F1F7DE0CF0052A7C5 /* Delta.xcmappingmodel in Sources */, BF04E6FF1DB8625C000F35D3 /* ControllerSkinsViewController.swift in Sources */, BF5942891E09BC8B0051894B /* _GameCollection.swift in Sources */, BF34FA111CF1899D006624C7 /* CheatTextView.swift in Sources */, BF1DAD5D1D9F576000E752A7 /* SystemControllerSkinsViewController.swift in Sources */, + BFE022A01F5B57FF0052D888 /* PopoverMenuButton.swift in Sources */, BF6BF31C1EB821A0008E83CD /* GamesDatabaseImportOption.swift in Sources */, BFFA4C091E8A24D600D87934 /* GameMetadataTableViewCell.swift in Sources */, BFFC46231D5984A000AF2CC6 /* LaunchViewController.swift in Sources */, + BF8DDD241F4F6C880088A21B /* InputCalloutView.swift in Sources */, BF5942701E09BC5D0051894B /* GamesDatabase.swift in Sources */, BF34FA071CF0F510006624C7 /* EditCheatViewController.swift in Sources */, BF5942881E09BC8B0051894B /* _Game.swift in Sources */, @@ -819,10 +898,14 @@ BF5942941E09BD1A0051894B /* NSManagedObject+Conveniences.swift in Sources */, BF7AE80A1C2E8C7600B1B5BC /* UIColor+Delta.swift in Sources */, BF797A2D1C2D339F00F1A000 /* UILabel+FontSize.swift in Sources */, + BF80E1D21F13117000847008 /* ControllerInputsViewController.swift in Sources */, BF5942641E09BBB10051894B /* LoadControllerSkinImageOperation.swift in Sources */, + BF6EE5E91F7C5F860051AD6C /* _GameControllerInputMapping.swift in Sources */, + BFEF24EF1F7DD3F100454C62 /* Delta.xcdatamodeld in Sources */, BF5942871E09BC8B0051894B /* _ControllerSkin.swift in Sources */, BF95E2791E4982A10030E7AD /* GamesDatabaseBrowserViewController.swift in Sources */, BFD097211D3A01B8005A44C2 /* SaveStatesViewController.swift in Sources */, + BF6EE5EB1F7C5F8F0051AD6C /* GameControllerInputMapping.swift in Sources */, BF3540021C5DA3D500C1184C /* PauseStoryboardSegue.swift in Sources */, BF107EC41BF413F000E0C32C /* GamesViewController.swift in Sources */, BF59426F1E09BC5D0051894B /* DatabaseManager.swift in Sources */, @@ -835,13 +918,15 @@ BF99A5971DC2F9C400468E9E /* ControllerSkinTableViewCell.swift in Sources */, BF5942861E09BC8B0051894B /* _Cheat.swift in Sources */, BF5E7F441B9A650B00AE44F8 /* SettingsViewController.swift in Sources */, + BF8CA9361F5F651900499FDD /* PopoverMenuController.swift in Sources */, + BFEF24F31F7DD4FD00454C62 /* SaveStateMigrationPolicy.swift in Sources */, BF5942931E09BD1A0051894B /* NSFetchedResultsController+Conveniences.m in Sources */, BF6BF3271EB87EB8008E83CD /* PhotoLibraryImportOption.swift in Sources */, BF5942661E09BBB10051894B /* LoadImageURLOperation.swift in Sources */, BF353FF21C5D7FB000C1184C /* PauseViewController.swift in Sources */, BF59425C1E09BB810051894B /* Action.swift in Sources */, BF696B801D9B2B02009639E0 /* Theme.swift in Sources */, - BF7AE8081C2E858400B1B5BC /* PauseMenuViewController.swift in Sources */, + BF7AE8081C2E858400B1B5BC /* GridMenuViewController.swift in Sources */, BF6BF31A1EB82146008E83CD /* ClipboardImportOption.swift in Sources */, BFF93AA01E0FB036005EC865 /* InputStreamOutputWriter.swift in Sources */, BF59427F1E09BC830051894B /* GameCollection.swift in Sources */, @@ -1069,6 +1154,21 @@ defaultConfigurationName = Release; }; /* End XCConfigurationList section */ + +/* Begin XCVersionGroup section */ + BFEF24EC1F7DD3F100454C62 /* Delta.xcdatamodeld */ = { + isa = XCVersionGroup; + children = ( + BFEF24ED1F7DD3F100454C62 /* Delta 2.xcdatamodel */, + BFEF24EE1F7DD3F100454C62 /* Delta.xcdatamodel */, + ); + currentVersion = BFEF24ED1F7DD3F100454C62 /* Delta 2.xcdatamodel */; + name = Delta.xcdatamodeld; + path = Database/Model/Delta.xcdatamodeld; + sourceTree = ""; + versionGroupType = wrapper.xcdatamodel; + }; +/* End XCVersionGroup section */ }; rootObject = BFFA71CF1AAC406100EE9DD1 /* Project object */; } diff --git a/Delta/AppDelegate.swift b/Delta/AppDelegate.swift index 4277f48..99c9a35 100644 --- a/Delta/AppDelegate.swift +++ b/Delta/AppDelegate.swift @@ -40,7 +40,7 @@ class AppDelegate: UIResponder, UIApplicationDelegate } // Controllers - ExternalControllerManager.shared.startMonitoringExternalControllers() + ExternalGameControllerManager.shared.startMonitoring() return true } diff --git a/Delta/Base.lproj/PauseMenu.storyboard b/Delta/Base.lproj/PauseMenu.storyboard index 93db1ba..e6ced72 100644 --- a/Delta/Base.lproj/PauseMenu.storyboard +++ b/Delta/Base.lproj/PauseMenu.storyboard @@ -1,11 +1,15 @@ - - + + - - + + + + Menlo-Regular + + @@ -16,15 +20,17 @@ - + + - + + @@ -63,7 +69,7 @@ - + @@ -78,9 +84,9 @@ - - - + + + @@ -91,7 +97,7 @@ - + @@ -128,7 +134,7 @@ - + @@ -139,7 +145,7 @@ - + @@ -148,7 +154,7 @@ - + @@ -174,22 +180,22 @@ - + - + - + - + - + @@ -198,8 +204,9 @@ + - + @@ -245,20 +252,21 @@ - + - + - + + @@ -280,13 +288,14 @@ - + - + + @@ -308,13 +317,14 @@ - + - + + diff --git a/Delta/Components/Popover Menu/ListMenuViewController.swift b/Delta/Components/Popover Menu/ListMenuViewController.swift new file mode 100644 index 0000000..88bd43f --- /dev/null +++ b/Delta/Components/Popover Menu/ListMenuViewController.swift @@ -0,0 +1,64 @@ +// +// PopoverMenuViewController.swift +// Delta +// +// Created by Riley Testut on 9/2/17. +// Copyright © 2017 Riley Testut. All rights reserved. +// + +import UIKit + +import Roxas + +class ListMenuViewController: UITableViewController +{ + var items: [MenuItem] { + get { return self.dataSource.items } + set { self.dataSource.items = newValue } + } + + fileprivate let dataSource = RSTArrayTableViewDataSource(items: []) + + override var preferredContentSize: CGSize { + get { + let navigationBarHeight = self.navigationController?.navigationBar.bounds.height ?? 0.0 + return CGSize(width: 0, height: (self.tableView.rowHeight * CGFloat(self.items.count)) + navigationBarHeight) + } + set {} + } + + init() + { + super.init(style: .plain) + + self.dataSource.cellConfigurationHandler = { (cell, item, indexPath) in + cell.textLabel?.text = item.text + cell.accessoryType = item.isSelected ? .checkmark : .none + } + } + + required init?(coder aDecoder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + override func viewDidLoad() + { + super.viewDidLoad() + + self.tableView.dataSource = self.dataSource + self.tableView.rowHeight = 44 + self.tableView.register(UITableViewCell.self, forCellReuseIdentifier: RSTCellContentGenericCellIdentifier) + } +} + +extension ListMenuViewController +{ + override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) + { + let item = self.dataSource.item(at: indexPath) + item.isSelected = !item.isSelected + item.action(item) + + self.tableView.reloadData() + } +} diff --git a/Delta/Components/Popover Menu/PopoverMenuButton.swift b/Delta/Components/Popover Menu/PopoverMenuButton.swift new file mode 100644 index 0000000..f5bd940 --- /dev/null +++ b/Delta/Components/Popover Menu/PopoverMenuButton.swift @@ -0,0 +1,121 @@ +// +// PopoverMenuButton.swift +// Delta +// +// Created by Riley Testut on 9/2/17. +// Copyright © 2017 Riley Testut. All rights reserved. +// + +import UIKit + +extension UINavigationBar +{ + fileprivate var defaultTitleTextAttributes: [String: Any]? { + if let textAttributes = self._defaultTitleTextAttributes + { + return textAttributes + } + + // Make "copy" of self. + let navigationBar = UINavigationBar(frame: .zero) + navigationBar.barStyle = self.barStyle + + // Set item with title so we can retrieve default text attributes. + let navigationItem = UINavigationItem(title: "Testut") + navigationBar.items = [navigationItem] + navigationBar.isHidden = true + + // Must be added to window hierarchy for it to create title UILabel. + self.addSubview(navigationBar) + defer { navigationBar.removeFromSuperview() } + + navigationBar.layoutIfNeeded() + + let textAttributes = navigationBar._defaultTitleTextAttributes + return textAttributes + } + + fileprivate var _defaultTitleTextAttributes: [String: Any]? { + guard self.titleTextAttributes == nil else { return self.titleTextAttributes } + + guard + let contentView = self.subviews.first(where: { NSStringFromClass(type(of: $0)).contains("ContentView") || NSStringFromClass(type(of: $0)).contains("ItemView") }), + let titleLabel = contentView.subviews.first(where: { $0 is UILabel }) as? UILabel + else { return nil } + + let textAttributes = titleLabel.attributedText?.attributes(at: 0, effectiveRange: nil) + return textAttributes + } +} + +class PopoverMenuButton: UIControl +{ + var title: String { + get { return self.textLabel.text ?? "" } + set { + self.textLabel.text = newValue + self.updateTextAttributes() + self.invalidateIntrinsicContentSize() + } + } + + fileprivate let textLabel: UILabel + fileprivate let arrowLabel: UILabel + fileprivate let stackView: UIStackView + + fileprivate var parentNavigationBar: UINavigationBar? { + guard let navigationController = self.parentViewController as? UINavigationController ?? self.parentViewController?.navigationController else { return nil } + guard self.isDescendant(of: navigationController.navigationBar) else { return nil } + + return navigationController.navigationBar + } + + override var intrinsicContentSize: CGSize { + return self.stackView.systemLayoutSizeFitting(UILayoutFittingCompressedSize) + } + + init() + { + self.textLabel = UILabel() + self.textLabel.textColor = .black + + self.arrowLabel = UILabel() + self.arrowLabel.text = "▾" + self.arrowLabel.textColor = .black + + self.stackView = UIStackView(arrangedSubviews: [self.textLabel, self.arrowLabel]) + self.stackView.axis = .horizontal + self.stackView.distribution = .fillProportionally + self.stackView.alignment = .center + self.stackView.spacing = 4.0 + self.stackView.isUserInteractionEnabled = false + + let intrinsicContentSize = self.stackView.systemLayoutSizeFitting(UILayoutFittingCompressedSize) + super.init(frame: CGRect(origin: .zero, size: intrinsicContentSize)) + + self.addSubview(self.stackView, pinningEdgesWith: .zero) + } + + required init?(coder aDecoder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + override func didMoveToSuperview() + { + self.updateTextAttributes() + } +} + +private extension PopoverMenuButton +{ + func updateTextAttributes() + { + guard let parentNavigationBar = self.parentNavigationBar else { return } + guard let textAttributes = parentNavigationBar.defaultTitleTextAttributes else { return } + + for label in [self.textLabel, self.arrowLabel] + { + label.attributedText = NSAttributedString(string: label.text ?? "", attributes: textAttributes) + } + } +} diff --git a/Delta/Components/Popover Menu/PopoverMenuController.swift b/Delta/Components/Popover Menu/PopoverMenuController.swift new file mode 100644 index 0000000..d90478e --- /dev/null +++ b/Delta/Components/Popover Menu/PopoverMenuController.swift @@ -0,0 +1,102 @@ +// +// PopoverMenuController.swift +// Delta +// +// Created by Riley Testut on 9/5/17. +// Copyright © 2017 Riley Testut. All rights reserved. +// + +import UIKit + +private var popoverMenuControllerKey: UInt8 = 0 + +extension UINavigationItem +{ + var popoverMenuController: PopoverMenuController? { + get { return objc_getAssociatedObject(self, &popoverMenuControllerKey) as? PopoverMenuController } + set { + self.titleView = newValue?.popoverMenuButton + objc_setAssociatedObject(self, &popoverMenuControllerKey, newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) + } + } +} + +class PopoverMenuController: NSObject +{ + let popoverViewController: UIViewController + + let popoverMenuButton: PopoverMenuButton + + var isActive: Bool = false { + willSet { + guard newValue != self.isActive else { return } + + if newValue + { + self.presentPopoverViewController() + } + else + { + self.dismissPopoverViewController() + } + } + } + + init(popoverViewController: UIViewController) + { + self.popoverViewController = popoverViewController + + self.popoverMenuButton = PopoverMenuButton() + + super.init() + + self.popoverMenuButton.addTarget(self, action: #selector(PopoverMenuController.pressedPopoverMenuButton(_:)), for: .touchUpInside) + } + + required init?(coder aDecoder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } +} + +private extension PopoverMenuController +{ + @objc func pressedPopoverMenuButton(_ button: PopoverMenuButton) + { + self.isActive = !self.isActive + } + + func presentPopoverViewController() + { + guard !self.isActive else { return } + + guard let presentingViewController = self.popoverMenuButton.parentViewController else { return } + + self.popoverViewController.modalPresentationStyle = .popover + self.popoverViewController.popoverPresentationController?.delegate = self + self.popoverViewController.popoverPresentationController?.sourceView = self.popoverMenuButton.superview + self.popoverViewController.popoverPresentationController?.sourceRect = self.popoverMenuButton.frame + + presentingViewController.present(self.popoverViewController, animated: true, completion: nil) + } + + func dismissPopoverViewController() + { + guard self.isActive else { return } + + self.popoverViewController.dismiss(animated: true, completion: nil) + } +} + +extension PopoverMenuController: UIPopoverPresentationControllerDelegate +{ + func adaptivePresentationStyle(for controller: UIPresentationController, traitCollection: UITraitCollection) -> UIModalPresentationStyle + { + // Force popover presentation, regardless of trait collection. + return .none + } + + func popoverPresentationControllerDidDismissPopover(_ popoverPresentationController: UIPopoverPresentationController) + { + self.isActive = false + } +} diff --git a/Delta/Components/Popover Menu/PopoverMenuViewController.swift b/Delta/Components/Popover Menu/PopoverMenuViewController.swift new file mode 100644 index 0000000..78c8ae8 --- /dev/null +++ b/Delta/Components/Popover Menu/PopoverMenuViewController.swift @@ -0,0 +1,68 @@ +// +// PopoverMenuViewController.swift +// Delta +// +// Created by Riley Testut on 9/2/17. +// Copyright © 2017 Riley Testut. All rights reserved. +// + +import UIKit + +import Roxas + +class ListMenuViewController: UITableViewController +{ + var items: [MenuItem] { + get { return self.dataSource.items } + set { self.dataSource.items = newValue; } + } + + fileprivate let dataSource = RSTArrayTableViewDataSource(items: []) + + override var preferredContentSize: CGSize { + get { + let navigationBarHeight = self.navigationController?.navigationBar.bounds.height ?? 0.0 + return CGSize(width: 0, height: (self.tableView.rowHeight * CGFloat(self.items.count)) + navigationBarHeight) + } + set {} + } + + init() + { + super.init(style: .plain) + + self.dataSource.cellConfigurationHandler = { (cell, item, indexPath) in + cell.textLabel?.text = item.text + cell.accessoryType = item.isSelected ? .checkmark : .none + } + } + + required init?(coder aDecoder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + override func viewDidLoad() + { + super.viewDidLoad() + + self.tableView.dataSource = self.dataSource + self.tableView.rowHeight = 44 + self.tableView.register(UITableViewCell.self, forCellReuseIdentifier: RSTCellContentGenericCellIdentifier) + } +} + +extension ListMenuViewController +{ + override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) + { + self.items.forEach { $0.isSelected = false } + + let item = self.dataSource.item(at: indexPath) + item.isSelected = true + item.action(item) + + self.tableView.reloadData() + + self.dismiss(animated: true, completion: nil) + } +} diff --git a/Delta/Database/DatabaseManager.swift b/Delta/Database/DatabaseManager.swift index 077c3c1..d4b4d98 100644 --- a/Delta/Database/DatabaseManager.swift +++ b/Delta/Database/DatabaseManager.swift @@ -65,11 +65,10 @@ final class DatabaseManager: NSPersistentContainer private init() { guard - let modelURL = Bundle(for: DatabaseManager.self).url(forResource: "Model", withExtension: "mom"), + let modelURL = Bundle(for: DatabaseManager.self).url(forResource: "Delta", withExtension: "momd"), let managedObjectModel = NSManagedObjectModel(contentsOf: modelURL) else { fatalError("Core Data model cannot be found. Aborting.") } - super.init(name: "Delta", managedObjectModel: managedObjectModel) self.viewContext.automaticallyMergesChangesFromParent = true diff --git a/Delta/Database/Model/Delta.xcdatamodeld/.xccurrentversion b/Delta/Database/Model/Delta.xcdatamodeld/.xccurrentversion new file mode 100644 index 0000000..fe94d29 --- /dev/null +++ b/Delta/Database/Model/Delta.xcdatamodeld/.xccurrentversion @@ -0,0 +1,8 @@ + + + + + _XCCurrentVersionName + Delta 2.xcdatamodel + + diff --git a/Delta/Database/Model/Delta.xcdatamodeld/Delta 2.xcdatamodel/contents b/Delta/Database/Model/Delta.xcdatamodeld/Delta 2.xcdatamodel/contents new file mode 100644 index 0000000..bae815b --- /dev/null +++ b/Delta/Database/Model/Delta.xcdatamodeld/Delta 2.xcdatamodel/contents @@ -0,0 +1,138 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Delta/Database/Model/Model.xcdatamodel/contents b/Delta/Database/Model/Delta.xcdatamodeld/Delta.xcdatamodel/contents similarity index 82% rename from Delta/Database/Model/Model.xcdatamodel/contents rename to Delta/Database/Model/Delta.xcdatamodeld/Delta.xcdatamodel/contents index b009f69..6e519be 100644 --- a/Delta/Database/Model/Model.xcdatamodel/contents +++ b/Delta/Database/Model/Delta.xcdatamodeld/Delta.xcdatamodel/contents @@ -1,5 +1,5 @@ - + @@ -79,6 +79,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + @@ -107,6 +132,7 @@ + \ No newline at end of file diff --git a/Delta/Database/Model/Human/ControllerSkin.swift b/Delta/Database/Model/Human/ControllerSkin.swift index 48ea7e0..7b73368 100644 --- a/Delta/Database/Model/Human/ControllerSkin.swift +++ b/Delta/Database/Model/Human/ControllerSkin.swift @@ -88,9 +88,9 @@ extension ControllerSkin: ControllerSkinProtocol return self.controllerSkin?.image(for: traits, preferredSize: preferredSize) } - public func inputs(for traits: DeltaCore.ControllerSkin.Traits, point: CGPoint) -> [Input]? + public func inputs(for traits: DeltaCore.ControllerSkin.Traits, at point: CGPoint) -> [Input]? { - return self.controllerSkin?.inputs(for: traits, point: point) + return self.controllerSkin?.inputs(for: traits, at: point) } public func items(for traits: DeltaCore.ControllerSkin.Traits) -> [DeltaCore.ControllerSkin.Item]? diff --git a/Delta/Database/Model/Human/GameControllerInputMapping.swift b/Delta/Database/Model/Human/GameControllerInputMapping.swift new file mode 100644 index 0000000..3a44b4e --- /dev/null +++ b/Delta/Database/Model/Human/GameControllerInputMapping.swift @@ -0,0 +1,77 @@ +// +// GameControllerInputMapping.swift +// Delta +// +// Created by Riley Testut on 8/30/16. +// Copyright (c) 2016 Riley Testut. All rights reserved. +// + +import Foundation + +import DeltaCore + +@objc(GameControllerInputMapping) +public class GameControllerInputMapping: _GameControllerInputMapping +{ + fileprivate var inputMapping: DeltaCore.GameControllerInputMapping { + get { return self.deltaCoreInputMapping as! DeltaCore.GameControllerInputMapping } + set { self.deltaCoreInputMapping = newValue } + } + + public convenience init(inputMapping: DeltaCore.GameControllerInputMapping, context: NSManagedObjectContext) + { + self.init(entity: GameControllerInputMapping.entity(), insertInto: context) + + self.inputMapping = inputMapping + } +} + +extension GameControllerInputMapping +{ + class func inputMapping(for gameController: GameController, gameType: GameType, in managedObjectContext: NSManagedObjectContext) -> GameControllerInputMapping? + { + guard let playerIndex = gameController.playerIndex else { + return nil + } + + let fetchRequest: NSFetchRequest = GameControllerInputMapping.fetchRequest() + fetchRequest.returnsObjectsAsFaults = false + fetchRequest.predicate = NSPredicate(format: "%K == %@ AND %K == %@ AND %K == %d", #keyPath(GameControllerInputMapping.gameControllerInputType), gameController.inputType.rawValue, #keyPath(GameControllerInputMapping.gameType), gameType.rawValue, #keyPath(GameControllerInputMapping.playerIndex), playerIndex) + + do + { + let inputMappings = try managedObjectContext.fetch(fetchRequest) + + let inputMapping = inputMappings.first + return inputMapping + } + catch + { + print(error) + + return nil + } + } +} + +extension GameControllerInputMapping: GameControllerInputMappingProtocol +{ + var name: String? { + get { return self.inputMapping.name } + set { self.inputMapping.name = newValue } + } + + var supportedControllerInputs: [Input] { + return self.inputMapping.supportedControllerInputs + } + + public func input(forControllerInput controllerInput: Input) -> Input? + { + return self.inputMapping.input(forControllerInput: controllerInput) + } + + func set(_ input: Input?, forControllerInput controllerInput: Input) + { + self.inputMapping.set(input, forControllerInput: controllerInput) + } +} diff --git a/Delta/Database/Model/Human/SaveState.swift b/Delta/Database/Model/Human/SaveState.swift index acdfd55..e9c139f 100644 --- a/Delta/Database/Model/Human/SaveState.swift +++ b/Delta/Database/Model/Human/SaveState.swift @@ -13,6 +13,7 @@ import DeltaCore @objc public enum SaveStateType: Int16 { case auto + case quick case general case locked } @@ -78,4 +79,14 @@ public class SaveState: _SaveState, SaveStateProtocol print(error) } } + + class func fetchRequest(for game: Game, type: SaveStateType) -> NSFetchRequest + { + let predicate = NSPredicate(format: "%K == %@ AND %K == %d", #keyPath(SaveState.game), game, #keyPath(SaveState.type), type.rawValue) + + let fetchRequest: NSFetchRequest = SaveState.fetchRequest() + fetchRequest.predicate = predicate + + return fetchRequest + } } diff --git a/Delta/Database/Model/Machine/_GameControllerInputMapping.swift b/Delta/Database/Model/Machine/_GameControllerInputMapping.swift new file mode 100644 index 0000000..cc28acb --- /dev/null +++ b/Delta/Database/Model/Machine/_GameControllerInputMapping.swift @@ -0,0 +1,28 @@ +// DO NOT EDIT. This file is machine-generated and constantly overwritten. +// Make changes to GameControllerInputMapping.swift instead. + +import Foundation +import CoreData + +import DeltaCore + +public class _GameControllerInputMapping: NSManagedObject +{ + @nonobjc public class func fetchRequest() -> NSFetchRequest { + return NSFetchRequest(entityName: "GameControllerInputMapping") + } + + // MARK: - Properties + + @NSManaged public var deltaCoreInputMapping: Any + + @NSManaged public var gameControllerInputType: GameControllerInputType + + @NSManaged public var gameType: GameType + + @NSManaged public var playerIndex: Int16 + + // MARK: - Relationships + +} + diff --git a/Delta/Database/Model/Migrations/Delta.xcmappingmodel/xcmapping.xml b/Delta/Database/Model/Migrations/Delta.xcmappingmodel/xcmapping.xml new file mode 100644 index 0000000..f46f360 --- /dev/null +++ b/Delta/Database/Model/Migrations/Delta.xcmappingmodel/xcmapping.xml @@ -0,0 +1,282 @@ + + + + + + 134481920 + D2256298-187C-4E34-9D85-C9390A5A2A14 + 146 + + + + NSPersistenceFrameworkVersion + 754 + NSStoreModelVersionHashes + + XDDevAttributeMapping + + 0plcXXRN7XHKl5CcF+fwriFmUpON3ZtcI/AfK748aWc= + + XDDevEntityMapping + + qeN1Ym3TkWN1G6dU9RfX6Kd2ccEvcDVWHpd3LpLgboI= + + XDDevMappingModel + + EqtMzvRnVZWkXwBHu4VeVGy8UyoOe+bi67KC79kphlQ= + + XDDevPropertyMapping + + XN33V44TTGY4JETlMoOB5yyTKxB+u4slvDIinv0rtGA= + + XDDevRelationshipMapping + + akYY9LhehVA/mCb4ATLWuI9XGLcjpm14wWL1oEBtIcs= + + + NSStoreModelVersionHashesVersion + 3 + NSStoreModelVersionIdentifiers + + + + + + + + + name + + + + 1 + game + + + + supportedConfigurations + + + + modifiedDate + + + + identifier + + + + creationDate + + + + name + + + + filename + + + + type + + + + 1 + previewGame + + + + identifier + + + + 1 + previewSaveState + + + + Cheat + Undefined + 6 + Cheat + 1 + + + + + + index + + + + SaveStateToSaveStateMigrationPolicy + SaveState + Undefined + 4 + SaveState + 1 + + + + + + deltaCoreInputMapping + + + + 1 + game + + + + gameType + + + + modifiedDate + + + + Delta/Database/Model/Delta.xcdatamodeld/Delta.xcdatamodel + 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1Y2tldEZvckNsYXNzZXNzdG9yYWdlVV9uYW1lXxAfWERCdWNrZXRGb3JJbnRlcmZhY2Vzd2FzRW5jb2RlZF8QHlhEQnVja2V0Rm9yRGF0YVR5cGVzd2FzRW5jb2RlZF8QEF91bmlxdWVFbGVtZW50SUSABIEEZYEEY4ABgASAAIEEZIEEZhAAgAWAA4AEgASAAFBTWUVT0wA2ADcACgA4AD8ARldOUy5rZXlzWk5TLm9iamVjdHOmADkAOgA7ADwAPQA+gAaAB4AIgAmACoALpgBAAEEAQgBDAEQARYAMgLaA8YEBH4EDvYECgoAuXxAaR2FtZUNvbnRyb2xsZXJJbnB1dE1hcHBpbmdZU2F2ZVN0YXRlVEdhbWVVQ2hlYXReQ29udHJvbGxlclNraW5eR2FtZUNvbGxlY3Rpb27fEBAATgBPAFAAUQAdAFIAUwAfAFQAVQAKACEAVgBXACQAWABZAFoAJQAlABAAXgBfAC0AJQBZAGIAOQBZAGUAZgBnXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlXxAgWERCdWNrZXRGb3JTdGVyZW90eXBlc3dhc0VuY29kZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzc3RvcmFnZV8QJFhEQnVja2V0Rm9yR2VuZXJhbGl6YXRpb25zZHVwbGljYXRlc18QJFhEQnVja2V0Rm9yR2VuZXJhbGl6YXRpb25zd2FzRW5jb2RlZF8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNvcmRlcmVkXxAhWERCdWNrZXRGb3JHZW5lcmFsaXphdGlvbnNvcmRlcmVkXxAhWERCdWNrZXRGb3JHZW5lcmFsaXphdGlvbnNzdG9yYWdlW19pc0Fic3RyYWN0gA6ANoAEgASAAoAPgLOABIAOgLWABoAOgLSADQgSaBzm0FdvcmRlcmVk0wA2ADcACgBrAG0ARqEAbIAQoQBugBGALl5YRF9QU3RlcmVvdHlwZdkAHQAhAHIACgAkAHMAHwBYAHQAQABsAFkAeAATACUALQBnAHxfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WADIAQgA6ANYAAgAQIgBLTADYANwAKAH4AiABGqQB/AIAAgQCCAIMAhACFAIYAh4ATgBSAFYAWgBeAGIAZgBqAG6kAiQCKAIsAjACNAI4AjwCQAJGAHIAggCGAJ4AogCqALIAvgDOALl8QE1hEUE1Db21wb3VuZEluZGV4ZXNfEBBYRF9QU0tfZWxlbWVudElEXxAZWERQTVVuaXF1ZW5lc3NDb25zdHJhaW50c18QGlhEX1BTS192ZXJzaW9uSGFzaE1vZGlmaWVyXxAZWERfUFNLX2ZldGNoUmVxdWVzdHNBcnJheV8QEVhEX1BTS19pc0Fic3RyYWN0XxAPWERfUFNLX3VzZXJJbmZvXxATWERfUFNLX2NsYXNzTWFwcGluZ18QFlhEX1BTS19lbnRpdHlDbGFzc05hbWXfEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwCoABMAbgBnAGcAZwAtAGcArwB/AGcAZwATAGdVX3R5cGVYX2RlZmF1bHRcX2Fzc29jaWF0aW9uW19pc1JlYWRPbmx5WV9pc1N0YXRpY1lfaXNVbmlxdWVaX2lzRGVyaXZlZFpfaXNPcmRlcmVkXF9pc0NvbXBvc2l0ZVdfaXNMZWFmgACAHYAAgBEICAgIgB+AEwgIgAAI0gA3AAoAtgC3oIAe0gC5ALoAuwC8WiRjbGFzc25hbWVYJGNsYXNzZXNeTlNNdXRhYmxlQXJyYXmjALsAvQC+V05TQXJyYXlYTlNPYmplY3TSALkAugDAAMFfEBBYRFVNTFByb3BlcnR5SW1wpADCAMMAxAC+XxAQWERVTUxQcm9wZXJ0eUltcF8QFFhEVU1MTmFtZWRFbGVtZW50SW1wXxAPWERVTUxFbGVtZW50SW1w3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMAEwATAG4AZwBnAGcALQBnAK8AgABnAGcAEwBngACAAIAAgBEICAgIgB+AFAgIgAAI3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMA1gATAG4AZwBnAGcALQBnAK8AgQBnAGcAEwBngACAIoAAgBEICAgIgB+AFQgIgAAI0gA3AAoA5AC3oQDlgCOAHtIANwAKAOgAt6MA6QDqAOuAJIAlgCaAHl8QF2dhbWVDb250cm9sbGVySW5wdXRUeXBlWGdhbWVUeXBlW3BsYXllckluZGV43xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMAEwATAG4AZwBnAGcALQBnAK8AggBnAGcAEwBngACAAIAAgBEICAgIgB+AFggIgAAI3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMBAQATAG4AZwBnAGcALQBnAK8AgwBnAGcAEwBngACAKYAAgBEICAgIgB+AFwgIgAAI0gA3AAoBDwC3oIAe3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMBEwATAG4AZwBnAGcALQBnAK8AhABnAGcAEwBngACAK4AAgBEICAgIgB+AGAgIgAAICN8QDwCdAJ4AnwAdAKAAoQCiAB8AowAKACEApAClACQApgATASMAEwBuAGcAZwBnAC0AZwCvAIUAZwBnABMAZ4AAgC2AAIARCAgICIAfgBkICIAACNMANgA3AAoBMQEyAEagoIAu0gC5ALoBNQE2XxATTlNNdXRhYmxlRGljdGlvbmFyeaMBNQE3AL5cTlNEaWN0aW9uYXJ53xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMBOgATAG4AZwBnAGcALQBnAK8AhgBnAGcAEwBngACAMIAAgBEICAgIgB+AGggIgAAI1gAhAAoAJABYAB0AHwFIAUkAEwBnABMALYAxgDKAAAiAAF8QFFhER2VuZXJpY1JlY29yZENsYXNz0gC5ALoBTwFQXVhEVU1MQ2xhc3NJbXCmAVEBUgFTAVQBVQC+XVhEVU1MQ2xhc3NJbXBfEBJYRFVNTENsYXNzaWZpZXJJbXBfEBFYRFVNTE5hbWVzcGFjZUltcF8QFFhEVU1MTmFtZWRFbGVtZW50SW1wXxAPWERVTUxFbGVtZW50SW1w3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMBWAATAG4AZwBnAGcALQBnAK8AhwBnAGcAEwBngACANIAAgBEICAgIgB+AGwgIgAAIXxAaR2FtZUNvbnRyb2xsZXJJbnB1dE1hcHBpbmfSALkAugFnAWhfEBJYRFVNTFN0ZXJlb3R5cGVJbXCnAWkBagFrAWwBbQFuAL5fEBJYRFVNTFN0ZXJlb3R5cGVJbXBdWERVTUxDbGFzc0ltcF8QElhEVU1MQ2xhc3NpZmllckltcF8QEVhEVU1MTmFtZXNwYWNlSW1wXxAUWERVTUxOYW1lZEVsZW1lbnRJbXBfEA9YRFVNTEVsZW1lbnRJbXDTADYANwAKAXABdQBGpADqAXIBcwF0gCWAN4A4gDmkAXYBdwF4AXmAOoBmgICAmoAuXxAXZ2FtZUNvbnRyb2xsZXJJbnB1dFR5cGVfEBVkZWx0YUNvcmVJbnB1dE1hcHBpbmdbcGxheWVySW5kZXjfEBIAnQCeAJ8BfwAdAKEAogGAAB8AoAGBAKMACgAhAKQApQAkAKYAEwATABMAJQBAAGcAZwGJAC0AZwBZAGcBjQDqAGcAZwGRAGdfECBYREJ1Y2tldEZvclN0ZXJlb3R5cGVzd2FzRW5jb2RlZF8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNzdG9yYWdlXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc29yZGVyZWSAAIAAgACABIAMCAiAPAiADgiAZYAlCAiAOwgS+6ggSdMANgA3AAoBlQGYAEaiAZYBl4A9gD6iAZkBmoA/gFSALl8QElhEX1BQcm9wU3RlcmVvdHlwZV8QElhEX1BBdHRfU3RlcmVvdHlwZdkAHQAhAZ8ACgAkAaAAHwBYAaEBdgGWAFkAeAATACUALQBnAalfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WAOoA9gA6ANYAAgAQIgEDTADYANwAKAasBtABGqAGsAa0BrgGvAbABsQGyAbOAQYBCgEOARIBFgEaAR4BIqAG1AbYBtwG4AbkBugG7AbyASYBKgEuAT4BQgFGAUoBTgC5fEBtYRF9QUFNLX2lzU3RvcmVkSW5UcnV0aEZpbGVfEBtYRF9QUFNLX3ZlcnNpb25IYXNoTW9kaWZpZXJfEBBYRF9QUFNLX3VzZXJJbmZ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FhQBnAGcAZwAtAGcArwJaAGcAZwATAGeAAIAAgACAqAgICAiAH4BcCAiAAAhaZHVwbGljYXRlc9IANwAKBq4At6CAHtIAuQC6BrEGslpYRFBNRW50aXR5pwazBrQGtQa2BrcGuAC+WlhEUE1FbnRpdHldWERVTUxDbGFzc0ltcF8QElhEVU1MQ2xhc3NpZmllckltcF8QEVhEVU1MTmFtZXNwYWNlSW1wXxAUWERVTUxOYW1lZEVsZW1lbnRJbXBfEA9YRFVNTEVsZW1lbnRJbXDfEBAGuga7BrwGvQAdBr4GvwAfBsAGwQAKACEGwgbDACQAWABZBsUAJQAlABAGyQBfAC0AJQBZAGIAOgBZBtAG0QBnXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlXxAgWERCdWNrZXRGb3JTdGVyZW90eXBlc3dhc0VuY29kZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzc3RvcmFnZV8QJFhEQnVja2V0Rm9yR2VuZXJhbGl6YXRpb25zZHVwbGljYXRlc18QJFhEQnVja2V0Rm9yR2VuZXJhbGl6YXRpb25zd2FzRW5jb2RlZF8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNvcmRlcmVkXxAhWERCdWNrZXRGb3JHZW5lcmFsaXphdGlvbnNvcmRlcmVkXxAhWERCdWNrZXRGb3JHZW5lcmFsaXphdGlvbnNzdG9yYWdlgA6AyoAEgASAAoC4gLOABIAOgLWAB4AOgQO8gLcIEj8r953TADYANwAKBtUG1wBGoQBsgBChBtiAuYAu2QAdACEG2wAKACQG3AAfAFgG3QBBAGwAWQB4ABMAJQAtAGcG5V8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZYC2gBCADoA1gACABAiAutMANgA3AAoG5wbxAEapAH8AgACBAIIAgwCEAIUAhgCHgBOAFIAVgBa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ICIAACN8QDwCdAJ4AnwAdAKAAoQCiAB8AowAKACEApAClACQApgATGPYAExizAGcAZwBnAC0AZwCvAa4AZwBnABMAZ4AAgQIvgACBAioICAgIgB+AQwgIgAAI0wA2ADcAChkEGQUARqCggC7fEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwETABMYswBnAGcAZwAtAGcArwGvAGcAZwATAGeAAIArgACBAioICAgIgB+ARAgIgAAI3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMBEwATGLMAZwBnAGcALQBnAK8BsABnAGcAEwBngACAK4AAgQIqCAgICIAfgEUICIAACN8QDwCdAJ4AnwAdAKAAoQCiAB8AowAKACEApAClACQApgATARMAExizAGcAZwBnAC0AZwCvAbEAZwBnABMAZ4AAgCuAAIECKggICAiAH4BGCAiAAAjfEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwATABMYswBnAGcAZwAtAGcArwGyAGcAZwATAGeAAIAAgACBAioICAgIgB+ARwgIgAAI3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMBEwATGLMAZwBnAGcALQBnAK8BswBnAGcAEwBngACAK4AAgQIqCAgICIAfgEgICIAACNkAHQAhGVMACgAkGVQAHwBYGVUJuQfKAFkAeAATACUALQBnGV1fECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBAieA1YAOgDWAAIAECIECNtMANgA3AAoZXxlnAEanCHsIfAh9CH4IfwiACIGA5IDlgOaA54DogOmA6qcZaBlpGWoZaxlsGW0ZboECN4ECOIECOYECOoECO4ECPIECPYAu3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMIlAATGLQAZwBnAGcALQBnAK8IewBnAGcAEwBngACA7IAAgQI1CAgICIAfgOQICIAACN8QDwCdAJ4AnwAdAKAAoQCiAB8AowAKACEApAClACQApgATCq8AExi0AGcAZwBnAC0AZwCvCHwAZwBnABMAZ4AAgQEcgACBAjUICAgIgB+A5QgIgAAI3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMIlAATGLQAZwBnAGcALQBnAK8IfQBnAGcAEwBngACA7IAAgQI1CAgICIAfgOYICIAACN8QDwCdAJ4AnwAdAKAAoQCiAB8AowAKACEApAClACQApgATAEEAExi0AGcAZwBnAC0AZwCvCH4AZwBnABMAZ4AAgLaAAIECNQgICAiAH4DnCAiAAAjfEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwgyABMYtABnAGcAZwAtAGcArwh/AGcAZwATAGeAAIDegACBAjUICAgIgB+A6AgIgAAI3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMBEwATGLQAZwBnAGcALQBnAK8IgABnAGcAEwBngACAK4AAgQI1CAgICIAfgOkICIAACN8QDwCdAJ4AnwAdAKAAoQCiAB8AowAKACEApAClACQApgATB6EAExi0AGcAZwBnAC0AZwCvCIEAZwBnABMAZ4AAgNKAAIECNQgICAiAH4DqCAiAAAjfEBIAnQCeAJ8Z2gAdAKEAohnbAB8AoBncAKMACgAhAKQApQAkAKYAEwATABMAJQBCAGcAZxnkAC0AZwBZAGcBjQcyAGcAZxnsAGdfECBYREJ1Y2tldEZvclN0ZXJlb3R5cGVzd2FzRW5jb2RlZF8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNzdG9yYWdlXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc29yZGVyZWSAAIAAgACABIDxCAiBAkAIgA4IgGWAwQgIgQI/CBKUV4nq0wA2ADcAChnwGfMARqIBlgGXgD2APqIZ9Bn1gQJBgQJMgC7ZAB0AIRn4AAoAJBn5AB8AWBn6CboBlgBZAHgAEwAlAC0AZxoCXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlgQI+gD2ADoA1gACABAiBAkLTADYANwAKGgQaDQBGqAGsAa0BrgGvAbABsQGyAbOAQYBCgEOARIBFgEaAR4BIqBoOGg8aEBoRGhIaExoUGhWBAkOBAkSBAkWBAkeBAkiBAkmBAkqBAkuALt8QDwCdAJ4AnwAdAKAAoQCiAB8AowAKACEApAClACQApgATARMAExn0AGcAZwBnAC0AZwCvAawAZwBnABMAZ4AAgCuAAIECQQgICAiAH4BBCAiAAAjfEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwATABMZ9ABnAGcAZwAtAGcArwGtAGcAZwATAGeAAIAAgACBAkEICAgIgB+AQggIgAAI3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMaNwATGfQAZwBnAGcALQBnAK8BrgBnAGcAEwBngACBAkaAAIECQQgICAiAH4BDCAiAAAjTADYANwAKGkUaRgBGoKCALt8QDwCdAJ4AnwAdAKAAoQCiAB8AowAKACEApAClACQApgATARMAExn0AGcAZwBnAC0AZwCvAa8AZwBnABMAZ4AAgCuAAIECQQgICAiAH4BECAiAAAjfEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwETABMZ9ABnAGcAZwAtAGcArwGwAGcAZwATAGeAAIArgACBAkEICAgIgB+ARQgIgAAI3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMBEwATGfQAZwBnAGcALQBnAK8BsQBnAGcAEwBngACAK4AAgQJBCAgICIAfgEYICIAACN8QDwCdAJ4AnwAdAKAAoQCiAB8AowAKACEApAClACQApgATABMAExn0AGcAZwBnAC0AZwCvAbIAZwBnABMAZ4AAgACAAIECQQgICAiAH4BHCAiAAAjfEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwETABMZ9ABnAGcAZwAtAGcArwGzAGcAZwATAGeAAIArgACBAkEICAgIgB+ASAgIgAAI2QAdACEalAAKACQalQAfAFgalgm6AZcAWQB4ABMAJQAtAGcanl8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZYECPoA+gA6ANYAAgAQIgQJN0wA2ADcAChqgGqgARqcCVAJVAlYCVwJYAlkCWoBWgFeAWIBZgFqAW4BcpxqpGqoaqxqsGq0arhqvgQJOgQJPgQJQgQJRgQJSgQJTgQJUgC7fEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwATABMZ9QBnAGcAZwAtAGcArwJUAGcAZwATAGeAAIAAgACBAkwICAgIgB+AVggIgAAI3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMBEwATGfUAZwBnAGcALQBnAK8CVQBnAGcAEwBngACAK4AAgQJMCAgICIAfgFcICIAACN8QDwCdAJ4AnwAdAKAAoQCiAB8AowAKACEApAClACQApgATABMAExn1AGcAZwBnAC0AZwCvAlYAZwBnABMAZ4AAgACAAIECTAgICAiAH4BYCAiAAAjfEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAExChABMZ9QBnAGcAZwAtAGcArwJXAGcAZwATAGeAAIEBkYAAgQJMCAgICIAfgFkICIAACN8QDwCdAJ4AnwAdAKAAoQCiAB8AowAKACEApAClACQApgATABMAExn1AGcAZwBnAC0AZwCvAlgAZwBnABMAZ4AAgACAAIECTAgICAiAH4BaCAiAAAjfEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwATABMZ9QBnAGcAZwAtAGcArwJZAGcAZwATAGeAAIAAgACBAkwICAgIgB+AWwgIgAAI3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMAEwATGfUAZwBnAGcALQBnAK8CWgBnAGcAEwBngACAAIAAgQJMCAgICIAfgFwICIAACN8QEgCdAJ4AnxsbAB0AoQCiGxwAHwCgGx0AowAKACEApAClACQApgATABMAEwAlAEIAZwBnGyUALQBnAFkAZwGNCbEAZwBnGy0AZ18QIFhEQnVja2V0Rm9yU3RlcmVvdHlwZXN3YXNFbmNvZGVkXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc3N0b3JhZ2VfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzb3JkZXJlZIAAgACAAIAEgPEICIECVwiADgiAZYEBCAgIgQJWCBJy3TVC0wA2ADcAChsxGzQARqIBlgGXgD2APqIbNRs2gQJYgQJlgC7ZAB0AIRs5AAoAJBs6AB8AWBs7CbsBlgBZAHgAEwAlAC0AZxtDXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlgQJVgD2ADoA1gACABAiBAlnTADYANwAKG0UbTgBGqAGsAa0BrgGvAbABsQGyAbOAQYBCgEOARIBFgEaAR4BIqBtPG1AbURtSG1MbVBtVG1aBAlqBAluBAlyBAmCBAmGBAmKBAmOBAmSALt8QDwCdAJ4AnwAdAKAAoQCiAB8AowAKACEApAClACQApgATARMAExs1AGcAZwBnAC0AZwCvAawAZwBnABMAZ4AAgCuAAIECWAgICAiAH4BBCAiAAAjfEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwATABMbNQBnAGcAZwAtAGcArwGtAGcAZwATAGeAAIAAgACBAlgICAgIgB+AQggIgAAI3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMbeAATGzUAZwBnAGcALQBnAK8BrgBnAGcAEwBngACBAl2AAIECWAgICAiAH4BDCAiAAAjTADYANwAKG4YbiABGoRuHgQJeoRuJgQJfgC5fEBdhdHRyaWJ1dGVWYWx1ZUNsYXNzTmFtZVNVUkzfEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwETABMbNQBnAGcAZwAtAGcArwGvAGcAZwATAGeAAIArgACBAlgICAgIgB+ARAgIgAAI3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMIMgATGzUAZwBnAGcALQBnAK8BsABnAGcAEwBngACA3oAAgQJYCAgICIAfgEUICIAACN8QDwCdAJ4AnwAdAKAAoQCiAB8AowAKACEApAClACQApgATARMAExs1AGcAZwBnAC0AZwCvAbEAZwBnABMAZ4AAgCuAAIECWAgICAiAH4BGCAiAAAjfEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwATABMbNQBnAGcAZwAtAGcArwGyAGcAZwATAGeAAIAAgACBAlgICAgIgB+ARwgIgAAI3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMBEwATGzUAZwBnAGcALQBnAK8BswBnAGcAEwBngACAK4AAgQJYCAgICIAfgEgICIAACNkAHQAhG9kACgAkG9oAHwBYG9sJuwGXAFkAeAATACUALQBnG+NfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBAlWAPoAOgDWAAIAECIECZtMANgA3AAob5RvtAEanAlQCVQJWAlcCWAJZAlqAVoBXgFiAWYBagFuAXKcb7hvvG/Ab8RvyG/Mb9IECZ4ECaIECaYECaoECa4ECbIECbYAu3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMAEwATGzYAZwBnAGcALQBnAK8CVABnAGcAEwBngACAAIAAgQJlCAgICIAfgFYICIAACN8QDwCdAJ4AnwAdAKAAoQCiAB8AowAKACEApAClACQApgATARMAExs2AGcAZwBnAC0AZwCvAlUAZwBnABMAZ4AAgCuAAIECZQgICAiAH4BXCAiAAAjfEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwATABMbNgBnAGcAZwAtAGcArwJWAGcAZwATAGeAAIAAgACBAmUICAgIgB+AWAgIgAAI3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMCmgATGzYAZwBnAGcALQBnAK8CVwBnAGcAEwBngACAYYAAgQJlCAgICIAfgFkICIAACN8QDwCdAJ4AnwAdAKAAoQCiAB8AowAKACEApAClACQApgATABMAExs2AGcAZwBnAC0AZwCvAlgAZwBnABMAZ4AAgACAAIECZQgICAiAH4BaCAiAAAjfEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwATABMbNgBnAGcAZwAtAGcArwJZAGcAZwATAGeAAIAAgACBAmUICAgIgB+AWwgIgAAI3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMAEwATGzYAZwBnAGcALQBnAK8CWgBnAGcAEwBngACAAIAAgQJlCAgICIAfgFwICIAACN8QEgCdAJ4AnxxgAB0AoQCiHGEAHwCgHGIAowAKACEApAClACQApgATABMAEwAlAEIAZwBnHGoALQBnAFkAZwfACbIAZwBnHHIAZ18QIFhEQnVja2V0Rm9yU3RlcmVvdHlwZXN3YXNFbmNvZGVkXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc3N0b3JhZ2VfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzb3JkZXJlZIAAgACAAIAEgPEICIECcAiADgiBAU2BAQkICIECbwgSrANbD9MANgA3AAocdhx5AEaiAZYHyoA9gNWiHHoce4ECcYECfIAu2QAdACEcfgAKACQcfwAfAFgcgAm8AZYAWQB4ABMAJQAtAGcciF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZYECboA9gA6ANYAAgAQIgQJy0wA2ADcAChyKHJMARqgBrAGtAa4BrwGwAbEBsgGzgEGAQoBDgESARYBGgEeASKgclByVHJYclxyYHJkcmhybgQJzgQJ0gQJ1gQJ3gQJ4gQJ5gQJ6gQJ7gC7fEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwETABMcegBnAGcAZwAtAGcArwGsAGcAZwATAGeAAIArgACBAnEICAgIgB+AQQgIgAAI3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMAEwATHHoAZwBnAGcALQBnAK8BrQBnAGcAEwBngACAAIAAgQJxCAgICIAfgEIICIAACN8QDwCdAJ4AnwAdAKAAoQCiAB8AowAKACEApAClACQApgATHL0AExx6AGcAZwBnAC0AZwCvAa4AZwBnABMAZ4AAgQJ2gACBAnEICAgIgB+AQwgIgAAI0wA2ADcAChzLHMwARqCggC7fEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwETABMcegBnAGcAZwAtAGcArwGvAGcAZwATAGeAAIArgACBAnEICAgIgB+ARAgIgAAI3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMBEwATHHoAZwBnAGcALQBnAK8BsABnAGcAEwBngACAK4AAgQJxCAgICIAfgEUICIAACN8QDwCdAJ4AnwAdAKAAoQCiAB8AowAKACEApAClACQApgATARMAExx6AGcAZwBnAC0AZwCvAbEAZwBnABMAZ4AAgCuAAIECcQgICAiAH4BGCAiAAAjfEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwATABMcegBnAGcAZwAtAGcArwGyAGcAZwATAGeAAIAAgACBAnEICAgIgB+ARwgIgAAI3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMBEwATHHoAZwBnAGcALQBnAK8BswBnAGcAEwBngACAK4AAgQJxCAgICIAfgEgICIAACNkAHQAhHRoACgAkHRsAHwBYHRwJvAfKAFkAeAATACUALQBnHSRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBAm6A1YAOgDWAAIAECIECfdMANgA3AAodJh0uAEanCHsIfAh9CH4IfwiACIGA5IDlgOaA54DogOmA6qcdLx0wHTEdMh0zHTQdNYECfoECf4ECgIECgYEC34EC4IEC4YAu3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMIlAATHHsAZwBnAGcALQBnAK8IewBnAGcAEwBngACA7IAAgQJ8CAgICIAfgOQICIAACN8QDwCdAJ4AnwAdAKAAoQCiAB8AowAKACEApAClACQApgATCKMAExx7AGcAZwBnAC0AZwCvCHwAZwBnABMAZ4AAgO6AAIECfAgICAiAH4DlCAiAAAjfEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwiUABMcewBnAGcAZwAtAGcArwh9AGcAZwATAGeAAIDsgACBAnwICAgIgB+A5ggIgAAI3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMARQATHHsAZwBnAGcALQBnAK8IfgBnAGcAEwBngACBAoKAAIECfAgICAiAH4DnCAiAAAjfEBAddB11HXYddwAdHXgdeQAfHXodewAKACEdfB19ACQAWABZHX8AJQAlABAdgwBfAC0AJQBZAGIAPgBZHYodiwBnXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlXxAgWERCdWNrZXRGb3JTdGVyZW90eXBlc3dhc0VuY29kZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzc3RvcmFnZV8QJFhEQnVja2V0Rm9yR2VuZXJhbGl6YXRpb25zZHVwbGljYXRlc18QJFhEQnVja2V0Rm9yR2VuZXJhbGl6YXRpb25zd2FzRW5jb2RlZF8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNvcmRlcmVkXxAhWERCdWNrZXRGb3JHZW5lcmFsaXphdGlvbnNvcmRlcmVkXxAhWERCdWNrZXRGb3JHZW5lcmFsaXphdGlvbnNzdG9yYWdlgA6BApaABIAEgAKBAoSAs4AEgA6AtYALgA6BAt6BAoMIEiEnYL/TADYANwAKHY8dkQBGoQBsgBChHZKBAoWALtkAHQAhHZUACgAkHZYAHwBYHZcARQBsAFkAeAATACUALQBnHZ9fECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBAoKAEIAOgDWAAIAECIEChtMANgA3AAodoR2rAEapAH8AgACBAIIAgwCEAIUAhgCHgBOAFIAVgBaAF4AYgBmAGoAbqR2sHa0drh2vHbAdsR2yHbMdtIECh4ECiYECioECjYECjoECkIECkYECk4EClIAu3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMduAATHZIAZwBnAGcALQBnAK8AfwBnAGcAEwBngACBAoiAAIEChQgICAiAH4ATCAiAAAjSADcACh3GALeggB7fEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwATABMdkgBnAGcAZwAtAGcArwCAAGcAZwATAGeAAIAAgACBAoUICAgIgB+AFAgIgAAI3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMd2QATHZIAZwBnAGcALQBnAK8AgQBnAGcAEwBngACBAouAAIEChQgICAiAH4AVCAiAAAjSADcACh3nALehHeiBAoyAHtIANwAKHesAt6EHMoDBgB7fEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwATABMdkgBnAGcAZwAtAGcArwCCAGcAZwATAGeAAIAAgACBAoUICAgIgB+AFggIgAAI3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMd/wATHZIAZwBnAGcALQBnAK8AgwBnAGcAEwBngACBAo+AAIEChQgICAiAH4AXCAiAAAjSADcACh4NALeggB7fEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwETABMdkgBnAGcAZwAtAGcArwCEAGcAZwATAGeAAIArgACBAoUICAgIgB+AGAgIgAAI3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMeIAATHZIAZwBnAGcALQBnAK8AhQBnAGcAEwBngACBApKAAIEChQgICAiAH4AZCAiAAAjTADYANwAKHi4eLwBGoKCALt8QDwCdAJ4AnwAdAKAAoQCiAB8AowAKACEApAClACQApgATAToAEx2SAGcAZwBnAC0AZwCvAIYAZwBnABMAZ4AAgDCAAIEChQgICAiAH4AaCAiAAAjfEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEx5CABMdkgBnAGcAZwAtAGcArwCHAGcAZwATAGeAAIEClYAAgQKFCAgICIAfgBsICIAACF5HYW1lQ29sbGVjdGlvbtMANgA3AAoeUR5VAEajHlIeUwcygQKXgQKYgMGjHlYeVx5YgQKZgQKwgQLHgC5VaW5kZXhVZ2FtZXPfEBIAnQCeAJ8eXQAdAKEAoh5eAB8AoB5fAKMACgAhAKQApQAkAKYAEwATABMAJQBFAGcAZx5nAC0AZwBZAGcBjR5SAGcAZx5vAGdfECBYREJ1Y2tldEZvclN0ZXJlb3R5cGVzd2FzRW5jb2RlZF8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNzdG9yYWdlXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc29yZGVyZWSAAIAAgACABIECgggIgQKbCIAOCIBlgQKXCAiBApoIEuLFtFTTADYANwAKHnMedgBGogGWAZeAPYA+oh53HniBApyBAqeALtkAHQAhHnsACgAkHnwAHwBYHn0eVgGWAFkAeAATACUALQBnHoVfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBApmAPYAOgDWAAIAECIECndMANgA3AAoehx6QAEaoAawBrQGuAa8BsAGxAbIBs4BBgEKAQ4BEgEWARoBHgEioHpEekh6THpQelR6WHpcemIECnoECn4ECoIECooECo4ECpIECpYECpoAu3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMBEwATHncAZwBnAGcALQBnAK8BrABnAGcAEwBngACAK4AAgQKcCAgICIAfgEEICIAACN8QDwCdAJ4AnwAdAKAAoQCiAB8AowAKACEApAClACQApgATABMAEx53AGcAZwBnAC0AZwCvAa0AZwBnABMAZ4AAgACAAIECnAgICAiAH4BCCAiAAAjfEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEx66ABMedwBnAGcAZwAtAGcArwGuAGcAZwATAGeAAIECoYAAgQKcCAgICIAfgEMICIAACNMANgA3AAoeyB7JAEagoIAu3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMBEwATHncAZwBnAGcALQBnAK8BrwBnAGcAEwBngACAK4AAgQKcCAgICIAfgEQICIAACN8QDwCdAJ4AnwAdAKAAoQCiAB8AowAKACEApAClACQApgATARMAEx53AGcAZwBnAC0AZwCvAbAAZwBnABMAZ4AAgCuAAIECnAgICAiAH4BFCAiAAAjfEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwETABMedwBnAGcAZwAtAGcArwGxAGcAZwATAGeAAIArgACBApwICAgIgB+ARggIgAAI3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMAEwATHncAZwBnAGcALQBnAK8BsgBnAGcAEwBngACAAIAAgQKcCAgICIAfgEcICIAACN8QDwCdAJ4AnwAdAKAAoQCiAB8AowAKACEApAClACQApgATARMAEx53AGcAZwBnAC0AZwCvAbMAZwBnABMAZ4AAgCuAAIECnAgICAiAH4BICAiAAAjZAB0AIR8XAAoAJB8YAB8AWB8ZHlYBlwBZAHgAEwAlAC0AZx8hXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlgQKZgD6ADoA1gACABAiBAqjTADYANwAKHyMfKwBGpwJUAlUCVgJXAlgCWQJagFaAV4BYgFmAWoBbgFynHywfLR8uHy8fMB8xHzKBAqmBAqqBAquBAqyBAq2BAq6BAq+ALt8QDwCdAJ4AnwAdAKAAoQCiAB8AowAKACEApAClACQApgATBkMAEx54AGcAZwBnAC0AZwCvAlQAZwBnABMAZ4AAgKuAAIECpwgICAiAH4BWCAiAAAjfEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwETABMeeABnAGcAZwAtAGcArwJVAGcAZwATAGeAAIArgACBAqcICAgIgB+AVwgIgAAI3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMAEwATHngAZwBnAGcALQBnAK8CVgBnAGcAEwBngACAAIAAgQKnCAgICIAfgFgICIAACN8QDwCdAJ4AnwAdAKAAoQCiAB8AowAKACEApAClACQApgATBnEAEx54AGcAZwBnAC0AZwCvAlcAZwBnABMAZ4AAgK+AAIECpwgICAiAH4BZCAiAAAjfEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwATABMeeABnAGcAZwAtAGcArwJYAGcAZwATAGeAAIAAgACBAqcICAgIgB+AWggIgAAI3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMAEwATHngAZwBnAGcALQBnAK8CWQBnAGcAEwBngACAAIAAgQKnCAgICIAfgFsICIAACN8QDwCdAJ4AnwAdAKAAoQCiAB8AowAKACEApAClACQApgATABMAEx54AGcAZwBnAC0AZwCvAloAZwBnABMAZ4AAgACAAIECpwgICAiAH4BcCAiAAAjfEBIAnQCeAJ8fngAdAKEAoh+fAB8AoB+gAKMACgAhAKQApQAkAKYAEwATABMAJQBFAGcAZx+oAC0AZwBZAGcHwB5TAGcAZx+wAGdfECBYREJ1Y2tldEZvclN0ZXJlb3R5cGVzd2FzRW5jb2RlZF8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNzdG9yYWdlXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc29yZGVyZWSAAIAAgACABIECgggIgQKyCIAOCIEBTYECmAgIgQKxCBI9LUTG0wA2ADcACh+0H7cARqIBlgfKgD2A1aIfuB+5gQKzgQK+gC7ZAB0AIR+8AAoAJB+9AB8AWB++HlcBlgBZAHgAEwAlAC0AZx/GXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlgQKwgD2ADoA1gACABAiBArTTADYANwAKH8gf0QBGqAGsAa0BrgGvAbABsQGyAbOAQYBCgEOARIBFgEaAR4BIqB/SH9Mf1B/VH9Yf1x/YH9mBArWBAraBAreBArmBArqBAruBAryBAr2ALt8QDwCdAJ4AnwAdAKAAoQCiAB8AowAKACEApAClACQApgATARMAEx+4AGcAZwBnAC0AZwCvAawAZwBnABMAZ4AAgCuAAIECswgICAiAH4BBCAiAAAjfEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwATABMfuABnAGcAZwAtAGcArwGtAGcAZwATAGeAAIAAgACBArMICAgIgB+AQggIgAAI3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMf+wATH7gAZwBnAGcALQBnAK8BrgBnAGcAEwBngACBAriAAIECswgICAiAH4BDCAiAAAjTADYANwAKIAkgCgBGoKCALt8QDwCdAJ4AnwAdAKAAoQCiAB8AowAKACEApAClACQApgATARMAEx+4AGcAZwBnAC0AZwCvAa8AZwBnABMAZ4AAgCuAAIECswgICAiAH4BECAiAAAjfEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwETABMfuABnAGcAZwAtAGcArwGwAGcAZwATAGeAAIArgACBArMICAgIgB+ARQgIgAAI3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMBEwATH7gAZwBnAGcALQBnAK8BsQBnAGcAEwBngACAK4AAgQKzCAgICIAfgEYICIAACN8QDwCdAJ4AnwAdAKAAoQCiAB8AowAKACEApAClACQApgATABMAEx+4AGcAZwBnAC0AZwCvAbIAZwBnABMAZ4AAgACAAIECswgICAiAH4BHCAiAAAjfEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwETABMfuABnAGcAZwAtAGcArwGzAGcAZwATAGeAAIArgACBArMICAgIgB+ASAgIgAAI2QAdACEgWAAKACQgWQAfAFggWh5XB8oAWQB4ABMAJQAtAGcgYl8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZYECsIDVgA6ANYAAgAQIgQK/0wA2ADcACiBkIGwARqcIewh8CH0Ifgh/CIAIgYDkgOWA5oDngOiA6YDqpyBtIG4gbyBwIHEgciBzgQLAgQLBgQLCgQLDgQLEgQLFgQLGgC7fEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwiUABMfuQBnAGcAZwAtAGcArwh7AGcAZwATAGeAAIDsgACBAr4ICAgIgB+A5AgIgAAI3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMIowATH7kAZwBnAGcALQBnAK8IfABnAGcAEwBngACA7oAAgQK+CAgICIAfgOUICIAACN8QDwCdAJ4AnwAdAKAAoQCiAB8AowAKACEApAClACQApgATCJQAEx+5AGcAZwBnAC0AZwCvCH0AZwBnABMAZ4AAgOyAAIECvggICAiAH4DmCAiAAAjfEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwBCABMfuQBnAGcAZwAtAGcArwh+AGcAZwATAGeAAIDxgACBAr4ICAgIgB+A5wgIgAAI3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMIMgATH7kAZwBnAGcALQBnAK8IfwBnAGcAEwBngACA3oAAgQK+CAgICIAfgOgICIAACN8QDwCdAJ4AnwAdAKAAoQCiAB8AowAKACEApAClACQApgATARMAEx+5AGcAZwBnAC0AZwCvCIAAZwBnABMAZ4AAgCuAAIECvggICAiAH4DpCAiAAAjfEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwm8ABMfuQBnAGcAZwAtAGcArwiBAGcAZwATAGeAAIECboAAgQK+CAgICIAfgOoICIAACN8QEgCdAJ4AnyDfAB0AoQCiIOAAHwCgIOEAowAKACEApAClACQApgATABMAEwAlAEUAZwBnIOkALQBnAFkAZwGNBzIAZwBnIPEAZ18QIFhEQnVja2V0Rm9yU3RlcmVvdHlwZXN3YXNFbmNvZGVkXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc3N0b3JhZ2VfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzb3JkZXJlZIAAgACAAIAEgQKCCAiBAskIgA4IgGWAwQgIgQLICBMAAAABC/V1O9MANgA3AAog9SD4AEaiAZYBl4A9gD6iIPkg+oECyoEC1YAu2QAdACEg/QAKACQg/gAfAFgg/x5YAZYAWQB4ABMAJQAtAGchB18QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZYECx4A9gA6ANYAAgAQIgQLL0wA2ADcACiEJIRIARqgBrAGtAa4BrwGwAbEBsgGzgEGAQoBDgESARYBGgEeASKghEyEUIRUhFiEXIRghGSEagQLMgQLNgQLOgQLQgQLRgQLSgQLTgQLUgC7fEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwETABMg+QBnAGcAZwAtAGcArwGsAGcAZwATAGeAAIArgACBAsoICAgIgB+AQQgIgAAI3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMAEwATIPkAZwBnAGcALQBnAK8BrQBnAGcAEwBngACAAIAAgQLKCAgICIAfgEIICIAACN8QDwCdAJ4AnwAdAKAAoQCiAB8AowAKACEApAClACQApgATITwAEyD5AGcAZwBnAC0AZwCvAa4AZwBnABMAZ4AAgQLPgACBAsoICAgIgB+AQwgIgAAI0wA2ADcACiFKIUsARqCggC7fEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwETABMg+QBnAGcAZwAtAGcArwGvAGcAZwATAGeAAIArgACBAsoICAgIgB+ARAgIgAAI3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMBEwATIPkAZwBnAGcALQBnAK8BsABnAGcAEwBngACAK4AAgQLKCAgICIAfgEUICIAACN8QDwCdAJ4AnwAdAKAAoQCiAB8AowAKACEApAClACQApgATARMAEyD5AGcAZwBnAC0AZwCvAbEAZwBnABMAZ4AAgCuAAIECyggICAiAH4BGCAiAAAjfEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwATABMg+QBnAGcAZwAtAGcArwGyAGcAZwATAGeAAIAAgACBAsoICAgIgB+ARwgIgAAI3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMBEwATIPkAZwBnAGcALQBnAK8BswBnAGcAEwBngACAK4AAgQLKCAgICIAfgEgICIAACNkAHQAhIZkACgAkIZoAHwBYIZseWAGXAFkAeAATACUALQBnIaNfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBAseAPoAOgDWAAIAECIEC1tMANgA3AAohpSGtAEanAlQCVQJWAlcCWAJZAlqAVoBXgFiAWYBagFuAXKchriGvIbAhsSGyIbMhtIEC14EC2IEC2YEC2oEC24EC3IEC3YAu3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMAEwATIPoAZwBnAGcALQBnAK8CVABnAGcAEwBngACAAIAAgQLVCAgICIAfgFYICIAACN8QDwCdAJ4AnwAdAKAAoQCiAB8AowAKACEApAClACQApgATARMAEyD6AGcAZwBnAC0AZwCvAlUAZwBnABMAZ4AAgCuAAIEC1QgICAiAH4BXCAiAAAjfEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwATABMg+gBnAGcAZwAtAGcArwJWAGcAZwATAGeAAIAAgACBAtUICAgIgB+AWAgIgAAI3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMQoQATIPoAZwBnAGcALQBnAK8CVwBnAGcAEwBngACBAZGAAIEC1QgICAiAH4BZCAiAAAjfEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwATABMg+gBnAGcAZwAtAGcArwJYAGcAZwATAGeAAIAAgACBAtUICAgIgB+AWggIgAAI3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMAEwATIPoAZwBnAGcALQBnAK8CWQBnAGcAEwBngACAAIAAgQLVCAgICIAfgFsICIAACN8QDwCdAJ4AnwAdAKAAoQCiAB8AowAKACEApAClACQApgATABMAEyD6AGcAZwBnAC0AZwCvAloAZwBnABMAZ4AAgACAAIEC1QgICAiAH4BcCAiAAAjSADcACiIgALeggB7fEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwgyABMcewBnAGcAZwAtAGcArwh/AGcAZwATAGeAAIDegACBAnwICAgIgB+A6AgIgAAI3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMBEwATHHsAZwBnAGcALQBnAK8IgABnAGcAEwBngACAK4AAgQJ8CAgICIAfgOkICIAACN8QDwCdAJ4AnwAdAKAAoQCiAB8AowAKACEApAClACQApgATHlcAExx7AGcAZwBnAC0AZwCvCIEAZwBnABMAZ4AAgQKwgACBAnwICAgIgB+A6ggIgAAI3xASAJ0AngCfIlAAHQChAKIiUQAfAKAiUgCjAAoAIQCkAKUAJACmABMAEwATACUAQgBnAGciWgAtAGcAWQBnAY0HnQBnAGciYgBnXxAgWERCdWNrZXRGb3JTdGVyZW90eXBlc3dhc0VuY29kZWRfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzc3RvcmFnZV8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNvcmRlcmVkgACAAIAAgASA8QgIgQLkCIAOCIBlgM8ICIEC4wgSMo1VSNMANgA3AAoiZiJpAEaiAZYBl4A9gD6iImoia4EC5YEC8oAu2QAdACEibgAKACQibwAfAFgicAm9AZYAWQB4ABMAJQAtAGcieF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZYEC4oA9gA6ANYAAgAQIgQLm0wA2ADcACiJ6IoMARqgBrAGtAa4BrwGwAbEBsgGzgEGAQoBDgESARYBGgEeASKgihCKFIoYihyKIIokiiiKLgQLngQLogQLpgQLtgQLugQLvgQLwgQLxgC7fEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwETABMiagBnAGcAZwAtAGcArwGsAGcAZwATAGeAAIArgACBAuUICAgIgB+AQQgIgAAI3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMAEwATImoAZwBnAGcALQBnAK8BrQBnAGcAEwBngACAAIAAgQLlCAgICIAfgEIICIAACN8QDwCdAJ4AnwAdAKAAoQCiAB8AowAKACEApAClACQApgATIq0AEyJqAGcAZwBnAC0AZwCvAa4AZwBnABMAZ4AAgQLqgACBAuUICAgIgB+AQwgIgAAI0wA2ADcACiK7Ir0ARqEivIEC66EivoEC7IAuXxAXYXR0cmlidXRlVmFsdWVDbGFzc05hbWVVTlNVUkzfEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwETABMiagBnAGcAZwAtAGcArwGvAGcAZwATAGeAAIArgACBAuUICAgIgB+ARAgIgAAI3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMBEwATImoAZwBnAGcALQBnAK8BsABnAGcAEwBngACAK4AAgQLlCAgICIAfgEUICIAACN8QDwCdAJ4AnwAdAKAAoQCiAB8AowAKACEApAClACQApgATARMAEyJqAGcAZwBnAC0AZwCvAbEAZwBnABMAZ4AAgCuAAIEC5QgICAiAH4BGCAiAAAjfEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwATABMiagBnAGcAZwAtAGcArwGyAGcAZwATAGeAAIAAgACBAuUICAgIgB+ARwgIgAAI3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMBEwATImoAZwBnAGcALQBnAK8BswBnAGcAEwBngACAK4AAgQLlCAgICIAfgEgICIAACNkAHQAhIw4ACgAkIw8AHwBYIxAJvQGXAFkAeAATACUALQBnIxhfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBAuKAPoAOgDWAAIAECIEC89MANgA3AAojGiMiAEanAlQCVQJWAlcCWAJZAlqAVoBXgFiAWYBagFuAXKcjIyMkIyUjJiMnIygjKYEC9IEC9YEC9oEC94EC+IEC+YEC+oAu3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMAEwATImsAZwBnAGcALQBnAK8CVABnAGcAEwBngACAAIAAgQLyCAgICIAfgFYICIAACN8QDwCdAJ4AnwAdAKAAoQCiAB8AowAKACEApAClACQApgATARMAEyJrAGcAZwBnAC0AZwCvAlUAZwBnABMAZ4AAgCuAAIEC8ggICAiAH4BXCAiAAAjfEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwATABMiawBnAGcAZwAtAGcArwJWAGcAZwATAGeAAIAAgACBAvIICAgIgB+AWAgIgAAI3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMQoQATImsAZwBnAGcALQBnAK8CVwBnAGcAEwBngACBAZGAAIEC8ggICAiAH4BZCAiAAAjfEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwATABMiawBnAGcAZwAtAGcArwJYAGcAZwATAGeAAIAAgACBAvIICAgIgB+AWggIgAAI3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMAEwATImsAZwBnAGcALQBnAK8CWQBnAGcAEwBngACAAIAAgQLyCAgICIAfgFsICIAACN8QDwCdAJ4AnwAdAKAAoQCiAB8AowAKACEApAClACQApgATABMAEyJrAGcAZwBnAC0AZwCvAloAZwBnABMAZ4AAgACAAIEC8ggICAiAH4BcCAiAAAjfEBIAnQCeAJ8jlQAdAKEAoiOWAB8AoCOXAKMACgAhAKQApQAkAKYAEwATABMAJQBCAGcAZyOfAC0AZwBZAGcBjQefAGcAZyOnAGdfECBYREJ1Y2tldEZvclN0ZXJlb3R5cGVzd2FzRW5jb2RlZF8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNzdG9yYWdlXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc29yZGVyZWSAAIAAgACABIDxCAiBAv0IgA4IgGWA0QgIgQL8CBJXSTcB0wA2ADcACiOrI64ARqIBlgGXgD2APqIjryOwgQL+gQMJgC7ZAB0AISOzAAoAJCO0AB8AWCO1Cb4BlgBZAHgAEwAlAC0AZyO9XxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlgQL7gD2ADoA1gACABAiBAv/TADYANwAKI78jyABGqAGsAa0BrgGvAbABsQGyAbOAQYBCgEOARIBFgEaAR4BIqCPJI8ojyyPMI80jziPPI9CBAwCBAwGBAwKBAwSBAwWBAwaBAweBAwiALt8QDwCdAJ4AnwAdAKAAoQCiAB8AowAKACEApAClACQApgATARMAEyOvAGcAZwBnAC0AZwCvAawAZwBnABMAZ4AAgCuAAIEC/ggICAiAH4BBCAiAAAjfEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwATABMjrwBnAGcAZwAtAGcArwGtAGcAZwATAGeAAIAAgACBAv4ICAgIgB+AQggIgAAI3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMj8gATI68AZwBnAGcALQBnAK8BrgBnAGcAEwBngACBAwOAAIEC/ggICAiAH4BDCAiAAAjTADYANwAKJAAkAQBGoKCALt8QDwCdAJ4AnwAdAKAAoQCiAB8AowAKACEApAClACQApgATARMAEyOvAGcAZwBnAC0AZwCvAa8AZwBnABMAZ4AAgCuAAIEC/ggICAiAH4BECAiAAAjfEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwETABMjrwBnAGcAZwAtAGcArwGwAGcAZwATAGeAAIArgACBAv4ICAgIgB+ARQgIgAAI3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMBEwATI68AZwBnAGcALQBnAK8BsQBnAGcAEwBngACAK4AAgQL+CAgICIAfgEYICIAACN8QDwCdAJ4AnwAdAKAAoQCiAB8AowAKACEApAClACQApgATABMAEyOvAGcAZwBnAC0AZwCvAbIAZwBnABMAZ4AAgACAAIEC/ggICAiAH4BHCAiAAAjfEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwETABMjrwBnAGcAZwAtAGcArwGzAGcAZwATAGeAAIArgACBAv4ICAgIgB+ASAgIgAAI2QAdACEkTwAKACQkUAAfAFgkUQm+AZcAWQB4ABMAJQAtAGckWV8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZYEC+4A+gA6ANYAAgAQIgQMK0wA2ADcACiRbJGMARqcCVAJVAlYCVwJYAlkCWoBWgFeAWIBZgFqAW4BcpyRkJGUkZiRnJGgkaSRqgQMLgQMMgQMNgQMOgQMPgQMQgQMRgC7fEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwATABMjsABnAGcAZwAtAGcArwJUAGcAZwATAGeAAIAAgACBAwkICAgIgB+AVggIgAAI3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMBEwATI7AAZwBnAGcALQBnAK8CVQBnAGcAEwBngACAK4AAgQMJCAgICIAfgFcICIAACN8QDwCdAJ4AnwAdAKAAoQCiAB8AowAKACEApAClACQApgATABMAEyOwAGcAZwBnAC0AZwCvAlYAZwBnABMAZ4AAgACAAIEDCQgICAiAH4BYCAiAAAjfEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAExChABMjsABnAGcAZwAtAGcArwJXAGcAZwATAGeAAIEBkYAAgQMJCAgICIAfgFkICIAACN8QDwCdAJ4AnwAdAKAAoQCiAB8AowAKACEApAClACQApgATABMAEyOwAGcAZwBnAC0AZwCvAlgAZwBnABMAZ4AAgACAAIEDCQgICAiAH4BaCAiAAAjfEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwATABMjsABnAGcAZwAtAGcArwJZAGcAZwATAGeAAIAAgACBAwkICAgIgB+AWwgIgAAI3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMAEwATI7AAZwBnAGcALQBnAK8CWgBnAGcAEwBngACAAIAAgQMJCAgICIAfgFwICIAACN8QEgCdAJ4AnyTWAB0AoQCiJNcAHwCgJNgAowAKACEApAClACQApgATABMAEwAlAEIAZwBnJOAALQBnAFkAZwGNB54AZwBnJOgAZ18QIFhEQnVja2V0Rm9yU3RlcmVvdHlwZXN3YXNFbmNvZGVkXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc3N0b3JhZ2VfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzb3JkZXJlZIAAgACAAIAEgPEICIEDFAiADgiAZYDQCAiBAxMIEnmoJkjTADYANwAKJOwk7wBGogGWAZeAPYA+oiTwJPGBAxWBAyGALtkAHQAhJPQACgAkJPUAHwBYJPYJvwGWAFkAeAATACUALQBnJP5fECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBAxKAPYAOgDWAAIAECIEDFtMANgA3AAolACUJAEaoAawBrQGuAa8BsAGxAbIBs4BBgEKAQ4BEgEWARoBHgEioJQolCyUMJQ0lDiUPJRAlEYEDF4EDGIEDGYEDHIEDHYEDHoEDH4EDIIAu3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMBEwATJPAAZwBnAGcALQBnAK8BrABnAGcAEwBngACAK4AAgQMVCAgICIAfgEEICIAACN8QDwCdAJ4AnwAdAKAAoQCiAB8AowAKACEApAClACQApgATABMAEyTwAGcAZwBnAC0AZwCvAa0AZwBnABMAZ4AAgACAAIEDFQgICAiAH4BCCAiAAAjfEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEyUzABMk8ABnAGcAZwAtAGcArwGuAGcAZwATAGeAAIEDGoAAgQMVCAgICIAfgEMICIAACNMANgA3AAolQSVDAEahJUKBAxuhAfeAToAuXxAXYXR0cmlidXRlVmFsdWVDbGFzc05hbWXfEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwETABMk8ABnAGcAZwAtAGcArwGvAGcAZwATAGeAAIArgACBAxUICAgIgB+ARAgIgAAI3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMBEwATJPAAZwBnAGcALQBnAK8BsABnAGcAEwBngACAK4AAgQMVCAgICIAfgEUICIAACN8QDwCdAJ4AnwAdAKAAoQCiAB8AowAKACEApAClACQApgATARMAEyTwAGcAZwBnAC0AZwCvAbEAZwBnABMAZ4AAgCuAAIEDFQgICAiAH4BGCAiAAAjfEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwATABMk8ABnAGcAZwAtAGcArwGyAGcAZwATAGeAAIAAgACBAxUICAgIgB+ARwgIgAAI3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMBEwATJPAAZwBnAGcALQBnAK8BswBnAGcAEwBngACAK4AAgQMVCAgICIAfgEgICIAACNkAHQAhJZMACgAkJZQAHwBYJZUJvwGXAFkAeAATACUALQBnJZ1fECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBAxKAPoAOgDWAAIAECIEDItMANgA3AAolnyWnAEanAlQCVQJWAlcCWAJZAlqAVoBXgFiAWYBagFuAXKclqCWpJaolqyWsJa0lroEDI4EDJIEDJYEDJoEDJ4EDKIEDKYAu3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMAEwATJPEAZwBnAGcALQBnAK8CVABnAGcAEwBngACAAIAAgQMhCAgICIAfgFYICIAACN8QDwCdAJ4AnwAdAKAAoQCiAB8AowAKACEApAClACQApgATARMAEyTxAGcAZwBnAC0AZwCvAlUAZwBnABMAZ4AAgCuAAIEDIQgICAiAH4BXCAiAAAjfEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwATABMk8QBnAGcAZwAtAGcArwJWAGcAZwATAGeAAIAAgACBAyEICAgIgB+AWAgIgAAI3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMCmgATJPEAZwBnAGcALQBnAK8CVwBnAGcAEwBngACAYYAAgQMhCAgICIAfgFkICIAACN8QDwCdAJ4AnwAdAKAAoQCiAB8AowAKACEApAClACQApgATABMAEyTxAGcAZwBnAC0AZwCvAlgAZwBnABMAZ4AAgACAAIEDIQgICAiAH4BaCAiAAAjfEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwATABMk8QBnAGcAZwAtAGcArwJZAGcAZwATAGeAAIAAgACBAyEICAgIgB+AWwgIgAAI3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMAEwATJPEAZwBnAGcALQBnAK8CWgBnAGcAEwBngACAAIAAgQMhCAgICIAfgFwICIAACNIANwAKJhoAt6CAHt8QDwCdAJ4AnwAdAKAAoQCiAB8AowAKACEApAClACQApgATARMAEwfNAGcAZwBnAC0AZwCvCH8AZwBnABMAZ4AAgCuAAIDiCAgICIAfgOgICIAACN8QDwCdAJ4AnwAdAKAAoQCiAB8AowAKACEApAClACQApgATARMAEwfNAGcAZwBnAC0AZwCvCIAAZwBnABMAZ4AAgCuAAIDiCAgICIAfgOkICIAACN8QDwCdAJ4AnwAdAKAAoQCiAB8AowAKACEApAClACQApgATCbkAEwfNAGcAZwBnAC0AZwCvCIEAZwBnABMAZ4AAgQIngACA4ggICAiAH4DqCAiAAAjfEBIAnQCeAJ8mSgAdAKEAoiZLAB8AoCZMAKMACgAhAKQApQAkAKYAEwATABMAJQBBAGcAZyZUAC0AZwBZAGcBjQeaAGcAZyZcAGdfECBYREJ1Y2tldEZvclN0ZXJlb3R5cGVzd2FzRW5jb2RlZF8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNzdG9yYWdlXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc29yZGVyZWSAAIAAgACABIC2CAiBAzAIgA4IgGWAzQgIgQMvCBLULOlf0wA2ADcACiZgJmMARqIBlgGXgD2APqImZCZlgQMxgQM8gC7ZAB0AISZoAAoAJCZpAB8AWCZqB6MBlgBZAHgAEwAlAC0AZyZyXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlgQMugD2ADoA1gACABAiBAzLTADYANwAKJnQmfQBGqAGsAa0BrgGvAbABsQGyAbOAQYBCgEOARIBFgEaAR4BIqCZ+Jn8mgCaBJoImgyaEJoWBAzOBAzSBAzWBAzeBAziBAzmBAzqBAzuALt8QDwCdAJ4AnwAdAKAAoQCiAB8AowAKACEApAClACQApgATARMAEyZkAGcAZwBnAC0AZwCvAawAZwBnABMAZ4AAgCuAAIEDMQgICAiAH4BBCAiAAAjfEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwATABMmZABnAGcAZwAtAGcArwGtAGcAZwATAGeAAIAAgACBAzEICAgIgB+AQggIgAAI3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMmpwATJmQAZwBnAGcALQBnAK8BrgBnAGcAEwBngACBAzaAAIEDMQgICAiAH4BDCAiAAAjTADYANwAKJrUmtgBGoKCALt8QDwCdAJ4AnwAdAKAAoQCiAB8AowAKACEApAClACQApgATARMAEyZkAGcAZwBnAC0AZwCvAa8AZwBnABMAZ4AAgCuAAIEDMQgICAiAH4BECAiAAAjfEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwETABMmZABnAGcAZwAtAGcArwGwAGcAZwATAGeAAIArgACBAzEICAgIgB+ARQgIgAAI3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMBEwATJmQAZwBnAGcALQBnAK8BsQBnAGcAEwBngACAK4AAgQMxCAgICIAfgEYICIAACN8QDwCdAJ4AnwAdAKAAoQCiAB8AowAKACEApAClACQApgATABMAEyZkAGcAZwBnAC0AZwCvAbIAZwBnABMAZ4AAgACAAIEDMQgICAiAH4BHCAiAAAjfEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwETABMmZABnAGcAZwAtAGcArwGzAGcAZwATAGeAAIArgACBAzEICAgIgB+ASAgIgAAI2QAdACEnBAAKACQnBQAfAFgnBgejAZcAWQB4ABMAJQAtAGcnDl8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZYEDLoA+gA6ANYAAgAQIgQM90wA2ADcACicQJxgARqcCVAJVAlYCVwJYAlkCWoBWgFeAWIBZgFqAW4BcpycZJxonGyccJx0nHicfgQM+gQM/gQNAgQNBgQNCgQNDgQNEgC7fEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwATABMmZQBnAGcAZwAtAGcArwJUAGcAZwATAGeAAIAAgACBAzwICAgIgB+AVggIgAAI3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMBEwATJmUAZwBnAGcALQBnAK8CVQBnAGcAEwBngACAK4AAgQM8CAgICIAfgFcICIAACN8QDwCdAJ4AnwAdAKAAoQCiAB8AowAKACEApAClACQApgATABMAEyZlAGcAZwBnAC0AZwCvAlYAZwBnABMAZ4AAgACAAIEDPAgICAiAH4BYCAiAAAjfEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEw4eABMmZQBnAGcAZwAtAGcArwJXAGcAZwATAGeAAIEBYoAAgQM8CAgICIAfgFkICIAACN8QDwCdAJ4AnwAdAKAAoQCiAB8AowAKACEApAClACQApgATABMAEyZlAGcAZwBnAC0AZwCvAlgAZwBnABMAZ4AAgACAAIEDPAgICAiAH4BaCAiAAAjfEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwATABMmZQBnAGcAZwAtAGcArwJZAGcAZwATAGeAAIAAgACBAzwICAgIgB+AWwgIgAAI3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMAEwATJmUAZwBnAGcALQBnAK8CWgBnAGcAEwBngACAAIAAgQM8CAgICIAfgFwICIAACN8QEgCdAJ4AnyeLAB0AoQCiJ4wAHwCgJ40AowAKACEApAClACQApgATABMAEwAlAEEAZwBnJ5UALQBnAFkAZwGNB5sAZwBnJ50AZ18QIFhEQnVja2V0Rm9yU3RlcmVvdHlwZXN3YXNFbmNvZGVkXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc3N0b3JhZ2VfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzb3JkZXJlZIAAgACAAIAEgLYICIEDRwiADgiAZYDOCAiBA0YIEwAAAAEZxSdq0wA2ADcACiehJ6QARqIBlgGXgD2APqInpSemgQNIgQNTgC7ZAB0AISepAAoAJCeqAB8AWCerB6QBlgBZAHgAEwAlAC0AZyezXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlgQNFgD2ADoA1gACABAiBA0nTADYANwAKJ7UnvgBGqAGsAa0BrgGvAbABsQGyAbOAQYBCgEOARIBFgEaAR4BIqCe/J8AnwSfCJ8MnxCfFJ8aBA0qBA0uBA0yBA06BA0+BA1CBA1GBA1KALt8QDwCdAJ4AnwAdAKAAoQCiAB8AowAKACEApAClACQApgATARMAEyelAGcAZwBnAC0AZwCvAawAZwBnABMAZ4AAgCuAAIEDSAgICAiAH4BBCAiAAAjfEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwATABMnpQBnAGcAZwAtAGcArwGtAGcAZwATAGeAAIAAgACBA0gICAgIgB+AQggIgAAI3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMn6AATJ6UAZwBnAGcALQBnAK8BrgBnAGcAEwBngACBA02AAIEDSAgICAiAH4BDCAiAAAjTADYANwAKJ/Yn9wBGoKCALt8QDwCdAJ4AnwAdAKAAoQCiAB8AowAKACEApAClACQApgATARMAEyelAGcAZwBnAC0AZwCvAa8AZwBnABMAZ4AAgCuAAIEDSAgICAiAH4BECAiAAAjfEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwETABMnpQBnAGcAZwAtAGcArwGwAGcAZwATAGeAAIArgACBA0gICAgIgB+ARQgIgAAI3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMBEwATJ6UAZwBnAGcALQBnAK8BsQBnAGcAEwBngACAK4AAgQNICAgICIAfgEYICIAACN8QDwCdAJ4AnwAdAKAAoQCiAB8AowAKACEApAClACQApgATABMAEyelAGcAZwBnAC0AZwCvAbIAZwBnABMAZ4AAgACAAIEDSAgICAiAH4BHCAiAAAjfEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwETABMnpQBnAGcAZwAtAGcArwGzAGcAZwATAGeAAIArgACBA0gICAgIgB+ASAgIgAAI2QAdACEoRQAKACQoRgAfAFgoRwekAZcAWQB4ABMAJQAtAGcoT18QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZYEDRYA+gA6ANYAAgAQIgQNU0wA2ADcACihRKFkARqcCVAJVAlYCVwJYAlkCWoBWgFeAWIBZgFqAW4BcpyhaKFsoXChdKF4oXyhggQNVgQNWgQNXgQNYgQNZgQNagQNbgC7fEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwATABMnpgBnAGcAZwAtAGcArwJUAGcAZwATAGeAAIAAgACBA1MICAgIgB+AVggIgAAI3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMBEwATJ6YAZwBnAGcALQBnAK8CVQBnAGcAEwBngACAK4AAgQNTCAgICIAfgFcICIAACN8QDwCdAJ4AnwAdAKAAoQCiAB8AowAKACEApAClACQApgATABMAEyemAGcAZwBnAC0AZwCvAlYAZwBnABMAZ4AAgACAAIEDUwgICAiAH4BYCAiAAAjfEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEw4eABMnpgBnAGcAZwAtAGcArwJXAGcAZwATAGeAAIEBYoAAgQNTCAgICIAfgFkICIAACN8QDwCdAJ4AnwAdAKAAoQCiAB8AowAKACEApAClACQApgATABMAEyemAGcAZwBnAC0AZwCvAlgAZwBnABMAZ4AAgACAAIEDUwgICAiAH4BaCAiAAAjfEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwATABMnpgBnAGcAZwAtAGcArwJZAGcAZwATAGeAAIAAgACBA1MICAgIgB+AWwgIgAAI3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMAEwATJ6YAZwBnAGcALQBnAK8CWgBnAGcAEwBngACAAIAAgQNTCAgICIAfgFwICIAACN8QEgCdAJ4AnyjMAB0AoQCiKM0AHwCgKM4AowAKACEApAClACQApgATABMAEwAlAEEAZwBnKNYALQBnAFkAZwGNBzIAZwBnKN4AZ18QIFhEQnVja2V0Rm9yU3RlcmVvdHlwZXN3YXNFbmNvZGVkXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc3N0b3JhZ2VfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzb3JkZXJlZIAAgACAAIAEgLYICIEDXgiADgiAZYDBCAiBA10IEsHKbc3TADYANwAKKOIo5QBGogGWAZeAPYA+oijmKOeBA1+BA2qALtkAHQAhKOoACgAkKOsAHwBYKOwHpQGWAFkAeAATACUALQBnKPRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBA1yAPYAOgDWAAIAECIEDYNMANgA3AAoo9ij/AEaoAawBrQGuAa8BsAGxAbIBs4BBgEKAQ4BEgEWARoBHgEioKQApASkCKQMpBCkFKQYpB4EDYYEDYoEDY4EDZYEDZoEDZ4EDaIEDaYAu3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMBEwATKOYAZwBnAGcALQBnAK8BrABnAGcAEwBngACAK4AAgQNfCAgICIAfgEEICIAACN8QDwCdAJ4AnwAdAKAAoQCiAB8AowAKACEApAClACQApgATABMAEyjmAGcAZwBnAC0AZwCvAa0AZwBnABMAZ4AAgACAAIEDXwgICAiAH4BCCAiAAAjfEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEykpABMo5gBnAGcAZwAtAGcArwGuAGcAZwATAGeAAIEDZIAAgQNfCAgICIAfgEMICIAACNMANgA3AAopNyk4AEagoIAu3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMBEwATKOYAZwBnAGcALQBnAK8BrwBnAGcAEwBngACAK4AAgQNfCAgICIAfgEQICIAACN8QDwCdAJ4AnwAdAKAAoQCiAB8AowAKACEApAClACQApgATARMAEyjmAGcAZwBnAC0AZwCvAbAAZwBnABMAZ4AAgCuAAIEDXwgICAiAH4BFCAiAAAjfEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwETABMo5gBnAGcAZwAtAGcArwGxAGcAZwATAGeAAIArgACBA18ICAgIgB+ARggIgAAI3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMAEwATKOYAZwBnAGcALQBnAK8BsgBnAGcAEwBngACAAIAAgQNfCAgICIAfgEcICIAACN8QDwCdAJ4AnwAdAKAAoQCiAB8AowAKACEApAClACQApgATARMAEyjmAGcAZwBnAC0AZwCvAbMAZwBnABMAZ4AAgCuAAIEDXwgICAiAH4BICAiAAAjZAB0AISmGAAoAJCmHAB8AWCmIB6UBlwBZAHgAEwAlAC0AZymQXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlgQNcgD6ADoA1gACABAiBA2vTADYANwAKKZIpmgBGpwJUAlUCVgJXAlgCWQJagFaAV4BYgFmAWoBbgFynKZspnCmdKZ4pnymgKaGBA2yBA22BA26BA2+BA3CBA3GBA3KALt8QDwCdAJ4AnwAdAKAAoQCiAB8AowAKACEApAClACQApgATABMAEyjnAGcAZwBnAC0AZwCvAlQAZwBnABMAZ4AAgACAAIEDaggICAiAH4BWCAiAAAjfEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwETABMo5wBnAGcAZwAtAGcArwJVAGcAZwATAGeAAIArgACBA2oICAgIgB+AVwgIgAAI3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMAEwATKOcAZwBnAGcALQBnAK8CVgBnAGcAEwBngACAAIAAgQNqCAgICIAfgFgICIAACN8QDwCdAJ4AnwAdAKAAoQCiAB8AowAKACEApAClACQApgATEKEAEyjnAGcAZwBnAC0AZwCvAlcAZwBnABMAZ4AAgQGRgACBA2oICAgIgB+AWQgIgAAI3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMAEwATKOcAZwBnAGcALQBnAK8CWABnAGcAEwBngACAAIAAgQNqCAgICIAfgFoICIAACN8QDwCdAJ4AnwAdAKAAoQCiAB8AowAKACEApAClACQApgATABMAEyjnAGcAZwBnAC0AZwCvAlkAZwBnABMAZ4AAgACAAIEDaggICAiAH4BbCAiAAAjfEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwATABMo5wBnAGcAZwAtAGcArwJaAGcAZwATAGeAAIAAgACBA2oICAgIgB+AXAgIgAAI3xASAJ0AngCfKg0AHQChAKIqDgAfAKAqDwCjAAoAIQCkAKUAJACmABMAEwATACUAQQBnAGcqFwAtAGcAWQBnAY0HnQBnAGcqHwBnXxAgWERCdWNrZXRGb3JTdGVyZW90eXBlc3dhc0VuY29kZWRfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzc3RvcmFnZV8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNvcmRlcmVkgACAAIAAgASAtggIgQN1CIAOCIBlgM8ICIEDdAgS6BXWRdMANgA3AAoqIyomAEaiAZYBl4A9gD6iKicqKIEDdoEDgoAu2QAdACEqKwAKACQqLAAfAFgqLQemAZYAWQB4ABMAJQAtAGcqNV8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZYEDc4A9gA6ANYAAgAQIgQN30wA2ADcACio3KkAARqgBrAGtAa4BrwGwAbEBsgGzgEGAQoBDgESARYBGgEeASKgqQSpCKkMqRCpFKkYqRypIgQN4gQN5gQN6gQN9gQN+gQN/gQOAgQOBgC7fEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwETABMqJwBnAGcAZwAtAGcArwGsAGcAZwATAGeAAIArgACBA3YICAgIgB+AQQgIgAAI3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMAEwATKicAZwBnAGcALQBnAK8BrQBnAGcAEwBngACAAIAAgQN2CAgICIAfgEIICIAACN8QDwCdAJ4AnwAdAKAAoQCiAB8AowAKACEApAClACQApgATKmoAEyonAGcAZwBnAC0AZwCvAa4AZwBnABMAZ4AAgQN7gACBA3YICAgIgB+AQwgIgAAI0wA2ADcACip4KnoARqEqeYEDfKEivoEC7IAuXxAXYXR0cmlidXRlVmFsdWVDbGFzc05hbWXfEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwETABMqJwBnAGcAZwAtAGcArwGvAGcAZwATAGeAAIArgACBA3YICAgIgB+ARAgIgAAI3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMBEwATKicAZwBnAGcALQBnAK8BsABnAGcAEwBngACAK4AAgQN2CAgICIAfgEUICIAACN8QDwCdAJ4AnwAdAKAAoQCiAB8AowAKACEApAClACQApgATARMAEyonAGcAZwBnAC0AZwCvAbEAZwBnABMAZ4AAgCuAAIEDdggICAiAH4BGCAiAAAjfEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwATABMqJwBnAGcAZwAtAGcArwGyAGcAZwATAGeAAIAAgACBA3YICAgIgB+ARwgIgAAI3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMBEwATKicAZwBnAGcALQBnAK8BswBnAGcAEwBngACAK4AAgQN2CAgICIAfgEgICIAACNkAHQAhKsoACgAkKssAHwBYKswHpgGXAFkAeAATACUALQBnKtRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBA3OAPoAOgDWAAIAECIEDg9MANgA3AAoq1ireAEanAlQCVQJWAlcCWAJZAlqAVoBXgFiAWYBagFuAXKcq3yrgKuEq4irjKuQq5YEDhIEDhYEDhoEDh4EDiIEDiYEDioAu3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMAEwATKigAZwBnAGcALQBnAK8CVABnAGcAEwBngACAAIAAgQOCCAgICIAfgFYICIAACN8QDwCdAJ4AnwAdAKAAoQCiAB8AowAKACEApAClACQApgATARMAEyooAGcAZwBnAC0AZwCvAlUAZwBnABMAZ4AAgCuAAIEDgggICAiAH4BXCAiAAAjfEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwATABMqKABnAGcAZwAtAGcArwJWAGcAZwATAGeAAIAAgACBA4IICAgIgB+AWAgIgAAI3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMQoQATKigAZwBnAGcALQBnAK8CVwBnAGcAEwBngACBAZGAAIEDgggICAiAH4BZCAiAAAjfEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwATABMqKABnAGcAZwAtAGcArwJYAGcAZwATAGeAAIAAgACBA4IICAgIgB+AWggIgAAI3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMAEwATKigAZwBnAGcALQBnAK8CWQBnAGcAEwBngACAAIAAgQOCCAgICIAfgFsICIAACN8QDwCdAJ4AnwAdAKAAoQCiAB8AowAKACEApAClACQApgATABMAEyooAGcAZwBnAC0AZwCvAloAZwBnABMAZ4AAgACAAIEDgggICAiAH4BcCAiAAAjfEBIAnQCeAJ8rUQAdAKEAoitSAB8AoCtTAKMACgAhAKQApQAkAKYAEwATABMAJQBBAGcAZytbAC0AZwBZAGcBjQeeAGcAZytjAGdfECBYREJ1Y2tldEZvclN0ZXJlb3R5cGVzd2FzRW5jb2RlZF8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNzdG9yYWdlXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc29yZGVyZWSAAIAAgACABIC2CAiBA40IgA4IgGWA0AgIgQOMCBLiAmmv0wA2ADcACitnK2oARqIBlgGXgD2APqIraytsgQOOgQObgC7ZAB0AIStvAAoAJCtwAB8AWCtxB6cBlgBZAHgAEwAlAC0AZyt5XxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlgQOLgD2ADoA1gACABAiBA4/TADYANwAKK3srhABGqAGsAa0BrgGvAbABsQGyAbOAQYBCgEOARIBFgEaAR4BIqCuFK4YrhyuIK4kriiuLK4yBA5CBA5GBA5KBA5aBA5eBA5iBA5mBA5qALt8QDwCdAJ4AnwAdAKAAoQCiAB8AowAKACEApAClACQApgATARMAEytrAGcAZwBnAC0AZwCvAawAZwBnABMAZ4AAgCuAAIEDjggICAiAH4BBCAiAAAjfEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwATABMrawBnAGcAZwAtAGcArwGtAGcAZwATAGeAAIAAgACBA44ICAgIgB+AQggIgAAI3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMrrgATK2sAZwBnAGcALQBnAK8BrgBnAGcAEwBngACBA5OAAIEDjggICAiAH4BDCAiAAAjTADYANwAKK7wrvgBGoSu9gQOUoSu/gQOVgC5fEBhhdHRyaWJ1dGVWYWx1ZVNjYWxhclR5cGVdU2F2ZVN0YXRlVHlwZd8QDwCdAJ4AnwAdAKAAoQCiAB8AowAKACEApAClACQApgATARMAEytrAGcAZwBnAC0AZwCvAa8AZwBnABMAZ4AAgCuAAIEDjggICAiAH4BECAiAAAjfEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwETABMrawBnAGcAZwAtAGcArwGwAGcAZwATAGeAAIArgACBA44ICAgIgB+ARQgIgAAI3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMBEwATK2sAZwBnAGcALQBnAK8BsQBnAGcAEwBngACAK4AAgQOOCAgICIAfgEYICIAACN8QDwCdAJ4AnwAdAKAAoQCiAB8AowAKACEApAClACQApgATABMAEytrAGcAZwBnAC0AZwCvAbIAZwBnABMAZ4AAgACAAIEDjggICAiAH4BHCAiAAAjfEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwETABMrawBnAGcAZwAtAGcArwGzAGcAZwATAGeAAIArgACBA44ICAgIgB+ASAgIgAAI2QAdACEsDwAKACQsEAAfAFgsEQenAZcAWQB4ABMAJQAtAGcsGV8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZYEDi4A+gA6ANYAAgAQIgQOc0wA2ADcACiwbLCMARqcCVAJVAlYCVwJYAlkCWoBWgFeAWIBZgFqAW4BcpywkLCUsJiwnLCgsKSwqgQOdgQOfgQOggQOhgQOigQOjgQOkgC7fEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEywuABMrbABnAGcAZwAtAGcArwJUAGcAZwATAGeAAIEDnoAAgQObCAgICIAfgFYICIAACFEx3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMBEwATK2wAZwBnAGcALQBnAK8CVQBnAGcAEwBngACAK4AAgQObCAgICIAfgFcICIAACN8QDwCdAJ4AnwAdAKAAoQCiAB8AowAKACEApAClACQApgATABMAEytsAGcAZwBnAC0AZwCvAlYAZwBnABMAZ4AAgACAAIEDmwgICAiAH4BYCAiAAAjfEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwZxABMrbABnAGcAZwAtAGcArwJXAGcAZwATAGeAAICvgACBA5sICAgIgB+AWQgIgAAI3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMAEwATK2wAZwBnAGcALQBnAK8CWABnAGcAEwBngACAAIAAgQObCAgICIAfgFoICIAACN8QDwCdAJ4AnwAdAKAAoQCiAB8AowAKACEApAClACQApgATABMAEytsAGcAZwBnAC0AZwCvAlkAZwBnABMAZ4AAgACAAIEDmwgICAiAH4BbCAiAAAjfEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwATABMrbABnAGcAZwAtAGcArwJaAGcAZwATAGeAAIAAgACBA5sICAgIgB+AXAgIgAAI3xASAJ0AngCfLJcAHQChAKIsmAAfAKAsmQCjAAoAIQCkAKUAJACmABMAEwATACUAQQBnAGcsoQAtAGcAWQBnAY0HnwBnAGcsqQBnXxAgWERCdWNrZXRGb3JTdGVyZW90eXBlc3dhc0VuY29kZWRfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzc3RvcmFnZV8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNvcmRlcmVkgACAAIAAgASAtggIgQOnCIAOCIBlgNEICIEDpggSbnSnZNMANgA3AAosrSywAEaiAZYBl4A9gD6iLLEssoEDqIEDs4Au2QAdACEstQAKACQstgAfAFgstweoAZYAWQB4ABMAJQAtAGcsv18QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZYEDpYA9gA6ANYAAgAQIgQOp0wA2ADcACizBLMoARqgBrAGtAa4BrwGwAbEBsgGzgEGAQoBDgESARYBGgEeASKgsyyzMLM0szizPLNAs0SzSgQOqgQOrgQOsgQOugQOvgQOwgQOxgQOygC7fEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwETABMssQBnAGcAZwAtAGcArwGsAGcAZwATAGeAAIArgACBA6gICAgIgB+AQQgIgAAI3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMAEwATLLEAZwBnAGcALQBnAK8BrQBnAGcAEwBngACAAIAAgQOoCAgICIAfgEIICIAACN8QDwCdAJ4AnwAdAKAAoQCiAB8AowAKACEApAClACQApgATLPQAEyyxAGcAZwBnAC0AZwCvAa4AZwBnABMAZ4AAgQOtgACBA6gICAgIgB+AQwgIgAAI0wA2ADcACi0CLQMARqCggC7fEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwETABMssQBnAGcAZwAtAGcArwGvAGcAZwATAGeAAIArgACBA6gICAgIgB+ARAgIgAAI3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMIMgATLLEAZwBnAGcALQBnAK8BsABnAGcAEwBngACA3oAAgQOoCAgICIAfgEUICIAACN8QDwCdAJ4AnwAdAKAAoQCiAB8AowAKACEApAClACQApgATARMAEyyxAGcAZwBnAC0AZwCvAbEAZwBnABMAZ4AAgCuAAIEDqAgICAiAH4BGCAiAAAjfEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwATABMssQBnAGcAZwAtAGcArwGyAGcAZwATAGeAAIAAgACBA6gICAgIgB+ARwgIgAAI3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMBEwATLLEAZwBnAGcALQBnAK8BswBnAGcAEwBngACAK4AAgQOoCAgICIAfgEgICIAACNkAHQAhLVEACgAkLVIAHwBYLVMHqAGXAFkAeAATACUALQBnLVtfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBA6WAPoAOgDWAAIAECIEDtNMANgA3AAotXS1lAEanAlQCVQJWAlcCWAJZAlqAVoBXgFiAWYBagFuAXKctZi1nLWgtaS1qLWstbIEDtYEDtoEDt4EDuIEDuYEDuoEDu4Au3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMAEwATLLIAZwBnAGcALQBnAK8CVABnAGcAEwBngACAAIAAgQOzCAgICIAfgFYICIAACN8QDwCdAJ4AnwAdAKAAoQCiAB8AowAKACEApAClACQApgATARMAEyyyAGcAZwBnAC0AZwCvAlUAZwBnABMAZ4AAgCuAAIEDswgICAiAH4BXCAiAAAjfEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwATABMssgBnAGcAZwAtAGcArwJWAGcAZwATAGeAAIAAgACBA7MICAgIgB+AWAgIgAAI3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMQoQATLLIAZwBnAGcALQBnAK8CVwBnAGcAEwBngACBAZGAAIEDswgICAiAH4BZCAiAAAjfEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwATABMssgBnAGcAZwAtAGcArwJYAGcAZwATAGeAAIAAgACBA7MICAgIgB+AWggIgAAI3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMAEwATLLIAZwBnAGcALQBnAK8CWQBnAGcAEwBngACAAIAAgQOzCAgICIAfgFsICIAACN8QDwCdAJ4AnwAdAKAAoQCiAB8AowAKACEApAClACQApgATABMAEyyyAGcAZwBnAC0AZwCvAloAZwBnABMAZ4AAgACAAIEDswgICAiAH4BcCAiAAAjSADcACi3YALeggB7fEBAt2y3cLd0t3gAdLd8t4AAfLeEt4gAKACEt4y3kACQAWABZLeYAJQAlABAt6gBfAC0AJQBZAGIAPQBZLfEt8gBnXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlXxAgWERCdWNrZXRGb3JTdGVyZW90eXBlc3dhc0VuY29kZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzc3RvcmFnZV8QJFhEQnVja2V0Rm9yR2VuZXJhbGl6YXRpb25zZHVwbGljYXRlc18QJFhEQnVja2V0Rm9yR2VuZXJhbGl6YXRpb25zd2FzRW5jb2RlZF8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNvcmRlcmVkXxAhWERCdWNrZXRGb3JHZW5lcmFsaXphdGlvbnNvcmRlcmVkXxAhWERCdWNrZXRGb3JHZW5lcmFsaXphdGlvbnNzdG9yYWdlgA6BA9GABIAEgAKBA7+As4AEgA6AtYAKgA6BBGKBA74IEjBh/wHTADYANwAKLfYt+ABGoQBsgBChLfmBA8CALtkAHQAhLfwACgAkLf0AHwBYLf4ARABsAFkAeAATACUALQBnLgZfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBA72AEIAOgDWAAIAECIEDwdMANgA3AAouCC4SAEapAH8AgACBAIIAgwCEAIUAhgCHgBOAFIAVgBaAF4AYgBmAGoAbqS4TLhQuFS4WLhcuGC4ZLhouG4EDwoEDxIEDxYEDyIEDyYEDy4EDzIEDzoEDz4Au3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMuHwATLfkAZwBnAGcALQBnAK8AfwBnAGcAEwBngACBA8OAAIEDwAgICAiAH4ATCAiAAAjSADcACi4tALeggB7fEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwATABMt+QBnAGcAZwAtAGcArwCAAGcAZwATAGeAAIAAgACBA8AICAgIgB+AFAgIgAAI3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMuQAATLfkAZwBnAGcALQBnAK8AgQBnAGcAEwBngACBA8aAAIEDwAgICAiAH4AVCAiAAAjSADcACi5OALehLk+BA8eAHtIANwAKLlIAt6IHMgDqgMGAJYAe3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMAEwATLfkAZwBnAGcALQBnAK8AggBnAGcAEwBngACAAIAAgQPACAgICIAfgBYICIAACN8QDwCdAJ4AnwAdAKAAoQCiAB8AowAKACEApAClACQApgATLmcAEy35AGcAZwBnAC0AZwCvAIMAZwBnABMAZ4AAgQPKgACBA8AICAgIgB+AFwgIgAAI0gA3AAoudQC3oIAe3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMBEwATLfkAZwBnAGcALQBnAK8AhABnAGcAEwBngACAK4AAgQPACAgICIAfgBgICIAACN8QDwCdAJ4AnwAdAKAAoQCiAB8AowAKACEApAClACQApgATLogAEy35AGcAZwBnAC0AZwCvAIUAZwBnABMAZ4AAgQPNgACBA8AICAgIgB+AGQgIgAAI0wA2ADcACi6WLpcARqCggC7fEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwE6ABMt+QBnAGcAZwAtAGcArwCGAGcAZwATAGeAAIAwgACBA8AICAgIgB+AGggIgAAI3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMuqgATLfkAZwBnAGcALQBnAK8AhwBnAGcAEwBngACBA9CAAIEDwAgICAiAH4AbCAiAAAheQ29udHJvbGxlclNraW7TADYANwAKLrkuwABGpi66AOoHnQcyB58uv4ED0oAlgM+AwYDRgQPTpi7BLsIuwy7ELsUuxoED1IED7IEEBIEEG4EEMoEESYAuWmlzU3RhbmRhcmRfEBdzdXBwb3J0ZWRDb25maWd1cmF0aW9uc98QEgCdAJ4Any7LAB0AoQCiLswAHwCgLs0AowAKACEApAClACQApgATABMAEwAlAEQAZwBnLtUALQBnAFkAZwGNLroAZwBnLt0AZ18QIFhEQnVja2V0Rm9yU3RlcmVvdHlwZXN3YXNFbmNvZGVkXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc3N0b3JhZ2VfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzb3JkZXJlZIAAgACAAIAEgQO9CAiBA9YIgA4IgGWBA9IICIED1QgSJ43uudMANgA3AAou4S7kAEaiAZYBl4A9gD6iLuUu5oED14ED4oAu2QAdACEu6QAKACQu6gAfAFgu6y7BAZYAWQB4ABMAJQAtAGcu818QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZYED1IA9gA6ANYAAgAQIgQPY0wA2ADcACi71Lv4ARqgBrAGtAa4BrwGwAbEBsgGzgEGAQoBDgESARYBGgEeASKgu/y8ALwEvAi8DLwQvBS8GgQPZgQPagQPbgQPdgQPegQPfgQPggQPhgC7fEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwETABMu5QBnAGcAZwAtAGcArwGsAGcAZwATAGeAAIArgACBA9cICAgIgB+AQQgIgAAI3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMAEwATLuUAZwBnAGcALQBnAK8BrQBnAGcAEwBngACAAIAAgQPXCAgICIAfgEIICIAACN8QDwCdAJ4AnwAdAKAAoQCiAB8AowAKACEApAClACQApgATLygAEy7lAGcAZwBnAC0AZwCvAa4AZwBnABMAZ4AAgQPcgACBA9cICAgIgB+AQwgIgAAI0wA2ADcACi82LzcARqCggC7fEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwETABMu5QBnAGcAZwAtAGcArwGvAGcAZwATAGeAAIArgACBA9cICAgIgB+ARAgIgAAI3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMBEwATLuUAZwBnAGcALQBnAK8BsABnAGcAEwBngACAK4AAgQPXCAgICIAfgEUICIAACN8QDwCdAJ4AnwAdAKAAoQCiAB8AowAKACEApAClACQApgATARMAEy7lAGcAZwBnAC0AZwCvAbEAZwBnABMAZ4AAgCuAAIED1wgICAiAH4BGCAiAAAjfEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwATABMu5QBnAGcAZwAtAGcArwGyAGcAZwATAGeAAIAAgACBA9cICAgIgB+ARwgIgAAI3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMBEwATLuUAZwBnAGcALQBnAK8BswBnAGcAEwBngACAK4AAgQPXCAgICIAfgEgICIAACNkAHQAhL4UACgAkL4YAHwBYL4cuwQGXAFkAeAATACUALQBnL49fECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBA9SAPoAOgDWAAIAECIED49MANgA3AAovkS+ZAEanAlQCVQJWAlcCWAJZAlqAVoBXgFiAWYBagFuAXKcvmi+bL5wvnS+eL58voIED5IED5oED54ED6IED6YED6oED64Au3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMvpAATLuYAZwBnAGcALQBnAK8CVABnAGcAEwBngACBA+WAAIED4ggICAiAH4BWCAiAAAhSTk/fEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwETABMu5gBnAGcAZwAtAGcArwJVAGcAZwATAGeAAIArgACBA+IICAgIgB+AVwgIgAAI3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMAEwATLuYAZwBnAGcALQBnAK8CVgBnAGcAEwBngACAAIAAgQPiCAgICIAfgFgICIAACN8QDwCdAJ4AnwAdAKAAoQCiAB8AowAKACEApAClACQApgATFasAEy7mAGcAZwBnAC0AZwCvAlcAZwBnABMAZ4AAgQHxgACBA+IICAgIgB+AWQgIgAAI3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMAEwATLuYAZwBnAGcALQBnAK8CWABnAGcAEwBngACAAIAAgQPiCAgICIAfgFoICIAACN8QDwCdAJ4AnwAdAKAAoQCiAB8AowAKACEApAClACQApgATABMAEy7mAGcAZwBnAC0AZwCvAlkAZwBnABMAZ4AAgACAAIED4ggICAiAH4BbCAiAAAjfEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwATABMu5gBnAGcAZwAtAGcArwJaAGcAZwATAGeAAIAAgACBA+IICAgIgB+AXAgIgAAI3xASAJ0AngCfMA0AHQChAKIwDgAfAKAwDwCjAAoAIQCkAKUAJACmABMAEwATACUARABnAGcwFwAtAGcAWQBnAY0A6gBnAGcwHwBnXxAgWERCdWNrZXRGb3JTdGVyZW90eXBlc3dhc0VuY29kZWRfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzc3RvcmFnZV8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNvcmRlcmVkgACAAIAAgASBA70ICIED7giADgiAZYAlCAiBA+0IEnv84hzTADYANwAKMCMwJgBGogGWAZeAPYA+ojAnMCiBA++BA/uALtkAHQAhMCsACgAkMCwAHwBYMC0uwgGWAFkAeAATACUALQBnMDVfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBA+yAPYAOgDWAAIAECIED8NMANgA3AAowNzBAAEaoAawBrQGuAa8BsAGxAbIBs4BBgEKAQ4BEgEWARoBHgEioMEEwQjBDMEQwRTBGMEcwSIED8YED8oED84ED9oED94ED+IED+YED+oAu3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMBEwATMCcAZwBnAGcALQBnAK8BrABnAGcAEwBngACAK4AAgQPvCAgICIAfgEEICIAACN8QDwCdAJ4AnwAdAKAAoQCiAB8AowAKACEApAClACQApgATABMAEzAnAGcAZwBnAC0AZwCvAa0AZwBnABMAZ4AAgACAAIED7wgICAiAH4BCCAiAAAjfEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEzBqABMwJwBnAGcAZwAtAGcArwGuAGcAZwATAGeAAIED9IAAgQPvCAgICIAfgEMICIAACNMANgA3AAoweDB6AEahMHmBA/WhAfeAToAuXxAXYXR0cmlidXRlVmFsdWVDbGFzc05hbWXfEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwETABMwJwBnAGcAZwAtAGcArwGvAGcAZwATAGeAAIArgACBA+8ICAgIgB+ARAgIgAAI3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMBEwATMCcAZwBnAGcALQBnAK8BsABnAGcAEwBngACAK4AAgQPvCAgICIAfgEUICIAACN8QDwCdAJ4AnwAdAKAAoQCiAB8AowAKACEApAClACQApgATARMAEzAnAGcAZwBnAC0AZwCvAbEAZwBnABMAZ4AAgCuAAIED7wgICAiAH4BGCAiAAAjfEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwATABMwJwBnAGcAZwAtAGcArwGyAGcAZwATAGeAAIAAgACBA+8ICAgIgB+ARwgIgAAI3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMBEwATMCcAZwBnAGcALQBnAK8BswBnAGcAEwBngACAK4AAgQPvCAgICIAfgEgICIAACNkAHQAhMMoACgAkMMsAHwBYMMwuwgGXAFkAeAATACUALQBnMNRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBA+yAPoAOgDWAAIAECIED/NMANgA3AAow1jDeAEanAlQCVQJWAlcCWAJZAlqAVoBXgFiAWYBagFuAXKcw3zDgMOEw4jDjMOQw5YED/YED/oED/4EEAIEEAYEEAoEEA4Au3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMAEwATMCgAZwBnAGcALQBnAK8CVABnAGcAEwBngACAAIAAgQP7CAgICIAfgFYICIAACN8QDwCdAJ4AnwAdAKAAoQCiAB8AowAKACEApAClACQApgATARMAEzAoAGcAZwBnAC0AZwCvAlUAZwBnABMAZ4AAgCuAAIED+wgICAiAH4BXCAiAAAjfEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwATABMwKABnAGcAZwAtAGcArwJWAGcAZwATAGeAAIAAgACBA/sICAgIgB+AWAgIgAAI3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMCmgATMCgAZwBnAGcALQBnAK8CVwBnAGcAEwBngACAYYAAgQP7CAgICIAfgFkICIAACN8QDwCdAJ4AnwAdAKAAoQCiAB8AowAKACEApAClACQApgATABMAEzAoAGcAZwBnAC0AZwCvAlgAZwBnABMAZ4AAgACAAIED+wgICAiAH4BaCAiAAAjfEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwATABMwKABnAGcAZwAtAGcArwJZAGcAZwATAGeAAIAAgACBA/sICAgIgB+AWwgIgAAI3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMAEwATMCgAZwBnAGcALQBnAK8CWgBnAGcAEwBngACAAIAAgQP7CAgICIAfgFwICIAACN8QEgCdAJ4AnzFRAB0AoQCiMVIAHwCgMVMAowAKACEApAClACQApgATABMAEwAlAEQAZwBnMVsALQBnAFkAZwGNB50AZwBnMWMAZ18QIFhEQnVja2V0Rm9yU3RlcmVvdHlwZXN3YXNFbmNvZGVkXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc3N0b3JhZ2VfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzb3JkZXJlZIAAgACAAIAEgQO9CAiBBAYIgA4IgGWAzwgIgQQFCBI8OV2Y0wA2ADcACjFnMWoARqIBlgGXgD2APqIxazFsgQQHgQQSgC7ZAB0AITFvAAoAJDFwAB8AWDFxLsMBlgBZAHgAEwAlAC0AZzF5XxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlgQQEgD2ADoA1gACABAiBBAjTADYANwAKMXsxhABGqAGsAa0BrgGvAbABsQGyAbOAQYBCgEOARIBFgEaAR4BIqDGFMYYxhzGIMYkxijGLMYyBBAmBBAqBBAuBBA2BBA6BBA+BBBCBBBGALt8QDwCdAJ4AnwAdAKAAoQCiAB8AowAKACEApAClACQApgATARMAEzFrAGcAZwBnAC0AZwCvAawAZwBnABMAZ4AAgCuAAIEEBwgICAiAH4BBCAiAAAjfEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwATABMxawBnAGcAZwAtAGcArwGtAGcAZwATAGeAAIAAgACBBAcICAgIgB+AQggIgAAI3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMxrgATMWsAZwBnAGcALQBnAK8BrgBnAGcAEwBngACBBAyAAIEEBwgICAiAH4BDCAiAAAjTADYANwAKMbwxvQBGoKCALt8QDwCdAJ4AnwAdAKAAoQCiAB8AowAKACEApAClACQApgATARMAEzFrAGcAZwBnAC0AZwCvAa8AZwBnABMAZ4AAgCuAAIEEBwgICAiAH4BECAiAAAjfEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwETABMxawBnAGcAZwAtAGcArwGwAGcAZwATAGeAAIArgACBBAcICAgIgB+ARQgIgAAI3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMBEwATMWsAZwBnAGcALQBnAK8BsQBnAGcAEwBngACAK4AAgQQHCAgICIAfgEYICIAACN8QDwCdAJ4AnwAdAKAAoQCiAB8AowAKACEApAClACQApgATABMAEzFrAGcAZwBnAC0AZwCvAbIAZwBnABMAZ4AAgACAAIEEBwgICAiAH4BHCAiAAAjfEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwETABMxawBnAGcAZwAtAGcArwGzAGcAZwATAGeAAIArgACBBAcICAgIgB+ASAgIgAAI2QAdACEyCwAKACQyDAAfAFgyDS7DAZcAWQB4ABMAJQAtAGcyFV8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZYEEBIA+gA6ANYAAgAQIgQQT0wA2ADcACjIXMh8ARqcCVAJVAlYCVwJYAlkCWoBWgFeAWIBZgFqAW4BcpzIgMiEyIjIjMiQyJTImgQQUgQQVgQQWgQQXgQQYgQQZgQQagC7fEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwATABMxbABnAGcAZwAtAGcArwJUAGcAZwATAGeAAIAAgACBBBIICAgIgB+AVggIgAAI3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMBEwATMWwAZwBnAGcALQBnAK8CVQBnAGcAEwBngACAK4AAgQQSCAgICIAfgFcICIAACN8QDwCdAJ4AnwAdAKAAoQCiAB8AowAKACEApAClACQApgATABMAEzFsAGcAZwBnAC0AZwCvAlYAZwBnABMAZ4AAgACAAIEEEggICAiAH4BYCAiAAAjfEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAExChABMxbABnAGcAZwAtAGcArwJXAGcAZwATAGeAAIEBkYAAgQQSCAgICIAfgFkICIAACN8QDwCdAJ4AnwAdAKAAoQCiAB8AowAKACEApAClACQApgATABMAEzFsAGcAZwBnAC0AZwCvAlgAZwBnABMAZ4AAgACAAIEEEggICAiAH4BaCAiAAAjfEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwATABMxbABnAGcAZwAtAGcArwJZAGcAZwATAGeAAIAAgACBBBIICAgIgB+AWwgIgAAI3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMAEwATMWwAZwBnAGcALQBnAK8CWgBnAGcAEwBngACAAIAAgQQSCAgICIAfgFwICIAACN8QEgCdAJ4AnzKSAB0AoQCiMpMAHwCgMpQAowAKACEApAClACQApgATABMAEwAlAEQAZwBnMpwALQBnAFkAZwGNBzIAZwBnMqQAZ18QIFhEQnVja2V0Rm9yU3RlcmVvdHlwZXN3YXNFbmNvZGVkXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc3N0b3JhZ2VfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzb3JkZXJlZIAAgACAAIAEgQO9CAiBBB0IgA4IgGWAwQgIgQQcCBKVEqWc0wA2ADcACjKoMqsARqIBlgGXgD2APqIyrDKtgQQegQQpgC7ZAB0AITKwAAoAJDKxAB8AWDKyLsQBlgBZAHgAEwAlAC0AZzK6XxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlgQQbgD2ADoA1gACABAiBBB/TADYANwAKMrwyxQBGqAGsAa0BrgGvAbABsQGyAbOAQYBCgEOARIBFgEaAR4BIqDLGMscyyDLJMsoyyzLMMs2BBCCBBCGBBCKBBCSBBCWBBCaBBCeBBCiALt8QDwCdAJ4AnwAdAKAAoQCiAB8AowAKACEApAClACQApgATARMAEzKsAGcAZwBnAC0AZwCvAawAZwBnABMAZ4AAgCuAAIEEHggICAiAH4BBCAiAAAjfEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwATABMyrABnAGcAZwAtAGcArwGtAGcAZwATAGeAAIAAgACBBB4ICAgIgB+AQggIgAAI3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMy7wATMqwAZwBnAGcALQBnAK8BrgBnAGcAEwBngACBBCOAAIEEHggICAiAH4BDCAiAAAjTADYANwAKMv0y/gBGoKCALt8QDwCdAJ4AnwAdAKAAoQCiAB8AowAKACEApAClACQApgATARMAEzKsAGcAZwBnAC0AZwCvAa8AZwBnABMAZ4AAgCuAAIEEHggICAiAH4BECAiAAAjfEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwETABMyrABnAGcAZwAtAGcArwGwAGcAZwATAGeAAIArgACBBB4ICAgIgB+ARQgIgAAI3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMBEwATMqwAZwBnAGcALQBnAK8BsQBnAGcAEwBngACAK4AAgQQeCAgICIAfgEYICIAACN8QDwCdAJ4AnwAdAKAAoQCiAB8AowAKACEApAClACQApgATABMAEzKsAGcAZwBnAC0AZwCvAbIAZwBnABMAZ4AAgACAAIEEHggICAiAH4BHCAiAAAjfEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwETABMyrABnAGcAZwAtAGcArwGzAGcAZwATAGeAAIArgACBBB4ICAgIgB+ASAgIgAAI2QAdACEzTAAKACQzTQAfAFgzTi7EAZcAWQB4ABMAJQAtAGczVl8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZYEEG4A+gA6ANYAAgAQIgQQq0wA2ADcACjNYM2AARqcCVAJVAlYCVwJYAlkCWoBWgFeAWIBZgFqAW4BcpzNhM2IzYzNkM2UzZjNngQQrgQQsgQQtgQQugQQvgQQwgQQxgC7fEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwATABMyrQBnAGcAZwAtAGcArwJUAGcAZwATAGeAAIAAgACBBCkICAgIgB+AVggIgAAI3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMBEwATMq0AZwBnAGcALQBnAK8CVQBnAGcAEwBngACAK4AAgQQpCAgICIAfgFcICIAACN8QDwCdAJ4AnwAdAKAAoQCiAB8AowAKACEApAClACQApgATABMAEzKtAGcAZwBnAC0AZwCvAlYAZwBnABMAZ4AAgACAAIEEKQgICAiAH4BYCAiAAAjfEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAExChABMyrQBnAGcAZwAtAGcArwJXAGcAZwATAGeAAIEBkYAAgQQpCAgICIAfgFkICIAACN8QDwCdAJ4AnwAdAKAAoQCiAB8AowAKACEApAClACQApgATABMAEzKtAGcAZwBnAC0AZwCvAlgAZwBnABMAZ4AAgACAAIEEKQgICAiAH4BaCAiAAAjfEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwATABMyrQBnAGcAZwAtAGcArwJZAGcAZwATAGeAAIAAgACBBCkICAgIgB+AWwgIgAAI3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMAEwATMq0AZwBnAGcALQBnAK8CWgBnAGcAEwBngACAAIAAgQQpCAgICIAfgFwICIAACN8QEgCdAJ4AnzPTAB0AoQCiM9QAHwCgM9UAowAKACEApAClACQApgATABMAEwAlAEQAZwBnM90ALQBnAFkAZwGNB58AZwBnM+UAZ18QIFhEQnVja2V0Rm9yU3RlcmVvdHlwZXN3YXNFbmNvZGVkXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc3N0b3JhZ2VfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzb3JkZXJlZIAAgACAAIAEgQO9CAiBBDQIgA4IgGWA0QgIgQQzCBJD01bK0wA2ADcACjPpM+wARqIBlgGXgD2APqIz7TPugQQ1gQRAgC7ZAB0AITPxAAoAJDPyAB8AWDPzLsUBlgBZAHgAEwAlAC0AZzP7XxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlgQQygD2ADoA1gACABAiBBDbTADYANwAKM/00BgBGqAGsAa0BrgGvAbABsQGyAbOAQYBCgEOARIBFgEaAR4BIqDQHNAg0CTQKNAs0DDQNNA6BBDeBBDiBBDmBBDuBBDyBBD2BBD6BBD+ALt8QDwCdAJ4AnwAdAKAAoQCiAB8AowAKACEApAClACQApgATARMAEzPtAGcAZwBnAC0AZwCvAawAZwBnABMAZ4AAgCuAAIEENQgICAiAH4BBCAiAAAjfEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwATABMz7QBnAGcAZwAtAGcArwGtAGcAZwATAGeAAIAAgACBBDUICAgIgB+AQggIgAAI3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABM0MAATM+0AZwBnAGcALQBnAK8BrgBnAGcAEwBngACBBDqAAIEENQgICAiAH4BDCAiAAAjTADYANwAKND40PwBGoKCALt8QDwCdAJ4AnwAdAKAAoQCiAB8AowAKACEApAClACQApgATARMAEzPtAGcAZwBnAC0AZwCvAa8AZwBnABMAZ4AAgCuAAIEENQgICAiAH4BECAiAAAjfEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwETABMz7QBnAGcAZwAtAGcArwGwAGcAZwATAGeAAIArgACBBDUICAgIgB+ARQgIgAAI3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMBEwATM+0AZwBnAGcALQBnAK8BsQBnAGcAEwBngACAK4AAgQQ1CAgICIAfgEYICIAACN8QDwCdAJ4AnwAdAKAAoQCiAB8AowAKACEApAClACQApgATABMAEzPtAGcAZwBnAC0AZwCvAbIAZwBnABMAZ4AAgACAAIEENQgICAiAH4BHCAiAAAjfEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwETABMz7QBnAGcAZwAtAGcArwGzAGcAZwATAGeAAIArgACBBDUICAgIgB+ASAgIgAAI2QAdACE0jQAKACQ0jgAfAFg0jy7FAZcAWQB4ABMAJQAtAGc0l18QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZYEEMoA+gA6ANYAAgAQIgQRB0wA2ADcACjSZNKEARqcCVAJVAlYCVwJYAlkCWoBWgFeAWIBZgFqAW4BcpzSiNKM0pDSlNKY0pzSogQRCgQRDgQREgQRFgQRGgQRHgQRIgC7fEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwATABMz7gBnAGcAZwAtAGcArwJUAGcAZwATAGeAAIAAgACBBEAICAgIgB+AVggIgAAI3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMBEwATM+4AZwBnAGcALQBnAK8CVQBnAGcAEwBngACAK4AAgQRACAgICIAfgFcICIAACN8QDwCdAJ4AnwAdAKAAoQCiAB8AowAKACEApAClACQApgATABMAEzPuAGcAZwBnAC0AZwCvAlYAZwBnABMAZ4AAgACAAIEEQAgICAiAH4BYCAiAAAjfEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAExChABMz7gBnAGcAZwAtAGcArwJXAGcAZwATAGeAAIEBkYAAgQRACAgICIAfgFkICIAACN8QDwCdAJ4AnwAdAKAAoQCiAB8AowAKACEApAClACQApgATABMAEzPuAGcAZwBnAC0AZwCvAlgAZwBnABMAZ4AAgACAAIEEQAgICAiAH4BaCAiAAAjfEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwATABMz7gBnAGcAZwAtAGcArwJZAGcAZwATAGeAAIAAgACBBEAICAgIgB+AWwgIgAAI3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMAEwATM+4AZwBnAGcALQBnAK8CWgBnAGcAEwBngACAAIAAgQRACAgICIAfgFwICIAACN8QEgCdAJ4AnzUUAB0AoQCiNRUAHwCgNRYAowAKACEApAClACQApgATABMAEwAlAEQAZwBnNR4ALQBnAFkAZwGNLr8AZwBnNSYAZ18QIFhEQnVja2V0Rm9yU3RlcmVvdHlwZXN3YXNFbmNvZGVkXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc3N0b3JhZ2VfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzb3JkZXJlZIAAgACAAIAEgQO9CAiBBEsIgA4IgGWBA9MICIEESggSalrzX9MANgA3AAo1KjUtAEaiAZYBl4A9gD6iNS41L4EETIEEWYAu2QAdACE1MgAKACQ1MwAfAFg1NC7GAZYAWQB4ABMAJQAtAGc1PF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZYEESYA9gA6ANYAAgAQIgQRN0wA2ADcACjU+NUcARqgBrAGtAa4BrwGwAbEBsgGzgEGAQoBDgESARYBGgEeASKg1SDVJNUo1SzVMNU01TjVPgQROgQRPgQRQgQRUgQRVgQRWgQRXgQRYgC7fEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwETABM1LgBnAGcAZwAtAGcArwGsAGcAZwATAGeAAIArgACBBEwICAgIgB+AQQgIgAAI3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMAEwATNS4AZwBnAGcALQBnAK8BrQBnAGcAEwBngACAAIAAgQRMCAgICIAfgEIICIAACN8QDwCdAJ4AnwAdAKAAoQCiAB8AowAKACEApAClACQApgATNXEAEzUuAGcAZwBnAC0AZwCvAa4AZwBnABMAZ4AAgQRRgACBBEwICAgIgB+AQwgIgAAI0wA2ADcACjV/NYEARqE1gIEEUqE1goEEU4AuXxAYYXR0cmlidXRlVmFsdWVTY2FsYXJUeXBlXxAcQ29udHJvbGxlclNraW5Db25maWd1cmF0aW9uc98QDwCdAJ4AnwAdAKAAoQCiAB8AowAKACEApAClACQApgATARMAEzUuAGcAZwBnAC0AZwCvAa8AZwBnABMAZ4AAgCuAAIEETAgICAiAH4BECAiAAAjfEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwETABM1LgBnAGcAZwAtAGcArwGwAGcAZwATAGeAAIArgACBBEwICAgIgB+ARQgIgAAI3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMBEwATNS4AZwBnAGcALQBnAK8BsQBnAGcAEwBngACAK4AAgQRMCAgICIAfgEYICIAACN8QDwCdAJ4AnwAdAKAAoQCiAB8AowAKACEApAClACQApgATABMAEzUuAGcAZwBnAC0AZwCvAbIAZwBnABMAZ4AAgACAAIEETAgICAiAH4BHCAiAAAjfEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwETABM1LgBnAGcAZwAtAGcArwGzAGcAZwATAGeAAIArgACBBEwICAgIgB+ASAgIgAAI2QAdACE10gAKACQ10wAfAFg11C7GAZcAWQB4ABMAJQAtAGc13F8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZYEESYA+gA6ANYAAgAQIgQRa0wA2ADcACjXeNeYARqcCVAJVAlYCVwJYAlkCWoBWgFeAWIBZgFqAW4BcpzXnNeg16TXqNes17DXtgQRbgQRcgQRdgQRegQRfgQRggQRhgC7fEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwZDABM1LwBnAGcAZwAtAGcArwJUAGcAZwATAGeAAICrgACBBFkICAgIgB+AVggIgAAI3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMBEwATNS8AZwBnAGcALQBnAK8CVQBnAGcAEwBngACAK4AAgQRZCAgICIAfgFcICIAACN8QDwCdAJ4AnwAdAKAAoQCiAB8AowAKACEApAClACQApgATABMAEzUvAGcAZwBnAC0AZwCvAlYAZwBnABMAZ4AAgACAAIEEWQgICAiAH4BYCAiAAAjfEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwZxABM1LwBnAGcAZwAtAGcArwJXAGcAZwATAGeAAICvgACBBFkICAgIgB+AWQgIgAAI3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMAEwATNS8AZwBnAGcALQBnAK8CWABnAGcAEwBngACAAIAAgQRZCAgICIAfgFoICIAACN8QDwCdAJ4AnwAdAKAAoQCiAB8AowAKACEApAClACQApgATABMAEzUvAGcAZwBnAC0AZwCvAlkAZwBnABMAZ4AAgACAAIEEWQgICAiAH4BbCAiAAAjfEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwATABM1LwBnAGcAZwAtAGcArwJaAGcAZwATAGeAAIAAgACBBFkICAgIgB+AXAgIgAAI0gA3AAo2WQC3oIAe0wA2ADcACjZcNl0ARqCggC7TADYANwAKNmA2YQBGoKCALtMANgA3AAo2ZDZlAEagoIAu0gC5ALo2aDZpXlhETW9kZWxQYWNrYWdlpjZqNms2bDZtNm4Avl5YRE1vZGVsUGFja2FnZV8QD1hEVU1MUGFja2FnZUltcF8QEVhEVU1MTmFtZXNwYWNlSW1wXxAUWERVTUxOYW1lZEVsZW1lbnRJbXBfEA9YRFVNTEVsZW1lbnRJbXDSADcACjZwALeggB7TADYANwAKNnM2dABGoKCALlMxLjDSALkAujZ4NnlZWERQTU1vZGVsozZ4NnoAvldYRE1vZGVsXxAPTlNLZXllZEFyY2hpdmVy0TZ9AChUcm9vdIABAAAACAAAABkAAAAiAAAAKwAAADUAAAA6AAAAPwAACRkAAAkfAAAJPAAACU4AAAlVAAAJYgAACXUAAAmNAAAJmwAACbUAAAm3AAAJugAACb0AAAm/AAAJwgAACcQAAAnHAAAKAAAACh8AAAo8AAAKWwAACm0AAAqNAAAKlAAACrIAAAq+AAAK2gAACuAAAAsCAAALIwAACzYAAAs4AAALOwAACz4AAAtAAAALQgAAC0QAAAtHAAALSgAAC0wAAAtOAAALUAAAC1IAAAtUAAALVgAAC1cAAAtbAAALaAAAC3AAAAt7AAALiAAAC4oAAAuMAAALjgAAC5AAAAuSAAALlAAAC6EAAAujAAALpQAAC6cAAAuqAAALrQAAC7AAAAuyAAALzwAAC9kAAAveAAAL5AAAC/MAAAwCAAAMRQAADGkAAAyNAAAMsAAADNcAAAz3AAANHgAADUUAAA1lAAANiQAADa0AAA25AAANuwAADb0AAA2/AAANwQAADcMAAA3FAAANxwAADckAAA3LAAANzQAADc8AAA3RAAAN0wAADdUAAA3WAAAN2wAADeMAAA3wAAAN8wAADfUAAA34AAAN+gAADfwAAA4LAAAOMAAADlQAAA57AAAOnwAADqEAAA6jAAAOpQAADqcAAA6pAAAOqwAADqwAAA6uAAAOuwAADs4AAA7QAAAO0gAADtQAAA7WAAAO2AAADtoAAA7cAAAO3gAADuAAAA7zAAAO9QAADvcAAA75AAAO+wAADv0AAA7/AAAPAQAADwMAAA8FAAAPBwAADx0AAA8wAAAPTAAAD2kAAA+FAAAPmQAAD6sAAA/BAAAP2gAAEBkAABAfAAAQKAAAEDUAABBBAAAQSwAAEFUAABBgAAAQawAAEHgAABCAAAAQggAAEIQAABCGAAAQiAAAEIkAABCKAAAQiwAAEIwAABCOAAAQkAAAEJEAABCSAAAQlAAAEJUAABCeAAAQnwAAEKEAABCqAAAQtQAAEL4AABDNAAAQ1AAAENwAABDlAAAQ7gAAEQEAABEKAAARHQAAETQAABFGAAARhQAAEYcAABGJAAARiwAAEY0AABGOAAARjwAAEZAAABGRAAARkwAAEZUAABGWAAARlwAAEZkAABGaAAAR2QAAEdsAABHdAAAR3wAAEeEAABHiAAAR4wAAEeQAABHlAAAR5wAAEekAABHqAAAR6wAAEe0AABHuAAAR9wAAEfoAABH8AAAR/gAAEgcAABIOAAASEAAAEhIAABIUAAASFgAAEjAAABI5AAASRQAAEoQAABKGAAASiAAAEooAABKMAAASjQAAEo4AABKPAAASkAAAEpIAABKUAAASlQAAEpYAABKYAAASmQAAEtgAABLaAAAS3AAAEt4AABLgAAAS4QAAEuIAABLjAAAS5AAAEuYAABLoAAAS6QAAEuoAABLsAAAS7QAAEvYAABL3AAAS+QAAEzgAABM6AAATPAAAEz4AABNAAAATQQAAE0IAABNDAAATRAAAE0YAABNIAAATSQAAE0oAABNMAAATTQAAE04AABONAAATjwAAE5EAABOTAAATlQAAE5YAABOXAAATmAAAE5kAABObAAATnQAAE54AABOfAAAToQAAE6IAABOvAAATsAAAE7EAABOzAAATvAAAE9IAABPZAAAT5gAAFCUAABQnAAAUKQAAFCsAABQtAAAULgAAFC8AABQwAAAUMQAAFDMAABQ1AAAUNgAAFDcAABQ5AAAUOgAAFFMAABRVAAAUVwAAFFkAABRaAAAUXAAAFHMAABR8AAAUigAAFJcAABSlAAAUugAAFM4AABTlAAAU9wAAFTYAABU4AAAVOgAAFTwAABU+AAAVPwAAFUAAABVBAAAVQgAAFUQAABVGAAAVRwAAFUgAABVKAAAVSwAAFWgAABVxAAAVhgAAFZUAABWqAAAVuAAAFc0AABXhAAAV+AAAFgoAABYXAAAWIAAAFiIAABYkAAAWJgAAFigAABYxAAAWMwAAFjUAABY3AAAWOQAAFjsAABZVAAAWbQAAFnkAABbEAAAW5wAAFwcAABcnAAAXKQAAFysAABctAAAXLwAAFzEAABcyAAAXMwAAFzUAABc2AAAXOAAAFzkAABc7AAAXPQAAFz4AABc/AAAXQQAAF0IAABdHAAAXVAAAF1kAABdbAAAXXQAAF2IAABdkAAAXZgAAF2gAABd9AAAXkgAAF7cAABfbAAAYAgAAGCYAABgoAAAYKgAAGCwAABguAAAYMAAAGDIAABgzAAAYNQAAGEIAABhTAAAYVQAAGFcAABhZAAAYWwAAGF0AABhfAAAYYQAAGGMAABh0AAAYdgAAGHgAABh6AAAYfAAAGH4AABiAAAAYggAAGIQAABiGAAAYpAAAGMIAABjVAAAY6QAAGP4AABkbAAAZLwAAGUUAABmEAAAZhgAAGYgAABmKAAAZjAAAGY0AABmOAAAZjwAAGZAAABmSAAAZlAAAGZUAABmWAAAZmAAAGZkAABnYAAAZ2gAAGdwAABneAAAZ4AAAGeEAABniAAAZ4wAAGeQAABnmAAAZ6AAAGekAABnqAAAZ7AAAGe0AABosAAAaLgAAGjAAABoyAAAaNAAAGjUAABo2AAAaNwAAGjgAABo6AAAaPAAAGj0AABo+AAAaQAAAGkEAABpOAAAaUQAAGlMAABpWAAAaWAAAGloAABp0AAAafQAAGrwAABq+AAAawAAAGsIAABrEAAAaxQAAGsYAABrHAAAayAAAGsoAABrMAAAazQAAGs4AABrQAAAa0QAAGxAAABsSAAAbFAAAGxYAABsYAAAbGQAAGxoAABsbAAAbHAAAGx4AABsgAAAbIQAAGyIAABskAAAbJQAAG2QAABtmAAAbaAAAG2oAABtsAAAbbQAAG24AABtvAAAbcAAAG3IAABt0AAAbdQAAG3YAABt4AAAbeQAAG7gAABu6AAAbvAAAG74AABvAAAAbwQAAG8IAABvDAAAbxAAAG8YAABvIAAAbyQAAG8oAABvMAAAbzQAAHAwAABwOAAAcEAAAHBIAABwUAAAcFQAAHBYAABwXAAAcGAAAHBoAABwcAAAcHQAAHB4AABwgAAAcIQAAHEYAABxqAAAckQAAHLUAABy3AAAcuQAAHLsAABy9AAAcvwAAHMEAABzCAAAcxAAAHNEAABzgAAAc4gAAHOQAABzmAAAc6AAAHOoAABzsAAAc7gAAHP0AABz/AAAdAQAAHQMAAB0FAAAdBwAAHQkAAB0LAAAdDQAAHS0AAB1YAAAdcgAAHYsAAB2lAAAdxQAAHegAAB4nAAAeKQAAHisAAB4tAAAeLwAAHjAAAB4xAAAeMgAAHjMAAB41AAAeNwAAHjgAAB45AAAeOwAAHjwAAB57AAAefQAAHn8AAB6BAAAegwAAHoQAAB6FAAAehgAAHocAAB6JAAAeiwAAHowAAB6NAAAejwAAHpAAAB7PAAAe0QAAHtMAAB7VAAAe1wAAHtgAAB7ZAAAe2gAAHtsAAB7dAAAe3wAAHuAAAB7hAAAe4wAAHuQAAB8jAAAfJQAAHycAAB8pAAAfKwAAHywAAB8tAAAfLgAAHy8AAB8xAAAfMwAAHzQAAB81AAAfNwAAHzgAAB87AAAfegAAH3wAAB9+AAAfgAAAH4IAAB+DAAAfhAAAH4UAAB+GAAAfiAAAH4oAAB+LAAAfjAAAH44AAB+PAAAfzgAAH9AAAB/SAAAf1AAAH9YAAB/XAAAf2AAAH9kAAB/aAAAf3AAAH94AAB/fAAAf4AAAH+IAAB/jAAAgIgAAICQAACAmAAAgKAAAICoAACArAAAgLAAAIC0AACAuAAAgMAAAIDIAACAzAAAgNAAAIDYAACA3AAAgQAAAIE4AACBbAAAgaQAAIHYAACCJAAAgoAAAILIAACD9AAAhIAAAIUAAACFgAAAhYgAAIWQAACFmAAAhaAAAIWoAACFrAAAhbAAAIW4AACFvAAAhcQAAIXIAACF0AAAhdgAAIXcAACF4AAAhegAAIXsAACGAAAAhjQAAIZIAACGUAAAhlgAAIZsAACGdAAAhnwAAIaEAACHGAAAh6gAAIhEAACI1AAAiNwAAIjkAACI7AAAiPQAAIj8AACJBAAAiQgAAIkQAACJRAAAiYgAAImQAACJmAAAiaAAAImoAACJsAAAibgAAInAAACJyAAAigwAAIoUAACKHAAAiiQAAIosAACKNAAAijwAAIpEAACKTAAAilQAAItQAACLWAAAi2AAAItoAACLcAAAi3QAAIt4AACLfAAAi4AAAIuIAACLkAAAi5QAAIuYAACLoAAAi6QAAIygAACMqAAAjLAAAIy4AACMwAAAjMQAAIzIAACMzAAAjNAAAIzYAACM4AAAjOQAAIzoAACM8AAAjPQAAI3wAACN+AAAjgAAAI4IAACOEAAAjhQAAI4YAACOHAAAjiAAAI4oAACOMAAAjjQAAI44AACOQAAAjkQAAI54AACOhAAAjowAAI6YAACOoAAAjqgAAI8QAACPeAAAkHQAAJB8AACQhAAAkIwAAJCUAACQmAAAkJwAAJCgAACQpAAAkKwAAJC0AACQuAAAkLwAAJDEAACQyAAAkcQAAJHMAACR1AAAkdwAAJHkAACR6AAAkewAAJHwAACR9AAAkfwAAJIEAACSCAAAkgwAAJIUAACSGAAAkxQAAJMcAACTJAAAkywAAJM0AACTOAAAkzwAAJNAAACTRAAAk0wAAJNUAACTWAAAk1wAAJNkAACTaAAAlGQAAJRsAACUdAAAlHwAAJSEAACUiAAAlIwAAJSQAACUlAAAlJwAAJSkAACUqAAAlKwAAJS0AACUuAAAlbQAAJW8AACVxAAAlcwAAJXUAACV2AAAldwAAJXgAACV5AAAlewAAJX0AACV+AAAlfwAAJYEAACWCAAAlpwAAJcsAACXyAAAmFgAAJhgAACYaAAAmHAAAJh4AACYgAAAmIgAAJiMAACYlAAAmMgAAJkEAACZDAAAmRQAAJkcAACZJAAAmSwAAJk0AACZPAAAmXgAAJmAAACZiAAAmZAAAJmYAACZoAAAmagAAJmwAACZuAAAmrQAAJq8AACaxAAAmswAAJrUAACa2AAAmtwAAJrgAACa5AAAmuwAAJr0AACa+AAAmvwAAJsEAACbCAAAnAQAAJwMAACcFAAAnBwAAJwkAACcKAAAnCwAAJwwAACcNAAAnDwAAJxEAACcSAAAnEwAAJxUAACcWAAAnVQAAJ1cAACdZAAAnWwAAJ10AACdeAAAnXwAAJ2AAACdhAAAnYwAAJ2UAACdmAAAnZwAAJ2kAACdqAAAnqQAAJ6sAACetAAAnrwAAJ7EAACeyAAAnswAAJ7QAACe1AAAntwAAJ7kAACe6AAAnuwAAJ70AACe+AAAn/QAAJ/8AACgBAAAoAwAAKAUAACgGAAAoBwAAKAgAACgJAAAoCwAAKA0AACgOAAAoDwAAKBEAACgSAAAoUQAAKFMAAChVAAAoVwAAKFkAAChaAAAoWwAAKFwAAChdAAAoXwAAKGEAAChiAAAoYwAAKGUAAChmAAAoZwAAKKYAACioAAAoqgAAKKwAACiuAAAorwAAKLAAACixAAAosgAAKLQAACi2AAAotwAAKLgAACi6AAAouwAAKQYAACkpAAApSQAAKWkAAClrAAApbQAAKW8AAClxAAApcwAAKXQAACl1AAApdwAAKXgAACl6AAApewAAKX0AACl/AAApgAAAKYEAACmDAAAphAAAKYkAACmWAAApmwAAKZ0AACmfAAAppAAAKaYAACmoAAApqgAAKc8AACnzAAAqGgAAKj4AACpAAAAqQgAAKkQAACpGAAAqSAAAKkoAACpLAAAqTQAAKloAACprAAAqbQAAKm8AACpxAAAqcwAAKnUAACp3AAAqeQAAKnsAACqMAAAqjgAAKpAAACqSAAAqlAAAKpYAACqYAAAqmgAAKpwAACqeAAAq3QAAKt8AACrhAAAq4wAAKuUAACrmAAAq5wAAKugAACrpAAAq6wAAKu0AACruAAAq7wAAKvEAACryAAArMQAAKzMAACs1AAArNwAAKzkAACs6AAArOwAAKzwAACs9AAArPwAAK0EAACtCAAArQwAAK0UAACtGAAArhQAAK4cAACuJAAAriwAAK40AACuOAAArjwAAK5AAACuRAAArkwAAK5UAACuWAAArlwAAK5kAACuaAAArpwAAK6oAACusAAArrwAAK7EAACuzAAArzQAAK9EAACwQAAAsEgAALBQAACwWAAAsGAAALBkAACwaAAAsGwAALBwAACweAAAsIAAALCEAACwiAAAsJAAALCUAACxkAAAsZgAALGgAACxqAAAsbAAALG0AACxuAAAsbwAALHAAACxyAAAsdAAALHUAACx2AAAseAAALHkAACy4AAAsugAALLwAACy+AAAswAAALMEAACzCAAAswwAALMQAACzGAAAsyAAALMkAACzKAAAszAAALM0AAC0MAAAtDgAALRAAAC0SAAAtFAAALRUAAC0WAAAtFwAALRgAAC0aAAAtHAAALR0AAC0eAAAtIAAALSEAAC1gAAAtYgAALWQAAC1mAAAtaAAALWkAAC1qAAAtawAALWwAAC1uAAAtcAAALXEAAC1yAAAtdAAALXUAAC2aAAAtvgAALeUAAC4JAAAuCwAALg0AAC4PAAAuEQAALhMAAC4VAAAuFgAALhgAAC4lAAAuNAAALjYAAC44AAAuOgAALjwAAC4+AAAuQAAALkIAAC5RAAAuUwAALlUAAC5XAAAuWQAALlsAAC5dAAAuXwAALmEAAC6gAAAuogAALqQAAC6mAAAuqAAALqkAAC6qAAAuqwAALqwAAC6uAAAusAAALrEAAC6yAAAutAAALrUAAC70AAAu9gAALvgAAC76AAAu/AAALv0AAC7+AAAu/wAALwAAAC8CAAAvBAAALwUAAC8GAAAvCAAALwkAAC9IAAAvSgAAL0wAAC9OAAAvUAAAL1EAAC9SAAAvUwAAL1QAAC9WAAAvWAAAL1kAAC9aAAAvXAAAL10AAC+cAAAvngAAL6AAAC+iAAAvpAAAL6UAAC+mAAAvpwAAL6gAAC+qAAAvrAAAL60AAC+uAAAvsAAAL7EAAC/wAAAv8gAAL/QAAC/2AAAv+AAAL/kAAC/6AAAv+wAAL/wAAC/+AAAwAAAAMAEAADACAAAwBAAAMAUAADBEAAAwRgAAMEgAADBKAAAwTAAAME0AADBOAAAwTwAAMFAAADBSAAAwVAAAMFUAADBWAAAwWAAAMFkAADCBAAAwwAAAMMIAADDEAAAwxgAAMMgAADDJAAAwygAAMMsAADDMAAAwzgAAMNAAADDRAAAw0gAAMNQAADDVAAAxIAAAMUMAADFjAAAxgwAAMYUAADGHAAAxiQAAMYsAADGNAAAxjgAAMY8AADGRAAAxkgAAMZQAADGVAAAxlwAAMZkAADGaAAAxmwAAMZ0AADGeAAAxowAAMbAAADG1AAAxtwAAMbkAADG+AAAxwAAAMcIAADHEAAAx6QAAMg0AADI0AAAyWAAAMloAADJcAAAyXgAAMmAAADJiAAAyZAAAMmUAADJnAAAydAAAMoUAADKHAAAyiQAAMosAADKNAAAyjwAAMpEAADKTAAAylQAAMqYAADKoAAAyqgAAMqwAADKuAAAysAAAMrIAADK0AAAytgAAMrgAADL3AAAy+QAAMvsAADL9AAAy/wAAMwAAADMBAAAzAgAAMwMAADMFAAAzBwAAMwgAADMJAAAzCwAAMwwAADNLAAAzTQAAM08AADNRAAAzUwAAM1QAADNVAAAzVgAAM1cAADNZAAAzWwAAM1wAADNdAAAzXwAAM2AAADOfAAAzoQAAM6MAADOlAAAzpwAAM6gAADOpAAAzqgAAM6sAADOtAAAzrwAAM7AAADOxAAAzswAAM7QAADPBAAAzwgAAM8MAADPFAAA0BAAANAYAADQIAAA0CgAANAwAADQNAAA0DgAANA8AADQQAAA0EgAANBQAADQVAAA0FgAANBgAADQZAAA0WAAANFoAADRcAAA0XgAANGAAADRhAAA0YgAANGMAADRkAAA0ZgAANGgAADRpAAA0agAANGwAADRtAAA0rAAANK4AADSwAAA0sgAANLQAADS1AAA0tgAANLcAADS4AAA0ugAANLwAADS9AAA0vgAANMAAADTBAAA1AAAANQIAADUEAAA1BgAANQgAADUJAAA1CgAANQsAADUMAAA1DgAANRAAADURAAA1EgAANRQAADUVAAA1VAAANVYAADVYAAA1WgAANVwAADVdAAA1XgAANV8AADVgAAA1YgAANWQAADVlAAA1ZgAANWgAADVpAAA1jgAANbIAADXZAAA1/QAANf8AADYBAAA2AwAANgUAADYHAAA2CQAANgoAADYMAAA2GQAANigAADYqAAA2LAAANi4AADYwAAA2MgAANjQAADY2AAA2RQAANkcAADZJAAA2SwAANk0AADZPAAA2UQAANlMAADZVAAA2lAAANpYAADaYAAA2mgAANpwAADadAAA2ngAANp8AADagAAA2ogAANqQAADalAAA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C6wAAQu0AAELvAABC8QAAQvIAAELzAABC9AAAQvUAAEL3AABC+QAAQvoAAEL7AABC/QAAQv4AAEMLAABDDAAAQw0AAEMPAABDTgAAQ1AAAENSAABDVAAAQ1YAAENXAABDWAAAQ1kAAENaAABDXAAAQ14AAENfAABDYAAAQ2IAAENjAABDogAAQ6QAAEOmAABDqAAAQ6oAAEOrAABDrAAAQ60AAEOuAABDsAAAQ7IAAEOzAABDtAAAQ7YAAEO3AABDuAAAQ/cAAEP5AABD+wAAQ/0AAEP/AABEAAAARAEAAEQCAABEAwAARAUAAEQHAABECAAARAkAAEQLAABEDAAAREsAAERNAABETwAARFEAAERTAABEVAAARFUAAERWAABEVwAARFkAAERbAABEXAAARF0AAERfAABEYAAARJ8AAEShAABEowAARKUAAESnAABEqAAARKkAAESqAABEqwAARK0AAESvAABEsAAARLEAAESzAABEtAAARNkAAET9AABFJAAARUgAAEVKAABFTAAARU4AAEVQAABFUgAARVQAAEVVAABFVwAARWQAAEVzAABFdQAARXcAAEV5AABFewAARX0AAEV/AABFgQAARZAAAEWSAABFlAAARZYAAEWYAABFmwAARZ4AAEWhAABFowAARbUAAEXJAABF2wAARfAAAEYCAABGEQAARi4AAEZtAABGbwAARnEAAEZzAABGdQAARnYAAEZ3AABGeAAARnkAAEZ7AABGfQAARn4AAEZ/AABGgQAARoIAAEbBAABGwwAARsUAAEbHAABGyQAARsoAAEbLAABGzAAARs0AAEbPAABG0QAARtIAAEbTAABG1QAARtYAAEbYAABHFwAARxkAAEcbAABHHQAARx8AAEcgAABHIQAARyIAAEcjAABHJQAARycAAEcoAABHKQAARysAAEcsAABHawAAR20AAEdvAABHcQAAR3MAAEd0AABHdQAAR3YAAEd3AABHeQAAR3sAAEd8AABHfQAAR38AAEeAAABHwwAAR+cAAEgLAABILgAASFUAAEh1AABInAAASMMAAEjjAABJBwAASSsAAEktAABJMAAASTIAAEk0AABJNgAASTgAAEk6AABJPAAAST4AAElAAABJQgAASUQAAElHAABJSQAASUoAAElPAABJXAAASV8AAElhAABJZAAASWYAAEloAABJjQAASbEAAEnYAABJ/AAASf4AAEoAAABKAgAASgQAAEoGAABKCAAASgkAAEoLAABKGAAASisAAEotAABKLwAASjEAAEozAABKNQAASjcAAEo5AABKOwAASj0AAEpQAABKUgAASlQAAEpWAABKWAAASloAAEpcAABKXwAASmIAAEplAABKZwAASqYAAEqoAABKqgAASqwAAEquAABKrwAASrAAAEqxAABKsgAASrQAAEq2AABKtwAASrgAAEq6AABKuwAASsQAAErFAABKxwAASwYAAEsIAABLCgAASwwAAEsOAABLDwAASxAAAEsRAABLEgAASxQAAEsWAABLFwAASxgAAEsaAABLGwAAS1oAAEtcAABLXgAAS2AAAEtiAABLYwAAS2QAAEtlAABLZgAAS2gAAEtqAABLawAAS2wAAEtuAABLbwAAS3gAAEt7AABLfQAAS38AAEuIAABLiwAAS40AAEuPAABLzgAAS9AAAEvSAABL1AAAS9YAAEvXAABL2AAAS9kAAEvaAABL3AAAS94AAEvfAABL4AAAS+IAAEvjAABMIgAATCQAAEwmAABMKAAATCoAAEwrAABMLAAATC0AAEwuAABMMAAATDIAAEwzAABMNAAATDYAAEw3AABMQAAATEEAAExDAABMggAATIQAAEyGAABMiAAATIoAAEyLAABMjAAATI0AAEyOAABMkAAATJIAAEyTAABMlAAATJYAAEyXAABM1gAATNgAAEzbAABM3QAATN8AAEzgAABM4QAATOIAAEzjAABM5QAATOcAAEzoAABM6QAATOsAAEzsAABM+QAATPoAAEz7AABM/QAATTwAAE0+AABNQAAATUIAAE1EAABNRQAATUYAAE1HAABNSAAATUoAAE1MAABNTQAATU4AAE1QAABNUQAATZAAAE2SAABNlAAATZYAAE2YAABNmQAATZoAAE2bAABNnAAATZ4AAE2gAABNoQAATaIAAE2kAABNpQAATbIAAE3FAABNyAAATcsAAE3OAABN0AAATdMAAE3WAABN2AAATdoAAE3cAABN7wAATfIAAE31AABN+AAATfsAAE3+AABOAQAATgQAAE4HAABOCgAATgwAAE4TAABOJgAATjEAAE48AABOTgAATpkAAE68AABO3AAATvwAAE7+AABPAAAATwIAAE8EAABPBgAATwcAAE8IAABPCwAATwwAAE8OAABPDwAATxIAAE8VAABPFgAATxcAAE8aAABPGwAATyAAAE8tAABPMgAATzQAAE82AABPOwAATz4AAE9BAABPQwAAT2gAAE+MAABPswAAT9cAAE/aAABP3AAAT94AAE/gAABP4gAAT+QAAE/lAABP6AAAT/UAAFAGAABQCAAAUAoAAFAMAABQDgAAUBAAAFASAABQFAAAUBYAAFAnAABQKgAAUC0AAFAwAABQMwAAUDYAAFA5AABQPAAAUD8AAFBBAABQgAAAUIIAAFCEAABQhgAAUIkAAFCKAABQiwAAUIwAAFCNAABQjwAAUJEAAFCSAABQkwAAUJUAAFCWAABQ1QAAUNcAAFDZAABQ2wAAUN4AAFDfAABQ4AAAUOEAAFDiAABQ5AAAUOYAAFDnAABQ6AAAUOoAAFDrAABRKgAAUSwAAFEvAABRMQAAUTQAAFE1AABRNgAAUTcAAFE4AABROgAAUTwAAFE9AABRPgAAUUAAAFFBAABRTgAAUU8AAFFQAABRUgAAUZEAAFGTAABRlQAAUZcAAFGaAABRmwAAUZwAAFGdAABRngAAUaAAAFGiAABRowAAUaQAAFGmAABRpwAAUeYAAFHoAABR6gAAUewAAFHvAABR8AAAUfEAAFHyAABR8wAAUfUAAFH3AABR+AAAUfkAAFH7AABR/AAAUjsAAFI9AABSPwAAUkEAAFJEAABSRQAAUkYAAFJHAABSSAAAUkoAAFJMAABSTQAAUk4AAFJQAABSUQAAUpAAAFKSAABSlAAAUpYAAFKZAABSmgAAUpsAAFKcAABSnQAAUp8AAFKhAABSogAAUqMAAFKlAABSpgAAUuUAAFLnAABS6QAAUusAAFLuAABS7wAAUvAAAFLxAABS8gAAUvQAAFL2AABS9wAAUvgAAFL6AABS+wAAUyAAAFNEAABTawAAU48AAFOSAABTlAAAU5YAAFOYAABTmgAAU5wAAFOdAABToAAAU60AAFO8AABTvgAAU8AAAFPCAABTxAAAU8YAAFPIAABTygAAU9kAAFPcAABT3wAAU+IAAFPlAABT6AAAU+sAAFPuAABT8AAAVC8AAFQxAABUMwAAVDUAAFQ4AABUOQAAVDoAAFQ7AABUPAAAVD4AAFRAAABUQQAAVEIAAFREAABURQAAVIQAAFSGAABUiQAAVIsAAFSOAABUjwAAVJAAAFSRAABUkgAAVJQAAFSWAABUlwAAVJgAAFSaAABUmwAAVJ0AAFTcAABU3gAAVOAAAFTiAABU5QAAVOYAAFTnAABU6AAAVOkAAFTrAABU7QAAVO4AAFTvAABU8QAAVPIAAFUxAABVMwAAVTYAAFU4AABVOwAAVTwAAFU9AABVPgAAVT8AAFVBAABVQwAAVUQAAFVFAABVRwAAVUgAAFWLAABVrwAAVdMAAFX2AABWHQAAVj0AAFZkAABWiwAAVqsAAFbPAABW8wAAVvUAAFb4AABW+gAAVvwAAFb+AABXAQAAVwMAAFcFAABXBwAAVwkAAFcLAABXDQAAVxAAAFcTAABXFAAAVxkAAFcmAABXKQAAVysAAFcuAABXMQAAVzMAAFdYAABXfAAAV6MAAFfHAABXygAAV8wAAFfOAABX0AAAV9IAAFfUAABX1QAAV9gAAFflAABX+AAAV/oAAFf8AABX/gAAWAAAAFgCAABYBAAAWAYAAFgIAABYCgAAWB0AAFggAABYIwAAWCYAAFgpAABYLAAAWC8AAFgyAABYNQAAWDgAAFg6AABYeQAAWHsAAFh+AABYgAAAWIMAAFiEAABYhQAAWIYAAFiHAABYiQAAWIsAAFiMAABYjQAAWI8AAFiQAABYmQAAWJoAAFicAABY2wAAWN0AAFjfAABY4QAAWOQAAFjlAABY5gAAWOcAAFjoAABY6gAAWOwAAFjtAABY7gAAWPAAAFjxAABZMAAAWTIAAFk1AABZNwAAWToAAFk7AABZPAAAWT0AAFk+AABZQAAAWUIAAFlDAABZRAAAWUYAAFlHAABZUAAAWVMAAFlWAABZWAAAWWEAAFlkAABZZgAAWWgAAFmnAABZqQAAWasAAFmtAABZsAAAWbEAAFmyAABZswAAWbQAAFm2AABZuAAAWbkAAFm6AABZvAAAWb0AAFn8AABZ/gAAWgEAAFoDAABaBgAAWgcAAFoIAABaCQAAWgoAAFoMAABaDgAAWg8AAFoQAABaEgAAWhMAAFocAABaHQAAWh8AAFpeAABaYAAAWmIAAFpkAABaZwAAWmgAAFppAABaagAAWmsAAFptAABabwAAWnAAAFpxAABacwAAWnQAAFqzAABatQAAWrgAAFq6AABavQAAWr4AAFq/AABawAAAWsEAAFrDAABaxQAAWsYAAFrHAABayQAAWsoAAFrXAABa2AAAWtkAAFrbAABbGgAAWxwAAFseAABbIAAAWyMAAFskAABbJQAAWyYAAFsnAABbKQAAWysAAFssAABbLQAAWy8AAFswAABbbwAAW3EAAFtzAABbdQAAW3gAAFt5AABbegAAW3sAAFt8AABbfgAAW4AAAFuBAABbggAAW4QAAFuFAABbkgAAW6MAAFulAABbqAAAW6oAAFutAABbrwAAW7EAAFuzAABbtgAAW8cAAFvKAABbzQAAW9AAAFvTAABb1gAAW9kAAFvcAABb3wAAW+EAAFvuAABb8wAAW/0AAFxIAABcawAAXIsAAFyrAABcrQAAXK8AAFyxAABcswAAXLYAAFy3AABcuAAAXLsAAFy8AABcvgAAXL8AAFzCAABcxAAAXMUAAFzGAABcyQAAXMoAAFzPAABc3AAAXOEAAFzjAABc5QAAXOoAAFztAABc8AAAXPIAAF0XAABdOwAAXWIAAF2GAABdiQAAXYsAAF2NAABdjwAAXZEAAF2TAABdlAAAXZcAAF2kAABdtQAAXbcAAF25AABduwAAXb0AAF2/AABdwQAAXcMAAF3FAABd1gAAXdkAAF3cAABd3wAAXeIAAF3lAABd6AAAXesAAF3uAABd8AAAXi8AAF4xAABeMwAAXjUAAF44AABeOQAAXjoAAF47AABePAAAXj4AAF5AAABeQQAAXkIAAF5EAABeRQAAXoQAAF6GAABeiAAAXooAAF6NAABejgAAXo8AAF6QAABekQAAXpMAAF6VAABelgAAXpcAAF6ZAABemgAAXtkAAF7bAABe3gAAXuAAAF7jAABe5AAAXuUAAF7mAABe5wAAXukAAF7rAABe7AAAXu0AAF7vAABe8AAAXv0AAF7+AABe/wAAXwEAAF9AAABfQgAAX0QAAF9GAABfSQAAX0oAAF9LAABfTAAAX00AAF9PAABfUQAAX1IAAF9TAABfVQAAX1YAAF+VAABflwAAX5kAAF+bAABfngAAX58AAF+gAABfoQAAX6IAAF+kAABfpgAAX6cAAF+oAABfqgAAX6sAAF/qAABf7AAAX+4AAF/wAABf8wAAX/QAAF/1AABf9gAAX/cAAF/5AABf+wAAX/wAAF/9AABf/wAAYAAAAGA/AABgQQAAYEMAAGBFAABgSAAAYEkAAGBKAABgSwAAYEwAAGBOAABgUAAAYFEAAGBSAABgVAAAYFUAAGCUAABglgAAYJgAAGCaAABgnQAAYJ4AAGCfAABgoAAAYKEAAGCjAABgpQAAYKYAAGCnAABgqQAAYKoAAGDPAABg8wAAYRoAAGE+AABhQQAAYUMAAGFFAABhRwAAYUkAAGFLAABhTAAAYU8AAGFcAABhawAAYW0AAGFvAABhcQAAYXMAAGF1AABhdwAAYXkAAGGIAABhiwAAYY4AAGGRAABhlAAAYZcAAGGaAABhnQAAYZ8AAGHeAABh4AAAYeIAAGHkAABh5wAAYegAAGHpAABh6gAAYesAAGHtAABh7wAAYfAAAGHxAABh8wAAYfQAAGIzAABiNQAAYjcAAGI5AABiPAAAYj0AAGI+AABiPwAAYkAAAGJCAABiRAAAYkUAAGJGAABiSAAAYkkAAGKIAABiigAAYowAAGKOAABikQAAYpIAAGKTAABilAAAYpUAAGKXAABimQAAYpoAAGKbAABinQAAYp4AAGLdAABi3wAAYuEAAGLjAABi5gAAYucAAGLoAABi6QAAYuoAAGLsAABi7gAAYu8AAGLwAABi8gAAYvMAAGMyAABjNAAAYzYAAGM4AABjOwAAYzwAAGM9AABjPgAAYz8AAGNBAABjQwAAY0QAAGNFAABjRwAAY0gAAGOHAABjiQAAY4sAAGONAABjkAAAY5EAAGOSAABjkwAAY5QAAGOWAABjmAAAY5kAAGOaAABjnAAAY50AAGPcAABj3gAAY+EAAGPjAABj5gAAY+cAAGPoAABj6QAAY+oAAGPsAABj7gAAY+8AAGPwAABj8gAAY/MAAGP8AABkDwAAZBwAAGQvAABkPAAAZE8AAGRmAABkeAAAZMMAAGTmAABlBgAAZSYAAGUoAABlKgAAZSwAAGUuAABlMQAAZTIAAGUzAABlNgAAZTcAAGU5AABlOgAAZTwAAGU/AABlQAAAZUEAAGVEAABlRQAAZU4AAGVbAABlYAAAZWIAAGVkAABlaQAAZWwAAGVvAABlcQAAZZYAAGW6AABl4QAAZgUAAGYIAABmCgAAZgwAAGYOAABmEAAAZhIAAGYTAABmFgAAZiMAAGY0AABmNgAAZjgAAGY6AABmPAAAZj4AAGZAAABmQgAAZkQAAGZVAABmWAAAZlsAAGZeAABmYQAAZmQAAGZnAABmagAAZm0AAGZvAAB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8YAAAfGIAAHxjAAB8rgAAfNEAAHzxAAB9EQAAfRMAAH0VAAB9FwAAfRkAAH0cAAB9HQAAfR4AAH0hAAB9IgAAfSQAAH0lAAB9JwAAfSkAAH0qAAB9KwAAfS4AAH0vAAB9NAAAfUEAAH1GAAB9SAAAfUoAAH1PAAB9UgAAfVUAAH1XAAB9fAAAfaAAAH3HAAB96wAAfe4AAH3wAAB98gAAffQAAH32AAB9+AAAffkAAH38AAB+CQAAfhoAAH4cAAB+HgAAfiAAAH4iAAB+JAAAfiYAAH4oAAB+KgAAfjsAAH4+AAB+QQAAfkQAAH5HAAB+SgAAfk0AAH5QAAB+UwAAflUAAH6UAAB+lgAAfpgAAH6aAAB+nQAAfp4AAH6fAAB+oAAAfqEAAH6jAAB+pQAAfqYAAH6nAAB+qQAAfqoAAH7pAAB+6wAAfu0AAH7vAAB+8gAAfvMAAH70AAB+9QAAfvYAAH74AAB++gAAfvsAAH78AAB+/gAAfv8AAH8+AAB/QAAAf0MAAH9FAAB/SAAAf0kAAH9KAAB/SwAAf0wAAH9OAAB/UAAAf1EAAH9SAAB/VAAAf1UAAH9iAAB/YwAAf2QAAH9mAAB/pQAAf6cAAH+pAAB/qwAAf64AAH+vAAB/sAAAf7EAAH+yAAB/tAAAf7YAAH+3AAB/uAAAf7oAAH+7AAB/+gAAf/wAAH/+AACAAAAAgAMAAIAEAACABQAAgAYAAIAHAACACQAAgAsAAIAMAACADQAAgA8AAIAQAACATwAAgFEAAIBTAACAVQAAgFgAAIBZAACAWgAAgFsAAIBcAACAXgAAgGAAAIBhAACAYgAAgGQAAIBlAACApAAAgKYAAICoAACAqgAAgK0AAICuAACArwAAgLAAAICxAACAswAAgLUAAIC2AACAtwAAgLkAAIC6AACA+QAAgPsAAID9AACA/wAAgQIAAIEDAACBBAAAgQUAAIEGAACBCAAAgQoAAIELAACBDAAAgQ4AAIEPAACBNAAAgVgAAIF/AACBowAAgaYAAIGoAACBqgAAgawAAIGuAACBsAAAgbEAAIG0AACBwQAAgdAAAIHSAACB1AAAgdYAAIHYAACB2gAAgdwAAIHeAACB7QAAgfAAAIHzAACB9gAAgfkAAIH8AACB/wAAggIAAIIEAACCQwAAgkUAAIJHAACCSQAAgkwAAIJNAACCTgAAgk8AAIJQAACCUgAAglQAAIJVAACCVgAAglgAAIJZAACCmAAAgpoAAIKcAACCngAAgqEAAIKiAACCowAAgqQAAIKlAACCpwAAgqkAAIKqAACCqwAAgq0AAIKuAACC7QAAgu8AAILxAACC8wAAgvYAAIL3AACC+AAAgvkAAIL6AACC/AAAgv4AAIL/AACDAAAAgwIAAIMDAACDQgAAg0QAAINHAACDSQAAg0wAAINNAACDTgAAg08AAINQAACDUgAAg1QAAINVAACDVgAAg1gAAINZAACDmAAAg5oAAIOcAACDngAAg6EAAIOiAACDowAAg6QAAIOlAACDpwAAg6kAAIOqAACDqwAAg60AAIOuAACD7QAAg+8AAIPxAACD8wAAg/YAAIP3AACD+AAAg/kAAIP6AACD/AAAg/4AAIP/AACEAAAAhAIAAIQDAACEQgAAhEQAAIRGAACESAAAhEsAAIRMAACETQAAhE4AAIRPAACEUQAAhFMAAIRUAACEVQAAhFcAAIRYAACEowAAhMYAAITmAACFBgAAhQgAAIUKAACFDAAAhQ4AAIURAACFEgAAhRMAAIUWAACFFwAAhRkAAIUaAACFHAAAhR4AAIUfAACFIAAAhSMAAIUkAACFKQAAhTYAAIU7AACFPQAAhT8AAIVEAACFRwAAhUoAAIVMAACFcQAAhZUAAIW8AACF4AAAheMAAIXlAACF5wAAhekAAIXrAACF7QAAhe4AAIXxAACF/gAAhg8AAIYRAACGEwAAhhUAAIYXAACGGQAAhhsAAIYdAACGHwAAhjAAAIYzAACGNgAAhjkAAIY8AACGPwAAhkIAAIZFAACGSAAAhkoAAIaJAACGiwAAho0AAIaPAACGkgAAhpMAAIaUAACGlQAAhpYAAIaYAACGmgAAhpsAAIacAACGngAAhp8AAIbeAACG4AAAhuIAAIbkAACG5wAAhugAAIbpAACG6gAAhusAAIbtAACG7wAAhvAAAIbxAACG8wAAhvQAAIczAACHNQAAhzgAAIc6AACHPQAAhz4AAIc/AACHQAAAh0EAAIdDAACHRQAAh0YAAIdHAACHSQAAh0oAAIdXAACHWgAAh10AAIdgAACHYwAAh2UAAId/AACHiQAAh8gAAIfKAACHzAAAh84AAIfRAACH0gAAh9MAAIfUAACH1QAAh9cAAIfZAACH2gAAh9sAAIfdAACH3gAAiB0AAIgfAACIIQAAiCMAAIgmAACIJwAAiCgAAIgpAACIKgAAiCwAAIguAACILwAAiDAAAIgyAACIMwAAiHIAAIh0AACIdgAAiHgAAIh7AACIfAAAiH0AAIh+AACIfwAAiIEAAIiDAACIhAAAiIUAAIiHAACIiAAAiMcAAIjJAACIywAAiM0AAIjQAACI0QAAiNIAAIjTAACI1AAAiNYAAIjYAACI2QAAiNoAAIjcAACI3QAAiRwAAIkeAACJIAAAiSIAAIklAACJJgAAiScAAIkoAACJKQAAiSsAAIktAACJLgAAiS8AAIkxAACJMgAAiVcAAIl7AACJogAAicYAAInJAACJywAAic0AAInPAACJ0QAAidMAAInUAACJ1wAAieQAAInzAACJ9QAAifcAAIn5AACJ+wAAif0AAIn/AACKAQAAihAAAIoTAACKFgAAihkAAIocAACKHwAAiiIAAIolAACKJwAAimYAAIpoAACKagAAimwAAIpvAACKcAAAinEAAIpyAACKcwAAinUAAIp3AACKeAAAinkAAIp7AACKfAAAirsAAIq9AACKvwAAisEAAIrEAACKxQAAisYAAIrHAACKyAAAisoAAIrMAACKzQAAis4AAIrQAACK0QAAixAAAIsSAACLFAAAixYAAIsZAACLGgAAixsAAIscAACLHQAAix8AAIshAACLIgAAiyMAAIslAACLJgAAi2UAAItnAACLaQAAi2sAAItuAACLbwAAi3AAAItxAACLcgAAi3QAAIt2AACLdwAAi3gAAIt6AACLewAAi7oAAIu8AACLvgAAi8AAAIvDAACLxAAAi8UAAIvGAACLxwAAi8kAAIvLAACLzAAAi80AAIvPAACL0AAAjA8AAIwRAACMEwAAjBUAAIwYAACMGQAAjBoAAIwbAACMHAAAjB4AAIwgAACMIQAAjCIAAIwkAACMJQAAjGQAAIxmAACMaAAAjGoAAIxtAACMbgAAjG8AAIxwAACMcQAAjHMAAIx1AACMdgAAjHcAAIx5AACMegAAjMUAAIzoAACNCAAAjSgAAI0qAACNLAAAjS4AAI0wAACNMwAAjTQAAI01AACNOAAAjTkAAI07AACNPAAAjT4AAI1AAACNQQAAjUIAAI1FAACNRgAAjUsAAI1YAACNXQAAjV8AAI1hAAC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juQAAo7wAAKO9AACjvgAAo78AAKPAAACjwgAAo8QAAKPFAACjxgAAo8gAAKPJAACkCAAApAoAAKQMAACkDgAApBEAAKQSAACkEwAApBQAAKQVAACkFwAApBkAAKQaAACkGwAApB0AAKQeAACkXQAApF8AAKRhAACkYwAApGYAAKRnAACkaAAApGkAAKRqAACkbAAApG4AAKRvAACkcAAApHIAAKRzAACksgAApLQAAKS2AACkuAAApLsAAKS8AACkvQAApL4AAKS/AACkwQAApMMAAKTEAACkxQAApMcAAKTIAAClBwAApQkAAKULAAClDQAApRAAAKURAAClEgAApRMAAKUUAAClFgAApRgAAKUZAAClGgAApRwAAKUdAAClXAAApV4AAKVhAAClYwAApWYAAKVnAAClaAAApWkAAKVqAAClbAAApW4AAKVvAAClcAAApXIAAKVzAAClvgAApeEAAKYBAACmIQAApiMAAKYlAACmJwAApikAAKYrAACmLAAApi0AAKYwAACmMQAApjMAAKY0AACmNwAApjkAAKY6AACmOwAApj4AAKY/AACmRAAAplEAAKZWAACmWAAAploAAKZfAACmYgAApmUAAKZnAACmjAAAprAAAKbXAACm+wAApv4AAKcAAACnAgAApwQAAKcGAACnCAAApwkAAKcMAACnGQAApyoAAKcsAACnLgAApzAAAKcyAACnNAAApzYAAKc4AACnOgAAp0sAAKdOAACnUQAAp1QAAKdXAACnWgAAp10AAKdgAACnYwAAp2UAAKekAACnpgAAp6gAAKeqAACnrQAAp64AAKevAACnsAAAp7EAAKezAACntQAAp7YAAKe3AACnuQAAp7oAAKf5AACn+wAAp/0AAKf/AACoAgAAqAMAAKgEAACoBQAAqAYAAKgIAACoCgAAqAsAAKgMAACoDgAAqA8AAKhOAACoUAAAqFMAAKhVAACoWAAAqFkAAKhaAACoWwAAqFwAAKheAACoYAAAqGEAAKhiAACoZAAAqGUAAKhyAACocwAAqHQAAKh2AACotQAAqLcAAKi5AACouwAAqL4AAKi/AACowAAAqMEAAKjCAACoxAAAqMYAAKjHAACoyAAAqMoAAKjLAACpCgAAqQwAAKkOAACpEAAAqRMAAKkUAACpFQAAqRYAAKkXAACpGQAAqRsAAKkcAACpHQAAqR8AAKkgAACpXwAAqWEAAKljAACpZQAAqWgAAKlpAACpagAAqWsAAKlsAACpbgAAqXAAAKlxAACpcgAAqXQAAKl1AACptAAAqbYAAKm4AACpugAAqb0AAKm+AACpvwAAqcAAAKnBAACpwwAAqcUAAKnGAACpxwAAqckAAKnKAACqCQAAqgsAAKoNAACqDwAAqhIAAKoTAACqFAAAqhUAAKoWAACqGAAAqhoAAKobAACqHAAAqh4AAKofAACqRAAAqmgAAKqPAACqswAAqrYAAKq4AACqugAAqrwAAKq+AACqwAAAqsEAAKrEAACq0QAAquAAAKriAACq5AAAquYAAKroAACq6gAAquwAAKruAACq/QAAqwAAAKsDAACrBgAAqwkAAKsMAACrDwAAqxIAAKsUAACrUwAAq1UAAKtXAACrWQAAq1wAAKtdAACrXgAAq18AAKtgAACrYgAAq2QAAKtlAACrZgAAq2gAAKtpAACrqAAAq6oAAKusAACrrgAAq7EAAKuyAACrswAAq7QAAKu1AACrtwAAq7kAAKu6AACruwAAq70AAKu+AACr/QAAq/8AAKwBAACsAwAArAYAAKwHAACsCAAArAkAAKwKAACsDAAArA4AAKwPAACsEAAArBIAAKwTAACsUgAArFQAAKxWAACsWAAArFsAAKxcAACsXQAArF4AAKxfAACsYQAArGMAAKxkAACsZQAArGcAAKxoAACspwAArKkAAKyrAACsrQAArLAAAKyxAACssgAArLMAAKy0AACstgAArLgAAKy5AACsugAArLwAAKy9AACs/AAArP4AAK0AAACtAgAArQUAAK0GAACtBwAArQgAAK0JAACtCwAArQ0AAK0OAACtDwAArREAAK0SAACtUQAArVMAAK1WAACtWAAArVsAAK1cAACtXQAArV4AAK1fAACtYQAArWMAAK1kAACtZQAArWcAAK1oAACtswAArdYAAK32AACuFgAArhgAAK4aAACuHAAArh4AAK4gAACuIQAAriIAAK4lAACuJgAArigAAK4pAACuLAAAri8AAK4wAACuMQAArjQAAK41AACuOgAArkcAAK5MAACuTgAArlAAAK5VAACuWAAArlsAAK5dAACuggAArqYAAK7NAACu8QAArvQAAK72AACu+AAArvoAAK78AACu/gAArv8AAK8CAACvDwAAryAAAK8iAACvJAAAryYAAK8oAACvKgAArywAAK8uAACvMAAAr0EAAK9EAACvRwAAr0oAAK9NAACvUAAAr1MAAK9WAACvWQAAr1sAAK+aAACvnAAAr54AAK+gAACvowAAr6QAAK+lAACvpgAAr6cAAK+pAACvqwAAr6wAAK+tAACvrwAAr7AAAK/vAACv8QAAr/MAAK/1AACv+AAAr/kAAK/6AACv+wAAr/wAAK/+AACwAAAAsAEAALACAACwBAAAsAUAALBEAACwRgAAsEkAALBLAACwTgAAsE8AALBQAACwUQAAsFIAALBUAACwVgAAsFcAALBYAACwWgAAsFsAALBoAACwaQAAsGoAALBsAACwqwAAsK0AALCvAACwsQAAsLQAALC1AACwtgAAsLcAALC4AACwugAAsLwAALC9AACwvgAAsMAAALDBAACxAAAAsQIAALEEAACxBgAAsQkAALEKAACxCwAAsQwAALENAACxDwAAsREAALESAACxEwAAsRUAALEWAACxVQAAsVcAALFZAACxWwAAsV4AALFfAACxYAAAsWEAALFiAACxZAAAsWYAALFnAACxaAAAsWoAALFrAACxqgAAsawAALGuAACxsAAAsbMAALG0AACxtQAAsbYAALG3AACxuQAAsbsAALG8AACxvQAAsb8AALHAAACx/wAAsgEAALIDAACyBQAAsggAALIJAACyCgAAsgsAALIMAACyDgAAshAAALIRAACyEgAAshQAALIVAACyOgAAsl4AALKFAACyqQAAsqwAALKuAACysAAAsrIAALK0AACytgAAsrcAALK6AACyxwAAstYAALLYAACy2gAAstwAALLeAACy4AAAsuIAALLkAACy8wAAsvYAALL5AACy/AAAsv8AALMCAACzBQAAswgAALMKAACzSQAAs0sAALNNAACzTwAAs1IAALNTAACzVAAAs1UAALNWAACzWAAAs1oAALNbAACzXAAAs14AALNfAACzngAAs6AAALOjAACzpQAAs6gAALOpAACzqgAAs6sAALOsAACzrgAAs7AAALOxAACzsgAAs7QAALO1AACz9AAAs/YAALP4AACz+gAAs/0AALP+AACz/wAAtAAAALQBAAC0AwAAtAUAALQGAAC0BwAAtAkAALQKAAC0SQAAtEsAALRNAAC0TwAAtFIAALRTAAC0VAAAtFUAALRWAAC0WAAAtFoAALRbAAC0XAAAtF4AALRfAAC0ngAAtKAAALSiAAC0pAAAtKcAALSoAAC0qQAAtKoAALSrAAC0rQAAtK8AALSwAAC0sQAAtLMAALS0AAC08wAAtPUAALT3AAC0+QAAtPwAALT9AAC0/gAAtP8AALUAAAC1AgAAtQQAALUFAAC1BgAAtQgAALUJAAC1SAAAtUoAALVMAAC1TgAAtVEAALVSAAC1UwAAtVQAALVVAAC1VwAAtVkAALVaAAC1WwAAtV0AALVeAAC1qQAAtcwAALXsAAC2DAAAtg4AALYQAAC2EgAAthQAALYWAAC2FwAAthgAALYbAAC2HAAAth4AALYfAAC2IQAAtiMAALYkAAC2JQAAtigAALYpAAC2LgAAtjsAALZAAAC2QgAAtkQAALZJAAC2TAAAtk8AALZRAAC2dgAAtpoAALbBAAC25QAAtugAALbqAAC27AAAtu4AALbwAAC28gAAtvMAALb2AAC3AwAAtxQAALcWAAC3GAAAtxoAALccAAC3HgAAtyAAALciAAC3JAAAtzUAALc4AAC3OwAAtz4AALdBAAC3RAAAt0cAALdKAAC3TQAAt08AALeOAAC3kAAAt5IAALeUAAC3lwAAt5gAALeZAAC3mgAAt5sAALedAAC3nwAAt6AAALehAAC3owAAt6QAALfjAAC35QAAt+cAALfpAAC37AAAt+0AALfuAAC37wAAt/AAALfyAAC39AAAt/UAALf2AAC3+AAAt/kAALg4AAC4OgAAuD0AALg/AAC4QgAAuEMAALhEAAC4RQAAuEYAALhIAAC4SgAAuEsAALhMAAC4TgAAuE8AALhcAAC4XQAAuF4AALhgAAC4nwAAuKEAALijAAC4pQAAuKgAALipAAC4qgAAuKsAALisAAC4rgAAuLAAALixAAC4sgAAuLQAALi1AAC49AAAuPYAALj4AAC4+gAAuP0AALj+AAC4/wAAuQAAALkBAAC5AwAAuQUAALkGAAC5BwAAuQkAALkKAAC5SQAAuUsAALlNAAC5TwAAuVIAALlTAAC5VAAAuVUAALlWAAC5WAAAuVoAALlbAAC5XAAAuV4AALlfAAC5ngAAuaAAALmiAAC5pAAAuacAALmoAAC5qQAAuaoAALmrAAC5rQAAua8AALmwAAC5sQAAubMAALm0AAC58wAAufUAALn3AAC5+QAAufwAALn9AAC5/gAAuf8AALoAAAC6AgAAugQAALoFAAC6BgAAuggAALoJAAC6LgAAulIAALp5AAC6nQAAuqAAALqiAAC6pAAAuqYAALqoAAC6qgAAuqsAALquAAC6uwAAusoAALrMAAC6zgAAutAAALrSAAC61AAAutYAALrYAAC65wAAuuoAALrtAAC68AAAuvMAALr2AAC6+QAAuvwAALr+AAC7PQAAuz8AALtBAAC7QwAAu0YAALtHAAC7SAAAu0kAALtKAAC7TAAAu04AALtPAAC7UAAAu1IAALtTAAC7kgAAu5QAALuWAAC7mAAAu5sAALucAAC7nQAAu54AALufAAC7oQAAu6MAALukAAC7pQAAu6cAALuoAAC75wAAu+kAALvrAAC77QAAu/AAALvxAAC78gAAu/MAALv0AAC79gAAu/gAALv5AAC7+gAAu/wAALv9AAC8PAAAvD4AALxBAAC8QwAAvEYAALxHAAC8SAAAvEkAALxKAAC8TAAAvE4AALxPAAC8UAAAvFIAALxTAAC8kgAAvJQAALyWAAC8mAAAvJsAALycAAC8nQAAvJ4AALyfAAC8oQAAvKMAALykAAC8pQAAvKcAALyoAAC85wAAvOkAALzrAAC87QAAvPAAALzxAAC88gAAvPMAALz0AAC89gAAvPgAALz5AAC8+gAAvPwAALz9AAC9PAAAvT4AAL1AAAC9QgAAvUUAAL1GAAC9RwAAvUgAAL1JAAC9SwAAvU0AAL1OAAC9TwAAvVEAAL1SAAC9nQAAvcAAAL3gAAC+AAAAvgIAAL4EAAC+BgAAvggAAL4KAAC+CwAAvgwAAL4PAAC+EAAAvhIAAL4TAAC+FQAAvhgAAL4ZAAC+GgAAvh0AAL4eAAC+IwAAvjAAAL41AAC+NwAAvjkAAL4+AAC+QQAAvkQAAL5GAAC+awAAvo8AAL62AAC+2gAAvt0AAL7fAAC+4QAAvuMAAL7lAAC+5wAAvugAAL7rAAC++AAAvwkAAL8LAAC/DQAAvw8AAL8RAAC/EwAAvxUAAL8XAAC/GQAAvyoAAL8tAAC/MAAAvzMAAL82AAC/OQAAvzwAAL8/AAC/QgAAv0QAAL+DAAC/hQAAv4cAAL+JAAC/jAAAv40AAL+OAAC/jwAAv5AAAL+SAAC/lAAAv5UAAL+WAAC/mAAAv5kAAL/YAAC/2gAAv9wAAL/eAAC/4QAAv+IAAL/jAAC/5AAAv+UAAL/nAAC/6QAAv+oAAL/rAAC/7QAAv+4AAMAtAADALwAAwDIAAMA0AADANwAAwDgAAMA5AADAOgAAwDsAAMA9AADAPwAAwEAAAMBBAADAQwAAwEQAAMBRAADAVAAAwFcAAMBaAADAXQAAwF8AAMB5AADAfQAAwLwAAMC+AADAwAAAwMIAAMDFAADAxgAAwMcAAMDIAADAyQAAwMsAAMDNAADAzgAAwM8AAMDRAADA0gAAwREAAMETAADBFQAAwRcAAMEaAADBGwAAwRwAAMEdAADBHgAAwSAAAMEiAADBIwAAwSQAAMEmAADBJwAAwWYAAMFoAADBagAAwWwAAMFvAADBcAAAwXEAAMFyAADBcwAAwXUAAMF3AADBeAAAwXkAAMF7AADBfAAAwbsAAMG9AADBvwAAwcEAAMHEAADBxQAAwcYAAMHHAADByAAAwcoAAMHMAADBzQAAwc4AAMHQAADB0QAAwhAAAMISAADCFAAAwhYAAMIZAADCGgAAwhsAAMIcAADCHQAAwh8AAMIhAADCIgAAwiMAAMIlAADCJgAAwksAAMJvAADClgAAwroAAMK9AADCvwAAwsEAAMLDAADCxQAAwscAAMLIAADCywAAwtgAAMLnAADC6QAAwusAAMLtAADC7wAAwvEAAMLzAADC9QAAwwQAAMMHAADDCgAAww0AAMMQAADDEwAAwxYAAMMZAADDGwAAw1oAAMNcAADDXgAAw2AAAMNjAADDZAAAw2UAAMNmAADDZwAAw2kAAMNrAADDbAAAw20AAMNvAADDcAAAw68AAMOxAADDswAAw7UAAMO4AADDuQAAw7oAAMO7AADDvAAAw74AAMPAAADDwQAAw8IAAMPEAADDxQAAxAQAAMQGAADECAAAxAoAAMQNAADEDgAAxA8AAMQQAADEEQAAxBMAAMQVAADEFgAAxBcAAMQZAADEGgAAxFkAAMRbAADEXQAAxF8AAMRiAADEYwAAxGQAAMRlAADEZgAAxGgAAMRqAADEawAAxGwAAMRuAADEbwAAxK4AAMSwAADEsgAAxLQAAMS3AADEuAAAxLkAAMS6AADEuwAAxL0AAMS/AADEwAAAxMEAAMTDAADExAAAxQMAAMUFAADFBwAAxQkAAMUMAADFDQAAxQ4AAMUPAADFEAAAxRIAAMUUAADFFQAAxRYAAMUYAADFGQAAxVgAAMVaAADFXAAAxV4AAMVhAADFYgAAxWMAAMVkAADFZQAAxWcAAMVpAADFagAAxWsAAMVtAADFbgAAxbkAAMXcAADF/AAAxhwAAMYeAADGIAAAxiIAAMYkAADGJgAAxicAAMYoAADGKwAAxiwAAMYuAADGLwAAxjIAAMY1AADGNgAAxjcAAMY6AADGOwAAxkAAAMZNAADGUgAAxlQAAMZWAADGWwAAxl4AAMZhAADGYwAAxogAAMasAADG0wAAxvcAAMb6AADG/AAAxv4AAMcAAADHAgAAxwQAAMcFAADHCAAAxxUAAMcmAADHKAAAxyoAAMcsAADHLgAAxzAAAMcyAADHNAAAxzYAAMdHAADHSgAAx00AAMdQAADHUwAAx1YAAMdZAADHXAAAx18AAMdhAADHoAAAx6IAAMekAADHpgAAx6kAAMeqAADHqwAAx6wAAMetAADHrwAAx7EAAMeyAADHswAAx7UAAMe2AADH9QAAx/cAAMf5AADH+wAAx/4AAMf/AADIAAAAyAEAAMgCAADIBAAAyAYAAMgHAADICAAAyAoAAMgLAADISgAAyEwAAMhPAADIUQAAyFQAAMhVAADIVgAAyFcAAMhYAADIWgAAyFwAAMhdAADIXgAAyGAAAMhhAADIbgAAyG8AAMhwAADIcgAAyLEAAMizAADItQAAyLcAAMi6AADIuwAAyLwAAMi9AADIvgAAyMAAAMjCAADIwwAAyMQAAMjGAADIxwAAyQYAAMkIAADJCgAAyQwAAMkPAADJEAAAyREAAMkSAADJEwAAyRUAAMkXAADJGAAAyRkAAMkbAADJHAAAyVsAAMldAADJXwAAyWEAAMlkAADJZQAAyWYAAMlnAADJaAAAyWoAAMlsAADJbQAAyW4AAMlwAADJcQAAybAAAMmyAADJtAAAybYAAMm5AADJugAAybsAAMm8AADJvQAAyb8AAMnBAADJwgAAycMAAMnFAADJxgAAygUAAMoHAADKCQAAygsAAMoOAADKDwAAyhAAAMoRAADKEgAAyhQAAMoWAADKFwAAyhgAAMoaAADKGwAAykAAAMpkAADKiwAAyq8AAMqyAADKtAAAyrYAAMq4AADKugAAyrwAAMq9AADKwAAAys0AAMrcAADK3gAAyuAAAMriAADK5AAAyuYAAMroAADK6gAAyvkAAMr8AADK/wAAywIAAMsFAADLCAAAywsAAMsOAADLEAAAy08AAMtRAADLUwAAy1UAAMtYAADLWQAAy1oAAMtbAADLXAAAy14AAMtgAADLYQAAy2IAAMtkAADLZQAAy6QAAMumAADLqAAAy6oAAMutAADLrgAAy68AAMuwAADLsQAAy7MAAMu1AADLtgAAy7cAAMu5AADLugAAy/kAAMv7AADL/QAAy/8AAMwCAADMAwAAzAQAAMwFAADMBgAAzAgAAMwKAADMCwAAzAwAAMwOAADMDwAAzE4AAMxQAADMUwAAzFUAAMxYAADMWQAAzFoAAMxbAADMXAAAzF4AAMxgAADMYQAAzGIAAMxkAADMZQAAzKgAAMzMAADM8AAAzRMAAM06AADNWgAAzYEAAM2oAADNyAAAzewAAM4QAADOEgAAzhUAAM4XAADOGQAAzhsAAM4eAADOIAAAziIAAM4kAADOJgAAzigAAM4qAADOLQAAzjAAAM4xAADONgAAzkMAAM5GAADOSAAAzksAAM5OAADOUAAAznUAAM6ZAADOwAAAzuQAAM7nAADO6QAAzusAAM7tAADO7wAAzvEAAM7yAADO9QAAzwIAAM8VAADPFwAAzxkAAM8bAADPHQAAzx8AAM8hAADPIwAAzyUAAM8nAADPOgAAzz0AAM9AAADPQwAAz0YAAM9JAADPTAAAz08AAM9SAADPVQAAz1cAAM+WAADPmAAAz5sAAM+dAADPoAAAz6EAAM+iAADPowAAz6QAAM+mAADPqAAAz6kAAM+qAADPrAAAz60AAM+2AADPtwAAz7kAAM/4AADP+gAAz/wAAM/+AADQAQAA0AIAANADAADQBAAA0AUAANAHAADQCQAA0AoAANALAADQDQAA0A4AANBNAADQTwAA0FIAANBUAADQVwAA0FgAANBZAADQWgAA0FsAANBdAADQXwAA0GAAANBhAADQYwAA0GQAANBtAADQcAAA0HMAANB1AADQfgAA0IEAANCDAADQhQAA0MQAANDGAADQyAAA0MoAANDNAADQzgAA0M8AANDQAADQ0QAA0NMAANDVAADQ1gAA0NcAANDZAADQ2gAA0RkAANEbAADRHgAA0SAAANEjAADRJAAA0SUAANEmAADRJwAA0SkAANErAADRLAAA0S0AANEvAADRMAAA0TkAANE6AADRPAAA0XsAANF9AADRfwAA0YEAANGEAADRhQAA0YYAANGHAADRiAAA0YoAANGMAADRjQAA0Y4AANGQAADRkQAA0dAAANHSAADR1QAA0dcAANHaAADR2wAA0dwAANHdAADR3gAA0eAAANHiAADR4wAA0eQAANHmAADR5wAA0fQAANH1AADR9gAA0fgAANI3AADSOQAA0jsAANI9AADSQAAA0kEAANJCAADSQwAA0kQAANJGAADSSAAA0kkAANJKAADSTAAA0k0AANKMAADSjgAA0pEAANKTAADSlgAA0pcAANKYAADSmQAA0poAANKcAADSngAA0p8AANKgAADSogAA0qMAANKyAADSvwAA0sYAANLJAADSzAAA0s4AANLVAADS2AAA0tsAANLeAADS4AAA0uYAANLsAADTNwAA01oAANN6AADTmgAA05wAANOeAADToAAA06IAANOlAADTpgAA06cAANOqAADTqwAA060AANOuAADTsAAA07MAANO0AADTtQAA07gAANO5AADTvgAA08sAANPQAADT0gAA09QAANPZAADT3AAA098AANPhAADUBgAA1CoAANRRAADUdQAA1HgAANR6AADUfAAA1H4AANSAAADUggAA1IMAANSGAADUkwAA1KQAANSmAADUqAAA1KoAANSsAADUrgAA1LAAANSyAADUtAAA1MUAANTIAADUywAA1M4AANTRAADU1AAA1NcAANTaAADU3QAA1N8AANUeAADVIAAA1SIAANUkAADVJwAA1SgAANUpAADVKgAA1SsAANUtAADVLwAA1TAAANUxAADVMwAA1TQAANVzAADVdQAA1XcAANV5AADVfAAA1X0AANV+AADVfwAA1YAAANWCAADVhAAA1YUAANWGAADViAAA1YkAANXIAADVygAA1c0AANXPAADV0gAA1dMAANXUAADV1QAA1dYAANXYAADV2gAA1dsAANXcAADV3gAA1d8AANXsAADV7QAA1e4AANXwAADWLwAA1jEAANYzAADWNQAA1jgAANY5AADWOgAA1jsAANY8AADWPgAA1kAAANZBAADWQgAA1kQAANZFAADWhAAA1oYAANaIAADWigAA1o0AANaOAADWjwAA1pAAANaRAADWkwAA1pUAANaWAADWlwAA1pkAANaaAADW2QAA1tsAANbdAADW3wAA1uIAANbjAADW5AAA1uUAANbmAADW6AAA1uoAANbrAADW7AAA1u4AANbvAADXLgAA1zAAANcyAADXNAAA1zcAANc4AADXOQAA1zoAANc7AADXPQAA1z8AANdAAADXQQAA10MAANdEAADXgwAA14UAANeHAADXiQAA14wAANeNAADXjgAA148AANeQAADXkgAA15QAANeVAADXlgAA15gAANeZAADXvgAA1+IAANgJAADYLQAA2DAAANgyAADYNAAA2DYAANg4AADYOgAA2DsAANg+AADYSwAA2FoAANhcAADYXgAA2GAAANhiAADYZAAA2GYAANhoAADYdwAA2HoAANh9AADYgAAA2IMAANiGAADYiQAA2IwAANiOAADYzQAA2M8AANjRAADY0wAA2NYAANjXAADY2AAA2NkAANjaAADY3AAA2N4AANjfAADY4AAA2OIAANjjAADZIgAA2SQAANkmAADZKAAA2SsAANksAADZLQAA2S4AANkvAADZMQAA2TMAANk0AADZNQAA2TcAANk4AADZdwAA2XkAANl7AADZfQAA2YAAANmBAADZggAA2YMAANmEAADZhgAA2YgAANmJAADZigAA2YwAANmNAADZzAAA2c4AANnQAADZ0gAA2dUAANnWAADZ1wAA2dgAANnZAADZ2wAA2d0AANneAADZ3wAA2eEAANniAADaIQAA2iMAANolAADaJwAA2ioAANorAADaLAAA2i0AANouAADaMAAA2jIAANozAADaNAAA2jYAANo3AADadgAA2ngAANp6AADafAAA2n8AANqAAADagQAA2oIAANqDAADahQAA2ocAANqIAADaiQAA2osAANqMAADaywAA2s0AANrPAADa0QAA2tQAANrVAADa1gAA2tcAANrYAADa2gAA2twAANrdAADa3gAA2uAAANrhAADbLAAA208AANtvAADbjwAA25EAANuTAADblQAA25cAANuaAADbmwAA25wAANufAADboAAA26IAANujAADbpgAA26kAANuqAADbqwAA264AANuvAADbtAAA28EAANvGAADbyAAA28oAANvPAADb0gAA29UAANvXAADb/AAA3CAAANxHAADcawAA3G4AANxwAADccgAA3HQAANx2AADceAAA3HkAANx8AADciQAA3JoAANycAADcngAA3KAAANyiAADcpAAA3KYAANyoAADcqgAA3LsAANy+AADcwQAA3MQAANzHAADcygAA3M0AANzQAADc0wAA3NUAAN0UAADdFgAA3RgAAN0aAADdHQAA3R4AAN0fAADdIAAA3SEAAN0jAADdJQAA3SYAAN0nAADdKQAA3SoAAN1pAADdawAA3W0AAN1vAADdcgAA3XMAAN10AADddQAA3XYAAN14AADdegAA3XsAAN18AADdfgAA3X8AAN2+AADdwAAA3cMAAN3FAADdyAAA3ckAAN3KAADdywAA3cwAAN3OAADd0AAA3dEAAN3SAADd1AAA3dUAAN3iAADd4wAA3eQAAN3mAADeJQAA3icAAN4pAADeKwAA3i4AAN4vAADeMAAA3jEAAN4yAADeNAAA3jYAAN43AADeOAAA3joAAN47AADeegAA3nwAAN5+AADegAAA3oMAAN6EAADehQAA3oYAAN6HAADeiQAA3osAAN6MAADejQAA3o8AAN6QAADezwAA3tEAAN7TAADe1QAA3tgAAN7ZAADe2gAA3tsAAN7cAADe3gAA3uAAAN7hAADe4gAA3uQAAN7lAADfJAAA3yYAAN8oAADfKgAA3y0AAN8uAADfLwAA3zAAAN8xAADfMwAA3zUAAN82AADfNwAA3zkAAN86AADfeQAA33sAAN99AADffwAA34IAAN+DAADfhAAA34UAAN+GAADfiAAA34oAAN+LAADfjAAA344AAN+PAADftAAA39gAAN//AADgIwAA4CYAAOAoAADgKgAA4CwAAOAuAADgMAAA4DEAAOA0AADgQQAA4FAAAOBSAADgVAAA4FYAAOBYAADgWgAA4FwAAOBeAADgbQAA4HAAAOBzAADgdgAA4HkAAOB8AADgfwAA4IIAAOCEAADgwwAA4MUAAODHAADgyQAA4MwAAODNAADgzgAA4M8AAODQAADg0gAA4NQAAODVAADg1gAA4NgAAODZAADhGAAA4RoAAOEcAADhHgAA4SEAAOEiAADhIwAA4SQAAOElAADhJwAA4SkAAOEqAADhKwAA4S0AAOEuAADhbQAA4W8AAOFxAADhcwAA4XYAAOF3AADheAAA4XkAAOF6AADhfAAA4X4AAOF/AADhgAAA4YIAAOGDAADhwgAA4cQAAOHGAADhyAAA4csAAOHMAADhzQAA4c4AAOHPAADh0QAA4dMAAOHUAADh1QAA4dcAAOHYAADiFwAA4hkAAOIbAADiHQAA4iAAAOIhAADiIgAA4iMAAOIkAADiJgAA4igAAOIpAADiKgAA4iwAAOItAADibAAA4m4AAOJwAADicgAA4nUAAOJ2AADidwAA4ngAAOJ5AADiewAA4n0AAOJ+AADifwAA4oEAAOKCAADiwQAA4sMAAOLGAADiyAAA4ssAAOLMAADizQAA4s4AAOLPAADi0QAA4tMAAOLUAADi1QAA4tcAAOLYAADjIwAA40YAAONmAADjhgAA44gAAOOKAADjjAAA444AAOORAADjkgAA45MAAOOWAADjlwAA45kAAOOaAADjnAAA454AAOOfAADjoAAA46MAAOOkAADjrQAA47oAAOO/AADjwQAA48MAAOPIAADjywAA484AAOPQAADj9QAA5BkAAORAAADkZAAA5GcAAORpAADkawAA5G0AAORvAADkcQAA5HIAAOR1AADkggAA5JMAAOSVAADklwAA5JkAAOSbAADknQAA5J8AAOShAADkowAA5LQAAOS3AADkugAA5L0AAOTAAADkwwAA5MYAAOTJAADkzAAA5M4AAOUNAADlDwAA5REAAOUTAADlFgAA5RcAAOUYAADlGQAA5RoAAOUcAADlHgAA5R8AAOUgAADlIgAA5SMAAOViAADlZAAA5WYAAOVoAADlawAA5WwAAOVtAADlbgAA5W8AAOVxAADlcwAA5XQAAOV1AADldwAA5XgAAOW3AADluQAA5bwAAOW+AADlwQAA5cIAAOXDAADlxAAA5cUAAOXHAADlyQAA5coAAOXLAADlzQAA5c4AAOXbAADl3AAA5d0AAOXfAADmHgAA5iAAAOYiAADmJAAA5icAAOYoAADmKQAA5ioAAOYrAADmLQAA5i8AAOYwAADmMQAA5jMAAOY0AADmcwAA5nUAAOZ3AADmeQAA5nwAAOZ9AADmfgAA5n8AAOaAAADmggAA5oQAAOaFAADmhgAA5ogAAOaJAADmyAAA5soAAObMAADmzgAA5tEAAObSAADm0wAA5tQAAObVAADm1wAA5tkAAObaAADm2wAA5t0AAObeAADnHQAA5x8AAOchAADnIwAA5yYAAOcnAADnKAAA5ykAAOcqAADnLAAA5y4AAOcvAADnMAAA5zIAAOczAADncgAA53QAAOd2AADneAAA53sAAOd8AADnfQAA534AAOd/AADngQAA54MAAOeEAADnhQAA54cAAOeIAADnrQAA59EAAOf4AADoHAAA6B8AAOghAADoIwAA6CUAAOgnAADoKQAA6CoAAOgtAADoOgAA6EkAAOhLAADoTQAA6E8AAOhRAADoUwAA6FUAAOhXAADoZgAA6GkAAOhsAADobwAA6HIAAOh1AADoeAAA6HsAAOh9AADovAAA6L4AAOjAAADowgAA6MUAAOjGAADoxwAA6MgAAOjJAADoywAA6M0AAOjOAADozwAA6NEAAOjSAADpEQAA6RMAAOkVAADpFwAA6RoAAOkbAADpHAAA6R0AAOkeAADpIAAA6SIAAOkjAADpJAAA6SYAAOknAADpZgAA6WgAAOlqAADpbAAA6W8AAOlwAADpcQAA6XIAAOlzAADpdQAA6XcAAOl4AADpeQAA6XsAAOl8AADpuwAA6b0AAOnAAADpwgAA6cUAAOnGAADpxwAA6cgAAOnJAADpywAA6c0AAOnOAADpzwAA6dEAAOnSAADqEQAA6hMAAOoVAADqFwAA6hoAAOobAADqHAAA6h0AAOoeAADqIAAA6iIAAOojAADqJAAA6iYAAOonAADqZgAA6mgAAOpqAADqbAAA6m8AAOpwAADqcQAA6nIAAOpzAADqdQAA6ncAAOp4AADqeQAA6nsAAOp8AADquwAA6r0AAOq/AADqwQAA6sQAAOrFAADqxgAA6scAAOrIAADqygAA6swAAOrNAADqzgAA6tAAAOrRAADq2gAA6tsAAOrdAADrHAAA6x4AAOsgAADrIgAA6yUAAOsmAADrJwAA6ygAAOspAADrKwAA6y0AAOsuAADrLwAA6zEAAOsyAADrcQAA63MAAOt1AADrdwAA63oAAOt7AADrfAAA630AAOt+AADrgAAA64IAAOuDAADrhAAA64YAAOuHAADrxgAA68gAAOvLAADrzQAA69AAAOvRAADr0gAA69MAAOvUAADr1gAA69gAAOvZAADr2gAA69wAAOvdAADsKAAA7EsAAOxrAADsiwAA7I0AAOyPAADskQAA7JMAAOyVAADslgAA7JcAAOyaAADsmwAA7J0AAOyeAADsoAAA7KIAAOyjAADspAAA7KcAAOyoAADsrQAA7LoAAOy/AADswQAA7MMAAOzIAADsywAA7M4AAOzQAAD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DTwABA1AAAQNRAAEDUgABA1QAAQNWAAEDVwABA1gAAQNaAAEDWwABA5oAAQOcAAEDngABA6AAAQOjAAEDpAABA6UAAQOmAAEDpwABA6kAAQOrAAEDrAABA60AAQOvAAEDsAABA+8AAQPxAAED8wABA/UAAQP4AAED+QABA/oAAQP7AAED/AABA/4AAQQAAAEEAQABBAIAAQQEAAEEBQABBA4AAQQPAAEEEQABBFAAAQRSAAEEVAABBFYAAQRYAAEEWQABBFoAAQRbAAEEXAABBF4AAQRgAAEEYQABBGIAAQRkAAEEZQABBKQAAQSmAAEEqAABBKoAAQSsAAEErQABBK4AAQSvAAEEsAABBLIAAQS0AAEEtQABBLYAAQS4AAEEuQABBPgAAQT6AAEE/QABBP8AAQUBAAEFAgABBQMAAQUEAAEFBQABBQcAAQUJAAEFCgABBQsAAQUNAAEFDgABBVkAAQV8AAEFnAABBbwAAQW+AAEFwAABBcIAAQXEAAEFxgABBccAAQXIAAEFywABBcwAAQXOAAEFzwABBdEAAQXTAAEF1AABBdUAAQXYAAEF2QABBd4AAQXrAAEF8AABBfIAAQX0AAEF+QABBfwAAQX/AAEGAQABBiYAAQZKAAEGcQABBpUAAQaYAAEGmgABBpwAAQaeAAEGoAABBqIAAQajAAEGpgABBrMAAQbEAAEGxgABBsgAAQbKAAEGzAABBs4AAQbQAAEG0gABBtQAAQblAAEG6AABBusAAQbuAAEG8QABBvQAAQb3AAEG+gABBv0AAQb/AAEHPgABB0AAAQdCAAEHRAABB0cAAQdIAAEHSQABB0oAAQdLAAEHTQABB08AAQdQAAEHUQABB1MAAQdUAAEHkwABB5UAAQeXAAEHmQABB5wAAQedAAEHngABB58AAQegAAEHogABB6QAAQelAAEHpgABB6gAAQepAAEH6AABB+oAAQftAAEH7wABB/IAAQfzAAEH9AABB/UAAQf2AAEH+AABB/oAAQf7AAEH/AABB/4AAQf/AAEIDAABCA0AAQgOAAEIEAABCE8AAQhRAAEIUwABCFUAAQhYAAEIWQABCFoAAQhbAAEIXAABCF4AAQhgAAEIYQABCGIAAQhkAAEIZQABCKQAAQimAAEIqAABCKoAAQitAAEIrgABCK8AAQiwAAEIsQABCLMAAQi1AAEItgABCLcAAQi5AAEIugABCPkAAQj7AAEI/QABCP8AAQkCAAEJAwABCQQAAQkFAAEJBgABCQgAAQkKAAEJCwABCQwAAQkOAAEJDwABCU4AAQlQAAEJUgABCVQAAQlXAAEJWAABCVkAAQlaAAEJWwABCV0AAQlfAAEJYAABCWEAAQljAAEJZAABCaMAAQmlAAEJpwABCakAAQmsAAEJrQABCa4AAQmvAAEJsAABCbIAAQm0AAEJtQABCbYAAQm4AAEJuQABCd4AAQoCAAEKKQABCk0AAQpQAAEKUgABClQAAQpWAAEKWAABCloAAQpbAAEKXgABCmsAAQp6AAEKfAABCn4AAQqAAAEKggABCoQAAQqGAAEKiAABCpcAAQqaAAEKnQABCqAAAQqjAAEKpgABCqkAAQqsAAEKrgABCu0AAQrvAAEK8QABCvMAAQr2AAEK9wABCvgAAQr5AAEK+gABCvwAAQr+AAEK/wABCwAAAQsCAAELAwABC0IAAQtEAAELRgABC0gAAQtLAAELTAABC00AAQtOAAELTwABC1EAAQtTAAELVAABC1UAAQtXAAELWAABC5cAAQuZAAELmwABC50AAQugAAELoQABC6IAAQujAAELpAABC6YAAQuoAAELqQABC6oAAQusAAELrQABC+wAAQvuAAEL8QABC/MAAQv2AAEL9wABC/gAAQv5AAEL+gABC/wAAQv+AAEL/wABDAAAAQwCAAEMAwABDEIAAQxEAAEMRgABDEgAAQxLAAEMTAABDE0AAQxOAAEMTwABDFEAAQxTAAEMVAABDFUAAQxXAAEMWAABDJcAAQyZAAEMmwABDJ0AAQygAAEMoQABDKIAAQyjAAEMpAABDKYAAQyoAAEMqQABDKoAAQysAAEMrQABDOwAAQzuAAEM8AABDPIAAQz1AAEM9gABDPcAAQz4AAEM+QABDPsAAQz9AAEM/gABDP8AAQ0BAAENAgABDU0AAQ1wAAENkAABDbAAAQ2yAAENtAABDbYAAQ24AAENugABDbsAAQ28AAENvwABDcAAAQ3CAAENwwABDcUAAQ3HAAENyAABDckAAQ3MAAENzQABDdYAAQ3jAAEN6AABDeoAAQ3sAAEN8QABDfQAAQ33AAEN+QABDh4AAQ5CAAEOaQABDo0AAQ6QAAEOkgABDpQAAQ6WAAEOmAABDpoAAQ6bAAEOngABDqsAAQ68AAEOvgABDsAAAQ7CAAEOxAABDsYAAQ7IAAEOygABDswAAQ7dAAEO4AABDuMAAQ7mAAEO6QABDuwAAQ7vAAEO8gABDvUAAQ73AAEPNgABDzgAAQ86AAEPPAABDz8AAQ9AAAEPQQABD0IAAQ9DAAEPRQABD0cAAQ9IAAEPSQABD0sAAQ9MAAEPiwABD40AAQ+PAAEPkQABD5QAAQ+VAAEPlgABD5cAAQ+YAAEPmgABD5wAAQ+dAAEPngABD6AAAQ+hAAEP4AABD+IAAQ/lAAEP5wABD+oAAQ/rAAEP7AABD+0AAQ/uAAEP8AABD/IAAQ/zAAEP9AABD/YAAQ/3AAEQBAABEAUAARAGAAEQCAABEEcAARBJAAEQSwABEE0AARBQAAEQUQABEFIAARBTAAEQVAABEFYAARBYAAEQWQABEFoAARBcAAEQXQABEJwAARCeAAEQoAABEKIAARClAAEQpgABEKcAARCoAAEQqQABEKsAARCtAAEQrgABEK8AARCxAAEQsgABEPEAARDzAAEQ9QABEPcAARD6AAEQ+wABEPwAARD9AAEQ/gABEQAAARECAAERAwABEQQAAREGAAERBwABEUYAARFIAAERSgABEUwAARFPAAERUAABEVEAARFSAAERUwABEVUAARFXAAERWAABEVkAARFbAAERXAABEZsAARGdAAERnwABEaEAARGkAAERpQABEaYAARGnAAERqAABEaoAARGsAAERrQABEa4AARGwAAERsQABEdYAARH6AAESIQABEkUAARJIAAESSgABEkwAARJOAAESUAABElIAARJTAAESVgABEmMAARJyAAESdAABEnYAARJ4AAESegABEnwAARJ+AAESgAABEo8AARKSAAESlQABEpgAARKbAAESngABEqEAARKkAAESpgABEuUAARLnAAES6QABEusAARLuAAES7wABEvAAARLxAAES8gABEvQAARL2AAES9wABEvgAARL6AAES+wABEzoAARM8AAETPgABE0AAARNDAAETRAABE0UAARNGAAETRwABE0kAARNLAAETTAABE00AARNPAAETUAABE48AARORAAETkwABE5UAAROYAAETmQABE5oAARObAAETnAABE54AAROgAAEToQABE6IAAROkAAETpQABE+QAARPmAAET6QABE+sAARPuAAET7wABE/AAARPxAAET8gABE/QAARP2AAET9wABE/gAARP6AAET+wABFDoAARQ8AAEUPgABFEAAARRDAAEURAABFEUAARRGAAEURwABFEkAARRLAAEUTAABFE0AARRPAAEUUAABFI8AARSRAAEUkwABFJUAARSYAAEUmQABFJoAARSbAAEUnAABFJ4AARSgAAEUoQABFKIAARSkAAEUpQABFOQAARTmAAEU6AABFOoAARTtAAEU7gABFO8AARTwAAEU8QABFPMAART1AAEU9gABFPcAART5AAEU+gABFUUAARVoAAEViAABFagAARWqAAEVrAABFa4AARWwAAEVsgABFbMAARW0AAEVtwABFbgAARW6AAEVuwABFb0AARW/AAEVwAABFcEAARXEAAEVxQABFcoAARXXAAEV3AABFd4AARXgAAEV5QABFegAARXrAAEV7QABFhIAARY2AAEWXQABFoEAARaEAAEWhgABFogAARaKAAEWjAABFo4AARaPAAEWkgABFp8AARawAAEWsgABFrQAARa2AAEWuAABFroAARa8AAEWvgABFsAAARbRAAEW1AABFtcAARbaAAEW3QABFuAAARbjAAEW5gABFukAARbrAAEXKgABFywAARcuAAEXMAABFzMAARc0AAEXNQABFzYAARc3AAEXOQABFzsAARc8AAEXPQABFz8AARdAAAEXfwABF4EAAReDAAEXhQABF4gAAReJAAEXigABF4sAAReMAAEXjgABF5AAAReRAAEXkgABF5QAAReVAAEX1AABF9YAARfZAAEX2wABF94AARffAAEX4AABF+EAARfiAAEX5AABF+YAARfnAAEX6AABF+oAARfrAAEX+AABF/kAARf6AAEX/AABGDsAARg9AAEYPwABGEEAARhEAAEYRQABGEYAARhHAAEYSAABGEoAARhMAAEYTQABGE4AARhQAAEYUQABGJAAARiSAAEYlAABGJYAARiZAAEYmgABGJsAARicAAEYnQABGJ8AARihAAEYogABGKMAARilAAEYpgABGOUAARjnAAEY6QABGOsAARjuAAEY7wABGPAAARjxAAEY8gABGPQAARj2AAEY9wABGPgAARj6AAEY+wABGToAARk8AAEZPgABGUAAARlDAAEZRAABGUUAARlGAAEZRwABGUkAARlLAAEZTAABGU0AARlPAAEZUAABGY8AARmRAAEZkwABGZUAARmYAAEZmQABGZoAARmbAAEZnAABGZ4AARmgAAEZoQABGaIAARmkAAEZpQABGcoAARnuAAEaFQABGjkAARo8AAEaPgABGkAAARpCAAEaRAABGkYAARpHAAEaSgABGlcAARpmAAEaaAABGmoAARpsAAEabgABGnAAARpyAAEadAABGoMAARqGAAEaiQABGowAARqPAAEakgABGpUAARqYAAEamgABGtkAARrbAAEa3QABGt8AARriAAEa4wABGuQAARrlAAEa5gABGugAARrqAAEa6wABGuwAARruAAEa7wABGy4AARswAAEbMgABGzQAARs3AAEbOAABGzkAARs6AAEbOwABGz0AARs/AAEbQAABG0EAARtDAAEbRAABG4MAARuFAAEbhwABG4kAARuMAAEbjQABG44AARuPAAEbkAABG5IAARuUAAEblQABG5YAARuYAAEbmQABG9gAARvaAAEb3QABG98AARviAAEb4wABG+QAARvlAAEb5gABG+gAARvqAAEb6wABG+wAARvuAAEb7wABHC4AARwwAAEcMgABHDQAARw3AAEcOAABHDkAARw6AAEcOwABHD0AARw/AAEcQAABHEEAARxDAAEcRAABHIMAARyFAAEchwABHIkAARyMAAEcjQABHI4AARyPAAEckAABHJIAARyUAAEclQABHJYAARyYAAEcmQABHNgAARzaAAEc3AABHN4AARzhAAEc4gABHOMAARzkAAEc5QABHOcAARzpAAEc6gABHOsAARztAAEc7gABHTkAAR1cAAEdfAABHZwAAR2eAAEdoAABHaIAAR2kAAEdpgABHacAAR2oAAEdqwABHawAAR2uAAEdrwABHbEAAR2zAAEdtAABHbUAAR24AAEduQABHb4AAR3LAAEd0AABHdIAAR3UAAEd2QABHdwAAR3fAAEd4QABHgYAAR4qAAEeUQABHnUAAR54AAEeegABHnwAAR5+AAEegAABHoIAAR6DAAEehgABHpMAAR6kAAEepgABHqgAAR6qAAEerAABHq4AAR6wAAEesgABHrQAAR7FAAEeyAABHssAAR7OAAEe0QABHtQAAR7XAAEe2gABHt0AAR7fAAEfHgABHyAAAR8iAAEfJAABHycAAR8oAAEfKQABHyoAAR8rAAEfLQABHy8AAR8wAAEfMQABHzMAAR80AAEfcwABH3UAAR93AAEfeQABH3wAAR99AAEffgABH38AAR+AAAEfggABH4QAAR+FAAEfhgABH4gAAR+JAAEfyAABH8oAAR/NAAEfzwABH9IAAR/TAAEf1AABH9UAAR/WAAEf2AABH9oAAR/bAAEf3AABH94AAR/fAAEf7AABH+8AAR/yAAEf9QABH/gAAR/6AAEgFAABIFMAASBVAAEgVwABIFkAASBcAAEgXQABIF4AASBfAAEgYAABIGIAASBkAAEgZQABIGYAASBoAAEgaQABIKgAASCqAAEgrAABIK4AASCxAAEgsgABILMAASC0AAEgtQABILcAASC5AAEgugABILsAASC9AAEgvgABIP0AASD/AAEhAQABIQMAASEGAAEhBwABIQgAASEJAAEhCgABIQwAASEOAAEhDwABIRAAASESAAEhEwABIVIAASFUAAEhVgABIVgAASFbAAEhXAABIV0AASFeAAEhXwABIWEAASFjAAEhZAABIWUAASFnAAEhaAABIacAASGpAAEhqwABIa0AASGwAAEhsQABIbIAASGzAAEhtAABIbYAASG4AAEhuQABIboAASG8AAEhvQABIeIAASIGAAEiLQABIlEAASJUAAEiVgABIlgAASJaAAEiXAABIl4AASJfAAEiYgABIm8AASJ+AAEigAABIoIAASKEAAEihgABIogAASKKAAEijAABIpsAASKeAAEioQABIqQAASKnAAEiqgABIq0AASKwAAEisgABIvEAASLzAAEi9QABIvcAASL6AAEi+wABIvwAASL9AAEi/gABIwAAASMCAAEjAwABIwQAASMGAAEjBwABI0YAASNIAAEjSgABI0wAASNPAAEjUAABI1EAASNSAAEjUwABI1UAASNXAAEjWAABI1kAASNbAAEjXAABI5sAASOdAAEjnwABI6EAASOkAAEjpQABI6YAASOnAAEjqAABI6oAASOsAAEjrQABI64AASOwAAEjsQABI/AAASPyAAEj9QABI/cAASP6AAEj+wABI/wAASP9AAEj/gABJAAAASQCAAEkAwABJAQAASQGAAEkBwABJEYAASRIAAEkSgABJEwAASRPAAEkUAABJFEAASRSAAEkUwABJFUAASRXAAEkWAABJFkAASRbAAEkXAABJJsAASSdAAEknwABJKEAASSkAAEkpQABJKYAASSnAAEkqAABJKoAASSsAAEkrQABJK4AASSwAAEksQABJPAAASTyAAEk9AABJPYAAST5AAEk+gABJPsAAST8AAEk/QABJP8AASUBAAElAgABJQMAASUFAAElBgABJVEAASV0AAEllAABJbQAASW2AAEluAABJboAASW8AAElvgABJb8AASXAAAElwwABJcQAASXGAAElxwABJckAASXLAAElzAABJc0AASXQAAEl0QABJdYAASXjAAEl6AABJeoAASXsAAEl8QABJfQAASX3AAEl+QABJh4AASZCAAEmaQABJo0AASaQAAEmkgABJpQAASaWAAEmmAABJpoAASabAAEmngABJqsAASa8AAEmvgABJsAAASbCAAEmxAABJsYAASbIAAEmygABJswAASbdAAEm4AABJuMAASbmAAEm6QABJuwAASbvAAEm8gABJvUAASb3AAEnNgABJzgAASc6AAEnPAABJz8AASdAAAEnQQABJ0IAASdDAAEnRQABJ0cAASdIAAEnSQABJ0sAASdMAAEniwABJ40AASePAAEnkQABJ5QAASeVAAEnlgABJ5cAASeYAAEnmgABJ5wAASedAAEnngABJ6AAASehAAEn4AABJ+IAASflAAEn5wABJ+oAASfrAAEn7AABJ+0AASfuAAEn8AABJ/IAASfzAAEn9AABJ/YAASf3AAEoBAABKAcAASgKAAEoDQABKBAAASgSAAEoLQABKDsAASh6AAEofAABKH4AASiAAAEogwABKIQAASiFAAEohgABKIcAASiJAAEoiwABKIwAASiNAAEojwABKJAAASjPAAEo0QABKNMAASjVAAEo2AABKNkAASjaAAEo2wABKNwAASjeAAEo4AABKOEAASjiAAEo5AABKOUAASkkAAEpJgABKSgAASkqAAEpLQABKS4AASkvAAEpMAABKTEAASkzAAEpNQABKTYAASk3AAEpOQABKToAASl5AAEpewABKX0AASl/AAEpggABKYMAASmEAAEphQABKYYAASmIAAEpigABKYsAASmMAAEpjgABKY8AASnOAAEp0AABKdIAASnUAAEp1wABKdgAASnZAAEp2gABKdsAASndAAEp3wABKeAAASnhAAEp4wABKeQAASoJAAEqLQABKlQAASp4AAEqewABKn0AASp/AAEqgQABKoMAASqFAAEqhgABKokAASqWAAEqpQABKqcAASqpAAEqqwABKq0AASqvAAEqsQABKrMAASrCAAEqxQABKsgAASrLAAEqzgABKtEAASrUAAEq1wABKtkAASsYAAErGgABKx0AASsfAAErIgABKyMAASskAAErJQABKyYAASsoAAErKgABKysAASssAAErLgABKy8AASsxAAErcAABK3IAASt0AAErdgABK3kAASt6AAErewABK3wAASt9AAErfwABK4EAASuCAAErgwABK4UAASuGAAErxQABK8cAASvJAAErywABK84AASvPAAEr0AABK9EAASvSAAEr1AABK9YAASvXAAEr2AABK9oAASvbAAEsGgABLBwAASweAAEsIAABLCMAASwkAAEsJQABLCYAASwnAAEsKQABLCsAASwsAAEsLQABLC8AASwwAAEsbwABLHEAASxzAAEsdQABLHgAASx5AAEsegABLHsAASx8AAEsfgABLIAAASyBAAEsggABLIQAASyFAAEsxAABLMYAASzIAAEsygABLM0AASzOAAEszwABLNAAASzRAAEs0wABLNUAASzWAAEs1wABLNkAASzaAAEtGQABLRsAAS0dAAEtHwABLSIAAS0jAAEtJAABLSUAAS0mAAEtKAABLSoAAS0rAAEtLAABLS4AAS0vAAEtegABLZ0AAS29AAEt3QABLd8AAS3hAAEt4wABLeUAAS3nAAEt6AABLekAAS3sAAEt7QABLe8AAS3wAAEt8gABLfQAAS31AAEt9gABLfkAAS36AAEt/wABLgwAAS4RAAEuEwABLhUAAS4aAAEuHQABLiAAAS4iAAEuRwABLmsAAS6SAAEutgABLrkAAS67AAEuvQABLr8AAS7BAAEuwwABLsQAAS7HAAEu1AABLuUAAS7nAAEu6QABLusAAS7tAAEu7wABLvEAAS7zAAEu9QABLwYAAS8JAAEvDAABLw8AAS8SAAEvFQABLxgAAS8bAAEvHgABLyAAAS9fAAEvYQABL2MAAS9lAAEvaAABL2kAAS9qAAEvawABL2wAAS9uAAEvcAABL3EAAS9yAAEvdAABL3UAAS+0AAEvtgABL7gAAS+6AAEvvQABL74AAS+/AAEvwAABL8EAAS/DAAEvxQABL8YAAS/HAAEvyQABL8oAATAJAAEwCwABMA4AATAQAAEwEwABMBQAATAVAAEwFgABMBcAATAZAAEwGwABMBwAATAdAAEwHwABMCAAATAtAAEwLgABMC8AATAxAAEwcAABMHIAATB0AAEwdgABMHkAATB6AAEwewABMHwAATB9AAEwfwABMIEAATCCAAEwgwABMIUAATCGAAEwxQABMMcAATDJAAEwywABMM4AATDPAAEw0AABMNEAATDSAAEw1AABMNYAATDXAAEw2AABMNoAATDbAAExGgABMRwAATEeAAExIAABMSMAATEkAAExJQABMSYAATEnAAExKQABMSsAATEsAAExLQABMS8AATEwAAExbwABMXEAATFzAAExdQABMXgAATF5AAExegABMXsAATF8AAExfgABMYAAATGBAAExggABMYQAATGFAAExxAABMcYAATHIAAExygABMc0AATHOAAExzwABMdAAATHRAAEx0wABMdUAATHWAAEx1wABMdkAATHaAAEx/wABMiMAATJKAAEybgABMnEAATJzAAEydQABMncAATJ5AAEyewABMnwAATJ/AAEyjAABMpsAATKdAAEynwABMqEAATKjAAEypQABMqcAATKpAAEyuAABMrsAATK+AAEywQABMsQAATLHAAEyygABMs0AATLPAAEzDgABMxAAATMSAAEzFAABMxcAATMYAAEzGQABMxoAATMbAAEzHQABMx8AATMgAAEzIQABMyMAATMkAAEzYwABM2UAATNnAAEzaQABM2wAATNtAAEzbgABM28AATNwAAEzcgABM3QAATN1AAEzdgABM3gAATN5AAEzuAABM7oAATO8AAEzvgABM8EAATPCAAEzwwABM8QAATPFAAEzxwABM8kAATPKAAEzywABM80AATPOAAE0DQABNA8AATQSAAE0FAABNBcAATQYAAE0GQABNBoAATQbAAE0HQABNB8AATQgAAE0IQABNCMAATQkAAE0YwABNGUAATRnAAE0aQABNGwAATRtAAE0bgABNG8AATRwAAE0cgABNHQAATR1AAE0dgABNHgAATR5AAE0uAABNLoAATS8AAE0vgABNMEAATTCAAE0wwABNMQAATTFAAE0xwABNMkAATTKAAE0ywABNM0AATTOAAE1DQABNQ8AATURAAE1EwABNRYAATUXAAE1GAABNRkAATUaAAE1HAABNR4AATUfAAE1IAABNSIAATUjAAE1LAABNS0AATUvAAE1cgABNZYAATW6AAE13QABNgQAATYkAAE2SwABNnIAATaSAAE2tgABNtoAATbcAAE23wABNuEAATbjAAE25QABNugAATbqAAE27AABNu4AATbwAAE28gABNvQAATb3AAE2+gABNvsAATcAAAE3DQABNxAAATcSAAE3FQABNxgAATcaAAE3PwABN2MAATeKAAE3rgABN7EAATezAAE3tQABN7cAATe5AAE3uwABN7wAATe/AAE3zAABN98AATfhAAE34wABN+UAATfnAAE36QABN+sAATftAAE37wABN/EAATgEAAE4BwABOAoAATgNAAE4EAABOBMAATgWAAE4GQABOBwAATgfAAE4IQABOGAAAThiAAE4ZQABOGcAAThqAAE4awABOGwAAThtAAE4bgABOHAAAThyAAE4cwABOHQAATh2AAE4dwABOIAAATiBAAE4gwABOMIAATjEAAE4xgABOMgAATjLAAE4zAABOM0AATjOAAE4zwABONEAATjTAAE41AABONUAATjXAAE42AABORcAATkZAAE5HAABOR4AATkhAAE5IgABOSMAATkkAAE5JQABOScAATkpAAE5KgABOSsAATktAAE5LgABOTcAATk6AAE5PQABOT8AATlIAAE5TQABOU8AATlRAAE5UwABOZIAATmUAAE5lgABOZgAATmbAAE5nAABOZ0AATmeAAE5nwABOaEAATmjAAE5pAABOaUAATmnAAE5qAABOecAATnpAAE57AABOe4AATnxAAE58gABOfMAATn0AAE59QABOfcAATn5AAE5+gABOfsAATn9AAE5/gABOgcAAToIAAE6CgABOkkAATpLAAE6TQABOk8AATpSAAE6UwABOlQAATpVAAE6VgABOlgAATpaAAE6WwABOlwAATpeAAE6XwABOp4AATqgAAE6owABOqUAATqoAAE6qQABOqoAATqrAAE6rAABOq4AATqwAAE6sQABOrIAATq0AAE6tQABOsIAATrDAAE6xAABOsYAATsFAAE7BwABOwkAATsLAAE7DgABOw8AATsQAAE7EQABOxIAATsUAAE7FgABOxcAATsYAAE7GgABOxsAATtaAAE7XAABO18AATthAAE7ZAABO2UAATtmAAE7ZwABO2gAATtqAAE7bAABO20AATtuAAE7cAABO3EAATuAAAE7jQABO5oAATudAAE7nwABO6EAATujAAE7pQABO6gAATu1AAE7uAABO7sAATu+AAE7wQABO8QAATvHAAE7yQABO9QAATvuAAE8OQABPFwAATx8AAE8nAABPJ4AATygAAE8ogABPKQAATynAAE8qAABPKkAATysAAE8rQABPK8AATywAAE8sgABPLUAATy2AAE8twABPLoAATy7AAE8wAABPM0AATzSAAE81AABPNYAATzbAAE83gABPOEAATzjAAE9CAABPSwAAT1TAAE9dwABPXoAAT18AAE9fgABPYAAAT2CAAE9hAABPYUAAT2IAAE9lQABPaYAAT2oAAE9qgABPawAAT2uAAE9sAABPbIAAT20AAE9tgABPccAAT3KAAE9zQABPdAAAT3TAAE91gABPdkAAT3cAAE93wABPeEAAT4gAAE+IgABPiQAAT4mAAE+KQABPioAAT4rAAE+LAABPi0AAT4vAAE+MQABPjIAAT4zAAE+NQABPjYAAT51AAE+dwABPnkAAT57AAE+fgABPn8AAT6AAAE+gQABPoIAAT6EAAE+hgABPocAAT6IAAE+igABPosAAT7KAAE+zAABPs8AAT7RAAE+1AABPtUAAT7WAAE+1wABPtgAAT7aAAE+3AABPt0AAT7eAAE+4AABPuEAAT7uAAE+7wABPvAAAT7yAAE/MQABPzMAAT81AAE/NwABPzoAAT87AAE/PAABPz0AAT8+AAE/QAABP0IAAT9DAAE/RAABP0YAAT9HAAE/hgABP4gAAT+KAAE/jAABP48AAT+QAAE/kQABP5IAAT+TAAE/lQABP5cAAT+YAAE/mQABP5sAAT+cAAE/2wABP90AAT/fAAE/4QABP+QAAT/lAAE/5gABP+cAAT/oAAE/6gABP+wAAT/tAAE/7gABP/AAAT/xAAFAMAABQDIAAUA0AAFANgABQDkAAUA6AAFAOwABQDwAAUA9AAFAPwABQEEAAUBCAAFAQwABQEUAAUBGAAFAhQABQIcAAUCJAAFAiwABQI4AAUCPAAFAkAABQJEAAUCSAAFAlAABQJYAAUCXAAFAmAABQJoAAUCbAAFAwAABQOQAAUELAAFBLwABQTIAAUE0AAFBNgABQTgAAUE6AAFBPAABQT0AAUFAAAFBTQABQVwAAUFeAAFBYAABQWIAAUFkAAFBZgABQWgAAUFqAAFBeQABQXwAAUF/AAF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SQQABUkMAAVJFAAFSRgABUkcAAVJJAAFSSgABUokAAVKLAAFSjQABUo8AAVKSAAFSkwABUpQAAVKVAAFSlgABUpgAAVKaAAFSmwABUpwAAVKeAAFSnwABUt4AAVLgAAFS4wABUuUAAVLoAAFS6QABUuoAAVLrAAFS7AABUu4AAVLwAAFS8QABUvIAAVL0AAFS9QABUzQAAVM2AAFTOAABUzoAAVM9AAFTPgABUz8AAVNAAAFTQQABU0MAAVNFAAFTRgABU0cAAVNJAAFTSgABU4kAAVOLAAFTjQABU48AAVOSAAFTkwABU5QAAVOVAAFTlgABU5gAAVOaAAFTmwABU5wAAVOeAAFTnwABU94AAVPgAAFT4gABU+QAAVPnAAFT6AABU+kAAVPqAAFT6wABU+0AAVPvAAFT8AABU/EAAVPzAAFT9AABVD8AAVRiAAFUggABVKIAAVSkAAFUpgABVKgAAVSqAAFUrQABVK4AAVSvAAFUsgABVLMAAVS1AAFUtgABVLgAAVS6AAFUuwABVLwAAVS/AAFUwAABVMUAAVTSAAFU1wABVNkAAVTbAAFU4AABVOMAAVTmAAFU6AABVQ0AAVUxAAFVWAABVXwAAVV/AAFVgQABVYMAAVWFAAFVhwABVYkAAVWKAAFVjQABVZoAAVWrAAFVrQABVa8AAVWxAAFVswABVbUAAVW3AAFVuQABVbsAAVXMAAFVzwABVdIAAVXVAAFV2AABVdsAAVXeAAFV4QABVeQAAVXmAAFWJQABVicAAVYpAAFWKwABVi4AAVYvAAFWMAABVjEAAVYyAAFWNAABVjYAAVY3AAFWOAABVjoAAVY7AAFWegABVnwAAVZ+AAFWgAABVoMAAVaEAAFWhQABVoYAAVaHAAFWiQABVosAAVaMAAFWjQABVo8AAVaQAAFWzwABVtEAAVbUAAFW1gABVtkAAVbaAAFW2wABVtwAAVbdAAFW3wABVuEAAVbiAAFW4wABVuUAAVbmAAFW8wABVvQAAVb1AAFW9wABVzYAAVc4AAFXOgABVzwAAVc/AAFXQAABV0EAAVdCAAFXQwABV0UAAVdHAAFXSAABV0kAAVdLAAFXTAABV4sAAVeNAAFXjwABV5EAAVeUAAFXlQABV5YAAVeXAAFXmAABV5oAAVecAAFXnQABV54AAVegAAFXoQABV+AAAVfiAAFX5AABV+YAAVfpAAFX6gABV+sAAVfsAAFX7QABV+8AAVfxAAFX8gABV/MAAVf1AAFX9gABWDUAAVg3AAFYOQABWDsAAVg+AAFYPwABWEAAAVhBAAFYQgABWEQAAVhGAAFYRwABWEgAAVhKAAFYSwABWIoAAViMAAFYjgABWJAAAViTAAFYlAABWJUAAViWAAFYlwABWJkAAVibAAFYnAABWJ0AAVifAAFYoAABWMUAAVjpAAFZEAABWTQAAVk3AAFZOQABWTsAAVk9AAFZPwABWUEAAVlCAAFZRQABWVIAAVlhAAFZYwABWWUAAVlnAAFZaQABWWsAAVltAAFZbwABWX4AAVmBAAFZhAABWYcAAVmKAAFZjQABWZAAAVmTAAFZlQABWdQAAVnWAAFZ2AABWdoAAVndAAFZ3gABWd8AAVngAAFZ4QABWeMAAVnlAAFZ5gABWecAAVnpAAFZ6gABWikAAVorAAFaLQABWi8AAVoyAAFaMwABWjQAAVo1AAFaNgABWjgAAVo6AAFaOwABWjwAAVo+AAFaPwABWn4AAVqAAAFaggABWoQAAVqHAAFaiAABWokAAVqKAAFaiwABWo0AAVqPAAFakAABWpEAAVqTAAFalAABWtMAAVrVAAFa2AABWtoAAVrdAAFa3gABWt8AAVrgAAFa4QABWuMAAVrlAAFa5gABWucAAVrpAAFa6gABWykAAVsrAAFbLQABWy8AAVsyAAFbMwABWzQAAVs1AAFbNgABWzgAAVs6AAFbOwABWzwAAVs+AAFbPwABW34AAVuAAAFbggABW4QAAVuHAAFbiAABW4kAAVuKAAFbiwABW40AAVuPAAFbkAABW5EAAVuTAAFblAABW9MAAVvVAAFb1wABW9kAAVvcAAFb3QABW94AAVvfAAFb4AABW+IAAVvkAAFb5QABW+YAAVvoAAFb6QABXDQAAVxXAAFcdwABXJcAAVyZAAFcmwABXJ0AAVyfAAFcogABXKMAAVykAAFcpwABXKgAAVyqAAFcqwABXK0AAVyvAAFcsAABXLEAAVy0AAFctQABXLoAAVzHAAFczAABXM4AAVzQAAFc1QABXNgAAVzbAAFc3QABXQIAAV0mAAFdTQABXXEAAV10AAFddgABXXgAAV16AAFdfAABXX4AAV1/AAFdggABXY8AAV2gAAFdogABXaQAAV2mAAFdqAABXaoAAV2sAAFdrgABXbAAAV3BAAFdxAABXccAAV3KAAFdzQABXdAAAV3TAAFd1gABXdkAAV3bAAFeGgABXhwAAV4eAAFeIAABXiMAAV4kAAFeJQABXiYAAV4nAAFeKQABXisAAV4sAAFeLQABXi8AAV4wAAFebwABXnEAAV5zAAFedQABXngAAV55AAFeegABXnsAAV58AAFefgABXoAAAV6BAAFeggABXoQAAV6FAAFexAABXsYAAV7JAAFeywABXs4AAV7PAAFe0AABXtEAAV7SAAFe1AABXtYAAV7XAAFe2AABXtoAAV7bAAFe6AABXukAAV7qAAFe7AABXysAAV8tAAFfLwABXzEAAV80AAFfNQABXzYAAV83AAFfOAABXzoAAV88AAFfPQABXz4AAV9AAAFfQQABX4AAAV+CAAFfhAABX4YAAV+JAAFfigABX4sAAV+MAAFfjQABX48AAV+RAAFfkgABX5MAAV+VAAFflgABX9UAAV/XAAFf2QABX9sAAV/eAAFf3wABX+AAAV/hAAFf4gABX+QAAV/mAAFf5wABX+gAAV/qAAFf6wABYCoAAWAsAAFgLgABYDAAAWAzAAFgNAABYDUAAWA2AAFgNwABYDkAAWA7AAFgPAABYD0AAWA/AAFgQAABYH8AAWCBAAFggwABYIUAAWCIAAFgiQABYIoAAWCLAAFgjAABYI4AAWCQAAFgkQABYJIAAWCUAAFglQABYLoAAWDeAAFhBQABYSkAAWEsAAFhLgABYTAAAWEyAAFhNAABYTYAAWE3AAFhOgABYUcAAWFWAAFhWAABYVoAAWFcAAFhXgABYWAAAWFiAAFhZAABYXMAAWF2AAFheQABYXwAAWF/AAFhggABYYUAAWGIAAFhigABYckAAWHLAAFhzQABYc8AAWHSAAFh0wABYdQAAWHVAAFh1gABYdgAAWHaAAFh2wABYdwAAWHeAAFh3wABYh4AAWIgAAFiIgABYiQAAWInAAFiKAABYikAAWIqAAFiKwABYi0AAWIvAAFiMAABYjEAAWIzAAFiNAABYnMAAWJ1AAFidwABYnkAAWJ8AAFifQABYn4AAWJ/AAFigAABYoIAAWKEAAFihQABYoYAAWKIAAFiiQABYsgAAWLKAAFizQABYs8AAWLSAAFi0wABYtQAAWLVAAFi1gABYtgAAWLaAAFi2wABYtwAAWLeAAFi3wABYx4AAWMgAAFjIgABYyQAAWMnAAFjKAABYykAAWMqAAFjKwABYy0AAWMvAAFjMAABYzEAAWMzAAFjNAABY3MAAWN1AAFjdwABY3kAAWN8AAFjfQABY34AAWN/AAFjgAABY4IAAWOEAAFjhQABY4YAAWOIAAFjiQABY8gAAWPKAAFjzAABY84AAWPRAAFj0gABY9MAAWPUAAFj1QABY9cAAWPZAAFj2gABY9sAAWPdAAFj3gABZCkAAWRMAAFkbAABZIwAAWSOAAFkkAABZJIAAWSUAAFklwABZJgAAWSZAAFknAABZJ0AAWSfAAFkoAABZKIAAWSlAAFkpgABZKcAAWSqAAFkqwABZLAAAWS9AAFkwgABZMQAAWTGAAFkywABZM4AAWTRAAFk0wABZPgAAWUcAAFlQwABZWcAAWVqAAFlbAABZW4AAWVwAAFlcgABZXQAAWV1AAFleAABZYUAAWWWAAFlmAABZZoAAWWcAAFlngABZaAAAWWiAAFlpAABZaYAAWW3AAFlugABZb0AAWXAAAFlwwABZcYAAWXJAAFlzAABZc8AAWXRAAFmEAABZhIAAWYUAAFmFgABZhkAAWYaAAFmGwABZhwAAWYdAAFmHwABZiEAAWYiAAFmIwABZiUAAWYmAAFmZQABZmcAAWZpAAFmawABZm4AAWZvAAFmcAABZnEAAWZyAAFmdAABZnYAAWZ3AAFmeAABZnoAAWZ7AAFmugABZrwAAWa/AAFmwQABZsQAAWbFAAFmxgABZscAAWbIAAFmygABZswAAWbNAAFmzgABZtAAAWbRAAFm3gABZuEAAWbkAAFm5wABZuoAAWbsAAFnBwABZyYAAWdlAAFnZwABZ2kAAWdrAAFnbgABZ28AAWdwAAFncQABZ3IAAWd0AAFndgABZ3cAAWd4AAFnegABZ3sAAWe6AAFnvAABZ74AAWfAAAFnwwABZ8QAAWfFAAFnxgABZ8cAAWfJAAFnywABZ8wAAWfNAAFnzwABZ9AAAWgPAAFoEQABaBMAAWgVAAFoGAABaBkAAWgaAAFoGwABaBwAAWgeAAFoIAABaCEAAWgiAAFoJAABaCUAAWhkAAFoZgABaGgAAWhqAAFobQABaG4AAWhvAAFocAABaHEAAWhzAAFodQABaHYAAWh3AAFoeQABaHoAAWi5AAFouwABaL0AAWi/AAFowgABaMMAAWjEAAFoxQABaMYAAWjIAAFoygABaMsAAWjMAAFozgABaM8AAWj0AAFpGAABaT8AAWljAAFpZgABaWgAAWlqAAFpbAABaW4AAWlwAAFpcQABaXQAAWmBAAFpkAABaZIAAWmUAAFplgABaZgAAWmaAAFpnAABaZ4AAWmtAAFpsAABabMAAWm2AAFpuQABabwAAWm/AAFpwgABacQAAWoDAAFqBQABagcAAWoJAAFqDAABag0AAWoOAAFqDwABahAAAWoSAAFqFAABahUAAWoWAAFqGAABahkAAWpYAAFqWgABalwAAWpeAAFqYQABamIAAWpjAAFqZAABamUAAWpnAAFqaQABamoAAWprAAFqbQABam4AAWqtAAFqrwABarEAAWqzAAFqtgABarcAAWq4AAFquQABaroAAWq8AAFqvgABar8AAWrAAAFqwgABasMAAWsCAAFrBAABawYAAWsIAAFrCwABawwAAWsNAAFrDgABaw8AAWsRAAFrEwABaxQAAWsVAAFrFwABaxgAAWtXAAFrWQABa1sAAWtdAAFrYAABa2EAAWtiAAFrYwABa2QAAWtmAAFraAABa2kAAWtqAAFrbAABa20AAWusAAFrrgABa7AAAWuyAAFrtQABa7YAAWu3AAFruAABa7kAAWu7AAFrvQABa74AAWu/AAFrwQABa8IAAWwBAAFsAwABbAUAAWwHAAFsCgABbAsAAWwMAAFsDQABbA4AAWwQAAFsEgABbBMAAWwUAAFsFgABbBcAAWwgAAFsIQABbCMAAWwwAAFsMQABbDIAAWw0AAFsQQABbEIAAWxDAAFsRQABbFIAAWxTAAFsVAABbFYAAWxfAAFsbgABbHsAAWyKAAFsnAABbLAAAWzHAAFs2QABbOIAAWzjAAFs5QABbPIAAWzzAAFs9AABbPYAAWz6AAFtAwABbQ0AAW0UAAFtHAABbS4AAW0zAAFtOAAAAAAAAAQCAAAAAAAANn8AAAAAAAAAAAAAAAAAAW06 + + Delta/Database/Model/Delta.xcdatamodeld/Delta 2.xcdatamodel + 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EQnVja2V0Rm9yQ2xhc3Nlc3N0b3JhZ2VVX25hbWVfEB9YREJ1Y2tldEZvckludGVyZmFjZXN3YXNFbmNvZGVkXxAeWERCdWNrZXRGb3JEYXRhVHlwZXN3YXNFbmNvZGVkXxAQX3VuaXF1ZUVsZW1lbnRJRIAEgQRmgQRkgAGABIAAgQRlgQRnEACABYADgASABIAAUFNZRVPTADYANwAKADgAPwBGV05TLmtleXNaTlMub2JqZWN0c6YAOQA6ADsAPAA9AD6ABoAHgAiACYAKgAumAEAAQQBCAEMARABFgAyAtoDygQEggQO+gQKDgC5fEBpHYW1lQ29udHJvbGxlcklucHV0TWFwcGluZ1lTYXZlU3RhdGVUR2FtZVVDaGVhdF5Db250cm9sbGVyU2tpbl5HYW1lQ29sbGVjdGlvbt8QEABOAE8AUABRAB0AUgBTAB8AVABVAAoAIQBWAFcAJABYAFkAWgAlACUAEABeAF8ALQAlAFkAYgA5AFkAZQBmAGdfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2VfECBYREJ1Y2tldEZvclN0ZXJlb3R5cGVzd2FzRW5jb2RlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNzdG9yYWdlXxAkWERCdWNrZXRGb3JHZW5lcmFsaXphdGlvbnNkdXBsaWNhdGVzXxAkWERCdWNrZXRGb3JHZW5lcmFsaXphdGlvbnN3YXNFbmNvZGVkXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc29yZGVyZWRfECFYREJ1Y2tldEZvckdlbmVyYWxpemF0aW9uc29yZGVyZWRfECFYREJ1Y2tldEZvckdlbmVyYWxpemF0aW9uc3N0b3JhZ2VbX2lzQWJzdHJhY3SADoA2gASABIACgA+As4AEgA6AtYAGgA6AtIANCBJTvESHV29yZGVyZWTTADYANwAKAGsAbQBGoQBsgBChAG6AEYAuXlhEX1BTdGVyZW90eXBl2QAdACEAcgAKACQAcwAfAFgAdABAAGwAWQB4ABMAJQAtAGcAfF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZYAMgBCADoA1gACABAiAEtMANgA3AAoAfgCIAEapAH8AgACBAIIAgwCEAIUAhgCHgBOAFIAVgBaAF4AYgBmAGoAbqQCJAIoAiwCMAI0AjgCPAJAAkYAcgCCAIYAngCiAKoAsgC+AM4AuXxATWERQTUNvbXBvdW5kSW5kZXhlc18QEFhEX1BTS19lbGVtZW50SURfEBlYRFBNVW5pcXVlbmVzc0NvbnN0cmFpbnRzXxAaWERfUFNLX3ZlcnNpb25IYXNoTW9kaWZpZXJfEBlYRF9QU0tfZmV0Y2hSZXF1ZXN0c0FycmF5XxARWERfUFNLX2lzQWJzdHJhY3RfEA9YRF9QU0tfdXNlckluZm9fEBNYRF9QU0tfY2xhc3NNYXBwaW5nXxAWWERfUFNLX2VudGl0eUNsYXNzTmFtZd8QDwCdAJ4AnwAdAKAAoQCiAB8AowAKACEApAClACQApgATAKgAEwBuAGcAZwBnAC0AZwCvAH8AZwBnABMAZ1VfdHlwZVhfZGVmYXVsdFxfYXNzb2NpYXRpb25bX2lzUmVhZE9ubHlZX2lzU3RhdGljWV9pc1VuaXF1ZVpfaXNEZXJpdmVkWl9pc09yZGVyZWRcX2lzQ29tcG9zaXRlV19pc0xlYWaAAIAdgACAEQgICAiAH4ATCAiAAAjSADcACgC2ALeggB7SALkAugC7ALxaJGNsYXNzbmFtZVgkY2xhc3Nlc15OU011dGFibGVBcnJheaMAuwC9AL5XTlNBcnJheVhOU09iamVjdNIAuQC6AMAAwV8QEFhEVU1MUHJvcGVydHlJbXCkAMIAwwDEAL5fEBBYRFVNTFByb3BlcnR5SW1wXxAUWERVTUxOYW1lZEVsZW1lbnRJbXBfEA9YRFVNTEVsZW1lbnRJbXDfEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwATABMAbgBnAGcAZwAtAGcArwCAAGcAZwATAGeAAIAAgACAEQgICAiAH4AUCAiAAAjfEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwDWABMAbgBnAGcAZwAtAGcArwCBAGcAZwATAGeAAIAigACAEQgICAiAH4AVCAiAAAjSADcACgDkALehAOWAI4Ae0gA3AAoA6AC3owDpAOoA64AkgCWAJoAeXxAXZ2FtZUNvbnRyb2xsZXJJbnB1dFR5cGVYZ2FtZVR5cGVbcGxheWVySW5kZXjfEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwATABMAbgBnAGcAZwAtAGcArwCCAGcAZwATAGeAAIAAgACAEQgICAiAH4AWCAiAAAjfEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwEBABMAbgBnAGcAZwAtAGcArwCDAGcAZwATAGeAAIApgACAEQgICAiAH4AXCAiAAAjSADcACgEPALeggB7fEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwETABMAbgBnAGcAZwAtAGcArwCEAGcAZwATAGeAAIArgACAEQgICAiAH4AYCAiAAAgI3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMBIwATAG4AZwBnAGcALQBnAK8AhQBnAGcAEwBngACALYAAgBEICAgIgB+AGQgIgAAI0wA2ADcACgExATIARqCggC7SALkAugE1ATZfEBNOU011dGFibGVEaWN0aW9uYXJ5owE1ATcAvlxOU0RpY3Rpb25hcnnfEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwE6ABMAbgBnAGcAZwAtAGcArwCGAGcAZwATAGeAAIAwgACAEQgICAiAH4AaCAiAAAjWACEACgAkAFgAHQAfAUgBSQATAGcAEwAtgDGAMoAACIAAXxAUWERHZW5lcmljUmVjb3JkQ2xhc3PSALkAugFPAVBdWERVTUxDbGFzc0ltcKYBUQFSAVMBVAFVAL5dWERVTUxDbGFzc0ltcF8QElhEVU1MQ2xhc3NpZmllckltcF8QEVhEVU1MTmFtZXNwYWNlSW1wXxAUWERVTUxOYW1lZEVsZW1lbnRJbXBfEA9YRFVNTEVsZW1lbnRJbXDfEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwFYABMAbgBnAGcAZwAtAGcArwCHAGcAZwATAGeAAIA0gACAEQgICAiAH4AbCAiAAAhfEBpHYW1lQ29udHJvbGxlcklucHV0TWFwcGluZ9IAuQC6AWcBaF8QElhEVU1MU3RlcmVvdHlwZUltcKcBaQFqAWsBbAFtAW4Avl8QElhEVU1MU3RlcmVvdHlwZUltcF1YRFVNTENsYXNzSW1wXxASWERVTUxDbGFzc2lmaWVySW1wXxARWERVTUxOYW1lc3BhY2VJbXBfEBRYRFVNTE5hbWVkRWxlbWVudEltcF8QD1hEVU1MRWxlbWVudEltcNMANgA3AAoBcAF1AEakAOoBcgFzAXSAJYA3gDiAOaQBdgF3AXgBeYA6gGaAgICagC5fEBdnYW1lQ29udHJvbGxlcklucHV0VHlwZV8QFWRlbHRhQ29yZUlucHV0TWFwcGluZ1twbGF5ZXJJbmRleN8QEgCdAJ4AnwF/AB0AoQCiAYAAHwCgAYEAowAKACEApAClACQApgATABMAEwAlAEAAZwBnAYkALQBnAFkAZwGNAOoAZwBnAZEAZ18QIFhEQnVja2V0Rm9yU3RlcmVvdHlwZXN3YXNFbmNvZGVkXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc3N0b3JhZ2VfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzb3JkZXJlZIAAgACAAIAEgAwICIA8CIAOCIBlgCUICIA7CBLd6BnQ0wA2ADcACgGVAZgARqIBlgGXgD2APqIBmQGagD+AVIAuXxASWERfUFByb3BTdGVyZW90eXBlXxASWERfUEF0dF9TdGVyZW90eXBl2QAdACEBnwAKACQBoAAfAFgBoQF2AZYAWQB4ABMAJQAtAGcBqV8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZYA6gD2ADoA1gACABAiAQNMANgA3AAoBqwG0AEaoAawBrQGuAa8BsAGxAbIBs4BBgEKAQ4BEgEWARoBHgEioAbUBtgG3AbgBuQG6AbsBvIBJgEqAS4BPgFCAUYBSgFOALl8QG1hEX1BQU0tfaXNTdG9yZWRJblRydXRoRmlsZV8QG1hEX1BQU0tfdmVyc2lvbkhhc2hNb2RpZmllcl8QEFhEX1BQU0tfdXNlckl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AEwWFAGcAZwBnAC0AZwCvAloAZwBnABMAZ4AAgACAAICoCAgICIAfgFwICIAACFpkdXBsaWNhdGVz0gA3AAoGrgC3oIAe0gC5ALoGsQayWlhEUE1FbnRpdHmnBrMGtAa1BrYGtwa4AL5aWERQTUVudGl0eV1YRFVNTENsYXNzSW1wXxASWERVTUxDbGFzc2lmaWVySW1wXxARWERVTUxOYW1lc3BhY2VJbXBfEBRYRFVNTE5hbWVkRWxlbWVudEltcF8QD1hEVU1MRWxlbWVudEltcN8QEAa6BrsGvAa9AB0Gvga/AB8GwAbBAAoAIQbCBsMAJABYAFkGxQAlACUAEAbJAF8ALQAlAFkAYgA6AFkG0AbRAGdfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2VfECBYREJ1Y2tldEZvclN0ZXJlb3R5cGVzd2FzRW5jb2RlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNzdG9yYWdlXxAkWERCdWNrZXRGb3JHZW5lcmFsaXphdGlvbnNkdXBsaWNhdGVzXxAkWERCdWNrZXRGb3JHZW5lcmFsaXphdGlvbnN3YXNFbmNvZGVkXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc29yZGVyZWRfECFYREJ1Y2tldEZvckdlbmVyYWxpemF0aW9uc29yZGVyZWRfECFYREJ1Y2tldEZvckdlbmVyYWxpemF0aW9uc3N0b3JhZ2WADoDLgASABIACgLiAs4AEgA6AtYAHgA6BA72AtwgS3Y/0atMANgA3AAoG1QbXAEahAGyAEKEG2IC5gC7ZAB0AIQbbAAoAJAbcAB8AWAbdAEEAbABZAHgAEwAlAC0AZwblXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlgLaAEIAOgDWAAIAECIC60wA2ADcACgbnBvEARqkAfwCAAIEAggCDAIQAhQCGAIeAE4AUgBW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AAIAECID20wA2ADcACgj+CQgARqkAfwCAAIEAggCDAIQAhQCGAIeAE4AUgBWAFoAXgBiAGYAagBupCQkJCgkLCQwJDQkOCQ8JEAkRgPeA+YD6gP2A/oEBAIEBAYEBA4EBBIAu3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMJFQATCO8AZwBnAGcALQBnAK8AfwBnAGcAEwBngACA+IAAgPUICAgIgB+AEwgIgAAI0gA3AAoJIwC3oIAe3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMAEwATCO8AZwBnAGcALQBnAK8AgABnAGcAEwBngACAAIAAgPUICAgIgB+AFAgIgAAI3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMJNgATCO8AZwBnAGcALQBnAK8AgQBnAGcAEwBngACA+4AAgPUICAgIgB+AFQgIgAAI0gA3AAoJRAC3oQlFgPyAHtIANwAKCUgAt6EHMoDBgB7fEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwATABMI7wBnAGcAZwAtAGcArwCCAGcAZwATAGeAAIAAgACA9QgICAiAH4AWCAiAAAjfEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwlcABMI7wBnAGcAZwAtAGcArwCDAGcAZwATAGeAAID/gACA9QgICAiAH4AXCAiAAAjSADcACglqALeggB7fEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwETABMI7wBnAGcAZwAtAGcArwCEAGcAZwATAGeAAIArgACA9QgICAiAH4AYCAiAAAjfEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwl9ABMI7wBnAGcAZwAtAGcArwCFAGcAZwATAGeAAIEBAoAAgPUICAgIgB+AGQgIgAAI0wA2ADcACgmLCYwARqCggC7fEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwE6ABMI7wBnAGcAZwAtAGcArwCGAGcAZwATAGeAAIAwgACA9QgICAiAH4AaCAiAAAjfEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwA7ABMI7wBnAGcAZwAtAGcArwC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kAKYAEwATABMu5gBnAGcAZwAtAGcArwGyAGcAZwATAGeAAIAAgACBA9gICAgIgB+ARwgIgAAI3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMBEwATLuYAZwBnAGcALQBnAK8BswBnAGcAEwBngACAK4AAgQPYCAgICIAfgEgICIAACNkAHQAhL4YACgAkL4cAHwBYL4guwgGXAFkAeAATACUALQBnL5BfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBA9WAPoAOgDWAAIAECIED5NMANgA3AAovki+aAEanAlQCVQJWAlcCWAJZAlqAVoBXgFiAWYBagFuAXKcvmy+cL50vni+fL6AvoYED5YED54ED6IED6YED6oED64ED7IAu3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMvpQATLucAZwBnAGcALQBnAK8CVABnAGcAEwBngACBA+aAAIED4wgICAiAH4BWCAiAAAhSTk/fEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwETABMu5wBnAGcAZwAtAGcArwJVAGcAZwATAGeAAIArgACBA+MICAgIgB+AVwgIgAAI3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMAEwATLucAZwBnAGcALQBnAK8CVgBnAGcAEwBngACAAIAAgQPjCAgICIAfgFgICIAACN8QDwCdAJ4AnwAdAKAAoQCiAB8AowAKACEApAClACQApgATFawAEy7nAGcAZwBnAC0AZwCvAlcAZwBnABMAZ4AAgQHygACBA+MICAgIgB+AWQgIgAAI3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMAEwATLucAZwBnAGcALQBnAK8CWABnAGcAEwBngACAAIAAgQPjCAgICIAfgFoICIAACN8QDwCdAJ4AnwAdAKAAoQCiAB8AowAKACEApAClACQApgATABMAEy7nAGcAZwBnAC0AZwCvAlkAZwBnABMAZ4AAgACAAIED4wgICAiAH4BbCAiAAAj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ACsAAAArcAAAK4gAACwQAAAslAAALOAAACzoAAAs9AAALQAAAC0IAAAtEAAALRgAAC0kAAAtMAAALTgAAC1AAAAtSAAALVAAAC1YAAAtYAAALWQAAC10AAAtqAAALcgAAC30AAAuKAAALjAAAC44AAAuQAAALkgAAC5QAAAuWAAALowAAC6UAAAunAAALqQAAC6wAAAuvAAALsgAAC7QAAAvRAAAL2wAAC+AAAAvmAAAL9QAADAQAAAxHAAAMawAADI8AAAyyAAAM2QAADPkAAA0gAAANRwAADWcAAA2LAAANrwAADbsAAA29AAANvwAADcEAAA3DAAANxQAADccAAA3JAAANywAADc0AAA3PAAAN0QAADdMAAA3VAAAN1wAADdgAAA3dAAAN5QAADfIAAA31AAAN9wAADfoAAA38AAAN/gAADg0AAA4yAAAOVgAADn0AAA6hAAAOowAADqUAAA6nAAAOqQAADqsAAA6tAAAOrgAADrAAAA69AAAO0AAADtIAAA7UAAAO1gAADtgAAA7aAAAO3AAADt4AAA7gAAAO4gAADvUAAA73AAAO+QAADvsAAA79AAAO/wAADwEAAA8DAAAPBQAADwcAAA8JAAAPHwAADzIAAA9OAAAPawAAD4cAAA+bAAAPrQAAD8MAAA/cAAAQGwAAECEAABAqAAAQNwAAEEMAABBNAAAQVwAAEGIAABBtAAAQegAAEIIAABCEAAAQhgAAEIgAABCKAAAQiwAAEIwAABCNAAAQjgAAEJAAABCSAAAQkwAAEJQAABCWAAAQlwAAEKAAABChAAAQowAAEKwAABC3AAAQwAAAEM8AABDWAAAQ3gAAEOcAABDwAAARAwAAEQwAABEfAAARNgAAEUgAABGHAAARiQAAEYsAABGNAAARjwAAEZAAABGRAAARkgAAEZMAABGVAAARlwAAEZgAABGZAAARmwAAEZwAABHbAAAR3QAAEd8AABHhAAAR4wAAEeQAABHlAAAR5gAAEecAABHpAAAR6wAAEewAABHtAAAR7wAAEfAAABH5AAAR/AAAEf4AABIAAAASCQAAEhAAABISAAASFAAAEhYAABIYAAASMgAAEjsAABJHAAAShgAAEogAABKKAAASjAAAEo4AABKPAAASkAAAEpEAABKSAAASlAAAEpYAABKXAAASmAAAEpoAABKbAAAS2gAAEtwAABLeAAAS4AAAEuIAABLjAAAS5AAAEuUAABLmAAAS6AAAEuoAABLrAAAS7AAAEu4AABLvAAAS+AAAEvkAABL7AAATOgAAEzwAABM+AAATQAAAE0IAABNDAAATRAAAE0UAABNGAAATSAAAE0oAABNLAAATTAAAE04AABNPAAATUAAAE48AABORAAATkwAAE5UAABOXAAATmAAAE5kAABOaAAATmwAAE50AABOfAAAToAAAE6EAABOjAAATpAAAE7EAABOyAAATswAAE7UAABO+AAAT1AAAE9sAABPoAAAUJwAAFCkAABQrAAAULQAAFC8AABQwAAAUMQAAFDIAABQzAAAUNQAAFDcAABQ4AAAUOQAAFDsAABQ8AAAUVQAAFFcAABRZAAAUWwAAFFwAABReAAAUdQAAFH4AABSMAAAUmQAAFKcAABS8AAAU0AAAFOcAABT5AAAVOAAAFToAABU8AAAVPgAAFUAAABVBAAAVQgAAFUMAABVEAAAVRgAAFUgAABVJAAAVSgAAFUwAABVNAAAVagAAFXMAABWIAAAVlwAAFawAABW6AAAVzwAAFeMAABX6AAAWDAAAFhkAABYiAAAWJAAAFiYAABYoAAAWKgAAFjMAABY1AAAWNwAAFjkAABY7AAAWPQAAFlcAABZvAAAWewAAFsYAABbpAAAXCQAAFykAABcrAAAXLQAAFy8AABcxAAAXMwAAFzQAABc1AAAXNwAAFzgAABc6AAAXOwAAFz0AABc/AAAXQAAAF0EAABdDAAAXRAAAF0kAABdWAAAXWwAAF10AABdfAAAXZAAAF2YAABdoAAAXagAAF38AABeUAAAXuQAAF90AABgEAAAYKAAAGCoAABgsAAAYLgAAGDAAABgyAAAYNAAAGDUAABg3AAAYRAAAGFUAABhXAAAYWQAAGFsAABhdAAAYXwAAGGEAABhjAAAYZQAAGHYAABh4AAAYegAAGHwAABh+AAAYgAAAGIIAABiEAAAYhgAAGIgAABimAAAYxAAAGNcAABjrAAAZAAAAGR0AABkxAAAZRwAAGYYAABmIAAAZigAAGYwAABmOAAAZjwAAGZAAABmRAAAZkgAAGZQAABmWAAAZlwAAGZgAABmaAAAZmwAAGdoAABncAAAZ3gAAGeAAABniAAAZ4wAAGeQAABnlAAAZ5gAAGegAABnqAAAZ6wAAGewAABnuAAAZ7wAAGi4AABowAAAaMgAAGjQAABo2AAAaNwAAGjgAABo5AAAaOgAAGjwAABo+AAAaPwAAGkAAABpCAAAaQwAAGlAAABpTAAAaVQAAGlgAABpaAAAaXAAAGnYAABp/AAAavgAAGsAAABrCAAAaxAAAGsYAABrHAAAayAAAGskAABrKAAAazAAAGs4AABrPAAAa0AAAGtIAABrTAAAbEgAAGxQAABsWAAAbGAAAGxoAABsbAAAbHAAAGx0AABseAAAbIAAAGyIAABsjAAAbJAAAGyYAABsnAAAbZgAAG2gAABtqAAAbbAAAG24AABtvAAAbcAAAG3EAABtyAAAbdAAAG3YAABt3AAAbeAAAG3oAABt7AAAbugAAG7wAABu+AAAbwAAAG8IAABvDAAAbxAAAG8UAABvGAAAbyAAAG8oAABvLAAAbzAAAG84AABvPAAAcDgAAHBAAABwSAAAcFAAAHBYAABwXAAAcGAAAHBkAABwaAAAcHAAAHB4AABwfAAAcIAAAHCIAABwjAAAcSAAAHGwAAByTAAActwAAHLkAABy7AAAcvQAAHL8AABzBAAAcwwAAHMQAABzGAAAc0wAAHOIAABzkAAAc5gAAHOgAABzqAAAc7AAAHO4AABzwAAAc/wAAHQEAAB0DAAAdBQAAHQcAAB0JAAAdCwAAHQ0AAB0PAAAdLwAAHVoAAB10AAAdjQAAHacAAB3HAAAd6gAAHikAAB4rAAAeLQAAHi8AAB4xAAAeMgAAHjMAAB40AAAeNQAAHjcAAB45AAAeOgAAHjsAAB49AAAePgAAHn0AAB5/AAAegQAAHoMAAB6FAAAehgAAHocAAB6IAAAeiQAAHosAAB6NAAAejgAAHo8AAB6RAAAekgAAHtEAAB7TAAAe1QAAHtcAAB7ZAAAe2gAAHtsAAB7cAAAe3QAAHt8AAB7hAAAe4gAAHuMAAB7lAAAe5gAAHyUAAB8nAAAfKQAAHysAAB8tAAAfLgAAHy8AAB8wAAAfMQAAHzMAAB81AAAfNgAAHzcAAB85AAAfOgAAHz0AAB98AAAffgAAH4AAAB+CAAAfhAAAH4UAAB+GAAAfhwAAH4gAAB+KAAAfjAAAH40AAB+OAAAfkAAAH5EAAB/QAAAf0gAAH9QAAB/WAAAf2AAAH9kAAB/aAAAf2wAAH9wAAB/eAAAf4AAAH+EAAB/iAAAf5AAAH+UAACAkAAAgJgAAICgAACAqAAAgLAAAIC0AACAuAAAgLwAAIDAAACAyAAAgNAAAIDUAACA2AAAgOAAAIDkAACBCAAAgUAAAIF0AACBrAAAgeAAAIIsAACCiAAAgtAAAIP8AACEiAAAhQgAAIWIAACFkAAAhZgAAIWgAACFqAAAhbAAAIW0AACFuAAAhcAAAIXEAACFzAAAhdAAAIXYAACF4AAAheQAAIXoAACF8AAAhfQAAIYIAACGPAAAhlAAAIZYAACGYAAAhnQAAIZ8AACGhAAAhowAAIcgAACHsAAAiEwAAIjcAACI5AAAiOwAAIj0AACI/AAAiQQAAIkMAACJEAAAiRgAAIlMAACJkAAAiZgAAImgAACJqAAAibAAAIm4AACJwAAAicgAAInQAACKFAAAihwAAIokAACKLAAAijQAAIo8AACKRAAAikwAAIpUAACKXAAAi1gAAItgAACLaAAAi3AAAIt4AACLfAAAi4AAAIuEAACLiAAAi5AAAIuYAACLnAAAi6AAAIuoAACLrAAAjKgAAIywAACMuAAAjMAAAIzIAACMzAAAjNAAAIzUAACM2AAAjOAAAIzoAACM7AAAjPAAAIz4AACM/AAAjfgAAI4AAACOCAAAjhAAAI4YAACOHAAAjiAAAI4kAACOKAAAjjAAAI44AACOPAAAjkAAAI5IAACOTAAAjoAAAI6MAACOlAAAjqAAAI6oAACOsAAAjxgAAI+AAACQfAAAkIQAAJCMAACQlAAAkJwAAJCgAACQpAAAkKgAAJCsAACQtAAAkLwAAJDAAACQxAAAkMwAAJDQAACRzAAAkdQAAJHcAACR5AAAkewAAJHwAACR9AAAkfgAAJH8AACSBAAAkgwAAJIQAACSFAAAkhwAAJIgAACTHAAAkyQAAJMsAACTNAAAkzwAAJNAAACTRAAAk0gAAJNMAACTVAAAk1wAAJNgAACTZAAAk2wAAJNwAACUbAAAlHQAAJR8AACUhAAAlIwAAJSQAACUlAAAlJgAAJScAACUpAAAlKwAAJSwAACUtAAAlLwAAJTAAACVvAAAlcQAAJXMAACV1AAAldwAAJXgAACV5AAAlegAAJXsAACV9AAAlfwAAJYAAACWBAAAlgwAAJYQAACWpAAAlzQAAJfQAACYYAAAmGgAAJhwAACYeAAAmIAAAJiIAACYkAAAmJQAAJicAACY0AAAmQwAAJkUAACZHAAAmSQAAJksAACZNAAAmTwAAJlEAACZgAAAmYgAAJmQAACZmAAAmaAAAJmoAACZsAAAmbgAAJnAAACavAAAmsQAAJrMAACa1AAAmtwAAJrgAACa5AAAmugAAJrsAACa9AAAmvwAAJsAAACbBAAAmwwAAJsQAACcDAAAnBQAAJwcAACcJAAAnCwAAJwwAACcNAAAnDgAAJw8AACcRAAAnEwAAJxQAACcVAAAnFwAAJxgAACdXAAAnWQAAJ1sAACddAAAnXwAAJ2AAACdhAAAnYgAAJ2MAACdlAAAnZwAAJ2gAACdpAAAnawAAJ2wAACerAAAnrQAAJ68AACexAAAnswAAJ7QAACe1AAAntgAAJ7cAACe5AAAnuwAAJ7wAACe9AAAnvwAAJ8AAACf/AAAoAQAAKAMAACgFAAAoBwAAKAgAACgJAAAoCgAAKAsAACgNAAAoDwAAKBAAACgRAAAoEwAAKBQAAChTAAAoVQAAKFcAAChZAAAoWwAAKFwAAChdAAAoXgAAKF8AAChhAAAoYwAAKGQAAChlAAAoZwAAKGgAAChpAAAoqAAAKKoAACisAAAorgAAKLAAACixAAAosgAAKLMAACi0AAAotgAAKLgAACi5AAAougAAKLwAACi9AAApCAAAKSsAAClLAAApawAAKW0AAClvAAApcQAAKXMAACl1AAApdgAAKXcAACl5AAApegAAKXwAACl9AAApfwAAKYEAACmCAAApgwAAKYUAACmGAAApiwAAKZgAACmdAAApnwAAKaEAACmmAAApqAAAKaoAACmsAAAp0QAAKfUAACocAAAqQAAAKkIAACpEAAAqRgAAKkgAACpKAAAqTAAAKk0AACpPAAAqXAAAKm0AACpvAAAqcQAAKnMAACp1AAAqdwAAKnkAACp7AAAqfQAAKo4AACqQAAAqkgAAKpQAACqWAAAqmAAAKpoAACqcAAAqngAAKqAAACrfAAAq4QAAKuMAACrlAAAq5wAAKugAACrpAAAq6gAAKusAACrtAAAq7wAAKvAAACrxAAAq8wAAKvQAACszAAArNQAAKzcAACs5AAArOwAAKzwAACs9AAArPgAAKz8AACtBAAArQwAAK0QAACtFAAArRwAAK0gAACuHAAAriQAAK4sAACuNAAArjwAAK5AAACuRAAArkgAAK5MAACuVAAArlwAAK5gAACuZAAArmwAAK5wAACupAAArrAAAK64AACuxAAArswAAK7UAACvPAAAr0wAALBIAACwUAAAsFgAALBgAACwaAAAsGwAALBwAACwdAAAsHgAALCAAACwiAAAsIwAALCQAACwmAAAsJwAALGYAACxoAAAsagAALGwAACxuAAAsbwAALHAAACxxAAAscgAALHQAACx2AAAsdwAALHgAACx6AAAsewAALLoAACy8AAAsvgAALMAAACzCAAAswwAALMQAACzFAAAsxgAALMgAACzKAAAsywAALMwAACzOAAAszwAALQ4AAC0QAAAtEgAALRQAAC0WAAAtFwAALRgAAC0ZAAAtGgAALRwAAC0eAAAtHwAALSAAAC0iAAAtIwAALWIAAC1kAAAtZgAALWgAAC1qAAAtawAALWwAAC1tAAAtbgAALXAAAC1yAAAtcwAALXQAAC12AAAtdwAALZwAAC3AAAAt5wAALgsAAC4NAAAuDwAALhEAAC4TAAAuFQAALhcAAC4YAAAuGgAALicAAC42AAAuOAAALjoAAC48AAAuPgAALkAAAC5CAAAuRAAALlMAAC5VAAAuVwAALlkAAC5bAAAuXQAALl8AAC5hAAAuYwAALqIAAC6kAAAupgAALqgAAC6qAAAuqwAALqwAAC6tAAAurgAALrAAAC6yAAAuswAALrQAAC62AAAutwAALvYAAC74AAAu+gAALvwAAC7+AAAu/wAALwAAAC8BAAAvAgAALwQAAC8GAAAvBwAALwgAAC8KAAAvCwAAL0oAAC9MAAAvTgAAL1AAAC9SAAAvUwAAL1QAAC9VAAAvVgAAL1gAAC9aAAAvWwAAL1wAAC9eAAAvXwAAL54AAC+gAAAvogAAL6QAAC+mAAAvpwAAL6gAAC+pAAAvqgAAL6wAAC+uAAAvrwAAL7AAAC+yAAAvswAAL/IAAC/0AAAv9gAAL/gAAC/6AAAv+wAAL/wAAC/9AAAv/gAAMAAAADACAAAwAwAAMAQAADAGAAAwBwAAMEYAADBIAAAwSgAAMEwAADBOAAAwTwAAMFAAADBRAAAwUgAAMFQAADBWAAAwVwAAMFgAADBaAAAwWwAAMIMAADDCAAAwxAAAMMYAADDIAAAwygAAMMsAADDMAAAwzQAAMM4AADDQAAAw0gAAMNMAADDUAAAw1gAAMNcAADEiAAAxRQAAMWUAADGFAAAxhwAAMYkAADGLAAAxjQAAMY8AADGQAAAxkQAAMZMAADGUAAAxlgAAMZcAADGZAAAxmwAAMZwAADGdAAAxnwAAMaAAADGlAAAxsgAAMbcAADG5AAAxuwAAMcAAADHCAAAxxAAAMcYAADHrAAAyDwAAMjYAADJaAAAyXAAAMl4AADJgAAAyYgAAMmQAADJmAAAyZwAAMmkAADJ2AAAyhwAAMokAADKLAAAyjQAAMo8AADKRAAAykwAAMpUAADKXAAAyqAAAMqoAADKsAAAyrgAAMrAAADKyAAAytAAAMrYAADK4AAAyugAAMvkAADL7AAAy/QAAMv8AADMBAAAzAgAAMwMAADMEAAAzBQAAMwcAADMJAAAzCgAAMwsAADMNAAAzDgAAM00AADNPAAAzUQAAM1MAADNVAAAzVgAAM1cAADNYAAAzWQAAM1sAADNdAAAzXgAAM18AADNhAAAzYgAAM6EAADOjAAAzpQAAM6cAADOpAAAzqgAAM6sAADOsAAAzrQAAM68AADOxAAAzsgAAM7MAADO1AAAztgAAM8MAADPEAAAzxQAAM8cAADQGAAA0CAAANAoAADQMAAA0DgAANA8AADQQAAA0EQAANBIAADQUAAA0FgAANBcAADQYAAA0GgAANBsAADRaAAA0XAAANF4AADRgAAA0YgAANGMAADRkAAA0ZQAANGYAADRoAAA0agAANGsAADRsAAA0bgAANG8AADSuAAA0sAAANLIAADS0AAA0tgAANLcAADS4AAA0uQAANLoAADS8AAA0vgAANL8AADTAAAA0wgAANMMAADUCAAA1BAAANQYAADUIAAA1CgAANQsAADUMAAA1DQAANQ4AADUQAAA1EgAANRMAADUUAAA1FgAANRcAADVWAAA1WAAANVoAADVcAAA1XgAANV8AADVgAAA1YQAANWIAADVkAAA1ZgAANWcAADVoAAA1agAANWsAADWQAAA1tAAANdsAADX/AAA2AQAANgMAADYFAAA2BwAANgkAADYLAAA2DAAANg4AADYbAAA2KgAANiwAADYuAAA2MAAANjIAADY0AAA2NgAANjgAADZHAAA2SQAANksAADZNAAA2TwAANlEAADZTAAA2VQAANlcAADaWAAA2mAAANpoAADacAAA2ngAANp8AADagAAA2oQAANqIAADakAAA2pgAANqcAADaoAAA2qgAANqsAADatAAA27AAANu4AADbwAAA28gAANvQAADb1AAA29gAANvcAADb4AAA2+gAANvwAADb9AAA2/gAANwAAADcBAAA3QAAAN0IAADdEAAA3RgAAN0gAADdJAAA3SgAAN0sAADdMAAA3TgAAN1AAADdRAAA3UgAAN1QAADdVAAA3lAAAN5YAADeYAAA3mgAAN5wAADedAAA3ngAAN58AADegAAA3ogAAN6QAADelAAA3pgAAN6gAADepAAA3qwAAN+oAADfsAAA37gAAN/AAADfyAAA38wAAN/QAADf1AAA39gAAN/gAADf6AAA3+wAAN/wAADf+AAA3/wAAOD4AADhAAAA4QgAAOEQAADhGAAA4RwAAOEgAADhJAAA4SgAAOEwAADhOAAA4TwAAOFAAADhSAAA4UwAAOJIAADiUAAA4lgAAOJgAADiaAAA4mwAAOJwAADidAAA4ngAAOKAAADiiAAA4owAAOKQAADimAAA4pwAAOLIAADi7AAA4vAAAOL4AADjHAAA40gAAOOEAADjsAAA4+gAAOQ8AADkjAAA5OgAAOUwAADmPAAA5swAAOdcAADn6AAA6IQAAOkEAADpoAAA6jwAAOq8AADrTAAA69wAAOvkAADr7AAA6/QAAOv8AADsBAAA7AwAAOwUAADsHAAA7CQAAOwsAADsNAAA7DwAAOxIAADsUAAA7FQAAOxoAADsnAAA7KgAAOywAADsvAAA7MQAAOzMAADtYAAA7fAAAO6MAADvHAAA7yQAAO8sAADvNAAA7zwAAO9EAADvTAAA71AAAO9YAADvjAAA79gAAO/gAADv6AAA7/AAAO/4AADwAAAA8AgAAPAQAADwGAAA8CAAAPBsAADwdAAA8HwAAPCEAADwjAAA8JQAAPCcAADwpAAA8KwAAPC0AADwvAAA8bgAAPHAAADxyAAA8dAAAPHYAADx3AAA8eAAAPHkAADx6AAA8fAAAPH4AADx/AAA8gAAAPIIAADyDAAA8jAAAPI0AADyPAAA8zgAAPNAAADzSAAA81AAAPNYAADzXAAA82AAAPNkAADzaAAA83AAAPN4AADzfAAA84AAAPOIAADzjAAA9IgAAPSQAAD0mAAA9KAAAPSoAAD0rAAA9LAAAPS0AAD0uAAA9MAAAPTIAAD0zAAA9NAAAPTYAAD03AAA9QAAAPUMAAD1FAAA9RwAAPVAAAD1TAAA9VQAAPVcAAD1iAAA9oQAAPaMAAD2lAAA9pwAAPakAAD2qAAA9qwAAPawAAD2tAAA9rwAAPbEAAD2yAAA9swAAPbUAAD22AAA9vAAAPfsAAD39AAA9/wAAPgEAAD4DAAA+BAAAPgUAAD4GAAA+BwAAPgkAAD4LAAA+DAAAPg0AAD4PAAA+EAAAPhkAAD4aAAA+HAAAPlsAAD5dAAA+XwAAPmEAAD5jAAA+ZAAAPmUAAD5mAAA+ZwAAPmkAAD5rAAA+bAAAPm0AAD5vAAA+cAAAPq8AAD6xAAA+swAAPrUAAD63AAA+uAAAPrkAAD66AAA+uwAAPr0AAD6/AAA+wAAAPsEAAD7DAAA+xAAAPtEAAD7SAAA+0wAAPtUAAD8UAAA/FgAAPxgAAD8aAAA/HAAAPx0AAD8eAAA/HwAAPyAAAD8iAAA/JAAAPyUAAD8mAAA/KAAAPykAAD9oAAA/agAAP2wAAD9uAAA/cAAAP3EAAD9yAAA/cwAAP3QAAD92AAA/eAAAP3kAAD96AAA/fAAAP30AAD+KAAA/mwAAP50AAD+fAAA/oQAAP6MAAD+lAAA/pwAAP6kAAD+rAAA/vAAAP74AAD/BAAA/xAAAP8cAAD/KAAA/zQAAP9AAAD/TAAA/1QAAP9oAAD/mAAA/8wAAQAAAAEAJAABADgAAQBMAAEBeAABAgQAAQKEAAEDBAABAwwAAQMUAAEDHAABAyQAAQMsAAEDMAABAzQAAQM8AAEDQAABA0gAAQNMAAEDWAABA2AAAQNkAAEDaAABA3AAAQN0AAEDiAABA7wAAQPQAAED2AABA+AAAQP0AAED/AABBAQAAQQMAAEEWAABBOwAAQV8AAEGGAABBqgAAQawAAEGuAABBsAAAQbIAAEG0AABBtgAAQbcAAEG5AABBxgAAQdcAAEHZAABB2wAAQd0AAEHfAABB4QAAQeMAAEHlAABB5wAAQfgAAEH6AABB/AAAQf4AAEIAAABCAgAAQgQAAEIGAABCCAAAQgoAAEJJAABCSwAAQk0AAEJPAABCUQAAQlIAAEJTAABCVAAAQlUAAEJXAABCWQAAQloAAEJbAABCXQAAQl4AAEKdAABCnwAAQqEAAEKjAABCpQAAQqYAAEKnAABCqAAAQqkAAEKrAABCrQAAQq4AAEKvAABCsQAAQrIAAELxAABC8wAAQvUAAEL3AABC+QAAQvoAAEL7AABC/AAAQv0AAEL/AABDAQAAQwIAAEMDAABDBQAAQwYAAEMTAABDFAAAQxUAAEMXAABDVgAAQ1gAAENaAABDXAAAQ14AAENfAABDYAAAQ2EAAENiAABDZAAAQ2YAAENnAABDaAAAQ2oAAENrAABDqgAAQ6wAAEOuAABDsAAAQ7IAAEOzAABDtAAAQ7UAAEO2AABDuAAAQ7oAAEO7AABDvAAAQ74AAEO/AABDwAAAQ/8AAEQBAABEAwAARAUAAEQHAABECAAARAkAAEQKAABECwAARA0AAEQPAABEEAAARBEAAEQTAABEFAAARFMAAERVAABEVwAARFkAAERbAABEXAAARF0AAEReAABEXwAARGEAAERjAABEZAAARGUAAERnAABEaAAARKcAAESpAABEqwAARK0AAESvAABEsAAARLEAAESyAABEswAARLUAAES3AABEuAAARLkAAES7AABEvAAAROEAAEUFAABFLAAARVAAAEVSAABFVAAARVYAAEVYAABFWgAARVwAAEVdAABFXwAARWwAAEV7AABFfQAARX8AAEWBAABFgwAARYUAAEWHAABFiQAARZgAAEWaAABFnAAARZ4AAEWgAABFowAARaYAAEWpAABFqwAARb0AAEXRAABF4wAARfgAAEYKAABGGQAARjYAAEZ1AABGdwAARnkAAEZ7AABGfQAARn4AAEZ/AABGgAAARoEAAEaDAABGhQAARoYAAEaHAABGiQAARooAAEbJAABGywAARs0AAEbPAABG0QAARtIAAEbTAABG1AAARtUAAEbXAABG2QAARtoAAEbbAABG3QAARt4AAEbgAABHHwAARyEAAEcjAABHJQAARycAAEcoAABHKQAARyoAAEcrAABHLQAARy8AAEcwAABHMQAARzMAAEc0AABHcwAAR3UAAEd3AABHeQAAR3sAAEd8AABHfQAAR34AAEd/AABHgQAAR4MAAEeEAABHhQAAR4cAAEeIAABHywAAR+8AAEgTAABINgAASF0AAEh9AABIpAAASMsAAEjrAABJDwAASTMAAEk1AABJOAAASToAAEk8AABJPgAASUAAAElCAABJRAAASUYAAElIAABJSgAASUwAAElPAABJUQAASVIAAElXAABJZAAASWcAAElpAABJbAAASW4AAElwAABJlQAASbkAAEngAABKBAAASgYAAEoIAABKCgAASgwAAEoOAABKEAAAShEAAEoTAABKIAAASjMAAEo1AABKNwAASjkAAEo7AABKPQAASj8AAEpBAABKQwAASkUAAEpYAABKWgAASlwAAEpeAABKYAAASmIAAEplAABKaAAASmsAAEpuAABKcAAASq8AAEqxAABKswAASrUAAEq3AABKuAAASrkAAEq6AABKuwAASr0AAEq/AABKwAAASsEAAErDAABKxAAASs0AAErOAABK0AAASw8AAEsRAABLEwAASxUAAEsXAABLGAAASxkAAEsaAABLGwAASx0AAEsfAABLIAAASyEAAEsjAABLJAAAS2MAAEtlAABLZwAAS2kAAEtrAABLbAAAS20AAEtuAABLbwAAS3EAAEtzAABLdAAAS3UAAEt3AABLeAAAS4EAAEuEAABLhgAAS4gAAEuRAABLlAAAS5YAAEuYAABL1wAAS9kAAEvbAABL3QAAS98AAEvgAABL4QAAS+IAAEvjAABL5QAAS+cAAEvoAABL6QAAS+sAAEvsAABMKwAATC0AAEwvAABMMQAATDMAAEw0AABMNQAATDYAAEw3AABMOQAATDsAAEw8AABMPQAATD8AAExAAABMSQAATEoAAExMAABMiwAATI0AAEyPAABMkQAATJMAAEyUAABMlQAATJYAAEyXAABMmQAATJsAAEycAABMnQAATJ8AAEygAABM3wAATOEAAEzkAABM5gAATOgAAEzpAABM6gAATOsAAEzsAABM7gAATPAAAEzxAABM8gAATPQAAEz1AABNAgAATQMAAE0EAABNBgAATUUAAE1HAABNSQAATUsAAE1NAABNTgAATU8AAE1QAABNUQAATVMAAE1VAABNVgAATVcAAE1ZAABNWgAATZkAAE2bAABNnQAATZ8AAE2hAABNogAATaMAAE2kAABNpQAATacAAE2pAABNqgAATasAAE2tAABNrgAATbsAAE3OAABN0QAATdQAAE3XAABN2QAATdwAAE3fAABN4QAATeMAAE3lAABN+AAATfsAAE3+AABOAQAATgQAAE4HAABOCgAATg0AAE4QAABOEwAAThUAAE4cAABOLwAATjoAAE5FAABOVwAATqIAAE7FAABO5QAATwUAAE8HAABPCQAATwsAAE8NAABPDwAATxAAAE8RAABPFAAATxUAAE8XAABPGAAATxsAAE8eAABPHwAATyAAAE8jAABPJAAATykAAE82AABPOwAATz0AAE8/AABPRAAAT0cAAE9KAABPTAAAT3EAAE+VAABPvAAAT+AAAE/jAABP5QAAT+cAAE/pAABP6wAAT+0AAE/uAABP8QAAT/4AAFAPAABQEQAAUBMAAFAVAABQFwAAUBkAAFAbAABQHQAAUB8AAFAwAABQMwAAUDYAAFA5AABQPAAAUD8AAFBCAABQRQAAUEgAAFBKAABQiQAAUIsAAFCNAABQjwAAUJIAAFCTAABQlAAAUJUAAFCWAABQmAAAUJoAAFCbAABQnAAAUJ4AAFCfAABQ3gAAUOAAAFDiAABQ5AAAUOcAAFDoAABQ6QAAUOoAAFDrAABQ7QAAUO8AAFDwAABQ8QAAUPMAAFD0AABRMwAAUTUAAFE4AABROgAAUT0AAFE+AABRPwAAUUAAAFFBAABRQwAAUUUAAFFGAABRRwAAUUkAAFFKAABRVwAAUVgAAFFZAABRWwAAUZoAAFGcAABRngAAUaAAAFGjAABRpAAAUaUAAFGmAABRpwAAUakAAFGrAABRrAAAUa0AAFGvAABRsAAAUe8AAFHxAABR8wAAUfUAAFH4AABR+QAAUfoAAFH7AABR/AAAUf4AAFIAAABSAQAAUgIAAFIEAABSBQAAUkQAAFJGAABSSAAAUkoAAFJNAABSTgAAUk8AAFJQAABSUQAAUlMAAFJVAABSVgAAUlcAAFJZAABSWgAAUpkAAFKbAABSnQAAUp8AAFKiAABSowAAUqQAAFKlAABSpgAAUqgAAFKqAABSqwAAUqwAAFKuAABSrwAAUu4AAFLwAABS8gAAUvQAAFL3AABS+AAAUvkAAFL6AABS+wAAUv0AAFL/AABTAAAAUwEAAFMDAABTBAAAUykAAFNNAABTdAAAU5gAAFObAABTnQAAU58AAFOhAABTowAAU6UAAFOmAABTqQAAU7YAAFPFAABTxwAAU8kAAFPLAABTzQAAU88AAFPRAABT0wAAU+IAAFPlAABT6AAAU+sAAFPuAABT8QAAU/QAAFP3AABT+QAAVDgAAFQ6AABUPAAAVD4AAFRBAABUQgAAVEMAAFREAABURQAAVEcAAFRJAABUSgAAVEsAAFRNAABUTgAAVI0AAFSPAABUkgAAVJQAAFSXAABUmAAAVJkAAFSaAABUmwAAVJ0AAFSfAABUoAAAVKEAAFSjAABUpAAAVKYAAFTlAABU5wAAVOkAAFTrAABU7gAAVO8AAFTwAABU8QAAVPIAAFT0AABU9gAAVPcAAFT4AABU+gAAVPsAAFU6AABVPAAAVT8AAFVBAABVRAAAVUUAAFVGAABVRwAAVUgAAFVKAABVTAAAVU0AAFVOAABVUAAAVVEAAFWUAABVuAAAVdwAAFX/AABWJgAAVkYAAFZtAABWlAAAVrQAAFbYAABW/AAAVv4AAFcBAABXAwAAVwUAAFcHAABXCgAAVwwAAFcOAABXEAAAVxIAAFcUAABXFgAAVxkAAFccAABXHQAAVyIAAFcvAABXMgAAVzQAAFc3AABXOgAAVzwAAFdhAABXhQAAV6wAAFfQAABX0wAAV9UAAFfXAABX2QAAV9sAAFfdAABX3gAAV+EAAFfuAABYAQAAWAMAAFgFAABYBwAAWAkAAFgLAABYDQAAWA8AAFgRAABYEwAAWCYAAFgpAABYLAAAWC8AAFgyAABYNQAAWDgAAFg7AABYPgAAWEEAAFhDAABYggAAWIQAAFiHAABYiQAAWIwAAFiNAABYjgAAWI8AAFiQAABYkgAAWJQAAFiVAABYlgAAWJgAAFiZAABYogAAWKMAAFilAABY5AAAWOYAAFjoAABY6gAAWO0AAFjuAABY7wAAWPAAAFjxAABY8wAAWPUAAFj2AABY9wAAWPkAAFj6AABZOQAAWTsAAFk+AABZQAAAWUMAAFlEAABZRQAAWUYAAFlHAABZSQAAWUsAAFlMAABZTQAAWU8AAFlQAABZWQAAWVwAAFlfAABZYQAAWWoAAFltAABZbwAAWXEAAFmwAABZsgAAWbQAAFm2AABZuQAAWboAAFm7AABZvAAAWb0AAFm/AABZwQAAWcIAAFnDAABZxQAAWcYAAFoFAABaBwAAWgoAAFoMAABaDwAAWhAAAFoRAABaEgAAWhMAAFoVAABaFwAAWhgAAFoZAABaGwAAWhwAAFolAABaJgAAWigAAFpnAABaaQAAWmsAAFptAABacAAAWnEAAFpyAABacwAAWnQAAFp2AABaeAAAWnkAAFp6AABafAAAWn0AAFq8AABavgAAWsEAAFrDAABaxgAAWscAAFrIAABayQAAWsoAAFrMAABazgAAWs8AAFrQAABa0gAAWtMAAFrgAABa4QAAWuIAAFrkAABbIwAAWyUAAFsnAABbKQAAWywAAFstAABbLgAAWy8AAFswAABbMgAAWzQAAFs1AABbNgAAWzgAAFs5AABbeAAAW3oAAFt8AABbfgAAW4EAAFuCAABbgwAAW4QAAFuFAABbhwAAW4kAAFuKAABbiwAAW40AAFuOAABbmwAAW6wAAFuuAABbsQAAW7MAAFu2AABbuAAAW7oAAFu8AABbvwAAW9AAAFvTAABb1gAAW9kAAFvcAABb3wAAW+IAAFvlAABb6AAAW+oAAFv3AABb/AAAXAYAAFxRAABcdAAAXJQAAFy0AABctgAAXLgAAFy6AABcvAAAXL8AAFzAAABcwQAAXMQAAFzFAABcxwAAXMgAAFzLAABczQAAXM4AAFzPAABc0gAAXNMAAFzYAABc5QAAXOoAAFzsAABc7gAAXPMAAFz2AABc+QAAXPsAAF0gAABdRAAAXWsAAF2PAABdkgAAXZQAAF2WAABdmAAAXZoAAF2cAABdnQAAXaAAAF2tAABdvgAAXcAAAF3CAABdxAAAXcYAAF3IAABdygAAXcwAAF3OAABd3wAAXeIAAF3lAABd6AAAXesAAF3uAABd8QAAXfQAAF33AABd+QAAXjgAAF46AABePAAAXj4AAF5BAABeQgAAXkMAAF5EAABeRQAAXkcAAF5JAABeSgAAXksAAF5NAABeTgAAXo0AAF6PAABekQAAXpMAAF6WAABelwAAXpgAAF6ZAABemgAAXpwAAF6eAABenwAAXqAAAF6iAABeowAAXuIAAF7kAABe5wAAXukAAF7sAABe7QAAXu4AAF7vAABe8AAAXvIAAF70AABe9QAAXvYAAF74AABe+QAAXwYAAF8HAABfCAAAXwoAAF9JAABfSwAAX00AAF9PAABfUgAAX1MAAF9UAABfVQAAX1YAAF9YAABfWgAAX1sAAF9cAABfXgAAX18AAF+eAABfoAAAX6IAAF+kAABfpwAAX6gAAF+pAABfqgAAX6sAAF+tAABfrwAAX7AAAF+xAABfswAAX7QAAF/zAABf9QAAX/cAAF/5AABf/AAAX/0AAF/+AABf/wAAYAAAAGACAABgBAAAYAUAAGAGAABgCAAAYAkAAGBIAABgSgAAYEwAAGBOAABgUQAAYFIAAGBTAABgVAAAYFUAAGBXAABgWQAAYFoAAGBbAABgXQAAYF4AAGCdAABgnwAAYKEAAGCjAABgpgAAYKcAAGCoAABgqQAAYKoAAGCsAABgrgAAYK8AAGCwAABgsgAAYLMAAGDYAABg/AAAYSMAAGFHAABhSgAAYUwAAGFOAABhUAAAYVIAAGFUAABhVQAAYVgAAGFlAABhdAAAYXYAAGF4AABhegAAYXwAAGF+AABhgAAAYYIAAGGRAABhlAAAYZcAAGGaAABhnQAAYaAAAGGjAABhpgAAYagAAGHnAABh6QAAYesAAGHtAABh8AAAYfEAAGHyAABh8wAAYfQAAGH2AABh+AAAYfkAAGH6AABh/AAAYf0AAGI8AABiPgAAYkAAAGJCAABiRQAAYkYAAGJHAABiSAAAYkkAAGJLAABiTQAAYk4AAGJPAABiUQAAYlIAAGKRAABikwAAYpUAAGKXAABimgAAYpsAAGKcAABinQAAYp4AAGKgAABiogAAYqMAAGKkAABipgAAYqcAAGLmAABi6AAAYuoAAGLsAABi7wAAYvAAAGLxAABi8gAAYvMAAGL1AABi9wAAYvgAAGL5AABi+wAAYvwAAGM7AABjPQAAYz8AAGNBAABjRAAAY0UAAGNGAABjRwAAY0gAAGNKAABjTAAAY00AAGNOAABjUAAAY1EAAGOQAABjkgAAY5QAAGOWAABjmQAAY5oAAGObAABjnAAAY50AAGOfAABjoQAAY6IAAGOjAABjpQAAY6YAAGPlAABj5wAAY+oAAGPsAABj7wAAY/AAAGPxAABj8gAAY/MAAGP1AABj9wAAY/gAAGP5AABj+wAAY/wAAGQFAABkGAAAZCUAAGQ4AABkRQAAZFgAAGRvAABkgQAAZMwAAGTvAABlDwAAZS8AAGUxAABlMwAAZTUAAGU3AABlOgAAZTsAAGU8AABlPwAAZUAAAGVCAABlQwAAZUUAAGVIAABlSQAAZUoAAGVNAABlTgAAZVcAAGVkAABlaQAAZWsAAGVtAABlcgAAZXUAAGV4AABlegAAZZ8AAGXDAABl6gAAZg4AAGYRAABmEwAAZhUAAGYXAABmGQAAZhsAAGYcAABmHwAAZiwAAGY9AABmPwAAZkEAAGZDAABmRQAAZkcAAGZJAABmSwAAZk0AAGZeAABmYQAAZmQAAGZnAABmagAAZm0AAGZwAABmcwAAZnYAAGZ4AABmtwAAZrkAAGa7AABmvQAAZsAAAGbBAABmwgAAZsMAAGbEAABmxgAAZsgAAGbJAABmygAAZswAAGbNAABnDAAAZw4AAGcQAABnEgAAZxUAAGcWAABnFwAAZxgAAGcZAABnGwAAZx0AAGceAABnHwAAZyEAAGciAABnYQAAZ2MAAGdmAABnaAAAZ2sAAGdsAABnbQAAZ24AAGdvAABncQAAZ3MAAGd0AABndQAAZ3cAAGd4AABnhQAAZ4YAAGeHAABniQAAZ8gAAGfKAABnzAAAZ84AAGfRAABn0gAAZ9MAAGfUAABn1QAAZ9cAAGfZAABn2gAAZ9sAAGfdAABn3gAAaB0AAGgfAABoIQAAaCMAAGgmAABoJwAAaCgAAGgpAABoKgAAaCwAAGguAABoLwAAaDAAAGgyAABoMwAAaHIAAGh0AABodgAAaHgAAGh7AABofAAAaH0AAGh+AABofwAAaIEAAGiDAABohAAAaIUAAGiHAABoiAAAaMcAAGjJAABoywAAaM0AAGjQAABo0QAAaNIAAGjTAABo1AAAaNYAAGjYAABo2QAAaNoAAGjcAABo3QAAaRwAAGkeAABpIAAAaSIAAGklAABpJgAAaScAAGkoAABpKQAAaSsAAGktAABpLgAAaS8AAGkxAABpMgAAaVcAAGl7AABpogAAacYAAGnJAABpywAAac0AAGnPAABp0QAAadMAAGnUAABp1wAAaeQAAGnzAABp9QAAafcAAGn5AABp+wAAaf0AAGn/AABqAQAAahAAAGoTAABqFgAAahkAAGocAABqHwAAaiIAAGolAABqJwAAamYAAGpoAABqagAAamwAAGpvAABqcAAAanEAAGpyAABqcwAAanUAAGp3AABqeAAAankAAGp7AABqfAAAarsAAGq9AABqvwAAasEAAGrEAABqxQAAasYAAGrHAABqyAAAasoAAGrMAABqzQAAas4AAGrQAABq0QAAaxAAAGsSAABrFAAAaxYAAGsZAABrGgAAaxsAAGscAABrHQAAax8AAGshAABrIgAAayMAAGslAABrJgAAa2UAAGtnAABragAAa2wAAGtvAABrcAAAa3EAAGtyAABrcwAAa3UAAGt3AABreAAAa3kAAGt7AABrfAAAa38AAGu+AABrwAAAa8IAAGvEAABrxwAAa8gAAGvJAABrygAAa8sAAGvNAABrzwAAa9AAAGvRAABr0wAAa9QAAGwTAABsFQAAbBcAAGwZAABsHAAAbB0AAGweAABsHwAAbCAAAGwiAABsJAAAbCUAAGwmAABsKAAAbCkAAGxoAABsagAAbGwAAGxuAABscQAAbHIAAGxzAABsdAAAbHUAAGx3AABseQAAbHoAAGx7AABsfQAAbH4AAGzJAABs7AAAbQwAAG0sAABtLgAAbTAAAG0yAABtNAAAbTcAAG04AABtOQAAbTwAAG09AABtPwAAbUAAAG1CAABtRAAAbUUAAG1GAABtSQAAbUoAAG1PAABtXAAAbWEAAG1jAABtZQAAbWoAAG1tAABtcAAAbXIAAG2XAABtuwAAbeIAAG4GAABuCQAAbgsAAG4NAABuDwAAbhEAAG4TAABuFAAAbhcAAG4kAABuNQAAbjcAAG45AABuOwAAbj0AAG4/AABuQQAAbkMAAG5FAABuVgAAblkAAG5cAABuXwAAbmIAAG5lAABuaAAAbmsAAG5uAABucAAAbq8AAG6xAABuswAAbrUAAG64AABuuQAAbroAAG67AABuvAAAbr4AAG7AAABuwQAAbsIAAG7EAABuxQAAbwQAAG8GAABvCAAAbwoAAG8NAABvDgAAbw8AAG8QAABvEQAAbxMAAG8VAABvFgAAbxcAAG8ZAABvGgAAb1kAAG9bAABvXgAAb2AAAG9jAABvZAAAb2UAAG9mAABvZwAAb2kAAG9rAABvbAAAb20AAG9vAABvcAAAb30AAG9+AABvfwAAb4EAAG/AAABvwgAAb8QAAG/GAABvyQAAb8oAAG/LAABvzAAAb80AAG/PAABv0QAAb9IAAG/TAABv1QAAb9YAAHAVAABwFwAAcBkAAHAbAABwHgAAcB8AAHAgAABwIQAAcCIAAHAkAABwJgAAcCcAAHAoAABwKgAAcCsAAHBqAABwbAAAcG4AAHBwAABwcwAAcHQAAHB1AABwdgAAcHcAAHB5AABwewAAcHwAAHB9AABwfwAAcIAAAHC/AABwwQAAcMMAAHDFAABwyAAAcMkAAHDKAABwywAAcMwAAHDOAABw0AAAcNEAAHDSAABw1AAAcNUAAHEUAABxFgAAcRgAAHEaAABxHQAAcR4AAHEfAABxIAAAcSEAAHEjAABxJQA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Ah98AAIfiAACH4wAAh+QAAIflAACH5gAAh+gAAIfqAACH6wAAh+wAAIfuAACH7wAAiC4AAIgwAACIMgAAiDQAAIg3AACIOAAAiDkAAIg6AACIOwAAiD0AAIg/AACIQAAAiEEAAIhDAACIRAAAiIMAAIiFAACIhwAAiIkAAIiMAACIjQAAiI4AAIiPAACIkAAAiJIAAIiUAACIlQAAiJYAAIiYAACImQAAiNgAAIjaAACI3AAAiN4AAIjhAACI4gAAiOMAAIjkAACI5QAAiOcAAIjpAACI6gAAiOsAAIjtAACI7gAAiS0AAIkvAACJMQAAiTMAAIk2AACJNwAAiTgAAIk5AACJOgAAiTwAAIk+AACJPwAAiUAAAIlCAACJQwAAiWgAAImMAACJswAAidcAAInaAACJ3AAAid4AAIngAACJ4gAAieQAAInlAACJ6AAAifUAAIoEAACKBgAAiggAAIoKAACKDAAAig4AAIoQAACKEgAAiiEAAIokAACKJwAAiioAAIotAACKMAAAijMAAIo2AACKOAAAincAAIp5AACKewAAin0AAIqAAACKgQAAioIAAIqDAACKhAAAioYAAIqIAACKiQAAiooAAIqMAACKjQAAiswAAIrOAACK0AAAitIAAIrVAACK1gAAitcAAIrYAACK2QAAitsAAIrdAACK3gAAit8AAIrhAACK4gAAiyEAAIsjAACLJQAAiycAAIsqAACLKwAAiywAAIstAACLLgAAizAAAIsyAACLMwAAizQAAIs2AACLNwAAi3YAAIt4AACLegAAi3wAAIt/AACLgAAAi4EAAIuCAACLgwAAi4UAAIuHAACLiAAAi4kAAIuLAACLjAAAi8sAAIvNAACLzwAAi9EAAIvUAACL1QAAi9YAAIvXAACL2AAAi9oAAIvcAACL3QAAi94AAIvgAACL4QAAjCAAAIwiAACMJAAAjCYAAIwpAACMKgAAjCsAAIwsAACMLQAAjC8AAIwxAACMMgAAjDMAAIw1AACMNgAAjHUAAIx3AACMeQAAjHsAAIx+AACMfwAAjIAAAIyBAACMggAAjIQAAIyGAACMhwAAjIgAAIyKAACMiwAAjNYAAIz5AACNGQAAjTkAAI07AACNPQAAjT8AAI1BAACNRAAAjUUAAI1GAACNSQAAjUoAAI1MAACNTQAAjU8AAI1RAACNUgA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AmHwAAJh9AACYfgAAmIAAAJiCAACYgwAAmIQAAJiGAACYhwAAmMYAAJjIAACYygAAmMwAAJjPAACY0AAAmNEAAJjSAACY0wAAmNUAAJjXAACY2AAAmNkAAJjbAACY3AAAmRsAAJkdAACZHwAAmSEAAJkkAACZJQAAmSYAAJknAACZKAAAmSoAAJksAACZLQAAmS4AAJkwAACZMQAAmVYAAJl6AACZoQAAmcUAAJnIAACZygAAmcwAAJnOAACZ0AAAmdIAAJnTAACZ1gAAmeMAAJnyAACZ9AAAmfYAAJn4AACZ+gAAmfwAAJn+AACaAAAAmg8AAJoSAACaFQAAmhgAAJobAACaHgAAmiEAAJokAACaJgAAmmUAAJpnAACaagAAmmwAAJpvAACacAAAmnEAAJpyAACacwAAmnUAAJp3AACaeAAAmnkAAJp7AACafAAAmoAAAJq/AACawQAAmsMAAJrFAACayAAAmskAAJrKAACaywAAmswAAJrOAACa0AAAmtEAAJrSAACa1AAAmtUAAJsUAACbFgAAmxgAAJsaAACbHQAAmx4AAJsfAACbIAAAmyEAAJsjAACbJQAAmyYAAJsnAACbKQAAmyoAAJtpAACbawAAm24AAJtwAACbcwAAm3QAAJt1AACbdgAAm3cAAJt5AACbewAAm3wAAJt9AACbfwAAm4AAAJuDAACbwgAAm8QAAJvGAACbyAAAm8sAAJvMAACbzQAAm84AAJvPAACb0QAAm9MAAJvUAACb1QAAm9cAAJvYAACcFwAAnBkAAJwbAACcHQAAnCAAAJwhAACcIgAAnCMAAJwkAACcJgAAnCgAAJwpAACcKgAAnCwAAJwtAACcbAAAnG4AAJxwAACccgAAnHUAAJx2AACcdwAAnHgAAJx5AACcewAAnH0AAJx+AACcfwAAnIEAAJyCAACciwAAnIwAAJyOAACczQAAnM8AAJzRAACc0wAAnNYAAJzXAACc2AAAnNkAAJzaAACc3AAAnN4AAJzfAACc4AAAnOIAAJzjAACdIgAAnSQAAJ0mAACdKAAAnSsAAJ0sAACdLQAAnS4AAJ0vAACdMQAAnTMAAJ00AACdNQAAnTcAAJ04AACddwAAnXkAAJ18AACdfgAAnYEAAJ2CAACdgwAAnYQAAJ2FAACdhwAAnYkAAJ2KAACdiwAAnY0AAJ2OAACd2QAAnfwAAJ4cAACePAAAnj4AAJ5AAACeQgAAnkQAAJ5GAACeRwAAnkgAAJ5LAACeTAAAnk4AAJ5PAACeUgAAnlUAAJ5WAACeVwAAnloAAJ5bAACeYAAAnm0AAJ5yAACedAAAnnYAAJ57AACefgAAnoEAAJ6DAACeqAAAnswAAJ7zAACfFwAAnxoAAJ8cAACfHgAAnyAAAJ8iAACfJAAAnyUAAJ8oAACfNQAAn0YAAJ9IAACfSgAAn0wAAJ9OAACfUAAAn1IAAJ9UAACfVgAAn2cAAJ9qAACfbQAAn3AAAJ9zAACfdgAAn3kAAJ98AACffwAAn4EAAJ/AAACfwgAAn8QAAJ/GAACfyQAAn8oAAJ/LAACfzAAAn80AAJ/PAACf0QAAn9IAAJ/TAACf1QAAn9YAAKAVAACgFwAAoBkAAKAbAACgHgAAoB8AAKAgAACgIQAAoCIAAKAkAACgJgAAoCcAAKAoAACgKgAAoCsAAKBqAACgbAAAoG8AAKBxAACgdAAAoHUAAKB2AACgdwAAoHgAAKB6AACgfAAAoH0AAKB+AACggAAAoIEAAKCOAACgjwAAoJAAAKCSAACg0QAAoNMAAKDVAACg1wAAoNoAAKDbAACg3AAAoN0AAKDeAACg4AAAoOIAAKDjAACg5AAAoOYAAKDnAAChJgAAoSgAAKEqAAChLAAAoS8AAKEwAAChMQAAoTIAAKEzAAChNQAAoTcAAKE4AAChOQAAoTsAAKE8AAChewAAoX0AAKF/AAChgQAAoYQAAKGFAAChhgAAoYcAAKGIAAChigAAoYwAAKGNAAChjgAAoZAAAKGRAACh0AAAodIAAKHUAACh1gAAodkAAKHaAACh2wAAodwAAKHdAACh3wAAoeEAAKHiAACh4wAAoeUAAKHmAACiJQAAoicAAKIpAACiKwAAoi4AAKIvAACiMAAAojEAAKIyAACiNAAAojYAAKI3AACiOAAAojoAAKI7AACiYAAAooQAAKKrAACizwAAotIAAKLUAACi1gAAotgAAKLaAACi3AAAot0AAKLgAACi7QAAovwAAKL+AACjAAAAowIAAKMEAACjBgAAowgAAKMKAACjGQAAoxwAAKMfAACjIgAAoyUAAKMoAACjKwAAoy4AAKMwAACjbwAAo3EAAKNzAACjdQAAo3gAAKN5AACjegAAo3sAAKN8AACjfgAAo4AAAKOBAACjggAAo4QAAKOFAACjxAAAo8YAAKPIAACjygAAo80AAKPOAACjzwAAo9AAAKPRAACj0wAAo9UAAKPWAACj1wAAo9kAAKPaAACkGQAApBsAAKQdAACkHwAApCIAAKQjAACkJAAApCUAAKQmAACkKAAApCoAAKQrAACkLAAApC4AAKQvAACkbgAApHAAAKRyAACkdAAApHcAAKR4AACkeQAApHoAAKR7AACkfQAApH8AAKSAAACkgQAApIMAAKSEAACkwwAApMUAAKTHAACkyQAApMwAAKTNAACkzgAApM8AAKTQAACk0gAApNQAAKTVAACk1gAApNgAAKTZAAClGAAApRoAAKUcAAClHgAApSEAAKUiAAClIwAApSQAAKUlAAClJwAApSkAAKUqAAClKwAApS0AAKUuAAClbQAApW8AAKVyAACldAAApXcAAKV4AACleQAApXoAAKV7AAClfQAApX8AAKWAAAClgQAApYMAAKWEAAClzwAApfIAAKYSAACmMgAApjQAAKY2AACmOAAApjoAAKY8AACmPQAApj4AAKZBAACmQgAApkQAAKZFAACmSAAApkoAAKZLAACmTAAApk8AAKZQAACmVQAApmIAAKZnAACmaQAApmsAAKZwAACmcwAApnYAAKZ4AACmnQAApsEAAKboAACnDAAApw8AAKcRAACnEwAApxUAAKcXAACnGQAApxoAAKcdAACnKgAApzsAAKc9AACnPwAAp0EAAKdDAACnRQAAp0cAAKdJAACnSwAAp1wAAKdfAACnYgAAp2UAAKdoAACnawAAp24AAKdxAACndAAAp3YAAKe1AACntwAAp7kAAKe7AACnvgAAp78AAKfAAACnwQAAp8IAAKfEAACnxgAAp8cAAKfIAACnygAAp8sAAKgKAACoDAAAqA4AAKgQAACoEwAAqBQAAKgVAACoFgAAqBcAAKgZAACoGwAAqBwAAKgdAACoHwAAqCAAAKhfAACoYQAAqGQAAKhmAACoaQAAqGoAAKhrAACobAAAqG0AAKhvAACocQAAqHIAAKhzAACodQAAqHYAAKiDAACohAAAqIUAAKiHAACoxgAAqMgAAKjKAACozAAAqM8AAKjQAACo0QAAqNIAAKjTAACo1QAAqNcAAKjYAACo2QAAqNsAAKjcAACpGwAAqR0AAKkfAACpIQAAqSQAAKklAACpJgAAqScAAKkoAACpKgAAqSwAAKktAACpLgAAqTAAAKkxAACpcAAAqXIAAKl0AACpdgAAqXkAAKl6AACpewAAqXwAAKl9AACpfwAAqYEAAKmCAACpgwAAqYUAAKmGAACpxQAAqccAAKnJAACpywAAqc4AAKnPAACp0AAAqdEAAKnSAACp1AAAqdYAAKnXAACp2AAAqdoAAKnbAACqGgAAqhwAAKoeAACqIAAAqiMAAKokAACqJQAAqiYAAKonAACqKQAAqisAAKosAACqLQAAqi8AAKowAACqVQAAqnkAAKqgAACqxAAAqscAAKrJAACqywAAqs0AAKrPAACq0QAAqtIAAKrVAACq4gAAqvEAAKrzAACq9QAAqvcAAKr5AACq+wAAqv0AAKr/AACrDgAAqxEAAKsUAACrFwAAqxoAAKsdAACrIAAAqyMAAKslAACrZAAAq2YAAKtoAACragAAq20AAKtuAACrbwAAq3AAAKtxAACrcwAAq3UAAKt2AACrdwAAq3kAAKt6AACruQAAq7sAAKu9AACrvwAAq8IAAKvDAACrxAAAq8UAAKvGAACryAAAq8oAAKvLAACrzAAAq84AAKvPAACsDgAArBAAAKwSAACsFAAArBcAAKwYAACsGQAArBoAAKwbAACsHQAArB8AAKwgAACsIQAArCMAAKwkAACsYwAArGUAAKxnAACsaQAArGwAAKxtAACsbgAArG8AAKxwAACscgAArHQAAKx1AACsdgAArHgAAKx5AACsuAAArLoAAKy8AACsvgAArMEAAKzCAACswwAArMQAAKzFAACsxwAArMkAAKzKAACsywAArM0AAKzOAACtDQAArQ8AAK0RAACtEwAArRYAAK0XAACtGAAArRkAAK0aAACtHAAArR4AAK0fAACtIAAArSIAAK0jAACtYgAArWQAAK1nAACtaQAArWwAAK1tAACtbgAArW8AAK1wAACtcgAArXQAAK11AACtdgAArXgAAK15AACtxAAArecAAK4HAACuJwAArikAAK4rAACuLQAAri8AAK4xAACuMgAArjMAAK42AACuNwAArjkAAK46AACuPQAArkAAAK5BAACuQgAArkUAAK5GAACuSwAArlgAAK5dAACuXwAArmEAAK5mAACuaQAArmwAAK5uAACukwAArrcAAK7eAACvAgAArwUAAK8HAACvCQAArwsAAK8NAACvDwAArxAAAK8TAACvIAAArzEAAK8zAACvNQAArzcAAK85AACvOwAArz0AAK8/AACvQQAAr1IAAK9VAACvWAAAr1sAAK9eAACvYQAAr2QAAK9nAACvagAAr2wAAK+rAACvrQAAr68AAK+xAACvtAAAr7UAAK+2AACvtwAAr7gAAK+6AACvvAAAr70AAK++AACvwAAAr8EAALAAAACwAgAAsAQAALAGAACwCQAAsAoAALALAACwDAAAsA0AALAPAACwEQAAsBIAALATAACwFQAAsBYAALBVAACwVwAAsFoAALBcAACwXwAAsGAAALBhAACwYgAAsGMAALBlAACwZwAAsGgAALBpAACwawAAsGwAALB5AACwegAAsHsAALB9AACwvAAAsL4AALDAAACwwgAAsMUAALDGAACwxwAAsMgAALDJAACwywAAsM0AALDOAACwzwAAsNEAALDSAACxEQAAsRMAALEVAACxFwAAsRoAALEbAACxHAAAsR0AALEeAACxIAAAsSIAALEjAACxJAAAsSYAALEnAACxZgAAsWgAALFqAACxbAAAsW8AALFwAACxcQAAsXIAALFzAACxdQAAsXcAALF4AACxeQAAsXsAALF8AACxuwAAsb0AALG/AACxwQAAscQAALHFAACxxgAAsccAALHIAACxygAAscwAALHNAACxzgAAsdAAALHRAACyEAAAshIAALIUAACyFgAAshkAALIaAACyGwAAshwAALIdAACyHwAAsiEAALIiAACyIwAAsiUAALImAACySwAAsm8AALKWAACyugAAsr0AALK/AACywQAAssMAALLFAACyxwAAssgAALLLAACy2AAAsucAALLpAACy6wAAsu0AALLvAACy8QAAsvMAALL1AACzBAAAswcAALMKAACzDQAAsxAAALMTAACzFgAAsxkAALMbAACzWgAAs1wAALNeAACzYAAAs2MAALNkAACzZQAAs2YAALNnAACzaQAAs2sAALNsAACzbQAAs28AALNwAACzrwAAs7EAALO0AACztgAAs7kAALO6AACzuwAAs7wAALO9AACzvwAAs8EAALPCAACzwwAAs8UAALPGAAC0BQAAtAcAALQJAAC0CwAAtA4AALQPAAC0EAAAtBEAALQSAAC0FAAAtBYAALQXAAC0GAA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AyscAAMrJAADKywAAys0AAMrOAADK0QAAyt4AAMrtAADK7wAAyvEAAMrzAADK9QAAyvcAAMr5AADK+wAAywoAAMsNAADLEAAAyxMAAMsWAADLGQAAyxwAAMsfAADLIQAAy2AAAMtiAADLZAAAy2YAAMtpAADLagAAy2sAAMtsAADLbQAAy28AAMtxAADLcgAAy3MAAMt1AADLdgAAy7UAAMu3AADLuQAAy7sAAMu+AADLvwAAy8AAAMvBAADLwgAAy8QAAMvGAADLxwAAy8gAAMvKAADLywAAzAoAAMwMAADMDgAAzBAAAMwTAADMFAAAzBUAAMwWAADMFwAAzBkAAMwbAADMHAAAzB0AAMwfAADMIAAAzF8AAMxhAADMZAAAzGYAAMxpAADMagAAzGsAAMxsAADMbQAAzG8AAMxxAADMcgAAzHMAAMx1AADMdgAAzLkAAMzdAADNAQAAzSQAAM1LAADNawAAzZIAAM25AADN2QAAzf0AAM4hAADOIwAAziYAAM4oAADOKgAAziwAAM4vAADOMQAAzjMAAM41AADONwAAzjkAAM47AADOPgAAzkEAAM5CAADORwAAzlQAAM5XAADOWQAAzlwAAM5fAADOYQAAzoYAAM6qAADO0QAAzvUAAM74AADO+gAAzvwAAM7+AADPAAAAzwIAAM8DAADPBgAAzxMAAM8mAADPKAAAzyoAAM8sAADPLgAAzzAAAM8yAADPNAAAzzYAAM84AADPSwAAz04AAM9RAADPVAAAz1cAAM9aAADPXQAAz2AAAM9jAADPZgAAz2gAAM+nAADPqQAAz6wAAM+uAADPsQAAz7IAAM+zAADPtAAAz7UAAM+3AADPuQAAz7oAAM+7AADPvQAAz74AAM/HAADPyAAAz8oAANAJAADQCwAA0A0AANAPAADQEgAA0BMAANAUAADQFQAA0BYAANAYAADQGgAA0BsAANAcAADQHgAA0B8AANBeAADQYAAA0GMAANBlAADQaAAA0GkAANBqAADQawAA0GwAANBuAADQcAAA0HEAANByAADQdAAA0HUAANB+AADQgQAA0IQAANCGAADQjwAA0JIAANCUAADQlgAA0NUAANDXAADQ2QAA0NsAANDeAADQ3wAA0OAAANDhAADQ4gAA0OQAANDmAADQ5wAA0OgAANDqAADQ6wAA0SoAANEsAADRLwAA0TEAANE0AADRNQAA0TYAANE3AADROAAA0ToAANE8AADRPQAA0T4AANFAAADRQQAA0UoAANFLAADRTQAA0YwAANGOAADRkAAA0ZIAANGVAADRlgAA0ZcAANGYAADRmQAA0ZsAANGdAADRngAA0Z8AANGhAADRogAA0eEAANHjAADR5gAA0egAANHrAADR7AAA0e0AANHuAADR7wAA0fEAANHzAADR9AAA0fUAANH3AADR+AAA0gUAANIGAADSBwAA0gkAANJIAADSSgAA0kwAANJOAADSUQAA0lIAANJTAADSVAAA0lUAANJXAADSWQAA0loAANJbAADSXQAA0l4AANKdAADSnwAA0qIAANKkAADSpwAA0qgAANKpAADSqgAA0qsAANKtAADSrwAA0rAAANKxAADSswAA0rQAANLDAADS0AAA0tcAANLaAADS3QAA0t8AANLmAADS6QAA0uwAANLvAADS8QAA0vcAANL9AADTSAAA02sAANOLAADTqwAA060AANOvAADTsQAA07MAANO2AADTtwAA07gAANO7AADTvAAA074AANO/AADTwQAA08QAANPFAADTxgAA08kAANPKAADTzwAA09wAANPhAADT4wAA0+UAANPqAADT7QAA0/AAANPyAADUFwAA1DsAANRiAADUhgAA1IkAANSLAADUjQAA1I8AANSRAADUkwAA1JQAANSXAADUpAAA1LUAANS3AADUuQAA1LsAANS9AADUvwAA1MEAANTDAADUxQAA1NYAANTZAADU3AAA1N8AANTiAADU5QAA1OgAANTrAADU7gAA1PAAANUvAADVMQAA1TMAANU1AADVOAAA1TkAANU6AADVOwAA1TwAANU+AADVQAAA1UEAANVCAADVRAAA1UUAANWEAADVhgAA1YgAANWKAADVjQAA1Y4AANWPAADVkAAA1ZEAANWTAADVlQAA1ZYAANWXAADVmQAA1ZoAANXZAADV2wAA1d4AANXgAADV4wAA1eQAANXlAADV5gAA1ecAANXpAADV6wAA1ewAANXtAADV7wAA1fAAANX9AADV/gAA1f8AANYBAADWQAAA1kIAANZEAADWRgAA1kkAANZKAADWSwAA1kwAANZNAADWTwAA1lEAANZSAADWUwAA1lUAANZWAADWlQAA1pcAANaZAADWmwAA1p4AANafAADWoAAA1qEAANaiAADWpAAA1qYAANanAADWqAAA1qoAANarAADW6gAA1uwAANbuAADW8AAA1vMAANb0AADW9QAA1vYAANb3AADW+QAA1vsAANb8AADW/QAA1v8AANcAAADXPwAA10EAANdDAADXRQAA10gAANdJAADXSgAA10sAANdMAADXTgAA11AAANdRAADXUgAA11QAANdVAADXlAAA15YAANeYAADXmgAA150AANeeAADXnwAA16AAANehAADXowAA16UAANemAADXpwAA16kAANeqAADXzwAA1/MAANgaAADYPgAA2EEAANhDAADYRQAA2EcAANhJAADYSwAA2EwAANhPAADYXAAA2GsAANhtAADYbwAA2HEAANhzAADYdQAA2HcAANh5AADYiAAA2IsAANiOAADYkQAA2JQAANiXAADYmgAA2J0AANifAADY3gAA2OAAANjiAADY5AAA2OcAANjoAADY6QAA2OoAANjrAADY7QAA2O8AANjwAADY8QAA2PMAANj0AADZMwAA2TUAANk3AADZOQAA2TwAANk9AADZPgAA2T8AANlAAADZQgAA2UQAANlFAADZRgAA2UgAANlJAADZiAAA2YoAANmMAADZjgAA2ZEAANmSAADZkwAA2ZQAANmVAADZlwAA2ZkAANmaAADZmwAA2Z0AANmeAADZ3QAA2d8AANnhAADZ4wAA2eYAANnnAADZ6AAA2ekAANnqAADZ7AAA2e4AANnvAADZ8AAA2fIAANnzAADaMgAA2jQAANo2AADaOAAA2jsAANo8AADaPQAA2j4AANo/AADaQQAA2kMAANpEAADaRQAA2kcAANpIAADahwAA2okAANqLAADajQAA2pAAANqRAADakgAA2pMAANqUAADalgAA2pgAANqZAADamgAA2pwAANqdAADa3AAA2t4AANrgAADa4gAA2uUAANrmAADa5wAA2ugAANrpAADa6wAA2u0AANruAADa7wAA2vEAANryAADbPQAA22AAANuAAADboAAA26IAANukAADbpgAA26gAANurAADbrAAA260AANuwAADbsQAA27MAANu0AADbtwAA27oAANu7AADbvAAA278AANvAAADbxQAA29IAANvXAADb2QAA29sAANvgAADb4wAA2+YAANvoAADcDQAA3DEAANxYAADcfAAA3H8AANyBAADcgwAA3IUAANyHAADciQAA3IoAANyNAADcmgAA3KsAANytAADcrwAA3LEAANyzAADctQAA3LcAANy5AADcuwAA3MwAANzPAADc0gAA3NUAANzYAADc2wAA3N4AANzhAADc5AAA3OYAAN0lAADdJwAA3SkAAN0rAADdLgAA3S8AAN0wAADdMQAA3TIAAN00AADdNgAA3TcAAN04AADdOgAA3TsAAN16AADdfAAA3X4AAN2AAADdgwAA3YQAAN2FAADdhgAA3YcAAN2JAADdiwAA3YwAAN2NAADdjwAA3ZAAAN3PAADd0QAA3dQAAN3WAADd2QAA3doAAN3bAADd3AAA3d0AAN3fAADd4QAA3eIAAN3jAADd5QAA3eYAAN3zAADd9AAA3fUAAN33AADeNgAA3jgAAN46AADePAAA3j8AAN5AAADeQQAA3kIAAN5DAADeRQAA3kcAAN5IAADeSQAA3ksAAN5MAADeiwAA3o0AAN6PAADekQAA3pQAAN6VAADelgAA3pcAAN6YAADemgAA3pwAAN6dAADengAA3qAAAN6hAADe4AAA3uIAAN7kAADe5gAA3ukAAN7qAADe6wAA3uwAAN7tAADe7wAA3vEAAN7yAADe8wAA3vUAAN72AADfNQAA3zcAAN85AADfOwAA3z4AAN8/AADfQAAA30EAAN9CAADfRAAA30YAAN9HAADfSAAA30oAAN9LAADfigAA34wAAN+OAADfkAAA35MAAN+UAADflQAA35YAAN+XAADfmQAA35sAAN+cAADfnQAA358AAN+gAADfxQAA3+kAAOAQAADgNAAA4DcAAOA5AADgOwAA4D0AAOA/AADgQQAA4EIAAOBFAADgUgAA4GEAAOBjAADgZQAA4GcAAOBpAADgawAA4G0AAOBvAADgfgAA4IEAAOCEAADghwAA4IoAAOCNAADgkAAA4JMAAOCVAADg1AAA4NYAAODYAADg2gAA4N0AAODeAADg3wAA4OAAAODhAADg4wAA4OUAAODmAADg5wAA4OkAAODqAADhKQAA4SsAAOEtAADhLwAA4TIAAOEzAADhNAAA4TUAAOE2AADhOAAA4ToAAOE7AADhPAAA4T4AAOE/AADhfgAA4YAAAOGCAADhhAAA4YcAAOGIAADhiQAA4YoAAOGLAADhjQAA4Y8AAOGQAADhkQAA4ZMAAOGUAADh0wAA4dUAAOHXAADh2QAA4dwAAOHdAADh3gAA4d8AAOHgAADh4gAA4eQAAOHlAADh5gAA4egAAOHpAADiKAAA4ioAAOIsAADiLgAA4jEAAOIyAADiMwAA4jQAAOI1AADiNwAA4jkAAOI6AADiOwAA4j0AAOI+AADifQAA4n8AAOKBAADigwAA4oYAAOKHAADiiAAA4okAAOKKAADijAAA4o4AAOKPAADikAAA4pIAAOKTAADi0gAA4tQAAOLXAADi2QAA4twAAOLdAADi3gAA4t8AAOLgAADi4gAA4uQAAOLlAADi5gAA4ugAAOLpAADjNAAA41cAAON3AADjlwAA45kAAOObAADjnQAA458AAOOiAADjowAA46QAAOOnAADjqAAA46oAAOOrAADjrQAA468AAOOwAADjsQAA47QAAOO1AADjvgAA48sAAOPQAADj0gAA49QAAOPZAADj3AAA498AAOPhAADkBgAA5CoAAORRAADkdQAA5HgAAOR6AADkfAAA5H4AAOSAAADkggAA5IMAAOSGAADkkwAA5KQAAOSmAADkqAAA5KoAAOSsAADkrgAA5LAAAOSyAADktAAA5MUAAOTIAADkywAA5M4AAOTRAADk1AAA5NcAAOTaAADk3QAA5N8AAOUeAADlIAAA5SIAAOUkAADlJwAA5SgAAOUpAADlKgAA5SsAAOUtAADlLwAA5TAAAOUxAADlMwAA5TQAAOVzAADldQAA5XcAAOV5AADlfAAA5X0AAOV+AADlfwAA5YAAAOWCAADlhAAA5YUAAOWGAADliAAA5YkAAOXIAADlygAA5c0AAOXPAADl0gAA5dMAAOXUAADl1QAA5dYAAOXYAADl2gAA5dsAAOXcAADl3gAA5d8AAOXsAADl7QAA5e4AAOXwAADmLwAA5jEAAOYzAADmNQAA5jgAAOY5AADmOgAA5jsAAOY8AADmPgAA5kAAAOZBAADmQgAA5kQAAOZFAADmhAAA5oYAAOaIAADmigAA5o0AAOaOAADmjwAA5pAAAOaRAADmkwAA5pUAAOaWAADmlwAA5pkAAOaaAADm2QAA5tsAAObdAADm3wAA5uIAAObjAADm5AAA5uUAAObmAADm6AAA5uoAAObrAADm7AAA5u4AAObvAADnLgAA5zAAAOcyAADnNAAA5zcAAOc4AADnOQAA5zoAAOc7AADnPQAA5z8AAOdAAADnQQAA50MAAOdEAADngwAA54UAAOeHAADniQAA54wAAOeNAADnjgAA548AAOeQAADnkgAA55QAAOeVAADnlgAA55gAAOeZAADnvgAA5+IAAOgJAADoLQAA6DAAAOgyAADoNAAA6DYAAOg4AADoOgAA6DsAAOg+AADoSwAA6FoAAOhcAADoXgAA6GAAAOhiAADoZAAA6GYAAOhoAADodwAA6HoAAOh9AADogAAA6IMAAOiGAADoiQAA6IwAAOiOAADozQAA6M8AAOjRAADo0wAA6NYAAOjXAADo2AAA6NkAAOjaAADo3AAA6N4AAOjfAADo4AAA6OIAAOjjAADpIgAA6SQAAOkmAADpKAAA6SsAAOksAADpLQAA6S4AAOkvAADpMQAA6TMAAOk0AADpNQAA6TcAAOk4AADpdwAA6XkAAOl7AADpfQAA6YAAAOmBAADpggAA6YMAAOmEAADphgAA6YgAAOmJAADpigAA6YwAAOmNAADpzAAA6c4AAOnRAADp0wAA6dYAAOnXAADp2AAA6dkAAOnaAADp3AAA6d4AAOnfAADp4AAA6eIAAOnjAADqIgAA6iQAAOomAADqKAAA6isAAOosAADqLQAA6i4AAOovAADqMQAA6jMAAOo0AADqNQAA6jcAAOo4AADqdwAA6nkAAOp7AADqfQAA6oAAAOqBAADqggAA6oMAAOqEAADqhgAA6ogAAOqJAADqigAA6owAAOqNAADqzAAA6s4AAOrQAADq0gAA6tUAAOrWAADq1wAA6tgAAOrZAADq2wAA6t0AAOreAADq3wAA6uEAAOriAADq6wAA6uwAAOruAADrLQAA6y8AAOsxAADrMwAA6zYAAOs3AADrOAAA6zkAAOs6AADrPAAA6z4AAOs/AADrQAAA60IAAOtDAADrggAA64QAAOuGAADriAAA64sAAOuMAADrjQAA644AAOuPAADrkQAA65MAAOuUAADrlQAA65cAAOuYAADr1wAA69kAAOvcAADr3gAA6+EAAOviAADr4wAA6+QAAOvlAADr5wAA6+kAAOvqAADr6wAA6+0AAOvuAADsOQAA7FwAAOx8AADsnAAA7J4AAOygAADsogAA7KQAAOymAADspwAA7KgAAOyrAADsrAAA7K4AAOyvAADssQAA7LMAAOy0AADstQAA7LgAAOy5AADsvgAA7MsAAOzQAADs0gAA7NQAAOzZAADs3AAA7N8AAOzhAADtBgAA7SoAAO1RAADtdQAA7XgAAO16AADtfAAA7X4AAO2AAADtggAA7YMAAO2GAADtkwAA7aQAAO2mAADtqAAA7aoAAO2sAADtrgAA7bAAAO2yAADttAAA7cUAAO3IAADtywAA7c4AAO3RAADt1AAA7dcAAO3aAADt3QAA7d8AAO4eAADuIAAA7iIAAO4kAADuJwAA7igAAO4pAADuKgAA7isAAO4tAADuLwAA7jAAAO4xAADuMwAA7jQAAO5zAADudQAA7ncAAO55AADufAAA7n0AAO5+AADufwAA7oAAAO6CAADuhAAA7oUAAO6GAADuiAAA7okAAO7IAADuygAA7s0AAO7PAADu0gAA7tMAAO7UAADu1QAA7tYAAO7YAADu2gAA7tsAAO7cAADu3gAA7t8AAO7sAADu7wAA7vIAAO71AADu+AAA7voAAO8UAADvGgAA71kAAO9bAADvXQAA718AAO9iAADvYwAA72QAAO9lAADvZgAA72gAAO9qAADvawAA72wAAO9uAADvbwAA764AAO+wAADvsgAA77QAAO+3AADvuAAA77kAAO+6AADvuwAA770AAO+/AADvwAAA78EAAO/DAADvxAAA8AMAAPAFAADwBwAA8AkAAPAMAADwDQAA8A4AAPAPAADwEAAA8BIAAPAUAADwFQAA8BYAAPAYAADwGQAA8FgAAPBaAADwXAAA8F4AAPBhAADwYgAA8GMAAPBkAADwZQAA8GcAAPBpAADwagAA8GsAAPBtAADwbgAA8K0AAPCvAADwsQAA8LMAAPC2AADwtwAA8LgAAPC5AADwugAA8LwAAPC+AADwvwAA8MAAAPDCAADwwwAA8OgAAPEMAADxMwAA8VcAAPFaAADxXAAA8V4AAPFgAADxYgAA8WQAAPFlAADxaAAA8XUAAPGEAADxhgAA8YgAAPGKAADxjAAA8Y4AAPGQAADxkgAA8aEAAPGkAADxpwAA8aoAAPGtAADxsAAA8bMAAPG2AADxuAAA8fcAAPH5AADx+wAA8f0AAPIAAADyAQAA8gIAAPIDAADyBAAA8gYAAPIIAADyCQAA8goAAPIMAADyDQAA8kwAAPJOAADyUAAA8lIAAPJVAADyVgAA8lcAAPJYAADyWQAA8lsAAPJdAADyXgA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BDpoAAQ6dAAEOnwABDqEAAQ6jAAEOpQABDqcAAQ6oAAEOqwABDrgAAQ7JAAEOywABDs0AAQ7PAAEO0QABDtMAAQ7VAAEO1wABDtkAAQ7qAAEO7QABDvAAAQ7zAAEO9gABDvkAAQ78AAEO/wABDwIAAQ8EAAEPQwABD0UAAQ9HAAEPSQABD0wAAQ9NAAEPTgABD08AAQ9QAAEPUgABD1QAAQ9VAAEPVgABD1gAAQ9ZAAEPmAABD5oAAQ+cAAEPngABD6EAAQ+iAAEPowABD6QAAQ+lAAEPpwABD6kAAQ+qAAEPqwABD60AAQ+uAAEP7QABD+8AAQ/yAAEP9AABD/cAAQ/4AAEP+QABD/oAAQ/7AAEP/QABD/8AARAAAAEQAQABEAMAARAEAAEQEQABEBIAARATAAEQFQABEFQAARBWAAEQWAABEFoAARBdAAEQXgABEF8AARBgAAEQYQABEGMAARBlAAEQZgABEGcAARBpAAEQagABEKkAARCrAAEQrQABEK8AARCyAAEQswABELQAARC1AAEQtgABELgAARC6AAEQuwABELwAARC+AAEQvwABEP4AAREAAAERAgABEQQAAREHAAERCAABEQkAAREKAAERCwABEQ0AAREPAAEREAABEREAARETAAERFAABEVMAARFVAAERVwABEVkAARFcAAERXQABEV4AARFfAAERYAABEWIAARFkAAERZQABEWYAARFoAAERaQABEagAARGqAAERrAABEa4AARGxAAERsgABEbMAARG0AAERtQABEbcAARG5AAERugABEbsAARG9AAERvgABEeMAARIHAAESLgABElIAARJVAAESVwABElkAARJbAAESXQABEl8AARJgAAESYwABEnAAARJ/AAESgQABEoMAARKFAAEShwABEokAARKLAAESjQABEpwAARKfAAESogABEqUAARKoAAESqwABEq4AARKxAAESswABEvIAARL0AAES9gABEvgAARL7AAES/AABEv0AARL+AAES/wABEwEAARMDAAETBAABEwUAARMHAAETCAABE0cAARNJAAETSwABE00AARNQAAETUQABE1IAARNTAAETVAABE1YAARNYAAETWQABE1oAARNcAAETXQABE5wAAROeAAEToAABE6IAAROlAAETpgABE6cAAROoAAETqQABE6sAAROtAAETrgABE68AAROxAAETsgABE/EAARPzAAET9gABE/gAARP7AAET/AABE/0AARP+AAET/wABFAEAARQDAAEUBAABFAUAARQHAAEUCAABFEcAARRJAAEUSwABFE0AARRQAAEUUQABFFIAARRTAAEUVAABFFYAARRYAAEUWQABFFoAARRcAAEUXQABFJwAARSeAAEUoAABFKIAARSlAAEUpgABFKcAARSoAAEUqQABFKsAARStAAEUrgABFK8AARSxAAEUsgABFPEAARTzAAEU9QABFPcAART6AAEU+wABFPwAART9AAEU/gABFQAAARUCAAEVAwABFQQAARUGAAEVBwABFVIAARV1AAEVlQABFbUAARW3AAEVuQABFbsAARW9AAEVvwABFcAAARXBAAEVxAABFcUAARXHAAEVyAABFcoAARXMAAEVzQABFc4AARXRAAEV0gABFdcAARXkAAEV6QABFesAARXtAAEV8gABFfUAARX4AAEV+gABFh8AARZDAAEWagABFo4AARaRAAEWkwABFpUAARaXAAEWmQABFpsAARacAAEWnwABFqwAARa9AAEWvwABFsEAARbDAAEWxQABFscAARbJAAEWywABFs0AARbeAAEW4QABFuQAARbnAAEW6gABFu0AARbwAAEW8wABFvYAARb4AAEXNwABFzkAARc7AAEXPQABF0AAARdBAAEXQgABF0MAARdEAAEXRgABF0gAARdJAAEXSgABF0wAARdNAAEXjAABF44AAReQAAEXkgABF5UAAReWAAEXlwABF5gAAReZAAEXmwABF50AAReeAAEXnwABF6EAAReiAAEX4QABF+MAARfmAAEX6AABF+sAARfsAAEX7QABF+4AARfvAAEX8QABF/MAARf0AAEX9QABF/cAARf4AAEYBQABGAYAARgHAAEYCQABGEgAARhKAAEYTAABGE4AARhRAAEYUgABGFMAARhUAAEYVQABGFcAARhZAAEYWgABGFsAARhdAAEYXgABGJ0AARifAAEYoQABGKMAARimAAEYpwABGKgAARipAAEYqgABGKwAARiuAAEYrwABGLAAARiyAAEYswABGPIAARj0AAEY9gABGPgAARj7AAEY/AABGP0AARj+AAEY/wABGQEAARkDAAEZBAABGQUAARkHAAEZCAABGUcAARlJAAEZSwABGU0AARlQAAEZUQABGVIAARlTAAEZVAABGVYAARlYAAEZWQABGVoAARlcAAEZXQABGZwAARmeAAEZoAABGaIAARmlAAEZpgABGacAARmoAAEZqQABGasAARmtAAEZrgABGa8AARmxAAEZsgABGdcAARn7AAEaIgABGkYAARpJAAEaSwABGk0AARpPAAEaUQABGlMAARpUAAEaVwABGmQAARpzAAEadQABGncAARp5AAEaewABGn0AARp/AAEagQABGpAAARqTAAEalgABGpkAARqcAAEanwABGqIAARqlAAEapwABGuYAARroAAEa6gABGuwAARrvAAEa8AABGvEAARryAAEa8wABGvUAARr3AAEa+AABGvkAARr7AAEa/AABGzsAARs9AAEbPwABG0EAARtEAAEbRQABG0YAARtHAAEbSAABG0oAARtMAAEbTQABG04AARtQAAEbUQABG5AAARuSAAEblAABG5YAARuZAAEbmgABG5sAARucAAEbnQABG58AARuhAAEbogABG6MAARulAAEbpgABG+UAARvnAAEb6gABG+wAARvvAAEb8AABG/EAARvyAAEb8wABG/UAARv3AAEb+AABG/kAARv7AAEb/AABHDsAARw9AAEcPwABHEEAARxEAAEcRQABHEYAARxHAAEcSAABHEoAARxMAAEcTQABHE4AARxQAAEcUQABHJAAARySAAEclAABHJYAARyZAAEcmgABHJsAARycAAEcnQABHJ8AARyhAAEcogABHKMAARylAAEcpgABHOUAARznAAEc6QABHOsAARzuAAEc7wABHPAAARzxAAEc8gABHPQAARz2AAEc9wABHPgAARz6AAEc+wABHUYAAR1pAAEdiQABHakAAR2rAAEdrQABHa8AAR2xAAEdswABHbQAAR21AAEduAABHbkAAR27AAEdvAABHb4AAR3AAAEdwQABHcIAAR3FAAEdxgABHcsAAR3YAAEd3QABHd8AAR3hAAEd5gABHekAAR3sAAEd7gABHhMAAR43AAEeXgABHoIAAR6FAAEehwABHokAAR6LAAEejQABHo8AAR6QAAEekwABHqAAAR6xAAEeswABHrUAAR63AAEeuQABHrsAAR69AAEevwABHsEAAR7SAAEe1QABHtgAAR7bAAEe3gABHuEAAR7kAAEe5wABHuoAAR7sAAEfKwABHy0AAR8vAAEfMQABHzQAAR81AAEfNgABHzcAAR84AAEfOgABHzwAAR89AAEfPgABH0AAAR9BAAEfgAABH4IAAR+EAAEfhgABH4kAAR+KAAEfiwABH4wAAR+NAAEfjwABH5EAAR+SAAEfkwABH5UAAR+WAAEf1QABH9cAAR/aAAEf3AABH98AAR/gAAEf4QABH+IAAR/jAAEf5QABH+cAAR/oAAEf6QABH+sAAR/sAAEf+QABH/wAAR//AAEgAgABIAUAASAHAAEgIQABIGAAASBiAAEgZAABIGYAASBpAAEgagABIGsAASBsAAEgbQABIG8AASBxAAEgcgABIHMAASB1AAEgdgABILUAASC3AAEguQABILsAASC+AAEgvwABIMAAASDBAAEgwgABIMQAASDGAAEgxwABIMgAASDKAAEgywABIQoAASEMAAEhDgABIRAAASETAAEhFAABIRUAASEWAAEhFwABIRkAASEbAAEhHAABIR0AASEfAAEhIAABIV8AASFhAAEhYwABIWUAASFoAAEhaQABIWoAASFrAAEhbAABIW4AASFwAAEhcQABIXIAASF0AAEhdQABIbQAASG2AAEhuAABIboAASG9AAEhvgABIb8AASHAAAEhwQABIcMAASHFAAEhxgABIccAASHJAAEhygABIe8AASITAAEiOgABIl4AASJhAAEiYwABImUAASJnAAEiaQABImsAASJsAAEibwABInwAASKLAAEijQABIo8AASKRAAEikwABIpUAASKXAAEimQABIqgAASKrAAEirgABIrEAASK0AAEitwABIroAASK9AAEivwABIv4AASMAAAEjAgABIwQAASMHAAEjCAABIwkAASMKAAEjCwABIw0AASMPAAEjEAABIxEAASMTAAEjFAABI1MAASNVAAEjVwABI1kAASNcAAEjXQABI14AASNfAAEjYAABI2IAASNkAAEjZQABI2YAASNoAAEjaQABI6gAASOqAAEjrAABI64AASOxAAEjsgABI7MAASO0AAEjtQABI7cAASO5AAEjugABI7sAASO9AAEjvgABI/0AASP/AAEkAgABJAQAASQHAAEkCAABJAkAASQKAAEkCwABJA0AASQPAAEkEAABJBEAASQTAAEkFAABJFMAASRVAAEkVwABJFkAASRcAAEkXQABJF4AASRfAAEkYAABJGIAASRkAAEkZQABJGYAASRoAAEkaQABJKgAASSqAAEkrAABJK4AASSxAAEksgABJLMAASS0AAEktQABJLcAASS5AAEkugABJLsAASS9AAEkvgABJP0AAST/AAElAQABJQMAASUGAAElBwABJQgAASUJAAElCgABJQwAASUOAAElDwABJRAAASUSAAElEwABJV4AASWBAAEloQABJcEAASXDAAElxQABJccAASXJAAElywABJcwAASXNAAEl0AABJdEAASXTAAEl1AABJdYAASXYAAEl2QABJdoAASXdAAEl3gABJeMAASXwAAEl9QABJfcAASX5AAEl/gABJgEAASYEAAEmBgABJisAASZPAAEmdgABJpoAASadAAEmnwABJqEAASajAAEmpQABJqcAASaoAAEmqwABJrgAASbJAAEmywABJs0AASbPAAEm0QABJtMAASbVAAEm1wABJtkAASbqAAEm7QABJvAAASbzAAEm9gABJvkAASb8AAEm/wABJwIAAScEAAEnQwABJ0UAASdHAAEnSQABJ0wAASdNAAEnTgABJ08AASdQAAEnUgABJ1QAASdVAAEnVgABJ1gAASdZAAEnmAABJ5oAASecAAEnngABJ6EAASeiAAEnowABJ6QAASelAAEnpwABJ6kAASeqAAEnqwABJ60AASeuAAEn7QABJ+8AASfyAAEn9AABJ/cAASf4AAEn+QABJ/oAASf7AAEn/QABJ/8AASgAAAEoAQABKAMAASgEAAEoEQABKBQAASgXAAEoGgABKB0AASgfAAEoOgABKEgAASiHAAEoiQABKIsAASiNAAEokAABKJEAASiSAAEokwABKJQAASiWAAEomAABKJkAASiaAAEonAABKJ0AASjcAAEo3gABKOAAASjiAAEo5QABKOYAASjnAAEo6AABKOkAASjrAAEo7QABKO4AASjvAAEo8QABKPIAASkxAAEpMwABKTUAASk3AAEpOgABKTsAASk8AAEpPQABKT4AASlAAAEpQgABKUMAASlEAAEpRgABKUcAASmGAAEpiAABKYoAASmMAAEpjwABKZAAASmRAAEpkgABKZMAASmVAAEplwABKZgAASmZAAEpmwABKZwAASnbAAEp3QABKd8AASnhAAEp5AABKeUAASnmAAEp5wABKegAASnqAAEp7AABKe0AASnuAAEp8AABKfEAASoWAAEqOgABKmEAASqFAAEqiAABKooAASqMAAEqjgABKpAAASqSAAEqkwABKpYAASqjAAEqsgABKrQAASq2AAEquAABKroAASq8AAEqvgABKsAAASrPAAEq0gABKtUAASrYAAEq2wABKt4AASrhAAEq5AABKuYAASslAAErJwABKyoAASssAAErLwABKzAAASsxAAErMgABKzMAASs1AAErNwABKzgAASs5AAErOwABKzwAASs+AAErfQABK38AASuBAAErgwABK4YAASuHAAEriAABK4kAASuKAAErjAABK44AASuPAAErkAABK5IAASuTAAEr0gABK9QAASvWAAEr2AABK9sAASvcAAEr3QABK94AASvfAAEr4QABK+MAASvkAAEr5QABK+cAASvoAAEsJwABLCkAASwrAAEsLQABLDAAASwxAAEsMgABLDMAASw0AAEsNgABLDgAASw5AAEsOgABLDwAASw9AAEsfAABLH4AASyAAAEsggABLIUAASyGAAEshwABLIgAASyJAAEsiwABLI0AASyOAAEsjwABLJEAASySAAEs0QABLNMAASzVAAEs1wABLNoAASzbAAEs3AABLN0AASzeAAEs4AABLOIAASzjAAEs5AABLOYAASznAAEtJgABLSgAAS0qAAEtLAABLS8AAS0wAAEtMQABLTIAAS0zAAEtNQABLTcAAS04AAEtOQABLTsAAS08AAEthwABLaoAAS3KAAEt6gABLewAAS3uAAEt8AABLfIAAS30AAEt9QABLfYAAS35AAEt+gABLfwAAS39AAEt/wABLgEAAS4CAAEuAwABLgYAAS4HAAEuEAABLh0AAS4iAAEuJAABLiYAAS4rAAEuLgABLjEAAS4zAAEuWAABLnwAAS6jAAEuxwABLsoAAS7MAAEuzgABLtAAAS7SAAEu1AABLtUAAS7YAAEu5QABLvYAAS74AAEu+gABLvwAAS7+AAEvAAABLwIAAS8EAAEvBgABLxcAAS8aAAEvHQABLyAAAS8jAAEvJgABLykAAS8sAAEvLwABLzEAAS9wAAEvcgABL3QAAS92AAEveQABL3oAAS97AAEvfAABL30AAS9/AAEvgQABL4IAAS+DAAEvhQABL4YAAS/FAAEvxwABL8kAAS/LAAEvzgABL88AAS/QAAEv0QABL9IAAS/UAAEv1gABL9cAAS/YAAEv2gABL9sAATAaAAEwHAABMB8AATAhAAEwJAABMCUAATAmAAEwJwABMCgAATAqAAEwLAABMC0AATAuAAEwMAABMDEAATA+AAEwPwABMEAAATBCAAEwgQABMIMAATCFAAEwhwABMIoAATCLAAEwjAABMI0AATCOAAEwkAABMJIAATCTAAEwlAABMJYAATCXAAEw1gABMNgAATDaAAEw3AABMN8AATDgAAEw4QABMOIAATDjAAEw5QABMOcAATDoAAEw6QABMOsAATDsAAExKwABMS0AATEvAAExMQABMTQAATE1AAExNgABMTcAATE4AAExOgABMTwAATE9AAExPgABMUAAATFBAAExgAABMYIAATGEAAExhgABMYkAATGKAAExiwABMYwAATGNAAExjwABMZEAATGSAAExkwABMZUAATGWAAEx1QABMdcAATHZAAEx2wABMd4AATHfAAEx4AABMeEAATHiAAEx5AABMeYAATHnAAEx6AABMeoAATHrAAEyEAABMjQAATJbAAEyfwABMoIAATKEAAEyhgABMogAATKKAAEyjAABMo0AATKQAAEynQABMqwAATKuAAEysAABMrIAATK0AAEytgABMrgAATK6AAEyyQABMswAATLPAAEy0gABMtUAATLYAAEy2wABMt4AATLgAAEzHwABMyEAATMjAAEzJQABMygAATMpAAEzKgABMysAATMsAAEzLgABMzAAATMxAAEzMgABMzQAATM1AAEzdAABM3YAATN4AAEzegABM30AATN+AAEzfwABM4AAATOBAAEzgwABM4UAATOGAAEzhwABM4kAATOKAAEzyQABM8sAATPNAAEzzwABM9IAATPTAAEz1AABM9UAATPWAAEz2AABM9oAATPbAAEz3AABM94AATPfAAE0HgABNCAAATQjAAE0JQABNCgAATQpAAE0KgABNCsAATQsAAE0LgABNDAAATQxAAE0MgABNDQAATQ1AAE0dAABNHYAATR4AAE0egABNH0AATR+AAE0fwABNIAAATSBAAE0gwABNIUAATSGAAE0hwABNIkAATSKAAE0yQABNMsAATTNAAE0zwABNNIAATTTAAE01AABNNUAATTWAAE02AABNNoAATTbAAE03AABNN4AATTfAAE1HgABNSAAATUiAAE1JAABNScAATUoAAE1KQABNSoAATUrAAE1LQABNS8AATUwAAE1MQABNTMAATU0AAE1PQABNT4AATVAAAE1gwABNacAATXLAAE17gABNhUAATY1AAE2XAABNoMAATajAAE2xwABNusAATbtAAE28AABNvIAATb0AAE29gABNvkAATb7AAE2/QABNv8AATcBAAE3AwABNwUAATcIAAE3CwABNwwAATcVAAE3IgABNyUAATcnAAE3KgABNy0AATcvAAE3VAABN3gAATefAAE3wwABN8YAATfIAAE3ygABN8wAATfOAAE30AABN9EAATfUAAE34QABN/QAATf2AAE3+AABN/oAATf8AAE3/gABOAAAATgCAAE4BAABOAYAATgZAAE4HAABOB8AATgiAAE4JQABOCgAATgrAAE4LgABODEAATg0AAE4NgABOHUAATh3AAE4egABOHwAATh/AAE4gAABOIEAATiCAAE4gwABOIUAATiHAAE4iAABOIkAATiLAAE4jAABOJUAATiWAAE4mAABONcAATjZAAE42wABON0AATjgAAE44QABOOIAATjjAAE45AABOOYAATjoAAE46QABOOoAATjsAAE47QABOSwAATkuAAE5MQABOTMAATk2AAE5NwABOTgAATk5AAE5OgABOTwAATk+AAE5PwABOUAAATlCAAE5QwABOUwAATlPAAE5UgABOVQAATldAAE5YgABOWQAATlmAAE5aAABOacAATmpAAE5qwABOa0AATmwAAE5sQABObIAATmzAAE5tAABObYAATm4AAE5uQABOboAATm8AAE5vQABOfwAATn+AAE6AQABOgMAAToGAAE6BwABOggAAToJAAE6CgABOgwAAToOAAE6DwABOhAAAToSAAE6EwABOhwAATodAAE6HwABOl4AATpgAAE6YgABOmQAATpnAAE6aAABOmkAATpqAAE6awABOm0AATpvAAE6cAABOnEAATpzAAE6dAABOrMAATq1AAE6uAABOroAATq9AAE6vgABOr8AATrAAAE6wQABOsMAATrFAAE6xgABOscAATrJAAE6ygABOtcAATrYAAE62QABOtsAATsaAAE7HAABOx4AATsgAAE7IwABOyQAATslAAE7JgABOycAATspAAE7KwABOywAATstAAE7LwABOzAAATtvAAE7cQABO3QAATt2AAE7eQABO3oAATt7AAE7fAABO30AATt/AAE7gQABO4IAATuDAAE7hQABO4YAATuVAAE7ogABO68AATuyAAE7tAABO7YAATu4AAE7ugABO70AATvKAAE7zQABO9AAATvTAAE71gABO9kAATvcAAE73gABO+kAATwDAAE8TgABPHEAATyRAAE8sQABPLMAATy1AAE8twABPLkAATy8AAE8vQABPL4AATzBAAE8wgABPMQAATzFAAE8xwABPMoAATzLAAE8zAABPM8AATzQAAE81QABPOIAATznAAE86QABPOsAATzwAAE88wABPPYAATz4AAE9HQABPUEAAT1oAAE9jAABPY8AAT2RAAE9kwABPZUAAT2XAAE9mQABPZoAAT2dAAE9qgABPbsAAT29AAE9vwABPcEAAT3DAAE9xQABPccAAT3JAAE9ywABPdwAAT3fAAE94gABPeUAAT3oAAE96wABPe4AAT3xAAE99AABPfYAAT41AAE+NwABPjkAAT47AAE+PgABPj8AAT5AAAE+QQABPkIAAT5EAAE+RgABPkcAAT5IAAE+SgABPksAAT6KAAE+jAABPo4AAT6QAAE+kwABPpQAAT6VAAE+lgABPpcAAT6ZAAE+mwABPpwAAT6dAAE+nwABPqAAAT7fAAE+4QABPuQAAT7mAAE+6QABPuoAAT7rAAE+7AABPu0AAT7vAAE+8QABPvIAAT7zAAE+9QABPvYAAT8DAAE/BAABPwUAAT8HAAE/RgABP0gAAT9KAAE/TAABP08AAT9QAAE/UQABP1IAAT9TAAE/VQABP1cAAT9YAAE/WQABP1sAAT9cAAE/mwABP50AAT+fAAE/oQABP6QAAT+lAAE/pgABP6cAAT+oAAE/qgABP6wAAT+tAAE/rgABP7AAAT+xAAE/8AABP/IAAT/0AAE/9gABP/kAAT/6AAE/+wABP/wAAT/9AAE//wABQAEAAUACAAFAAwABQAUAAUAGAAFARQABQEcAAUBJAAFASwABQE4AAUBPAAFAUAABQFEAAUBSAAFAVAABQFYAAUBXAAFAWAABQFoAAUBbAAFAmgABQJwAAUCeAAFAoAABQKMAAUCkAAFApQABQKYAAUCnAAFAqQABQKsAAUCsAAFArQABQK8AAUCwAAFA1QABQPkAAUEgAAFBRAABQUcAAUFJAAFBSwABQU0AAUFPAAFBUQABQVIAAUFVAAFBYgABQXEAAUFzAAFBdQABQXcAAUF5AAFBewABQX0AAUF/AAFBjgABQZEAAUGUAAFBlwABQZoAAUGdAAFBoAABQaMAAUGlAAFB5AABQeYAAUHpAAFB6wABQe4AAUHvAAFB8AABQfEAAUHyAAFB9AABQfYAAUH3AAFB+AABQfoAAUH7AAFB/gABQj0AAUI/AAFCQQABQkMAAUJGAAFCRwABQkgAAUJJAAFCSgABQkwAAUJOAAFCTwABQlAAAUJSAAFCUwABQpIAAUKUAAFClgABQpgAAUKbAAFCnAABQp0AAUKeAAFCnwABQqEAAUKjAAFCpAABQqUAAUKnAAFCqAABQucAAULpAAFC7AABQu4AAULxAAFC8gABQvMAAUL0AAFC9QABQvcAAUL5AAFC+gABQvsAAUL9AAFC/gABQz0AAUM/AAFDQQABQ0MAAUNGAAFDRwABQ0gAAUNJAAFDSgABQ0wAAUNOAAFDTwABQ1AAAUNSAAFDUwABQ5IAAUOUAAFDlgABQ5gAAUObAAFDnAABQ50AAUOeAAFDnwABQ6EAAUOjAAFDpAABQ6UAAUOnAAFDqAABQ+cAAUPpAAFD6wABQ+0AAUPwAAFD8QABQ/IAAUPzAAFD9AABQ/YAAUP4AAFD+QABQ/oAAUP8AAFD/QABREgAAURrAAFEiwABRKsAAUStAAFErwABRLEAAUSzAAFEtgABRLcAAUS4AAFEuwABRLwAAUS+AAFEvwABRMEAAUTDAAFExAABRMUAAUTIAAFEyQABRM4AAUTbAAFE4AABROIAAUTkAAFE6QABROwAAUTvAAFE8QABRRYAAUU6AAFFYQABRYUAAUWIAAFFigABRYwAAUWOAAFFkAABRZIAAUWTAAFFlgABRaMAAUW0AAFFtgABRbgAAUW6AAFFvAABRb4AAUXAAAFFwgABRcQAAUXVAAFF2AABRdsAAUXeAAFF4QABReQAAUXnAAFF6gABRe0AAUXvAAFGLgABRjAAAUYyAAFGNAABRjcAAUY4AAFGOQABRjoAAUY7AAFGPQABRj8AAUZAAAFGQQABRkMAAUZEAAFGgwABRoUAAUaHAAFGiQABRowAAUaNAAFGjgABRo8AAUaQAAFGkgABRpQAAUaVAAFGlgABRpgAAUaZAAFG2AABRtoAAUbdAAFG3wABRuIAAUbjAAFG5AABRuUAAUbmAAFG6AABRuoAAUbrAAFG7AABRu4AAUbvAAFG/AABRv8AAUcCAAFHBQABRwcAAUcJAAFHIwABR2IAAUdkAAFHZgABR2gAAUdrAAFHbAABR20AAUduAAFHbwABR3EAAUdzAAFHdAABR3UAAUd3AAFHeAABR7cAAUe5AAFHuwABR70AAUfAAAFHwQABR8IAAUfDAAFHxAABR8YAAUfIAAFHyQABR8oAAUfMAAFHzQABSAwAAUgOAAFIEAABSBIAAUgVAAFIFgABSBcAAUgYAAFIGQABSBsAAUgdAAFIHgABSB8AAUghAAFIIgABSGEAAUhjAAFIZQABSGcAAUhqAAFIawABSGwAAUhtAAFIbgABSHAAAUhyAAFIcwABSHQAAUh2AAFIdwABSLYAAUi4AAFIugABSLwAAUi/AAFIwAABSMEAAUjCAAFIwwABSMUAAUjHAAFIyAABSMkAAUjLAAFIzAABSPEAAUkVAAFJPAABSWAAAUljAAFJZQABSWcAAUlpAAFJawABSW0AAUluAAFJcQABSX4AAUmNAAFJjwABSZEAAUmTAAFJlQABSZcAAUmZAAFJmwABSaoAAUmtAAFJsAABSbMAAUm2AAFJuQABSbwAAUm/AAFJwQABSgAAAUoCAAFKBAABSgYAAUoJAAFKCgABSgsAAUoMAAFKDQABSg8AAUoRAAFKEgABShMAAUoVAAFKFgABSlUAAUpXAAFKWQABSlsAAUpeAAFKXwABSmAAAUphAAFKYgABSmQAAUpmAAFKZwABSmgAAUpqAAFKawABSqoAAUqsAAFKrgABSrAAAUqzAAFKtAABSrUAAUq2AAFKtwABSrkAAUq7AAFKvAABSr0AAUq/AAFKwAABSv8AAUsBAAFLAwABSwUAAUsIAAFLCQABSwoAAUsLAAFLDAABSw4AAUsQAAFLEQABSxIAAUsUAAFLFQABS1QAAUtWAAFLWAABS1oAAUtdAAFLXgABS18AAUtgAAFLYQABS2MAAUtlAAFLZgABS2cAAUtpAAFLagABS6kAAUurAAFLrQABS68AAUuyAAFLswABS7QAAUu1AAFLtgABS7gAAUu6AAFLuwABS7wAAUu+AAFLvwABS/4AAUwAAAFMAgABTAQAAUwHAAFMCAABTAkAAUwKAAFMCwABTA0AAUwPAAFMEAABTBEAAUwTAAFMFAABTF8AAUyCAAFMogABTMIAAUzEAAFMxgA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BV7MAAVe1AAFXtgABV7cAAVe5AAFXugABV/kAAVf7AAFX/QABV/8AAVgCAAFYAwABWAQAAVgFAAFYBgABWAgAAVgKAAFYCwABWAwAAVgOAAFYDwABWE4AAVhQAAFYUgABWFQAAVhXAAFYWAABWFkAAVhaAAFYWwABWF0AAVhfAAFYYAABWGEAAVhjAAFYZAABWKMAAVilAAFYpwABWKkAAVisAAFYrQABWK4AAVivAAFYsAABWLIAAVi0AAFYtQABWLYAAVi4AAFYuQABWN4AAVkCAAFZKQABWU0AAVlQAAFZUgABWVQAAVlWAAFZWAABWVoAAVlbAAFZXgABWWsAAVl6AAFZfAABWX4AAVmAAAFZggABWYQAAVmGAAFZiAABWZcAAVmaAAFZnQABWaAAAVmjAAFZpgABWakAAVmsAAFZrgABWe0AAVnvAAFZ8QABWfMAAVn2AAFZ9wABWfgAAVn5AAFZ+gABWfwAAVn+AAFZ/wABWgAAAVoCAAFaAwABWkIAAVpEAAFaRgABWkgAAVpLAAFaTAABWk0AAVpOAAFaTwABWlEAAVpTAAFaVAABWlUAAVpXAAFaWAABWpcAAVqZAAFamwABWp0AAVqgAAFaoQABWqIAAVqjAAFapAABWqYAAVqoAAFaqQABWqoAAVqsAAFarQABWuwAAVruAAFa8QABWvMAAVr2AAFa9wABWvgAAVr5AAFa+gABWvwAAVr+AAFa/wABWwAAAVsCAAFbAwABW0IAAVtEAAFbRgABW0gAAVtLAAFbTAABW00AAVtOAAFbTwABW1EAAVtTAAFbVAABW1UAAVtXAAFbWAABW5cAAVuZAAFbmwABW50AAVugAAFboQABW6IAAVujAAFbpAABW6YAAVuoAAFbqQABW6oAAVusAAFbrQABW+wAAVvuAAFb8AABW/IAAVv1AAFb9gABW/cAAVv4AAFb+QABW/sAAVv9AAFb/gABW/8AAVwBAAFcAgABXE0AAVxwAAFckAABXLAAAVyyAAFctAABXLYAAVy4AAFcuwABXLwAAVy9AAFcwAABXMEAAVzDAAFcxAABXMYAAVzIAAFcyQABXMoAAVzNAAFczgABXNMAAVzgAAFc5QABXOcAAVzpAAFc7gABXPEAAVz0AAFc9gABXRsAAV0/AAFdZgABXYoAAV2NAAFdjwABXZEAAV2TAAFdlQABXZcAAV2YAAFdmwABXagAAV25AAFduwABXb0AAV2/AAFdwQABXcMAAV3FAAFdxwABXckAAV3aAAFd3QABXeAAAV3jAAFd5gABXekAAV3sAAFd7wABXfIAAV30AAFeMwABXjUAAV43AAFeOQABXjwAAV49AAFePgABXj8AAV5AAAFeQgABXkQAAV5FAAFeRgABXkgAAV5JAAFeiAABXooAAV6MAAFejgABXpEAAV6SAAFekwABXpQAAV6VAAFelwABXpkAAV6aAAFemwABXp0AAV6eAAFe3QABXt8AAV7iAAFe5AABXucAAV7oAAFe6QABXuoAAV7rAAFe7QABXu8AAV7wAAFe8QABXvMAAV70AAFfAQABXwIAAV8DAAFfBQABX0QAAV9GAAFfSAABX0oAAV9NAAFfTgABX08AAV9QAAFfUQABX1MAAV9VAAFfVgABX1cAAV9ZAAFfWgABX5kAAV+bAAFfnQABX58AAV+iAAFfowABX6QAAV+lAAFfpgABX6gAAV+qAAFfqwABX6wAAV+uAAFfrwABX+4AAV/wAAFf8gABX/QAAV/3AAFf+AABX/kAAV/6AAFf+wABX/0AAV//AAFgAAABYAEAAWADAAFgBAABYEMAAWBFAAFgRwABYEkAAWBMAAFgTQABYE4AAWBPAAFgUAABYFIAAWBUAAFgVQABYFYAAWBYAAFgWQABYJgAAWCaAAFgnAABYJ4AAWChAAFgogABYKMAAWCkAAFgpQABYKcAAWCpAAFgqgABYKsAAWCtAAFgrgABYNMAAWD3AAFhHgABYUIAAWFFAAFhRwABYUkAAWFLAAFhTQABYU8AAWFQAAFhUwABYWAAAWFvAAFhcQABYXMAAWF1AAFhdwABYXkAAWF7AAFhfQABYYwAAWGPAAFhkgABYZUAAWGYAAFhmwABYZ4AAWGhAAFhowABYeIAAWHkAAFh5gABYegAAWHrAAFh7AABYe0AAWHuAAFh7wABYfEAAWHzAAFh9AABYfUAAWH3AAFh+AABYjcAAWI5AAFiOwABYj0AAWJAAAFiQQABYkIAAWJDAAFiRAABYkYAAWJIAAFiSQABYkoAAWJMAAFiTQABYowAAWKOAAFikAABYpIAAWKVAAFilgABYpcAAWKYAAFimQABYpsAAWKdAAFingABYp8AAWKhAAFiogABYuEAAWLjAAFi5gABYugAAWLrAAFi7AABYu0AAWLuAAFi7wABYvEAAWLzAAFi9AABYvUAAWL3AAFi+AABYzcAAWM5AAFjOwABYz0AAWNAAAFjQQABY0IAAWNDAAFjRAABY0YAAWNIAAFjSQABY0oAAWNMAAFjTQABY4wAAWOOAAFjkAABY5IAAWOVAAFjlgABY5cAAWOYAAFjmQABY5sAAWOdAAFjngABY58AAWOhAAFjogABY+EAAWPjAAFj5QABY+cAAWPqAAFj6wABY+wAAWPtAAFj7gABY/AAAWPyAAFj8wABY/QAAWP2AAFj9wABZEIAAWRlAAFkhQABZKUAAWSnAAFkqQABZKsAAWStAAFksAABZLEAAWSyAAFktQABZLYAAWS4AAFkuQABZLsAAWS+AAFkvwABZMAAAWTDAAFkxAABZM0AAWTaAAFk3wABZOEAAWTjAAFk6AABZOsAAWTuAAFk8AABZRUAAWU5AAFlYAABZYQAAWWHAAFliQABZYsAAWWNAAFljwABZZEAAWWSAAFllQABZaIAAWWzAAFltQABZbcAAWW5AAFluwABZb0AAWW/AAFlwQABZcMAAWXUAAFl1wABZdoAAWXdAAFl4AABZeMAAWXmAAFl6QABZewAAWXuAAFmLQABZi8AAWYxAAFmMwABZjYAAWY3AAFmOAABZjkAAWY6AAFmPAABZj4AAWY/AAFmQAABZkIAAWZDAAFmggABZoQAAWaGAAFmiAABZosAAWaMAAFmjQABZo4AAWaPAAFmkQABZpMAAWaUAAFmlQABZpcAAWaYAAFm1wABZtkAAWbcAAFm3gABZuEAAWbiAAFm4wABZuQAAWblAAFm5wABZukAAWbqAAFm6wABZu0AAWbuAAFm+wABZv4AAWcBAAFnBAABZwcAAWcJAAFnJAABZ0MAAWeCAAFnhAABZ4YAAWeIAAFniwABZ4wAAWeNAAFnjgABZ48AAWeRAAFnkwABZ5QAAWeVAAFnlwABZ5gAAWfXAAFn2QABZ9sAAWfdAAFn4AABZ+EAAWfiAAFn4wABZ+QAAWfmAAFn6AABZ+kAAWfqAAFn7AABZ+0AAWgsAAFoLgABaDAAAWgyAAFoNQABaDYAAWg3AAFoOAABaDkAAWg7AAFoPQABaD4AAWg/AAFoQQABaEIAAWiBAAFogwABaIUAAWiHAAFoigABaIsAAWiMAAFojQABaI4AAWiQAAFokgABaJMAAWiUAAFolgABaJcAAWjWAAFo2AABaNoAAWjcAAFo3wABaOAAAWjhAAFo4gABaOMAAWjlAAFo5wABaOgAAWjpAAFo6wABaOwAAWkRAAFpNQABaVwAAWmAAAFpgwABaYUAAWmHAAFpiQABaYsAAWmNAAFpjgABaZEAAWmeAAFprQABaa8AAWmxAAFpswABabUAAWm3AAFpuQABabsAAWnKAAFpzQABadAAAWnTAAFp1gABadkAAWncAAFp3wABaeEAAWogAAFqIgABaiQAAWomAAFqKQABaioAAWorAAFqLAABai0AAWovAAFqMQABajIAAWozAAFqNQABajYAAWp1AAFqdwABankAAWp7AAFqfgABan8AAWqAAAFqgQABaoIAAWqEAAFqhgABaocAAWqIAAFqigABaosAAWrKAAFqzAABas4AAWrQAAFq0wABatQAAWrVAAFq1gABatcAAWrZAAFq2wABatwAAWrdAAFq3wABauAAAWsfAAFrIQABayMAAWslAAFrKAABaykAAWsqAAFrKwABaywAAWsuAAFrMAABazEAAWsyAAFrNAABazUAAWt0AAFrdgABa3gAAWt6AAFrfQABa34AAWt/AAFrgAABa4EAAWuDAAFrhQABa4YAAWuHAAFriQABa4oAAWvJAAFrywABa80AAWvPAAFr0gABa9MAAWvUAAFr1QABa9YAAWvYAAFr2gABa9sAAWvcAAFr3gABa98AAWweAAFsIAABbCIAAWwkAAFsJwABbCgAAWwpAAFsKgABbCsAAWwtAAFsLwABbDAAAWwxAAFsMwABbDQAAWw9AAFsPgABbEAAAWxNAAFsTgABbE8AAWxRAAFsXgABbF8AAWxgAAFsYgABbG8AAWxwAAFscQABbHMAAWx8AAFsiwABbJgAAWynAAFsuQABbM0AAWzkAAFs9gABbP8AAW0AAAFtAgABbQ8AAW0QAAFtEQABbRMAAW0XAAFtIAABbSoAAW0xAAFtOQABbUsAAW1QAAFtVQAAAAAAAAQCAAAAAAAANoAAAAAAAAAAAAAAAAAAAW1X + + + + + gameControllerInputType + + + + 1 + saveStates + + + + 1 + cheats + + + + identifier + + + + filename + + + + Game + Undefined + 3 + Game + 1 + + + + + + gameType + + + + code + + + + type + + + + 1 + gameCollections + + + + isEnabled + + + + isStandard + + + + GameCollection + Undefined + 1 + GameCollection + 1 + + + + + + YnBsaXN0MDDUAQIDBAUGSktYJHZlcnNpb25YJG9iamVjdHNZJGFyY2hpdmVyVCR0b3ASAAGGoK8Q +EwcIExQZGiInLC0wMTU6Oz5CRkhVJG51bGzVCQoLDA0ODxAREllOU09wZXJhbmReTlNTZWxlY3Rvck5hbWVfEBBOU0V4cHJlc3Npb25UeXBlW05TQXJndW1lbnRzViRjbGFzc4ADgAIQBIAGgBJfEBVtaWdyYXRlU2F2ZVN0YXRlVHlwZTrTFQsNFhcYWk5TVmFyaWFibGWABBACgAVcZW50aXR5UG9saWN50hscHR5aJGNsYXNzbmFtZVgkY2xhc3Nlc18QFE5TVmFyaWFibGVFeHByZXNzaW9uox8gIV8QFE5TVmFyaWFibGVFeHByZXNzaW9uXE5TRXhwcmVzc2lvblhOU09iamVjdNIjDSQmWk5TLm9iamVjdHOhJYAHgBHVCQoLDA0oKRAqK4AJgAiAC4AQXxAQdmFsdWVGb3JLZXlQYXRoOtMVCw0uFxiACoAFVnNvdXJjZdIjDTI0oTOADIAP0w0LNjc4OVlOU0tleVBhdGiADhAKgA1UdHlwZdIbHDw9XxAcTlNLZXlQYXRoU3BlY2lmaWVyRXhwcmVzc2lvbqM8ICHSGxw/QF5OU011dGFibGVBcnJheaM/QSFXTlNBcnJhedIbHENEXxATTlNLZXlQYXRoRXhwcmVzc2lvbqRDRSAhXxAUTlNGdW5jdGlvbkV4cHJlc3Npb27SGxxBR6JBIdIbHEVJo0UgIV8QD05TS2V5ZWRBcmNoaXZlctFMTVRyb290gAEACAARABoAIwAtADIANwBNAFMAXgBoAHcAigCWAJ0AnwChAKMApQCnAL8AxgDRANMA1QDXAOQA6QD0AP0BFAEYAS8BPAFFAUoBVQFXAVkBWwFmAWgBagFsAW4BgQGIAYoBjAGTAZgBmgGcAZ4BpQGvAbEBswG1AboBvwHeAeIB5wH2AfoCAgIHAh0CIgI5Aj4CQQJGAkoCXAJfAmQAAAAAAAACAQAAAAAAAABOAAAAAAAAAAAAAAAAAAACZg== + + type + + + + creationDate + + + + 1 + games + + + + name + + + + identifier + + + + filename + + + + name + + + + GameControllerInputMapping + Undefined + 5 + GameControllerInputMapping + 1 + + + + + + artworkURL + + + + identifier + + + + playerIndex + + + + ControllerSkin + Undefined + 2 + ControllerSkin + 1 + + + + + \ No newline at end of file diff --git a/Delta/Database/Model/Migrations/Policies/SaveStateMigrationPolicy.swift b/Delta/Database/Model/Migrations/Policies/SaveStateMigrationPolicy.swift new file mode 100644 index 0000000..2e5290d --- /dev/null +++ b/Delta/Database/Model/Migrations/Policies/SaveStateMigrationPolicy.swift @@ -0,0 +1,25 @@ +// +// SaveStateMigrationPolicy.swift +// Delta +// +// Created by Riley Testut on 9/28/17. +// Copyright © 2017 Riley Testut. All rights reserved. +// + +import UIKit + +@objc(SaveStateToSaveStateMigrationPolicy) +class SaveStateToSaveStateMigrationPolicy: NSEntityMigrationPolicy +{ + @objc(migrateSaveStateType:) + func migrateSaveStateType(_ rawValue: NSNumber) -> NSNumber + { + switch rawValue.intValue + { + case 0: return NSNumber(value: SaveStateType.auto.rawValue) + case 1: return NSNumber(value: SaveStateType.general.rawValue) + case 2: return NSNumber(value: SaveStateType.locked.rawValue) + default: return rawValue + } + } +} diff --git a/Delta/Database/Model/Transformers/GameControllerInputMappingTransformer.swift b/Delta/Database/Model/Transformers/GameControllerInputMappingTransformer.swift new file mode 100644 index 0000000..3993514 --- /dev/null +++ b/Delta/Database/Model/Transformers/GameControllerInputMappingTransformer.swift @@ -0,0 +1,61 @@ +// +// GameControllerInputMappingTransformer.swift +// Delta +// +// Created by Riley Testut on 9/27/17. +// Copyright © 2017 Riley Testut. All rights reserved. +// + +import Foundation + +import DeltaCore + +@objc(GameControllerInputMappingTransformer) +class GameControllerInputMappingTransformer: ValueTransformer +{ + override class func transformedValueClass() -> AnyClass { + return NSData.self + } + + override class func allowsReverseTransformation() -> Bool { + return true + } + + override func transformedValue(_ value: Any?) -> Any? + { + guard let inputMapping = value as? DeltaCore.GameControllerInputMapping else { return nil } + + let plistEncoder = PropertyListEncoder() + + do + { + let data = try plistEncoder.encode(inputMapping) + return data + } + catch + { + print(error) + + return nil + } + } + + override func reverseTransformedValue(_ value: Any?) -> Any? + { + guard let inputMappingData = value as? Data else { return nil } + + let plistDecoder = PropertyListDecoder() + + do + { + let inputMapping = try plistDecoder.decode(DeltaCore.GameControllerInputMapping.self, from: inputMappingData) + return inputMapping + } + catch + { + print(error) + + return nil + } + } +} diff --git a/Delta/Emulation/ActionInput.swift b/Delta/Emulation/ActionInput.swift new file mode 100644 index 0000000..7597eaf --- /dev/null +++ b/Delta/Emulation/ActionInput.swift @@ -0,0 +1,28 @@ +// +// ActionInput.swift +// Delta +// +// Created by Riley Testut on 8/28/17. +// Copyright © 2017 Riley Testut. All rights reserved. +// + +import DeltaCore + +public extension GameControllerInputType +{ + static let action = GameControllerInputType("com.rileytestut.Delta.input.action") +} + +enum ActionInput: String +{ + case quickSave + case quickLoad + case fastForward +} + +extension ActionInput: Input +{ + var type: InputType { + return .controller(.action) + } +} diff --git a/Delta/Emulation/GameViewController.swift b/Delta/Emulation/GameViewController.swift index 1b3103e..1af9092 100644 --- a/Delta/Emulation/GameViewController.swift +++ b/Delta/Emulation/GameViewController.swift @@ -29,6 +29,25 @@ private extension GameViewController self.gameType = gameType } } + + struct SustainInputsMapping: GameControllerInputMappingProtocol + { + let gameController: GameController + + var gameControllerInputType: GameControllerInputType { + return self.gameController.inputType + } + + func input(forControllerInput controllerInput: Input) -> Input? + { + if let mappedInput = self.gameController.defaultInputMapping?.input(forControllerInput: controllerInput), mappedInput == StandardGameControllerInput.menu + { + return mappedInput + } + + return controllerInput + } + } } class GameViewController: DeltaCore.GameViewController @@ -79,10 +98,8 @@ class GameViewController: DeltaCore.GameViewController fileprivate var context = CIContext(options: [kCIContextWorkingColorSpace: NSNull()]) // Sustain Buttons - fileprivate var updateSemaphores = Set() - fileprivate var sustainedInputs = [ObjectIdentifier: [Input]]() - fileprivate var reactivateSustainedInputsQueue: OperationQueue - fileprivate var selectingSustainedButtons = false + fileprivate var isSelectingSustainedButtons = false + fileprivate var sustainInputsMapping: SustainInputsMapping? fileprivate var sustainButtonsContentView: UIView! fileprivate var sustainButtonsBlurView: UIVisualEffectView! @@ -90,9 +107,6 @@ class GameViewController: DeltaCore.GameViewController required init() { - self.reactivateSustainedInputsQueue = OperationQueue() - self.reactivateSustainedInputsQueue.maxConcurrentOperationCount = 1 - super.init() self.initialize() @@ -100,9 +114,6 @@ class GameViewController: DeltaCore.GameViewController required init?(coder aDecoder: NSCoder) { - self.reactivateSustainedInputsQueue = OperationQueue() - self.reactivateSustainedInputsQueue.maxConcurrentOperationCount = 1 - super.init(coder: aDecoder) self.initialize() @@ -112,8 +123,8 @@ class GameViewController: DeltaCore.GameViewController { self.delegate = self - NotificationCenter.default.addObserver(self, selector: #selector(GameViewController.updateControllers), name: .externalControllerDidConnect, object: nil) - NotificationCenter.default.addObserver(self, selector: #selector(GameViewController.updateControllers), name: .externalControllerDidDisconnect, object: nil) + NotificationCenter.default.addObserver(self, selector: #selector(GameViewController.updateControllers), name: .externalGameControllerDidConnect, object: nil) + NotificationCenter.default.addObserver(self, selector: #selector(GameViewController.updateControllers), name: .externalGameControllerDidDisconnect, object: nil) NotificationCenter.default.addObserver(self, selector: #selector(GameViewController.didEnterBackground(with:)), name: .UIApplicationDidEnterBackground, object: UIApplication.shared) NotificationCenter.default.addObserver(self, selector: #selector(GameViewController.settingsDidChange(with:)), name: .settingsDidChange, object: nil) } @@ -128,19 +139,42 @@ class GameViewController: DeltaCore.GameViewController { super.gameController(gameController, didActivate: input) - guard (input as? ControllerInput) != .menu else { return } - - if self.selectingSustainedButtons + if self.isSelectingSustainedButtons { - self.addSustainedInput(input, for: gameController) - } - else if let sustainedInputs = self.sustainedInputs[ObjectIdentifier(gameController)], sustainedInputs.contains(where: { $0.isEqual(input) }) - { - // Perform on next run loop - DispatchQueue.main.async { - self.reactivateSustainedInput(input, for: gameController) + guard let pausingGameController = self.pausingGameController, gameController == pausingGameController else { return } + + if input != StandardGameControllerInput.menu + { + gameController.sustain(input) } } + else if self.emulatorCore?.state == .running + { + guard let actionInput = ActionInput(input: input) else { return } + + switch actionInput + { + case .quickSave: self.performQuickSaveAction() + case .quickLoad: self.performQuickLoadAction() + case .fastForward: self.performFastForwardAction(activate: true) + } + } + } + + override func gameController(_ gameController: GameController, didDeactivate input: Input) + { + super.gameController(gameController, didDeactivate: input) + + guard !self.isSelectingSustainedButtons else { return } + + guard let actionInput = ActionInput(input: input) else { return } + + switch actionInput + { + case .quickSave: break + case .quickLoad: break + case .fastForward: self.performFastForwardAction(activate: false) + } } } @@ -243,22 +277,27 @@ extension GameViewController pauseViewController.saveStatesViewControllerDelegate = self pauseViewController.cheatsViewControllerDelegate = self - pauseViewController.fastForwardItem?.selected = (self.emulatorCore?.rate != self.emulatorCore?.deltaCore.supportedRates.lowerBound) + pauseViewController.fastForwardItem?.isSelected = (self.emulatorCore?.rate != self.emulatorCore?.deltaCore.supportedRates.lowerBound) pauseViewController.fastForwardItem?.action = { [unowned self] item in - guard let emulatorCore = self.emulatorCore else { return } - emulatorCore.rate = item.selected ? emulatorCore.deltaCore.supportedRates.upperBound : emulatorCore.deltaCore.supportedRates.lowerBound + self.performFastForwardAction(activate: item.isSelected) } - pauseViewController.sustainButtonsItem?.selected = (self.sustainedInputs[ObjectIdentifier(gameController)]?.count ?? 0) > 0 + pauseViewController.sustainButtonsItem?.isSelected = gameController.sustainedInputs.count > 0 pauseViewController.sustainButtonsItem?.action = { [unowned self, unowned pauseViewController] item in - self.resetSustainedInputs(for: gameController) + for input in gameController.sustainedInputs + { + gameController.unsustain(input) + } - if item.selected + if item.isSelected { self.showSustainButtonView() pauseViewController.dismiss() } + + // Re-set gameController as pausingGameController. + self.pausingGameController = gameController } self.pauseViewController = pauseViewController @@ -346,13 +385,14 @@ private extension GameViewController { @objc func updateControllers() { - var controllers = [GameController]() - controllers.append(self.controllerView) + let isExternalGameControllerConnected = ExternalGameControllerManager.shared.connectedControllers.contains(where: { $0.playerIndex != nil }) + if !isExternalGameControllerConnected && Settings.localControllerPlayerIndex == nil + { + Settings.localControllerPlayerIndex = 0 + } - // We need to map each item as a GameControllerProtocol due to a Swift bug - controllers.append(contentsOf: ExternalControllerManager.shared.connectedControllers.map { $0 as GameController }) - - if let index = Settings.localControllerPlayerIndex + // If Settings.localControllerPlayerIndex is non-nil, and there isn't a connected controller with same playerIndex, show controller view. + if let index = Settings.localControllerPlayerIndex, !ExternalGameControllerManager.shared.connectedControllers.contains { $0.playerIndex == index } { self.controllerView.playerIndex = index self.controllerView.isHidden = false @@ -361,35 +401,39 @@ private extension GameViewController { self.controllerView.playerIndex = nil self.controllerView.isHidden = true - } - - // Removing all game controllers from EmulatorCore will reset each controller's playerIndex to nil - // We temporarily cache their playerIndexes, and then we reset them after removing all controllers - var controllerIndexes = [ObjectIdentifier: Int?]() - controllers.forEach { controllerIndexes[ObjectIdentifier($0)] = $0.playerIndex } - - self.emulatorCore?.removeAllGameControllers() - - // Reset each controller's playerIndex to what it was before removing all controllers from EmulatorCore - controllers.forEach { $0.playerIndex = controllerIndexes[ObjectIdentifier($0)] ?? nil } - - for controller in controllers - { - if let index = controller.playerIndex - { - // We need to place the underscore here to silence erroneous unused result warning despite annotating function with @discardableResult - // Hopefully this bug won't be around for too long... - _ = self.emulatorCore?.setGameController(controller, at: index) - controller.addReceiver(self) - } - else - { - controller.removeReceiver(self) - } + + Settings.localControllerPlayerIndex = nil } self.view.setNeedsLayout() self.view.layoutIfNeeded() + + if let emulatorCore = self.emulatorCore, let game = self.game + { + let controllers = [self.controllerView as GameController] + ExternalGameControllerManager.shared.connectedControllers + + for gameController in controllers + { + if gameController.playerIndex != nil + { + if let inputMapping = GameControllerInputMapping.inputMapping(for: gameController, gameType: game.type, in: DatabaseManager.shared.viewContext) + { + gameController.addReceiver(self, inputMapping: inputMapping) + gameController.addReceiver(emulatorCore, inputMapping: inputMapping) + } + else + { + gameController.addReceiver(self) + gameController.addReceiver(emulatorCore) + } + } + else + { + gameController.removeReceiver(self) + gameController.removeReceiver(emulatorCore) + } + } + } } func updateControllerSkin() @@ -434,42 +478,37 @@ extension GameViewController: SaveStatesViewControllerDelegate let game = backgroundContext.object(with: game.objectID) as! Game - let predicate = NSPredicate(format: "%K == %d AND %K == %@", #keyPath(SaveState.type), SaveStateType.auto.rawValue, #keyPath(SaveState.game), game) - - let fetchRequest: NSFetchRequest = SaveState.fetchRequest() - fetchRequest.predicate = predicate + let fetchRequest = SaveState.fetchRequest(for: game, type: .auto) fetchRequest.sortDescriptors = [NSSortDescriptor(key: #keyPath(SaveState.creationDate), ascending: true)] - var saveStates: [SaveState]? = nil - do { - saveStates = try fetchRequest.execute() + let saveStates = try fetchRequest.execute() + + if let saveState = saveStates.first, saveStates.count >= 2 + { + // If there are two or more auto save states, update the oldest one + self.update(saveState, with: self.pausedSaveState) + + // Tiny hack: SaveStatesViewController sorts save states by creation date, so we update the creation date too + // Simpler than deleting old save states ¯\_(ツ)_/¯ + saveState.creationDate = saveState.modifiedDate + } + else + { + // Otherwise, create a new one + let saveState = SaveState.insertIntoManagedObjectContext(backgroundContext) + saveState.type = .auto + saveState.game = game + + self.update(saveState, with: self.pausedSaveState) + } } catch { print(error) } - - if let saveStates = saveStates, let saveState = saveStates.first, saveStates.count >= 2 - { - // If there are two or more auto save states, update the oldest one - self.update(saveState, with: self.pausedSaveState) - - // Tiny hack; SaveStatesViewController sorts save states by creation date, so we update the creation date too - // Simpler than deleting old save states ¯\_(ツ)_/¯ - saveState.creationDate = saveState.modifiedDate - } - else - { - // Otherwise, create a new one - let saveState = SaveState.insertIntoManagedObjectContext(backgroundContext) - saveState.type = .auto - saveState.game = game - - self.update(saveState, with: self.pausedSaveState) - } - + backgroundContext.saveWithErrorLogging() } } @@ -528,25 +567,14 @@ extension GameViewController: SaveStatesViewControllerDelegate } } - //MARK: - SaveStatesViewControllerDelegate - - func saveStatesViewController(_ saveStatesViewController: SaveStatesViewController, updateSaveState saveState: SaveState) + fileprivate func load(_ saveState: SaveStateProtocol) { - let updatingExistingSaveState = FileManager.default.fileExists(atPath: saveState.fileURL.path) + let isRunning = (self.emulatorCore?.state == .running) - self.update(saveState) - - // Dismiss if updating an existing save state. - // If creating a new one, don't dismiss. - if updatingExistingSaveState + if isRunning { - self.pauseViewController?.dismiss() + self.pauseEmulation() } - } - - func saveStatesViewController(_ saveStatesViewController: SaveStatesViewController, loadSaveState saveState: SaveStateProtocol) - { - self._isLoadingSaveState = true // If we're loading the auto save state, we need to create a temporary copy of saveState. // Then, we update the auto save state, but load our copy so everything works out. @@ -590,16 +618,33 @@ extension GameViewController: SaveStatesViewControllerDelegate print(error) } - // Reactivate sustained inputs - for gameController in self.emulatorCore?.gameControllers ?? [] + if isRunning { - guard let sustainedInputs = self.sustainedInputs[ObjectIdentifier(gameController)] else { continue } - - for input in sustainedInputs - { - self.reactivateSustainedInput(input, for: gameController) - } + self.resumeEmulation() } + } + + //MARK: - SaveStatesViewControllerDelegate + + func saveStatesViewController(_ saveStatesViewController: SaveStatesViewController, updateSaveState saveState: SaveState) + { + let updatingExistingSaveState = FileManager.default.fileExists(atPath: saveState.fileURL.path) + + self.update(saveState) + + // Dismiss if updating an existing save state. + // If creating a new one, don't dismiss. + if updatingExistingSaveState + { + self.pauseViewController?.dismiss() + } + } + + func saveStatesViewController(_ saveStatesViewController: SaveStatesViewController, loadSaveState saveState: SaveStateProtocol) + { + self._isLoadingSaveState = true + + self.load(saveState) self.pauseViewController?.dismiss() } @@ -625,7 +670,12 @@ private extension GameViewController { func showSustainButtonView() { - self.selectingSustainedButtons = true + guard let gameController = self.pausingGameController else { return } + + self.isSelectingSustainedButtons = true + + let sustainInputsMapping = SustainInputsMapping(gameController: gameController) + gameController.addReceiver(self, inputMapping: sustainInputsMapping) let blurEffect = self.sustainButtonsBlurView.effect self.sustainButtonsBlurView.effect = nil @@ -640,7 +690,18 @@ private extension GameViewController func hideSustainButtonView() { - self.selectingSustainedButtons = false + guard let gameController = self.pausingGameController else { return } + + self.isSelectingSustainedButtons = false + + self.updateControllers() + self.sustainInputsMapping = nil + + // Reactivate all sustained inputs, since they will now be mapped to game inputs. + for input in gameController.sustainedInputs + { + gameController.activate(input) + } let blurEffect = self.sustainButtonsBlurView.effect @@ -652,94 +713,76 @@ private extension GameViewController self.sustainButtonsBlurView.effect = blurEffect } } - - func resetSustainedInputs(for gameController: GameController) +} + +//MARK: - Action Inputs - +/// Action Inputs +extension GameViewController +{ + func performQuickSaveAction() { - if let previousInputs = self.sustainedInputs[ObjectIdentifier(gameController)] - { - let receivers = gameController.receivers - receivers.forEach { gameController.removeReceiver($0) } - - // Activate previousInputs without notifying anyone so we can then deactivate them - // We do this because deactivating an already deactivated input has no effect - previousInputs.forEach { gameController.activate($0) } - - receivers.forEach { gameController.addReceiver($0) } - - // Deactivate previously sustained inputs - previousInputs.forEach { gameController.deactivate($0) } - } + guard let game = self.game as? Game else { return } - self.sustainedInputs[ObjectIdentifier(gameController)] = [] - } - - func addSustainedInput(_ input: Input, for gameController: GameController) - { - var inputs = self.sustainedInputs[ObjectIdentifier(gameController)] ?? [] - - guard !inputs.contains(where: { $0.isEqual(input) }) else { return } - - inputs.append(input) - self.sustainedInputs[ObjectIdentifier(gameController)] = inputs - - let receivers = gameController.receivers - receivers.forEach { gameController.removeReceiver($0) } - - // Causes input to be considered deactivated, so gameController won't send a subsequent message to observers when user actually deactivates - // However, at this point the core still thinks it is activated, and is temporarily not a receiver, thus sustaining it - gameController.deactivate(input) - - receivers.forEach { gameController.addReceiver($0) } - } - - func reactivateSustainedInput(_ input: Input, for gameController: GameController) - { - // These MUST be performed serially, or else Bad Things Happen™ if multiple inputs are reactivated at once - self.reactivateSustainedInputsQueue.addOperation { + let backgroundContext = DatabaseManager.shared.newBackgroundContext() + backgroundContext.performAndWait { - // The manual activations/deactivations here are hidden implementation details, so we won't notify ourselves about them - gameController.removeReceiver(self) + let game = backgroundContext.object(with: game.objectID) as! Game + let fetchRequest = SaveState.fetchRequest(for: game, type: .quick) - // Must deactivate first so core recognizes a secondary activation - gameController.deactivate(input) - - let dispatchQueue = DispatchQueue(label: "com.rileytestut.Delta.sustainButtonsQueue") - dispatchQueue.async { - - let semaphore = DispatchSemaphore(value: 0) - self.updateSemaphores.insert(semaphore) - - // To ensure the emulator core recognizes us activating the input again, we need to wait at least two frames - // Unfortunately we cannot init DispatchSemaphore with value less than 0 - // To compensate, we simply wait twice; once the first wait returns, we wait again - semaphore.wait() - semaphore.wait() - - // These MUST be performed serially, or else Bad Things Happen™ if multiple inputs are reactivated at once - self.reactivateSustainedInputsQueue.addOperation { - - self.updateSemaphores.remove(semaphore) - - // Ensure we still are not a receiver (to prevent rare race conditions) - gameController.removeReceiver(self) - - gameController.activate(input) - - let receivers = gameController.receivers - receivers.forEach { gameController.removeReceiver($0) } - - // Causes input to be considered deactivated, so gameController won't send a subsequent message to observers when user actually deactivates - // However, at this point the core still thinks it is activated, and is temporarily not a receiver, thus sustaining it - gameController.deactivate(input) - - receivers.forEach { gameController.addReceiver($0) } + do + { + if let quickSaveState = try fetchRequest.execute().first + { + self.update(quickSaveState) + } + else + { + let saveState = SaveState(context: backgroundContext) + saveState.type = .quick + saveState.game = game + + self.update(saveState) } - - // More Bad Things Happen™ if we add self as observer before ALL reactivations have occurred (notable, infinite loops) - self.reactivateSustainedInputsQueue.waitUntilAllOperationsAreFinished() - - gameController.addReceiver(self) } + catch + { + print(error) + } + + backgroundContext.saveWithErrorLogging() + } + } + + func performQuickLoadAction() + { + guard let game = self.game as? Game else { return } + + let fetchRequest = SaveState.fetchRequest(for: game, type: .quick) + + do + { + if let quickSaveState = try DatabaseManager.shared.viewContext.fetch(fetchRequest).first + { + self.load(quickSaveState) + } + } + catch + { + print(error) + } + } + + func performFastForwardAction(activate: Bool) + { + guard let emulatorCore = self.emulatorCore else { return } + + if activate + { + emulatorCore.rate = emulatorCore.deltaCore.supportedRates.upperBound + } + else + { + emulatorCore.rate = emulatorCore.deltaCore.supportedRates.lowerBound } } } @@ -750,12 +793,17 @@ extension GameViewController: GameViewControllerDelegate { func gameViewController(_ gameViewController: DeltaCore.GameViewController, handleMenuInputFrom gameController: GameController) { - if self.selectingSustainedButtons + if let pausingGameController = self.pausingGameController + { + guard pausingGameController == gameController else { return } + } + + if self.isSelectingSustainedButtons { self.hideSustainButtonView() } - if let pauseViewController = self.pauseViewController, !self.selectingSustainedButtons + if let pauseViewController = self.pauseViewController, !self.isSelectingSustainedButtons { pauseViewController.dismiss() } @@ -768,15 +816,7 @@ extension GameViewController: GameViewControllerDelegate func gameViewControllerShouldResumeEmulation(_ gameViewController: DeltaCore.GameViewController) -> Bool { - return (self.presentedViewController == nil || self.presentedViewController?.isDisappearing == true) && !self.selectingSustainedButtons && self.view.window != nil - } - - func gameViewControllerDidUpdate(_ gameViewController: DeltaCore.GameViewController) - { - for semaphore in self.updateSemaphores - { - semaphore.signal() - } + return (self.presentedViewController == nil || self.presentedViewController?.isDisappearing == true) && !self.isSelectingSustainedButtons && self.view.window != nil } } diff --git a/Delta/Extensions/Input+Display.swift b/Delta/Extensions/Input+Display.swift new file mode 100644 index 0000000..ac80b19 --- /dev/null +++ b/Delta/Extensions/Input+Display.swift @@ -0,0 +1,112 @@ +// +// Input+Display.swift +// Delta +// +// Created by Riley Testut on 8/15/17. +// Copyright © 2017 Riley Testut. All rights reserved. +// + +import DeltaCore + +extension Input +{ + // With the default GameControllerInputMapping files, multiple controller inputs may map to the same game input. + // This is because each controller input maps to a unique standard input, but then multiple standard inputs may map to same game input. + // To ensure we only show the most "important" controller input for a game input, we define general "display priorities" for each input. + // + // For example, MFiGameController.down and MFiGameController.leftThumbstickDown both map to a "down" game input. + // However, .down has a higher priority than .leftThumbstickDown, so we show .down instead of .leftThumbstickDown. + var displayPriority: Int { + switch self.type + { + case .game: break + case .controller(.standard): break + case .controller(.mfi): + let input = MFiGameController.Input(input: self)! + switch input + { + case .leftThumbstickUp: return 750 + case .leftThumbstickDown: return 750 + case .leftThumbstickLeft: return 750 + case .leftThumbstickRight: return 750 + case .leftShoulder: return 750 + case .leftTrigger: return 500 + case .rightShoulder: return 750 + case .rightTrigger: return 500 + default: break + } + + default: break + } + + return 1000 + } + + var localizedName: String { + switch self.type + { + case .game: break + case .controller(.standard): + let input = StandardGameControllerInput(input: self)! + switch input + { + case .menu: return NSLocalizedString("Menu", comment: "") + case .up: return NSLocalizedString("Up", comment: "") + case .down: return NSLocalizedString("Down", comment: "") + case .left: return NSLocalizedString("Left", comment: "") + case .right: return NSLocalizedString("Right", comment: "") + case .leftThumbstickUp: return NSLocalizedString("L🕹↑", comment: "") + case .leftThumbstickDown: return NSLocalizedString("L🕹↓", comment: "") + case .leftThumbstickLeft: return NSLocalizedString("L🕹←", comment: "") + case .leftThumbstickRight: return NSLocalizedString("L🕹→", comment: "") + case .rightThumbstickUp: return NSLocalizedString("R🕹↑", comment: "") + case .rightThumbstickDown: return NSLocalizedString("R🕹↓", comment: "") + case .rightThumbstickLeft: return NSLocalizedString("R🕹←", comment: "") + case .rightThumbstickRight: return NSLocalizedString("R🕹→", comment: "") + case .a: return NSLocalizedString("A", comment: "") + case .b: return NSLocalizedString("B", comment: "") + case .x: return NSLocalizedString("X", comment: "") + case .y: return NSLocalizedString("Y", comment: "") + case .start: return NSLocalizedString("Start", comment: "Start button") + case .select: return NSLocalizedString("Select", comment: "Select button") + case .l1: return NSLocalizedString("L1", comment: "") + case .l2: return NSLocalizedString("L2", comment: "") + case .l3: return NSLocalizedString("L3", comment: "") + case .r1: return NSLocalizedString("R1", comment: "") + case .r2: return NSLocalizedString("R2", comment: "") + case .r3: return NSLocalizedString("R3", comment: "") + } + + case .controller(.mfi): + let input = MFiGameController.Input(input: self)! + switch input + { + case .menu: return NSLocalizedString("Menu", comment: "") + case .up: return NSLocalizedString("Up", comment: "") + case .down: return NSLocalizedString("Down", comment: "") + case .left: return NSLocalizedString("Left", comment: "") + case .right: return NSLocalizedString("Right", comment: "") + case .leftThumbstickUp: return NSLocalizedString("L🕹↑", comment: "") + case .leftThumbstickDown: return NSLocalizedString("L🕹↓", comment: "") + case .leftThumbstickLeft: return NSLocalizedString("L🕹←", comment: "") + case .leftThumbstickRight: return NSLocalizedString("L🕹→", comment: "") + case .rightThumbstickUp: return NSLocalizedString("R🕹↑", comment: "") + case .rightThumbstickDown: return NSLocalizedString("R🕹↓", comment: "") + case .rightThumbstickLeft: return NSLocalizedString("R🕹←", comment: "") + case .rightThumbstickRight: return NSLocalizedString("R🕹→", comment: "") + case .a: return NSLocalizedString("A", comment: "") + case .b: return NSLocalizedString("B", comment: "") + case .x: return NSLocalizedString("X", comment: "") + case .y: return NSLocalizedString("Y", comment: "") + case .leftShoulder: return NSLocalizedString("L1", comment: "") + case .leftTrigger: return NSLocalizedString("L2", comment: "") + case .rightShoulder: return NSLocalizedString("R1", comment: "") + case .rightTrigger: return NSLocalizedString("R2", comment: "") + } + + default: break + } + + return "" + } +} diff --git a/Delta/Extensions/UIView+ParentViewController.swift b/Delta/Extensions/UIView+ParentViewController.swift new file mode 100644 index 0000000..2213199 --- /dev/null +++ b/Delta/Extensions/UIView+ParentViewController.swift @@ -0,0 +1,28 @@ +// +// UIView+ParentViewController.swift +// Delta +// +// Created by Riley Testut on 9/3/17. +// Copyright © 2017 Riley Testut. All rights reserved. +// + +import UIKit + +extension UIView +{ + var parentViewController: UIViewController? { + var nextResponder = self.next + + while nextResponder != nil + { + if let parentViewController = nextResponder as? UIViewController + { + return parentViewController + } + + nextResponder = nextResponder?.next + } + + return nil + } +} diff --git a/Delta/Pause Menu/PauseMenuViewController.swift b/Delta/Pause Menu/GridMenuViewController.swift similarity index 53% rename from Delta/Pause Menu/PauseMenuViewController.swift rename to Delta/Pause Menu/GridMenuViewController.swift index a887cb4..8552552 100644 --- a/Delta/Pause Menu/PauseMenuViewController.swift +++ b/Delta/Pause Menu/GridMenuViewController.swift @@ -1,5 +1,5 @@ // -// PauseMenuViewController.swift +// GridMenuViewController.swift // Delta // // Created by Riley Testut on 12/21/15. @@ -9,39 +9,57 @@ import UIKit import Roxas -class PauseMenuViewController: UICollectionViewController +class GridMenuViewController: UICollectionViewController { - var items = [PauseItem]() { - didSet - { - guard oldValue != self.items else { return } - - if self.items.count > 8 - { - fatalError("PauseViewController only supports up to 8 items (for my sanity when laying out on a landscape iPhone 4s") - } - - self.dataSource.items = self.items - } + var items: [MenuItem] { + get { return self.dataSource.items } + set { self.dataSource.items = newValue; self.updateItems() } } + var isVibrancyEnabled = true + override var preferredContentSize: CGSize { set { } get { return self.collectionView?.contentSize ?? CGSize.zero } } - fileprivate let dataSource = RSTArrayCollectionViewDataSource(items: []) + fileprivate let dataSource = RSTArrayCollectionViewDataSource(items: []) fileprivate var prototypeCell = GridCollectionViewCell() fileprivate var previousIndexPath: IndexPath? = nil + + fileprivate var registeredKVOObservers = Set() + + init() + { + let collectionViewLayout = GridCollectionViewLayout() + collectionViewLayout.itemSize = CGSize(width: 60, height: 80) + collectionViewLayout.minimumLineSpacing = 20 + collectionViewLayout.minimumInteritemSpacing = 10 + + super.init(collectionViewLayout: collectionViewLayout) + } + + required init?(coder aDecoder: NSCoder) + { + super.init(coder: aDecoder) + } + + deinit + { + // Crashes on iOS 10 if not explicitly invalidated. + self.registeredKVOObservers.forEach { $0.invalidate() } + } } -extension PauseMenuViewController +extension GridMenuViewController { override func viewDidLoad() { super.viewDidLoad() + self.collectionView?.register(GridCollectionViewCell.self, forCellWithReuseIdentifier: RSTCellContentGenericCellIdentifier) + self.dataSource.cellConfigurationHandler = { [unowned self] (cell, item, indexPath) in self.configure(cell as! GridCollectionViewCell, for: indexPath) } @@ -62,55 +80,66 @@ extension PauseMenuViewController if let indexPath = self.previousIndexPath { UIView.animate(withDuration: 0.2) { - self.toggleSelectedStateForPauseItemAtIndexPath(indexPath) + let item = self.items[indexPath.item] + item.isSelected = !item.isSelected } } } } -private extension PauseMenuViewController +private extension GridMenuViewController { func configure(_ cell: GridCollectionViewCell, for indexPath: IndexPath) { - let pauseItem = self.items[(indexPath as NSIndexPath).item] + let pauseItem = self.items[indexPath.item] cell.maximumImageSize = CGSize(width: 60, height: 60) cell.imageView.image = pauseItem.image cell.imageView.contentMode = .center cell.imageView.layer.borderWidth = 2 - cell.imageView.layer.borderColor = UIColor.white.cgColor + cell.imageView.layer.borderColor = self.view.tintColor.cgColor cell.imageView.layer.cornerRadius = 10 cell.textLabel.text = pauseItem.text - cell.textLabel.textColor = UIColor.white + cell.textLabel.textColor = self.view.tintColor - if pauseItem.selected + if pauseItem.isSelected { cell.imageView.tintColor = UIColor.black - cell.imageView.backgroundColor = UIColor.white + cell.imageView.backgroundColor = self.view.tintColor } else { - cell.imageView.tintColor = UIColor.white + cell.imageView.tintColor = self.view.tintColor cell.imageView.backgroundColor = UIColor.clear } - cell.isImageViewVibrancyEnabled = true - cell.isTextLabelVibrancyEnabled = true + cell.isImageViewVibrancyEnabled = self.isVibrancyEnabled + cell.isTextLabelVibrancyEnabled = self.isVibrancyEnabled } - func toggleSelectedStateForPauseItemAtIndexPath(_ indexPath: IndexPath) + func updateItems() { - let pauseItem = self.items[indexPath.item] - pauseItem.selected = !pauseItem.selected + self.registeredKVOObservers.removeAll() - let cell = self.collectionView!.cellForItem(at: indexPath) as! GridCollectionViewCell - self.configure(cell, for: indexPath) + for (index, item) in self.items.enumerated() + { + let observer = item.observe(\.isSelected, changeHandler: { [unowned self] (item, change) in + let indexPath = IndexPath(item: index, section: 0) + + if let cell = self.collectionView?.cellForItem(at: indexPath) as? GridCollectionViewCell + { + self.configure(cell, for: indexPath) + } + }) + + self.registeredKVOObservers.insert(observer) + } } } -extension PauseMenuViewController: UICollectionViewDelegateFlowLayout +extension GridMenuViewController: UICollectionViewDelegateFlowLayout { func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize { @@ -121,26 +150,27 @@ extension PauseMenuViewController: UICollectionViewDelegateFlowLayout } } -extension PauseMenuViewController +extension GridMenuViewController { override func collectionView(_ collectionView: UICollectionView, didHighlightItemAt indexPath: IndexPath) { - self.toggleSelectedStateForPauseItemAtIndexPath(indexPath) + let item = self.items[indexPath.item] + item.isSelected = !item.isSelected } override func collectionView(_ collectionView: UICollectionView, didUnhighlightItemAt indexPath: IndexPath) { - self.toggleSelectedStateForPauseItemAtIndexPath(indexPath) + let item = self.items[indexPath.item] + item.isSelected = !item.isSelected } override func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { self.previousIndexPath = indexPath - self.toggleSelectedStateForPauseItemAtIndexPath(indexPath) - - let pauseItem = self.items[indexPath.item] - pauseItem.action(pauseItem) + let item = self.items[indexPath.item] + item.isSelected = !item.isSelected + item.action(item) } } diff --git a/Delta/Pause Menu/MenuItem.swift b/Delta/Pause Menu/MenuItem.swift new file mode 100644 index 0000000..3335b9c --- /dev/null +++ b/Delta/Pause Menu/MenuItem.swift @@ -0,0 +1,35 @@ +// +// MenuItem.swift +// Delta +// +// Created by Riley Testut on 1/30/16. +// Copyright © 2016 Riley Testut. All rights reserved. +// + +import UIKit + +// Must be class for use with Objective-C generics :( +class MenuItem: NSObject +{ + var text: String + var image: UIImage? + var action: ((MenuItem) -> Void) + + @objc dynamic var isSelected = false + + init(text: String, image: UIImage?, action: @escaping ((MenuItem) -> Void)) + { + self.image = image + self.text = text + self.action = action + } +} + +extension MenuItem +{ + override func isEqual(_ object: Any?) -> Bool + { + guard let item = object as? MenuItem else { return false } + return item.image == self.image && item.text == self.text + } +} diff --git a/Delta/Pause Menu/PauseItem.swift b/Delta/Pause Menu/PauseItem.swift deleted file mode 100644 index e1c629b..0000000 --- a/Delta/Pause Menu/PauseItem.swift +++ /dev/null @@ -1,31 +0,0 @@ -// -// PauseItem.swift -// Delta -// -// Created by Riley Testut on 1/30/16. -// Copyright © 2016 Riley Testut. All rights reserved. -// - -import UIKit - -// Must be class for use with Objective-C generics :( -class PauseItem: Equatable -{ - var image: UIImage - var text: String - var action: ((PauseItem) -> Void) - - var selected = false - - init(image: UIImage, text: String, action: @escaping ((PauseItem) -> Void)) - { - self.image = image - self.text = text - self.action = action - } -} - -func ==(lhs: PauseItem, rhs: PauseItem) -> Bool -{ - return (lhs.image == rhs.image) && (lhs.text == rhs.text) -} diff --git a/Delta/Pause Menu/PauseViewController.swift b/Delta/Pause Menu/PauseViewController.swift index 10a4d02..9287e85 100644 --- a/Delta/Pause Menu/PauseViewController.swift +++ b/Delta/Pause Menu/PauseViewController.swift @@ -18,16 +18,16 @@ class PauseViewController: UIViewController, PauseInfoProviding } } - var pauseItems: [PauseItem] { + var pauseItems: [MenuItem] { return [self.saveStateItem, self.loadStateItem, self.cheatCodesItem, self.fastForwardItem, self.sustainButtonsItem].flatMap { $0 } } /// Pause Items - var saveStateItem: PauseItem? - var loadStateItem: PauseItem? - var cheatCodesItem: PauseItem? - var fastForwardItem: PauseItem? - var sustainButtonsItem: PauseItem? + var saveStateItem: MenuItem? + var loadStateItem: MenuItem? + var cheatCodesItem: MenuItem? + var fastForwardItem: MenuItem? + var sustainButtonsItem: MenuItem? /// PauseInfoProviding var pauseText: String? @@ -85,8 +85,8 @@ extension PauseViewController self.pauseNavigationController.navigationBar.tintColor = UIColor.deltaPurple self.pauseNavigationController.view.backgroundColor = UIColor.clear - let pauseMenuViewController = self.pauseNavigationController.topViewController as! PauseMenuViewController - pauseMenuViewController.items = self.pauseItems + let gridMenuViewController = self.pauseNavigationController.topViewController as! GridMenuViewController + gridMenuViewController.items = self.pauseItems case "saveStates": let saveStatesViewController = segue.destination as! SaveStatesViewController @@ -135,21 +135,21 @@ private extension PauseViewController guard self.emulatorCore != nil else { return } - self.saveStateItem = PauseItem(image: #imageLiteral(resourceName: "SaveSaveState"), text: NSLocalizedString("Save State", comment: ""), action: { [unowned self] _ in + self.saveStateItem = MenuItem(text: NSLocalizedString("Save State", comment: ""), image: #imageLiteral(resourceName: "SaveSaveState"), action: { [unowned self] _ in self.saveStatesViewControllerMode = .saving self.performSegue(withIdentifier: "saveStates", sender: self) }) - self.loadStateItem = PauseItem(image: #imageLiteral(resourceName: "LoadSaveState"), text: NSLocalizedString("Load State", comment: ""), action: { [unowned self] _ in + self.loadStateItem = MenuItem(text: NSLocalizedString("Load State", comment: ""), image: #imageLiteral(resourceName: "LoadSaveState"), action: { [unowned self] _ in self.saveStatesViewControllerMode = .loading self.performSegue(withIdentifier: "saveStates", sender: self) }) - self.cheatCodesItem = PauseItem(image: #imageLiteral(resourceName: "CheatCodes"), text: NSLocalizedString("Cheat Codes", comment: ""), action: { [unowned self] _ in + self.cheatCodesItem = MenuItem(text: NSLocalizedString("Cheat Codes", comment: ""), image: #imageLiteral(resourceName: "CheatCodes"), action: { [unowned self] _ in self.performSegue(withIdentifier: "cheats", sender: self) }) - self.fastForwardItem = PauseItem(image: #imageLiteral(resourceName: "FastForward"), text: NSLocalizedString("Fast Forward", comment: ""), action: { _ in }) - self.sustainButtonsItem = PauseItem(image: #imageLiteral(resourceName: "SustainButtons"), text: NSLocalizedString("Sustain Buttons", comment: ""), action: { _ in }) + self.fastForwardItem = MenuItem(text: NSLocalizedString("Fast Forward", comment: ""), image: #imageLiteral(resourceName: "FastForward"), action: { _ in }) + self.sustainButtonsItem = MenuItem(text: NSLocalizedString("Sustain Buttons", comment: ""), image: #imageLiteral(resourceName: "SustainButtons"), action: { _ in }) } } diff --git a/Delta/Pause Menu/Save States/SaveStatesViewController.swift b/Delta/Pause Menu/Save States/SaveStatesViewController.swift index d9048a6..0d1a960 100644 --- a/Delta/Pause Menu/Save States/SaveStatesViewController.swift +++ b/Delta/Pause Menu/Save States/SaveStatesViewController.swift @@ -29,6 +29,7 @@ extension SaveStatesViewController enum Section: Int { case auto + case quick case general case locked } @@ -268,6 +269,7 @@ private extension SaveStatesViewController switch section { case .auto: title = NSLocalizedString("Auto Save", comment: "") + case .quick: title = NSLocalizedString("Quick Save", comment: "") case .general: title = NSLocalizedString("General", comment: "") case .locked: title = NSLocalizedString("Locked", comment: "") } @@ -310,6 +312,7 @@ private extension SaveStatesViewController let game = backgroundContext.object(with: self.game.objectID) as! Game saveState = SaveState.insertIntoManagedObjectContext(backgroundContext) + saveState.type = .general saveState.game = game } @@ -480,6 +483,7 @@ private extension SaveStatesViewController switch saveState.type { case .auto: break + case .quick: break case .general: let lockAction = Action(title: NSLocalizedString("Lock", comment: ""), style: .default, action: { [unowned self] action in self.lockSaveState(saveState) @@ -643,11 +647,11 @@ extension SaveStatesViewController { case .saving: - let section = self.correctedSectionForSectionIndex((indexPath as NSIndexPath).section) + let section = self.correctedSectionForSectionIndex(indexPath.section) switch section { case .auto: break - case .general: + case .quick, .general: let backgroundContext = DatabaseManager.shared.newBackgroundContext() backgroundContext.performAndWait() { let temporarySaveState = backgroundContext.object(with: saveState.objectID) as! SaveState diff --git a/Delta/Pause Menu/Segues/PauseStoryboardSegue.swift b/Delta/Pause Menu/Segues/PauseStoryboardSegue.swift index bec5a67..6081cfd 100644 --- a/Delta/Pause Menu/Segues/PauseStoryboardSegue.swift +++ b/Delta/Pause Menu/Segues/PauseStoryboardSegue.swift @@ -29,6 +29,9 @@ class PauseStoryboardSegue: UIStoryboardSegue self.destination.modalPresentationStyle = .custom self.destination.modalPresentationCapturesStatusBarAppearance = true + // Manually set tint color, since calling layoutIfNeeded will cause view to load, but with default system tint color. + self.destination.view.tintColor = .white + // We need to force layout of destinationViewController.view _before_ animateTransition(using:) // Otherwise, we'll get "Unable to simultaneously satisfy constraints" errors self.destination.view.frame = self.source.view.frame diff --git a/Delta/Settings/Controllers/ControllerInputsViewController.swift b/Delta/Settings/Controllers/ControllerInputsViewController.swift new file mode 100644 index 0000000..a992465 --- /dev/null +++ b/Delta/Settings/Controllers/ControllerInputsViewController.swift @@ -0,0 +1,508 @@ +// +// ControllerInputsViewController.swift +// Delta +// +// Created by Riley Testut on 7/1/17. +// Copyright © 2017 Riley Testut. All rights reserved. +// + +import UIKit +import Roxas + +import DeltaCore + +import SMCalloutView + +class ControllerInputsViewController: UIViewController +{ + var gameController: GameController! { + didSet { + self.gameController.addReceiver(self, inputMapping: nil) + } + } + + var system: System = .snes { + didSet { + guard self.system != oldValue else { return } + self.updateSystem() + } + } + + fileprivate lazy var managedObjectContext: NSManagedObjectContext = DatabaseManager.shared.newBackgroundContext() + fileprivate var inputMappings = [System: GameControllerInputMapping]() + + fileprivate let supportedActionInputs: [ActionInput] = [.quickSave, .quickLoad, .fastForward] + + fileprivate var gameViewController: DeltaCore.GameViewController! + fileprivate var actionsMenuViewController: GridMenuViewController! + + fileprivate var calloutViews = [AnyInput: InputCalloutView]() + + fileprivate var activeCalloutView: InputCalloutView? + + @IBOutlet private var actionsMenuViewControllerHeightConstraint: NSLayoutConstraint! + @IBOutlet private var cancelTapGestureRecognizer: UITapGestureRecognizer! + + override func viewDidLoad() + { + super.viewDidLoad() + + self.gameViewController.controllerView.addReceiver(self) + + self.navigationController?.navigationBar.barStyle = .black + + NSLayoutConstraint.activate([self.gameViewController.gameView.centerYAnchor.constraint(equalTo: self.actionsMenuViewController.view.centerYAnchor)]) + + self.preparePopoverMenuController() + self.updateSystem() + } + + override func viewDidLayoutSubviews() + { + super.viewDidLayoutSubviews() + + if self.actionsMenuViewController.preferredContentSize.height > 0 + { + self.actionsMenuViewControllerHeightConstraint.constant = self.actionsMenuViewController.preferredContentSize.height + } + } + + override func viewDidAppear(_ animated: Bool) + { + super.viewDidAppear(animated) + + if self.calloutViews.isEmpty + { + self.prepareCallouts() + } + } +} + +extension ControllerInputsViewController +{ + override func prepare(for segue: UIStoryboardSegue, sender: Any?) + { + guard let identifier = segue.identifier else { return } + + switch identifier + { + case "embedGameViewController": self.gameViewController = segue.destination as! DeltaCore.GameViewController + case "embedActionsMenuViewController": + self.actionsMenuViewController = segue.destination as! GridMenuViewController + self.prepareActionsMenuViewController() + + case "cancelControllerInputs": break + case "saveControllerInputs": + self.managedObjectContext.performAndWait { + self.managedObjectContext.saveWithErrorLogging() + } + + default: break + } + } +} + +private extension ControllerInputsViewController +{ + func updateSystem() + { + guard self.isViewLoaded else { return } + + // Update popoverMenuButton to display correctly on iOS 10. + if let popoverMenuButton = self.navigationItem.popoverMenuController?.popoverMenuButton + { + popoverMenuButton.title = self.system.localizedShortName + popoverMenuButton.bounds.size = popoverMenuButton.intrinsicContentSize + + self.navigationController?.navigationBar.layoutIfNeeded() + } + + // Update controller view's controller skin. + self.gameViewController.controllerView.controllerSkin = DeltaCore.ControllerSkin.standardControllerSkin(for: self.system.gameType) + + // Fetch input mapping if it hasn't already been fetched. + if let gameController = self.gameController, let playerIndex = gameController.playerIndex, self.inputMappings[self.system] == nil + { + self.managedObjectContext.performAndWait { + let inputMapping = GameControllerInputMapping.inputMapping(for: gameController, gameType: self.system.gameType, in: self.managedObjectContext) ?? { + let deltaCoreInputMapping = gameController.defaultInputMapping as? DeltaCore.GameControllerInputMapping ?? DeltaCore.GameControllerInputMapping(gameControllerInputType: gameController.inputType) + + let inputMapping = GameControllerInputMapping(inputMapping: deltaCoreInputMapping, context: self.managedObjectContext) + inputMapping.gameControllerInputType = gameController.inputType + inputMapping.gameType = self.system.gameType + inputMapping.playerIndex = Int16(playerIndex) + + return inputMapping + }() + + inputMapping.name = String.localizedStringWithFormat("Custom %@", gameController.name) + + self.inputMappings[self.system] = inputMapping + } + } + + // Update callouts, if view is already on screen. + if self.view.window != nil + { + self.calloutViews.forEach { $1.dismissCallout(animated: true) } + + DispatchQueue.main.asyncAfter(deadline: .now() + 0.3) { + self.calloutViews = [:] + self.prepareCallouts() + } + } + } + + func preparePopoverMenuController() + { + let listMenuViewController = ListMenuViewController() + listMenuViewController.title = NSLocalizedString("Game System", comment: "") + + let navigationController = UINavigationController(rootViewController: listMenuViewController) + + let popoverMenuController = PopoverMenuController(popoverViewController: navigationController) + self.navigationItem.popoverMenuController = popoverMenuController + + let items = System.supportedSystems.map { [unowned self, weak popoverMenuController, weak listMenuViewController] system -> MenuItem in + let item = MenuItem(text: system.localizedShortName, image: #imageLiteral(resourceName: "CheatCodes")) { [weak popoverMenuController, weak listMenuViewController] item in + listMenuViewController?.items.forEach { $0.isSelected = ($0 == item) } + popoverMenuController?.isActive = false + + self.system = system + } + item.isSelected = (system == self.system) + + return item + } + listMenuViewController.items = items + } + + func prepareActionsMenuViewController() + { + var items = [MenuItem]() + + for input in self.supportedActionInputs + { + let image: UIImage + let text: String + + switch input + { + case .quickSave: + image = #imageLiteral(resourceName: "SaveSaveState") + text = NSLocalizedString("Quick Save", comment: "") + + case .quickLoad: + image = #imageLiteral(resourceName: "LoadSaveState") + text = NSLocalizedString("Quick Load", comment: "") + + case .fastForward: + image = #imageLiteral(resourceName: "FastForward") + text = NSLocalizedString("Fast Forward", comment: "") + } + + let item = MenuItem(text: text, image: image) { [unowned self] (item) in + guard let calloutView = self.calloutViews[AnyInput(input)] else { return } + self.toggle(calloutView) + } + + items.append(item) + } + + self.actionsMenuViewController.items = items + self.actionsMenuViewController.isVibrancyEnabled = false + } + + func prepareCallouts() + { + guard + let controllerView = self.gameViewController.controllerView, + let traits = controllerView.controllerSkinTraits, + let items = controllerView.controllerSkin?.items(for: traits), + let controllerViewInputMapping = controllerView.defaultInputMapping, + let inputMapping = self.inputMappings[self.system] + else { return } + + // Implicit assumption that all skins used for controller input mapping don't have multiple items with same input. + let mappedInputs = items.flatMap { $0.inputs.allInputs.flatMap(controllerViewInputMapping.input(forControllerInput:)) } + (self.supportedActionInputs as [Input]) + + // Create callout view for each on-screen input. + for input in mappedInputs + { + let calloutView = InputCalloutView() + calloutView.delegate = self + self.calloutViews[AnyInput(input)] = calloutView + } + + self.managedObjectContext.performAndWait { + // Update callout views with controller inputs that map to callout views' associated controller skin inputs. + for input in inputMapping.supportedControllerInputs + { + let mappedInput = self.mappedInput(for: input) + + if let calloutView = self.calloutViews[mappedInput] + { + if let previousInput = calloutView.input + { + // Ensure the input we display has a higher priority. + calloutView.input = (input.displayPriority > previousInput.displayPriority) ? input : previousInput + } + else + { + calloutView.input = input + } + } + } + } + + // Present only callout views that are associated with a controller input. + for calloutView in self.calloutViews.values + { + if let presentationRect = self.presentationRect(for: calloutView), calloutView.input != nil + { + calloutView.presentCallout(from: presentationRect, in: self.view, constrainedTo: self.view, animated: true) + } + } + } +} + +private extension ControllerInputsViewController +{ + func updateActiveCalloutView(with controllerInput: Input?) + { + guard let inputMapping = self.inputMappings[self.system] else { return } + + guard let activeCalloutView = self.activeCalloutView else { return } + + guard let input = self.calloutViews.first(where: { $0.value == activeCalloutView })?.key else { return } + + if let controllerInput = controllerInput + { + for (_, calloutView) in self.calloutViews + { + guard let calloutInput = calloutView.input else { continue } + + if calloutInput == controllerInput + { + // Hide callout views that previously displayed the controller input. + calloutView.input = nil + calloutView.dismissCallout(animated: true) + } + } + } + + self.managedObjectContext.performAndWait { + for supportedInput in inputMapping.supportedControllerInputs + { + let mappedInput = self.mappedInput(for: supportedInput) + + if mappedInput == input + { + // Set all existing controller inputs that currently map to "input" to instead map to nil. + inputMapping.set(nil, forControllerInput: supportedInput) + } + } + + if let controllerInput = controllerInput + { + inputMapping.set(input, forControllerInput: controllerInput) + } + } + + activeCalloutView.input = controllerInput + + self.toggle(activeCalloutView) + } + + func toggle(_ calloutView: InputCalloutView) + { + if let activeCalloutView = self.activeCalloutView, activeCalloutView != calloutView + { + self.toggle(activeCalloutView) + } + + let menuItem: MenuItem? + + if let input = self.calloutViews.first(where: { $0.value == calloutView })?.key, let index = self.supportedActionInputs.index(where: { $0 == input }) + { + menuItem = self.actionsMenuViewController.items[index] + } + else + { + menuItem = nil + } + + switch calloutView.state + { + case .normal: + calloutView.state = .listening + menuItem?.isSelected = true + self.activeCalloutView = calloutView + + case .listening: + calloutView.state = .normal + menuItem?.isSelected = false + self.activeCalloutView = nil + } + + calloutView.dismissCallout(animated: true) + + if let presentationRect = self.presentationRect(for: calloutView) + { + if calloutView.state == .listening || calloutView.input != nil + { + calloutView.presentCallout(from: presentationRect, in: self.view, constrainedTo: self.view, animated: true) + } + } + } +} + +extension ControllerInputsViewController: UIGestureRecognizerDelegate +{ + func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldReceive touch: UITouch) -> Bool + { + return self.activeCalloutView != nil + } + + @IBAction private func handleTapGesture(_ tapGestureRecognizer: UITapGestureRecognizer) + { + self.updateActiveCalloutView(with: nil) + } +} + +private extension ControllerInputsViewController +{ + func mappedInput(for input: Input) -> AnyInput + { + guard let inputMapping = self.inputMappings[self.system] else { + fatalError("Input mapping for current system does not exist.") + } + + guard let mappedInput = inputMapping.input(forControllerInput: input) else { + fatalError("Mapped input for provided input does not exist.") + } + + if let standardInput = StandardGameControllerInput(input: mappedInput) + { + if let gameInput = standardInput.input(for: self.system.gameType) + { + return AnyInput(gameInput) + } + } + + return AnyInput(mappedInput) + } + + func presentationRect(for calloutView: InputCalloutView) -> CGRect? + { + guard let input = self.calloutViews.first(where: { $0.value == calloutView })?.key else { return nil } + + guard + let controllerView = self.gameViewController.controllerView, + let traits = controllerView.controllerSkinTraits, + let items = controllerView.controllerSkin?.items(for: traits) + else { return nil } + + if let item = items.first(where: { $0.inputs.allInputs.contains(where: { $0.stringValue == input.stringValue })}) + { + // Input is a controller skin input. + + let itemFrame: CGRect? + + switch item.inputs + { + case .standard: itemFrame = item.frame + case let .directional(up, down, left, right): + + switch input.stringValue + { + case up.stringValue: + itemFrame = CGRect(x: item.frame.minX + item.frame.width / 3, + y: item.frame.minY, + width: item.frame.width / 3, + height: item.frame.height / 3) + case down.stringValue: + itemFrame = CGRect(x: item.frame.minX + item.frame.width / 3, + y: item.frame.minY + (item.frame.height / 3) * 2, + width: item.frame.width / 3, + height: item.frame.height / 3) + + case left.stringValue: + itemFrame = CGRect(x: item.frame.minX, + y: item.frame.minY + (item.frame.height / 3), + width: item.frame.width / 3, + height: item.frame.height / 3) + + case right.stringValue: + itemFrame = CGRect(x: item.frame.minX + (item.frame.width / 3) * 2, + y: item.frame.minY + (item.frame.height / 3), + width: item.frame.width / 3, + height: item.frame.height / 3) + + default: itemFrame = nil + } + } + + if let itemFrame = itemFrame + { + var presentationFrame = itemFrame.applying(CGAffineTransform(scaleX: controllerView.bounds.width, y: controllerView.bounds.height)) + presentationFrame = self.view.convert(presentationFrame, from: controllerView) + + return presentationFrame + } + } + else if let index = self.supportedActionInputs.index(where: { $0 == input }) + { + // Input is an ActionInput. + + let indexPath = IndexPath(item: index, section: 0) + + if let attributes = self.actionsMenuViewController.collectionViewLayout.layoutAttributesForItem(at: indexPath) + { + let presentationFrame = self.view.convert(attributes.frame, from: self.actionsMenuViewController.view) + return presentationFrame + } + } + else + { + // Input is not an on-screen input. + } + + return nil + } +} + +extension ControllerInputsViewController: GameControllerReceiver +{ + func gameController(_ gameController: GameController, didActivate controllerInput: DeltaCore.Input) + { + guard self.isViewLoaded else { return } + + switch gameController + { + case self.gameViewController.controllerView: + if let calloutView = self.calloutViews[AnyInput(controllerInput)] + { + self.toggle(calloutView) + } + + case self.gameController: self.updateActiveCalloutView(with: controllerInput) + + default: break + } + } + + func gameController(_ gameController: GameController, didDeactivate input: DeltaCore.Input) + { + } +} + +extension ControllerInputsViewController: SMCalloutViewDelegate +{ + func calloutViewClicked(_ calloutView: SMCalloutView) + { + guard let calloutView = calloutView as? InputCalloutView else { return } + + self.toggle(calloutView) + } +} diff --git a/Delta/Settings/Controllers/ControllersSettingsViewController.swift b/Delta/Settings/Controllers/ControllersSettingsViewController.swift index f5499ae..8b6d954 100644 --- a/Delta/Settings/Controllers/ControllersSettingsViewController.swift +++ b/Delta/Settings/Controllers/ControllersSettingsViewController.swift @@ -9,37 +9,60 @@ import UIKit import DeltaCore -private enum ControllersSettingsSection: Int +import Roxas + +extension ControllersSettingsViewController { - case none - case localDevice - case externalControllers + fileprivate enum Section: Int + { + case none + case localDevice + case externalControllers + case customizeControls + } } -private class LocalDeviceController: ExternalController +private class LocalDeviceController: NSObject, GameController { - override var name: String { + var name: String { return UIDevice.current.name } + + var playerIndex: Int? { + set { Settings.localControllerPlayerIndex = newValue } + get { return Settings.localControllerPlayerIndex } + } + + let inputType: GameControllerInputType = .standard + + var defaultInputMapping: GameControllerInputMappingProtocol? } class ControllersSettingsViewController: UITableViewController { - var playerIndex: Int? { - didSet - { - if let playerIndex = self.playerIndex + var playerIndex: Int! { + didSet { + self.title = NSLocalizedString("Player \(self.playerIndex + 1)", comment: "") + } + } + + fileprivate var gameController: GameController? { + didSet { + // Order matters since localDeviceController changes Settings.localControllerPlayerIndex, which sends out NSNotification. + if oldValue == self.localDeviceController { - self.title = NSLocalizedString("Player \(playerIndex + 1)", comment: "") + self.gameController?.playerIndex = self.playerIndex + oldValue?.playerIndex = nil } else { - self.title = NSLocalizedString("Controllers", comment: "") + oldValue?.playerIndex = nil + self.gameController?.playerIndex = self.playerIndex } } } - fileprivate var connectedControllers = ExternalControllerManager.shared.connectedControllers.sorted(by: { $0.playerIndex ?? NSIntegerMax < $1.playerIndex ?? NSIntegerMax }) + fileprivate var connectedControllers = ExternalGameControllerManager.shared.connectedControllers.sorted(by: { $0.playerIndex ?? NSIntegerMax < $1.playerIndex ?? NSIntegerMax }) fileprivate lazy var localDeviceController: LocalDeviceController = { let device = LocalDeviceController() @@ -52,146 +75,76 @@ class ControllersSettingsViewController: UITableViewController { super.init(coder: aDecoder) - NotificationCenter.default.addObserver(self, selector: #selector(ControllersSettingsViewController.externalControllerDidConnect(_:)), name: .externalControllerDidConnect, object: nil) - NotificationCenter.default.addObserver(self, selector: #selector(ControllersSettingsViewController.externalControllerDidDisconnect(_:)), name: .externalControllerDidDisconnect, object: nil) + NotificationCenter.default.addObserver(self, selector: #selector(ControllersSettingsViewController.externalGameControllerDidConnect(_:)), name: .externalGameControllerDidConnect, object: nil) + NotificationCenter.default.addObserver(self, selector: #selector(ControllersSettingsViewController.externalGameControllerDidDisconnect(_:)), name: .externalGameControllerDidDisconnect, object: nil) } override func viewDidLoad() { super.viewDidLoad() - } - - //MARK: - Storyboards - - - override func prepare(for segue: UIStoryboardSegue, sender: Any?) - { - guard let indexPath = self.tableView.indexPathForSelectedRow else { return } - var controllers = self.connectedControllers - controllers.append(self.localDeviceController) - - // Reset previous controller - if let playerIndex = self.playerIndex, let index = controllers.index(where: { $0.playerIndex == playerIndex }) + let gameControllers = [self.localDeviceController as GameController] + self.connectedControllers + for gameController in gameControllers { - let controller = controllers[index] - controller.playerIndex = nil - } - - switch ControllersSettingsSection(rawValue: (indexPath as NSIndexPath).section)! - { - case .none: break - case .localDevice: self.localDeviceController.playerIndex = self.playerIndex - case .externalControllers: - let controller = self.connectedControllers[(indexPath as NSIndexPath).row] - controller.playerIndex = self.playerIndex - } - - // Updates in case we reset it above, as well as if we updated in the switch statement - Settings.localControllerPlayerIndex = self.localDeviceController.playerIndex - } -} - -private extension ControllersSettingsViewController -{ - dynamic func externalControllerDidConnect(_ notification: Notification) - { - guard let controller = notification.object as? ExternalController else { return } - - if let playerIndex = controller.playerIndex - { - self.connectedControllers.insert(controller, at: playerIndex) - } - else - { - self.connectedControllers.append(controller) - } - - if let index = self.connectedControllers.index(of: controller) - { - if self.connectedControllers.count == 1 + if gameController.playerIndex == self.playerIndex { - self.tableView.insertSections(IndexSet(integer: ControllersSettingsSection.externalControllers.rawValue), with: .fade) + self.gameController = gameController + break } - else - { - self.tableView.insertRows(at: [IndexPath(row: index, section: ControllersSettingsSection.externalControllers.rawValue)], with: .automatic) - } - } - } - - dynamic func externalControllerDidDisconnect(_ notification: Notification) - { - guard let controller = notification.object as? ExternalController else { return } - - if let index = self.connectedControllers.index(of: controller) - { - self.connectedControllers.remove(at: index) - - if self.connectedControllers.count == 0 - { - self.tableView.deleteSections(IndexSet(integer: ControllersSettingsSection.externalControllers.rawValue), with: .fade) - } - else - { - self.tableView.deleteRows(at: [IndexPath(row: index, section: ControllersSettingsSection.externalControllers.rawValue)], with: .automatic) - } - } - - if controller.playerIndex == self.playerIndex - { - self.tableView.reloadSections(IndexSet(integer: ControllersSettingsSection.none.rawValue), with: .none) } } } extension ControllersSettingsViewController { - override func numberOfSections(in tableView: UITableView) -> Int + override func prepare(for segue: UIStoryboardSegue, sender: Any?) { - if self.connectedControllers.count == 0 - { - return 2 - } - - return 3 - } - - override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int - { - switch ControllersSettingsSection(rawValue: section)! - { - case .none: return 1 - case .localDevice: return 1 - case .externalControllers: return self.connectedControllers.count - } - } - - override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell - { - let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) - cell.detailTextLabel?.text = nil - cell.accessoryType = .none + guard let identifier = segue.identifier else { return } - if (indexPath as NSIndexPath).section == ControllersSettingsSection.none.rawValue + switch identifier { + case "controllerInputsSegue": + let controllerInputsViewController = (segue.destination as! UINavigationController).topViewController as! ControllerInputsViewController + controllerInputsViewController.gameController = self.gameController + controllerInputsViewController.system = .snes + + default: break + } + } + + @IBAction private func unwindFromControllerControlsViewController(_ segue: UIStoryboardSegue) + { + } +} + +private extension ControllersSettingsViewController +{ + func configure(_ cell: UITableViewCell, for indexPath: IndexPath) + { + cell.accessoryType = .none + cell.detailTextLabel?.text = nil + cell.textLabel?.textColor = .darkText + + switch Section(rawValue: indexPath.section)! + { + case .none: cell.textLabel?.text = NSLocalizedString("None", comment: "") if Settings.localControllerPlayerIndex != self.playerIndex && !self.connectedControllers.contains(where: { $0.playerIndex == self.playerIndex }) { cell.accessoryType = .checkmark } - } - else - { - let controller: ExternalController - if (indexPath as NSIndexPath).section == ControllersSettingsSection.localDevice.rawValue + case .localDevice, .externalControllers: + let controller: GameController + + if indexPath.section == Section.localDevice.rawValue { controller = self.localDeviceController } - else if (indexPath as NSIndexPath).section == ControllersSettingsSection.externalControllers.rawValue + else if indexPath.section == Section.externalControllers.rawValue { - controller = self.connectedControllers[(indexPath as NSIndexPath).row] + controller = self.connectedControllers[indexPath.row] } else { @@ -205,25 +158,216 @@ extension ControllersSettingsViewController cell.accessoryType = .checkmark } else - { + { if let playerIndex = controller.playerIndex { cell.detailTextLabel?.text = NSLocalizedString("Player \(playerIndex + 1)", comment: "") } - } + + case .customizeControls: + cell.textLabel?.text = NSLocalizedString("Customize Controls…", comment: "") + cell.textLabel?.textColor = self.view.tintColor + } + } +} + +private extension ControllersSettingsViewController +{ + dynamic func externalGameControllerDidConnect(_ notification: Notification) + { + guard let controller = notification.object as? GameController else { return } + + if let playerIndex = controller.playerIndex + { + // Keep connected controllers sorted. + + self.connectedControllers.insert(controller, at: playerIndex) + } + else + { + self.connectedControllers.append(controller) } + if let index = self.connectedControllers.index(where: { $0 == controller }) + { + self.tableView.beginUpdates() + + if self.connectedControllers.count == 1 + { + self.tableView.insertSections(IndexSet(integer: Section.externalControllers.rawValue), with: .fade) + + if self.connectedControllers.first?.playerIndex == self.playerIndex + { + self.tableView.insertSections(IndexSet(integer: Section.customizeControls.rawValue), with: .fade) + } + } + else + { + self.tableView.insertRows(at: [IndexPath(row: index, section: Section.externalControllers.rawValue)], with: .automatic) + } + + self.tableView.endUpdates() + } + + if controller.playerIndex == self.playerIndex + { + self.tableView.reloadSections(IndexSet(integer: Section.none.rawValue), with: .none) + self.tableView.reloadSections(IndexSet(integer: Section.localDevice.rawValue), with: .none) + } + } + + dynamic func externalGameControllerDidDisconnect(_ notification: Notification) + { + guard let controller = notification.object as? GameController else { return } + + if let index = self.connectedControllers.index(where: { $0 == controller }) + { + self.connectedControllers.remove(at: index) + + self.tableView.beginUpdates() + + if self.connectedControllers.count == 0 + { + self.tableView.deleteSections(IndexSet(integer: Section.externalControllers.rawValue), with: .fade) + + if controller.playerIndex != nil + { + self.tableView.deleteSections(IndexSet(integer: Section.customizeControls.rawValue), with: .fade) + } + } + else + { + self.tableView.deleteRows(at: [IndexPath(row: index, section: Section.externalControllers.rawValue)], with: .automatic) + } + + self.tableView.endUpdates() + } + + if controller.playerIndex == self.playerIndex + { + self.tableView.reloadSections(IndexSet(integer: Section.none.rawValue), with: .none) + self.tableView.reloadSections(IndexSet(integer: Section.localDevice.rawValue), with: .none) + } + } +} + +extension ControllersSettingsViewController +{ + override func numberOfSections(in tableView: UITableView) -> Int + { + if self.connectedControllers.count == 0 + { + return 2 + } + + if self.gameController == nil || Settings.localControllerPlayerIndex == self.playerIndex + { + return 3 + } + + return 4 + } + + override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int + { + switch Section(rawValue: section)! + { + case .none: return 0 + case .localDevice: return 1 + case .externalControllers: return self.connectedControllers.count + case .customizeControls: return 1 + } + } + + override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell + { + let cell = tableView.dequeueReusableCell(withIdentifier: RSTCellContentGenericCellIdentifier, for: indexPath) + + self.configure(cell, for: indexPath) + return cell } override func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? { - switch ControllersSettingsSection(rawValue: section)! + switch Section(rawValue: section)! { case .none: return nil case .localDevice: return NSLocalizedString("Local Device", comment: "") case .externalControllers: return self.connectedControllers.count > 0 ? NSLocalizedString("External Controllers", comment: "") : "" + case .customizeControls: return nil } } + + override func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat + { + if section == Section.none.rawValue + { + return 1 + } + + return UITableViewAutomaticDimension + } +} + +extension ControllersSettingsViewController +{ + override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) + { + let previousIndexPath: IndexPath? + + if let gameController = self.gameController + { + if gameController == self.localDeviceController + { + previousIndexPath = IndexPath(row: 0, section: Section.localDevice.rawValue) + } + else if let row = self.connectedControllers.index(where: { $0 == gameController }) + { + previousIndexPath = IndexPath(row: row, section: Section.externalControllers.rawValue) + } + else + { + previousIndexPath = nil + } + } + else + { + previousIndexPath = IndexPath(row: 0, section: Section.none.rawValue) + } + + switch Section(rawValue: indexPath.section)! + { + case .none: self.gameController = nil + case .localDevice: self.gameController = self.localDeviceController + case .externalControllers: self.gameController = self.connectedControllers[indexPath.row] + case .customizeControls: + guard let cell = tableView.cellForRow(at: indexPath) else { return } + self.performSegue(withIdentifier: "controllerInputsSegue", sender: cell) + + return + } + + self.tableView.beginUpdates() + + if let previousIndexPath = previousIndexPath, let cell = tableView.cellForRow(at: previousIndexPath) + { + // Must configure cell directly, or else a strange animation occurs when reloading row on iOS 11. + self.configure(cell, for: previousIndexPath) + } + + self.tableView.reloadRows(at: [indexPath], with: .none) + + if self.numberOfSections(in: self.tableView) > self.tableView.numberOfSections + { + self.tableView.insertSections(IndexSet(integer: Section.customizeControls.rawValue), with: .fade) + } + else if self.numberOfSections(in: self.tableView) < self.tableView.numberOfSections + { + self.tableView.deleteSections(IndexSet(integer: Section.customizeControls.rawValue), with: .fade) + } + + self.tableView.endUpdates() + } } diff --git a/Delta/Settings/Controllers/InputCalloutView.swift b/Delta/Settings/Controllers/InputCalloutView.swift new file mode 100644 index 0000000..b6c0d7a --- /dev/null +++ b/Delta/Settings/Controllers/InputCalloutView.swift @@ -0,0 +1,84 @@ +// +// InputCalloutView.swift +// Delta +// +// Created by Riley Testut on 7/9/17. +// Copyright © 2017 Riley Testut. All rights reserved. +// + +import SMCalloutView + +import DeltaCore + +extension InputCalloutView +{ + enum State + { + case normal + case listening + } +} + +class InputCalloutView: SMCalloutView +{ + var input: Input? { + didSet { + self.updateState() + } + } + + var state: State = .normal { + didSet { + self.updateState() + } + } + + fileprivate let textLabel: UILabel + + init() + { + self.textLabel = UILabel() + self.textLabel.font = UIFont.boldSystemFont(ofSize: 18.0) + self.textLabel.textAlignment = .center + + super.init(frame: CGRect.zero) + + self.titleView = self.textLabel + } + + required init?(coder aDecoder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + override func tintColorDidChange() + { + super.tintColorDidChange() + + self.updateTintColor() + } +} + +private extension InputCalloutView +{ + func updateState() + { + switch self.state + { + case .normal: self.textLabel.text = self.input?.localizedName + case .listening: self.textLabel.text = NSLocalizedString("Press Button", comment: "") + } + + self.updateTintColor() + + self.textLabel.sizeToFit() + } + + func updateTintColor() + { + switch self.state + { + case .normal: self.textLabel.textColor = self.tintColor + case .listening: self.textLabel.textColor = .red + } + } +} diff --git a/Delta/Settings/Settings.storyboard b/Delta/Settings/Settings.storyboard index 73450e5..e4c634a 100644 --- a/Delta/Settings/Settings.storyboard +++ b/Delta/Settings/Settings.storyboard @@ -1,11 +1,11 @@ - + - + @@ -29,7 +29,7 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -257,7 +329,7 @@ - - - @@ -284,9 +353,11 @@ + + + - @@ -416,7 +487,7 @@ - + @@ -428,5 +499,76 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Delta/Settings/Settings.swift b/Delta/Settings/Settings.swift index aba0493..5a6269c 100644 --- a/Delta/Settings/Settings.swift +++ b/Delta/Settings/Settings.swift @@ -40,12 +40,14 @@ struct Settings /// Controllers static var localControllerPlayerIndex: Int? = 0 { didSet { + guard self.localControllerPlayerIndex != oldValue else { return } NotificationCenter.default.post(name: .settingsDidChange, object: nil, userInfo: [NotificationUserInfoKey.name: Name.localControllerPlayerIndex]) } } static var translucentControllerSkinOpacity: CGFloat { set { + guard newValue != self.translucentControllerSkinOpacity else { return } UserDefaults.standard.translucentControllerSkinOpacity = newValue NotificationCenter.default.post(name: .settingsDidChange, object: nil, userInfo: [NotificationUserInfoKey.name: Name.translucentControllerSkinOpacity]) } @@ -113,6 +115,9 @@ struct Settings static func setPreferredControllerSkin(_ controllerSkin: ControllerSkin, for system: System, traits: DeltaCore.ControllerSkin.Traits) { guard let userDefaultKey = self.preferredControllerSkinKey(for: system, traits: traits) else { return } + + guard UserDefaults.standard.string(forKey: userDefaultKey) != controllerSkin.identifier else { return } + UserDefaults.standard.set(controllerSkin.identifier, forKey: userDefaultKey) NotificationCenter.default.post(name: .settingsDidChange, object: controllerSkin, userInfo: [NotificationUserInfoKey.name: Name.preferredControllerSkin, NotificationUserInfoKey.system: system, NotificationUserInfoKey.traits: traits]) diff --git a/Delta/Settings/SettingsViewController.swift b/Delta/Settings/SettingsViewController.swift index c4fe7d3..3f64c4a 100644 --- a/Delta/Settings/SettingsViewController.swift +++ b/Delta/Settings/SettingsViewController.swift @@ -42,12 +42,14 @@ class SettingsViewController: UITableViewController fileprivate var selectionFeedbackGenerator: UISelectionFeedbackGenerator? + fileprivate var previousSelectedRowIndexPath: IndexPath? + required init?(coder aDecoder: NSCoder) { super.init(coder: aDecoder) - NotificationCenter.default.addObserver(self, selector: #selector(SettingsViewController.externalControllerDidConnect(_:)), name: .externalControllerDidConnect, object: nil) - NotificationCenter.default.addObserver(self, selector: #selector(SettingsViewController.externalControllerDidDisconnect(_:)), name: .externalControllerDidDisconnect, object: nil) + NotificationCenter.default.addObserver(self, selector: #selector(SettingsViewController.externalGameControllerDidConnect(_:)), name: .externalGameControllerDidConnect, object: nil) + NotificationCenter.default.addObserver(self, selector: #selector(SettingsViewController.externalGameControllerDidDisconnect(_:)), name: .externalGameControllerDidDisconnect, object: nil) } override func viewDidLoad() @@ -62,8 +64,15 @@ class SettingsViewController: UITableViewController { super.viewWillAppear(animated) - if let indexPath = self.tableView.indexPathForSelectedRow + if let indexPath = self.previousSelectedRowIndexPath { + if indexPath.section == Section.controllers.rawValue + { + // Update and temporarily re-select selected row. + self.tableView.reloadSections(IndexSet(integer: Section.controllers.rawValue), with: .none) + self.tableView.selectRow(at: indexPath, animated: false, scrollPosition: UITableViewScrollPosition.none) + } + self.tableView.deselectRow(at: indexPath, animated: true) } } @@ -82,6 +91,8 @@ class SettingsViewController: UITableViewController let indexPath = self.tableView.indexPath(for: cell) else { return } + self.previousSelectedRowIndexPath = indexPath + switch segueType { case Segue.controllers: @@ -111,18 +122,6 @@ private extension SettingsViewController } } -private extension SettingsViewController -{ - @IBAction func unwindFromControllersSettingsViewController(_ segue: UIStoryboardSegue) - { - let indexPath = self.tableView.indexPathForSelectedRow - - self.tableView.reloadSections(IndexSet(integer: Section.controllers.rawValue), with: .none) - - self.tableView.selectRow(at: indexPath, animated: true, scrollPosition: UITableViewScrollPosition.none) - } -} - private extension SettingsViewController { @IBAction func beginChangingControllerOpacity(with sender: UISlider) @@ -154,12 +153,12 @@ private extension SettingsViewController private extension SettingsViewController { - dynamic func externalControllerDidConnect(_ notification: Notification) + dynamic func externalGameControllerDidConnect(_ notification: Notification) { self.tableView.reloadSections(IndexSet(integer: Section.controllers.rawValue), with: .none) } - dynamic func externalControllerDidDisconnect(_ notification: Notification) + dynamic func externalGameControllerDidDisconnect(_ notification: Notification) { self.tableView.reloadSections(IndexSet(integer: Section.controllers.rawValue), with: .none) } @@ -190,9 +189,9 @@ extension SettingsViewController { cell.detailTextLabel?.text = UIDevice.current.name } - else if let index = ExternalControllerManager.shared.connectedControllers.index(where: { $0.playerIndex == indexPath.row }) + else if let index = ExternalGameControllerManager.shared.connectedControllers.index(where: { $0.playerIndex == indexPath.row }) { - let controller = ExternalControllerManager.shared.connectedControllers[index] + let controller = ExternalGameControllerManager.shared.connectedControllers[index] cell.detailTextLabel?.text = controller.name } else @@ -211,7 +210,7 @@ extension SettingsViewController { let cell = tableView.cellForRow(at: indexPath) let section = Section(rawValue: indexPath.section)! - + switch section { case Section.controllers: self.performSegue(withIdentifier: Segue.controllers.rawValue, sender: cell) diff --git a/Podfile b/Podfile index b2c3b4a..e6bd722 100644 --- a/Podfile +++ b/Podfile @@ -9,6 +9,7 @@ target 'Delta' do pod 'SDWebImage', '~> 3.8' pod 'Fabric', '~> 1.6.0' pod 'Crashlytics', '~> 3.8.0' + pod 'SMCalloutView' end post_install do |installer| diff --git a/Podfile.lock b/Podfile.lock index c6d6566..7838f15 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -6,6 +6,7 @@ PODS: - SDWebImage (3.8.2): - SDWebImage/Core (= 3.8.2) - SDWebImage/Core (3.8.2) + - SMCalloutView (2.1.5) - SQLite.swift (0.11.3): - SQLite.swift/standard (= 0.11.3) - SQLite.swift/standard (0.11.3) @@ -15,6 +16,7 @@ DEPENDENCIES: - Fabric (~> 1.6.0) - FileMD5Hash (~> 2.0.0) - SDWebImage (~> 3.8) + - SMCalloutView - SQLite.swift (~> 0.11.0) SPEC CHECKSUMS: @@ -22,8 +24,9 @@ SPEC CHECKSUMS: Fabric: 5911403591946b8228ab1c51d98f1d7137e863c6 FileMD5Hash: 3ed69cc19a21ff4d30ae8833fc104275ad2c7de0 SDWebImage: '098e97e6176540799c27e804c96653ee0833d13c' + SMCalloutView: 5c0ee363dc8e7204b2fda17dfad38c93e9e23481 SQLite.swift: 99b36c22084427f0abbeb957556ce1528cf10bb3 -PODFILE CHECKSUM: de6e2bf57dcf8e9fe6b622b181fd87d3855641e6 +PODFILE CHECKSUM: 598f830560ac5b18bbe0eb40134a1719f38f12f1 COCOAPODS: 1.2.1 diff --git a/Pods/Manifest.lock b/Pods/Manifest.lock index c6d6566..7838f15 100644 --- a/Pods/Manifest.lock +++ b/Pods/Manifest.lock @@ -6,6 +6,7 @@ PODS: - SDWebImage (3.8.2): - SDWebImage/Core (= 3.8.2) - SDWebImage/Core (3.8.2) + - SMCalloutView (2.1.5) - SQLite.swift (0.11.3): - SQLite.swift/standard (= 0.11.3) - SQLite.swift/standard (0.11.3) @@ -15,6 +16,7 @@ DEPENDENCIES: - Fabric (~> 1.6.0) - FileMD5Hash (~> 2.0.0) - SDWebImage (~> 3.8) + - SMCalloutView - SQLite.swift (~> 0.11.0) SPEC CHECKSUMS: @@ -22,8 +24,9 @@ SPEC CHECKSUMS: Fabric: 5911403591946b8228ab1c51d98f1d7137e863c6 FileMD5Hash: 3ed69cc19a21ff4d30ae8833fc104275ad2c7de0 SDWebImage: '098e97e6176540799c27e804c96653ee0833d13c' + SMCalloutView: 5c0ee363dc8e7204b2fda17dfad38c93e9e23481 SQLite.swift: 99b36c22084427f0abbeb957556ce1528cf10bb3 -PODFILE CHECKSUM: de6e2bf57dcf8e9fe6b622b181fd87d3855641e6 +PODFILE CHECKSUM: 598f830560ac5b18bbe0eb40134a1719f38f12f1 COCOAPODS: 1.2.1 diff --git a/Pods/Pods.xcodeproj/project.pbxproj b/Pods/Pods.xcodeproj/project.pbxproj index e5d28c5..8fa2f60 100644 --- a/Pods/Pods.xcodeproj/project.pbxproj +++ b/Pods/Pods.xcodeproj/project.pbxproj @@ -7,215 +7,239 @@ objects = { /* Begin PBXBuildFile section */ - 098DD319E9D5AE3C4B413F1DCB7245E5 /* FTS4.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2F5CF81D1216A4964304BE11C91A83D5 /* FTS4.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 12CF79798B69B43D77D12724505829EB /* SQLite-Bridging.m in Sources */ = {isa = PBXBuildFile; fileRef = 5A75411E305B9728E52F9D17FB40749B /* SQLite-Bridging.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 1B1088DAF42D74567A705DC440211D12 /* NSData+ImageContentType.h in Headers */ = {isa = PBXBuildFile; fileRef = 03968465C6A040B68B9B4E3F0F9F857A /* NSData+ImageContentType.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1C0F95DC71B64C451857A4C991BF2AF8 /* SDImageCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 0A0AE959B5D68C3CB0EE54AFB2DEAF6E /* SDImageCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1CA30DFDE14644203704970B8D9805BC /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6CE29CF4FF5C02028C0A06EC0D2A6120 /* Foundation.framework */; }; - 2888ACC8836D2E79F2F341C32AB3E0B0 /* SDWebImageCompat.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FEA071EB4479A6AF3E7BF5F719A6B2E /* SDWebImageCompat.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 289C4C0E1B0E975621D177439BCF4B6F /* UIView+WebCacheOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 012884903390C04A55B7E547DA2B34B5 /* UIView+WebCacheOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 291D6ECA35FE23753F9EFEDA8AB633FC /* UIImageView+HighlightedWebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = DAA3558CAA80E807627A616811FA5BD6 /* UIImageView+HighlightedWebCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2E66668BB25537BCAC6263434F08C9DD /* FileMD5Hash-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 54CF13DAB511ACE04F4CFF9FDF759D51 /* FileMD5Hash-dummy.m */; }; - 32649919900BFE14972CB170A11E7A30 /* SDWebImageDecoder.m in Sources */ = {isa = PBXBuildFile; fileRef = FCC7CD02F4721E0FC8931E96B16AB368 /* SDWebImageDecoder.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 3CD0EE70D32733800E902E7C8AFEA79B /* UIButton+WebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 640D011133223416ECD115481ABE11C6 /* UIButton+WebCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 01F6FD7829922FFEDBA0AC937221139D /* UIImage+MultiFormat.m in Sources */ = {isa = PBXBuildFile; fileRef = F9058D96291772916213F878DBC9D4D1 /* UIImage+MultiFormat.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 020AFCE363BBA923E907BD453C394A18 /* SDWebImageCompat.h in Headers */ = {isa = PBXBuildFile; fileRef = A8DD6B2CD921B3CD0CC1C8D285C3DB14 /* SDWebImageCompat.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 02A3EAB09395DB7996C6A2D6FFEEA541 /* SQLite.swift-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 2911054ACE98C26AD58D7BD2727E97E5 /* SQLite.swift-dummy.m */; }; + 05585238F98FFE793DC0D1BA800C0D27 /* fts3_tokenizer.h in Headers */ = {isa = PBXBuildFile; fileRef = B718D0BB0426AD065EABCA59ABA865E3 /* fts3_tokenizer.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 0A108DF7E6F55085A67FC6E0FF9D597B /* Helpers.swift in Sources */ = {isa = PBXBuildFile; fileRef = B8BC0D2A173827BA1039A7C690560FF3 /* Helpers.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 0E8A3312FC090BE373D8B2DC9F33355C /* SMCalloutView.h in Headers */ = {isa = PBXBuildFile; fileRef = F715310E4E9F5621B0A1EE26721C2053 /* SMCalloutView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 0E95FFC222F9730AB5A2FA648F3DC10B /* Pods-Delta-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 00B00707EB4D7D4F01732D69B015ADDF /* Pods-Delta-dummy.m */; }; + 14D45BB06714ADAB897AC0F9F5DEEB35 /* CustomFunctions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 19EBBFE10B2645507B0A3F484F55BF94 /* CustomFunctions.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 19A8DB8810E10682948CBA8F1954F70E /* UIImage+GIF.h in Headers */ = {isa = PBXBuildFile; fileRef = 49472E71891AFD1F328838FADB677451 /* UIImage+GIF.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1C5A988FA0C3F4E0F3D81AC3C597B9E8 /* Foundation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2F44A58B8FBEE6A42E7C1709683A11E5 /* Foundation.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 1FAD25073BF85238A82B39CF64208138 /* SDWebImageDownloaderOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = D1A915C60E1D50527210412A5B4094DD /* SDWebImageDownloaderOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 20A087C33B817D962690FDC7E894405A /* SQLite-Bridging.h in Headers */ = {isa = PBXBuildFile; fileRef = 068FC88E6553ADF63F7B7A7EC8A7E159 /* SQLite-Bridging.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2207FDE1BA4EE2D34E6465B2C8161FC3 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6CE29CF4FF5C02028C0A06EC0D2A6120 /* Foundation.framework */; }; + 255360BAB2981F4F6C7C2ADFB034DD78 /* SDWebImageManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 4584B245DEE3A7D04444B05704046791 /* SDWebImageManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 29B4C7EBC553B1A96DDE7199EF7EB78A /* SMClassicCalloutView.m in Sources */ = {isa = PBXBuildFile; fileRef = 2F3E13029C6A72F6947FCFCDD4DB219D /* SMClassicCalloutView.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 29D38081CE6E0C1DC7B78CB2467733EE /* SMCalloutView-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 3C1E5EE84A074FE94CE4085F1073C5A8 /* SMCalloutView-dummy.m */; }; + 2E66668BB25537BCAC6263434F08C9DD /* FileMD5Hash-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = FE3498CA7C8E4CDD1E7F0774B8954505 /* FileMD5Hash-dummy.m */; }; + 307ACA884D90D1B1AF65D152027F8037 /* SDImageCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 9FFDEFB012447BDBE8EEBA4C8646C82A /* SDImageCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3134B683130B4C911A3B1F3269C23C0F /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6CE29CF4FF5C02028C0A06EC0D2A6120 /* Foundation.framework */; }; + 34F15EDD4167886716DE13EF3DA61525 /* UIButton+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F6703DD83793C5DD5FAA92B71CB1DCC /* UIButton+WebCache.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 35ECA1266BE70763C47DB385321C8BDA /* UIImage+MultiFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = E6CB37913B03B0D1D9C660198A0BBFD0 /* UIImage+MultiFormat.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3B7E86A00F8C6E8F5A351516BDFC6E0A /* SDWebImagePrefetcher.m in Sources */ = {isa = PBXBuildFile; fileRef = 9573161D35C02B33C6AB094C1236CB57 /* SDWebImagePrefetcher.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 3BF50196E73DD51E6A1152973DFC27DD /* SMCalloutView.m in Sources */ = {isa = PBXBuildFile; fileRef = EB00990C9F7C2C0808B9C725904197A8 /* SMCalloutView.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 3EEAE0A72D5F8D0397B9DF878F9ABE98 /* UIImageView+HighlightedWebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = BEE873D9C7F8F2001BB54E2DAE25C134 /* UIImageView+HighlightedWebCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 405F2E285A1E5033E75EA989DCE7F1BD /* Schema.swift in Sources */ = {isa = PBXBuildFile; fileRef = D6849DCD50DED973B7F32496C8F6CADC /* Schema.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 44A70B580C1AAD2907574BCA02C3B243 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6CE29CF4FF5C02028C0A06EC0D2A6120 /* Foundation.framework */; }; - 459009460BFBB3DBB4C9168143FC967E /* SDWebImage-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 043A876B015BB7FB2E06D12EDB0CE561 /* SDWebImage-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4A2DCD3F0F0A15427A7008B45E0D3463 /* Operators.swift in Sources */ = {isa = PBXBuildFile; fileRef = D8758AB01882D93CABAEC02BB1C08B15 /* Operators.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 5172EB82F181CD5C6058720F1EDBFFBA /* SQLite-Bridging.h in Headers */ = {isa = PBXBuildFile; fileRef = 0B581A01C09D5BEFCAE03AA9CBA0DD88 /* SQLite-Bridging.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 58C256076C467E9132B30FA203F4682E /* SDWebImageDownloaderOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = A4EB749E8B64FB36F3E2A229C14D3E17 /* SDWebImageDownloaderOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 59757ED380B9FD2D3529CC01940ABC17 /* Setter.swift in Sources */ = {isa = PBXBuildFile; fileRef = A743D258529CE77D67CFD05E8822D834 /* Setter.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 60C9DBA3EA5D0784AE9C8C87B51BBCF0 /* SDWebImageManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 6D35B8054C6A1FB85E1C8AF49DA754AB /* SDWebImageManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 662C18FEA4DFF9970E8D028B281D97EA /* SDWebImage-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = E170474F2A4416367241B2C86D439273 /* SDWebImage-dummy.m */; }; - 66BF4CF3A7E34656616159932E27C6B6 /* FileHash.m in Sources */ = {isa = PBXBuildFile; fileRef = 4865C9E8384997F3382A3CC2772EA009 /* FileHash.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 679DC0A54440ACE06C668426D960434B /* Connection.swift in Sources */ = {isa = PBXBuildFile; fileRef = DFF069BD2848F152567F822EA1F4F3A5 /* Connection.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 6A00465C6CF90CE73C984F03572BE9C3 /* UIImage+MultiFormat.m in Sources */ = {isa = PBXBuildFile; fileRef = 5E6F2B93EA109FC734C799B37A5F2C65 /* UIImage+MultiFormat.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 6B70676C9CD3E65704CF5F345A58D7D8 /* Expression.swift in Sources */ = {isa = PBXBuildFile; fileRef = 70BF8485A2C5150F9FCC581529A410F3 /* Expression.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 6C88898656689F997079D8C2E02D380B /* SDWebImageDownloader.h in Headers */ = {isa = PBXBuildFile; fileRef = 01F7F0FD5C1DD4A57E10338DECBE08BF /* SDWebImageDownloader.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 71A419BAB91B0BECA6617C071891BF3C /* UIImageView+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = F3AA6D231072BEA87D8361284B976373 /* UIImageView+WebCache.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 7487C10F58C60552A3B84C47EF4AABB5 /* SDWebImageDownloader.m in Sources */ = {isa = PBXBuildFile; fileRef = 6B14D99E3A060C4422D52E1B43DF44C1 /* SDWebImageDownloader.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 7784F558B74616E8DC1818DA0A0532BC /* Pods-Delta-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = A1CF7D0F0E5A5A95A050C645EA6CDA8D /* Pods-Delta-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7CBFCCC7367FCCF9D53FBFA8ED86BDD7 /* Pods-Delta-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 00B00707EB4D7D4F01732D69B015ADDF /* Pods-Delta-dummy.m */; }; - 7E7C64643C2C3AC5F7CBCC8E044801EF /* UIImage+MultiFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = ABE47F73E3A4F0D9C26747F2CCEB862D /* UIImage+MultiFormat.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 80C66AC9B65D7A9E73EAF52953078A80 /* Foundation.swift in Sources */ = {isa = PBXBuildFile; fileRef = D90A7E2961E5EDAAE3CD486D46F95F63 /* Foundation.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 81EA3C6ADBF7CCBC1711693AD8966D30 /* Helpers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 730DA6A4D3B2E1433B1F595785D02760 /* Helpers.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 843BDA3C40997300E0B3CB9E27043997 /* SDWebImageDownloaderOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = F6D8E260B72CA343410625FD1A728004 /* SDWebImageDownloaderOperation.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 85AC71E815A41D4B45A0EB55F9A5DB1E /* SDWebImagePrefetcher.h in Headers */ = {isa = PBXBuildFile; fileRef = AF307A627BC5C545FD14AF15658B0A20 /* SDWebImagePrefetcher.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 92C60A4E3797D69E6A7725B12E25C0D0 /* fts3_tokenizer.h in Headers */ = {isa = PBXBuildFile; fileRef = BA4786611036F85C3646609824CD9563 /* fts3_tokenizer.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 930D6D8D90701B4A6FD30E94CF42871B /* SDWebImageOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 84CE5D699E3556BCEA5319CE02EC862B /* SDWebImageOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 9A73EA1D60A6932BDA2B033258B82247 /* SQLite.swift-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 802918A5F5E07DF5C0B521963C07FDC1 /* SQLite.swift-dummy.m */; }; - A215B295B907F3FC375FFA644649A845 /* Value.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33F5EC95A9BDCF263B9E3A69A8762EB1 /* Value.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - A3C78AD9387EE296772B1B4031290DE9 /* Blob.swift in Sources */ = {isa = PBXBuildFile; fileRef = 787DA4DEC4DDF799BD316E32E7BDF023 /* Blob.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - A5E0B4C7414F681B71DE66C07F4628C4 /* Schema.swift in Sources */ = {isa = PBXBuildFile; fileRef = 321849DF0ADAD2DFA407B0D629E68647 /* Schema.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - A66BC5F91E9B66C05262C55BABAA0421 /* UIView+WebCacheOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 7DAD08097357C3001C4E61ABB3FA5893 /* UIView+WebCacheOperation.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - A66ECB0C1037DD2A24411DF60C9362AE /* UIImage+GIF.m in Sources */ = {isa = PBXBuildFile; fileRef = AD6EDB41DF6DFD4BDC3AD9CA119C329E /* UIImage+GIF.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - A7EF436BF7DF4C8640864FBA1BA94351 /* SDWebImageDecoder.h in Headers */ = {isa = PBXBuildFile; fileRef = D7F1314060E559C8947FF2156F1A92FC /* SDWebImageDecoder.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B4D2E6BDA66762C41461DE1466567A22 /* AggregateFunctions.swift in Sources */ = {isa = PBXBuildFile; fileRef = DFADED5A86C0867B0F0AD1A6EB56B753 /* AggregateFunctions.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - BCC3E7AF8EAD39EAB60E7F271CAAF5D7 /* FileMD5Hash-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = A60C439A4E5C924E3287AB0551280E2E /* FileMD5Hash-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - BCDE9C9E8DDB9FD7F9F0F68200854276 /* NSData+ImageContentType.m in Sources */ = {isa = PBXBuildFile; fileRef = 6FDE31395137009C3C06B9B76AA85BD0 /* NSData+ImageContentType.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - BE6E1EFB57D60E715B8617336436B7EB /* ImageIO.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 635A4BD1CEF7E623C71F97A54BFC3616 /* ImageIO.framework */; }; - C0D6EE693288E4A34090518CEE18269F /* UIButton+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 7FF2F911B4ACB0BBBE1355C44C19EBEB /* UIButton+WebCache.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - C3351D1B55FD32BBAD9B3335713FBB37 /* FTS5.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9F30F5EA75539EB97D8BC21E9A952579 /* FTS5.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - C36994840D82BF702EC602A8DEC63223 /* Query.swift in Sources */ = {isa = PBXBuildFile; fileRef = CDB4EF3E67B3AC47FF33241CB33BC723 /* Query.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - CA703680A4DCD9CBED0A35283C5B26AD /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6CE29CF4FF5C02028C0A06EC0D2A6120 /* Foundation.framework */; }; - CE103933627196D2BB63FCFB7DDDE1F0 /* UIImage+GIF.h in Headers */ = {isa = PBXBuildFile; fileRef = CD6EF89C9FB4BA901403ADC3AA39BEBF /* UIImage+GIF.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D1EC729542506D0FF0FEAFC10E544BDC /* SDWebImageCompat.m in Sources */ = {isa = PBXBuildFile; fileRef = B0A0352CABBA53CE65669E49F7AC1135 /* SDWebImageCompat.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - D7570BC6C11012C5F53C53ABF8187CC6 /* SDWebImagePrefetcher.m in Sources */ = {isa = PBXBuildFile; fileRef = 010A46F5A9D7559BB3CCF9ABDBCAFF24 /* SDWebImagePrefetcher.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - E376FD7DF6990EB5D6059FF86AA392DD /* CoreFunctions.swift in Sources */ = {isa = PBXBuildFile; fileRef = B4B2407530ACBB22F33CD725A0C500FF /* CoreFunctions.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - E5102C928DC86E24E1FA70862A698132 /* RTree.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F44E15D9E3FF0C4C5B7A858FFCA8817 /* RTree.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - E8166EA34E4BEF58C5583C06CFFB0971 /* UIImageView+HighlightedWebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = A296555F1740CDDC85453F15267505CA /* UIImageView+HighlightedWebCache.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - EA47189A2ADA7ABA3CAD4DAA9C862095 /* SQLite.h in Headers */ = {isa = PBXBuildFile; fileRef = 11D69CC0585763C69BDC1D626B098E8D /* SQLite.h */; settings = {ATTRIBUTES = (Public, ); }; }; - EAF8AC345B2B68E07E239E83AACF81E3 /* Collation.swift in Sources */ = {isa = PBXBuildFile; fileRef = D434BFEF549B14BDA9F9F9350AD2065E /* Collation.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - EC8F07E15821E96F36AE89560D864FCD /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6CE29CF4FF5C02028C0A06EC0D2A6120 /* Foundation.framework */; }; - EEF3F3825344DF5B3B1F91C8B3D92F81 /* CustomFunctions.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB55F6E76B1B3E9EBDD7386FA559CCCF /* CustomFunctions.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - F16B42DA86FEF3A85DD46658B962B61D /* FileHash.h in Headers */ = {isa = PBXBuildFile; fileRef = 25DF9947D404F6880E23C1E804CA53BF /* FileHash.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F70F77BB9BD4B473EF5731A958F6CFB4 /* Statement.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6986B87CC0ACC355E1901676484D59BA /* Statement.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - F713228AE3D00F1C478CF62077F73AD7 /* SQLite.swift-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 6BD3C5C2AC8B1879B569ADBBDAABD8CB /* SQLite.swift-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F86C46E798AA77D74381F0A299724517 /* UIImageView+WebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = A0B50EB1CF5F290CB62A27072E257F2B /* UIImageView+WebCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F97431F8AA6A848ACA072E9DB7DCF5DF /* SDWebImageManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 2745C6E9EBE97C845254602DC1592DF4 /* SDWebImageManager.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - FEE67933F477210286CDEC86E60D32FF /* SDImageCache.m in Sources */ = {isa = PBXBuildFile; fileRef = C57D8C69AD898251C5890F970E78AB4F /* SDImageCache.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 483BC893AE648B89F28763CC2FE1932A /* FTS4.swift in Sources */ = {isa = PBXBuildFile; fileRef = DCDE2E8B6DB2458ED0D0AEB620C82C33 /* FTS4.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 4BFD33775F72F952206DA9101BA849A2 /* UIView+WebCacheOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = B02313ED3C98F0D9E8E673D608674FF0 /* UIView+WebCacheOperation.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 53A1E27B96743AF1526979D7C407B36E /* SDImageCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 73648FFFD6172035C937058B26803D6D /* SDImageCache.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 593AA045F16ABDD2E0C216A6693160A6 /* SDWebImageDownloader.h in Headers */ = {isa = PBXBuildFile; fileRef = 5C453C51E8BE33C2E172E40B18626329 /* SDWebImageDownloader.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5EBA645F49A7944F9D5DE1DE7214B16C /* RTree.swift in Sources */ = {isa = PBXBuildFile; fileRef = BE04DBF47CF0621A6F64E90ECCEC74F2 /* RTree.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 65C3F0B49DCF090CFC1A57B581B7D5EE /* Value.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0EA433B1A2192D12009D581B153C3004 /* Value.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 66BF4CF3A7E34656616159932E27C6B6 /* FileHash.m in Sources */ = {isa = PBXBuildFile; fileRef = D7D4D4C83D4D81FF7570317D601B83DE /* FileHash.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 67A9DED3A799C2C1B3190757AF74C869 /* NSData+ImageContentType.m in Sources */ = {isa = PBXBuildFile; fileRef = A23D5152FE861FB5B1D4950073960C6E /* NSData+ImageContentType.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 69E9B37E0394A6C87B37648633198916 /* Setter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 652D47B5A7FD5E5026907CC2F6B79153 /* Setter.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 7BC82A3FB797473493834376FB76E54E /* CoreFunctions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8ECC54F33ED71354DF6CCCBE4668EEC3 /* CoreFunctions.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 7E1E4E7C559B3DCBC6FB1E3F91303A61 /* UIImageView+HighlightedWebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 032AB538856BB66C33BCF3A6EFEBAEDC /* UIImageView+HighlightedWebCache.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 8288FE73D4A817A73306848AF872DD3B /* SMCalloutView-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = F4A02F29281568B9C5A5FDAE342EB996 /* SMCalloutView-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 867ED479D87B069987F16CC84F1CB314 /* SDWebImageDecoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 7B3B201E9287A29A9C7DB3E6E89A7C60 /* SDWebImageDecoder.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 8F7D92A4E63CC4056DFD5C0B1FD14910 /* SQLite.swift-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 3F74AD19F091053437017F0F5538899C /* SQLite.swift-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A41E5A0EF327ED9DF2D2866EF78F30A5 /* SMClassicCalloutView.h in Headers */ = {isa = PBXBuildFile; fileRef = 77F129F1BA8E7E54902E13651560B797 /* SMClassicCalloutView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A5F83FD5E39A40A303AEE42994F6BB2D /* SDWebImageOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 72FC743DB5B7231D4A588B65D80A72CD /* SDWebImageOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A8274F6E16ECE48FB9139B8456A31201 /* SQLite.h in Headers */ = {isa = PBXBuildFile; fileRef = F277C21C6DB430322178CF427005E784 /* SQLite.h */; settings = {ATTRIBUTES = (Public, ); }; }; + AB4F3A463C806CFD7BD412DC96CCA6FF /* Blob.swift in Sources */ = {isa = PBXBuildFile; fileRef = 77CAA2EA8CD0D523E4CBE3D20712BE02 /* Blob.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + AD541D0CA07079BA817282E47531170C /* ImageIO.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 635A4BD1CEF7E623C71F97A54BFC3616 /* ImageIO.framework */; }; + AF71FA11F33D4FF8286DE4191247F4B9 /* NSData+ImageContentType.h in Headers */ = {isa = PBXBuildFile; fileRef = CDB4230F44759F4F6161E3A256B3BB05 /* NSData+ImageContentType.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B4FF0763F545E55DDF9FB358526B21C5 /* UIImageView+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = EBD8E993B110532376D18B7F68AB317A /* UIImageView+WebCache.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + B5C757D4F5CE144EBC972BC0EDA42EBC /* Expression.swift in Sources */ = {isa = PBXBuildFile; fileRef = 624F168E4CA14615A9D78854E7A933D5 /* Expression.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + B771F2C5509A5462CC27977AECB8A05E /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6CE29CF4FF5C02028C0A06EC0D2A6120 /* Foundation.framework */; }; + B9AC8B5C153CD4028E20BDA493F3E8E9 /* SDWebImagePrefetcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 36D00FF6092D42D9710DAB8238D6B0F4 /* SDWebImagePrefetcher.h */; settings = {ATTRIBUTES = (Public, ); }; }; + BACF769130EA8F084781334E3F5487D6 /* UIImage+GIF.m in Sources */ = {isa = PBXBuildFile; fileRef = 527BDC649D5F7705A1725233BEC21CEC /* UIImage+GIF.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + BB19B505BC3000C14CD0C6539F716F6F /* SDWebImageManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 83AD613EABACF4F682DD38C393197F4E /* SDWebImageManager.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + BC369BDF43EB991D6BDA5C129249D052 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6CE29CF4FF5C02028C0A06EC0D2A6120 /* Foundation.framework */; }; + BC7F01C05460B87B4BD3597D8CFEDDD0 /* Connection.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC2C0F90270E994FEDF6FDB780D88A68 /* Connection.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + BCC3E7AF8EAD39EAB60E7F271CAAF5D7 /* FileMD5Hash-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = C43F044D76D5174F1A3472D15441FAC9 /* FileMD5Hash-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + BD93645C73A232461BAFDCD2D583A48F /* SDWebImage-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 52C0F64FF5BD9D05D0DDD439AB4B4B4C /* SDWebImage-dummy.m */; }; + CB0C7E4A7184D8CB11F07ABB7E01BCBF /* SDWebImageDownloaderOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 286FB5B86F6E898E75403C870CC05011 /* SDWebImageDownloaderOperation.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + D1AB6379EC7678A60E7A342E19CD7463 /* AggregateFunctions.swift in Sources */ = {isa = PBXBuildFile; fileRef = AACB33C34A87776F6D89F7C7D999F2FE /* AggregateFunctions.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + D1B81917966545E8201CA9A7C53EAD86 /* SDWebImageDownloader.m in Sources */ = {isa = PBXBuildFile; fileRef = C7966176FA5D69F9D29BD871712BC02C /* SDWebImageDownloader.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + D47F030F3EE8210B84E275A72194BD50 /* SDWebImageCompat.m in Sources */ = {isa = PBXBuildFile; fileRef = 2D1BEC9E736FAF5A1F921744894A5521 /* SDWebImageCompat.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + D5F611A196AB19B6B27BC91E0F7CDF98 /* Operators.swift in Sources */ = {isa = PBXBuildFile; fileRef = CC2AEB033F145B0003C677FD35C0CBEE /* Operators.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + D76E41A83001A863D0EF9A3F0EC0F68B /* SDWebImageDecoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 40A8B4F2D02BC863608186A20E0C9C0D /* SDWebImageDecoder.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DC0D674B7D20F83A7A5BAEEE4F00AFB5 /* Query.swift in Sources */ = {isa = PBXBuildFile; fileRef = D34C5308CB41A391DE8F14481B181BF8 /* Query.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + DD3018D33ABEB0BAA61C562F8A5FFC45 /* SDWebImage-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 19644E545E27F0ABCAEA0D43C6DFB21E /* SDWebImage-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E282C5080C3257C180B32B1F15F2842E /* UIImageView+WebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 32F29B2603D0AC4578F3F268097EF73E /* UIImageView+WebCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E4A2641C95DDD1AEE0BA851321A07FC8 /* Pods-Delta-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = A1CF7D0F0E5A5A95A050C645EA6CDA8D /* Pods-Delta-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E70CE29F92FC143D25EBAB0AA0FF7847 /* SQLite-Bridging.m in Sources */ = {isa = PBXBuildFile; fileRef = 316F67B44DF5AB3889A51771534E09FB /* SQLite-Bridging.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + F01610EE244331A9AE359D92682841FB /* UIButton+WebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 87ED074865B1A0718B5980D1F6B32FD3 /* UIButton+WebCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F16B42DA86FEF3A85DD46658B962B61D /* FileHash.h in Headers */ = {isa = PBXBuildFile; fileRef = 2F58644292785B4F7A515DB8B0CDEDD6 /* FileHash.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F76BA2CF262298B5E751146776A25CB2 /* Statement.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3A3AE2A19B33430DE7A53B69F388DA5D /* Statement.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + FC2D34D5B376D1F700CAFB0E04439235 /* UIView+WebCacheOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 4E3FC8531E544D920F83AC90536903AD /* UIView+WebCacheOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + FD11B32C2CBEDD81033179121AAB5D2D /* Collation.swift in Sources */ = {isa = PBXBuildFile; fileRef = FD521181E9EA6EFB3C5D81835A4D448E /* Collation.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + FDEAC6DF3D7044CA7FDD15A185183C2C /* FTS5.swift in Sources */ = {isa = PBXBuildFile; fileRef = ACB861F144099C23DDBE864FB0C028E4 /* FTS5.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ - 43751C8F4A1E0FED8A513B6C736B2141 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; - proxyType = 1; - remoteGlobalIDString = D88F755329BB917F99DFC5405AC691FE; - remoteInfo = SQLite.swift; - }; - B1786652CDC10C9D41868B80152892A5 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; - proxyType = 1; - remoteGlobalIDString = 95AEAD50DEA1563D4D1E2AD6EEE0E7B4; - remoteInfo = SDWebImage; - }; - F1D70524142DB2A888CA1F6E3F0F67CC /* PBXContainerItemProxy */ = { + 0E57566421DC7C04ED10FBFF02AE3217 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; remoteGlobalIDString = 924057B2A88FC4B5526EC3FC7483ABE2; remoteInfo = FileMD5Hash; }; + 387F41711D87C3D2C8716FF754189765 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + proxyType = 1; + remoteGlobalIDString = E02CAC9BD02FC53AAA763EA4830E4884; + remoteInfo = SDWebImage; + }; + 3AAE57E02BD6B50C58159D299DCA0C4F /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + proxyType = 1; + remoteGlobalIDString = D71D7949D6292CD21BE206D00103E682; + remoteInfo = SQLite.swift; + }; + 7713FF1D874368FBE2D22D4E4CB7C6A7 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + proxyType = 1; + remoteGlobalIDString = 5A0A16E27351F849E411E94C505CF452; + remoteInfo = SMCalloutView; + }; /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ 00B00707EB4D7D4F01732D69B015ADDF /* Pods-Delta-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-Delta-dummy.m"; sourceTree = ""; }; - 010A46F5A9D7559BB3CCF9ABDBCAFF24 /* SDWebImagePrefetcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImagePrefetcher.m; path = SDWebImage/SDWebImagePrefetcher.m; sourceTree = ""; }; - 012884903390C04A55B7E547DA2B34B5 /* UIView+WebCacheOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIView+WebCacheOperation.h"; path = "SDWebImage/UIView+WebCacheOperation.h"; sourceTree = ""; }; - 01F7F0FD5C1DD4A57E10338DECBE08BF /* SDWebImageDownloader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageDownloader.h; path = SDWebImage/SDWebImageDownloader.h; sourceTree = ""; }; - 03968465C6A040B68B9B4E3F0F9F857A /* NSData+ImageContentType.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSData+ImageContentType.h"; path = "SDWebImage/NSData+ImageContentType.h"; sourceTree = ""; }; - 043A876B015BB7FB2E06D12EDB0CE561 /* SDWebImage-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SDWebImage-umbrella.h"; sourceTree = ""; }; - 0A0AE959B5D68C3CB0EE54AFB2DEAF6E /* SDImageCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageCache.h; path = SDWebImage/SDImageCache.h; sourceTree = ""; }; - 0B33A43387DF59869F2A6002F1DC3785 /* SQLite.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = SQLite.framework; path = SQLite.swift.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 0B581A01C09D5BEFCAE03AA9CBA0DD88 /* SQLite-Bridging.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "SQLite-Bridging.h"; path = "Sources/SQLiteObjc/include/SQLite-Bridging.h"; sourceTree = ""; }; - 11D69CC0585763C69BDC1D626B098E8D /* SQLite.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SQLite.h; path = Sources/SQLite/SQLite.h; sourceTree = ""; }; + 0159C36B78547E23EBA1867CAE65F002 /* FileMD5Hash.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = FileMD5Hash.framework; path = FileMD5Hash.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 032AB538856BB66C33BCF3A6EFEBAEDC /* UIImageView+HighlightedWebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImageView+HighlightedWebCache.m"; path = "SDWebImage/UIImageView+HighlightedWebCache.m"; sourceTree = ""; }; + 061C525038BE58FCE9A6013CBA4162B5 /* SMCalloutView.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SMCalloutView.xcconfig; sourceTree = ""; }; + 068FC88E6553ADF63F7B7A7EC8A7E159 /* SQLite-Bridging.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "SQLite-Bridging.h"; path = "Sources/SQLiteObjc/include/SQLite-Bridging.h"; sourceTree = ""; }; + 0BC95251B8ED1E506925B002BC5B1352 /* SMCalloutView.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = SMCalloutView.framework; path = SMCalloutView.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 0EA433B1A2192D12009D581B153C3004 /* Value.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Value.swift; path = Sources/SQLite/Core/Value.swift; sourceTree = ""; }; + 16C12BA1CDC4BAA71A94C08D894DAE28 /* SDWebImage.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = SDWebImage.framework; path = SDWebImage.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 19644E545E27F0ABCAEA0D43C6DFB21E /* SDWebImage-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SDWebImage-umbrella.h"; sourceTree = ""; }; + 19EBBFE10B2645507B0A3F484F55BF94 /* CustomFunctions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CustomFunctions.swift; path = Sources/SQLite/Typed/CustomFunctions.swift; sourceTree = ""; }; + 1BE982AA859EE1A9210D02D6E759A38A /* FileMD5Hash.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; path = FileMD5Hash.modulemap; sourceTree = ""; }; 1C3BA8511D0F025064897F6EC408296A /* Pods-Delta.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Delta.debug.xcconfig"; sourceTree = ""; }; - 1F472FCBF6D7A7E203EFD6D37EC6B739 /* SQLite.swift.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; path = SQLite.swift.modulemap; sourceTree = ""; }; - 25DF9947D404F6880E23C1E804CA53BF /* FileHash.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FileHash.h; path = Library/FileHash.h; sourceTree = ""; }; - 2745C6E9EBE97C845254602DC1592DF4 /* SDWebImageManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageManager.m; path = SDWebImage/SDWebImageManager.m; sourceTree = ""; }; - 28427A69E2775DB52F24BABAC3F45F22 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 2F5CF81D1216A4964304BE11C91A83D5 /* FTS4.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FTS4.swift; path = Sources/SQLite/Extensions/FTS4.swift; sourceTree = ""; }; - 31B7E048CEBB667B0795D7399EA829AF /* SDWebImage.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SDWebImage.xcconfig; sourceTree = ""; }; - 321849DF0ADAD2DFA407B0D629E68647 /* Schema.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Schema.swift; path = Sources/SQLite/Typed/Schema.swift; sourceTree = ""; }; - 32CA5695E88A5637B79D100F29969924 /* Pods_Delta.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_Delta.framework; path = "Pods-Delta.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; - 33F5EC95A9BDCF263B9E3A69A8762EB1 /* Value.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Value.swift; path = Sources/SQLite/Core/Value.swift; sourceTree = ""; }; + 1DEFD8D91DD8CE3B57B0A51BDB561E2D /* Fabric.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Fabric.framework; path = iOS/Fabric.framework; sourceTree = ""; }; + 1F46051C1128C9358A3A710DEB82AA24 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 286FB5B86F6E898E75403C870CC05011 /* SDWebImageDownloaderOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageDownloaderOperation.m; path = SDWebImage/SDWebImageDownloaderOperation.m; sourceTree = ""; }; + 2911054ACE98C26AD58D7BD2727E97E5 /* SQLite.swift-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SQLite.swift-dummy.m"; sourceTree = ""; }; + 297EC254820663D220F6542C0027C9FE /* SQLite.swift-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SQLite.swift-prefix.pch"; sourceTree = ""; }; + 2D1BEC9E736FAF5A1F921744894A5521 /* SDWebImageCompat.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageCompat.m; path = SDWebImage/SDWebImageCompat.m; sourceTree = ""; }; + 2D6E5A84EF07D22B853F28AE193B4E53 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 2F3E13029C6A72F6947FCFCDD4DB219D /* SMClassicCalloutView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = SMClassicCalloutView.m; sourceTree = ""; }; + 2F44A58B8FBEE6A42E7C1709683A11E5 /* Foundation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Foundation.swift; path = Sources/SQLite/Foundation.swift; sourceTree = ""; }; + 2F58644292785B4F7A515DB8B0CDEDD6 /* FileHash.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FileHash.h; path = Library/FileHash.h; sourceTree = ""; }; + 2FD50D8325E1E8D2B0953062797E6E02 /* SQLite.swift.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SQLite.swift.xcconfig; sourceTree = ""; }; + 316F67B44DF5AB3889A51771534E09FB /* SQLite-Bridging.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "SQLite-Bridging.m"; path = "Sources/SQLiteObjc/SQLite-Bridging.m"; sourceTree = ""; }; + 32F29B2603D0AC4578F3F268097EF73E /* UIImageView+WebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImageView+WebCache.h"; path = "SDWebImage/UIImageView+WebCache.h"; sourceTree = ""; }; + 35F61CA9D7252A9F19BF21470AEF205A /* SQLite.swift.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; path = SQLite.swift.modulemap; sourceTree = ""; }; + 36D00FF6092D42D9710DAB8238D6B0F4 /* SDWebImagePrefetcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImagePrefetcher.h; path = SDWebImage/SDWebImagePrefetcher.h; sourceTree = ""; }; 393CFF172E48171DCE02DEF123ED6B4F /* Pods-Delta-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-Delta-resources.sh"; sourceTree = ""; }; - 4229A636D4EEF4D2C5523CA222ADB9B2 /* ANSCompatibility.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ANSCompatibility.h; path = iOS/Crashlytics.framework/Headers/ANSCompatibility.h; sourceTree = ""; }; - 4865C9E8384997F3382A3CC2772EA009 /* FileHash.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FileHash.m; path = Library/FileHash.m; sourceTree = ""; }; - 528DB6818DAAEB5F7FDC1B8D9A4A26BA /* SQLite.swift-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SQLite.swift-prefix.pch"; sourceTree = ""; }; - 54CF13DAB511ACE04F4CFF9FDF759D51 /* FileMD5Hash-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "FileMD5Hash-dummy.m"; sourceTree = ""; }; - 5A75411E305B9728E52F9D17FB40749B /* SQLite-Bridging.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "SQLite-Bridging.m"; path = "Sources/SQLiteObjc/SQLite-Bridging.m"; sourceTree = ""; }; - 5E6F2B93EA109FC734C799B37A5F2C65 /* UIImage+MultiFormat.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+MultiFormat.m"; path = "SDWebImage/UIImage+MultiFormat.m"; sourceTree = ""; }; - 5FEA071EB4479A6AF3E7BF5F719A6B2E /* SDWebImageCompat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageCompat.h; path = SDWebImage/SDWebImageCompat.h; sourceTree = ""; }; - 61A3B47FEA2DAE48B17702C888054593 /* Fabric.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Fabric.framework; path = iOS/Fabric.framework; sourceTree = ""; }; + 3A3AE2A19B33430DE7A53B69F388DA5D /* Statement.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Statement.swift; path = Sources/SQLite/Core/Statement.swift; sourceTree = ""; }; + 3C1E5EE84A074FE94CE4085F1073C5A8 /* SMCalloutView-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SMCalloutView-dummy.m"; sourceTree = ""; }; + 3F74AD19F091053437017F0F5538899C /* SQLite.swift-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SQLite.swift-umbrella.h"; sourceTree = ""; }; + 40A8B4F2D02BC863608186A20E0C9C0D /* SDWebImageDecoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageDecoder.h; path = SDWebImage/SDWebImageDecoder.h; sourceTree = ""; }; + 4584B245DEE3A7D04444B05704046791 /* SDWebImageManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageManager.h; path = SDWebImage/SDWebImageManager.h; sourceTree = ""; }; + 49472E71891AFD1F328838FADB677451 /* UIImage+GIF.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+GIF.h"; path = "SDWebImage/UIImage+GIF.h"; sourceTree = ""; }; + 4C4C366461DA3B92968A67361C700AB8 /* Answers.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Answers.h; path = iOS/Crashlytics.framework/Headers/Answers.h; sourceTree = ""; }; + 4E1FBC10E4C47720883970DAA89DFF1B /* CLSStackFrame.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CLSStackFrame.h; path = iOS/Crashlytics.framework/Headers/CLSStackFrame.h; sourceTree = ""; }; + 4E3FC8531E544D920F83AC90536903AD /* UIView+WebCacheOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIView+WebCacheOperation.h"; path = "SDWebImage/UIView+WebCacheOperation.h"; sourceTree = ""; }; + 4E665218EE93EC4DF2ED23D10582E0BD /* FABAttributes.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FABAttributes.h; path = iOS/Fabric.framework/Headers/FABAttributes.h; sourceTree = ""; }; + 527BDC649D5F7705A1725233BEC21CEC /* UIImage+GIF.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+GIF.m"; path = "SDWebImage/UIImage+GIF.m"; sourceTree = ""; }; + 52C0F64FF5BD9D05D0DDD439AB4B4B4C /* SDWebImage-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SDWebImage-dummy.m"; sourceTree = ""; }; + 5C453C51E8BE33C2E172E40B18626329 /* SDWebImageDownloader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageDownloader.h; path = SDWebImage/SDWebImageDownloader.h; sourceTree = ""; }; + 5F6703DD83793C5DD5FAA92B71CB1DCC /* UIButton+WebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIButton+WebCache.m"; path = "SDWebImage/UIButton+WebCache.m"; sourceTree = ""; }; 61D07C2D20A62CF35439BF6540AAF69F /* Pods-Delta-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-Delta-acknowledgements.markdown"; sourceTree = ""; }; + 624F168E4CA14615A9D78854E7A933D5 /* Expression.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Expression.swift; path = Sources/SQLite/Typed/Expression.swift; sourceTree = ""; }; 635A4BD1CEF7E623C71F97A54BFC3616 /* ImageIO.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ImageIO.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.3.sdk/System/Library/Frameworks/ImageIO.framework; sourceTree = DEVELOPER_DIR; }; - 640D011133223416ECD115481ABE11C6 /* UIButton+WebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIButton+WebCache.h"; path = "SDWebImage/UIButton+WebCache.h"; sourceTree = ""; }; - 64BBAED01933096F1844A17E2A6E9ECF /* FileMD5Hash.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = FileMD5Hash.framework; path = FileMD5Hash.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 66B0F704A80D32419F2FEA268A7996C6 /* SDWebImage.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; path = SDWebImage.modulemap; sourceTree = ""; }; + 652D47B5A7FD5E5026907CC2F6B79153 /* Setter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Setter.swift; path = Sources/SQLite/Typed/Setter.swift; sourceTree = ""; }; 6701BAAE1472B7CB200DB15361C648B4 /* Pods-Delta-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-Delta-frameworks.sh"; sourceTree = ""; }; - 6986B87CC0ACC355E1901676484D59BA /* Statement.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Statement.swift; path = Sources/SQLite/Core/Statement.swift; sourceTree = ""; }; - 6B14D99E3A060C4422D52E1B43DF44C1 /* SDWebImageDownloader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageDownloader.m; path = SDWebImage/SDWebImageDownloader.m; sourceTree = ""; }; - 6BD3C5C2AC8B1879B569ADBBDAABD8CB /* SQLite.swift-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SQLite.swift-umbrella.h"; sourceTree = ""; }; 6CE29CF4FF5C02028C0A06EC0D2A6120 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.3.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; - 6D35B8054C6A1FB85E1C8AF49DA754AB /* SDWebImageManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageManager.h; path = SDWebImage/SDWebImageManager.h; sourceTree = ""; }; - 6FDE31395137009C3C06B9B76AA85BD0 /* NSData+ImageContentType.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSData+ImageContentType.m"; path = "SDWebImage/NSData+ImageContentType.m"; sourceTree = ""; }; - 70BF8485A2C5150F9FCC581529A410F3 /* Expression.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Expression.swift; path = Sources/SQLite/Typed/Expression.swift; sourceTree = ""; }; 70F7F78874A3F503DC5B92E837976CD8 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 730DA6A4D3B2E1433B1F595785D02760 /* Helpers.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Helpers.swift; path = Sources/SQLite/Helpers.swift; sourceTree = ""; }; - 767BB3AD2C467C7104FE45C6C8F6562A /* CLSReport.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CLSReport.h; path = iOS/Crashlytics.framework/Headers/CLSReport.h; sourceTree = ""; }; - 787DA4DEC4DDF799BD316E32E7BDF023 /* Blob.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Blob.swift; path = Sources/SQLite/Core/Blob.swift; sourceTree = ""; }; - 79B00D01743155B25B50E8F8E6D590D1 /* Fabric.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Fabric.h; path = iOS/Fabric.framework/Headers/Fabric.h; sourceTree = ""; }; - 7DAD08097357C3001C4E61ABB3FA5893 /* UIView+WebCacheOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIView+WebCacheOperation.m"; path = "SDWebImage/UIView+WebCacheOperation.m"; sourceTree = ""; }; - 7E0880D76FFD4DB866FA61B3BBE9D8EE /* SQLite.swift.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SQLite.swift.xcconfig; sourceTree = ""; }; - 7F44E15D9E3FF0C4C5B7A858FFCA8817 /* RTree.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RTree.swift; path = Sources/SQLite/Extensions/RTree.swift; sourceTree = ""; }; - 7FF2F911B4ACB0BBBE1355C44C19EBEB /* UIButton+WebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIButton+WebCache.m"; path = "SDWebImage/UIButton+WebCache.m"; sourceTree = ""; }; - 802918A5F5E07DF5C0B521963C07FDC1 /* SQLite.swift-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SQLite.swift-dummy.m"; sourceTree = ""; }; - 8062C6597FC1FF18A4104851C60BB9AA /* CLSLogging.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CLSLogging.h; path = iOS/Crashlytics.framework/Headers/CLSLogging.h; sourceTree = ""; }; - 831972241B2BD8CBBF931711A72293EA /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 84CE5D699E3556BCEA5319CE02EC862B /* SDWebImageOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageOperation.h; path = SDWebImage/SDWebImageOperation.h; sourceTree = ""; }; - 8FD7912E764FCFB88B78726649EB7509 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 72FC743DB5B7231D4A588B65D80A72CD /* SDWebImageOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageOperation.h; path = SDWebImage/SDWebImageOperation.h; sourceTree = ""; }; + 73648FFFD6172035C937058B26803D6D /* SDImageCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageCache.m; path = SDWebImage/SDImageCache.m; sourceTree = ""; }; + 77CAA2EA8CD0D523E4CBE3D20712BE02 /* Blob.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Blob.swift; path = Sources/SQLite/Core/Blob.swift; sourceTree = ""; }; + 77F129F1BA8E7E54902E13651560B797 /* SMClassicCalloutView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SMClassicCalloutView.h; sourceTree = ""; }; + 7B3B201E9287A29A9C7DB3E6E89A7C60 /* SDWebImageDecoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageDecoder.m; path = SDWebImage/SDWebImageDecoder.m; sourceTree = ""; }; + 83AD613EABACF4F682DD38C393197F4E /* SDWebImageManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageManager.m; path = SDWebImage/SDWebImageManager.m; sourceTree = ""; }; + 87ED074865B1A0718B5980D1F6B32FD3 /* UIButton+WebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIButton+WebCache.h"; path = "SDWebImage/UIButton+WebCache.h"; sourceTree = ""; }; + 89B0CCDB31FD33BDF5CA65821F697C4F /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 8ECC54F33ED71354DF6CCCBE4668EEC3 /* CoreFunctions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CoreFunctions.swift; path = Sources/SQLite/Typed/CoreFunctions.swift; sourceTree = ""; }; + 9260283D302E99A4DF1407BB314DE094 /* Fabric.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Fabric.h; path = iOS/Fabric.framework/Headers/Fabric.h; sourceTree = ""; }; 93A4A3777CF96A4AAC1D13BA6DCCEA73 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; lastKnownFileType = text; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; - 94765FAF281DA3817E9F165B4EC66028 /* Crashlytics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Crashlytics.framework; path = iOS/Crashlytics.framework; sourceTree = ""; }; - 9F30F5EA75539EB97D8BC21E9A952579 /* FTS5.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FTS5.swift; path = Sources/SQLite/Extensions/FTS5.swift; sourceTree = ""; }; - A0B50EB1CF5F290CB62A27072E257F2B /* UIImageView+WebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImageView+WebCache.h"; path = "SDWebImage/UIImageView+WebCache.h"; sourceTree = ""; }; + 9549FD9572AD09182CBFC5AF4C3806EC /* SDWebImage.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; path = SDWebImage.modulemap; sourceTree = ""; }; + 9573161D35C02B33C6AB094C1236CB57 /* SDWebImagePrefetcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImagePrefetcher.m; path = SDWebImage/SDWebImagePrefetcher.m; sourceTree = ""; }; + 99F8E44ACB5CF087E4BF8F904DE04F47 /* CLSLogging.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CLSLogging.h; path = iOS/Crashlytics.framework/Headers/CLSLogging.h; sourceTree = ""; }; + 9FFDEFB012447BDBE8EEBA4C8646C82A /* SDImageCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageCache.h; path = SDWebImage/SDImageCache.h; sourceTree = ""; }; A1CF7D0F0E5A5A95A050C645EA6CDA8D /* Pods-Delta-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-Delta-umbrella.h"; sourceTree = ""; }; - A296555F1740CDDC85453F15267505CA /* UIImageView+HighlightedWebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImageView+HighlightedWebCache.m"; path = "SDWebImage/UIImageView+HighlightedWebCache.m"; sourceTree = ""; }; - A4EB749E8B64FB36F3E2A229C14D3E17 /* SDWebImageDownloaderOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageDownloaderOperation.h; path = SDWebImage/SDWebImageDownloaderOperation.h; sourceTree = ""; }; - A60C439A4E5C924E3287AB0551280E2E /* FileMD5Hash-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "FileMD5Hash-umbrella.h"; sourceTree = ""; }; - A743D258529CE77D67CFD05E8822D834 /* Setter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Setter.swift; path = Sources/SQLite/Typed/Setter.swift; sourceTree = ""; }; - ABE47F73E3A4F0D9C26747F2CCEB862D /* UIImage+MultiFormat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+MultiFormat.h"; path = "SDWebImage/UIImage+MultiFormat.h"; sourceTree = ""; }; - AD6EDB41DF6DFD4BDC3AD9CA119C329E /* UIImage+GIF.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+GIF.m"; path = "SDWebImage/UIImage+GIF.m"; sourceTree = ""; }; - AF307A627BC5C545FD14AF15658B0A20 /* SDWebImagePrefetcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImagePrefetcher.h; path = SDWebImage/SDWebImagePrefetcher.h; sourceTree = ""; }; - B0A0352CABBA53CE65669E49F7AC1135 /* SDWebImageCompat.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageCompat.m; path = SDWebImage/SDWebImageCompat.m; sourceTree = ""; }; - B4B2407530ACBB22F33CD725A0C500FF /* CoreFunctions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CoreFunctions.swift; path = Sources/SQLite/Typed/CoreFunctions.swift; sourceTree = ""; }; - BA04B0DD1946F810D78FBE0D92465776 /* Crashlytics.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Crashlytics.h; path = iOS/Crashlytics.framework/Headers/Crashlytics.h; sourceTree = ""; }; + A23D5152FE861FB5B1D4950073960C6E /* NSData+ImageContentType.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSData+ImageContentType.m"; path = "SDWebImage/NSData+ImageContentType.m"; sourceTree = ""; }; + A3EA54BEF017871554C81FBD89870EF7 /* SMCalloutView.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; path = SMCalloutView.modulemap; sourceTree = ""; }; + A8DD6B2CD921B3CD0CC1C8D285C3DB14 /* SDWebImageCompat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageCompat.h; path = SDWebImage/SDWebImageCompat.h; sourceTree = ""; }; + AACB33C34A87776F6D89F7C7D999F2FE /* AggregateFunctions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AggregateFunctions.swift; path = Sources/SQLite/Typed/AggregateFunctions.swift; sourceTree = ""; }; + ACB861F144099C23DDBE864FB0C028E4 /* FTS5.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FTS5.swift; path = Sources/SQLite/Extensions/FTS5.swift; sourceTree = ""; }; + ACDD71A4691EF17778DC6EACBDAC34F1 /* SQLite.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = SQLite.framework; path = SQLite.swift.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + B02313ED3C98F0D9E8E673D608674FF0 /* UIView+WebCacheOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIView+WebCacheOperation.m"; path = "SDWebImage/UIView+WebCacheOperation.m"; sourceTree = ""; }; + B718D0BB0426AD065EABCA59ABA865E3 /* fts3_tokenizer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = fts3_tokenizer.h; path = Sources/SQLiteObjc/fts3_tokenizer.h; sourceTree = ""; }; + B8BC0D2A173827BA1039A7C690560FF3 /* Helpers.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Helpers.swift; path = Sources/SQLite/Helpers.swift; sourceTree = ""; }; BA1F09AF89D60F53382DF398D3795D71 /* Pods-Delta.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; path = "Pods-Delta.modulemap"; sourceTree = ""; }; - BA4786611036F85C3646609824CD9563 /* fts3_tokenizer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = fts3_tokenizer.h; path = Sources/SQLiteObjc/fts3_tokenizer.h; sourceTree = ""; }; - BADE19611F17CD7F597B532CB6A624D9 /* SDWebImage-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SDWebImage-prefix.pch"; sourceTree = ""; }; - BB55F6E76B1B3E9EBDD7386FA559CCCF /* CustomFunctions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CustomFunctions.swift; path = Sources/SQLite/Typed/CustomFunctions.swift; sourceTree = ""; }; - BF7E411A665A8D2DE646C1E193DBE6E0 /* CLSStackFrame.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CLSStackFrame.h; path = iOS/Crashlytics.framework/Headers/CLSStackFrame.h; sourceTree = ""; }; - C57D8C69AD898251C5890F970E78AB4F /* SDImageCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageCache.m; path = SDWebImage/SDImageCache.m; sourceTree = ""; }; - C985A70EDE1912C3FA5744F559FAEAA7 /* Answers.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Answers.h; path = iOS/Crashlytics.framework/Headers/Answers.h; sourceTree = ""; }; - CB5685E217F7B2F7EDAAC619C783CDDA /* FileMD5Hash.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = FileMD5Hash.xcconfig; sourceTree = ""; }; - CCC9BBCECDFC98343DDF11E5BD5995AA /* FABAttributes.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FABAttributes.h; path = iOS/Fabric.framework/Headers/FABAttributes.h; sourceTree = ""; }; - CD4078DAC643CC8DC9C97A24BEACFCDB /* FileMD5Hash-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "FileMD5Hash-prefix.pch"; sourceTree = ""; }; - CD6EF89C9FB4BA901403ADC3AA39BEBF /* UIImage+GIF.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+GIF.h"; path = "SDWebImage/UIImage+GIF.h"; sourceTree = ""; }; - CDB4EF3E67B3AC47FF33241CB33BC723 /* Query.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Query.swift; path = Sources/SQLite/Typed/Query.swift; sourceTree = ""; }; - D08836B2071BB4727C71D229B96E924B /* SDWebImage.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = SDWebImage.framework; path = SDWebImage.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - D434BFEF549B14BDA9F9F9350AD2065E /* Collation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Collation.swift; path = Sources/SQLite/Typed/Collation.swift; sourceTree = ""; }; - D7F1314060E559C8947FF2156F1A92FC /* SDWebImageDecoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageDecoder.h; path = SDWebImage/SDWebImageDecoder.h; sourceTree = ""; }; - D8758AB01882D93CABAEC02BB1C08B15 /* Operators.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Operators.swift; path = Sources/SQLite/Typed/Operators.swift; sourceTree = ""; }; - D90A7E2961E5EDAAE3CD486D46F95F63 /* Foundation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Foundation.swift; path = Sources/SQLite/Foundation.swift; sourceTree = ""; }; - DAA3558CAA80E807627A616811FA5BD6 /* UIImageView+HighlightedWebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImageView+HighlightedWebCache.h"; path = "SDWebImage/UIImageView+HighlightedWebCache.h"; sourceTree = ""; }; - DE4FCE080CB8CD46E5E1A3E83A93E058 /* FileMD5Hash.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; path = FileMD5Hash.modulemap; sourceTree = ""; }; - DFADED5A86C0867B0F0AD1A6EB56B753 /* AggregateFunctions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AggregateFunctions.swift; path = Sources/SQLite/Typed/AggregateFunctions.swift; sourceTree = ""; }; - DFF069BD2848F152567F822EA1F4F3A5 /* Connection.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Connection.swift; path = Sources/SQLite/Core/Connection.swift; sourceTree = ""; }; - E170474F2A4416367241B2C86D439273 /* SDWebImage-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SDWebImage-dummy.m"; sourceTree = ""; }; + BA87BC51ECB890A375E8694685FAE8A7 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + BC2C0F90270E994FEDF6FDB780D88A68 /* Connection.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Connection.swift; path = Sources/SQLite/Core/Connection.swift; sourceTree = ""; }; + BE04DBF47CF0621A6F64E90ECCEC74F2 /* RTree.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RTree.swift; path = Sources/SQLite/Extensions/RTree.swift; sourceTree = ""; }; + BEE873D9C7F8F2001BB54E2DAE25C134 /* UIImageView+HighlightedWebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImageView+HighlightedWebCache.h"; path = "SDWebImage/UIImageView+HighlightedWebCache.h"; sourceTree = ""; }; + C43F044D76D5174F1A3472D15441FAC9 /* FileMD5Hash-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "FileMD5Hash-umbrella.h"; sourceTree = ""; }; + C7966176FA5D69F9D29BD871712BC02C /* SDWebImageDownloader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageDownloader.m; path = SDWebImage/SDWebImageDownloader.m; sourceTree = ""; }; + CC2AEB033F145B0003C677FD35C0CBEE /* Operators.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Operators.swift; path = Sources/SQLite/Typed/Operators.swift; sourceTree = ""; }; + CC448D70D2D84A30A4A4D226A8ABD13F /* SDWebImage.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SDWebImage.xcconfig; sourceTree = ""; }; + CDB4230F44759F4F6161E3A256B3BB05 /* NSData+ImageContentType.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSData+ImageContentType.h"; path = "SDWebImage/NSData+ImageContentType.h"; sourceTree = ""; }; + D1A915C60E1D50527210412A5B4094DD /* SDWebImageDownloaderOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageDownloaderOperation.h; path = SDWebImage/SDWebImageDownloaderOperation.h; sourceTree = ""; }; + D34C5308CB41A391DE8F14481B181BF8 /* Query.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Query.swift; path = Sources/SQLite/Typed/Query.swift; sourceTree = ""; }; + D6849DCD50DED973B7F32496C8F6CADC /* Schema.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Schema.swift; path = Sources/SQLite/Typed/Schema.swift; sourceTree = ""; }; + D7D4D4C83D4D81FF7570317D601B83DE /* FileHash.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FileHash.m; path = Library/FileHash.m; sourceTree = ""; }; + D8C077D2CD74FE7022E6E86BA03B9BAA /* Crashlytics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Crashlytics.framework; path = iOS/Crashlytics.framework; sourceTree = ""; }; + DCDE2E8B6DB2458ED0D0AEB620C82C33 /* FTS4.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FTS4.swift; path = Sources/SQLite/Extensions/FTS4.swift; sourceTree = ""; }; + DDE976DADC01C9F233C73181B7C677FA /* SDWebImage-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SDWebImage-prefix.pch"; sourceTree = ""; }; + DFB799765277CB092B656E76446C5A75 /* FileMD5Hash.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = FileMD5Hash.xcconfig; sourceTree = ""; }; + E52BF635FC2EF1621E67C61344C81C24 /* SMCalloutView-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SMCalloutView-prefix.pch"; sourceTree = ""; }; + E6CB37913B03B0D1D9C660198A0BBFD0 /* UIImage+MultiFormat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+MultiFormat.h"; path = "SDWebImage/UIImage+MultiFormat.h"; sourceTree = ""; }; EA65B5484E3BB3284577BD4EA4FA7147 /* Pods-Delta.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Delta.release.xcconfig"; sourceTree = ""; }; + EA7149D3D08F2A6BC584BEBC314A9BFB /* ANSCompatibility.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ANSCompatibility.h; path = iOS/Crashlytics.framework/Headers/ANSCompatibility.h; sourceTree = ""; }; + EB00990C9F7C2C0808B9C725904197A8 /* SMCalloutView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = SMCalloutView.m; sourceTree = ""; }; + EBD8E993B110532376D18B7F68AB317A /* UIImageView+WebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImageView+WebCache.m"; path = "SDWebImage/UIImageView+WebCache.m"; sourceTree = ""; }; EDB35A7ED3324B1E48397C86891B1362 /* Pods-Delta-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-Delta-acknowledgements.plist"; sourceTree = ""; }; - F3AA6D231072BEA87D8361284B976373 /* UIImageView+WebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImageView+WebCache.m"; path = "SDWebImage/UIImageView+WebCache.m"; sourceTree = ""; }; - F6D8E260B72CA343410625FD1A728004 /* SDWebImageDownloaderOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageDownloaderOperation.m; path = SDWebImage/SDWebImageDownloaderOperation.m; sourceTree = ""; }; - F82BC99143F8E7D9502B69521F8954A4 /* CLSAttributes.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CLSAttributes.h; path = iOS/Crashlytics.framework/Headers/CLSAttributes.h; sourceTree = ""; }; - FCC7CD02F4721E0FC8931E96B16AB368 /* SDWebImageDecoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageDecoder.m; path = SDWebImage/SDWebImageDecoder.m; sourceTree = ""; }; + F1850435281691489E29EABB9E6D1EE9 /* FileMD5Hash-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "FileMD5Hash-prefix.pch"; sourceTree = ""; }; + F277C21C6DB430322178CF427005E784 /* SQLite.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SQLite.h; path = Sources/SQLite/SQLite.h; sourceTree = ""; }; + F4A02F29281568B9C5A5FDAE342EB996 /* SMCalloutView-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SMCalloutView-umbrella.h"; sourceTree = ""; }; + F715310E4E9F5621B0A1EE26721C2053 /* SMCalloutView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SMCalloutView.h; sourceTree = ""; }; + F9058D96291772916213F878DBC9D4D1 /* UIImage+MultiFormat.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+MultiFormat.m"; path = "SDWebImage/UIImage+MultiFormat.m"; sourceTree = ""; }; + F9B93EC3996C232919BB4F98458C45D5 /* Crashlytics.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Crashlytics.h; path = iOS/Crashlytics.framework/Headers/Crashlytics.h; sourceTree = ""; }; + FA5CE005707B6583BF9CE4DF86B180DC /* Pods_Delta.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_Delta.framework; path = "Pods-Delta.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; + FA9BCD1E0FC20F3166C12E76650B9006 /* CLSReport.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CLSReport.h; path = iOS/Crashlytics.framework/Headers/CLSReport.h; sourceTree = ""; }; + FC75BF94BACA3E271CFB55F764B1439B /* CLSAttributes.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CLSAttributes.h; path = iOS/Crashlytics.framework/Headers/CLSAttributes.h; sourceTree = ""; }; + FD521181E9EA6EFB3C5D81835A4D448E /* Collation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Collation.swift; path = Sources/SQLite/Typed/Collation.swift; sourceTree = ""; }; + FE3498CA7C8E4CDD1E7F0774B8954505 /* FileMD5Hash-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "FileMD5Hash-dummy.m"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 54F1511A803376CB9F7035A4D9F764D3 /* Frameworks */ = { + 5C0DF94230C9EECDA7269ACD38F80BB8 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - EC8F07E15821E96F36AE89560D864FCD /* Foundation.framework in Frameworks */, + B771F2C5509A5462CC27977AECB8A05E /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 5DA87AB35B47EC77EC2088FBAF257BF6 /* Frameworks */ = { + 6A87A94DB2110DBC645F09B6863C840A /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 1CA30DFDE14644203704970B8D9805BC /* Foundation.framework in Frameworks */, - BE6E1EFB57D60E715B8617336436B7EB /* ImageIO.framework in Frameworks */, + BC369BDF43EB991D6BDA5C129249D052 /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -227,17 +251,40 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - DA6FF3BA4FD643976251EC15FE2B2DDE /* Frameworks */ = { + 98F7206242604EADE5687F25134FD6E4 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - CA703680A4DCD9CBED0A35283C5B26AD /* Foundation.framework in Frameworks */, + 2207FDE1BA4EE2D34E6465B2C8161FC3 /* Foundation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + D97354725A51F45FDD2257F6907CC168 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 3134B683130B4C911A3B1F3269C23C0F /* Foundation.framework in Frameworks */, + AD541D0CA07079BA817282E47531170C /* ImageIO.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 06F093DEB80530D69626327B53498E5F /* Support Files */ = { + isa = PBXGroup; + children = ( + 1BE982AA859EE1A9210D02D6E759A38A /* FileMD5Hash.modulemap */, + DFB799765277CB092B656E76446C5A75 /* FileMD5Hash.xcconfig */, + FE3498CA7C8E4CDD1E7F0774B8954505 /* FileMD5Hash-dummy.m */, + F1850435281691489E29EABB9E6D1EE9 /* FileMD5Hash-prefix.pch */, + C43F044D76D5174F1A3472D15441FAC9 /* FileMD5Hash-umbrella.h */, + 89B0CCDB31FD33BDF5CA65821F697C4F /* Info.plist */, + ); + name = "Support Files"; + path = "../Target Support Files/FileMD5Hash"; + sourceTree = ""; + }; 07F64EF51F4E28A5F31A5BD497F93D43 /* Pods-Delta */ = { isa = PBXGroup; children = ( @@ -256,22 +303,6 @@ path = "Target Support Files/Pods-Delta"; sourceTree = ""; }; - 0CD7193CB54F38075D52875EBABACFD4 /* Crashlytics */ = { - isa = PBXGroup; - children = ( - 4229A636D4EEF4D2C5523CA222ADB9B2 /* ANSCompatibility.h */, - C985A70EDE1912C3FA5744F559FAEAA7 /* Answers.h */, - F82BC99143F8E7D9502B69521F8954A4 /* CLSAttributes.h */, - 8062C6597FC1FF18A4104851C60BB9AA /* CLSLogging.h */, - 767BB3AD2C467C7104FE45C6C8F6562A /* CLSReport.h */, - BF7E411A665A8D2DE646C1E193DBE6E0 /* CLSStackFrame.h */, - BA04B0DD1946F810D78FBE0D92465776 /* Crashlytics.h */, - 9CE0ED73D0464D6C668DF98A23E10FB9 /* Frameworks */, - ); - name = Crashlytics; - path = Crashlytics; - sourceTree = ""; - }; 1FADA36CBBEBF5DF6696194D87183478 /* iOS */ = { isa = PBXGroup; children = ( @@ -281,18 +312,15 @@ name = iOS; sourceTree = ""; }; - 2EC8A33EBBFE8C0735B0E90198BAEF55 /* Support Files */ = { + 331CA75B5D0363D2AF243E44D661F9A3 /* FileMD5Hash */ = { isa = PBXGroup; children = ( - 831972241B2BD8CBBF931711A72293EA /* Info.plist */, - 1F472FCBF6D7A7E203EFD6D37EC6B739 /* SQLite.swift.modulemap */, - 7E0880D76FFD4DB866FA61B3BBE9D8EE /* SQLite.swift.xcconfig */, - 802918A5F5E07DF5C0B521963C07FDC1 /* SQLite.swift-dummy.m */, - 528DB6818DAAEB5F7FDC1B8D9A4A26BA /* SQLite.swift-prefix.pch */, - 6BD3C5C2AC8B1879B569ADBBDAABD8CB /* SQLite.swift-umbrella.h */, + 2F58644292785B4F7A515DB8B0CDEDD6 /* FileHash.h */, + D7D4D4C83D4D81FF7570317D601B83DE /* FileHash.m */, + 06F093DEB80530D69626327B53498E5F /* Support Files */, ); - name = "Support Files"; - path = "../Target Support Files/SQLite.swift"; + name = FileMD5Hash; + path = FileMD5Hash; sourceTree = ""; }; 433CD3331B6C3787F473C941B61FC68F /* Frameworks */ = { @@ -303,84 +331,93 @@ name = Frameworks; sourceTree = ""; }; - 46B83BF18837301C99F447C003120D73 /* Support Files */ = { + 47016256D64A5202CF9F095C4DCAA1E0 /* standard */ = { isa = PBXGroup; children = ( - 28427A69E2775DB52F24BABAC3F45F22 /* Info.plist */, - 66B0F704A80D32419F2FEA268A7996C6 /* SDWebImage.modulemap */, - 31B7E048CEBB667B0795D7399EA829AF /* SDWebImage.xcconfig */, - E170474F2A4416367241B2C86D439273 /* SDWebImage-dummy.m */, - BADE19611F17CD7F597B532CB6A624D9 /* SDWebImage-prefix.pch */, - 043A876B015BB7FB2E06D12EDB0CE561 /* SDWebImage-umbrella.h */, + AACB33C34A87776F6D89F7C7D999F2FE /* AggregateFunctions.swift */, + 77CAA2EA8CD0D523E4CBE3D20712BE02 /* Blob.swift */, + FD521181E9EA6EFB3C5D81835A4D448E /* Collation.swift */, + BC2C0F90270E994FEDF6FDB780D88A68 /* Connection.swift */, + 8ECC54F33ED71354DF6CCCBE4668EEC3 /* CoreFunctions.swift */, + 19EBBFE10B2645507B0A3F484F55BF94 /* CustomFunctions.swift */, + 624F168E4CA14615A9D78854E7A933D5 /* Expression.swift */, + 2F44A58B8FBEE6A42E7C1709683A11E5 /* Foundation.swift */, + B718D0BB0426AD065EABCA59ABA865E3 /* fts3_tokenizer.h */, + DCDE2E8B6DB2458ED0D0AEB620C82C33 /* FTS4.swift */, + ACB861F144099C23DDBE864FB0C028E4 /* FTS5.swift */, + B8BC0D2A173827BA1039A7C690560FF3 /* Helpers.swift */, + CC2AEB033F145B0003C677FD35C0CBEE /* Operators.swift */, + D34C5308CB41A391DE8F14481B181BF8 /* Query.swift */, + BE04DBF47CF0621A6F64E90ECCEC74F2 /* RTree.swift */, + D6849DCD50DED973B7F32496C8F6CADC /* Schema.swift */, + 652D47B5A7FD5E5026907CC2F6B79153 /* Setter.swift */, + F277C21C6DB430322178CF427005E784 /* SQLite.h */, + 068FC88E6553ADF63F7B7A7EC8A7E159 /* SQLite-Bridging.h */, + 316F67B44DF5AB3889A51771534E09FB /* SQLite-Bridging.m */, + 3A3AE2A19B33430DE7A53B69F388DA5D /* Statement.swift */, + 0EA433B1A2192D12009D581B153C3004 /* Value.swift */, ); - name = "Support Files"; - path = "../Target Support Files/SDWebImage"; + name = standard; sourceTree = ""; }; - 60370E4B9EABA53B20C917C059B11E63 /* Fabric */ = { + 531E03EB9BDA837BD15E5CFA33950AA3 /* Fabric */ = { isa = PBXGroup; children = ( - CCC9BBCECDFC98343DDF11E5BD5995AA /* FABAttributes.h */, - 79B00D01743155B25B50E8F8E6D590D1 /* Fabric.h */, - D4B2E49FCA447FD090EE210ED6CFDC21 /* Frameworks */, + 4E665218EE93EC4DF2ED23D10582E0BD /* FABAttributes.h */, + 9260283D302E99A4DF1407BB314DE094 /* Fabric.h */, + 9D50E7E44A83A074A5B27405071C555A /* Frameworks */, ); name = Fabric; path = Fabric; sourceTree = ""; }; - 6DCC4C02B80FC675A01E718C75BE2915 /* Support Files */ = { + 5427BBB5C33A290393604304A6049893 /* SDWebImage */ = { isa = PBXGroup; children = ( - DE4FCE080CB8CD46E5E1A3E83A93E058 /* FileMD5Hash.modulemap */, - CB5685E217F7B2F7EDAAC619C783CDDA /* FileMD5Hash.xcconfig */, - 54CF13DAB511ACE04F4CFF9FDF759D51 /* FileMD5Hash-dummy.m */, - CD4078DAC643CC8DC9C97A24BEACFCDB /* FileMD5Hash-prefix.pch */, - A60C439A4E5C924E3287AB0551280E2E /* FileMD5Hash-umbrella.h */, - 8FD7912E764FCFB88B78726649EB7509 /* Info.plist */, + 96D9DE7FF8E7331E3EF2EBA90FC85661 /* Core */, + EF5B18EEB9983E18AAF90F03F5AC0920 /* Support Files */, + ); + name = SDWebImage; + path = SDWebImage; + sourceTree = ""; + }; + 6E588658A8888B4B213D36BBF2905D46 /* Products */ = { + isa = PBXGroup; + children = ( + 0159C36B78547E23EBA1867CAE65F002 /* FileMD5Hash.framework */, + FA5CE005707B6583BF9CE4DF86B180DC /* Pods_Delta.framework */, + 16C12BA1CDC4BAA71A94C08D894DAE28 /* SDWebImage.framework */, + 0BC95251B8ED1E506925B002BC5B1352 /* SMCalloutView.framework */, + ACDD71A4691EF17778DC6EACBDAC34F1 /* SQLite.framework */, + ); + name = Products; + sourceTree = ""; + }; + 795312991DF0976E153D01C3DB2D7EFF /* SMCalloutView */ = { + isa = PBXGroup; + children = ( + F715310E4E9F5621B0A1EE26721C2053 /* SMCalloutView.h */, + EB00990C9F7C2C0808B9C725904197A8 /* SMCalloutView.m */, + 77F129F1BA8E7E54902E13651560B797 /* SMClassicCalloutView.h */, + 2F3E13029C6A72F6947FCFCDD4DB219D /* SMClassicCalloutView.m */, + 85F172A17732362EF6633B33B6123F17 /* Support Files */, + ); + name = SMCalloutView; + path = SMCalloutView; + sourceTree = ""; + }; + 7A644872BF34ACF9C88557A1A80046F7 /* Support Files */ = { + isa = PBXGroup; + children = ( + BA87BC51ECB890A375E8694685FAE8A7 /* Info.plist */, + 35F61CA9D7252A9F19BF21470AEF205A /* SQLite.swift.modulemap */, + 2FD50D8325E1E8D2B0953062797E6E02 /* SQLite.swift.xcconfig */, + 2911054ACE98C26AD58D7BD2727E97E5 /* SQLite.swift-dummy.m */, + 297EC254820663D220F6542C0027C9FE /* SQLite.swift-prefix.pch */, + 3F74AD19F091053437017F0F5538899C /* SQLite.swift-umbrella.h */, ); name = "Support Files"; - path = "../Target Support Files/FileMD5Hash"; - sourceTree = ""; - }; - 6EC6C19690E6A0D9577110D76ACD8A39 /* Pods */ = { - isa = PBXGroup; - children = ( - 0CD7193CB54F38075D52875EBABACFD4 /* Crashlytics */, - 60370E4B9EABA53B20C917C059B11E63 /* Fabric */, - A8462AF6298D46025CB78BACDCEF5B02 /* FileMD5Hash */, - 9BE5D9C4A41107E48D04FE4619029174 /* SDWebImage */, - BEFEE191144E4EEBDC1A02ECBFF9D802 /* SQLite.swift */, - ); - name = Pods; - sourceTree = ""; - }; - 798EEB2F4D0C82B198A3C49C04A07F0C /* standard */ = { - isa = PBXGroup; - children = ( - DFADED5A86C0867B0F0AD1A6EB56B753 /* AggregateFunctions.swift */, - 787DA4DEC4DDF799BD316E32E7BDF023 /* Blob.swift */, - D434BFEF549B14BDA9F9F9350AD2065E /* Collation.swift */, - DFF069BD2848F152567F822EA1F4F3A5 /* Connection.swift */, - B4B2407530ACBB22F33CD725A0C500FF /* CoreFunctions.swift */, - BB55F6E76B1B3E9EBDD7386FA559CCCF /* CustomFunctions.swift */, - 70BF8485A2C5150F9FCC581529A410F3 /* Expression.swift */, - D90A7E2961E5EDAAE3CD486D46F95F63 /* Foundation.swift */, - BA4786611036F85C3646609824CD9563 /* fts3_tokenizer.h */, - 2F5CF81D1216A4964304BE11C91A83D5 /* FTS4.swift */, - 9F30F5EA75539EB97D8BC21E9A952579 /* FTS5.swift */, - 730DA6A4D3B2E1433B1F595785D02760 /* Helpers.swift */, - D8758AB01882D93CABAEC02BB1C08B15 /* Operators.swift */, - CDB4EF3E67B3AC47FF33241CB33BC723 /* Query.swift */, - 7F44E15D9E3FF0C4C5B7A858FFCA8817 /* RTree.swift */, - 321849DF0ADAD2DFA407B0D629E68647 /* Schema.swift */, - A743D258529CE77D67CFD05E8822D834 /* Setter.swift */, - 11D69CC0585763C69BDC1D626B098E8D /* SQLite.h */, - 0B581A01C09D5BEFCAE03AA9CBA0DD88 /* SQLite-Bridging.h */, - 5A75411E305B9728E52F9D17FB40749B /* SQLite-Bridging.m */, - 6986B87CC0ACC355E1901676484D59BA /* Statement.swift */, - 33F5EC95A9BDCF263B9E3A69A8762EB1 /* Value.swift */, - ); - name = standard; + path = "../Target Support Files/SQLite.swift"; sourceTree = ""; }; 7DB346D0F39D3F0E887471402A8071AB = { @@ -388,12 +425,26 @@ children = ( 93A4A3777CF96A4AAC1D13BA6DCCEA73 /* Podfile */, 433CD3331B6C3787F473C941B61FC68F /* Frameworks */, - 6EC6C19690E6A0D9577110D76ACD8A39 /* Pods */, - C324234DA460FB6DAF1832F14EE1451F /* Products */, + B2C53D5F4CD7C3A5EA2C240CFAEC0936 /* Pods */, + 6E588658A8888B4B213D36BBF2905D46 /* Products */, 94AA82DA44BA457749B76A54853CD74C /* Targets Support Files */, ); sourceTree = ""; }; + 85F172A17732362EF6633B33B6123F17 /* Support Files */ = { + isa = PBXGroup; + children = ( + 2D6E5A84EF07D22B853F28AE193B4E53 /* Info.plist */, + A3EA54BEF017871554C81FBD89870EF7 /* SMCalloutView.modulemap */, + 061C525038BE58FCE9A6013CBA4162B5 /* SMCalloutView.xcconfig */, + 3C1E5EE84A074FE94CE4085F1073C5A8 /* SMCalloutView-dummy.m */, + E52BF635FC2EF1621E67C61344C81C24 /* SMCalloutView-prefix.pch */, + F4A02F29281568B9C5A5FDAE342EB996 /* SMCalloutView-umbrella.h */, + ); + name = "Support Files"; + path = "../Target Support Files/SMCalloutView"; + sourceTree = ""; + }; 94AA82DA44BA457749B76A54853CD74C /* Targets Support Files */ = { isa = PBXGroup; children = ( @@ -402,96 +453,107 @@ name = "Targets Support Files"; sourceTree = ""; }; - 9BE5D9C4A41107E48D04FE4619029174 /* SDWebImage */ = { + 96D9DE7FF8E7331E3EF2EBA90FC85661 /* Core */ = { isa = PBXGroup; children = ( - C08B569CC1D5CC6D09E27E9FACF9465B /* Core */, - 46B83BF18837301C99F447C003120D73 /* Support Files */, + CDB4230F44759F4F6161E3A256B3BB05 /* NSData+ImageContentType.h */, + A23D5152FE861FB5B1D4950073960C6E /* NSData+ImageContentType.m */, + 9FFDEFB012447BDBE8EEBA4C8646C82A /* SDImageCache.h */, + 73648FFFD6172035C937058B26803D6D /* SDImageCache.m */, + A8DD6B2CD921B3CD0CC1C8D285C3DB14 /* SDWebImageCompat.h */, + 2D1BEC9E736FAF5A1F921744894A5521 /* SDWebImageCompat.m */, + 40A8B4F2D02BC863608186A20E0C9C0D /* SDWebImageDecoder.h */, + 7B3B201E9287A29A9C7DB3E6E89A7C60 /* SDWebImageDecoder.m */, + 5C453C51E8BE33C2E172E40B18626329 /* SDWebImageDownloader.h */, + C7966176FA5D69F9D29BD871712BC02C /* SDWebImageDownloader.m */, + D1A915C60E1D50527210412A5B4094DD /* SDWebImageDownloaderOperation.h */, + 286FB5B86F6E898E75403C870CC05011 /* SDWebImageDownloaderOperation.m */, + 4584B245DEE3A7D04444B05704046791 /* SDWebImageManager.h */, + 83AD613EABACF4F682DD38C393197F4E /* SDWebImageManager.m */, + 72FC743DB5B7231D4A588B65D80A72CD /* SDWebImageOperation.h */, + 36D00FF6092D42D9710DAB8238D6B0F4 /* SDWebImagePrefetcher.h */, + 9573161D35C02B33C6AB094C1236CB57 /* SDWebImagePrefetcher.m */, + 87ED074865B1A0718B5980D1F6B32FD3 /* UIButton+WebCache.h */, + 5F6703DD83793C5DD5FAA92B71CB1DCC /* UIButton+WebCache.m */, + 49472E71891AFD1F328838FADB677451 /* UIImage+GIF.h */, + 527BDC649D5F7705A1725233BEC21CEC /* UIImage+GIF.m */, + E6CB37913B03B0D1D9C660198A0BBFD0 /* UIImage+MultiFormat.h */, + F9058D96291772916213F878DBC9D4D1 /* UIImage+MultiFormat.m */, + BEE873D9C7F8F2001BB54E2DAE25C134 /* UIImageView+HighlightedWebCache.h */, + 032AB538856BB66C33BCF3A6EFEBAEDC /* UIImageView+HighlightedWebCache.m */, + 32F29B2603D0AC4578F3F268097EF73E /* UIImageView+WebCache.h */, + EBD8E993B110532376D18B7F68AB317A /* UIImageView+WebCache.m */, + 4E3FC8531E544D920F83AC90536903AD /* UIView+WebCacheOperation.h */, + B02313ED3C98F0D9E8E673D608674FF0 /* UIView+WebCacheOperation.m */, ); - name = SDWebImage; - path = SDWebImage; + name = Core; sourceTree = ""; }; - 9CE0ED73D0464D6C668DF98A23E10FB9 /* Frameworks */ = { + 9D50E7E44A83A074A5B27405071C555A /* Frameworks */ = { isa = PBXGroup; children = ( - 94765FAF281DA3817E9F165B4EC66028 /* Crashlytics.framework */, + 1DEFD8D91DD8CE3B57B0A51BDB561E2D /* Fabric.framework */, ); name = Frameworks; sourceTree = ""; }; - A8462AF6298D46025CB78BACDCEF5B02 /* FileMD5Hash */ = { + A267B4F77F709351A47C49E0765B9726 /* SQLite.swift */ = { isa = PBXGroup; children = ( - 25DF9947D404F6880E23C1E804CA53BF /* FileHash.h */, - 4865C9E8384997F3382A3CC2772EA009 /* FileHash.m */, - 6DCC4C02B80FC675A01E718C75BE2915 /* Support Files */, - ); - name = FileMD5Hash; - path = FileMD5Hash; - sourceTree = ""; - }; - BEFEE191144E4EEBDC1A02ECBFF9D802 /* SQLite.swift */ = { - isa = PBXGroup; - children = ( - 798EEB2F4D0C82B198A3C49C04A07F0C /* standard */, - 2EC8A33EBBFE8C0735B0E90198BAEF55 /* Support Files */, + 47016256D64A5202CF9F095C4DCAA1E0 /* standard */, + 7A644872BF34ACF9C88557A1A80046F7 /* Support Files */, ); name = SQLite.swift; path = SQLite.swift; sourceTree = ""; }; - C08B569CC1D5CC6D09E27E9FACF9465B /* Core */ = { + B2C53D5F4CD7C3A5EA2C240CFAEC0936 /* Pods */ = { isa = PBXGroup; children = ( - 03968465C6A040B68B9B4E3F0F9F857A /* NSData+ImageContentType.h */, - 6FDE31395137009C3C06B9B76AA85BD0 /* NSData+ImageContentType.m */, - 0A0AE959B5D68C3CB0EE54AFB2DEAF6E /* SDImageCache.h */, - C57D8C69AD898251C5890F970E78AB4F /* SDImageCache.m */, - 5FEA071EB4479A6AF3E7BF5F719A6B2E /* SDWebImageCompat.h */, - B0A0352CABBA53CE65669E49F7AC1135 /* SDWebImageCompat.m */, - D7F1314060E559C8947FF2156F1A92FC /* SDWebImageDecoder.h */, - FCC7CD02F4721E0FC8931E96B16AB368 /* SDWebImageDecoder.m */, - 01F7F0FD5C1DD4A57E10338DECBE08BF /* SDWebImageDownloader.h */, - 6B14D99E3A060C4422D52E1B43DF44C1 /* SDWebImageDownloader.m */, - A4EB749E8B64FB36F3E2A229C14D3E17 /* SDWebImageDownloaderOperation.h */, - F6D8E260B72CA343410625FD1A728004 /* SDWebImageDownloaderOperation.m */, - 6D35B8054C6A1FB85E1C8AF49DA754AB /* SDWebImageManager.h */, - 2745C6E9EBE97C845254602DC1592DF4 /* SDWebImageManager.m */, - 84CE5D699E3556BCEA5319CE02EC862B /* SDWebImageOperation.h */, - AF307A627BC5C545FD14AF15658B0A20 /* SDWebImagePrefetcher.h */, - 010A46F5A9D7559BB3CCF9ABDBCAFF24 /* SDWebImagePrefetcher.m */, - 640D011133223416ECD115481ABE11C6 /* UIButton+WebCache.h */, - 7FF2F911B4ACB0BBBE1355C44C19EBEB /* UIButton+WebCache.m */, - CD6EF89C9FB4BA901403ADC3AA39BEBF /* UIImage+GIF.h */, - AD6EDB41DF6DFD4BDC3AD9CA119C329E /* UIImage+GIF.m */, - ABE47F73E3A4F0D9C26747F2CCEB862D /* UIImage+MultiFormat.h */, - 5E6F2B93EA109FC734C799B37A5F2C65 /* UIImage+MultiFormat.m */, - DAA3558CAA80E807627A616811FA5BD6 /* UIImageView+HighlightedWebCache.h */, - A296555F1740CDDC85453F15267505CA /* UIImageView+HighlightedWebCache.m */, - A0B50EB1CF5F290CB62A27072E257F2B /* UIImageView+WebCache.h */, - F3AA6D231072BEA87D8361284B976373 /* UIImageView+WebCache.m */, - 012884903390C04A55B7E547DA2B34B5 /* UIView+WebCacheOperation.h */, - 7DAD08097357C3001C4E61ABB3FA5893 /* UIView+WebCacheOperation.m */, + E2A13FB89351C8CBD4E4D5F5253B714E /* Crashlytics */, + 531E03EB9BDA837BD15E5CFA33950AA3 /* Fabric */, + 331CA75B5D0363D2AF243E44D661F9A3 /* FileMD5Hash */, + 5427BBB5C33A290393604304A6049893 /* SDWebImage */, + 795312991DF0976E153D01C3DB2D7EFF /* SMCalloutView */, + A267B4F77F709351A47C49E0765B9726 /* SQLite.swift */, ); - name = Core; + name = Pods; sourceTree = ""; }; - C324234DA460FB6DAF1832F14EE1451F /* Products */ = { + E2A13FB89351C8CBD4E4D5F5253B714E /* Crashlytics */ = { isa = PBXGroup; children = ( - 64BBAED01933096F1844A17E2A6E9ECF /* FileMD5Hash.framework */, - 32CA5695E88A5637B79D100F29969924 /* Pods_Delta.framework */, - D08836B2071BB4727C71D229B96E924B /* SDWebImage.framework */, - 0B33A43387DF59869F2A6002F1DC3785 /* SQLite.framework */, + EA7149D3D08F2A6BC584BEBC314A9BFB /* ANSCompatibility.h */, + 4C4C366461DA3B92968A67361C700AB8 /* Answers.h */, + FC75BF94BACA3E271CFB55F764B1439B /* CLSAttributes.h */, + 99F8E44ACB5CF087E4BF8F904DE04F47 /* CLSLogging.h */, + FA9BCD1E0FC20F3166C12E76650B9006 /* CLSReport.h */, + 4E1FBC10E4C47720883970DAA89DFF1B /* CLSStackFrame.h */, + F9B93EC3996C232919BB4F98458C45D5 /* Crashlytics.h */, + EFCB351B3EEC448C22F06D7285DE95E6 /* Frameworks */, ); - name = Products; + name = Crashlytics; + path = Crashlytics; sourceTree = ""; }; - D4B2E49FCA447FD090EE210ED6CFDC21 /* Frameworks */ = { + EF5B18EEB9983E18AAF90F03F5AC0920 /* Support Files */ = { isa = PBXGroup; children = ( - 61A3B47FEA2DAE48B17702C888054593 /* Fabric.framework */, + 1F46051C1128C9358A3A710DEB82AA24 /* Info.plist */, + 9549FD9572AD09182CBFC5AF4C3806EC /* SDWebImage.modulemap */, + CC448D70D2D84A30A4A4D226A8ABD13F /* SDWebImage.xcconfig */, + 52C0F64FF5BD9D05D0DDD439AB4B4B4C /* SDWebImage-dummy.m */, + DDE976DADC01C9F233C73181B7C677FA /* SDWebImage-prefix.pch */, + 19644E545E27F0ABCAEA0D43C6DFB21E /* SDWebImage-umbrella.h */, + ); + name = "Support Files"; + path = "../Target Support Files/SDWebImage"; + sourceTree = ""; + }; + EFCB351B3EEC448C22F06D7285DE95E6 /* Frameworks */ = { + isa = PBXGroup; + children = ( + D8C077D2CD74FE7022E6E86BA03B9BAA /* Crashlytics.framework */, ); name = Frameworks; sourceTree = ""; @@ -499,45 +561,55 @@ /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ - 35D56EB4CB117295F095C80B2F024E20 /* Headers */ = { + 45644FD3D44A25933E73FC65465227F8 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 1B1088DAF42D74567A705DC440211D12 /* NSData+ImageContentType.h in Headers */, - 1C0F95DC71B64C451857A4C991BF2AF8 /* SDImageCache.h in Headers */, - 459009460BFBB3DBB4C9168143FC967E /* SDWebImage-umbrella.h in Headers */, - 2888ACC8836D2E79F2F341C32AB3E0B0 /* SDWebImageCompat.h in Headers */, - A7EF436BF7DF4C8640864FBA1BA94351 /* SDWebImageDecoder.h in Headers */, - 6C88898656689F997079D8C2E02D380B /* SDWebImageDownloader.h in Headers */, - 58C256076C467E9132B30FA203F4682E /* SDWebImageDownloaderOperation.h in Headers */, - 60C9DBA3EA5D0784AE9C8C87B51BBCF0 /* SDWebImageManager.h in Headers */, - 930D6D8D90701B4A6FD30E94CF42871B /* SDWebImageOperation.h in Headers */, - 85AC71E815A41D4B45A0EB55F9A5DB1E /* SDWebImagePrefetcher.h in Headers */, - 3CD0EE70D32733800E902E7C8AFEA79B /* UIButton+WebCache.h in Headers */, - CE103933627196D2BB63FCFB7DDDE1F0 /* UIImage+GIF.h in Headers */, - 7E7C64643C2C3AC5F7CBCC8E044801EF /* UIImage+MultiFormat.h in Headers */, - 291D6ECA35FE23753F9EFEDA8AB633FC /* UIImageView+HighlightedWebCache.h in Headers */, - F86C46E798AA77D74381F0A299724517 /* UIImageView+WebCache.h in Headers */, - 289C4C0E1B0E975621D177439BCF4B6F /* UIView+WebCacheOperation.h in Headers */, + AF71FA11F33D4FF8286DE4191247F4B9 /* NSData+ImageContentType.h in Headers */, + 307ACA884D90D1B1AF65D152027F8037 /* SDImageCache.h in Headers */, + DD3018D33ABEB0BAA61C562F8A5FFC45 /* SDWebImage-umbrella.h in Headers */, + 020AFCE363BBA923E907BD453C394A18 /* SDWebImageCompat.h in Headers */, + D76E41A83001A863D0EF9A3F0EC0F68B /* SDWebImageDecoder.h in Headers */, + 593AA045F16ABDD2E0C216A6693160A6 /* SDWebImageDownloader.h in Headers */, + 1FAD25073BF85238A82B39CF64208138 /* SDWebImageDownloaderOperation.h in Headers */, + 255360BAB2981F4F6C7C2ADFB034DD78 /* SDWebImageManager.h in Headers */, + A5F83FD5E39A40A303AEE42994F6BB2D /* SDWebImageOperation.h in Headers */, + B9AC8B5C153CD4028E20BDA493F3E8E9 /* SDWebImagePrefetcher.h in Headers */, + F01610EE244331A9AE359D92682841FB /* UIButton+WebCache.h in Headers */, + 19A8DB8810E10682948CBA8F1954F70E /* UIImage+GIF.h in Headers */, + 35ECA1266BE70763C47DB385321C8BDA /* UIImage+MultiFormat.h in Headers */, + 3EEAE0A72D5F8D0397B9DF878F9ABE98 /* UIImageView+HighlightedWebCache.h in Headers */, + E282C5080C3257C180B32B1F15F2842E /* UIImageView+WebCache.h in Headers */, + FC2D34D5B376D1F700CAFB0E04439235 /* UIView+WebCacheOperation.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - 5357A79BD0A1FE37AA0F4EE4EE9D05A5 /* Headers */ = { + 60803EF6FD8B9CEB9F583958E5B9C104 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 92C60A4E3797D69E6A7725B12E25C0D0 /* fts3_tokenizer.h in Headers */, - 5172EB82F181CD5C6058720F1EDBFFBA /* SQLite-Bridging.h in Headers */, - EA47189A2ADA7ABA3CAD4DAA9C862095 /* SQLite.h in Headers */, - F713228AE3D00F1C478CF62077F73AD7 /* SQLite.swift-umbrella.h in Headers */, + 8288FE73D4A817A73306848AF872DD3B /* SMCalloutView-umbrella.h in Headers */, + 0E8A3312FC090BE373D8B2DC9F33355C /* SMCalloutView.h in Headers */, + A41E5A0EF327ED9DF2D2866EF78F30A5 /* SMClassicCalloutView.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - EB96366D2C78C813C41EBAEF56FC0ED9 /* Headers */ = { + 8FBE883C1E351BF2AB6A893697981986 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 7784F558B74616E8DC1818DA0A0532BC /* Pods-Delta-umbrella.h in Headers */, + E4A2641C95DDD1AEE0BA851321A07FC8 /* Pods-Delta-umbrella.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 9E79C31AF032218761B7231BED8BA825 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 05585238F98FFE793DC0D1BA800C0D27 /* fts3_tokenizer.h in Headers */, + 20A087C33B817D962690FDC7E894405A /* SQLite-Bridging.h in Headers */, + A8274F6E16ECE48FB9139B8456A31201 /* SQLite.h in Headers */, + 8F7D92A4E63CC4056DFD5C0B1FD14910 /* SQLite.swift-umbrella.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -553,24 +625,42 @@ /* End PBXHeadersBuildPhase section */ /* Begin PBXNativeTarget section */ - 3E23F405271B35BEEA87F9840F74A510 /* Pods-Delta */ = { + 4B110CBCF3EEB0093F08DE352A1B92DA /* Pods-Delta */ = { isa = PBXNativeTarget; - buildConfigurationList = 0ABB0BB9AFF3C8D8FF7C2460E438B5E6 /* Build configuration list for PBXNativeTarget "Pods-Delta" */; + buildConfigurationList = 8CEDF6F3DB0895E0DA8B67EF2A37C22C /* Build configuration list for PBXNativeTarget "Pods-Delta" */; buildPhases = ( - 4B8CABDD309337BA47058081211D728F /* Sources */, - 54F1511A803376CB9F7035A4D9F764D3 /* Frameworks */, - EB96366D2C78C813C41EBAEF56FC0ED9 /* Headers */, + A8A7CB475AC069906F4B23BEB0BD4A7F /* Sources */, + 5C0DF94230C9EECDA7269ACD38F80BB8 /* Frameworks */, + 8FBE883C1E351BF2AB6A893697981986 /* Headers */, ); buildRules = ( ); dependencies = ( - 4DDDB8B816F29215470EC263CE338171 /* PBXTargetDependency */, - 32FA1882D4ABC28118B91D8E6A104BFB /* PBXTargetDependency */, - 0935BBD3CFD2E9F741AC2D7E88FF5501 /* PBXTargetDependency */, + 29BDFC0FDC07E71DABA85606ECDCDFD4 /* PBXTargetDependency */, + C658BFD1115AABC95D34853360A10A3D /* PBXTargetDependency */, + 35ED1E44B53F73C54B11C67782175716 /* PBXTargetDependency */, + 7912D2146AA8F4861919949C710FE08B /* PBXTargetDependency */, ); name = "Pods-Delta"; productName = "Pods-Delta"; - productReference = 32CA5695E88A5637B79D100F29969924 /* Pods_Delta.framework */; + productReference = FA5CE005707B6583BF9CE4DF86B180DC /* Pods_Delta.framework */; + productType = "com.apple.product-type.framework"; + }; + 5A0A16E27351F849E411E94C505CF452 /* SMCalloutView */ = { + isa = PBXNativeTarget; + buildConfigurationList = F8D4561891ACE1BC67CEB8D0C6F063E4 /* Build configuration list for PBXNativeTarget "SMCalloutView" */; + buildPhases = ( + 83F4AE4AB580D4EFA51C6D39F76BD923 /* Sources */, + 98F7206242604EADE5687F25134FD6E4 /* Frameworks */, + 60803EF6FD8B9CEB9F583958E5B9C104 /* Headers */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = SMCalloutView; + productName = SMCalloutView; + productReference = 0BC95251B8ED1E506925B002BC5B1352 /* SMCalloutView.framework */; productType = "com.apple.product-type.framework"; }; 924057B2A88FC4B5526EC3FC7483ABE2 /* FileMD5Hash */ = { @@ -587,33 +677,16 @@ ); name = FileMD5Hash; productName = FileMD5Hash; - productReference = 64BBAED01933096F1844A17E2A6E9ECF /* FileMD5Hash.framework */; + productReference = 0159C36B78547E23EBA1867CAE65F002 /* FileMD5Hash.framework */; productType = "com.apple.product-type.framework"; }; - 95AEAD50DEA1563D4D1E2AD6EEE0E7B4 /* SDWebImage */ = { + D71D7949D6292CD21BE206D00103E682 /* SQLite.swift */ = { isa = PBXNativeTarget; - buildConfigurationList = 533175F905F937DF358073A42B67A5AA /* Build configuration list for PBXNativeTarget "SDWebImage" */; + buildConfigurationList = 668A24D62570C0D022FAD98278F67B72 /* Build configuration list for PBXNativeTarget "SQLite.swift" */; buildPhases = ( - 029BC4D3B4B34C75603230D495FF2FE6 /* Sources */, - 5DA87AB35B47EC77EC2088FBAF257BF6 /* Frameworks */, - 35D56EB4CB117295F095C80B2F024E20 /* Headers */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = SDWebImage; - productName = SDWebImage; - productReference = D08836B2071BB4727C71D229B96E924B /* SDWebImage.framework */; - productType = "com.apple.product-type.framework"; - }; - D88F755329BB917F99DFC5405AC691FE /* SQLite.swift */ = { - isa = PBXNativeTarget; - buildConfigurationList = 9679E283619E0024B3156EB387DDCBDE /* Build configuration list for PBXNativeTarget "SQLite.swift" */; - buildPhases = ( - A17AC6BBAD5FB70B85220CE98AEA2BD0 /* Sources */, - DA6FF3BA4FD643976251EC15FE2B2DDE /* Frameworks */, - 5357A79BD0A1FE37AA0F4EE4EE9D05A5 /* Headers */, + B722D46C99854F66A3C53AFC7A1D7F65 /* Sources */, + 6A87A94DB2110DBC645F09B6863C840A /* Frameworks */, + 9E79C31AF032218761B7231BED8BA825 /* Headers */, ); buildRules = ( ); @@ -621,7 +694,24 @@ ); name = SQLite.swift; productName = SQLite.swift; - productReference = 0B33A43387DF59869F2A6002F1DC3785 /* SQLite.framework */; + productReference = ACDD71A4691EF17778DC6EACBDAC34F1 /* SQLite.framework */; + productType = "com.apple.product-type.framework"; + }; + E02CAC9BD02FC53AAA763EA4830E4884 /* SDWebImage */ = { + isa = PBXNativeTarget; + buildConfigurationList = 336350D22A1C45232C1FDF436E1FEBA2 /* Build configuration list for PBXNativeTarget "SDWebImage" */; + buildPhases = ( + AABCA925A95FAE4250B2D9206D3D0081 /* Sources */, + D97354725A51F45FDD2257F6907CC168 /* Frameworks */, + 45644FD3D44A25933E73FC65465227F8 /* Headers */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = SDWebImage; + productName = SDWebImage; + productReference = 16C12BA1CDC4BAA71A94C08D894DAE28 /* SDWebImage.framework */; productType = "com.apple.product-type.framework"; }; /* End PBXNativeTarget section */ @@ -641,73 +731,84 @@ en, ); mainGroup = 7DB346D0F39D3F0E887471402A8071AB; - productRefGroup = C324234DA460FB6DAF1832F14EE1451F /* Products */; + productRefGroup = 6E588658A8888B4B213D36BBF2905D46 /* Products */; projectDirPath = ""; projectRoot = ""; targets = ( 924057B2A88FC4B5526EC3FC7483ABE2 /* FileMD5Hash */, - 3E23F405271B35BEEA87F9840F74A510 /* Pods-Delta */, - 95AEAD50DEA1563D4D1E2AD6EEE0E7B4 /* SDWebImage */, - D88F755329BB917F99DFC5405AC691FE /* SQLite.swift */, + 4B110CBCF3EEB0093F08DE352A1B92DA /* Pods-Delta */, + E02CAC9BD02FC53AAA763EA4830E4884 /* SDWebImage */, + 5A0A16E27351F849E411E94C505CF452 /* SMCalloutView */, + D71D7949D6292CD21BE206D00103E682 /* SQLite.swift */, ); }; /* End PBXProject section */ /* Begin PBXSourcesBuildPhase section */ - 029BC4D3B4B34C75603230D495FF2FE6 /* Sources */ = { + 83F4AE4AB580D4EFA51C6D39F76BD923 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - BCDE9C9E8DDB9FD7F9F0F68200854276 /* NSData+ImageContentType.m in Sources */, - FEE67933F477210286CDEC86E60D32FF /* SDImageCache.m in Sources */, - 662C18FEA4DFF9970E8D028B281D97EA /* SDWebImage-dummy.m in Sources */, - D1EC729542506D0FF0FEAFC10E544BDC /* SDWebImageCompat.m in Sources */, - 32649919900BFE14972CB170A11E7A30 /* SDWebImageDecoder.m in Sources */, - 7487C10F58C60552A3B84C47EF4AABB5 /* SDWebImageDownloader.m in Sources */, - 843BDA3C40997300E0B3CB9E27043997 /* SDWebImageDownloaderOperation.m in Sources */, - F97431F8AA6A848ACA072E9DB7DCF5DF /* SDWebImageManager.m in Sources */, - D7570BC6C11012C5F53C53ABF8187CC6 /* SDWebImagePrefetcher.m in Sources */, - C0D6EE693288E4A34090518CEE18269F /* UIButton+WebCache.m in Sources */, - A66ECB0C1037DD2A24411DF60C9362AE /* UIImage+GIF.m in Sources */, - 6A00465C6CF90CE73C984F03572BE9C3 /* UIImage+MultiFormat.m in Sources */, - E8166EA34E4BEF58C5583C06CFFB0971 /* UIImageView+HighlightedWebCache.m in Sources */, - 71A419BAB91B0BECA6617C071891BF3C /* UIImageView+WebCache.m in Sources */, - A66BC5F91E9B66C05262C55BABAA0421 /* UIView+WebCacheOperation.m in Sources */, + 29D38081CE6E0C1DC7B78CB2467733EE /* SMCalloutView-dummy.m in Sources */, + 3BF50196E73DD51E6A1152973DFC27DD /* SMCalloutView.m in Sources */, + 29B4C7EBC553B1A96DDE7199EF7EB78A /* SMClassicCalloutView.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 4B8CABDD309337BA47058081211D728F /* Sources */ = { + A8A7CB475AC069906F4B23BEB0BD4A7F /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 7CBFCCC7367FCCF9D53FBFA8ED86BDD7 /* Pods-Delta-dummy.m in Sources */, + 0E95FFC222F9730AB5A2FA648F3DC10B /* Pods-Delta-dummy.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - A17AC6BBAD5FB70B85220CE98AEA2BD0 /* Sources */ = { + AABCA925A95FAE4250B2D9206D3D0081 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - B4D2E6BDA66762C41461DE1466567A22 /* AggregateFunctions.swift in Sources */, - A3C78AD9387EE296772B1B4031290DE9 /* Blob.swift in Sources */, - EAF8AC345B2B68E07E239E83AACF81E3 /* Collation.swift in Sources */, - 679DC0A54440ACE06C668426D960434B /* Connection.swift in Sources */, - E376FD7DF6990EB5D6059FF86AA392DD /* CoreFunctions.swift in Sources */, - EEF3F3825344DF5B3B1F91C8B3D92F81 /* CustomFunctions.swift in Sources */, - 6B70676C9CD3E65704CF5F345A58D7D8 /* Expression.swift in Sources */, - 80C66AC9B65D7A9E73EAF52953078A80 /* Foundation.swift in Sources */, - 098DD319E9D5AE3C4B413F1DCB7245E5 /* FTS4.swift in Sources */, - C3351D1B55FD32BBAD9B3335713FBB37 /* FTS5.swift in Sources */, - 81EA3C6ADBF7CCBC1711693AD8966D30 /* Helpers.swift in Sources */, - 4A2DCD3F0F0A15427A7008B45E0D3463 /* Operators.swift in Sources */, - C36994840D82BF702EC602A8DEC63223 /* Query.swift in Sources */, - E5102C928DC86E24E1FA70862A698132 /* RTree.swift in Sources */, - A5E0B4C7414F681B71DE66C07F4628C4 /* Schema.swift in Sources */, - 59757ED380B9FD2D3529CC01940ABC17 /* Setter.swift in Sources */, - 12CF79798B69B43D77D12724505829EB /* SQLite-Bridging.m in Sources */, - 9A73EA1D60A6932BDA2B033258B82247 /* SQLite.swift-dummy.m in Sources */, - F70F77BB9BD4B473EF5731A958F6CFB4 /* Statement.swift in Sources */, - A215B295B907F3FC375FFA644649A845 /* Value.swift in Sources */, + 67A9DED3A799C2C1B3190757AF74C869 /* NSData+ImageContentType.m in Sources */, + 53A1E27B96743AF1526979D7C407B36E /* SDImageCache.m in Sources */, + BD93645C73A232461BAFDCD2D583A48F /* SDWebImage-dummy.m in Sources */, + D47F030F3EE8210B84E275A72194BD50 /* SDWebImageCompat.m in Sources */, + 867ED479D87B069987F16CC84F1CB314 /* SDWebImageDecoder.m in Sources */, + D1B81917966545E8201CA9A7C53EAD86 /* SDWebImageDownloader.m in Sources */, + CB0C7E4A7184D8CB11F07ABB7E01BCBF /* SDWebImageDownloaderOperation.m in Sources */, + BB19B505BC3000C14CD0C6539F716F6F /* SDWebImageManager.m in Sources */, + 3B7E86A00F8C6E8F5A351516BDFC6E0A /* SDWebImagePrefetcher.m in Sources */, + 34F15EDD4167886716DE13EF3DA61525 /* UIButton+WebCache.m in Sources */, + BACF769130EA8F084781334E3F5487D6 /* UIImage+GIF.m in Sources */, + 01F6FD7829922FFEDBA0AC937221139D /* UIImage+MultiFormat.m in Sources */, + 7E1E4E7C559B3DCBC6FB1E3F91303A61 /* UIImageView+HighlightedWebCache.m in Sources */, + B4FF0763F545E55DDF9FB358526B21C5 /* UIImageView+WebCache.m in Sources */, + 4BFD33775F72F952206DA9101BA849A2 /* UIView+WebCacheOperation.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + B722D46C99854F66A3C53AFC7A1D7F65 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + D1AB6379EC7678A60E7A342E19CD7463 /* AggregateFunctions.swift in Sources */, + AB4F3A463C806CFD7BD412DC96CCA6FF /* Blob.swift in Sources */, + FD11B32C2CBEDD81033179121AAB5D2D /* Collation.swift in Sources */, + BC7F01C05460B87B4BD3597D8CFEDDD0 /* Connection.swift in Sources */, + 7BC82A3FB797473493834376FB76E54E /* CoreFunctions.swift in Sources */, + 14D45BB06714ADAB897AC0F9F5DEEB35 /* CustomFunctions.swift in Sources */, + B5C757D4F5CE144EBC972BC0EDA42EBC /* Expression.swift in Sources */, + 1C5A988FA0C3F4E0F3D81AC3C597B9E8 /* Foundation.swift in Sources */, + 483BC893AE648B89F28763CC2FE1932A /* FTS4.swift in Sources */, + FDEAC6DF3D7044CA7FDD15A185183C2C /* FTS5.swift in Sources */, + 0A108DF7E6F55085A67FC6E0FF9D597B /* Helpers.swift in Sources */, + D5F611A196AB19B6B27BC91E0F7CDF98 /* Operators.swift in Sources */, + DC0D674B7D20F83A7A5BAEEE4F00AFB5 /* Query.swift in Sources */, + 5EBA645F49A7944F9D5DE1DE7214B16C /* RTree.swift in Sources */, + 405F2E285A1E5033E75EA989DCE7F1BD /* Schema.swift in Sources */, + 69E9B37E0394A6C87B37648633198916 /* Setter.swift in Sources */, + E70CE29F92FC143D25EBAB0AA0FF7847 /* SQLite-Bridging.m in Sources */, + 02A3EAB09395DB7996C6A2D6FFEEA541 /* SQLite.swift-dummy.m in Sources */, + F76BA2CF262298B5E751146776A25CB2 /* Statement.swift in Sources */, + 65C3F0B49DCF090CFC1A57B581B7D5EE /* Value.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -723,30 +824,69 @@ /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ - 0935BBD3CFD2E9F741AC2D7E88FF5501 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = SQLite.swift; - target = D88F755329BB917F99DFC5405AC691FE /* SQLite.swift */; - targetProxy = 43751C8F4A1E0FED8A513B6C736B2141 /* PBXContainerItemProxy */; - }; - 32FA1882D4ABC28118B91D8E6A104BFB /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = SDWebImage; - target = 95AEAD50DEA1563D4D1E2AD6EEE0E7B4 /* SDWebImage */; - targetProxy = B1786652CDC10C9D41868B80152892A5 /* PBXContainerItemProxy */; - }; - 4DDDB8B816F29215470EC263CE338171 /* PBXTargetDependency */ = { + 29BDFC0FDC07E71DABA85606ECDCDFD4 /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = FileMD5Hash; target = 924057B2A88FC4B5526EC3FC7483ABE2 /* FileMD5Hash */; - targetProxy = F1D70524142DB2A888CA1F6E3F0F67CC /* PBXContainerItemProxy */; + targetProxy = 0E57566421DC7C04ED10FBFF02AE3217 /* PBXContainerItemProxy */; + }; + 35ED1E44B53F73C54B11C67782175716 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = SMCalloutView; + target = 5A0A16E27351F849E411E94C505CF452 /* SMCalloutView */; + targetProxy = 7713FF1D874368FBE2D22D4E4CB7C6A7 /* PBXContainerItemProxy */; + }; + 7912D2146AA8F4861919949C710FE08B /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = SQLite.swift; + target = D71D7949D6292CD21BE206D00103E682 /* SQLite.swift */; + targetProxy = 3AAE57E02BD6B50C58159D299DCA0C4F /* PBXContainerItemProxy */; + }; + C658BFD1115AABC95D34853360A10A3D /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = SDWebImage; + target = E02CAC9BD02FC53AAA763EA4830E4884 /* SDWebImage */; + targetProxy = 387F41711D87C3D2C8716FF754189765 /* PBXContainerItemProxy */; }; /* End PBXTargetDependency section */ /* Begin XCBuildConfiguration section */ - 34CC1AA0F2C62D3C5C3A2AEF38F2FE78 /* Release */ = { + 0D2198DAA52D58080E95DBD3D8992214 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 31B7E048CEBB667B0795D7399EA829AF /* SDWebImage.xcconfig */; + baseConfigurationReference = 061C525038BE58FCE9A6013CBA4162B5 /* SMCalloutView.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = ""; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = dwarf; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_NO_COMMON_BLOCKS = YES; + GCC_PREFIX_HEADER = "Target Support Files/SMCalloutView/SMCalloutView-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/SMCalloutView/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/SMCalloutView/SMCalloutView.modulemap"; + MTL_ENABLE_DEBUG_INFO = YES; + PRODUCT_NAME = SMCalloutView; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_VERSION = 3.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + 20BA7269FACC47ABAD2D3CC89BC89EC6 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = EA65B5484E3BB3284577BD4EA4FA7147 /* Pods-Delta.release.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -760,16 +900,21 @@ DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_NO_COMMON_BLOCKS = YES; - GCC_PREFIX_HEADER = "Target Support Files/SDWebImage/SDWebImage-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/SDWebImage/Info.plist"; + INFOPLIST_FILE = "Target Support Files/Pods-Delta/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 10.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/SDWebImage/SDWebImage.modulemap"; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-Delta/Pods-Delta.modulemap"; MTL_ENABLE_DEBUG_INFO = NO; - PRODUCT_NAME = SDWebImage; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = Pods_Delta; SDKROOT = iphoneos; SKIP_INSTALL = YES; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; SWIFT_VERSION = 3.0; TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; @@ -777,6 +922,75 @@ }; name = Release; }; + 32CD4441BC4925087C9B9D2D64782195 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 2FD50D8325E1E8D2B0953062797E6E02 /* SQLite.swift.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = ""; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_NO_COMMON_BLOCKS = YES; + GCC_PREFIX_HEADER = "Target Support Files/SQLite.swift/SQLite.swift-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/SQLite.swift/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/SQLite.swift/SQLite.swift.modulemap"; + MTL_ENABLE_DEBUG_INFO = NO; + PRODUCT_NAME = SQLite; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + SWIFT_VERSION = 3.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; + 435F325F37C4CB44C79CC5FF7289A36D /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 2FD50D8325E1E8D2B0953062797E6E02 /* SQLite.swift.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = ""; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = dwarf; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_NO_COMMON_BLOCKS = YES; + GCC_PREFIX_HEADER = "Target Support Files/SQLite.swift/SQLite.swift-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/SQLite.swift/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/SQLite.swift/SQLite.swift.modulemap"; + MTL_ENABLE_DEBUG_INFO = YES; + PRODUCT_NAME = SQLite; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 3.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; 643C76AA582046977B7877822ED7A258 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -825,48 +1039,9 @@ }; name = Debug; }; - 75EE5B0ED6DB7C6D167C2008C7D4D49C /* Debug */ = { + 90407854EE6F767B6B23052DB718601F /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 1C3BA8511D0F025064897F6EC408296A /* Pods-Delta.debug.xcconfig */; - buildSettings = { - CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = dwarf; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_NO_COMMON_BLOCKS = YES; - INFOPLIST_FILE = "Target Support Files/Pods-Delta/Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 10.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/Pods-Delta/Pods-Delta.modulemap"; - MTL_ENABLE_DEBUG_INFO = YES; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PODS_ROOT = "$(SRCROOT)"; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = Pods_Delta; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 3.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; - 7CB79771FB206E08213038425109B42C /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = EA65B5484E3BB3284577BD4EA4FA7147 /* Pods-Delta.release.xcconfig */; + baseConfigurationReference = 061C525038BE58FCE9A6013CBA4162B5 /* SMCalloutView.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -880,21 +1055,49 @@ DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_NO_COMMON_BLOCKS = YES; - INFOPLIST_FILE = "Target Support Files/Pods-Delta/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/SMCalloutView/SMCalloutView-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/SMCalloutView/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 10.0; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/Pods-Delta/Pods-Delta.modulemap"; + MODULEMAP_FILE = "Target Support Files/SMCalloutView/SMCalloutView.modulemap"; MTL_ENABLE_DEBUG_INFO = NO; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PODS_ROOT = "$(SRCROOT)"; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = Pods_Delta; + PRODUCT_NAME = SMCalloutView; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_VERSION = 3.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; + 94B2E36B9D50BB1F23C442EECC3A98DE /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = CC448D70D2D84A30A4A4D226A8ABD13F /* SDWebImage.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = ""; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_NO_COMMON_BLOCKS = YES; + GCC_PREFIX_HEADER = "Target Support Files/SDWebImage/SDWebImage-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/SDWebImage/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/SDWebImage/SDWebImage.modulemap"; + MTL_ENABLE_DEBUG_INFO = NO; + PRODUCT_NAME = SDWebImage; SDKROOT = iphoneos; SKIP_INSTALL = YES; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; SWIFT_VERSION = 3.0; TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; @@ -904,7 +1107,7 @@ }; 9ED0ADE0EA3D1E3B4EA7EFBE25BB4D6F /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = CB5685E217F7B2F7EDAAC619C783CDDA /* FileMD5Hash.xcconfig */; + baseConfigurationReference = DFB799765277CB092B656E76446C5A75 /* FileMD5Hash.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -935,75 +1138,6 @@ }; name = Release; }; - B284F3DC897E0D103E422DDAA04F371D /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 7E0880D76FFD4DB866FA61B3BBE9D8EE /* SQLite.swift.xcconfig */; - buildSettings = { - CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = dwarf; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_NO_COMMON_BLOCKS = YES; - GCC_PREFIX_HEADER = "Target Support Files/SQLite.swift/SQLite.swift-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/SQLite.swift/Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/SQLite.swift/SQLite.swift.modulemap"; - MTL_ENABLE_DEBUG_INFO = YES; - PRODUCT_NAME = SQLite; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 3.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; - B848EC96B1CE2C5324C340E1F1935FD8 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 7E0880D76FFD4DB866FA61B3BBE9D8EE /* SQLite.swift.xcconfig */; - buildSettings = { - CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_NO_COMMON_BLOCKS = YES; - GCC_PREFIX_HEADER = "Target Support Files/SQLite.swift/SQLite.swift-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/SQLite.swift/Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/SQLite.swift/SQLite.swift.modulemap"; - MTL_ENABLE_DEBUG_INFO = NO; - PRODUCT_NAME = SQLite; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - SWIFT_VERSION = 3.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; C03B8870130C98D1B02B59D003687524 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { @@ -1048,42 +1182,9 @@ }; name = Release; }; - D49B8E408047BA5314BE2727D48E1834 /* Debug */ = { + C955FC7239704D1450516B7FD0992E76 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = CB5685E217F7B2F7EDAAC619C783CDDA /* FileMD5Hash.xcconfig */; - buildSettings = { - CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = dwarf; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_NO_COMMON_BLOCKS = YES; - GCC_PREFIX_HEADER = "Target Support Files/FileMD5Hash/FileMD5Hash-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/FileMD5Hash/Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/FileMD5Hash/FileMD5Hash.modulemap"; - MTL_ENABLE_DEBUG_INFO = YES; - PRODUCT_NAME = FileMD5Hash; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_VERSION = 3.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; - FF2643C8017F1A3A64AA8C00C06221D7 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 31B7E048CEBB667B0795D7399EA829AF /* SDWebImage.xcconfig */; + baseConfigurationReference = CC448D70D2D84A30A4A4D226A8ABD13F /* SDWebImage.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -1114,6 +1215,78 @@ }; name = Debug; }; + D49B8E408047BA5314BE2727D48E1834 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = DFB799765277CB092B656E76446C5A75 /* FileMD5Hash.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = ""; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = dwarf; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_NO_COMMON_BLOCKS = YES; + GCC_PREFIX_HEADER = "Target Support Files/FileMD5Hash/FileMD5Hash-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/FileMD5Hash/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/FileMD5Hash/FileMD5Hash.modulemap"; + MTL_ENABLE_DEBUG_INFO = YES; + PRODUCT_NAME = FileMD5Hash; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_VERSION = 3.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + DC6449F204C483A3EC3E347DD20187E8 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 1C3BA8511D0F025064897F6EC408296A /* Pods-Delta.debug.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = ""; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = dwarf; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_NO_COMMON_BLOCKS = YES; + INFOPLIST_FILE = "Target Support Files/Pods-Delta/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 10.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-Delta/Pods-Delta.modulemap"; + MTL_ENABLE_DEBUG_INFO = YES; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = Pods_Delta; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 3.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ @@ -1126,15 +1299,6 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 0ABB0BB9AFF3C8D8FF7C2460E438B5E6 /* Build configuration list for PBXNativeTarget "Pods-Delta" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 75EE5B0ED6DB7C6D167C2008C7D4D49C /* Debug */, - 7CB79771FB206E08213038425109B42C /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; 2D8E8EC45A3A1A1D94AE762CB5028504 /* Build configuration list for PBXProject "Pods" */ = { isa = XCConfigurationList; buildConfigurations = ( @@ -1144,20 +1308,38 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 533175F905F937DF358073A42B67A5AA /* Build configuration list for PBXNativeTarget "SDWebImage" */ = { + 336350D22A1C45232C1FDF436E1FEBA2 /* Build configuration list for PBXNativeTarget "SDWebImage" */ = { isa = XCConfigurationList; buildConfigurations = ( - FF2643C8017F1A3A64AA8C00C06221D7 /* Debug */, - 34CC1AA0F2C62D3C5C3A2AEF38F2FE78 /* Release */, + C955FC7239704D1450516B7FD0992E76 /* Debug */, + 94B2E36B9D50BB1F23C442EECC3A98DE /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 9679E283619E0024B3156EB387DDCBDE /* Build configuration list for PBXNativeTarget "SQLite.swift" */ = { + 668A24D62570C0D022FAD98278F67B72 /* Build configuration list for PBXNativeTarget "SQLite.swift" */ = { isa = XCConfigurationList; buildConfigurations = ( - B284F3DC897E0D103E422DDAA04F371D /* Debug */, - B848EC96B1CE2C5324C340E1F1935FD8 /* Release */, + 435F325F37C4CB44C79CC5FF7289A36D /* Debug */, + 32CD4441BC4925087C9B9D2D64782195 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 8CEDF6F3DB0895E0DA8B67EF2A37C22C /* Build configuration list for PBXNativeTarget "Pods-Delta" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + DC6449F204C483A3EC3E347DD20187E8 /* Debug */, + 20BA7269FACC47ABAD2D3CC89BC89EC6 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + F8D4561891ACE1BC67CEB8D0C6F063E4 /* Build configuration list for PBXNativeTarget "SMCalloutView" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 0D2198DAA52D58080E95DBD3D8992214 /* Debug */, + 90407854EE6F767B6B23052DB718601F /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; diff --git a/Pods/SMCalloutView/LICENSE b/Pods/SMCalloutView/LICENSE new file mode 100644 index 0000000..2bb9ad2 --- /dev/null +++ b/Pods/SMCalloutView/LICENSE @@ -0,0 +1,176 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS \ No newline at end of file diff --git a/Pods/SMCalloutView/README.md b/Pods/SMCalloutView/README.md new file mode 100644 index 0000000..4ce2939 --- /dev/null +++ b/Pods/SMCalloutView/README.md @@ -0,0 +1,99 @@ +![Example Screenshot](SampleAssets/CalloutScreenshot.png) + + +Overview +-------- + +SMCalloutView aims to be an exact replica of the private UICalloutView system +control. + +We all love those "bubbles" you get when clicking pins in MKMapView. But +sadly, it's impossible to present this bubble-style "Callout" UI anywhere +outside MKMapView. Phooey! So this class _painstakingly_ recreates this handy +control for your pleasure. + + +Usage +----- + +To use SMCalloutView in your own projects, simply copy the files +`SMCalloutView.h` and `SMCalloutView.m`. + +SMCalloutView, by default, will render in the new style introduced with +iOS 7. If you need the old style, simply include `SMClassicCalloutView.h` +and `SMClassicCalloutView.m` in your project as well. There is a special +class constructor, `+[SMCalloutView platformCalloutView]` which will +automatically select the appropriate callout class for the current platform. + +The comments in `SMCalloutView.h` do a lot of explaining on how to use the +class, but the main function you'll need is `presentCalloutFromRect:`. You'll +specify the view you'd like to add the callout to, as well as the rect +defining the "target" that the popup should point at. The target rect should +be _in the coordinate system of the target view_ (just like the similarly- +named `UIPopover` method). Most likely this will be `target.frame` if you're +adding the callout view as a sibling of the target view, or it would be +`target.bounds` if you're adding the callout view to the target itself. + +You can study the included project's UIViewController subclasses for a working +example. + + +Questions +--------- + +#### How do I change the height of the callout? + +If you use only the `title/titleView/subtitle/subtitleView` properties, the +callout will always be the "system standard" height. If you assign the +`contentView` property however, then the callout will size to fit the +`contentView` and the other properties are ignored. + + [#29]: https://github.com/nfarina/calloutview/issues/29 + + +#### Can I customize the background graphics? + +Yes, the callout background is an instance of `SMCalloutBackgroundView`. You +can set your own custom `View` subclass to be the background, or you can use +one of the built-in subclasses: + + - `SMCalloutMaskedBackgroundView` renders an iOS-7 style background. + + - `SMCalloutImageBackgroundView` lets you specify each of the image + "fragments" that make up a horizontally-stretchable background. + + - `SMCalloutDrawnBackgroundView` draws the background at any size using + CoreGraphics methods. You can copy the `-drawRect` method and change the + parameters to suit your needs. + + +#### Can I use the callout with the Google Maps iOS SDK? + +Check out [ryanmaxwell's demo project][googlemaps] for an example of one way +to do this. ([More discussion on this topic][#25]) + + [googlemaps]: https://github.com/ryanmaxwell/GoogleMapsCalloutView + [#25]: https://github.com/nfarina/calloutview/issues/25 + + +#### Have you recreated more of MapKit? + +Nope, but other intrepid coders have! + +- For an awesome replacement of the pulsing blue "Current Location" dot, check + out [Sam Vermette's SVPulsingAnnotationView][dot]. + +- And for the outdoor map data and tiles themselves, check out [Mapbox's iOS + SDK][mapbox], a complete open-source solution for custom maps. They even use + `SMCalloutView` out of the box! + + [dot]: https://github.com/samvermette/SVPulsingAnnotationView + [mapbox]: https://www.mapbox.com/mobile/ + + +More Info +--------- + +You can read more info if you wish in the [blog post][]. + + [blog post]: http://nfarina.com/post/78014139253/smcalloutview-for-ios-7 diff --git a/Pods/SMCalloutView/SMCalloutView.h b/Pods/SMCalloutView/SMCalloutView.h new file mode 100755 index 0000000..96fd744 --- /dev/null +++ b/Pods/SMCalloutView/SMCalloutView.h @@ -0,0 +1,200 @@ +#import +#import + +/* + +SMCalloutView +------------- +Created by Nick Farina (nfarina@gmail.com) +Version 2.1.5 + +*/ + +/// options for which directions the callout is allowed to "point" in. +typedef NS_OPTIONS(NSUInteger, SMCalloutArrowDirection) { + SMCalloutArrowDirectionUp = 1 << 0, + SMCalloutArrowDirectionDown = 1 << 1, + SMCalloutArrowDirectionAny = SMCalloutArrowDirectionUp | SMCalloutArrowDirectionDown +}; + +/// options for the callout present/dismiss animation +typedef NS_ENUM(NSInteger, SMCalloutAnimation) { + /// the "bounce" animation we all know and love from @c UIAlertView + SMCalloutAnimationBounce, + /// a simple fade in or out + SMCalloutAnimationFade, + /// grow or shrink linearly, like in the iPad Calendar app + SMCalloutAnimationStretch +}; + +NS_ASSUME_NONNULL_BEGIN + +/// when delaying our popup in order to scroll content into view, you can use this amount to match the +/// animation duration of UIScrollView when using @c -setContentOffset:animated. +extern NSTimeInterval const kSMCalloutViewRepositionDelayForUIScrollView; + +@protocol SMCalloutViewDelegate; +@class SMCalloutBackgroundView; + +// +// Callout view. +// + +@interface SMCalloutView : UIView + +@property (nonatomic, weak, nullable) id delegate; +/// title/titleView relationship mimics UINavigationBar. +@property (nonatomic, copy, nullable) NSString *title; +@property (nonatomic, copy, nullable) NSString *subtitle; + +/// Left accessory view for the call out +@property (nonatomic, strong, nullable) UIView *leftAccessoryView; +/// Right accessoty view for the call out +@property (nonatomic, strong, nullable) UIView *rightAccessoryView; +/// Default @c SMCalloutArrowDirectionDown +@property (nonatomic, assign) SMCalloutArrowDirection permittedArrowDirection; +/// The current arrow direction +@property (nonatomic, readonly) SMCalloutArrowDirection currentArrowDirection; +/// if the @c UIView you're constraining to has portions that are overlapped by nav bar, tab bar, etc. you'll need to tell us those insets. +@property (nonatomic, assign) UIEdgeInsets constrainedInsets; +/// default is @c SMCalloutMaskedBackgroundView, or @c SMCalloutDrawnBackgroundView when using @c SMClassicCalloutView +@property (nonatomic, strong) SMCalloutBackgroundView *backgroundView; + +/** + @brief Custom title view. + + @disucssion Keep in mind that @c SMCalloutView calls @c -sizeThatFits on titleView/subtitleView if defined, so your view + may be resized as a result of that (especially if you're using @c UILabel/UITextField). You may want to subclass and override @c -sizeThatFits, or just wrap your view in a "generic" @c UIView if you do not want it to be auto-sized. + + @warning If this is set, the respective @c title property will be ignored. + */ +@property (nonatomic, strong, nullable) UIView *titleView; + +/** + @brief Custom subtitle view. + + @discussion Keep in mind that @c SMCalloutView calls @c -sizeThatFits on subtitleView if defined, so your view + may be resized as a result of that (especially if you're using @c UILabel/UITextField). You may want to subclass and override @c -sizeThatFits, or just wrap your view in a "generic" @c UIView if you do not want it to be auto-sized. + + @warning If this is set, the respective @c subtitle property will be ignored. + */ +@property (nonatomic, strong, nullable) UIView *subtitleView; + +/// Custom "content" view that can be any width/height. If this is set, title/subtitle/titleView/subtitleView are all ignored. +@property (nonatomic, retain, nullable) UIView *contentView; + +/// Custom content view margin +@property (nonatomic, assign) UIEdgeInsets contentViewInset; + +/// calloutOffset is the offset in screen points from the top-middle of the target view, where the anchor of the callout should be shown. +@property (nonatomic, assign) CGPoint calloutOffset; + +/// default SMCalloutAnimationBounce, SMCalloutAnimationFade respectively +@property (nonatomic, assign) SMCalloutAnimation presentAnimation, dismissAnimation; + +/// Returns a new instance of SMCalloutView if running on iOS 7 or better, otherwise a new instance of SMClassicCalloutView if available. ++ (SMCalloutView *)platformCalloutView; + +/** + @brief Presents a callout view by adding it to "inView" and pointing at the given rect of inView's bounds. + + @discussion Constrains the callout to the bounds of the given view. Optionally scrolls the given rect into view (plus margins) + if @c -delegate is set and responds to @c -delayForRepositionWithSize. + + @param rect @c CGRect to present the view from + @param view view to 'constrain' the @c constrainedView to + @param constrainedView @c UIView to be constrainted in @c view + @param animated @c BOOL if presentation should be animated + */ +- (void)presentCalloutFromRect:(CGRect)rect inView:(UIView *)view constrainedToView:(UIView *)constrainedView animated:(BOOL)animated; + +/** + @brief Present a callout layer in the `layer` and pointing at the given rect of the `layer` bounds + + @discussion Same as the view-based presentation, but inserts the callout into a CALayer hierarchy instead. + @note Be aware that you'll have to direct your own touches to any accessory views, since CALayer doesn't relay touch events. + + @param rect @c CGRect to present the view from + @param layer layer to 'constrain' the @c constrainedLayer to + @param constrainedLayer @c CALayer to be constrained in @c layer + @param animated @c BOOL if presentation should be animated + */ +- (void)presentCalloutFromRect:(CGRect)rect inLayer:(CALayer *)layer constrainedToLayer:(CALayer *)constrainedLayer animated:(BOOL)animated; + +/** + Dismiss the callout view + + @param animated @c BOOL if dismissal should be animated + */ +- (void)dismissCalloutAnimated:(BOOL)animated; + +/// For subclassers. You can override this method to provide your own custom animation for presenting/dismissing the callout. +- (CAAnimation *)animationWithType:(SMCalloutAnimation)type presenting:(BOOL)presenting; + +@end + +// +// Background view - default draws the iOS 7 system background style (translucent white with rounded arrow). +// + +/// Abstract base class +@interface SMCalloutBackgroundView : UIView +/// indicates where the tip of the arrow should be drawn, as a pixel offset +@property (nonatomic, assign) CGPoint arrowPoint; +/// will be set by the callout when the callout is in a highlighted state +@property (nonatomic, assign) BOOL highlighted; +/// returns an optional layer whose contents should mask the callout view's contents (not honored by @c SMClassicCalloutView ) +@property (nonatomic, assign) CALayer *contentMask; +/// height of the callout "arrow" +@property (nonatomic, assign) CGFloat anchorHeight; +/// the smallest possible distance from the edge of our control to the "tip" of the anchor, from either left or right +@property (nonatomic, assign) CGFloat anchorMargin; +@end + +/// Default for iOS 7, this reproduces the "masked" behavior of the iOS 7-style callout view. +/// Accessories are masked by the shape of the callout (including the arrow itself). +@interface SMCalloutMaskedBackgroundView : SMCalloutBackgroundView +@end + +// +// Delegate methods +// + +@protocol SMCalloutViewDelegate +@optional + +/// Controls whether the callout "highlights" when pressed. default YES. You must also respond to @c -calloutViewClicked below. +/// Not honored by @c SMClassicCalloutView. +- (BOOL)calloutViewShouldHighlight:(SMCalloutView *)calloutView; + +/// Called when the callout view is clicked. Not honored by @c SMClassicCalloutView. +- (void)calloutViewClicked:(SMCalloutView *)calloutView; + +/** + Called when the callout view detects that it will be outside the constrained view when it appears, + or if the target rect was already outside the constrained view. You can implement this selector + to respond to this situation by repositioning your content first in order to make everything visible. + The @c CGSize passed is the calculated offset necessary to make everything visible (plus a nice margin). + It expects you to return the amount of time you need to reposition things so the popup can be delayed. + Typically you would return @c kSMCalloutViewRepositionDelayForUIScrollView if you're repositioning by calling @c [UIScrollView @c setContentOffset:animated:]. + + @param calloutView the @c SMCalloutView to reposition + @param offset caluclated offset necessary to make everything visible + @returns @c NSTimeInterval to delay the repositioning + */ +- (NSTimeInterval)calloutView:(SMCalloutView *)calloutView delayForRepositionWithSize:(CGSize)offset; + +/// Called before the callout view appears on screen, or before the appearance animation will start. +- (void)calloutViewWillAppear:(SMCalloutView *)calloutView; + +/// Called after the callout view appears on screen, or after the appearance animation is complete. +- (void)calloutViewDidAppear:(SMCalloutView *)calloutView; + +/// Called before the callout view is removed from the screen, or before the disappearance animation is complete. +- (void)calloutViewWillDisappear:(SMCalloutView *)calloutView; + +/// Called after the callout view is removed from the screen, or after the disappearance animation is complete. +- (void)calloutViewDidDisappear:(SMCalloutView *)calloutView; + +NS_ASSUME_NONNULL_END +@end diff --git a/Pods/SMCalloutView/SMCalloutView.m b/Pods/SMCalloutView/SMCalloutView.m new file mode 100755 index 0000000..5943c50 --- /dev/null +++ b/Pods/SMCalloutView/SMCalloutView.m @@ -0,0 +1,859 @@ +#import "SMCalloutView.h" + +// +// UIView frame helpers - we do a lot of UIView frame fiddling in this class; these functions help keep things readable. +// + +@interface UIView (SMFrameAdditions) +@property (nonatomic, assign) CGPoint frameOrigin; +@property (nonatomic, assign) CGSize frameSize; +@property (nonatomic, assign) CGFloat frameX, frameY, frameWidth, frameHeight; // normal rect properties +@property (nonatomic, assign) CGFloat frameLeft, frameTop, frameRight, frameBottom; // these will stretch/shrink the rect +@end + +// +// Callout View. +// + +#define CALLOUT_DEFAULT_CONTAINER_HEIGHT 44 // height of just the main portion without arrow +#define CALLOUT_SUB_DEFAULT_CONTAINER_HEIGHT 52 // height of just the main portion without arrow (when subtitle is present) +#define CALLOUT_MIN_WIDTH 61 // minimum width of system callout +#define TITLE_HMARGIN 12 // the title/subtitle view's normal horizontal margin from the edges of our callout view or from the accessories +#define TITLE_TOP 11 // the top of the title view when no subtitle is present +#define TITLE_SUB_TOP 4 // the top of the title view when a subtitle IS present +#define TITLE_HEIGHT 21 // title height, fixed +#define SUBTITLE_TOP 28 // the top of the subtitle, when present +#define SUBTITLE_HEIGHT 15 // subtitle height, fixed +#define BETWEEN_ACCESSORIES_MARGIN 7 // margin between accessories when no title/subtitle is present +#define TOP_ANCHOR_MARGIN 13 // all the above measurements assume a bottom anchor! if we're pointing "up" we'll need to add this top margin to everything. +#define COMFORTABLE_MARGIN 10 // when we try to reposition content to be visible, we'll consider this margin around your target rect + +NSTimeInterval const kSMCalloutViewRepositionDelayForUIScrollView = 1.0/3.0; + +@interface SMCalloutView () +@property (nonatomic, strong) UIButton *containerView; // for masking and interaction +@property (nonatomic, strong) UILabel *titleLabel, *subtitleLabel; +@property (nonatomic, assign) SMCalloutArrowDirection currentArrowDirection; +@property (nonatomic, assign) BOOL popupCancelled; +@end + +@implementation SMCalloutView + ++ (SMCalloutView *)platformCalloutView { + + // if you haven't compiled SMClassicCalloutView into your app, then we can't possibly create an instance of it! + if (!NSClassFromString(@"SMClassicCalloutView")) + return [SMCalloutView new]; + + // ok we have both - so choose the best one based on current platform + if (floor(NSFoundationVersionNumber) > NSFoundationVersionNumber_iOS_6_1) + return [SMCalloutView new]; // iOS 7+ + else + return [NSClassFromString(@"SMClassicCalloutView") new]; +} + +- (id)initWithFrame:(CGRect)frame { + if (self = [super initWithFrame:frame]) { + self.permittedArrowDirection = SMCalloutArrowDirectionDown; + self.presentAnimation = SMCalloutAnimationBounce; + self.dismissAnimation = SMCalloutAnimationFade; + self.backgroundColor = [UIColor clearColor]; + self.containerView = [UIButton new]; + self.containerView.isAccessibilityElement = NO; + self.isAccessibilityElement = NO; + self.contentViewInset = UIEdgeInsetsMake(12, 12, 12, 12); + + [self.containerView addTarget:self action:@selector(highlightIfNecessary) forControlEvents:UIControlEventTouchDown | UIControlEventTouchDragInside]; + [self.containerView addTarget:self action:@selector(unhighlightIfNecessary) forControlEvents:UIControlEventTouchDragOutside | UIControlEventTouchCancel | UIControlEventTouchUpOutside | UIControlEventTouchUpInside]; + [self.containerView addTarget:self action:@selector(calloutClicked) forControlEvents:UIControlEventTouchUpInside]; + } + return self; +} + +- (BOOL)supportsHighlighting { + if (![self.delegate respondsToSelector:@selector(calloutViewClicked:)]) + return NO; + if ([self.delegate respondsToSelector:@selector(calloutViewShouldHighlight:)]) + return [self.delegate calloutViewShouldHighlight:self]; + return YES; +} + +- (void)highlightIfNecessary { if (self.supportsHighlighting) self.backgroundView.highlighted = YES; } +- (void)unhighlightIfNecessary { if (self.supportsHighlighting) self.backgroundView.highlighted = NO; } + +- (void)calloutClicked { + if ([self.delegate respondsToSelector:@selector(calloutViewClicked:)]) + [self.delegate calloutViewClicked:self]; +} + +- (UIView *)titleViewOrDefault { + if (self.titleView) + // if you have a custom title view defined, return that. + return self.titleView; + else { + if (!self.titleLabel) { + // create a default titleView + self.titleLabel = [UILabel new]; + self.titleLabel.frameHeight = TITLE_HEIGHT; + self.titleLabel.opaque = NO; + self.titleLabel.backgroundColor = [UIColor clearColor]; + self.titleLabel.font = [UIFont systemFontOfSize:17]; + self.titleLabel.textColor = [UIColor blackColor]; + } + return self.titleLabel; + } +} + +- (UIView *)subtitleViewOrDefault { + if (self.subtitleView) + // if you have a custom subtitle view defined, return that. + return self.subtitleView; + else { + if (!self.subtitleLabel) { + // create a default subtitleView + self.subtitleLabel = [UILabel new]; + self.subtitleLabel.frameHeight = SUBTITLE_HEIGHT; + self.subtitleLabel.opaque = NO; + self.subtitleLabel.backgroundColor = [UIColor clearColor]; + self.subtitleLabel.font = [UIFont systemFontOfSize:12]; + self.subtitleLabel.textColor = [UIColor blackColor]; + } + return self.subtitleLabel; + } +} + +- (SMCalloutBackgroundView *)backgroundView { + // create our default background on first access only if it's nil, since you might have set your own background anyway. + return _backgroundView ? _backgroundView : (_backgroundView = [self defaultBackgroundView]); +} + +- (SMCalloutBackgroundView *)defaultBackgroundView { + return [SMCalloutMaskedBackgroundView new]; +} + +- (void)rebuildSubviews { + // remove and re-add our appropriate subviews in the appropriate order + [self.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)]; + [self.containerView.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)]; + [self setNeedsDisplay]; + + [self addSubview:self.backgroundView]; + [self addSubview:self.containerView]; + + if (self.contentView) { + [self.containerView addSubview:self.contentView]; + } + else { + if (self.titleViewOrDefault) [self.containerView addSubview:self.titleViewOrDefault]; + if (self.subtitleViewOrDefault) [self.containerView addSubview:self.subtitleViewOrDefault]; + } + if (self.leftAccessoryView) [self.containerView addSubview:self.leftAccessoryView]; + if (self.rightAccessoryView) [self.containerView addSubview:self.rightAccessoryView]; +} + +// Accessory margins. Accessories are centered vertically when shorter +// than the callout, otherwise they grow from the upper corner. + +- (CGFloat)leftAccessoryVerticalMargin { + if (self.leftAccessoryView.frameHeight < self.calloutContainerHeight) + return roundf((self.calloutContainerHeight - self.leftAccessoryView.frameHeight) / 2); + else + return 0; +} + +- (CGFloat)leftAccessoryHorizontalMargin { + return fminf(self.leftAccessoryVerticalMargin, TITLE_HMARGIN); +} + +- (CGFloat)rightAccessoryVerticalMargin { + if (self.rightAccessoryView.frameHeight < self.calloutContainerHeight) + return roundf((self.calloutContainerHeight - self.rightAccessoryView.frameHeight) / 2); + else + return 0; +} + +- (CGFloat)rightAccessoryHorizontalMargin { + return fminf(self.rightAccessoryVerticalMargin, TITLE_HMARGIN); +} + +- (CGFloat)innerContentMarginLeft { + if (self.leftAccessoryView) + return self.leftAccessoryHorizontalMargin + self.leftAccessoryView.frameWidth + TITLE_HMARGIN; + else + return self.contentViewInset.left; +} + +- (CGFloat)innerContentMarginRight { + if (self.rightAccessoryView) + return self.rightAccessoryHorizontalMargin + self.rightAccessoryView.frameWidth + TITLE_HMARGIN; + else + return self.contentViewInset.right; +} + +- (CGFloat)calloutHeight { + return self.calloutContainerHeight + self.backgroundView.anchorHeight; +} + +- (CGFloat)calloutContainerHeight { + if (self.contentView) + return self.contentView.frameHeight + self.contentViewInset.bottom + self.contentViewInset.top; + else if (self.subtitleView || self.subtitle.length > 0) + return CALLOUT_SUB_DEFAULT_CONTAINER_HEIGHT; + else + return CALLOUT_DEFAULT_CONTAINER_HEIGHT; +} + +- (CGSize)sizeThatFits:(CGSize)size { + + // calculate how much non-negotiable space we need to reserve for margin and accessories + CGFloat margin = self.innerContentMarginLeft + self.innerContentMarginRight; + + // how much room is left for text? + CGFloat availableWidthForText = size.width - margin - 1; + + // no room for text? then we'll have to squeeze into the given size somehow. + if (availableWidthForText < 0) + availableWidthForText = 0; + + CGSize preferredTitleSize = [self.titleViewOrDefault sizeThatFits:CGSizeMake(availableWidthForText, TITLE_HEIGHT)]; + CGSize preferredSubtitleSize = [self.subtitleViewOrDefault sizeThatFits:CGSizeMake(availableWidthForText, SUBTITLE_HEIGHT)]; + + // total width we'd like + CGFloat preferredWidth; + + if (self.contentView) { + + // if we have a content view, then take our preferred size directly from that + preferredWidth = self.contentView.frameWidth + margin; + } + else if (preferredTitleSize.width >= 0.000001 || preferredSubtitleSize.width >= 0.000001) { + + // if we have a title or subtitle, then our assumed margins are valid, and we can apply them + preferredWidth = fmaxf(preferredTitleSize.width, preferredSubtitleSize.width) + margin; + } + else { + // ok we have no title or subtitle to speak of. In this case, the system callout would actually not display + // at all! But we can handle it. + preferredWidth = self.leftAccessoryView.frameWidth + self.rightAccessoryView.frameWidth + self.leftAccessoryHorizontalMargin + self.rightAccessoryHorizontalMargin; + + if (self.leftAccessoryView && self.rightAccessoryView) + preferredWidth += BETWEEN_ACCESSORIES_MARGIN; + } + + // ensure we're big enough to fit our graphics! + preferredWidth = fmaxf(preferredWidth, CALLOUT_MIN_WIDTH); + + // ask to be smaller if we have space, otherwise we'll fit into what we have by truncating the title/subtitle. + return CGSizeMake(fminf(preferredWidth, size.width), self.calloutHeight); +} + +- (CGSize)offsetToContainRect:(CGRect)innerRect inRect:(CGRect)outerRect { + CGFloat nudgeRight = fmaxf(0, CGRectGetMinX(outerRect) - CGRectGetMinX(innerRect)); + CGFloat nudgeLeft = fminf(0, CGRectGetMaxX(outerRect) - CGRectGetMaxX(innerRect)); + CGFloat nudgeTop = fmaxf(0, CGRectGetMinY(outerRect) - CGRectGetMinY(innerRect)); + CGFloat nudgeBottom = fminf(0, CGRectGetMaxY(outerRect) - CGRectGetMaxY(innerRect)); + return CGSizeMake(nudgeLeft ? nudgeLeft : nudgeRight, nudgeTop ? nudgeTop : nudgeBottom); +} + +- (void)presentCalloutFromRect:(CGRect)rect inView:(UIView *)view constrainedToView:(UIView *)constrainedView animated:(BOOL)animated { + [self presentCalloutFromRect:rect inLayer:view.layer ofView:view constrainedToLayer:constrainedView.layer animated:animated]; +} + +- (void)presentCalloutFromRect:(CGRect)rect inLayer:(CALayer *)layer constrainedToLayer:(CALayer *)constrainedLayer animated:(BOOL)animated { + [self presentCalloutFromRect:rect inLayer:layer ofView:nil constrainedToLayer:constrainedLayer animated:animated]; +} + +// this private method handles both CALayer and UIView parents depending on what's passed. +- (void)presentCalloutFromRect:(CGRect)rect inLayer:(CALayer *)layer ofView:(UIView *)view constrainedToLayer:(CALayer *)constrainedLayer animated:(BOOL)animated { + + // Sanity check: dismiss this callout immediately if it's displayed somewhere + if (self.layer.superlayer) [self dismissCalloutAnimated:NO]; + + // cancel all animations that may be in progress + [self.layer removeAnimationForKey:@"present"]; + [self.layer removeAnimationForKey:@"dismiss"]; + + // figure out the constrained view's rect in our popup view's coordinate system + CGRect constrainedRect = [constrainedLayer convertRect:constrainedLayer.bounds toLayer:layer]; + + // apply our edge constraints + constrainedRect = UIEdgeInsetsInsetRect(constrainedRect, self.constrainedInsets); + + constrainedRect = CGRectInset(constrainedRect, COMFORTABLE_MARGIN, COMFORTABLE_MARGIN); + + // form our subviews based on our content set so far + [self rebuildSubviews]; + + // apply title/subtitle (if present + self.titleLabel.text = self.title; + self.subtitleLabel.text = self.subtitle; + + // size the callout to fit the width constraint as best as possible + self.frameSize = [self sizeThatFits:CGSizeMake(constrainedRect.size.width, self.calloutHeight)]; + + // how much room do we have in the constraint box, both above and below our target rect? + CGFloat topSpace = CGRectGetMinY(rect) - CGRectGetMinY(constrainedRect); + CGFloat bottomSpace = CGRectGetMaxY(constrainedRect) - CGRectGetMaxY(rect); + + // we prefer to point our arrow down. + SMCalloutArrowDirection bestDirection = SMCalloutArrowDirectionDown; + + // we'll point it up though if that's the only option you gave us. + if (self.permittedArrowDirection == SMCalloutArrowDirectionUp) + bestDirection = SMCalloutArrowDirectionUp; + + // or, if we don't have enough space on the top and have more space on the bottom, and you + // gave us a choice, then pointing up is the better option. + if (self.permittedArrowDirection == SMCalloutArrowDirectionAny && topSpace < self.calloutHeight && bottomSpace > topSpace) + bestDirection = SMCalloutArrowDirectionUp; + + self.currentArrowDirection = bestDirection; + + // we want to point directly at the horizontal center of the given rect. calculate our "anchor point" in terms of our + // target view's coordinate system. make sure to offset the anchor point as requested if necessary. + CGFloat anchorX = self.calloutOffset.x + CGRectGetMidX(rect); + CGFloat anchorY = self.calloutOffset.y + (bestDirection == SMCalloutArrowDirectionDown ? CGRectGetMinY(rect) : CGRectGetMaxY(rect)); + + // we prefer to sit centered directly above our anchor + CGFloat calloutX = roundf(anchorX - self.frameWidth / 2); + + // but not if it's going to get too close to the edge of our constraints + if (calloutX < constrainedRect.origin.x) + calloutX = constrainedRect.origin.x; + + if (calloutX > constrainedRect.origin.x+constrainedRect.size.width-self.frameWidth) + calloutX = constrainedRect.origin.x+constrainedRect.size.width-self.frameWidth; + + // what's the farthest to the left and right that we could point to, given our background image constraints? + CGFloat minPointX = calloutX + self.backgroundView.anchorMargin; + CGFloat maxPointX = calloutX + self.frameWidth - self.backgroundView.anchorMargin; + + // we may need to scoot over to the left or right to point at the correct spot + CGFloat adjustX = 0; + if (anchorX < minPointX) adjustX = anchorX - minPointX; + if (anchorX > maxPointX) adjustX = anchorX - maxPointX; + + // add the callout to the given layer (or view if possible, to receive touch events) + if (view) + [view addSubview:self]; + else + [layer addSublayer:self.layer]; + + CGPoint calloutOrigin = { + .x = calloutX + adjustX, + .y = bestDirection == SMCalloutArrowDirectionDown ? (anchorY - self.calloutHeight) : anchorY + }; + + self.frameOrigin = calloutOrigin; + + // now set the *actual* anchor point for our layer so that our "popup" animation starts from this point. + CGPoint anchorPoint = [layer convertPoint:CGPointMake(anchorX, anchorY) toLayer:self.layer]; + + // pass on the anchor point to our background view so it knows where to draw the arrow + self.backgroundView.arrowPoint = anchorPoint; + + // adjust it to unit coordinates for the actual layer.anchorPoint property + anchorPoint.x /= self.frameWidth; + anchorPoint.y /= self.frameHeight; + self.layer.anchorPoint = anchorPoint; + + // setting the anchor point moves the view a bit, so we need to reset + self.frameOrigin = calloutOrigin; + + // make sure our frame is not on half-pixels or else we may be blurry! + CGFloat scale = [UIScreen mainScreen].scale; + self.frameX = floorf(self.frameX*scale)/scale; + self.frameY = floorf(self.frameY*scale)/scale; + + // layout now so we can immediately start animating to the final position if needed + [self setNeedsLayout]; + [self layoutIfNeeded]; + + // if we're outside the bounds of our constraint rect, we'll give our delegate an opportunity to shift us into position. + // consider both our size and the size of our target rect (which we'll assume to be the size of the content you want to scroll into view. + CGRect contentRect = CGRectUnion(self.frame, rect); + CGSize offset = [self offsetToContainRect:contentRect inRect:constrainedRect]; + + NSTimeInterval delay = 0; + self.popupCancelled = NO; // reset this before calling our delegate below + + if ([self.delegate respondsToSelector:@selector(calloutView:delayForRepositionWithSize:)] && !CGSizeEqualToSize(offset, CGSizeZero)) + delay = [self.delegate calloutView:(id)self delayForRepositionWithSize:offset]; + + // there's a chance that user code in the delegate method may have called -dismissCalloutAnimated to cancel things; if that + // happened then we need to bail! + if (self.popupCancelled) return; + + // now we want to mask our contents to our background view (if requested) to match the iOS 7 style + self.containerView.layer.mask = self.backgroundView.contentMask; + + // if we need to delay, we don't want to be visible while we're delaying, so hide us in preparation for our popup + self.hidden = YES; + + // create the appropriate animation, even if we're not animated + CAAnimation *animation = [self animationWithType:self.presentAnimation presenting:YES]; + + // nuke the duration if no animation requested - we'll still need to "run" the animation to get delays and callbacks + if (!animated) + animation.duration = 0.0000001; // can't be zero or the animation won't "run" + + animation.beginTime = CACurrentMediaTime() + delay; + animation.delegate = self; + + [self.layer addAnimation:animation forKey:@"present"]; +} + +- (void)animationDidStart:(CAAnimation *)anim { + BOOL presenting = [[anim valueForKey:@"presenting"] boolValue]; + + if (presenting) { + if ([_delegate respondsToSelector:@selector(calloutViewWillAppear:)]) + [_delegate calloutViewWillAppear:(id)self]; + + // ok, animation is on, let's make ourselves visible! + self.hidden = NO; + } + else if (!presenting) { + if ([_delegate respondsToSelector:@selector(calloutViewWillDisappear:)]) + [_delegate calloutViewWillDisappear:(id)self]; + } +} + +- (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)finished { + BOOL presenting = [[anim valueForKey:@"presenting"] boolValue]; + + if (presenting && finished) { + if ([_delegate respondsToSelector:@selector(calloutViewDidAppear:)]) + [_delegate calloutViewDidAppear:(id)self]; + } + else if (!presenting && finished) { + + [self removeFromParent]; + [self.layer removeAnimationForKey:@"dismiss"]; + + if ([_delegate respondsToSelector:@selector(calloutViewDidDisappear:)]) + [_delegate calloutViewDidDisappear:(id)self]; + } +} + +- (void)dismissCalloutAnimated:(BOOL)animated { + + // cancel all animations that may be in progress + [self.layer removeAnimationForKey:@"present"]; + [self.layer removeAnimationForKey:@"dismiss"]; + + self.popupCancelled = YES; + + if (animated) { + CAAnimation *animation = [self animationWithType:self.dismissAnimation presenting:NO]; + animation.delegate = self; + [self.layer addAnimation:animation forKey:@"dismiss"]; + } + else { + [self removeFromParent]; + } +} + +- (void)removeFromParent { + if (self.superview) + [self removeFromSuperview]; + else { + // removing a layer from a superlayer causes an implicit fade-out animation that we wish to disable. + [CATransaction begin]; + [CATransaction setDisableActions:YES]; + [self.layer removeFromSuperlayer]; + [CATransaction commit]; + } +} + +- (CAAnimation *)animationWithType:(SMCalloutAnimation)type presenting:(BOOL)presenting { + CAAnimation *animation = nil; + + if (type == SMCalloutAnimationBounce) { + + CABasicAnimation *fade = [CABasicAnimation animationWithKeyPath:@"opacity"]; + fade.duration = 0.23; + fade.fromValue = presenting ? @0.0 : @1.0; + fade.toValue = presenting ? @1.0 : @0.0; + fade.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]; + + CABasicAnimation *bounce = [CABasicAnimation animationWithKeyPath:@"transform.scale"]; + bounce.duration = 0.23; + bounce.fromValue = presenting ? @0.7 : @1.0; + bounce.toValue = presenting ? @1.0 : @0.7; + bounce.timingFunction = [CAMediaTimingFunction functionWithControlPoints:0.59367:0.12066:0.18878:1.5814]; + + CAAnimationGroup *group = [CAAnimationGroup animation]; + group.animations = @[fade, bounce]; + group.duration = 0.23; + + animation = group; + } + else if (type == SMCalloutAnimationFade) { + CABasicAnimation *fade = [CABasicAnimation animationWithKeyPath:@"opacity"]; + fade.duration = 1.0/3.0; + fade.fromValue = presenting ? @0.0 : @1.0; + fade.toValue = presenting ? @1.0 : @0.0; + animation = fade; + } + else if (type == SMCalloutAnimationStretch) { + CABasicAnimation *stretch = [CABasicAnimation animationWithKeyPath:@"transform.scale"]; + stretch.duration = 0.1; + stretch.fromValue = presenting ? @0.0 : @1.0; + stretch.toValue = presenting ? @1.0 : @0.0; + animation = stretch; + } + + // CAAnimation is KVC compliant, so we can store whether we're presenting for lookup in our delegate methods + [animation setValue:@(presenting) forKey:@"presenting"]; + + animation.fillMode = kCAFillModeForwards; + animation.removedOnCompletion = NO; + return animation; +} + +- (void)layoutSubviews { + + self.containerView.frame = self.bounds; + self.backgroundView.frame = self.bounds; + + // if we're pointing up, we'll need to push almost everything down a bit + CGFloat dy = self.currentArrowDirection == SMCalloutArrowDirectionUp ? TOP_ANCHOR_MARGIN : 0; + + self.titleViewOrDefault.frameX = self.innerContentMarginLeft; + self.titleViewOrDefault.frameY = (self.subtitleView || self.subtitle.length ? TITLE_SUB_TOP : TITLE_TOP) + dy; + self.titleViewOrDefault.frameWidth = self.frameWidth - self.innerContentMarginLeft - self.innerContentMarginRight; + + self.subtitleViewOrDefault.frameX = self.titleViewOrDefault.frameX; + self.subtitleViewOrDefault.frameY = SUBTITLE_TOP + dy; + self.subtitleViewOrDefault.frameWidth = self.titleViewOrDefault.frameWidth; + + self.leftAccessoryView.frameX = self.leftAccessoryHorizontalMargin; + self.leftAccessoryView.frameY = self.leftAccessoryVerticalMargin + dy; + + self.rightAccessoryView.frameX = self.frameWidth - self.rightAccessoryHorizontalMargin - self.rightAccessoryView.frameWidth; + self.rightAccessoryView.frameY = self.rightAccessoryVerticalMargin + dy; + + if (self.contentView) { + self.contentView.frameX = self.innerContentMarginLeft; + self.contentView.frameY = self.contentViewInset.top + dy; + } +} + +#pragma mark - Accessibility + +- (NSInteger)accessibilityElementCount { + return (!!self.leftAccessoryView + !!self.titleViewOrDefault + + !!self.subtitleViewOrDefault + !!self.rightAccessoryView); +} + +- (id)accessibilityElementAtIndex:(NSInteger)index { + if (index == 0) { + return self.leftAccessoryView ? self.leftAccessoryView : self.titleViewOrDefault; + } + if (index == 1) { + return self.leftAccessoryView ? self.titleViewOrDefault : self.subtitleViewOrDefault; + } + if (index == 2) { + return self.leftAccessoryView ? self.subtitleViewOrDefault : self.rightAccessoryView; + } + if (index == 3) { + return self.leftAccessoryView ? self.rightAccessoryView : nil; + } + return nil; +} + +- (NSInteger)indexOfAccessibilityElement:(id)element { + if (element == nil) return NSNotFound; + if (element == self.leftAccessoryView) return 0; + if (element == self.titleViewOrDefault) { + return self.leftAccessoryView ? 1 : 0; + } + if (element == self.subtitleViewOrDefault) { + return self.leftAccessoryView ? 2 : 1; + } + if (element == self.rightAccessoryView) { + return self.leftAccessoryView ? 3 : 2; + } + return NSNotFound; +} + +@end + +// import this known "private API" from SMCalloutBackgroundView +@interface SMCalloutBackgroundView (EmbeddedImages) ++ (UIImage *)embeddedImageNamed:(NSString *)name; +@end + +// +// Callout Background View. +// + +@interface SMCalloutMaskedBackgroundView () +@property (nonatomic, strong) UIView *containerView, *containerBorderView, *arrowView; +@property (nonatomic, strong) UIImageView *arrowImageView, *arrowHighlightedImageView, *arrowBorderView; +@end + +static UIImage *blackArrowImage = nil, *whiteArrowImage = nil, *grayArrowImage = nil; + +@implementation SMCalloutMaskedBackgroundView + +- (id)initWithFrame:(CGRect)frame { + if (self = [super initWithFrame:frame]) { + + // Here we're mimicking the very particular (and odd) structure of the system callout view. + // The hierarchy and view/layer values were discovered by inspecting map kit using Reveal.app + + self.containerView = [UIView new]; + self.containerView.backgroundColor = [UIColor whiteColor]; + self.containerView.alpha = 0.96; + self.containerView.layer.cornerRadius = 8; + self.containerView.layer.shadowRadius = 30; + self.containerView.layer.shadowOpacity = 0.1; + + self.containerBorderView = [UIView new]; + self.containerBorderView.layer.borderColor = [UIColor colorWithWhite:0 alpha:0.1].CGColor; + self.containerBorderView.layer.borderWidth = 0.5; + self.containerBorderView.layer.cornerRadius = 8.5; + + if (!blackArrowImage) { + blackArrowImage = [SMCalloutBackgroundView embeddedImageNamed:@"CalloutArrow"]; + whiteArrowImage = [self image:blackArrowImage withColor:[UIColor whiteColor]]; + grayArrowImage = [self image:blackArrowImage withColor:[UIColor colorWithWhite:0.85 alpha:1]]; + } + + self.anchorHeight = 13; + self.anchorMargin = 27; + + self.arrowView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, blackArrowImage.size.width, blackArrowImage.size.height)]; + self.arrowView.alpha = 0.96; + self.arrowImageView = [[UIImageView alloc] initWithImage:whiteArrowImage]; + self.arrowHighlightedImageView = [[UIImageView alloc] initWithImage:grayArrowImage]; + self.arrowHighlightedImageView.hidden = YES; + self.arrowBorderView = [[UIImageView alloc] initWithImage:blackArrowImage]; + self.arrowBorderView.alpha = 0.1; + self.arrowBorderView.frameY = 0.5; + + [self addSubview:self.containerView]; + [self.containerView addSubview:self.containerBorderView]; + [self addSubview:self.arrowView]; + [self.arrowView addSubview:self.arrowBorderView]; + [self.arrowView addSubview:self.arrowImageView]; + [self.arrowView addSubview:self.arrowHighlightedImageView]; + } + return self; +} + +// Make sure we relayout our images when our arrow point changes! +- (void)setArrowPoint:(CGPoint)arrowPoint { + [super setArrowPoint:arrowPoint]; + [self setNeedsLayout]; +} + +- (void)setHighlighted:(BOOL)highlighted { + [super setHighlighted:highlighted]; + self.containerView.backgroundColor = highlighted ? [UIColor colorWithWhite:0.85 alpha:1] : [UIColor whiteColor]; + self.arrowImageView.hidden = highlighted; + self.arrowHighlightedImageView.hidden = !highlighted; +} + +- (UIImage *)image:(UIImage *)image withColor:(UIColor *)color { + + UIGraphicsBeginImageContextWithOptions(image.size, NO, 0); + CGRect imageRect = (CGRect){.size=image.size}; + CGContextRef c = UIGraphicsGetCurrentContext(); + CGContextTranslateCTM(c, 0, image.size.height); + CGContextScaleCTM(c, 1, -1); + CGContextClipToMask(c, imageRect, image.CGImage); + [color setFill]; + CGContextFillRect(c, imageRect); + UIImage *whiteImage = UIGraphicsGetImageFromCurrentImageContext(); + UIGraphicsEndImageContext(); + return whiteImage; +} + +- (void)layoutSubviews { + + BOOL pointingUp = self.arrowPoint.y < self.frameHeight/2; + + // if we're pointing up, we'll need to push almost everything down a bit + CGFloat dy = pointingUp ? TOP_ANCHOR_MARGIN : 0; + + self.containerView.frame = CGRectMake(0, dy, self.frameWidth, self.frameHeight - self.arrowView.frameHeight + 0.5); + self.containerBorderView.frame = CGRectInset(self.containerView.bounds, -0.5, -0.5); + + self.arrowView.frameX = roundf(self.arrowPoint.x - self.arrowView.frameWidth / 2); + + if (pointingUp) { + self.arrowView.frameY = 1; + self.arrowView.transform = CGAffineTransformMakeRotation(M_PI); + } + else { + self.arrowView.frameY = self.containerView.frameHeight - 0.5; + self.arrowView.transform = CGAffineTransformIdentity; + } +} + +- (CALayer *)contentMask { + + UIGraphicsBeginImageContextWithOptions(self.bounds.size, NO, 0); + + [self.layer renderInContext:UIGraphicsGetCurrentContext()]; + + UIImage *maskImage = UIGraphicsGetImageFromCurrentImageContext(); + UIGraphicsEndImageContext(); + + CALayer *layer = [CALayer layer]; + layer.frame = self.bounds; + layer.contents = (id)maskImage.CGImage; + return layer; +} + +@end + +@implementation SMCalloutBackgroundView + ++ (NSData *)dataWithBase64EncodedString:(NSString *)string { + // + // NSData+Base64.m + // + // Version 1.0.2 + // + // Created by Nick Lockwood on 12/01/2012. + // Copyright (C) 2012 Charcoal Design + // + // Distributed under the permissive zlib License + // Get the latest version from here: + // + // https://github.com/nicklockwood/Base64 + // + // This software is provided 'as-is', without any express or implied + // warranty. In no event will the authors be held liable for any damages + // arising from the use of this software. + // + // Permission is granted to anyone to use this software for any purpose, + // including commercial applications, and to alter it and redistribute it + // freely, subject to the following restrictions: + // + // 1. The origin of this software must not be misrepresented; you must not + // claim that you wrote the original software. If you use this software + // in a product, an acknowledgment in the product documentation would be + // appreciated but is not required. + // + // 2. Altered source versions must be plainly marked as such, and must not be + // misrepresented as being the original software. + // + // 3. This notice may not be removed or altered from any source distribution. + // + const char lookup[] = { + 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, + 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, + 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 62, 99, 99, 99, 63, + 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 99, 99, 99, 99, 99, 99, + 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, + 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 99, 99, 99, 99, 99, + 99, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, + 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 99, 99, 99, 99, 99 + }; + + NSData *inputData = [string dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES]; + long long inputLength = [inputData length]; + const unsigned char *inputBytes = [inputData bytes]; + + long long maxOutputLength = (inputLength / 4 + 1) * 3; + NSMutableData *outputData = [NSMutableData dataWithLength:(NSUInteger)maxOutputLength]; + unsigned char *outputBytes = (unsigned char *)[outputData mutableBytes]; + + int accumulator = 0; + long long outputLength = 0; + unsigned char accumulated[] = {0, 0, 0, 0}; + for (long long i = 0; i < inputLength; i++) { + unsigned char decoded = lookup[inputBytes[i] & 0x7F]; + if (decoded != 99) { + accumulated[accumulator] = decoded; + if (accumulator == 3) { + outputBytes[outputLength++] = (accumulated[0] << 2) | (accumulated[1] >> 4); + outputBytes[outputLength++] = (accumulated[1] << 4) | (accumulated[2] >> 2); + outputBytes[outputLength++] = (accumulated[2] << 6) | accumulated[3]; + } + accumulator = (accumulator + 1) % 4; + } + } + + //handle left-over data + if (accumulator > 0) outputBytes[outputLength] = (accumulated[0] << 2) | (accumulated[1] >> 4); + if (accumulator > 1) outputBytes[++outputLength] = (accumulated[1] << 4) | (accumulated[2] >> 2); + if (accumulator > 2) outputLength++; + + //truncate data to match actual output length + outputData.length = (NSUInteger)outputLength; + return outputLength? outputData: nil; +} + ++ (UIImage *)embeddedImageNamed:(NSString *)name { + CGFloat screenScale = [UIScreen mainScreen].scale; + if (screenScale > 1.0) { + name = [name stringByAppendingString:@"_2x"]; + screenScale = 2.0; + } + + SEL selector = NSSelectorFromString(name); + + if (![(id)self respondsToSelector:selector]) { + NSLog(@"Could not find an embedded image. Ensure that you've added a class-level method named +%@", name); + return nil; + } + + // We need to hush the compiler here - but we know what we're doing! + #pragma clang diagnostic push + #pragma clang diagnostic ignored "-Warc-performSelector-leaks" + NSString *base64String = [(id)self performSelector:selector]; + #pragma clang diagnostic pop + + UIImage *rawImage = [UIImage imageWithData:[self dataWithBase64EncodedString:base64String]]; + return [UIImage imageWithCGImage:rawImage.CGImage scale:screenScale orientation:UIImageOrientationUp]; +} + ++ (NSString *)CalloutArrow { return @"iVBORw0KGgoAAAANSUhEUgAAACcAAAANCAYAAAAqlHdlAAAAHGlET1QAAAACAAAAAAAAAAcAAAAoAAAABwAAAAYAAADJEgYpIwAAAJVJREFUOBFiYIAAdn5+fkFOTkE5Dg5eW05O3lJOTr6zQPyfDhhoD28pxF5BOZA7gE5ih7oLN8XJyR8MdNwrGjkQaC5/MG7biZDh4OBXBDruLpUdeBdkLhHWE1bCzs6nAnTcUyo58DnIPMK2kqAC6DALIP5JoQNB+i1IsJZ4pcBEm0iJ40D6ibeNDJVAx00k04ETSbUOAAAA//+SwicfAAAAe0lEQVRjYCAdMHNy8u7l5OT7Tzzm3Qu0hpl0q8jQwcPDIwp02B0iHXeHl5dXhAxryNfCzc2tC3TcJwIO/ARSR74tFOjk4uL1BzruHw4H/gPJU2A85Vq5uPjTgY77g+bAPyBxyk2nggkcHPxOnJz8B4AOfAGiQXwqGMsAACGK1kPPMHNBAAAAAElFTkSuQmCC"; } + ++ (NSString *)CalloutArrow_2x { return @"iVBORw0KGgoAAAANSUhEUgAAAE4AAAAaCAYAAAAZtWr8AAAACXBIWXMAABYlAAAWJQFJUiTwAAAAHGlET1QAAAACAAAAAAAAAA0AAAAoAAAADQAAAA0AAAFMRh0LGwAAARhJREFUWAnclbENwjAQRZ0mih2fDYgsQEVDxQZMgKjpWYAJkBANI8AGDIEoM0WkzBDRAf8klB44g0OkU1zE3/+9RIpS7VVY730/y/woTWlsjJ9iPcN9pbXfY85auyvm/qcDNmb0e2Z+sk/ZBTthN0oVttX12mJIWeaWEFf+kbySmZQa0msu3nzaGJprTXV3BVLNDG/if7bNOTeAvFP35NGJu39GL7Abb27bFXncVQBZLgJf3jp+ebSWIxZMgrxdvPJoJ4gqHpXgV36ITR46HUGaiNMKB6YQd4lI3gV8qTBjmDhrbQFxVQTyKu4ShjJQap7nE4hrfiiv4Q6B8MLGat1bQNztB/JwZm8Rli5wujFu821xfGZgLPUAAAD//4wvm4gAAAD7SURBVOWXMQ6CMBiFgaFpi6VyBEedXJy4hMQTeBSvRDgJEySegI3EQWOivkZnqUB/k0LyL7R9L++D9G+DwP0TCZGUqCdRlYgUuY9F4JCmqQa0hgBcY7wIItFZMLZYS5l0ruAZbXhs6BIROgmhcoB7OIAHTZUTRqG3wp9xmhqc0aRPQu8YAlwxIbwCEUL6GH9wfDcLXY2HpyvvmkHf9+BcrwCuHQGvNRp9Pl6OY0PPAO42AB7WqMxLKLahpFR7gLv/AA9zPe+gtvAMCIC7WMC7CqEPtrqzmBfHyy3A1V/g1Th27GYBY0BIxrk6Ap65254/VZp30GID9JwteQEZrVMWXqGn8gAAAABJRU5ErkJggg=="; } + +@end + +// +// Our UIView frame helpers implementation +// + +@implementation UIView (SMFrameAdditions) + +- (CGPoint)frameOrigin { return self.frame.origin; } +- (void)setFrameOrigin:(CGPoint)origin { self.frame = (CGRect){ .origin=origin, .size=self.frame.size }; } + +- (CGFloat)frameX { return self.frame.origin.x; } +- (void)setFrameX:(CGFloat)x { self.frame = (CGRect){ .origin.x=x, .origin.y=self.frame.origin.y, .size=self.frame.size }; } + +- (CGFloat)frameY { return self.frame.origin.y; } +- (void)setFrameY:(CGFloat)y { self.frame = (CGRect){ .origin.x=self.frame.origin.x, .origin.y=y, .size=self.frame.size }; } + +- (CGSize)frameSize { return self.frame.size; } +- (void)setFrameSize:(CGSize)size { self.frame = (CGRect){ .origin=self.frame.origin, .size=size }; } + +- (CGFloat)frameWidth { return self.frame.size.width; } +- (void)setFrameWidth:(CGFloat)width { self.frame = (CGRect){ .origin=self.frame.origin, .size.width=width, .size.height=self.frame.size.height }; } + +- (CGFloat)frameHeight { return self.frame.size.height; } +- (void)setFrameHeight:(CGFloat)height { self.frame = (CGRect){ .origin=self.frame.origin, .size.width=self.frame.size.width, .size.height=height }; } + +- (CGFloat)frameLeft { return self.frame.origin.x; } +- (void)setFrameLeft:(CGFloat)left { self.frame = (CGRect){ .origin.x=left, .origin.y=self.frame.origin.y, .size.width=fmaxf(self.frame.origin.x+self.frame.size.width-left,0), .size.height=self.frame.size.height }; } + +- (CGFloat)frameTop { return self.frame.origin.y; } +- (void)setFrameTop:(CGFloat)top { self.frame = (CGRect){ .origin.x=self.frame.origin.x, .origin.y=top, .size.width=self.frame.size.width, .size.height=fmaxf(self.frame.origin.y+self.frame.size.height-top,0) }; } + +- (CGFloat)frameRight { return self.frame.origin.x + self.frame.size.width; } +- (void)setFrameRight:(CGFloat)right { self.frame = (CGRect){ .origin=self.frame.origin, .size.width=fmaxf(right-self.frame.origin.x,0), .size.height=self.frame.size.height }; } + +- (CGFloat)frameBottom { return self.frame.origin.y + self.frame.size.height; } +- (void)setFrameBottom:(CGFloat)bottom { self.frame = (CGRect){ .origin=self.frame.origin, .size.width=self.frame.size.width, .size.height=fmaxf(bottom-self.frame.origin.y,0) }; } + +@end diff --git a/Pods/SMCalloutView/SMClassicCalloutView.h b/Pods/SMCalloutView/SMClassicCalloutView.h new file mode 100644 index 0000000..724c987 --- /dev/null +++ b/Pods/SMCalloutView/SMClassicCalloutView.h @@ -0,0 +1,39 @@ +#import +#import "SMCalloutView.h" + +/* + + SMClassicCalloutView + -------------------- + Created by Nick Farina (nfarina@gmail.com) + Version 1.1 + + */ + +@protocol SMCalloutViewDelegate; +@class SMCalloutBackgroundView; + +// +// Classic Callout view. +// + +@interface SMClassicCalloutView : SMCalloutView + +// One thing to note about the classic callout is that it will ignore the "constrainedInsets" property. That property is designed for iOS-7 +// style presentation where your target view surface may be operlapped by navigation bars, tab bars, etc. + +@end + +// +// Classes responsible for drawing the background graphic with the pointy arrow. +// + +// Draws a background composed of stretched prerendered images that you can customize. Uses the embedded iOS 6 graphics by default. +@interface SMCalloutImageBackgroundView : SMCalloutBackgroundView +@property (nonatomic, strong) UIImage *leftCapImage, *rightCapImage, *topAnchorImage, *bottomAnchorImage, *backgroundImage; +@end + +// Draws a custom background matching the system background but can grow in height. +@interface SMCalloutDrawnBackgroundView : SMCalloutBackgroundView +@end + diff --git a/Pods/SMCalloutView/SMClassicCalloutView.m b/Pods/SMCalloutView/SMClassicCalloutView.m new file mode 100644 index 0000000..4c98303 --- /dev/null +++ b/Pods/SMCalloutView/SMClassicCalloutView.m @@ -0,0 +1,871 @@ +#import "SMClassicCalloutView.h" +#import + +// +// UIView frame helpers - we do a lot of UIView frame fiddling in this class; these functions help keep things readable. +// + +@interface UIView (SMFrameAdditions) +@property (nonatomic, assign) CGPoint frameOrigin; +@property (nonatomic, assign) CGSize frameSize; +@property (nonatomic, assign) CGFloat frameX, frameY, frameWidth, frameHeight; // normal rect properties +@property (nonatomic, assign) CGFloat frameLeft, frameTop, frameRight, frameBottom; // these will stretch/shrink the rect +@end + +// +// Callout View. +// + +#define CALLOUT_DEFAULT_MIN_WIDTH 75 // our image-based background graphics limit us to this minimum width... +#define CALLOUT_DEFAULT_HEIGHT 70 // ...and allow only for this exact height. +#define CALLOUT_DEFAULT_WIDTH 153 // default "I give up" width when we are asked to present in a space less than our min width +#define TITLE_MARGIN 17 // the title view's normal horizontal margin from the edges of our callout view +#define TITLE_TOP 11 // the top of the title view when no subtitle is present +#define TITLE_SUB_TOP 3 // the top of the title view when a subtitle IS present +#define TITLE_HEIGHT 22 // title height, fixed +#define SUBTITLE_TOP 25 // the top of the subtitle, when present +#define SUBTITLE_HEIGHT 16 // subtitle height, fixed +#define TITLE_ACCESSORY_MARGIN 6 // the margin between the title and an accessory if one is present (on either side) +#define ACCESSORY_MARGIN 14 // the accessory's margin from the edges of our callout view +#define ACCESSORY_TOP 8 // the top of the accessory "area" in which accessory views are placed +#define ACCESSORY_HEIGHT 32 // the "suggested" maximum height of an accessory view. shorter accessories will be vertically centered +#define BETWEEN_ACCESSORIES_MARGIN 7 // if we have no title or subtitle, but have two accessory views, then this is the space between them +#define ANCHOR_MARGIN 39 // the smallest possible distance from the edge of our control to the "tip" of the anchor, from either left or right +#define TOP_ANCHOR_MARGIN 13 // all the above measurements assume a bottom anchor! if we're pointing "up" we'll need to add this top margin to everything. +#define BOTTOM_ANCHOR_MARGIN 10 // if using a bottom anchor, we'll need to account for the shadow below the "tip" +#define REPOSITION_MARGIN 10 // when we try to reposition content to be visible, we'll consider this margin around your target rect + +#define TOP_SHADOW_BUFFER 2 // height offset buffer to account for top shadow +#define BOTTOM_SHADOW_BUFFER 5 // height offset buffer to account for bottom shadow +#define OFFSET_FROM_ORIGIN 5 // distance to offset vertically from the rect origin of the callout +#define ANCHOR_HEIGHT 14 // height to use for the anchor +#define ANCHOR_MARGIN_MIN 24 // the smallest possible distance from the edge of our control to the edge of the anchor, from either left or right + +@interface SMCalloutView (PrivateMethods) +@property (nonatomic, strong) UILabel *titleLabel, *subtitleLabel; +@property (nonatomic, assign) SMCalloutArrowDirection currentArrowDirection; +@property (nonatomic, assign) BOOL popupCancelled; +//@property (nonatomic, strong) UIImageView *leftCap, *rightCap, *topAnchor, *bottomAnchor, *leftBackground, *rightBackground; +@end + +@interface SMClassicCalloutView () + +@end + +@implementation SMClassicCalloutView + +- (UIView *)titleViewOrDefault { + if (self.titleView) + // if you have a custom title view defined, return that. + return self.titleView; + else { + if (!self.titleLabel) { + // create a default titleView + self.titleLabel = [UILabel new]; + self.titleLabel.frameHeight = TITLE_HEIGHT; + self.titleLabel.opaque = NO; + self.titleLabel.backgroundColor = [UIColor clearColor]; + self.titleLabel.font = [UIFont boldSystemFontOfSize:17]; + self.titleLabel.textColor = [UIColor whiteColor]; + self.titleLabel.shadowColor = [UIColor colorWithWhite:0 alpha:0.5]; + self.titleLabel.shadowOffset = CGSizeMake(0, -1); + } + return self.titleLabel; + } +} + +- (UIView *)subtitleViewOrDefault { + if (self.subtitleView) + // if you have a custom subtitle view defined, return that. + return self.subtitleView; + else { + if (!self.subtitleLabel) { + // create a default subtitleView + self.subtitleLabel = [UILabel new]; + self.subtitleLabel.frameHeight = SUBTITLE_HEIGHT; + self.subtitleLabel.opaque = NO; + self.subtitleLabel.backgroundColor = [UIColor clearColor]; + self.subtitleLabel.font = [UIFont systemFontOfSize:12]; + self.subtitleLabel.textColor = [UIColor whiteColor]; + self.subtitleLabel.shadowColor = [UIColor colorWithWhite:0 alpha:0.5]; + self.subtitleLabel.shadowOffset = CGSizeMake(0, -1); + } + return self.subtitleLabel; + } +} + +- (SMCalloutBackgroundView *)defaultBackgroundView { + return [SMCalloutDrawnBackgroundView new]; +} + +- (void)rebuildSubviews { + // remove and re-add our appropriate subviews in the appropriate order + [self.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)]; + [self setNeedsDisplay]; + + [self addSubview:self.backgroundView]; + + if (self.contentView) { + [self addSubview:self.contentView]; + } + else { + if (self.titleViewOrDefault) [self addSubview:self.titleViewOrDefault]; + if (self.subtitleViewOrDefault) [self addSubview:self.subtitleViewOrDefault]; + } + if (self.leftAccessoryView) [self addSubview:self.leftAccessoryView]; + if (self.rightAccessoryView) [self addSubview:self.rightAccessoryView]; +} + +- (CGFloat)innerContentMarginLeft { + if (self.leftAccessoryView) + return ACCESSORY_MARGIN + self.leftAccessoryView.frameWidth + TITLE_ACCESSORY_MARGIN; + else + return TITLE_MARGIN; +} + +- (CGFloat)innerContentMarginRight { + if (self.rightAccessoryView) + return ACCESSORY_MARGIN + self.rightAccessoryView.frameWidth + TITLE_ACCESSORY_MARGIN; + else + return TITLE_MARGIN; +} + +- (CGFloat)calloutHeight { + if (self.contentView) + return self.contentView.frameHeight + TITLE_TOP*2 + ANCHOR_HEIGHT + BOTTOM_ANCHOR_MARGIN; + else + return CALLOUT_DEFAULT_HEIGHT; +} + +- (CGSize)sizeThatFits:(CGSize)size { + + // odd behavior, but mimicking the system callout view + if (size.width < CALLOUT_DEFAULT_MIN_WIDTH) + return CGSizeMake(CALLOUT_DEFAULT_WIDTH, self.calloutHeight); + + // calculate how much non-negotiable space we need to reserve for margin and accessories + CGFloat margin = self.innerContentMarginLeft + self.innerContentMarginRight; + + // how much room is left for text? + CGFloat availableWidthForText = size.width - margin; + + // no room for text? then we'll have to squeeze into the given size somehow. + if (availableWidthForText < 0) + availableWidthForText = 0; + + CGSize preferredTitleSize = [self.titleViewOrDefault sizeThatFits:CGSizeMake(availableWidthForText, TITLE_HEIGHT)]; + CGSize preferredSubtitleSize = [self.subtitleViewOrDefault sizeThatFits:CGSizeMake(availableWidthForText, SUBTITLE_HEIGHT)]; + + // total width we'd like + CGFloat preferredWidth; + + if (self.contentView) { + + // if we have a content view, then take our preferred size directly from that + preferredWidth = self.contentView.frameWidth + margin; + } + else if (preferredTitleSize.width >= 0.000001 || preferredSubtitleSize.width >= 0.000001) { + + // if we have a title or subtitle, then our assumed margins are valid, and we can apply them + preferredWidth = fmaxf(preferredTitleSize.width, preferredSubtitleSize.width) + margin; + } + else { + // ok we have no title or subtitle to speak of. In this case, the system callout would actually not display + // at all! But we can handle it. + preferredWidth = self.leftAccessoryView.frameWidth + self.rightAccessoryView.frameWidth + ACCESSORY_MARGIN*2; + + if (self.leftAccessoryView && self.rightAccessoryView) + preferredWidth += BETWEEN_ACCESSORIES_MARGIN; + } + + // ensure we're big enough to fit our graphics! + preferredWidth = fmaxf(preferredWidth, CALLOUT_DEFAULT_MIN_WIDTH); + + // ask to be smaller if we have space, otherwise we'll fit into what we have by truncating the title/subtitle. + return CGSizeMake(fminf(preferredWidth, size.width), self.calloutHeight); +} + +- (CGSize)offsetToContainRect:(CGRect)innerRect inRect:(CGRect)outerRect { + CGFloat nudgeRight = fmaxf(0, CGRectGetMinX(outerRect) - CGRectGetMinX(innerRect)); + CGFloat nudgeLeft = fminf(0, CGRectGetMaxX(outerRect) - CGRectGetMaxX(innerRect)); + CGFloat nudgeTop = fmaxf(0, CGRectGetMinY(outerRect) - CGRectGetMinY(innerRect)); + CGFloat nudgeBottom = fminf(0, CGRectGetMaxY(outerRect) - CGRectGetMaxY(innerRect)); + return CGSizeMake(nudgeLeft ? nudgeLeft : nudgeRight, nudgeTop ? nudgeTop : nudgeBottom); +} + +- (void)presentCalloutFromRect:(CGRect)rect inView:(UIView *)view constrainedToView:(UIView *)constrainedView animated:(BOOL)animated { + [self presentCalloutFromRect:rect inLayer:view.layer ofView:view constrainedToLayer:constrainedView.layer animated:animated]; +} + +- (void)presentCalloutFromRect:(CGRect)rect inLayer:(CALayer *)layer constrainedToLayer:(CALayer *)constrainedLayer animated:(BOOL)animated { + [self presentCalloutFromRect:rect inLayer:layer ofView:nil constrainedToLayer:constrainedLayer animated:animated]; +} + +// this private method handles both CALayer and UIView parents depending on what's passed. +- (void)presentCalloutFromRect:(CGRect)rect inLayer:(CALayer *)layer ofView:(UIView *)view constrainedToLayer:(CALayer *)constrainedLayer animated:(BOOL)animated { + + // Sanity check: dismiss this callout immediately if it's displayed somewhere + if (self.layer.superlayer) [self dismissCalloutAnimated:NO]; + + // figure out the constrained view's rect in our popup view's coordinate system + CGRect constrainedRect = [constrainedLayer convertRect:constrainedLayer.bounds toLayer:layer]; + + // apply our edge constraints + constrainedRect = UIEdgeInsetsInsetRect(constrainedRect, self.constrainedInsets); + + // form our subviews based on our content set so far + [self rebuildSubviews]; + + // apply title/subtitle (if present + self.titleLabel.text = self.title; + self.subtitleLabel.text = self.subtitle; + + // size the callout to fit the width constraint as best as possible + self.frameSize = [self sizeThatFits:CGSizeMake(constrainedRect.size.width, self.calloutHeight)]; + + // how much room do we have in the constraint box, both above and below our target rect? + CGFloat topSpace = CGRectGetMinY(rect) - CGRectGetMinY(constrainedRect); + CGFloat bottomSpace = CGRectGetMaxY(constrainedRect) - CGRectGetMaxY(rect); + + // we prefer to point our arrow down. + SMCalloutArrowDirection bestDirection = SMCalloutArrowDirectionDown; + + // we'll point it up though if that's the only option you gave us. + if (self.permittedArrowDirection == SMCalloutArrowDirectionUp) + bestDirection = SMCalloutArrowDirectionUp; + + // or, if we don't have enough space on the top and have more space on the bottom, and you + // gave us a choice, then pointing up is the better option. + if (self.permittedArrowDirection == SMCalloutArrowDirectionAny && topSpace < self.calloutHeight && bottomSpace > topSpace) + bestDirection = SMCalloutArrowDirectionUp; + + // we want to point directly at the horizontal center of the given rect. calculate our "anchor point" in terms of our + // target view's coordinate system. make sure to offset the anchor point as requested if necessary. + CGFloat anchorX = self.calloutOffset.x + CGRectGetMidX(rect); + CGFloat anchorY = self.calloutOffset.y + (bestDirection == SMCalloutArrowDirectionDown ? CGRectGetMinY(rect) : CGRectGetMaxY(rect)); + + // we prefer to sit in the exact center of our constrained view, so we have visually pleasing equal left/right margins. + CGFloat calloutX = roundf(CGRectGetMidX(constrainedRect) - self.frameWidth / 2); + + // what's the farthest to the left and right that we could point to, given our background image constraints? + CGFloat minPointX = calloutX + ANCHOR_MARGIN; + CGFloat maxPointX = calloutX + self.frameWidth - ANCHOR_MARGIN; + + // we may need to scoot over to the left or right to point at the correct spot + CGFloat adjustX = 0; + if (anchorX < minPointX) adjustX = anchorX - minPointX; + if (anchorX > maxPointX) adjustX = anchorX - maxPointX; + + // add the callout to the given layer (or view if possible, to receive touch events) + if (view) + [view addSubview:self]; + else + [layer addSublayer:self.layer]; + + CGPoint calloutOrigin = { + .x = calloutX + adjustX, + .y = bestDirection == SMCalloutArrowDirectionDown ? (anchorY - self.calloutHeight + BOTTOM_ANCHOR_MARGIN) : anchorY + }; + + self.currentArrowDirection = bestDirection; + + self.frameOrigin = calloutOrigin; + + // now set the *actual* anchor point for our layer so that our "popup" animation starts from this point. + CGPoint anchorPoint = [layer convertPoint:CGPointMake(anchorX, anchorY) toLayer:self.layer]; + + // pass on the anchor point to our background view so it knows where to draw the arrow + self.backgroundView.arrowPoint = anchorPoint; + + // adjust it to unit coordinates for the actual layer.anchorPoint property + anchorPoint.x /= self.frameWidth; + anchorPoint.y /= self.frameHeight; + self.layer.anchorPoint = anchorPoint; + + // setting the anchor point moves the view a bit, so we need to reset + self.frameOrigin = calloutOrigin; + + // make sure our frame is not on half-pixels or else we may be blurry! + self.frame = CGRectIntegral(self.frame); + + // layout now so we can immediately start animating to the final position if needed + [self setNeedsLayout]; + [self layoutIfNeeded]; + + // if we're outside the bounds of our constraint rect, we'll give our delegate an opportunity to shift us into position. + // consider both our size and the size of our target rect (which we'll assume to be the size of the content you want to scroll into view. + CGRect contentRect = CGRectUnion(self.frame, CGRectInset(rect, -REPOSITION_MARGIN, -REPOSITION_MARGIN)); + CGSize offset = [self offsetToContainRect:contentRect inRect:constrainedRect]; + + NSTimeInterval delay = 0; + self.popupCancelled = NO; // reset this before calling our delegate below + + if ([self.delegate respondsToSelector:@selector(calloutView:delayForRepositionWithSize:)] && !CGSizeEqualToSize(offset, CGSizeZero)) + delay = [self.delegate calloutView:(id)self delayForRepositionWithSize:offset]; + + // there's a chance that user code in the delegate method may have called -dismissCalloutAnimated to cancel things; if that + // happened then we need to bail! + if (self.popupCancelled) return; + + // if we need to delay, we don't want to be visible while we're delaying, so hide us in preparation for our popup + self.hidden = YES; + + // create the appropriate animation, even if we're not animated + CAAnimation *animation = [self animationWithType:self.presentAnimation presenting:YES]; + + // nuke the duration if no animation requested - we'll still need to "run" the animation to get delays and callbacks + if (!animated) + animation.duration = 0.0000001; // can't be zero or the animation won't "run" + + animation.beginTime = CACurrentMediaTime() + delay; + animation.delegate = self; + + [self.layer addAnimation:animation forKey:@"present"]; +} + +- (void)animationDidStart:(CAAnimation *)anim { + BOOL presenting = [[anim valueForKey:@"presenting"] boolValue]; + + if (presenting) { + if ([self.delegate respondsToSelector:@selector(calloutViewWillAppear:)]) + [self.delegate calloutViewWillAppear:(id)self]; + + // ok, animation is on, let's make ourselves visible! + self.hidden = NO; + } + else if (!presenting) { + if ([self.delegate respondsToSelector:@selector(calloutViewWillDisappear:)]) + [self.delegate calloutViewWillDisappear:(id)self]; + } +} + +- (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)finished { + BOOL presenting = [[anim valueForKey:@"presenting"] boolValue]; + + if (presenting) { + if ([self.delegate respondsToSelector:@selector(calloutViewDidAppear:)]) + [self.delegate calloutViewDidAppear:(id)self]; + } + else if (!presenting) { + + [self removeFromParent]; + [self.layer removeAnimationForKey:@"dismiss"]; + + if ([self.delegate respondsToSelector:@selector(calloutViewDidDisappear:)]) + [self.delegate calloutViewDidDisappear:(id)self]; + } +} + +- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event { + // we want to match the system callout view, which doesn't "capture" touches outside the accessory areas. This way you can click on other pins and things *behind* a translucent callout. + return + [self.leftAccessoryView pointInside:[self.leftAccessoryView convertPoint:point fromView:self] withEvent:nil] || + [self.rightAccessoryView pointInside:[self.rightAccessoryView convertPoint:point fromView:self] withEvent:nil] || + [self.contentView pointInside:[self.contentView convertPoint:point fromView:self] withEvent:nil] || + (!self.contentView && [self.titleView pointInside:[self.titleView convertPoint:point fromView:self] withEvent:nil]) || + (!self.contentView && [self.subtitleView pointInside:[self.subtitleView convertPoint:point fromView:self] withEvent:nil]); +} + +- (void)dismissCalloutAnimated:(BOOL)animated { + [self.layer removeAnimationForKey:@"present"]; + + self.popupCancelled = YES; + + if (animated) { + CAAnimation *animation = [self animationWithType:self.dismissAnimation presenting:NO]; + animation.delegate = self; + [self.layer addAnimation:animation forKey:@"dismiss"]; + } + else [self removeFromParent]; +} + +- (void)removeFromParent { + if (self.superview) + [self removeFromSuperview]; + else { + // removing a layer from a superlayer causes an implicit fade-out animation that we wish to disable. + [CATransaction begin]; + [CATransaction setDisableActions:YES]; + [self.layer removeFromSuperlayer]; + [CATransaction commit]; + } +} + +- (CAAnimation *)animationWithType:(SMCalloutAnimation)type presenting:(BOOL)presenting { + CAAnimation *animation = nil; + + if (type == SMCalloutAnimationBounce) { + CAKeyframeAnimation *bounceAnimation = [CAKeyframeAnimation animationWithKeyPath:@"transform.scale"]; + CAMediaTimingFunction *easeInOut = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]; + + bounceAnimation.values = @[@0.05, @1.11245, @0.951807, @1.0]; + bounceAnimation.keyTimes = @[@0, @(4.0/9.0), @(4.0/9.0+5.0/18.0), @1.0]; + bounceAnimation.duration = 1.0/3.0; // the official bounce animation duration adds up to 0.3 seconds; but there is a bit of delay introduced by Apple using a sequence of callback-based CABasicAnimations rather than a single CAKeyframeAnimation. So we bump it up to 0.33333 to make it feel identical on the device + bounceAnimation.timingFunctions = @[easeInOut, easeInOut, easeInOut, easeInOut]; + + if (!presenting) + bounceAnimation.values = [[bounceAnimation.values reverseObjectEnumerator] allObjects]; // reverse values + + animation = bounceAnimation; + } + else if (type == SMCalloutAnimationFade) { + CABasicAnimation *fadeAnimation = [CABasicAnimation animationWithKeyPath:@"opacity"]; + fadeAnimation.duration = 1.0/3.0; + fadeAnimation.fromValue = presenting ? @0.0 : @1.0; + fadeAnimation.toValue = presenting ? @1.0 : @0.0; + animation = fadeAnimation; + } + else if (type == SMCalloutAnimationStretch) { + CABasicAnimation *stretchAnimation = [CABasicAnimation animationWithKeyPath:@"transform.scale"]; + stretchAnimation.duration = 0.1; + stretchAnimation.fromValue = presenting ? @0.0 : @1.0; + stretchAnimation.toValue = presenting ? @1.0 : @0.0; + animation = stretchAnimation; + } + + // CAAnimation is KVC compliant, so we can store whether we're presenting for lookup in our delegate methods + [animation setValue:@(presenting) forKey:@"presenting"]; + + animation.fillMode = kCAFillModeForwards; + animation.removedOnCompletion = NO; + return animation; +} + +- (CGFloat)centeredPositionOfView:(UIView *)view ifSmallerThan:(CGFloat)height { + return view.frameHeight < height ? floorf(height/2 - view.frameHeight/2) : 0; +} + +- (CGFloat)centeredPositionOfView:(UIView *)view relativeToView:(UIView *)parentView { + return roundf((parentView.frameHeight - view.frameHeight) / 2); +} + +- (void)layoutSubviews { + + self.backgroundView.frame = self.bounds; + + // if we're pointing up, we'll need to push almost everything down a bit + CGFloat dy = self.currentArrowDirection == SMCalloutArrowDirectionUp ? TOP_ANCHOR_MARGIN : 0; + + self.titleViewOrDefault.frameX = self.innerContentMarginLeft; + self.titleViewOrDefault.frameY = (self.subtitleView || self.subtitle.length ? TITLE_SUB_TOP : TITLE_TOP) + dy; + self.titleViewOrDefault.frameWidth = self.frameWidth - self.innerContentMarginLeft - self.innerContentMarginRight; + + self.subtitleViewOrDefault.frameX = self.titleViewOrDefault.frameX; + self.subtitleViewOrDefault.frameY = SUBTITLE_TOP + dy; + self.subtitleViewOrDefault.frameWidth = self.titleViewOrDefault.frameWidth; + + self.leftAccessoryView.frameX = ACCESSORY_MARGIN; + if (self.contentView) + self.leftAccessoryView.frameY = TITLE_TOP + [self centeredPositionOfView:self.leftAccessoryView relativeToView:self.contentView] + dy; + else + self.leftAccessoryView.frameY = ACCESSORY_TOP + [self centeredPositionOfView:self.leftAccessoryView ifSmallerThan:ACCESSORY_HEIGHT] + dy; + + self.rightAccessoryView.frameX = self.frameWidth-ACCESSORY_MARGIN-self.rightAccessoryView.frameWidth; + if (self.contentView) + self.rightAccessoryView.frameY = TITLE_TOP + [self centeredPositionOfView:self.rightAccessoryView relativeToView:self.contentView] + dy; + else + self.rightAccessoryView.frameY = ACCESSORY_TOP + [self centeredPositionOfView:self.rightAccessoryView ifSmallerThan:ACCESSORY_HEIGHT] + dy; + + + if (self.contentView) { + self.contentView.frameX = self.innerContentMarginLeft; + self.contentView.frameY = TITLE_TOP + dy; + } +} + +@end + +// import this known "private API" from SMCalloutView.m +@interface SMCalloutBackgroundView (EmbeddedImages) ++ (UIImage *)embeddedImageNamed:(NSString *)name; +@end + +// +// Callout background assembled from predrawn stretched images. +// +@implementation SMCalloutImageBackgroundView { + UIImageView *leftCap, *rightCap, *topAnchor, *bottomAnchor, *leftBackground, *rightBackground; +} + +- (id)initWithFrame:(CGRect)frame { + if (self = [super initWithFrame:frame]) { + leftCap = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 17, 57)]; + rightCap = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 17, 57)]; + topAnchor = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 41, 70)]; + bottomAnchor = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 41, 70)]; + leftBackground = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 1, 57)]; + rightBackground = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 1, 57)]; + [self addSubview:leftCap]; + [self addSubview:rightCap]; + [self addSubview:topAnchor]; + [self addSubview:bottomAnchor]; + [self addSubview:leftBackground]; + [self addSubview:rightBackground]; + } + return self; +} + +- (UIImage *)leftCapImage { return _leftCapImage ? _leftCapImage : [[SMCalloutBackgroundView embeddedImageNamed:@"SMCalloutViewLeftCap"] stretchableImageWithLeftCapWidth:16 topCapHeight:20]; } +- (UIImage *)rightCapImage { return _rightCapImage ? _rightCapImage : [[SMCalloutBackgroundView embeddedImageNamed:@"SMCalloutViewRightCap"] stretchableImageWithLeftCapWidth:0 topCapHeight:20]; } +- (UIImage *)topAnchorImage { return _topAnchorImage ? _topAnchorImage : [[SMCalloutBackgroundView embeddedImageNamed:@"SMCalloutViewTopAnchor"] stretchableImageWithLeftCapWidth:0 topCapHeight:33]; } +- (UIImage *)bottomAnchorImage { return _bottomAnchorImage ? _bottomAnchorImage : [[SMCalloutBackgroundView embeddedImageNamed:@"SMCalloutViewBottomAnchor"] stretchableImageWithLeftCapWidth:0 topCapHeight:20]; } +- (UIImage *)backgroundImage { return _backgroundImage ? _backgroundImage : [[SMCalloutBackgroundView embeddedImageNamed:@"SMCalloutViewBackground"] stretchableImageWithLeftCapWidth:0 topCapHeight:20]; } + +// Make sure we relayout our images when our arrow point changes! +- (void)setArrowPoint:(CGPoint)arrowPoint { + [super setArrowPoint:arrowPoint]; + [self setNeedsLayout]; +} + +- (void)layoutSubviews { + + // apply our background graphics + leftCap.image = self.leftCapImage; + rightCap.image = self.rightCapImage; + topAnchor.image = self.topAnchorImage; + bottomAnchor.image = self.bottomAnchorImage; + leftBackground.image = self.backgroundImage; + rightBackground.image = self.backgroundImage; + + // stretch the images to fill our vertical space. The system background images aren't really stretchable, + // but that's OK because you'll probably be using title/subtitle rather than contentView if you're using the + // system images, and in that case the height will match the system background heights exactly and no stretching + // will occur. However, if you wish to define your own custom background using prerendered images, you could + // define stretchable images using -stretchableImageWithLeftCapWidth:TopCapHeight and they'd get stretched + // properly here if necessary. + leftCap.frameHeight = rightCap.frameHeight = leftBackground.frameHeight = rightBackground.frameHeight = self.frameHeight - 13; + topAnchor.frameHeight = bottomAnchor.frameHeight = self.frameHeight; + + BOOL pointingUp = self.arrowPoint.y < self.frameHeight/2; + + // show the correct anchor based on our direction + topAnchor.hidden = !pointingUp; + bottomAnchor.hidden = pointingUp; + + // if we're pointing up, we'll need to push almost everything down a bit + CGFloat dy = pointingUp ? TOP_ANCHOR_MARGIN : 0; + leftCap.frameY = rightCap.frameY = leftBackground.frameY = rightBackground.frameY = dy; + + leftCap.frameX = 0; + rightCap.frameX = self.frameWidth - rightCap.frameWidth; + + // move both anchors, only one will have been made visible in our -popup method + CGFloat anchorX = roundf(self.arrowPoint.x - bottomAnchor.frameWidth / 2); + topAnchor.frameOrigin = CGPointMake(anchorX, 0); + + // make sure the anchor graphic isn't overlapping with an endcap + if (topAnchor.frameLeft < leftCap.frameRight) topAnchor.frameX = leftCap.frameRight; + if (topAnchor.frameRight > rightCap.frameLeft) topAnchor.frameX = rightCap.frameLeft - topAnchor.frameWidth; // don't stretch it + + bottomAnchor.frameOrigin = topAnchor.frameOrigin; // match + + leftBackground.frameLeft = leftCap.frameRight; + leftBackground.frameRight = topAnchor.frameLeft; + rightBackground.frameLeft = topAnchor.frameRight; + rightBackground.frameRight = rightCap.frameLeft; +} + +@end + +@implementation SMCalloutBackgroundView (ClassicEmbeddedImages) + +// +// I didn't want this class to require adding any images to your Xcode project. So instead the images needed are embedded below. +// + ++ (NSString *)SMCalloutViewBackground { return @"iVBORw0KGgoAAAANSUhEUgAAAAEAAAA5CAYAAAD3PEFJAAAAHGlET1QAAAACAAAAAAAAAB0AAAAoAAAAHQAAABwAAACkF8Y1LgAAAHBJREFUGBlMy6ENQyEARdGXJh2CBEZAgAABhoQgEASDQBCWYqy3wt/lt80XFfe4CwCvT3gjpXThnEPsvYm1FjHnJMYYRO+daK0RtVailELknPndiBjjQwiB8N4TzrkHay3xwxhDaK0JpRQhpfxHCMEbAAD//2TbkE8AAAA9SURBVGOQlJQ8w0AJIScnd4ZBQ0PjDIOysvJdBiCIARFhIMIPRLiACEsQoQMiFEGEBIgQABFcIIIVRDABAL6ePTfutWY6AAAAAElFTkSuQmCC"; } ++ (NSString *)SMCalloutViewBackground_2x { return @"iVBORw0KGgoAAAANSUhEUgAAAAIAAAByCAYAAAB5lADlAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAHGlET1QAAAACAAAAAAAAADkAAAAoAAAAOQAAADkAAAD3bjNTjgAAAMNJREFUOBGkz72JhGAAhOGpwyZUVESFVfAPFFRcFfypwmJsa4KNtxaPucAvuuiCZ3jTwX3fkN/5I7Iso2Acx4/guq6v4DzPj+A4Dgr2faeY2LaNgifWdaVgWRYK5nmmmJimiYL3+03BMAwU9H1PMdF1HQVt21LQNA3FRF3XFFRVRUFZlhQURUFBnucUPJfTNKXgidfrRUGSJBTEcUwxEUURBWEYUhAEAcWE7/sUeJ5HMeG6LgWO41Bg2zbFhGVZFPwvfgAAAP//7zgpOQAAAGxJREFU5cYhCkJBAEXRqyAYLJOECTLFaDXafjNZDIKgLniWNL73eXxwDYZzudRau/HP01rrxjKllG4sA3yCt8Z4BU+N8QjuGuMWXDXGFFw0xjk4aYxjcNAY+6BojF2w1RibYK0xVrMxBjbnZ75mdyKsdyBPxAAAAABJRU5ErkJggg=="; } ++ (NSString *)SMCalloutViewBottomAnchor { return @"iVBORw0KGgoAAAANSUhEUgAAACkAAABGCAYAAABRwr15AAAAHGlET1QAAAACAAAAAAAAACMAAAAoAAAAIwAAACMAAAKHOsNB2AAAAlNJREFUaAXsVVmKAlEMDANzCEWvIC644IILorjgAvrhh+iZxGPlCnOXMQ3VpMN7PXarMy3MR1FJpSovtB8SEX28AejzdmS2MRwOv5JiNBolyiT123voer3yb+JyuSR+j87nM1ucTicWQEcNhi7s88LjymDmY2TAdDweOeugw+HAWQft93ve7XYsnBZJ8tZre9cNtNlseLvdsrCFT9c+7fHVvjfu9dNqtWLBcrmMsNWlX6/XEQ8yLi80FyMn7KolA11qms/nrLFYLIJeGDXm6O1sNpuFO+CxGfSWkUUODJ/MaTKZ8HQ6DSA1oDWp43yYIWt7u8vu03OdhY/G4zELbv8KAft66M9k+6ZvN93+ghgYDAZhHadhpvmRrN6DWu+jXq/HQL/fZw3RpbcMD3KYwysPaA26MGY2Cz/mOkPdbpezDmq32+xCq9UK9U6nE9Yub1JN70Ot37P7qNlsMiBG1MK217NX1vZdajQarCGPo0etGcfBIwwNPjvTHj2D7tOwL3JkvV4PDgTrsEvTc9Q/+eLmdoaearUa34tqtXq3V+9Mm8MOkgUuVCoVFiSZwZ8mK+/oPN4VjbAwjsvlcrAgzuObPSNLpVKJfZAHMNM1tDjWfl3HZTDTfqmpWCyyRaFQYAF01JYx1/yKLGFpljk4Mp/PB18Oh6IHQ3ex9djelYEGr2XMwSQGbULvYwnamUuzHuldPpdms+GRuVyOATH5artAeyWje1unzZJerJfiSDAeQA9GBgxd86PZ4EgsjHsIHh+/Mhs50nfAX+v/Rz7rF3iLL/kNAAD//2Bk4sgAAAQXSURBVO2Va08TQRSGB9TWO2jxUgRapFeioGi8XypGImoA72hQf4IfVDCE+AtrwheDMfBb8H3WObhstvRCNSTa5M10Zs6c95mzuzMunU5Xd7rcTgeE7z9ku57S/0r+W5UcGBioxqm/v7/a29v7V44nfPCL42DMlUqlalTFYrE6NDQULOrr6/tjsMCRHxD88I2y0HeaXIvRai6XW5GWBwcHg0TtrqoBkh8f/MSxGsOy5vSbk954vVWL3iUSiS/a5fd8Pt920DAg+fHBD1/vD4MxwedeeL1UOyu9kl5Lc1q41G7QGoBL+Hlf/OGAx9jclDrTXjNqn0jPJAJmBbrYLtAagIv4eD988YfDmOBz97wm1N6XJqVHEpMseC7QzwJd2c6jjwFcIS/5vQ9++OIPBzzG5q6pg65LN6Xb0rhE0AOJxU+VcKFV0BqAC+T1+fHBD1/84YDH2NxZdUakUem8dEG6LBFUkVjMDh8LdL5Z0BqA8+TzeclfkfDDF3844IELPnfaK6e2IJWkMxKBlyR2dVditzPNgG4ByDtHPvKSHx/88MUfDniMzZ1UJy31Sn3SgMRkUWIX7Iyyj0u8Lw2B1gEkD/nIS3588MMXfzjggQs+1y0dkY5KKem4xCTB7GZYGpOuSnekuqANAJKHfOQlPz744Ys/HPDABZ/b73VA7UHpsEQAwackdleWeBwGytdXs6J6b6vcJP6g5iueJ15inQGSj7zkxwc/fPGHAx5jc3vUQQkpKe2TCOiSeiTKnpV4V85JVySMAtBkMvkp/DFxD4cBmVdsGJD15CFfViI/Pvjhiz8c8Bib61THtEv/d0sEsQt2Rel5DFkpDnRaIB8BLRQKy6reV1r6jGvNtMSG2FgUkLzkxwc/fPGHw5g63fr6+oY00eEnCWQn7OqQxGPgBc5KYdCK+gBMCehDJpNZKZfL32jpM+7nK2qjgOQjL/nxwQ9f4Do2cYU7/CfABzYDOqE1DwX2PpVK/aClLzFekVoGDJiikE2CjgqAA5izblwCatK39BlnnjieQFZquILGtvGobcBaJWukokXFjUgXJb78G9It39JnnHnislLTgEHRDCquVdJ6oJxteWlYolpjEmC09BlnnriWAOtCBgFbg56QObfDoFSQeKRl39JnnHniGvpIYosVNxgdk0GtinIjHJM4SoChYhnf0meceeLqfsVRX+vXfCctwFqZREH3aoyboUuiSj0StwZVo6XPOPPEEZ+QYo8Z84lrG4ZksX5hUG4DjDmE7ToFqFui5YBmnHniiG8aMPCNI99qTEYGarcT1eGmMGCgDIxxq57dIpsO6q28bK6pSm4s+g3K7WCwVAogk1XO4IhtGhDPliCDhb9AraoAGDBQYbAArlXAbUFaVSPAQG9SOK7V/z8B/0J0prY8CNcAAAAASUVORK5CYII="; } ++ (NSString *)SMCalloutViewBottomAnchor_2x { return @"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"; } ++ (NSString *)SMCalloutViewLeftCap { return @"iVBORw0KGgoAAAANSUhEUgAAABEAAAA5CAYAAADQksChAAAAHGlET1QAAAACAAAAAAAAAB0AAAAoAAAAHQAAABwAAAKS6krCNQAAAl5JREFUSA2klNmKGkEUhs0yM9nIglnctQc3zKioqOCKwQVXFBRUcLnxwvtci88gPkpeIlATEshVSM2rmP9UUo3dajuQi49TVX3OZ3mquk273c50DpPJ9OAID7H2l2MCXYFMfoT1xzouML842MU/gabQ4XAUo9Ho10KhcFcqlbgejWRPIH/10ul0fq7X67/X6/X3zWZzu91umR5VohPQNq/MZvOndrv9a7VafVssFmw+n7PZbKYi50JyTIC1Zz6f78tyufwxnU7ZZDI5iV5CjbsiAXiZy+V+jsfjW8BGo9FJ9iXUh0vwlATAnEwm74bDIRsMBoZICZ2G3MULjN8ASzgc5v1+n3W73QN6vR4j6BlyxUUiCTVT7uIdxo5QKMQpqdPpaGi1WmIuI3KFRP6V55iLXSAqgUCAUyKOmDWbTdZoNESUY5oT+xJqKP0VM7ADL06HU0GtVlOpVqtMIteRK3ZC/XgCqKFvgRMEvF4vp4JyuWwIcg8k77HmBiFFUXilUmG45oaQRJ4MNfUV+AA84KPH46H3hBWLRZbP50WUY5pLkKuRvMbcAhRwQxIqwqUzBLlCQsdLt1QjcblcnASZTEZDNptV5zQ+JbnGgxuSUFI6nTbESBLGZ4DTLlKplGBfJtconpVQId4hVUTj/flZCb5oPBaLsXg8LkgkEuwYhjux2+0cF06VkExKZaS1sxJcOOb3+0UxFR7DUGK1WjlJcEqMYjAYZPg8sEgkouGsxO12M5wSQ380kdYk95KQwIj/kthsNiE3lFgsFk79oGRZIMcy0g7vJUGDVZEslpGe/QEAAP//KqClBgAAAfBJREFU7ZTRatNQHIfjdFaj1El1prW2Sbti2aZeKEMFB+pAEFREFAa79d5n8YF8gkzUi93M7VXq9x08I82y7QH04iNpOP34/37nJEmSJAuwCCksQQYjuJdl2cFgMCh7vV6g2+2WVXzub9aeLan+sen+v2S+3H+12Hioms7IWZ2ss+AwntiTBKdJCk6hkr08z3f7/f7cca8L44m9wM1liO9OkHQ6nW/j8fjncDgsFZ0Uqy65xoNbkMNamqafEexPJpPvo9GoNFoTrE3OgZNcgjYswxBWYaPdbn9lmt/T6fQH7EJZh3XHJDd4dgfuwkPYbLVaX4jyqyiKQ4QHdVgTJOe5tuAqdOA2rMADeAov4DW8h0+wDTsVjiQXeXgFroMfJstdg0fwDLZA0Tv4AB9BoQRJ/Lq5Q/ZyE/owgfuwAYpewitQ9gbeBmazGdfwdbPcGClOY8F2o8iJjLYJz0Gh020lfyXukL0YKU5jN11Q5ERGsyPLdrLH8CRQkRgpTpNybyxF9mM0O1oBJ1sFpeuBmsRp/PIbK4qMZkfK3DW33+lyUFyEOKeIjOa2O5UyJ1O4DJ5sxdmRpEFkNDvyJCtz+6NQqa+I79rSnKQmsiPjKTOiQmMqjWLl6TFJReSOibKqUGlE+WKjRFEVFkZh9RrlC38A3S8C8jPZQY0AAAAASUVORK5CYII="; } ++ (NSString *)SMCalloutViewLeftCap_2x { return @"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"; } ++ (NSString *)SMCalloutViewRightCap { return @"iVBORw0KGgoAAAANSUhEUgAAABEAAAA5CAYAAADQksChAAAAHGlET1QAAAACAAAAAAAAAB0AAAAoAAAAHQAAABwAAAKdevXfpAAAAmlJREFUSA2UlNlqWlEUhredJzpgB41zcAi2JiRiBE0UiwNxQsGACibeeJH7XovPEPIofYnCSmmhV6XJq6T/f3SfHg/xmF58rH22rm+vvfY+Ryml7llwYbzEzc2NWgdy1MMFDxCt3MezXsAU3yZUpVLpyk6hULje2dn55vf7iwvxktAuUhcXF2Ln/Pz8cjab/Tg6OvoTCAS+QPTIJnNZRer09FTG47Ewavg8mUxkOp1+b7Vav91u92dIHgNuXVdlitRoNJJVnJycyNnZ2c9YLPYVyc9WidRgMJBVDIdDAZcHBwe/IHhpEfEA2HSjGnV8fCxO9Pt9yWQy10hwA4qeAvaI25pLOp2OdLtdA47t9Ho9SaVSV0jwgDfgBWB/jGrYYNVut6XZbIo1cqyhNJlMUuIH74Cuhk02tqTq9bpoGo2GED4z4oiNBRKJBCURoKt5jrG5JVWr1YRUq1UTPcdIGU6HkijwAfZGb8noiyqXy+IE5dFolJIECIC3gFt6AtgXF6+9OFGpVCQSiVCSBCHwHixLDg8PxUqxWBTCOUYuEA6HKfkIwuADeAV41PP7goskTlC0kHxCkm7u6yVJPp+XXC5nYB3rOS4QDAZZiV3C12B+zNlsVpyg2CLZRCKPmZX8k+zv74vGKtNzrAifA1aSAusleEf4nphSjileK0mn03Ibe3t7QnZ3dwVfOOdKrH/WSXqOERdNfD6fs4QrrSIej/OirZdsb2+LFbz2srW1ZSTjVIzo9XqdK0HT2DgT7N8Y6xgKhWSthH924s6SjY2NlaL/klCkYWV6zL54PB7nnmC/ZoJO1JG/3UXyFwAA//9HuzCQAAAB80lEQVTtlc1qU1EURk9iNXqVqERrEmNykzQY/B0oooKCPyAIbRGpIDh17rP4QD7BragDJ9q+SlwrZsd7NRQFhx0szulhf9/Z+7uHJnU6naLb7RauZTyTfr9ftNvtvZTSdRhBG85ABkehnsrCVftDk2q4ZnSYSTWT//LYwoSA93mZ1+DfX2yv1yvyPN/F5OvCZMj6d8/eDjQYDAbFeDz+3Gq1PqwwOcHZGtST72AVo9GomEwmHzH6lmXZW4qvQg4X4DT8MplOp8UKdjn7RBffm83mewR34AoMYB2acBzspJYo3Pud4XC4z0hfGo3GO4oewi24DJfgHFRNOHhT4jX7V/ACnsNjuA83YQMuQgtOQQOOQA3mIoU78BK2QYOn8ABug3nElznL/iQcg6XJFn/IJih+Bk9AA7O4ARPowXlwFEP9+V9t0Yk3isJHYAaOYAcamIWB+j7sIkZZY1+fzWYsKd1bcJfVmw3RDBzBDjTogFlEF8tRwsTnLIr8jN68AWbgCHYQBhl7A513wVoLE4slB2/1M/oVFJuBI9hBGJiFgdZhaWKx+BLXQaE3h9gMDNIO/jCITvwNEZ+yN4pCP6NiX6YZOEKlAw3CxDYtDoEib1XozWXxcoQwCBMLo1hBELfOhZzXpCyOPefzgCysFCuQKDxo/QHd3ALyX+9lLwAAAABJRU5ErkJggg=="; } ++ (NSString *)SMCalloutViewRightCap_2x { return @"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"; } ++ (NSString *)SMCalloutViewTopAnchor { return @"iVBORw0KGgoAAAANSUhEUgAAACkAAABGCAYAAABRwr15AAAAHGlET1QAAAACAAAAAAAAACMAAAAoAAAAIwAAACMAAAQYDCloiwAAA+RJREFUaAXMVslKHFEUfSaaaPIFunDaulJj2/QQBxxwVtCFC9GFCxVRUHHAARVx1pWf9QKVNCGb5FvMPUWf5vazqu0qFVwc7nTuvaeedr0yj4+P5qUwxlQoVCq/4qWz0R9boBLyQXwfzc3N31paWn7CMpe3/kPEFRxLZF4gxX2UuLKpqSkxOTn56/T09DcsYuQFqJMb62Qji5SFOBUs9cWJ/dTY2JiEsPv7e+/s7OwHLGLkURdosZGFRhIpyygQS6sE1Q0NDampqakchMkpWgIx8qiDl+ejDw8YSWjZIjE4vwCLcDrV9fX1aQi5u7vzBZ6cnBREQiyFggd+vi+y0LJEynBXYI0szsif1BcIccfHx0+APB4APPBlTk0coc+KDBM4MTGRu7299SDk6OgoFKiDB35coSVFhgkcGxvLXV1deRB3eHhoDw4OiixyGjjlm5sbD31xhIaKDBM4Ojqau7y89AXu7+/bvb09C/sc8EDoQ39UoYEiwwQODw/nLi4uPJzc7u5uZKAP/SMjI5GEPhEZJnBoaCh3fn7uQdzW1pbd3t72resjZg4cgnn0Yw7mlXuiRSKDBNbV1WUwUF4p3s7Ojt3Y2CjC5uamH8NqHzzmXIs5mIe5mC97S/7qpV64svQt8lnyX2pra7MDAwO+QCxaW1vzsb6+bgk3FxSTqy3myS/fw3zswT4B9uI9qq9S6PJvDtweeEGDhKf6Ko3f+/v7c/LL9DB8dXX11YG5mI892Ie9+f3QAT3QVWV6enr+uejt7f07PT39R14j3srKil1aWirC8vJyUezW3bgUH/OxB/uw19WC2Dw8PNggXF9f+0IWFxftWwMPhX1BOpAzCwsL1sX8/LwFmKdPyzxsGJecoB7Wwix7aM3c3Jx97zCzs7P2vcPMzMxY+ae1sHERpd/lunGQBiOfUVa+CS2si7C85mlOmB+2o1y+GR8ft4Bc/EXWzSOWz60iDnuCuMwFWfbBBvnoYR6+kY8GqyGXvx/D0medsVuT660wgxy3h7Fr2cs+WvJQN3It2cHBQR/wCZ2DX4rHGnvd2J3lztN13Uue6evrs4C87X0bFjP/mtbdGTYb16Iluru7C36pHGvavqRXz6Gv55lsNmuJrq4uq4E8YteSwz7WycUCnWMeljW3l3zWdY/JZDL2vcOkUikbhGQyWcin0+mCH8SNmtPz6Ot97jzT2dlpCRDpw7qxrr2l7+41iUTCamA5Y/raUhw5sMyR59Y0R9eYD8txXpHIjo4OXyCtbg7K6Tr953il6m6NsWlvb7floq2trWyunhm3jzMMBgShtbXVAlFq5MfpxR7dz73I/QcAAP//R6Pt0AAAASZJREFU7VK7asNAEBwCblKltISkImrUWEhl+tQuU+WT7xfyL94TjNksdzIkZ7yGMwyzj9m9YWWs6xpuYVmWm5rcjhKzmOc55BAfYE/HrO2x1ut4b4Y9rY8x+r4PFl3XhQjWGVtmX/M9ZsGlnnkz2bbtdjkaZU5mPcVWY/PUDGvUWmafjCjQIuY5joO2l6pZTcxTulTNzl5NNk0TiCjKxXaB1sYZndv4r7PQi/VSmiTzAeZkzpBZ1/zf2c0kF+49RE2O7zn7y2TOwKPr1WSpL1AvWS9Z6gKl9tT/ZL1kqQuU2oNhGIJ3YJqm4B0Yx/HHOyC/7ycAvsSkd+AsJr0Dn2LSO/AhJr0DJzHpHXgXk96Bo5j0DryJSe/Aq5j0DhzEpHfgRUy6xgX1iUkAQX47jAAAAABJRU5ErkJggg=="; } ++ (NSString *)SMCalloutViewTopAnchor_2x { return @"iVBORw0KGgoAAAANSUhEUgAAAFIAAACMCAYAAADvGP7EAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyRpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoTWFjaW50b3NoKSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo5QUY0RkNERjZENDMxMUUyQTAzNEREMUIxRjIzOEVCNSIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDo5QUY0RkNFMDZENDMxMUUyQTAzNEREMUIxRjIzOEVCNSI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjdFQUM5NTk0NkJGQjExRTJBMDM0REQxQjFGMjM4RUI1IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjlBRjRGQ0RFNkQ0MzExRTJBMDM0REQxQjFGMjM4RUI1Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+zk9a9AAABhtJREFUeNrsnclO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"; } + +@end + +// +// Custom-drawn flexible-height background implementation. +// Contributed by Nicholas Shipes: https://github.com/u10int +// +@implementation SMCalloutDrawnBackgroundView + +- (id)initWithFrame:(CGRect)frame { + if (self = [super initWithFrame:frame]) { + self.backgroundColor = [UIColor clearColor]; + self.opaque = NO; + } + return self; +} + +// Make sure we redraw our graphics when the arrow point changes! +- (void)setArrowPoint:(CGPoint)arrowPoint { + [super setArrowPoint:arrowPoint]; + [self setNeedsDisplay]; +} + +- (void)drawRect:(CGRect)rect { + + BOOL pointingUp = self.arrowPoint.y < self.frameHeight/2; + CGSize anchorSize = CGSizeMake(27, ANCHOR_HEIGHT); + CGFloat anchorX = roundf(self.arrowPoint.x - anchorSize.width / 2); + CGRect anchorRect = CGRectMake(anchorX, 0, anchorSize.width, anchorSize.height); + + // make sure the anchor is not too close to the end caps + if (anchorRect.origin.x < ANCHOR_MARGIN_MIN) + anchorRect.origin.x = ANCHOR_MARGIN_MIN; + + else if (anchorRect.origin.x + anchorRect.size.width > self.frameWidth - ANCHOR_MARGIN_MIN) + anchorRect.origin.x = self.frameWidth - anchorRect.size.width - ANCHOR_MARGIN_MIN; + + // determine size + CGFloat stroke = 1.0; + CGFloat radius = [UIScreen mainScreen].scale == 1 ? 4.5 : 6.0; + + rect = CGRectMake(self.bounds.origin.x, self.bounds.origin.y + TOP_SHADOW_BUFFER, self.bounds.size.width, self.bounds.size.height - ANCHOR_HEIGHT); + rect.size.width -= stroke + 14; + rect.size.height -= stroke * 2 + TOP_SHADOW_BUFFER + BOTTOM_SHADOW_BUFFER + OFFSET_FROM_ORIGIN; + rect.origin.x += stroke / 2.0 + 7; + rect.origin.y += pointingUp ? ANCHOR_HEIGHT - stroke / 2.0 : stroke / 2.0; + + + // General Declarations + CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); + CGContextRef context = UIGraphicsGetCurrentContext(); + + // Color Declarations + UIColor* fillBlack = [UIColor colorWithRed: 0.11 green: 0.11 blue: 0.11 alpha: 1]; + UIColor* shadowBlack = [UIColor colorWithRed: 0 green: 0 blue: 0 alpha: 0.47]; + UIColor* glossBottom = [UIColor colorWithRed: 1 green: 1 blue: 1 alpha: 0.2]; + UIColor* glossTop = [UIColor colorWithRed: 1 green: 1 blue: 1 alpha: 0.85]; + UIColor* strokeColor = [UIColor colorWithRed: 0.199 green: 0.199 blue: 0.199 alpha: 1]; + UIColor* innerShadowColor = [UIColor colorWithRed: 1 green: 1 blue: 1 alpha: 0.4]; + UIColor* innerStrokeColor = [UIColor colorWithRed: 0.821 green: 0.821 blue: 0.821 alpha: 0.04]; + UIColor* outerStrokeColor = [UIColor colorWithRed: 0 green: 0 blue: 0 alpha: 0.35]; + + // Gradient Declarations + NSArray* glossFillColors = [NSArray arrayWithObjects: + (id)glossBottom.CGColor, + (id)glossTop.CGColor, nil]; + CGFloat glossFillLocations[] = {0, 1}; + CGGradientRef glossFill = CGGradientCreateWithColors(colorSpace, (__bridge CFArrayRef)glossFillColors, glossFillLocations); + + // Shadow Declarations + UIColor* baseShadow = shadowBlack; + CGSize baseShadowOffset = CGSizeMake(0.1, 6.1); + CGFloat baseShadowBlurRadius = 6; + UIColor* innerShadow = innerShadowColor; + CGSize innerShadowOffset = CGSizeMake(0.1, 1.1); + CGFloat innerShadowBlurRadius = 1; + + CGFloat backgroundStrokeWidth = 1; + CGFloat outerStrokeStrokeWidth = 1; + + // Frames + CGRect frame = rect; + CGRect innerFrame = CGRectMake(frame.origin.x + backgroundStrokeWidth, frame.origin.y + backgroundStrokeWidth, frame.size.width - backgroundStrokeWidth * 2, frame.size.height - backgroundStrokeWidth * 2); + CGRect glossFrame = CGRectMake(frame.origin.x - backgroundStrokeWidth / 2, frame.origin.y - backgroundStrokeWidth / 2, frame.size.width + backgroundStrokeWidth, frame.size.height / 2 + backgroundStrokeWidth + 0.5); + + //// CoreGroup //// + { + CGContextSaveGState(context); + CGContextSetAlpha(context, 0.83); + CGContextBeginTransparencyLayer(context, NULL); + + // Background Drawing + UIBezierPath* backgroundPath = [UIBezierPath bezierPath]; + [backgroundPath moveToPoint:CGPointMake(CGRectGetMinX(frame), CGRectGetMinY(frame) + radius)]; + [backgroundPath addLineToPoint:CGPointMake(CGRectGetMinX(frame), CGRectGetMaxY(frame) - radius)]; // left + [backgroundPath addArcWithCenter:CGPointMake(CGRectGetMinX(frame) + radius, CGRectGetMaxY(frame) - radius) radius:radius startAngle:M_PI endAngle:M_PI / 2 clockwise:NO]; // bottom-left corner + + // pointer down + if (!pointingUp) { + [backgroundPath addLineToPoint:CGPointMake(CGRectGetMinX(anchorRect), CGRectGetMaxY(frame))]; + [backgroundPath addLineToPoint:CGPointMake(CGRectGetMinX(anchorRect) + anchorRect.size.width / 2, CGRectGetMaxY(frame) + anchorRect.size.height)]; + [backgroundPath addLineToPoint:CGPointMake(CGRectGetMaxX(anchorRect), CGRectGetMaxY(frame))]; + } + + [backgroundPath addLineToPoint:CGPointMake(CGRectGetMaxX(frame) - radius, CGRectGetMaxY(frame))]; // bottom + [backgroundPath addArcWithCenter:CGPointMake(CGRectGetMaxX(frame) - radius, CGRectGetMaxY(frame) - radius) radius:radius startAngle:M_PI / 2 endAngle:0.0f clockwise:NO]; // bottom-right corner + [backgroundPath addLineToPoint: CGPointMake(CGRectGetMaxX(frame), CGRectGetMinY(frame) + radius)]; // right + [backgroundPath addArcWithCenter:CGPointMake(CGRectGetMaxX(frame) - radius, CGRectGetMinY(frame) + radius) radius:radius startAngle:0.0f endAngle:-M_PI / 2 clockwise:NO]; // top-right corner + + // pointer up + if (pointingUp) { + [backgroundPath addLineToPoint:CGPointMake(CGRectGetMaxX(anchorRect), CGRectGetMinY(frame))]; + [backgroundPath addLineToPoint:CGPointMake(CGRectGetMinX(anchorRect) + anchorRect.size.width / 2, CGRectGetMinY(frame) - anchorRect.size.height)]; + [backgroundPath addLineToPoint:CGPointMake(CGRectGetMinX(anchorRect), CGRectGetMinY(frame))]; + } + + [backgroundPath addLineToPoint:CGPointMake(CGRectGetMinX(frame) + radius, CGRectGetMinY(frame))]; // top + [backgroundPath addArcWithCenter:CGPointMake(CGRectGetMinX(frame) + radius, CGRectGetMinY(frame) + radius) radius:radius startAngle:-M_PI / 2 endAngle:M_PI clockwise:NO]; // top-left corner + [backgroundPath closePath]; + CGContextSaveGState(context); + CGContextSetShadowWithColor(context, baseShadowOffset, baseShadowBlurRadius, baseShadow.CGColor); + [fillBlack setFill]; + [backgroundPath fill]; + + // Background Inner Shadow + CGRect backgroundBorderRect = CGRectInset([backgroundPath bounds], -innerShadowBlurRadius, -innerShadowBlurRadius); + backgroundBorderRect = CGRectOffset(backgroundBorderRect, -innerShadowOffset.width, -innerShadowOffset.height); + backgroundBorderRect = CGRectInset(CGRectUnion(backgroundBorderRect, [backgroundPath bounds]), -1, -1); + + UIBezierPath* backgroundNegativePath = [UIBezierPath bezierPathWithRect: backgroundBorderRect]; + [backgroundNegativePath appendPath: backgroundPath]; + backgroundNegativePath.usesEvenOddFillRule = YES; + + CGContextSaveGState(context); + { + CGFloat xOffset = innerShadowOffset.width + round(backgroundBorderRect.size.width); + CGFloat yOffset = innerShadowOffset.height; + CGContextSetShadowWithColor(context, + CGSizeMake(xOffset + copysign(0.1, xOffset), yOffset + copysign(0.1, yOffset)), + innerShadowBlurRadius, + innerShadow.CGColor); + + [backgroundPath addClip]; + CGAffineTransform transform = CGAffineTransformMakeTranslation(-round(backgroundBorderRect.size.width), 0); + [backgroundNegativePath applyTransform: transform]; + [[UIColor grayColor] setFill]; + [backgroundNegativePath fill]; + } + CGContextRestoreGState(context); + + CGContextRestoreGState(context); + + [strokeColor setStroke]; + backgroundPath.lineWidth = backgroundStrokeWidth; + [backgroundPath stroke]; + + + // Inner Stroke Drawing + CGFloat innerRadius = radius - 1.0; + CGRect anchorInnerRect = anchorRect; + anchorInnerRect.origin.x += backgroundStrokeWidth / 2; + anchorInnerRect.origin.y -= backgroundStrokeWidth / 2; + anchorInnerRect.size.width -= backgroundStrokeWidth; + anchorInnerRect.size.height -= backgroundStrokeWidth / 2; + + UIBezierPath* innerStrokePath = [UIBezierPath bezierPath]; + [innerStrokePath moveToPoint:CGPointMake(CGRectGetMinX(innerFrame), CGRectGetMinY(innerFrame) + innerRadius)]; + [innerStrokePath addLineToPoint:CGPointMake(CGRectGetMinX(innerFrame), CGRectGetMaxY(innerFrame) - innerRadius)]; // left + [innerStrokePath addArcWithCenter:CGPointMake(CGRectGetMinX(innerFrame) + innerRadius, CGRectGetMaxY(innerFrame) - innerRadius) radius:innerRadius startAngle:M_PI endAngle:M_PI / 2 clockwise:NO]; // bottom-left corner + + // pointer down + if (!pointingUp) { + [innerStrokePath addLineToPoint:CGPointMake(CGRectGetMinX(anchorInnerRect), CGRectGetMaxY(innerFrame))]; + [innerStrokePath addLineToPoint:CGPointMake(CGRectGetMinX(anchorInnerRect) + anchorInnerRect.size.width / 2, CGRectGetMaxY(innerFrame) + anchorInnerRect.size.height)]; + [innerStrokePath addLineToPoint:CGPointMake(CGRectGetMaxX(anchorInnerRect), CGRectGetMaxY(innerFrame))]; + } + + [innerStrokePath addLineToPoint:CGPointMake(CGRectGetMaxX(innerFrame) - innerRadius, CGRectGetMaxY(innerFrame))]; // bottom + [innerStrokePath addArcWithCenter:CGPointMake(CGRectGetMaxX(innerFrame) - innerRadius, CGRectGetMaxY(innerFrame) - innerRadius) radius:innerRadius startAngle:M_PI / 2 endAngle:0.0f clockwise:NO]; // bottom-right corner + [innerStrokePath addLineToPoint: CGPointMake(CGRectGetMaxX(innerFrame), CGRectGetMinY(innerFrame) + innerRadius)]; // right + [innerStrokePath addArcWithCenter:CGPointMake(CGRectGetMaxX(innerFrame) - innerRadius, CGRectGetMinY(innerFrame) + innerRadius) radius:innerRadius startAngle:0.0f endAngle:-M_PI / 2 clockwise:NO]; // top-right corner + + // pointer up + if (pointingUp) { + [innerStrokePath addLineToPoint:CGPointMake(CGRectGetMaxX(anchorInnerRect), CGRectGetMinY(innerFrame))]; + [innerStrokePath addLineToPoint:CGPointMake(CGRectGetMinX(anchorInnerRect) + anchorRect.size.width / 2, CGRectGetMinY(innerFrame) - anchorInnerRect.size.height)]; + [innerStrokePath addLineToPoint:CGPointMake(CGRectGetMinX(anchorInnerRect), CGRectGetMinY(innerFrame))]; + } + + [innerStrokePath addLineToPoint:CGPointMake(CGRectGetMinX(innerFrame) + innerRadius, CGRectGetMinY(innerFrame))]; // top + [innerStrokePath addArcWithCenter:CGPointMake(CGRectGetMinX(innerFrame) + innerRadius, CGRectGetMinY(innerFrame) + innerRadius) radius:innerRadius startAngle:-M_PI / 2 endAngle:M_PI clockwise:NO]; // top-left corner + [innerStrokePath closePath]; + + [innerStrokeColor setStroke]; + innerStrokePath.lineWidth = backgroundStrokeWidth; + [innerStrokePath stroke]; + + + //// GlossGroup //// + { + CGContextSaveGState(context); + CGContextSetAlpha(context, 0.45); + CGContextBeginTransparencyLayer(context, NULL); + + CGFloat glossRadius = radius + 0.5; + + // Gloss Drawing + UIBezierPath* glossPath = [UIBezierPath bezierPath]; + [glossPath moveToPoint:CGPointMake(CGRectGetMinX(glossFrame), CGRectGetMinY(glossFrame))]; + [glossPath addLineToPoint:CGPointMake(CGRectGetMinX(glossFrame), CGRectGetMaxY(glossFrame) - glossRadius)]; // left + [glossPath addArcWithCenter:CGPointMake(CGRectGetMinX(glossFrame) + glossRadius, CGRectGetMaxY(glossFrame) - glossRadius) radius:glossRadius startAngle:M_PI endAngle:M_PI / 2 clockwise:NO]; // bottom-left corner + [glossPath addLineToPoint:CGPointMake(CGRectGetMaxX(glossFrame) - glossRadius, CGRectGetMaxY(glossFrame))]; // bottom + [glossPath addArcWithCenter:CGPointMake(CGRectGetMaxX(glossFrame) - glossRadius, CGRectGetMaxY(glossFrame) - glossRadius) radius:glossRadius startAngle:M_PI / 2 endAngle:0.0f clockwise:NO]; // bottom-right corner + [glossPath addLineToPoint: CGPointMake(CGRectGetMaxX(glossFrame), CGRectGetMinY(glossFrame) - glossRadius)]; // right + [glossPath addArcWithCenter:CGPointMake(CGRectGetMaxX(glossFrame) - glossRadius, CGRectGetMinY(glossFrame) + glossRadius) radius:glossRadius startAngle:0.0f endAngle:-M_PI / 2 clockwise:NO]; // top-right corner + + // pointer up + if (pointingUp) { + [glossPath addLineToPoint:CGPointMake(CGRectGetMaxX(anchorRect), CGRectGetMinY(glossFrame))]; + [glossPath addLineToPoint:CGPointMake(CGRectGetMinX(anchorRect) + roundf(anchorRect.size.width / 2), CGRectGetMinY(glossFrame) - anchorRect.size.height)]; + [glossPath addLineToPoint:CGPointMake(CGRectGetMinX(anchorRect), CGRectGetMinY(glossFrame))]; + } + + [glossPath addLineToPoint:CGPointMake(CGRectGetMinX(glossFrame) + glossRadius, CGRectGetMinY(glossFrame))]; // top + [glossPath addArcWithCenter:CGPointMake(CGRectGetMinX(glossFrame) + glossRadius, CGRectGetMinY(glossFrame) + glossRadius) radius:glossRadius startAngle:-M_PI / 2 endAngle:M_PI clockwise:NO]; // top-left corner + [glossPath closePath]; + + CGContextSaveGState(context); + [glossPath addClip]; + CGRect glossBounds = glossPath.bounds; + CGContextDrawLinearGradient(context, glossFill, + CGPointMake(CGRectGetMidX(glossBounds), CGRectGetMaxY(glossBounds)), + CGPointMake(CGRectGetMidX(glossBounds), CGRectGetMinY(glossBounds)), + 0); + CGContextRestoreGState(context); + + CGContextEndTransparencyLayer(context); + CGContextRestoreGState(context); + } + + CGContextEndTransparencyLayer(context); + CGContextRestoreGState(context); + } + + // Outer Stroke Drawing + UIBezierPath* outerStrokePath = [UIBezierPath bezierPath]; + [outerStrokePath moveToPoint:CGPointMake(CGRectGetMinX(frame), CGRectGetMinY(frame) + radius)]; + [outerStrokePath addLineToPoint:CGPointMake(CGRectGetMinX(frame), CGRectGetMaxY(frame) - radius)]; // left + [outerStrokePath addArcWithCenter:CGPointMake(CGRectGetMinX(frame) + radius, CGRectGetMaxY(frame) - radius) radius:radius startAngle:M_PI endAngle:M_PI / 2 clockwise:NO]; // bottom-left corner + + // pointer down + if (!pointingUp) { + [outerStrokePath addLineToPoint:CGPointMake(CGRectGetMinX(anchorRect), CGRectGetMaxY(frame))]; + [outerStrokePath addLineToPoint:CGPointMake(CGRectGetMinX(anchorRect) + anchorRect.size.width / 2, CGRectGetMaxY(frame) + anchorRect.size.height)]; + [outerStrokePath addLineToPoint:CGPointMake(CGRectGetMaxX(anchorRect), CGRectGetMaxY(frame))]; + } + + [outerStrokePath addLineToPoint:CGPointMake(CGRectGetMaxX(frame) - radius, CGRectGetMaxY(frame))]; // bottom + [outerStrokePath addArcWithCenter:CGPointMake(CGRectGetMaxX(frame) - radius, CGRectGetMaxY(frame) - radius) radius:radius startAngle:M_PI / 2 endAngle:0.0f clockwise:NO]; // bottom-right corner + [outerStrokePath addLineToPoint: CGPointMake(CGRectGetMaxX(frame), CGRectGetMinY(frame) + radius)]; // right + [outerStrokePath addArcWithCenter:CGPointMake(CGRectGetMaxX(frame) - radius, CGRectGetMinY(frame) + radius) radius:radius startAngle:0.0f endAngle:-M_PI / 2 clockwise:NO]; // top-right corner + + // pointer up + if (pointingUp) { + [outerStrokePath addLineToPoint:CGPointMake(CGRectGetMaxX(anchorRect), CGRectGetMinY(frame))]; + [outerStrokePath addLineToPoint:CGPointMake(CGRectGetMinX(anchorRect) + anchorRect.size.width / 2, CGRectGetMinY(frame) - anchorRect.size.height)]; + [outerStrokePath addLineToPoint:CGPointMake(CGRectGetMinX(anchorRect), CGRectGetMinY(frame))]; + } + + [outerStrokePath addLineToPoint:CGPointMake(CGRectGetMinX(frame) + radius, CGRectGetMinY(frame))]; // top + [outerStrokePath addArcWithCenter:CGPointMake(CGRectGetMinX(frame) + radius, CGRectGetMinY(frame) + radius) radius:radius startAngle:-M_PI / 2 endAngle:M_PI clockwise:NO]; // top-left corner + [outerStrokePath closePath]; + CGContextSaveGState(context); + CGContextSetShadowWithColor(context, baseShadowOffset, baseShadowBlurRadius, baseShadow.CGColor); + CGContextRestoreGState(context); + + [outerStrokeColor setStroke]; + outerStrokePath.lineWidth = outerStrokeStrokeWidth; + [outerStrokePath stroke]; + + //// Cleanup + CGGradientRelease(glossFill); + CGColorSpaceRelease(colorSpace); +} + +@end diff --git a/Pods/Target Support Files/Pods-Delta/Pods-Delta-acknowledgements.markdown b/Pods/Target Support Files/Pods-Delta/Pods-Delta-acknowledgements.markdown index e6afbb0..1573dac 100644 --- a/Pods/Target Support Files/Pods-Delta/Pods-Delta-acknowledgements.markdown +++ b/Pods/Target Support Files/Pods-Delta/Pods-Delta-acknowledgements.markdown @@ -239,6 +239,185 @@ THE SOFTWARE. +## SMCalloutView + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + ## SQLite.swift (The MIT License) diff --git a/Pods/Target Support Files/Pods-Delta/Pods-Delta-acknowledgements.plist b/Pods/Target Support Files/Pods-Delta/Pods-Delta-acknowledgements.plist index 89701ee..75927ab 100644 --- a/Pods/Target Support Files/Pods-Delta/Pods-Delta-acknowledgements.plist +++ b/Pods/Target Support Files/Pods-Delta/Pods-Delta-acknowledgements.plist @@ -274,6 +274,191 @@ THE SOFTWARE. Type PSGroupSpecifier + + FooterText + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + License + Apache License, Version 2.0 + Title + SMCalloutView + Type + PSGroupSpecifier + FooterText (The MIT License) diff --git a/Pods/Target Support Files/Pods-Delta/Pods-Delta-frameworks.sh b/Pods/Target Support Files/Pods-Delta/Pods-Delta-frameworks.sh index c984c6b..124ffbc 100755 --- a/Pods/Target Support Files/Pods-Delta/Pods-Delta-frameworks.sh +++ b/Pods/Target Support Files/Pods-Delta/Pods-Delta-frameworks.sh @@ -91,11 +91,13 @@ strip_invalid_archs() { if [[ "$CONFIGURATION" == "Debug" ]]; then install_framework "$BUILT_PRODUCTS_DIR/FileMD5Hash/FileMD5Hash.framework" install_framework "$BUILT_PRODUCTS_DIR/SDWebImage/SDWebImage.framework" + install_framework "$BUILT_PRODUCTS_DIR/SMCalloutView/SMCalloutView.framework" install_framework "$BUILT_PRODUCTS_DIR/SQLite.swift/SQLite.framework" fi if [[ "$CONFIGURATION" == "Release" ]]; then install_framework "$BUILT_PRODUCTS_DIR/FileMD5Hash/FileMD5Hash.framework" install_framework "$BUILT_PRODUCTS_DIR/SDWebImage/SDWebImage.framework" + install_framework "$BUILT_PRODUCTS_DIR/SMCalloutView/SMCalloutView.framework" install_framework "$BUILT_PRODUCTS_DIR/SQLite.swift/SQLite.framework" fi if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then diff --git a/Pods/Target Support Files/Pods-Delta/Pods-Delta.debug.xcconfig b/Pods/Target Support Files/Pods-Delta/Pods-Delta.debug.xcconfig index c077472..186d9d8 100644 --- a/Pods/Target Support Files/Pods-Delta/Pods-Delta.debug.xcconfig +++ b/Pods/Target Support Files/Pods-Delta/Pods-Delta.debug.xcconfig @@ -1,10 +1,10 @@ ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES -FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/FileMD5Hash" "$PODS_CONFIGURATION_BUILD_DIR/SDWebImage" "$PODS_CONFIGURATION_BUILD_DIR/SQLite.swift" "${PODS_ROOT}/Crashlytics/iOS" "${PODS_ROOT}/Fabric/iOS" +FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/FileMD5Hash" "$PODS_CONFIGURATION_BUILD_DIR/SDWebImage" "$PODS_CONFIGURATION_BUILD_DIR/SMCalloutView" "$PODS_CONFIGURATION_BUILD_DIR/SQLite.swift" "${PODS_ROOT}/Crashlytics/iOS" "${PODS_ROOT}/Fabric/iOS" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Crashlytics" "${PODS_ROOT}/Headers/Public/Fabric" LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' -OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/FileMD5Hash/FileMD5Hash.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/SDWebImage/SDWebImage.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/SQLite.swift/SQLite.framework/Headers" -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/Crashlytics" -isystem "${PODS_ROOT}/Headers/Public/Fabric" -OTHER_LDFLAGS = $(inherited) -ObjC -l"c++" -l"z" -framework "Crashlytics" -framework "Fabric" -framework "FileMD5Hash" -framework "SDWebImage" -framework "SQLite" -framework "Security" -framework "SystemConfiguration" -framework "UIKit" +OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/FileMD5Hash/FileMD5Hash.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/SDWebImage/SDWebImage.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/SMCalloutView/SMCalloutView.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/SQLite.swift/SQLite.framework/Headers" -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/Crashlytics" -isystem "${PODS_ROOT}/Headers/Public/Fabric" +OTHER_LDFLAGS = $(inherited) -ObjC -l"c++" -l"z" -framework "Crashlytics" -framework "Fabric" -framework "FileMD5Hash" -framework "SDWebImage" -framework "SMCalloutView" -framework "SQLite" -framework "Security" -framework "SystemConfiguration" -framework "UIKit" OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" PODS_BUILD_DIR = $BUILD_DIR PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) diff --git a/Pods/Target Support Files/Pods-Delta/Pods-Delta.release.xcconfig b/Pods/Target Support Files/Pods-Delta/Pods-Delta.release.xcconfig index c077472..186d9d8 100644 --- a/Pods/Target Support Files/Pods-Delta/Pods-Delta.release.xcconfig +++ b/Pods/Target Support Files/Pods-Delta/Pods-Delta.release.xcconfig @@ -1,10 +1,10 @@ ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES -FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/FileMD5Hash" "$PODS_CONFIGURATION_BUILD_DIR/SDWebImage" "$PODS_CONFIGURATION_BUILD_DIR/SQLite.swift" "${PODS_ROOT}/Crashlytics/iOS" "${PODS_ROOT}/Fabric/iOS" +FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/FileMD5Hash" "$PODS_CONFIGURATION_BUILD_DIR/SDWebImage" "$PODS_CONFIGURATION_BUILD_DIR/SMCalloutView" "$PODS_CONFIGURATION_BUILD_DIR/SQLite.swift" "${PODS_ROOT}/Crashlytics/iOS" "${PODS_ROOT}/Fabric/iOS" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Crashlytics" "${PODS_ROOT}/Headers/Public/Fabric" LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' -OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/FileMD5Hash/FileMD5Hash.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/SDWebImage/SDWebImage.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/SQLite.swift/SQLite.framework/Headers" -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/Crashlytics" -isystem "${PODS_ROOT}/Headers/Public/Fabric" -OTHER_LDFLAGS = $(inherited) -ObjC -l"c++" -l"z" -framework "Crashlytics" -framework "Fabric" -framework "FileMD5Hash" -framework "SDWebImage" -framework "SQLite" -framework "Security" -framework "SystemConfiguration" -framework "UIKit" +OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/FileMD5Hash/FileMD5Hash.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/SDWebImage/SDWebImage.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/SMCalloutView/SMCalloutView.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/SQLite.swift/SQLite.framework/Headers" -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/Crashlytics" -isystem "${PODS_ROOT}/Headers/Public/Fabric" +OTHER_LDFLAGS = $(inherited) -ObjC -l"c++" -l"z" -framework "Crashlytics" -framework "Fabric" -framework "FileMD5Hash" -framework "SDWebImage" -framework "SMCalloutView" -framework "SQLite" -framework "Security" -framework "SystemConfiguration" -framework "UIKit" OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" PODS_BUILD_DIR = $BUILD_DIR PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) diff --git a/Pods/Target Support Files/SMCalloutView/Info.plist b/Pods/Target Support Files/SMCalloutView/Info.plist new file mode 100644 index 0000000..a73567e --- /dev/null +++ b/Pods/Target Support Files/SMCalloutView/Info.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + ${PRODUCT_BUNDLE_IDENTIFIER} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + FMWK + CFBundleShortVersionString + 2.1.5 + CFBundleSignature + ???? + CFBundleVersion + ${CURRENT_PROJECT_VERSION} + NSPrincipalClass + + + diff --git a/Pods/Target Support Files/SMCalloutView/SMCalloutView-dummy.m b/Pods/Target Support Files/SMCalloutView/SMCalloutView-dummy.m new file mode 100644 index 0000000..f570a18 --- /dev/null +++ b/Pods/Target Support Files/SMCalloutView/SMCalloutView-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_SMCalloutView : NSObject +@end +@implementation PodsDummy_SMCalloutView +@end diff --git a/Pods/Target Support Files/SMCalloutView/SMCalloutView-prefix.pch b/Pods/Target Support Files/SMCalloutView/SMCalloutView-prefix.pch new file mode 100644 index 0000000..beb2a24 --- /dev/null +++ b/Pods/Target Support Files/SMCalloutView/SMCalloutView-prefix.pch @@ -0,0 +1,12 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + diff --git a/Pods/Target Support Files/SMCalloutView/SMCalloutView-umbrella.h b/Pods/Target Support Files/SMCalloutView/SMCalloutView-umbrella.h new file mode 100644 index 0000000..01c9303 --- /dev/null +++ b/Pods/Target Support Files/SMCalloutView/SMCalloutView-umbrella.h @@ -0,0 +1,18 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + +#import "SMCalloutView.h" +#import "SMClassicCalloutView.h" + +FOUNDATION_EXPORT double SMCalloutViewVersionNumber; +FOUNDATION_EXPORT const unsigned char SMCalloutViewVersionString[]; + diff --git a/Pods/Target Support Files/SMCalloutView/SMCalloutView.modulemap b/Pods/Target Support Files/SMCalloutView/SMCalloutView.modulemap new file mode 100644 index 0000000..72f1d32 --- /dev/null +++ b/Pods/Target Support Files/SMCalloutView/SMCalloutView.modulemap @@ -0,0 +1,6 @@ +framework module SMCalloutView { + umbrella header "SMCalloutView-umbrella.h" + + export * + module * { export * } +} diff --git a/Pods/Target Support Files/SMCalloutView/SMCalloutView.xcconfig b/Pods/Target Support Files/SMCalloutView/SMCalloutView.xcconfig new file mode 100644 index 0000000..7164995 --- /dev/null +++ b/Pods/Target Support Files/SMCalloutView/SMCalloutView.xcconfig @@ -0,0 +1,9 @@ +CONFIGURATION_BUILD_DIR = $PODS_CONFIGURATION_BUILD_DIR/SMCalloutView +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Crashlytics" "${PODS_ROOT}/Headers/Public/Fabric" +PODS_BUILD_DIR = $BUILD_DIR +PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/SMCalloutView +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES