crossmate

A collaborative crossword app for iOS
Log | Files | Refs | LICENSE

project.pbxproj (119494B)


      1 // !$*UTF8*$!
      2 {
      3 	archiveVersion = 1;
      4 	classes = {
      5 	};
      6 	objectVersion = 77;
      7 	objects = {
      8 
      9 /* Begin PBXBuildFile section */
     10 		0063A5FC9F39E37A67F137FF /* GameListView.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED2D830B9EFAD753C233BEB4 /* GameListView.swift */; };
     11 		00A25F5D8DFF62EFA0C4D1D7 /* FriendEntity+DisplayName.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9F8D856707B4D76FDBF4AE69 /* FriendEntity+DisplayName.swift */; };
     12 		00F2108848ADC7B4BF3AA0AE /* PlayerSessionNavigationTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 46801B570FC0B2C791ECDED3 /* PlayerSessionNavigationTests.swift */; };
     13 		014134FB81566B5D41168260 /* PerGameZoneTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 283C5C97180C805B6C5BF622 /* PerGameZoneTests.swift */; };
     14 		0158184A413AE177F75B4150 /* JournalReplayTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 89B1FFD2F90141EA949A8540 /* JournalReplayTests.swift */; };
     15 		01D1B4C7303F1CA52438FF86 /* HardwareKeyboardInputView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6940546CFA1E87EF814AA6BB /* HardwareKeyboardInputView.swift */; };
     16 		0241DC498C645FE1BDA00FB0 /* NYTPuzzleFetcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = B0938B0ACB40772EE522D77C /* NYTPuzzleFetcher.swift */; };
     17 		025377AF80D45967CE910423 /* SyncMonitorTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0C190EA5717C291B3F2AE46C /* SyncMonitorTests.swift */; };
     18 		02943BA53D2130B910E6DC00 /* EnsureGameEntityTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 94CEBA27A8AC4FCC92ADE1B4 /* EnsureGameEntityTests.swift */; };
     19 		036EC1EDDEFD17DCDD9B5F1A /* ClueList.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B8B65482CA1739A3863A99E /* ClueList.swift */; };
     20 		04062BCD473ED244159B1066 /* PlayerRosterTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1813630FA05C194AFF43855C /* PlayerRosterTests.swift */; };
     21 		06AE6DF7AA3274480C591E47 /* EngagementStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = B09D52DB46731E92C3E9297C /* EngagementStore.swift */; };
     22 		07A46496EE0B12FD526F36FB /* SessionPushPlannerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8C040D5EBC73B1ED47C2C9D4 /* SessionPushPlannerTests.swift */; };
     23 		082B9BAADE3AFA54EFE30E19 /* PuzzleModifiers.swift in Sources */ = {isa = PBXBuildFile; fileRef = F5DF04E70017065DFA95B396 /* PuzzleModifiers.swift */; };
     24 		085B70680087464B8A7BA3EE /* GridSilhouetteTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF7062403AC9CFB4FF04BBF3 /* GridSilhouetteTests.swift */; };
     25 		0A7AEB93A473AFCCD9217F49 /* PuzzleSessionTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 362E3A93102B6C9AECD4133A /* PuzzleSessionTests.swift */; };
     26 		0C39CA21BE50E49F9F06C5F2 /* PlayerRoster.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3292748EAE27B608C769D393 /* PlayerRoster.swift */; };
     27 		0F2992C16A3A658DEA0F707E /* DiagnosticsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BCACEED6A9235EC6221F4F66 /* DiagnosticsView.swift */; };
     28 		1016604FBD4D63A0B9AAE503 /* CloudQuery.swift in Sources */ = {isa = PBXBuildFile; fileRef = 16AAC1E8D2CB3B5117159934 /* CloudQuery.swift */; };
     29 		128915DB37018EE4CC16C856 /* GameCursorStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8D2AD5021F1AF0DB44FA4540 /* GameCursorStore.swift */; };
     30 		13C0F34520828020AD825D07 /* JoiningPuzzleView.swift in Sources */ = {isa = PBXBuildFile; fileRef = E18FF14E0D73B0D2DB427F08 /* JoiningPuzzleView.swift */; };
     31 		14749A042380925B7CA902F2 /* XDMarkup.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAF18C52558DBD58ECAD4964 /* XDMarkup.swift */; };
     32 		15768439C1783A1780FBB824 /* SessionCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A7BD8DFDB41BFBA694A0933 /* SessionCoordinator.swift */; };
     33 		16D7328AE0BB1F7ED46235C8 /* GameEntity+ContentKey.swift in Sources */ = {isa = PBXBuildFile; fileRef = 24A4B5C8EC4A46906C07F819 /* GameEntity+ContentKey.swift */; };
     34 		17A754692F05B97DBDD645F2 /* PlayerSelection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6F0B4F65D017C1FBAC3B23DF /* PlayerSelection.swift */; };
     35 		18D5BB584DBF92A2EC580AEA /* NotificationNavigationBrokerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = FEDD63AD5E33E2B0399780EF /* NotificationNavigationBrokerTests.swift */; };
     36 		197DDF45C36B9570BB9AE4B5 /* AuthorIdentity.swift in Sources */ = {isa = PBXBuildFile; fileRef = B1F1471BE4D6D84361DD692B /* AuthorIdentity.swift */; };
     37 		1A19D13D9B820E276C60819E /* InputMonitor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6BDD06460A76D4AF31077732 /* InputMonitor.swift */; };
     38 		1A1A8A9AB36D02E2A5A9ED28 /* GameViewedStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = B9AE0F26E602A9246F5C6ABF /* GameViewedStore.swift */; };
     39 		1AAFF86B40CBBFF1EC9ADF9F /* GridThumbnailView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6B1F07B5DDE2A8B49B28392A /* GridThumbnailView.swift */; };
     40 		1D08DDEDEF5433912CC6D4DB /* GameViewedStoreTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9406C27662147CD3C0783644 /* GameViewedStoreTests.swift */; };
     41 		1F4E5473F78A5CEDBA9719CE /* NYTAuthService.swift in Sources */ = {isa = PBXBuildFile; fileRef = A253416F4FEA271A80B22A73 /* NYTAuthService.swift */; };
     42 		24F7ED458A1C09F8CF309B35 /* PuzzleNotificationText+GameEntity.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0DF9C2FEF0D3584864DFC967 /* PuzzleNotificationText+GameEntity.swift */; };
     43 		2571BA6482B3E896A80FF393 /* CompactSlider.swift in Sources */ = {isa = PBXBuildFile; fileRef = B024B2FFB11E51E9724BBE23 /* CompactSlider.swift */; };
     44 		262A9CE8C3CB93869190CFF1 /* GameStoreMergedAuthorCellsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 122BC1863D12DE06388D5DA7 /* GameStoreMergedAuthorCellsTests.swift */; };
     45 		2641299DE1F2E84E8C21E037 /* LogScrubberTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = C06E2CC3A77CB306BD2DF867 /* LogScrubberTests.swift */; };
     46 		267ED5B329F05A30430B73A0 /* EngagementHost.swift in Sources */ = {isa = PBXBuildFile; fileRef = 18C701DAE36000DE19F7CC95 /* EngagementHost.swift */; };
     47 		26DC22F88FA10C47BC06975E /* PersistenceRecoveryTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A467BC00116EEC8500BE6A1 /* PersistenceRecoveryTests.swift */; };
     48 		2A273C98FE3AC5E4C9BE1D88 /* PushPayloadCipherTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C793B5B9684D49328E42129 /* PushPayloadCipherTests.swift */; };
     49 		2AF2550B08CE79F8615B3076 /* FriendZone.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A4AFF292381C9B33C0F2CD6 /* FriendZone.swift */; };
     50 		2C0DFC182240A2519ED1FA6A /* GameMutatorTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFC1C59A30FB2571598273E4 /* GameMutatorTests.swift */; };
     51 		2C5A15054CCCBF9FD626AFBB /* GameStorePushAddressTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A56778AF8190F0D7EB2E27E /* GameStorePushAddressTests.swift */; };
     52 		2DD78CA0CD587AA4E5C4B178 /* PuzzleScoreboard.swift in Sources */ = {isa = PBXBuildFile; fileRef = A3A251D89028B3CA065DE053 /* PuzzleScoreboard.swift */; };
     53 		30703DDF575DCDA53227DA66 /* GamePushCredentialsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B5A8118AC2FE60D877F1D29 /* GamePushCredentialsTests.swift */; };
     54 		309457EC2DFEC476253D54D2 /* PlayerSelectionPublisherTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = FF159746D076E051C2CB590C /* PlayerSelectionPublisherTests.swift */; };
     55 		31F2B6A61ED352C7D800149F /* XDAcceptTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4F4EBC0F07FF815274C028CA /* XDAcceptTests.swift */; };
     56 		328309D8CC72CCB5623FB2A1 /* EngagementCoordinatorTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67CFF96D54D2DE9C44EB120A /* EngagementCoordinatorTests.swift */; };
     57 		350722635E9A17324148CACC /* PuzzleCatalog.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4DC7784917397BCD6B8D679D /* PuzzleCatalog.swift */; };
     58 		351CB23C537BAB61863D95F6 /* PuzzleNotificationText.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE7CEB8980A9664BAAA5D196 /* PuzzleNotificationText.swift */; };
     59 		35777D908A7D062730A18EF9 /* RecordEditorView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3EF436B410916399336AC106 /* RecordEditorView.swift */; };
     60 		35D97436772257DAD3936ECB /* TipStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8D4A76B233E16B7C5A248EB7 /* TipStore.swift */; };
     61 		36E2AAF1EE1314E13477EE85 /* NicknameDirectory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3111803C8FFFB0C839217482 /* NicknameDirectory.swift */; };
     62 		38C913D00ED762BD9E355A2D /* KeychainHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33878A29B09A6154C7A63C82 /* KeychainHelper.swift */; };
     63 		3A5483EF2893AE325DF27EE8 /* GameMutator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43DC132D49361C56DE79C13E /* GameMutator.swift */; };
     64 		3C54AE4AA04342CCF5705B20 /* PlayerNamePublisher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 71DFD035381B6252DCD873C9 /* PlayerNamePublisher.swift */; };
     65 		3C54B672A9FCA98C0A304470 /* TipsArchive.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9DC6394CB0F5B85C083FAC7 /* TipsArchive.swift */; };
     66 		41290C86E72D6567C43C31B7 /* ShareLinkShortenerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 057F2B8B8A894D08BB801219 /* ShareLinkShortenerTests.swift */; };
     67 		43E311FBD68B7D35A4D29743 /* PushPayload.swift in Sources */ = {isa = PBXBuildFile; fileRef = C2C9D3E7FCE2D42C5B7E3856 /* PushPayload.swift */; };
     68 		449B0A09A36B276C93CFB9A4 /* GameStoreUnreadMovesTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 31C534911020BE4ED2E5065D /* GameStoreUnreadMovesTests.swift */; };
     69 		44FF4A5334A4086DEA7D8A7B /* GameShareItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 663934F0B7CA8BDD462DFAA4 /* GameShareItem.swift */; };
     70 		47584CBEF819C2F507D06DFF /* PlayerColor.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB55FC337CF72C650373210A /* PlayerColor.swift */; };
     71 		4819D7FBB407C9D76510EA2A /* TestHelpers.swift in Sources */ = {isa = PBXBuildFile; fileRef = F97B399E89BBB37730F2F1E9 /* TestHelpers.swift */; };
     72 		4A89595E3F6AB50E1D9E6BA8 /* ImportService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 462CE0FD356F6137C9BFD30F /* ImportService.swift */; };
     73 		4B8CA45845618D75A3313816 /* GridSilhouette.swift in Sources */ = {isa = PBXBuildFile; fileRef = D16AC7215D0269195FEA8BA8 /* GridSilhouette.swift */; };
     74 		4D7BF839BA71E1BF0AE9BCE9 /* GameStoreContributingDevicesTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09EA25E2AE98ACD029EC0129 /* GameStoreContributingDevicesTests.swift */; };
     75 		4D90B39AD2F79959FB8089EE /* MovesUpdater.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7DD270E16E00145EF2807EA9 /* MovesUpdater.swift */; };
     76 		4D9E2C35893E68E47F790994 /* BundledBrowseView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7023E506D777DB80B18A7DB5 /* BundledBrowseView.swift */; };
     77 		4E14BB5D6F96D178373ED55A /* PeerChangeLedger.swift in Sources */ = {isa = PBXBuildFile; fileRef = B427285F8D6BE35025591BFA /* PeerChangeLedger.swift */; };
     78 		4F1A93404828EDBDBBF86716 /* SettingsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C6AB016CA4E2FC69A0E6A4F /* SettingsView.swift */; };
     79 		503229FF89FF7C29CEF4C16D /* Puzzle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 64C8064F04FC6177D987ACA2 /* Puzzle.swift */; };
     80 		50C02D37A41D55CFA5D307E2 /* NYTPuzzleUpgraderTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B34489D0864DF76AF436E391 /* NYTPuzzleUpgraderTests.swift */; };
     81 		51E6F7F2FC52C2AA87B9DB45 /* PeerPresenceGraceTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08E8592B1CB1336E63498706 /* PeerPresenceGraceTests.swift */; };
     82 		59230713D85AE6895852B06A /* InviteCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 10064D171DB7C48D3DE1E769 /* InviteCoordinator.swift */; };
     83 		5992AD4A06D7C6440825E9C6 /* GameArchiver.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1B7539E0AD285C5A3AC3DDA2 /* GameArchiver.swift */; };
     84 		5E89D1F8FDFE56395997281A /* NewGameSheet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09C81EFA0B7776CB9713CD63 /* NewGameSheet.swift */; };
     85 		5ECF5B80D08E5E999A540782 /* SessionMonitor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0EB332831AB173ACF6BFEC59 /* SessionMonitor.swift */; };
     86 		5EFCD28B3B682DCCF38068D6 /* AnnouncementCenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1D3ECD0DE71BE567BCEE15F6 /* AnnouncementCenter.swift */; };
     87 		5FB26F40F5DB52111E3D1BDC /* CheckResult.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0FD9A43789D0ED123F7A99B0 /* CheckResult.swift */; };
     88 		609364CB79E0C7517298B404 /* ContentKeyDirectory.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAFA466405AABA1C06272795 /* ContentKeyDirectory.swift */; };
     89 		61F8B38587EE49D376B53544 /* ReplayCacheTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 603E6FC55F1BD944592379D2 /* ReplayCacheTests.swift */; };
     90 		6850EAE474E589CE1EA2DF68 /* NicknameDirectoryTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 92168360625ECDD36FF50EE8 /* NicknameDirectoryTests.swift */; };
     91 		689DAEC70934027E76E8116E /* KeyboardView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3FDE73AD7C543B29C8E493F8 /* KeyboardView.swift */; };
     92 		6A1CA96FF48CBEEE78EA6D34 /* FriendModelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B766E872B12DC79ECCD80941 /* FriendModelTests.swift */; };
     93 		6AE88D9E1918508DBF2A91E1 /* NotificationState.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D2FD896D75863554E31654C /* NotificationState.swift */; };
     94 		6BE7E91158F4DF1F71247C6D /* CellMark.swift in Sources */ = {isa = PBXBuildFile; fileRef = B135C285570F91181595B405 /* CellMark.swift */; };
     95 		6C091D30AAC9F63B7CE6FB58 /* AnnouncementCenterTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 978A96CC6F550ED7A73F8D96 /* AnnouncementCenterTests.swift */; };
     96 		6D2AF361587E43D807BA212F /* NYTLoginView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1747D4DCB4BCC831069BBE07 /* NYTLoginView.swift */; };
     97 		6E36ED34ACF047BABB3E2D69 /* RecentChangesTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80B377D237AC14B9856579E1 /* RecentChangesTests.swift */; };
     98 		6E67C0DCB0416F382EA065B7 /* JournalUploadTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2DD9C72266D1BAC43C8976C0 /* JournalUploadTests.swift */; };
     99 		712A2764596A2D17A0BBBF3B /* FriendZoneTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 800CCFBE90554F287E765755 /* FriendZoneTests.swift */; };
    100 		7714B1C2FBCBBAD9BE8FEAF8 /* GameSummaryThumbnailTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = E5EEBF169823C172000FC45B /* GameSummaryThumbnailTests.swift */; };
    101 		77556FD9473A3F10FADF5E4E /* PersistenceController.swift in Sources */ = {isa = PBXBuildFile; fileRef = ACC295195602B3DDF7BB3895 /* PersistenceController.swift */; };
    102 		779D1955F350B507A47B1E5B /* ShareLinkShortener.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52B50A841D92D1F2B173E7DF /* ShareLinkShortener.swift */; };
    103 		786813F3418C32EFBF296220 /* XDMarkupTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9FE0A9624DB87758F3D1768 /* XDMarkupTests.swift */; };
    104 		78802AFDF6273231781CC0DC /* AppServices.swift in Sources */ = {isa = PBXBuildFile; fileRef = CBDC81CA6A9C80EB31E7F493 /* AppServices.swift */; };
    105 		7BD1A9F69953F9C3288969AF /* PlayerRecordPresenceTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C838C184A0C7B1B0A9821CE /* PlayerRecordPresenceTests.swift */; };
    106 		7D4A56FBB1C5D5F89271B77F /* NotificationService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 507B4DC893CE8AC4778CBACE /* NotificationService.swift */; };
    107 		7D9337A19747C79070AB3D59 /* InviteEntity+DisplayName.swift in Sources */ = {isa = PBXBuildFile; fileRef = E25A040EA4DC9672C895A7AC /* InviteEntity+DisplayName.swift */; };
    108 		7FCD3F582B5ADC235E1F88A0 /* PuzzleNotificationTextTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = C90E94A01FEA77A5C9A2BC94 /* PuzzleNotificationTextTests.swift */; };
    109 		7FFEACFC672925A0968ACC1C /* XD.swift in Sources */ = {isa = PBXBuildFile; fileRef = B9031A1574C21866940F6A2C /* XD.swift */; };
    110 		8225918652DCC822CA1C862F /* PendingEditFlagTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D491B7232333AA8957732387 /* PendingEditFlagTests.swift */; };
    111 		82918A74836E5076CBFA1592 /* SyncEngine.swift in Sources */ = {isa = PBXBuildFile; fileRef = 73DDDED719CFFDD6035C3B48 /* SyncEngine.swift */; };
    112 		85A798525FE1DC98210A9E82 /* GameCursorStoreTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 60E818B0F4689BAD57660B7C /* GameCursorStoreTests.swift */; };
    113 		85B9BAC5ED404FE4496250CB /* NYTPuzzleUpgrader.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE54EF557E8D808BAA20EA54 /* NYTPuzzleUpgrader.swift */; };
    114 		884BC090D4E2D416AA52D6FD /* FriendPickerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = E78C275F8A90E3E3EEF190CC /* FriendPickerView.swift */; };
    115 		88A34C8857B2B3D45A6FBCB2 /* PuzzleSession.swift in Sources */ = {isa = PBXBuildFile; fileRef = 710BCB6A647A820B106CE666 /* PuzzleSession.swift */; };
    116 		88BACA1689459AC9AED20D43 /* NotificationState.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D2FD896D75863554E31654C /* NotificationState.swift */; };
    117 		89CEDB8864F61E42AC04F9D6 /* RecordSerializerMovesTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 443BF6DF77C8226313EE9564 /* RecordSerializerMovesTests.swift */; };
    118 		8AE376C0726116082B15241D /* ShareLinkRouteTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5990D989AD745211A18848E4 /* ShareLinkRouteTests.swift */; };
    119 		8B356C953DA0FAF149C3391A /* Puzzles in Resources */ = {isa = PBXBuildFile; fileRef = BA67C509B467132D1B7510A4 /* Puzzles */; };
    120 		8D8A9F70731C98DD00BE1DA5 /* Layouts.swift in Sources */ = {isa = PBXBuildFile; fileRef = 836B8D4B351C9225162A82C0 /* Layouts.swift */; };
    121 		8F5CB2F94E083D06D7E04280 /* PlayerSession.swift in Sources */ = {isa = PBXBuildFile; fileRef = 20B331CC55827FEF3420ABCE /* PlayerSession.swift */; };
    122 		8FEE38B2B540F0E91560747F /* PushPayloadCipher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33DE10D2A5AFBAC73469BD33 /* PushPayloadCipher.swift */; };
    123 		903681985C17FCB5F97773A9 /* OpenPuzzleBannerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8CA0FC750259EB1D762B0EE /* OpenPuzzleBannerTests.swift */; };
    124 		91703E54DB4679C1911BF994 /* Moves.swift in Sources */ = {isa = PBXBuildFile; fileRef = 86470163BFF956F3DE438506 /* Moves.swift */; };
    125 		924B29C1EEB29F849A6824C3 /* AboutView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74C8886A66F0877858A67D62 /* AboutView.swift */; };
    126 		931431F8052FC58768C9BC26 /* FriendControllerNicknameReplayTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E2702C74378FD2F14D1CE33 /* FriendControllerNicknameReplayTests.swift */; };
    127 		93DB3DD9A8EE994B92E7C084 /* GridView.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED48AD9C3A7A113D101BBD21 /* GridView.swift */; };
    128 		9502840161DB88BB6BB409D5 /* Journal.swift in Sources */ = {isa = PBXBuildFile; fileRef = CF3D29B227D2B0E699423C48 /* Journal.swift */; };
    129 		95170ECF07E94E7581C2B66F /* ContentKeyDirectory.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAFA466405AABA1C06272795 /* ContentKeyDirectory.swift */; };
    130 		9582AA583F5EA008FFC82B64 /* ZoneOrphaningTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9A01534A21796A4EC7113A9 /* ZoneOrphaningTests.swift */; };
    131 		95B4083F8BC2CA465077A662 /* PlayerColorTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 23FCFFF1C2C7E909DFD8FC43 /* PlayerColorTests.swift */; };
    132 		9789150602A3321D2E1E7E81 /* Media.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 0BF60C84D92A9024AC1A53FC /* Media.xcassets */; };
    133 		978F91DBAE94BC5DA1D94705 /* DriveMonitor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 70AD1A006E6D03E4429E3BF0 /* DriveMonitor.swift */; };
    134 		98F8FBF324ED00D53FEBB1DB /* Game.swift in Sources */ = {isa = PBXBuildFile; fileRef = 465F2BB469EFE84CF3733398 /* Game.swift */; };
    135 		9AACF424992AE45FD7937064 /* GameStoreCompletionLockTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E230B327585E1E3A2921C92 /* GameStoreCompletionLockTests.swift */; };
    136 		9AD5700398B1C1F29A3A75F6 /* TipStoreTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8D6991C1EBAB2C64D9DF669 /* TipStoreTests.swift */; };
    137 		9AD8936D94FD676B23DFBB77 /* RecentChanges.swift in Sources */ = {isa = PBXBuildFile; fileRef = 605CA0FC7AF069CE3A3B38C1 /* RecentChanges.swift */; };
    138 		9C52C48DB4996D5C83DEC144 /* PuzzleView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 57B1734CF731C2E405A39159 /* PuzzleView.swift */; };
    139 		9CB8808193A4A106D721D767 /* XDFileType.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAC61E2582D94B1E6EC67136 /* XDFileType.swift */; };
    140 		9FFD01CF6767220EEA20C0E4 /* GamePushCredentials.swift in Sources */ = {isa = PBXBuildFile; fileRef = 78919F44C3035C48410FC894 /* GamePushCredentials.swift */; };
    141 		A0977C7B0B0D928DA569C326 /* NicknameDirectory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3111803C8FFFB0C839217482 /* NicknameDirectory.swift */; };
    142 		A133A4B4A0C95AF8708BD7E6 /* PushClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8A9F9E7ED4E1AF02F0C71051 /* PushClient.swift */; };
    143 		A22113A51213068FBF708A56 /* CellView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9D25D12FF374F83BF4DB83DD /* CellView.swift */; };
    144 		A458AF9CA8579AB51B695B08 /* PendingChangeReapTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BAEDA3C3765CD8D8897FE5D5 /* PendingChangeReapTests.swift */; };
    145 		A65F99414F8CF6704567BB07 /* Archive.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8C18E9B47668E008BE4CF86 /* Archive.swift */; };
    146 		A78FF09708EDED7ED50BB55B /* PushPayloadTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = E87E28DC9402A4369647DE50 /* PushPayloadTests.swift */; };
    147 		A7FA870D794CA00F7F3F05D2 /* EngagementHostEnvironment.swift in Sources */ = {isa = PBXBuildFile; fileRef = 400B3C87248F3FCA3F76400B /* EngagementHostEnvironment.swift */; };
    148 		A87E5E615559B6461B1C3F94 /* AnnouncementBanner.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD68E9CA9D3057FE07E985E1 /* AnnouncementBanner.swift */; };
    149 		A98382E7659991FAF0F4ED0A /* AuthorIdentityTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 457B06DBFDC358D213A7CE54 /* AuthorIdentityTests.swift */; };
    150 		AA38A51862FC0AB8F7D34899 /* NYTToXDConverterTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = C54223FED97577A593B7964E /* NYTToXDConverterTests.swift */; };
    151 		AACC9F70AEEDCB3360FFDEFF /* GridStateMergerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C7F3A9BD7FAF81CB77032A6 /* GridStateMergerTests.swift */; };
    152 		AB6D98C7A78D91D7BEFB4A4C /* MarketingPuzzleScreenshotView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8AEFE2C7623A899BAABD85F4 /* MarketingPuzzleScreenshotView.swift */; };
    153 		ADBEAD1C0139BCF864CA8A1D /* PuzzleCommands.swift in Sources */ = {isa = PBXBuildFile; fileRef = 89528AF69DE06C61FA8E91A1 /* PuzzleCommands.swift */; };
    154 		AE5D8C531F89F05B7201B3AC /* SessionMonitorTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = F64DAE64C9AA042B330C526F /* SessionMonitorTests.swift */; };
    155 		AF4F1AE2A1F94E92C785C524 /* Square.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB851649DE78AAAC5A928C52 /* Square.swift */; };
    156 		B00743DAF8F46F14CE13E909 /* FriendsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 298A9C54A1CC753E860E174E /* FriendsView.swift */; };
    157 		B0170C8927EDD2E43F849204 /* TimeLog.swift in Sources */ = {isa = PBXBuildFile; fileRef = AFFB5B2EFBB62B7021AC2FC2 /* TimeLog.swift */; };
    158 		B48DE7079BE2F31D2367C5F7 /* SessionPushPlanner.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA49DA9E0ADEB11A920787FA /* SessionPushPlanner.swift */; };
    159 		B5F78A55C9BCCD24E44D865F /* JournalReplay.swift in Sources */ = {isa = PBXBuildFile; fileRef = 27ECEA51DE42D07495744EF8 /* JournalReplay.swift */; };
    160 		B6AB531F4E0C4031B627C539 /* PlayerSelectionPublisher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11BF168D5C1CD85DAE5CAF9E /* PlayerSelectionPublisher.swift */; };
    161 		B762200F54C52E8377A80D15 /* NYTToXDConverter.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF6F111BE8750697C4BC7A17 /* NYTToXDConverter.swift */; };
    162 		BAB41DBF7D099B1EE46B4ACB /* ClueBar.swift in Sources */ = {isa = PBXBuildFile; fileRef = E935CE4384F3B67CC22EEBAC /* ClueBar.swift */; };
    163 		BCB9A4D5E06EE5006186465D /* ShareController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C74683332956B0D1CA37589 /* ShareController.swift */; };
    164 		BD317ECC09C9099AC29B8C5D /* FriendAvatarView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 065CD67A1D9F7B63AE6B42D6 /* FriendAvatarView.swift */; };
    165 		BE57957589423497338EBD37 /* ShareRoutingTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 68072F4F3EB5D5A78E03D408 /* ShareRoutingTests.swift */; };
    166 		C1930083671621AC79CF95DD /* MovesUpdaterTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9AF6157D97271205626E207C /* MovesUpdaterTests.swift */; };
    167 		C1D97A4CD02BC9C22C4208BB /* NYTAuthServiceTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED8154F949E1D94252F70765 /* NYTAuthServiceTests.swift */; };
    168 		C30C0C4E54E4209A22843872 /* CrossmateModel.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = F93AC31640C40FCC039570A3 /* CrossmateModel.xcdatamodeld */; };
    169 		C472EF02D8C7B0AC1D2284B8 /* CustomButtons.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9B757D86362CD6F0500E9CB /* CustomButtons.swift */; };
    170 		C511387D9FFBCC2E2F5EF699 /* NotificationService.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = 51318FC5DAE02D35CB005729 /* NotificationService.appex */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
    171 		C58F15CBEADA72032B54009D /* ReplayControlsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 847415468DBB1C566D18BC17 /* ReplayControlsTests.swift */; };
    172 		C843CADAA263CED503528A4E /* NYTBrowseView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3413F8755236FC0578AF8109 /* NYTBrowseView.swift */; };
    173 		C89A15D812E372FE1C56039B /* PUZToXDConverterTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = FDE193CAB325C991952D7CE5 /* PUZToXDConverterTests.swift */; };
    174 		C8ACF431021E7BEE61A99153 /* FriendController.swift in Sources */ = {isa = PBXBuildFile; fileRef = E655698481325C92EF5C348B /* FriendController.swift */; };
    175 		C9864C9940C9DAAD0A788094 /* ReplayLoader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3FFD574AC2D0A910053E2A73 /* ReplayLoader.swift */; };
    176 		CABF8BFAA30B9F26C482FAB9 /* EngagementCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8FDE03B4A77A8095ED2C23AB /* EngagementCoordinator.swift */; };
    177 		CC250D6BA9B41CB722D8A62E /* CloudService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 56BC76178319D0D669CD50FF /* CloudService.swift */; };
    178 		CCF3867C32C3F36E4F69A59E /* DebuggingMonitors.swift in Sources */ = {isa = PBXBuildFile; fileRef = 16E1DA8C1B4E73AFB779CC06 /* DebuggingMonitors.swift */; };
    179 		CEDF853009D0C367035F1F76 /* PlayerNamePublisherTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5DE04D53EC3BC7D2DA0093C3 /* PlayerNamePublisherTests.swift */; };
    180 		CF0CA17ABE211DAE4DD35AFD /* RecordSerializer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0C0A7348E1283E7CD2486E2A /* RecordSerializer.swift */; };
    181 		CF1DC343A5D3110EDFA703AB /* LastUpdatedView.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF3B7E191D571FD800A4D719 /* LastUpdatedView.swift */; };
    182 		CF56BBB90855367CB85FEB43 /* PUZToXDConverter.swift in Sources */ = {isa = PBXBuildFile; fileRef = B369788E0FEA0DCE1B125816 /* PUZToXDConverter.swift */; };
    183 		D13ECFAE05DB508577D2FF66 /* RecordBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5267DDA1A330DCBD07303D44 /* RecordBuilder.swift */; };
    184 		D240BF6498A9148855DB7734 /* EngagementLifecycle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4DB0580C9B7C778F34BE6AC2 /* EngagementLifecycle.swift */; };
    185 		D2AC1D9BD7E387B06B9B8A0E /* PuzzleHeader.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADBA3FB1334DB816E62B7D9B /* PuzzleHeader.swift */; };
    186 		D4EDC0D426688B295DA77C08 /* ShareLinkRoute.swift in Sources */ = {isa = PBXBuildFile; fileRef = E2ED0D601BB574618C15B5EF /* ShareLinkRoute.swift */; };
    187 		D5022BFB2F8F2E5904EDF5C8 /* GameCardView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6F34401948BC53DA9C93D64B /* GameCardView.swift */; };
    188 		D519F54F8CE0BD53D9C6144C /* AppServicesAnnouncementTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9998739ED0875A17271B7899 /* AppServicesAnnouncementTests.swift */; };
    189 		D58980B92C99122C368D4216 /* GameStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 93EE5BA78566EDED68D846AB /* GameStore.swift */; };
    190 		D94FF5DFB9412D2DC24F6574 /* RecordApplier.swift in Sources */ = {isa = PBXBuildFile; fileRef = BD63A9B20168F3B81AF4348F /* RecordApplier.swift */; };
    191 		DAD7EA11DA7330773A485473 /* PeerChangeLedgerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D243575E32A8663B1AAF492A /* PeerChangeLedgerTests.swift */; };
    192 		DB098F40C6950E29B4BF10A7 /* ArchiveTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B9EA9CF96312BFF5340CE2A7 /* ArchiveTests.swift */; };
    193 		DDC7994B951A3A7B836B36F6 /* SuccessPanel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 41A62DA6F7138876CA5A27EF /* SuccessPanel.swift */; };
    194 		DE90CC8BE23A0EFC4A32FFA5 /* MovesInboundTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = EF1254FE7BE3672AEC1607B1 /* MovesInboundTests.swift */; };
    195 		DE9E4FAB098731A650F2D306 /* CrossmateApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 14F2AC5C3B50F4178859E9AC /* CrossmateApp.swift */; };
    196 		E15A40AA623B60279E8DDF43 /* CloudDiagnostics.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07E5E4B165E374FEE732068B /* CloudDiagnostics.swift */; };
    197 		E16A8FE849A8E8BCC0F32280 /* CloudZones.swift in Sources */ = {isa = PBXBuildFile; fileRef = 44F86F0F1883A93F9622FB67 /* CloudZones.swift */; };
    198 		E1FBC33E3348547D4DF946C4 /* ReplayControls.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50EE8A159CC553623F6F7DE4 /* ReplayControls.swift */; };
    199 		E354A588DBA74627A9CD5591 /* Presence.swift in Sources */ = {isa = PBXBuildFile; fileRef = CFC4FF046BF772646B5CA73F /* Presence.swift */; };
    200 		E454051BA4797000C8AD2B48 /* MovesCodecLegacyDecodeTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B33C21324E1474BCC126AA0 /* MovesCodecLegacyDecodeTests.swift */; };
    201 		E632562D090D8BE907F28C53 /* NotificationStateTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47532AED239AEF476D8E9206 /* NotificationStateTests.swift */; };
    202 		E6A13F8736ABF41F6346E301 /* ParticipantSummaries.swift in Sources */ = {isa = PBXBuildFile; fileRef = FED7C2528355BC007E48B7EF /* ParticipantSummaries.swift */; };
    203 		E81F92AAB2968997C3D68809 /* PuzzleNotificationText.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE7CEB8980A9664BAAA5D196 /* PuzzleNotificationText.swift */; };
    204 		E91FB8101E1927CA567DE825 /* PuzzleSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = E7AFD37B03A1C2E23E5766E6 /* PuzzleSource.swift */; };
    205 		EA0AA522F6C383034C4572F4 /* AccountPushCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 03D59EA74A4BA084AD97478D /* AccountPushCoordinator.swift */; };
    206 		EB6E99226D5EE27668787008 /* BadgeCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D5B1E8E12B86DF6CA478F65 /* BadgeCoordinator.swift */; };
    207 		ECC1A5C3623F50B67185CFFB /* RecordSerializerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7E4DEAF9F7887CBB46A99E8E /* RecordSerializerTests.swift */; };
    208 		ED6C21CD9F5AB286B69A02E4 /* GridStateMerger.swift in Sources */ = {isa = PBXBuildFile; fileRef = 14B05C19BD4705876B3DF0EC /* GridStateMerger.swift */; };
    209 		F15591B48E4155CB19C1F084 /* TimeLogTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = C7F35A7BFE52279BC24677F5 /* TimeLogTests.swift */; };
    210 		F2F7CB23DA62BF714632B097 /* PushRequestAuthenticator.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAF6E3F3558E128E7A482A61 /* PushRequestAuthenticator.swift */; };
    211 		F34EDFD45E2F5006807DDAC7 /* PuzzleCatalogTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B8560440C548752EE93E0ED9 /* PuzzleCatalogTests.swift */; };
    212 		F46733AB3C72749A4A992667 /* SyncState+Helpers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A49C3C31F49A85764B84A15 /* SyncState+Helpers.swift */; };
    213 		F5F333B36654AEAF69A3C220 /* MovesJournalTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 78C92190C4A344EC319A0F88 /* MovesJournalTests.swift */; };
    214 		F627D68B521FEA85EB80A850 /* CalendarDayCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = CF20BDF7FF6423BA4FD911D5 /* CalendarDayCell.swift */; };
    215 		F8A4B3A1F9601654C60550B3 /* PushPayload.swift in Sources */ = {isa = PBXBuildFile; fileRef = C2C9D3E7FCE2D42C5B7E3856 /* PushPayload.swift */; };
    216 		F8D37DBE75D7B3F039A8FAC8 /* ImportedBrowseView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A832061C19BA0F073617CA2 /* ImportedBrowseView.swift */; };
    217 		F8DDA34AC1A6B6499C5D222E /* PlayerPreferences.swift in Sources */ = {isa = PBXBuildFile; fileRef = 46148CF0F4D719692F81A6EC /* PlayerPreferences.swift */; };
    218 		FC480FE2930EAE406F5BBBDA /* GameRowView.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBD2570A5A3573D66B3C4A52 /* GameRowView.swift */; };
    219 		FC4853B4261B06945D0D1470 /* PushPayloadCipher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33DE10D2A5AFBAC73469BD33 /* PushPayloadCipher.swift */; };
    220 /* End PBXBuildFile section */
    221 
    222 /* Begin PBXContainerItemProxy section */
    223 		0751E0359C340223ADBA2B05 /* PBXContainerItemProxy */ = {
    224 			isa = PBXContainerItemProxy;
    225 			containerPortal = 9167165F088B7698D1319D3C /* Project object */;
    226 			proxyType = 1;
    227 			remoteGlobalIDString = 350366A68B75DC4BDA91F8E5;
    228 			remoteInfo = NotificationService;
    229 		};
    230 		F0122CF3E216720C4437CE6A /* PBXContainerItemProxy */ = {
    231 			isa = PBXContainerItemProxy;
    232 			containerPortal = 9167165F088B7698D1319D3C /* Project object */;
    233 			proxyType = 1;
    234 			remoteGlobalIDString = 7708D1C8A0145D43BD15DEB7;
    235 			remoteInfo = Crossmate;
    236 		};
    237 /* End PBXContainerItemProxy section */
    238 
    239 /* Begin PBXCopyFilesBuildPhase section */
    240 		2768812850886EB633B6C27C /* Embed Foundation Extensions */ = {
    241 			isa = PBXCopyFilesBuildPhase;
    242 			buildActionMask = 2147483647;
    243 			dstPath = "";
    244 			dstSubfolderSpec = 13;
    245 			files = (
    246 				C511387D9FFBCC2E2F5EF699 /* NotificationService.appex in Embed Foundation Extensions */,
    247 			);
    248 			name = "Embed Foundation Extensions";
    249 			runOnlyForDeploymentPostprocessing = 0;
    250 		};
    251 /* End PBXCopyFilesBuildPhase section */
    252 
    253 /* Begin PBXFileReference section */
    254 		03D59EA74A4BA084AD97478D /* AccountPushCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AccountPushCoordinator.swift; sourceTree = "<group>"; };
    255 		057F2B8B8A894D08BB801219 /* ShareLinkShortenerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShareLinkShortenerTests.swift; sourceTree = "<group>"; };
    256 		065CD67A1D9F7B63AE6B42D6 /* FriendAvatarView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FriendAvatarView.swift; sourceTree = "<group>"; };
    257 		07E5E4B165E374FEE732068B /* CloudDiagnostics.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CloudDiagnostics.swift; sourceTree = "<group>"; };
    258 		08E8592B1CB1336E63498706 /* PeerPresenceGraceTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PeerPresenceGraceTests.swift; sourceTree = "<group>"; };
    259 		09C81EFA0B7776CB9713CD63 /* NewGameSheet.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NewGameSheet.swift; sourceTree = "<group>"; };
    260 		09EA25E2AE98ACD029EC0129 /* GameStoreContributingDevicesTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GameStoreContributingDevicesTests.swift; sourceTree = "<group>"; };
    261 		0BDC16DA7F762F4C5F4BED14 /* Config.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Config.xcconfig; sourceTree = "<group>"; };
    262 		0BF60C84D92A9024AC1A53FC /* Media.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Media.xcassets; sourceTree = "<group>"; };
    263 		0C0A7348E1283E7CD2486E2A /* RecordSerializer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RecordSerializer.swift; sourceTree = "<group>"; };
    264 		0C190EA5717C291B3F2AE46C /* SyncMonitorTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SyncMonitorTests.swift; sourceTree = "<group>"; };
    265 		0DF9C2FEF0D3584864DFC967 /* PuzzleNotificationText+GameEntity.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "PuzzleNotificationText+GameEntity.swift"; sourceTree = "<group>"; };
    266 		0E230B327585E1E3A2921C92 /* GameStoreCompletionLockTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GameStoreCompletionLockTests.swift; sourceTree = "<group>"; };
    267 		0EB332831AB173ACF6BFEC59 /* SessionMonitor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SessionMonitor.swift; sourceTree = "<group>"; };
    268 		0FD9A43789D0ED123F7A99B0 /* CheckResult.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CheckResult.swift; sourceTree = "<group>"; };
    269 		10064D171DB7C48D3DE1E769 /* InviteCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InviteCoordinator.swift; sourceTree = "<group>"; };
    270 		11BF168D5C1CD85DAE5CAF9E /* PlayerSelectionPublisher.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PlayerSelectionPublisher.swift; sourceTree = "<group>"; };
    271 		122BC1863D12DE06388D5DA7 /* GameStoreMergedAuthorCellsTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GameStoreMergedAuthorCellsTests.swift; sourceTree = "<group>"; };
    272 		14B05C19BD4705876B3DF0EC /* GridStateMerger.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GridStateMerger.swift; sourceTree = "<group>"; };
    273 		14F2AC5C3B50F4178859E9AC /* CrossmateApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CrossmateApp.swift; sourceTree = "<group>"; };
    274 		16AAC1E8D2CB3B5117159934 /* CloudQuery.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CloudQuery.swift; sourceTree = "<group>"; };
    275 		16E1DA8C1B4E73AFB779CC06 /* DebuggingMonitors.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DebuggingMonitors.swift; sourceTree = "<group>"; };
    276 		1747D4DCB4BCC831069BBE07 /* NYTLoginView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NYTLoginView.swift; sourceTree = "<group>"; };
    277 		1813630FA05C194AFF43855C /* PlayerRosterTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PlayerRosterTests.swift; sourceTree = "<group>"; };
    278 		18C701DAE36000DE19F7CC95 /* EngagementHost.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EngagementHost.swift; sourceTree = "<group>"; };
    279 		1B7539E0AD285C5A3AC3DDA2 /* GameArchiver.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GameArchiver.swift; sourceTree = "<group>"; };
    280 		1D3ECD0DE71BE567BCEE15F6 /* AnnouncementCenter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AnnouncementCenter.swift; sourceTree = "<group>"; };
    281 		20B331CC55827FEF3420ABCE /* PlayerSession.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PlayerSession.swift; sourceTree = "<group>"; };
    282 		23FCFFF1C2C7E909DFD8FC43 /* PlayerColorTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PlayerColorTests.swift; sourceTree = "<group>"; };
    283 		24A4B5C8EC4A46906C07F819 /* GameEntity+ContentKey.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "GameEntity+ContentKey.swift"; sourceTree = "<group>"; };
    284 		27ECEA51DE42D07495744EF8 /* JournalReplay.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JournalReplay.swift; sourceTree = "<group>"; };
    285 		283C5C97180C805B6C5BF622 /* PerGameZoneTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PerGameZoneTests.swift; sourceTree = "<group>"; };
    286 		298A9C54A1CC753E860E174E /* FriendsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FriendsView.swift; sourceTree = "<group>"; };
    287 		2A832061C19BA0F073617CA2 /* ImportedBrowseView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ImportedBrowseView.swift; sourceTree = "<group>"; };
    288 		2D2FD896D75863554E31654C /* NotificationState.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationState.swift; sourceTree = "<group>"; };
    289 		2D5B1E8E12B86DF6CA478F65 /* BadgeCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BadgeCoordinator.swift; sourceTree = "<group>"; };
    290 		2DD9C72266D1BAC43C8976C0 /* JournalUploadTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JournalUploadTests.swift; sourceTree = "<group>"; };
    291 		2E2702C74378FD2F14D1CE33 /* FriendControllerNicknameReplayTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FriendControllerNicknameReplayTests.swift; sourceTree = "<group>"; };
    292 		3111803C8FFFB0C839217482 /* NicknameDirectory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NicknameDirectory.swift; sourceTree = "<group>"; };
    293 		31C534911020BE4ED2E5065D /* GameStoreUnreadMovesTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GameStoreUnreadMovesTests.swift; sourceTree = "<group>"; };
    294 		3292748EAE27B608C769D393 /* PlayerRoster.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PlayerRoster.swift; sourceTree = "<group>"; };
    295 		33878A29B09A6154C7A63C82 /* KeychainHelper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KeychainHelper.swift; sourceTree = "<group>"; };
    296 		33DE10D2A5AFBAC73469BD33 /* PushPayloadCipher.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PushPayloadCipher.swift; sourceTree = "<group>"; };
    297 		3413F8755236FC0578AF8109 /* NYTBrowseView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NYTBrowseView.swift; sourceTree = "<group>"; };
    298 		362E3A93102B6C9AECD4133A /* PuzzleSessionTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PuzzleSessionTests.swift; sourceTree = "<group>"; };
    299 		3EF436B410916399336AC106 /* RecordEditorView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RecordEditorView.swift; sourceTree = "<group>"; };
    300 		3FDE73AD7C543B29C8E493F8 /* KeyboardView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KeyboardView.swift; sourceTree = "<group>"; };
    301 		3FFD574AC2D0A910053E2A73 /* ReplayLoader.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReplayLoader.swift; sourceTree = "<group>"; };
    302 		400B3C87248F3FCA3F76400B /* EngagementHostEnvironment.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EngagementHostEnvironment.swift; sourceTree = "<group>"; };
    303 		41A62DA6F7138876CA5A27EF /* SuccessPanel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SuccessPanel.swift; sourceTree = "<group>"; };
    304 		43DC132D49361C56DE79C13E /* GameMutator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GameMutator.swift; sourceTree = "<group>"; };
    305 		443BF6DF77C8226313EE9564 /* RecordSerializerMovesTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RecordSerializerMovesTests.swift; sourceTree = "<group>"; };
    306 		44F86F0F1883A93F9622FB67 /* CloudZones.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CloudZones.swift; sourceTree = "<group>"; };
    307 		457B06DBFDC358D213A7CE54 /* AuthorIdentityTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AuthorIdentityTests.swift; sourceTree = "<group>"; };
    308 		46148CF0F4D719692F81A6EC /* PlayerPreferences.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PlayerPreferences.swift; sourceTree = "<group>"; };
    309 		462CE0FD356F6137C9BFD30F /* ImportService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ImportService.swift; sourceTree = "<group>"; };
    310 		465F2BB469EFE84CF3733398 /* Game.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Game.swift; sourceTree = "<group>"; };
    311 		46801B570FC0B2C791ECDED3 /* PlayerSessionNavigationTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PlayerSessionNavigationTests.swift; sourceTree = "<group>"; };
    312 		47532AED239AEF476D8E9206 /* NotificationStateTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationStateTests.swift; sourceTree = "<group>"; };
    313 		4A467BC00116EEC8500BE6A1 /* PersistenceRecoveryTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PersistenceRecoveryTests.swift; sourceTree = "<group>"; };
    314 		4B33C21324E1474BCC126AA0 /* MovesCodecLegacyDecodeTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MovesCodecLegacyDecodeTests.swift; sourceTree = "<group>"; };
    315 		4DB0580C9B7C778F34BE6AC2 /* EngagementLifecycle.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EngagementLifecycle.swift; sourceTree = "<group>"; };
    316 		4DC7784917397BCD6B8D679D /* PuzzleCatalog.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PuzzleCatalog.swift; sourceTree = "<group>"; };
    317 		4F4EBC0F07FF815274C028CA /* XDAcceptTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = XDAcceptTests.swift; sourceTree = "<group>"; };
    318 		507B4DC893CE8AC4778CBACE /* NotificationService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationService.swift; sourceTree = "<group>"; };
    319 		50EE8A159CC553623F6F7DE4 /* ReplayControls.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReplayControls.swift; sourceTree = "<group>"; };
    320 		51318FC5DAE02D35CB005729 /* NotificationService.appex */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = "wrapper.app-extension"; path = NotificationService.appex; sourceTree = BUILT_PRODUCTS_DIR; };
    321 		5267DDA1A330DCBD07303D44 /* RecordBuilder.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RecordBuilder.swift; sourceTree = "<group>"; };
    322 		52B50A841D92D1F2B173E7DF /* ShareLinkShortener.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShareLinkShortener.swift; sourceTree = "<group>"; };
    323 		56BC76178319D0D669CD50FF /* CloudService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CloudService.swift; sourceTree = "<group>"; };
    324 		57B1734CF731C2E405A39159 /* PuzzleView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PuzzleView.swift; sourceTree = "<group>"; };
    325 		5990D989AD745211A18848E4 /* ShareLinkRouteTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShareLinkRouteTests.swift; sourceTree = "<group>"; };
    326 		5C74683332956B0D1CA37589 /* ShareController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShareController.swift; sourceTree = "<group>"; };
    327 		5C838C184A0C7B1B0A9821CE /* PlayerRecordPresenceTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PlayerRecordPresenceTests.swift; sourceTree = "<group>"; };
    328 		5DE04D53EC3BC7D2DA0093C3 /* PlayerNamePublisherTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PlayerNamePublisherTests.swift; sourceTree = "<group>"; };
    329 		603E6FC55F1BD944592379D2 /* ReplayCacheTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReplayCacheTests.swift; sourceTree = "<group>"; };
    330 		605CA0FC7AF069CE3A3B38C1 /* RecentChanges.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RecentChanges.swift; sourceTree = "<group>"; };
    331 		60E818B0F4689BAD57660B7C /* GameCursorStoreTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GameCursorStoreTests.swift; sourceTree = "<group>"; };
    332 		64C8064F04FC6177D987ACA2 /* Puzzle.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Puzzle.swift; sourceTree = "<group>"; };
    333 		663934F0B7CA8BDD462DFAA4 /* GameShareItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GameShareItem.swift; sourceTree = "<group>"; };
    334 		67CFF96D54D2DE9C44EB120A /* EngagementCoordinatorTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EngagementCoordinatorTests.swift; sourceTree = "<group>"; };
    335 		68072F4F3EB5D5A78E03D408 /* ShareRoutingTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShareRoutingTests.swift; sourceTree = "<group>"; };
    336 		6940546CFA1E87EF814AA6BB /* HardwareKeyboardInputView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HardwareKeyboardInputView.swift; sourceTree = "<group>"; };
    337 		6B1F07B5DDE2A8B49B28392A /* GridThumbnailView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GridThumbnailView.swift; sourceTree = "<group>"; };
    338 		6BDD06460A76D4AF31077732 /* InputMonitor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InputMonitor.swift; sourceTree = "<group>"; };
    339 		6C793B5B9684D49328E42129 /* PushPayloadCipherTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PushPayloadCipherTests.swift; sourceTree = "<group>"; };
    340 		6C7F3A9BD7FAF81CB77032A6 /* GridStateMergerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GridStateMergerTests.swift; sourceTree = "<group>"; };
    341 		6F0B4F65D017C1FBAC3B23DF /* PlayerSelection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PlayerSelection.swift; sourceTree = "<group>"; };
    342 		6F34401948BC53DA9C93D64B /* GameCardView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GameCardView.swift; sourceTree = "<group>"; };
    343 		7023E506D777DB80B18A7DB5 /* BundledBrowseView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BundledBrowseView.swift; sourceTree = "<group>"; };
    344 		70AD1A006E6D03E4429E3BF0 /* DriveMonitor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DriveMonitor.swift; sourceTree = "<group>"; };
    345 		710BCB6A647A820B106CE666 /* PuzzleSession.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PuzzleSession.swift; sourceTree = "<group>"; };
    346 		71DFD035381B6252DCD873C9 /* PlayerNamePublisher.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PlayerNamePublisher.swift; sourceTree = "<group>"; };
    347 		73DDDED719CFFDD6035C3B48 /* SyncEngine.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SyncEngine.swift; sourceTree = "<group>"; };
    348 		74C8886A66F0877858A67D62 /* AboutView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AboutView.swift; sourceTree = "<group>"; };
    349 		78919F44C3035C48410FC894 /* GamePushCredentials.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GamePushCredentials.swift; sourceTree = "<group>"; };
    350 		78C92190C4A344EC319A0F88 /* MovesJournalTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MovesJournalTests.swift; sourceTree = "<group>"; };
    351 		7A4AFF292381C9B33C0F2CD6 /* FriendZone.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FriendZone.swift; sourceTree = "<group>"; };
    352 		7A7BD8DFDB41BFBA694A0933 /* SessionCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SessionCoordinator.swift; sourceTree = "<group>"; };
    353 		7B3E1A382B24A7803701D947 /* Crossmate.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = Crossmate.entitlements; sourceTree = "<group>"; };
    354 		7B5A8118AC2FE60D877F1D29 /* GamePushCredentialsTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GamePushCredentialsTests.swift; sourceTree = "<group>"; };
    355 		7B8B65482CA1739A3863A99E /* ClueList.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ClueList.swift; sourceTree = "<group>"; };
    356 		7C6AB016CA4E2FC69A0E6A4F /* SettingsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsView.swift; sourceTree = "<group>"; };
    357 		7DD270E16E00145EF2807EA9 /* MovesUpdater.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MovesUpdater.swift; sourceTree = "<group>"; };
    358 		7E4DEAF9F7887CBB46A99E8E /* RecordSerializerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RecordSerializerTests.swift; sourceTree = "<group>"; };
    359 		800CCFBE90554F287E765755 /* FriendZoneTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FriendZoneTests.swift; sourceTree = "<group>"; };
    360 		80B377D237AC14B9856579E1 /* RecentChangesTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RecentChangesTests.swift; sourceTree = "<group>"; };
    361 		836B8D4B351C9225162A82C0 /* Layouts.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Layouts.swift; sourceTree = "<group>"; };
    362 		847415468DBB1C566D18BC17 /* ReplayControlsTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReplayControlsTests.swift; sourceTree = "<group>"; };
    363 		86470163BFF956F3DE438506 /* Moves.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Moves.swift; sourceTree = "<group>"; };
    364 		88E8AACB638FE5724B534B41 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = "<group>"; };
    365 		89528AF69DE06C61FA8E91A1 /* PuzzleCommands.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PuzzleCommands.swift; sourceTree = "<group>"; };
    366 		89B1FFD2F90141EA949A8540 /* JournalReplayTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JournalReplayTests.swift; sourceTree = "<group>"; };
    367 		8A9F9E7ED4E1AF02F0C71051 /* PushClient.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PushClient.swift; sourceTree = "<group>"; };
    368 		8AEFE2C7623A899BAABD85F4 /* MarketingPuzzleScreenshotView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MarketingPuzzleScreenshotView.swift; sourceTree = "<group>"; };
    369 		8C040D5EBC73B1ED47C2C9D4 /* SessionPushPlannerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SessionPushPlannerTests.swift; sourceTree = "<group>"; };
    370 		8D2AD5021F1AF0DB44FA4540 /* GameCursorStore.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GameCursorStore.swift; sourceTree = "<group>"; };
    371 		8D4A76B233E16B7C5A248EB7 /* TipStore.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TipStore.swift; sourceTree = "<group>"; };
    372 		8FDE03B4A77A8095ED2C23AB /* EngagementCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EngagementCoordinator.swift; sourceTree = "<group>"; };
    373 		92168360625ECDD36FF50EE8 /* NicknameDirectoryTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NicknameDirectoryTests.swift; sourceTree = "<group>"; };
    374 		927186458ED03FD0C5660765 /* CrossmateModel.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = CrossmateModel.xcdatamodel; sourceTree = "<group>"; };
    375 		93EE5BA78566EDED68D846AB /* GameStore.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GameStore.swift; sourceTree = "<group>"; };
    376 		9406C27662147CD3C0783644 /* GameViewedStoreTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GameViewedStoreTests.swift; sourceTree = "<group>"; };
    377 		9447F0FE34C63810C6F1D8BE /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = "<group>"; };
    378 		94CEBA27A8AC4FCC92ADE1B4 /* EnsureGameEntityTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EnsureGameEntityTests.swift; sourceTree = "<group>"; };
    379 		978A96CC6F550ED7A73F8D96 /* AnnouncementCenterTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AnnouncementCenterTests.swift; sourceTree = "<group>"; };
    380 		9998739ED0875A17271B7899 /* AppServicesAnnouncementTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppServicesAnnouncementTests.swift; sourceTree = "<group>"; };
    381 		9A49C3C31F49A85764B84A15 /* SyncState+Helpers.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "SyncState+Helpers.swift"; sourceTree = "<group>"; };
    382 		9A56778AF8190F0D7EB2E27E /* GameStorePushAddressTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GameStorePushAddressTests.swift; sourceTree = "<group>"; };
    383 		9AF6157D97271205626E207C /* MovesUpdaterTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MovesUpdaterTests.swift; sourceTree = "<group>"; };
    384 		9D25D12FF374F83BF4DB83DD /* CellView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CellView.swift; sourceTree = "<group>"; };
    385 		9F8D856707B4D76FDBF4AE69 /* FriendEntity+DisplayName.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "FriendEntity+DisplayName.swift"; sourceTree = "<group>"; };
    386 		A253416F4FEA271A80B22A73 /* NYTAuthService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NYTAuthService.swift; sourceTree = "<group>"; };
    387 		A3A251D89028B3CA065DE053 /* PuzzleScoreboard.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PuzzleScoreboard.swift; sourceTree = "<group>"; };
    388 		A8C18E9B47668E008BE4CF86 /* Archive.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Archive.swift; sourceTree = "<group>"; };
    389 		A8CA0FC750259EB1D762B0EE /* OpenPuzzleBannerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OpenPuzzleBannerTests.swift; sourceTree = "<group>"; };
    390 		A9A01534A21796A4EC7113A9 /* ZoneOrphaningTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ZoneOrphaningTests.swift; sourceTree = "<group>"; };
    391 		A9DC6394CB0F5B85C083FAC7 /* TipsArchive.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TipsArchive.swift; sourceTree = "<group>"; };
    392 		ACC295195602B3DDF7BB3895 /* PersistenceController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PersistenceController.swift; sourceTree = "<group>"; };
    393 		ADBA3FB1334DB816E62B7D9B /* PuzzleHeader.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PuzzleHeader.swift; sourceTree = "<group>"; };
    394 		AF3B7E191D571FD800A4D719 /* LastUpdatedView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LastUpdatedView.swift; sourceTree = "<group>"; };
    395 		AFFB5B2EFBB62B7021AC2FC2 /* TimeLog.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TimeLog.swift; sourceTree = "<group>"; };
    396 		B024B2FFB11E51E9724BBE23 /* CompactSlider.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CompactSlider.swift; sourceTree = "<group>"; };
    397 		B0938B0ACB40772EE522D77C /* NYTPuzzleFetcher.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NYTPuzzleFetcher.swift; sourceTree = "<group>"; };
    398 		B09D52DB46731E92C3E9297C /* EngagementStore.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EngagementStore.swift; sourceTree = "<group>"; };
    399 		B135C285570F91181595B405 /* CellMark.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CellMark.swift; sourceTree = "<group>"; };
    400 		B1F1471BE4D6D84361DD692B /* AuthorIdentity.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AuthorIdentity.swift; sourceTree = "<group>"; };
    401 		B34489D0864DF76AF436E391 /* NYTPuzzleUpgraderTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NYTPuzzleUpgraderTests.swift; sourceTree = "<group>"; };
    402 		B369788E0FEA0DCE1B125816 /* PUZToXDConverter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PUZToXDConverter.swift; sourceTree = "<group>"; };
    403 		B3D873ABDF871E14794A2845 /* NotificationService.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = NotificationService.entitlements; sourceTree = "<group>"; };
    404 		B427285F8D6BE35025591BFA /* PeerChangeLedger.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PeerChangeLedger.swift; sourceTree = "<group>"; };
    405 		B689A7138429641E61E9E558 /* Crossmate.app */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.application; path = Crossmate.app; sourceTree = BUILT_PRODUCTS_DIR; };
    406 		B766E872B12DC79ECCD80941 /* FriendModelTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FriendModelTests.swift; sourceTree = "<group>"; };
    407 		B8560440C548752EE93E0ED9 /* PuzzleCatalogTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PuzzleCatalogTests.swift; sourceTree = "<group>"; };
    408 		B9031A1574C21866940F6A2C /* XD.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = XD.swift; sourceTree = "<group>"; };
    409 		B9AE0F26E602A9246F5C6ABF /* GameViewedStore.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GameViewedStore.swift; sourceTree = "<group>"; };
    410 		B9EA9CF96312BFF5340CE2A7 /* ArchiveTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ArchiveTests.swift; sourceTree = "<group>"; };
    411 		BA67C509B467132D1B7510A4 /* Puzzles */ = {isa = PBXFileReference; lastKnownFileType = folder; path = Puzzles; sourceTree = SOURCE_ROOT; };
    412 		BAEDA3C3765CD8D8897FE5D5 /* PendingChangeReapTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PendingChangeReapTests.swift; sourceTree = "<group>"; };
    413 		BCACEED6A9235EC6221F4F66 /* DiagnosticsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DiagnosticsView.swift; sourceTree = "<group>"; };
    414 		BD63A9B20168F3B81AF4348F /* RecordApplier.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RecordApplier.swift; sourceTree = "<group>"; };
    415 		BF6F111BE8750697C4BC7A17 /* NYTToXDConverter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NYTToXDConverter.swift; sourceTree = "<group>"; };
    416 		BF7062403AC9CFB4FF04BBF3 /* GridSilhouetteTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GridSilhouetteTests.swift; sourceTree = "<group>"; };
    417 		BFC1C59A30FB2571598273E4 /* GameMutatorTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GameMutatorTests.swift; sourceTree = "<group>"; };
    418 		C06E2CC3A77CB306BD2DF867 /* LogScrubberTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LogScrubberTests.swift; sourceTree = "<group>"; };
    419 		C2C9D3E7FCE2D42C5B7E3856 /* PushPayload.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PushPayload.swift; sourceTree = "<group>"; };
    420 		C54223FED97577A593B7964E /* NYTToXDConverterTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NYTToXDConverterTests.swift; sourceTree = "<group>"; };
    421 		C7F35A7BFE52279BC24677F5 /* TimeLogTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TimeLogTests.swift; sourceTree = "<group>"; };
    422 		C8D6991C1EBAB2C64D9DF669 /* TipStoreTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TipStoreTests.swift; sourceTree = "<group>"; };
    423 		C90E94A01FEA77A5C9A2BC94 /* PuzzleNotificationTextTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PuzzleNotificationTextTests.swift; sourceTree = "<group>"; };
    424 		CA49DA9E0ADEB11A920787FA /* SessionPushPlanner.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SessionPushPlanner.swift; sourceTree = "<group>"; };
    425 		CBDC81CA6A9C80EB31E7F493 /* AppServices.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppServices.swift; sourceTree = "<group>"; };
    426 		CD68E9CA9D3057FE07E985E1 /* AnnouncementBanner.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AnnouncementBanner.swift; sourceTree = "<group>"; };
    427 		CE54EF557E8D808BAA20EA54 /* NYTPuzzleUpgrader.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NYTPuzzleUpgrader.swift; sourceTree = "<group>"; };
    428 		CE7CEB8980A9664BAAA5D196 /* PuzzleNotificationText.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PuzzleNotificationText.swift; sourceTree = "<group>"; };
    429 		CF20BDF7FF6423BA4FD911D5 /* CalendarDayCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CalendarDayCell.swift; sourceTree = "<group>"; };
    430 		CF3D29B227D2B0E699423C48 /* Journal.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Journal.swift; sourceTree = "<group>"; };
    431 		CFC4FF046BF772646B5CA73F /* Presence.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Presence.swift; sourceTree = "<group>"; };
    432 		D16AC7215D0269195FEA8BA8 /* GridSilhouette.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GridSilhouette.swift; sourceTree = "<group>"; };
    433 		D243575E32A8663B1AAF492A /* PeerChangeLedgerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PeerChangeLedgerTests.swift; sourceTree = "<group>"; };
    434 		D491B7232333AA8957732387 /* PendingEditFlagTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PendingEditFlagTests.swift; sourceTree = "<group>"; };
    435 		D97CBA409832A24D64DF0F5C /* Crossmate Unit Tests.xctest */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.cfbundle; path = "Crossmate Unit Tests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; };
    436 		DB55FC337CF72C650373210A /* PlayerColor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PlayerColor.swift; sourceTree = "<group>"; };
    437 		DB851649DE78AAAC5A928C52 /* Square.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Square.swift; sourceTree = "<group>"; };
    438 		DBD2570A5A3573D66B3C4A52 /* GameRowView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GameRowView.swift; sourceTree = "<group>"; };
    439 		E18FF14E0D73B0D2DB427F08 /* JoiningPuzzleView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JoiningPuzzleView.swift; sourceTree = "<group>"; };
    440 		E25A040EA4DC9672C895A7AC /* InviteEntity+DisplayName.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "InviteEntity+DisplayName.swift"; sourceTree = "<group>"; };
    441 		E2ED0D601BB574618C15B5EF /* ShareLinkRoute.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShareLinkRoute.swift; sourceTree = "<group>"; };
    442 		E5EEBF169823C172000FC45B /* GameSummaryThumbnailTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GameSummaryThumbnailTests.swift; sourceTree = "<group>"; };
    443 		E655698481325C92EF5C348B /* FriendController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FriendController.swift; sourceTree = "<group>"; };
    444 		E78C275F8A90E3E3EEF190CC /* FriendPickerView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FriendPickerView.swift; sourceTree = "<group>"; };
    445 		E7AFD37B03A1C2E23E5766E6 /* PuzzleSource.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PuzzleSource.swift; sourceTree = "<group>"; };
    446 		E87E28DC9402A4369647DE50 /* PushPayloadTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PushPayloadTests.swift; sourceTree = "<group>"; };
    447 		E935CE4384F3B67CC22EEBAC /* ClueBar.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ClueBar.swift; sourceTree = "<group>"; };
    448 		EAC61E2582D94B1E6EC67136 /* XDFileType.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = XDFileType.swift; sourceTree = "<group>"; };
    449 		EAF18C52558DBD58ECAD4964 /* XDMarkup.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = XDMarkup.swift; sourceTree = "<group>"; };
    450 		EAFA466405AABA1C06272795 /* ContentKeyDirectory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentKeyDirectory.swift; sourceTree = "<group>"; };
    451 		ED2D830B9EFAD753C233BEB4 /* GameListView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GameListView.swift; sourceTree = "<group>"; };
    452 		ED48AD9C3A7A113D101BBD21 /* GridView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GridView.swift; sourceTree = "<group>"; };
    453 		ED8154F949E1D94252F70765 /* NYTAuthServiceTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NYTAuthServiceTests.swift; sourceTree = "<group>"; };
    454 		EF1254FE7BE3672AEC1607B1 /* MovesInboundTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MovesInboundTests.swift; sourceTree = "<group>"; };
    455 		F5DF04E70017065DFA95B396 /* PuzzleModifiers.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PuzzleModifiers.swift; sourceTree = "<group>"; };
    456 		F64DAE64C9AA042B330C526F /* SessionMonitorTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SessionMonitorTests.swift; sourceTree = "<group>"; };
    457 		F97B399E89BBB37730F2F1E9 /* TestHelpers.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestHelpers.swift; sourceTree = "<group>"; };
    458 		F9B757D86362CD6F0500E9CB /* CustomButtons.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CustomButtons.swift; sourceTree = "<group>"; };
    459 		F9FE0A9624DB87758F3D1768 /* XDMarkupTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = XDMarkupTests.swift; sourceTree = "<group>"; };
    460 		FAF6E3F3558E128E7A482A61 /* PushRequestAuthenticator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PushRequestAuthenticator.swift; sourceTree = "<group>"; };
    461 		FDE193CAB325C991952D7CE5 /* PUZToXDConverterTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PUZToXDConverterTests.swift; sourceTree = "<group>"; };
    462 		FED7C2528355BC007E48B7EF /* ParticipantSummaries.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ParticipantSummaries.swift; sourceTree = "<group>"; };
    463 		FEDD63AD5E33E2B0399780EF /* NotificationNavigationBrokerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationNavigationBrokerTests.swift; sourceTree = "<group>"; };
    464 		FF159746D076E051C2CB590C /* PlayerSelectionPublisherTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PlayerSelectionPublisherTests.swift; sourceTree = "<group>"; };
    465 /* End PBXFileReference section */
    466 
    467 /* Begin PBXGroup section */
    468 		01B07D8724DEA04C3E74558E /* Support */ = {
    469 			isa = PBXGroup;
    470 			children = (
    471 				F97B399E89BBB37730F2F1E9 /* TestHelpers.swift */,
    472 			);
    473 			name = Support;
    474 			path = Tests/Support;
    475 			sourceTree = "<group>";
    476 		};
    477 		074C2962E79CAE6C0EA6431A /* Sync */ = {
    478 			isa = PBXGroup;
    479 			children = (
    480 				A8C18E9B47668E008BE4CF86 /* Archive.swift */,
    481 				B1F1471BE4D6D84361DD692B /* AuthorIdentity.swift */,
    482 				07E5E4B165E374FEE732068B /* CloudDiagnostics.swift */,
    483 				16AAC1E8D2CB3B5117159934 /* CloudQuery.swift */,
    484 				44F86F0F1883A93F9622FB67 /* CloudZones.swift */,
    485 				8FDE03B4A77A8095ED2C23AB /* EngagementCoordinator.swift */,
    486 				E655698481325C92EF5C348B /* FriendController.swift */,
    487 				7A4AFF292381C9B33C0F2CD6 /* FriendZone.swift */,
    488 				1B7539E0AD285C5A3AC3DDA2 /* GameArchiver.swift */,
    489 				78919F44C3035C48410FC894 /* GamePushCredentials.swift */,
    490 				14B05C19BD4705876B3DF0EC /* GridStateMerger.swift */,
    491 				86470163BFF956F3DE438506 /* Moves.swift */,
    492 				7DD270E16E00145EF2807EA9 /* MovesUpdater.swift */,
    493 				B427285F8D6BE35025591BFA /* PeerChangeLedger.swift */,
    494 				11BF168D5C1CD85DAE5CAF9E /* PlayerSelectionPublisher.swift */,
    495 				CFC4FF046BF772646B5CA73F /* Presence.swift */,
    496 				605CA0FC7AF069CE3A3B38C1 /* RecentChanges.swift */,
    497 				BD63A9B20168F3B81AF4348F /* RecordApplier.swift */,
    498 				5267DDA1A330DCBD07303D44 /* RecordBuilder.swift */,
    499 				0C0A7348E1283E7CD2486E2A /* RecordSerializer.swift */,
    500 				0EB332831AB173ACF6BFEC59 /* SessionMonitor.swift */,
    501 				5C74683332956B0D1CA37589 /* ShareController.swift */,
    502 				73DDDED719CFFDD6035C3B48 /* SyncEngine.swift */,
    503 				9A49C3C31F49A85764B84A15 /* SyncState+Helpers.swift */,
    504 			);
    505 			path = Sync;
    506 			sourceTree = "<group>";
    507 		};
    508 		08204641416EEBE67C3EF5F6 /* GameList */ = {
    509 			isa = PBXGroup;
    510 			children = (
    511 				6F34401948BC53DA9C93D64B /* GameCardView.swift */,
    512 				ED2D830B9EFAD753C233BEB4 /* GameListView.swift */,
    513 				DBD2570A5A3573D66B3C4A52 /* GameRowView.swift */,
    514 				663934F0B7CA8BDD462DFAA4 /* GameShareItem.swift */,
    515 				AF3B7E191D571FD800A4D719 /* LastUpdatedView.swift */,
    516 			);
    517 			path = GameList;
    518 			sourceTree = "<group>";
    519 		};
    520 		12BCF7948BC2C200C647C279 /* Products */ = {
    521 			isa = PBXGroup;
    522 			children = (
    523 				D97CBA409832A24D64DF0F5C /* Crossmate Unit Tests.xctest */,
    524 				B689A7138429641E61E9E558 /* Crossmate.app */,
    525 				51318FC5DAE02D35CB005729 /* NotificationService.appex */,
    526 			);
    527 			name = Products;
    528 			sourceTree = "<group>";
    529 		};
    530 		1FB709FE7325CD51300A22F0 /* Settings */ = {
    531 			isa = PBXGroup;
    532 			children = (
    533 				74C8886A66F0877858A67D62 /* AboutView.swift */,
    534 				BCACEED6A9235EC6221F4F66 /* DiagnosticsView.swift */,
    535 				3EF436B410916399336AC106 /* RecordEditorView.swift */,
    536 				7C6AB016CA4E2FC69A0E6A4F /* SettingsView.swift */,
    537 				A9DC6394CB0F5B85C083FAC7 /* TipsArchive.swift */,
    538 			);
    539 			path = Settings;
    540 			sourceTree = "<group>";
    541 		};
    542 		212DB6FCF46C41F81C41D232 /* Unit */ = {
    543 			isa = PBXGroup;
    544 			children = (
    545 				978A96CC6F550ED7A73F8D96 /* AnnouncementCenterTests.swift */,
    546 				B9EA9CF96312BFF5340CE2A7 /* ArchiveTests.swift */,
    547 				60E818B0F4689BAD57660B7C /* GameCursorStoreTests.swift */,
    548 				BFC1C59A30FB2571598273E4 /* GameMutatorTests.swift */,
    549 				0E230B327585E1E3A2921C92 /* GameStoreCompletionLockTests.swift */,
    550 				09EA25E2AE98ACD029EC0129 /* GameStoreContributingDevicesTests.swift */,
    551 				122BC1863D12DE06388D5DA7 /* GameStoreMergedAuthorCellsTests.swift */,
    552 				9A56778AF8190F0D7EB2E27E /* GameStorePushAddressTests.swift */,
    553 				31C534911020BE4ED2E5065D /* GameStoreUnreadMovesTests.swift */,
    554 				E5EEBF169823C172000FC45B /* GameSummaryThumbnailTests.swift */,
    555 				9406C27662147CD3C0783644 /* GameViewedStoreTests.swift */,
    556 				BF7062403AC9CFB4FF04BBF3 /* GridSilhouetteTests.swift */,
    557 				6C7F3A9BD7FAF81CB77032A6 /* GridStateMergerTests.swift */,
    558 				89B1FFD2F90141EA949A8540 /* JournalReplayTests.swift */,
    559 				2DD9C72266D1BAC43C8976C0 /* JournalUploadTests.swift */,
    560 				C06E2CC3A77CB306BD2DF867 /* LogScrubberTests.swift */,
    561 				78C92190C4A344EC319A0F88 /* MovesJournalTests.swift */,
    562 				9AF6157D97271205626E207C /* MovesUpdaterTests.swift */,
    563 				92168360625ECDD36FF50EE8 /* NicknameDirectoryTests.swift */,
    564 				FEDD63AD5E33E2B0399780EF /* NotificationNavigationBrokerTests.swift */,
    565 				47532AED239AEF476D8E9206 /* NotificationStateTests.swift */,
    566 				ED8154F949E1D94252F70765 /* NYTAuthServiceTests.swift */,
    567 				B34489D0864DF76AF436E391 /* NYTPuzzleUpgraderTests.swift */,
    568 				C54223FED97577A593B7964E /* NYTToXDConverterTests.swift */,
    569 				A8CA0FC750259EB1D762B0EE /* OpenPuzzleBannerTests.swift */,
    570 				D243575E32A8663B1AAF492A /* PeerChangeLedgerTests.swift */,
    571 				D491B7232333AA8957732387 /* PendingEditFlagTests.swift */,
    572 				4A467BC00116EEC8500BE6A1 /* PersistenceRecoveryTests.swift */,
    573 				23FCFFF1C2C7E909DFD8FC43 /* PlayerColorTests.swift */,
    574 				5DE04D53EC3BC7D2DA0093C3 /* PlayerNamePublisherTests.swift */,
    575 				1813630FA05C194AFF43855C /* PlayerRosterTests.swift */,
    576 				FF159746D076E051C2CB590C /* PlayerSelectionPublisherTests.swift */,
    577 				46801B570FC0B2C791ECDED3 /* PlayerSessionNavigationTests.swift */,
    578 				6C793B5B9684D49328E42129 /* PushPayloadCipherTests.swift */,
    579 				E87E28DC9402A4369647DE50 /* PushPayloadTests.swift */,
    580 				FDE193CAB325C991952D7CE5 /* PUZToXDConverterTests.swift */,
    581 				B8560440C548752EE93E0ED9 /* PuzzleCatalogTests.swift */,
    582 				C90E94A01FEA77A5C9A2BC94 /* PuzzleNotificationTextTests.swift */,
    583 				362E3A93102B6C9AECD4133A /* PuzzleSessionTests.swift */,
    584 				80B377D237AC14B9856579E1 /* RecentChangesTests.swift */,
    585 				443BF6DF77C8226313EE9564 /* RecordSerializerMovesTests.swift */,
    586 				7E4DEAF9F7887CBB46A99E8E /* RecordSerializerTests.swift */,
    587 				603E6FC55F1BD944592379D2 /* ReplayCacheTests.swift */,
    588 				847415468DBB1C566D18BC17 /* ReplayControlsTests.swift */,
    589 				8C040D5EBC73B1ED47C2C9D4 /* SessionPushPlannerTests.swift */,
    590 				5990D989AD745211A18848E4 /* ShareLinkRouteTests.swift */,
    591 				057F2B8B8A894D08BB801219 /* ShareLinkShortenerTests.swift */,
    592 				0C190EA5717C291B3F2AE46C /* SyncMonitorTests.swift */,
    593 				C7F35A7BFE52279BC24677F5 /* TimeLogTests.swift */,
    594 				C8D6991C1EBAB2C64D9DF669 /* TipStoreTests.swift */,
    595 				4F4EBC0F07FF815274C028CA /* XDAcceptTests.swift */,
    596 				F9FE0A9624DB87758F3D1768 /* XDMarkupTests.swift */,
    597 				ABB371EF2574E95782CB05FD /* Sync */,
    598 			);
    599 			name = Unit;
    600 			path = Tests/Unit;
    601 			sourceTree = "<group>";
    602 		};
    603 		41DB2417FF67A47FE6890256 /* Models */ = {
    604 			isa = PBXGroup;
    605 			children = (
    606 				B135C285570F91181595B405 /* CellMark.swift */,
    607 				0FD9A43789D0ED123F7A99B0 /* CheckResult.swift */,
    608 				B09D52DB46731E92C3E9297C /* EngagementStore.swift */,
    609 				9F8D856707B4D76FDBF4AE69 /* FriendEntity+DisplayName.swift */,
    610 				465F2BB469EFE84CF3733398 /* Game.swift */,
    611 				8D2AD5021F1AF0DB44FA4540 /* GameCursorStore.swift */,
    612 				24A4B5C8EC4A46906C07F819 /* GameEntity+ContentKey.swift */,
    613 				B9AE0F26E602A9246F5C6ABF /* GameViewedStore.swift */,
    614 				E25A040EA4DC9672C895A7AC /* InviteEntity+DisplayName.swift */,
    615 				FED7C2528355BC007E48B7EF /* ParticipantSummaries.swift */,
    616 				DB55FC337CF72C650373210A /* PlayerColor.swift */,
    617 				46148CF0F4D719692F81A6EC /* PlayerPreferences.swift */,
    618 				3292748EAE27B608C769D393 /* PlayerRoster.swift */,
    619 				6F0B4F65D017C1FBAC3B23DF /* PlayerSelection.swift */,
    620 				20B331CC55827FEF3420ABCE /* PlayerSession.swift */,
    621 				64C8064F04FC6177D987ACA2 /* Puzzle.swift */,
    622 				4DC7784917397BCD6B8D679D /* PuzzleCatalog.swift */,
    623 				0DF9C2FEF0D3584864DFC967 /* PuzzleNotificationText+GameEntity.swift */,
    624 				E7AFD37B03A1C2E23E5766E6 /* PuzzleSource.swift */,
    625 				50EE8A159CC553623F6F7DE4 /* ReplayControls.swift */,
    626 				DB851649DE78AAAC5A928C52 /* Square.swift */,
    627 				AFFB5B2EFBB62B7021AC2FC2 /* TimeLog.swift */,
    628 				8D4A76B233E16B7C5A248EB7 /* TipStore.swift */,
    629 				B9031A1574C21866940F6A2C /* XD.swift */,
    630 				EAC61E2582D94B1E6EC67136 /* XDFileType.swift */,
    631 				EAF18C52558DBD58ECAD4964 /* XDMarkup.swift */,
    632 				F93AC31640C40FCC039570A3 /* CrossmateModel.xcdatamodeld */,
    633 			);
    634 			path = Models;
    635 			sourceTree = "<group>";
    636 		};
    637 		486B6F0E3B86BC2765CCEC33 /* Friends */ = {
    638 			isa = PBXGroup;
    639 			children = (
    640 				E78C275F8A90E3E3EEF190CC /* FriendPickerView.swift */,
    641 				298A9C54A1CC753E860E174E /* FriendsView.swift */,
    642 			);
    643 			path = Friends;
    644 			sourceTree = "<group>";
    645 		};
    646 		565DBAFC8DB2589B3F0AF90E /* Persistence */ = {
    647 			isa = PBXGroup;
    648 			children = (
    649 				43DC132D49361C56DE79C13E /* GameMutator.swift */,
    650 				93EE5BA78566EDED68D846AB /* GameStore.swift */,
    651 				CF3D29B227D2B0E699423C48 /* Journal.swift */,
    652 				27ECEA51DE42D07495744EF8 /* JournalReplay.swift */,
    653 				ACC295195602B3DDF7BB3895 /* PersistenceController.swift */,
    654 			);
    655 			path = Persistence;
    656 			sourceTree = "<group>";
    657 		};
    658 		5770CE69DB2B0B7462FACE53 /* Crossmate */ = {
    659 			isa = PBXGroup;
    660 			children = (
    661 				7B3E1A382B24A7803701D947 /* Crossmate.entitlements */,
    662 				14F2AC5C3B50F4178859E9AC /* CrossmateApp.swift */,
    663 				9447F0FE34C63810C6F1D8BE /* Info.plist */,
    664 				8AEFE2C7623A899BAABD85F4 /* MarketingPuzzleScreenshotView.swift */,
    665 				0BF60C84D92A9024AC1A53FC /* Media.xcassets */,
    666 				41DB2417FF67A47FE6890256 /* Models */,
    667 				565DBAFC8DB2589B3F0AF90E /* Persistence */,
    668 				D8F0E3376B2616B4E917129C /* Services */,
    669 				074C2962E79CAE6C0EA6431A /* Sync */,
    670 				84445EA9CACB6AAAEDE6965F /* Views */,
    671 			);
    672 			path = Crossmate;
    673 			sourceTree = "<group>";
    674 		};
    675 		6F470E54D9E6E99FCEA893D1 /* Generated */ = {
    676 			isa = PBXGroup;
    677 			children = (
    678 				0BDC16DA7F762F4C5F4BED14 /* Config.xcconfig */,
    679 			);
    680 			path = Generated;
    681 			sourceTree = "<group>";
    682 		};
    683 		84445EA9CACB6AAAEDE6965F /* Views */ = {
    684 			isa = PBXGroup;
    685 			children = (
    686 				AB1863007AA59F4769675599 /* Browse */,
    687 				99CEFF0AB23C2B9329A9F8B2 /* Components */,
    688 				486B6F0E3B86BC2765CCEC33 /* Friends */,
    689 				08204641416EEBE67C3EF5F6 /* GameList */,
    690 				895088B5D0214046158C6D24 /* Puzzle */,
    691 				1FB709FE7325CD51300A22F0 /* Settings */,
    692 			);
    693 			path = Views;
    694 			sourceTree = "<group>";
    695 		};
    696 		895088B5D0214046158C6D24 /* Puzzle */ = {
    697 			isa = PBXGroup;
    698 			children = (
    699 				9D25D12FF374F83BF4DB83DD /* CellView.swift */,
    700 				E935CE4384F3B67CC22EEBAC /* ClueBar.swift */,
    701 				7B8B65482CA1739A3863A99E /* ClueList.swift */,
    702 				ED48AD9C3A7A113D101BBD21 /* GridView.swift */,
    703 				6940546CFA1E87EF814AA6BB /* HardwareKeyboardInputView.swift */,
    704 				E18FF14E0D73B0D2DB427F08 /* JoiningPuzzleView.swift */,
    705 				3FDE73AD7C543B29C8E493F8 /* KeyboardView.swift */,
    706 				89528AF69DE06C61FA8E91A1 /* PuzzleCommands.swift */,
    707 				ADBA3FB1334DB816E62B7D9B /* PuzzleHeader.swift */,
    708 				F5DF04E70017065DFA95B396 /* PuzzleModifiers.swift */,
    709 				A3A251D89028B3CA065DE053 /* PuzzleScoreboard.swift */,
    710 				57B1734CF731C2E405A39159 /* PuzzleView.swift */,
    711 				41A62DA6F7138876CA5A27EF /* SuccessPanel.swift */,
    712 			);
    713 			path = Puzzle;
    714 			sourceTree = "<group>";
    715 		};
    716 		99CEFF0AB23C2B9329A9F8B2 /* Components */ = {
    717 			isa = PBXGroup;
    718 			children = (
    719 				CD68E9CA9D3057FE07E985E1 /* AnnouncementBanner.swift */,
    720 				B024B2FFB11E51E9724BBE23 /* CompactSlider.swift */,
    721 				F9B757D86362CD6F0500E9CB /* CustomButtons.swift */,
    722 				065CD67A1D9F7B63AE6B42D6 /* FriendAvatarView.swift */,
    723 				6B1F07B5DDE2A8B49B28392A /* GridThumbnailView.swift */,
    724 				836B8D4B351C9225162A82C0 /* Layouts.swift */,
    725 			);
    726 			path = Components;
    727 			sourceTree = "<group>";
    728 		};
    729 		9BF7383FE2AB07F12434C013 /* Shared */ = {
    730 			isa = PBXGroup;
    731 			children = (
    732 				EAFA466405AABA1C06272795 /* ContentKeyDirectory.swift */,
    733 				3111803C8FFFB0C839217482 /* NicknameDirectory.swift */,
    734 				2D2FD896D75863554E31654C /* NotificationState.swift */,
    735 				C2C9D3E7FCE2D42C5B7E3856 /* PushPayload.swift */,
    736 				33DE10D2A5AFBAC73469BD33 /* PushPayloadCipher.swift */,
    737 				CE7CEB8980A9664BAAA5D196 /* PuzzleNotificationText.swift */,
    738 			);
    739 			path = Shared;
    740 			sourceTree = "<group>";
    741 		};
    742 		AB1863007AA59F4769675599 /* Browse */ = {
    743 			isa = PBXGroup;
    744 			children = (
    745 				7023E506D777DB80B18A7DB5 /* BundledBrowseView.swift */,
    746 				CF20BDF7FF6423BA4FD911D5 /* CalendarDayCell.swift */,
    747 				2A832061C19BA0F073617CA2 /* ImportedBrowseView.swift */,
    748 				09C81EFA0B7776CB9713CD63 /* NewGameSheet.swift */,
    749 				3413F8755236FC0578AF8109 /* NYTBrowseView.swift */,
    750 				1747D4DCB4BCC831069BBE07 /* NYTLoginView.swift */,
    751 			);
    752 			path = Browse;
    753 			sourceTree = "<group>";
    754 		};
    755 		ABB371EF2574E95782CB05FD /* Sync */ = {
    756 			isa = PBXGroup;
    757 			children = (
    758 				9998739ED0875A17271B7899 /* AppServicesAnnouncementTests.swift */,
    759 				457B06DBFDC358D213A7CE54 /* AuthorIdentityTests.swift */,
    760 				67CFF96D54D2DE9C44EB120A /* EngagementCoordinatorTests.swift */,
    761 				94CEBA27A8AC4FCC92ADE1B4 /* EnsureGameEntityTests.swift */,
    762 				2E2702C74378FD2F14D1CE33 /* FriendControllerNicknameReplayTests.swift */,
    763 				B766E872B12DC79ECCD80941 /* FriendModelTests.swift */,
    764 				800CCFBE90554F287E765755 /* FriendZoneTests.swift */,
    765 				7B5A8118AC2FE60D877F1D29 /* GamePushCredentialsTests.swift */,
    766 				4B33C21324E1474BCC126AA0 /* MovesCodecLegacyDecodeTests.swift */,
    767 				EF1254FE7BE3672AEC1607B1 /* MovesInboundTests.swift */,
    768 				08E8592B1CB1336E63498706 /* PeerPresenceGraceTests.swift */,
    769 				BAEDA3C3765CD8D8897FE5D5 /* PendingChangeReapTests.swift */,
    770 				283C5C97180C805B6C5BF622 /* PerGameZoneTests.swift */,
    771 				5C838C184A0C7B1B0A9821CE /* PlayerRecordPresenceTests.swift */,
    772 				F64DAE64C9AA042B330C526F /* SessionMonitorTests.swift */,
    773 				68072F4F3EB5D5A78E03D408 /* ShareRoutingTests.swift */,
    774 				A9A01534A21796A4EC7113A9 /* ZoneOrphaningTests.swift */,
    775 			);
    776 			path = Sync;
    777 			sourceTree = "<group>";
    778 		};
    779 		C5342A31D253372339517EEE = {
    780 			isa = PBXGroup;
    781 			children = (
    782 				BA67C509B467132D1B7510A4 /* Puzzles */,
    783 				5770CE69DB2B0B7462FACE53 /* Crossmate */,
    784 				6F470E54D9E6E99FCEA893D1 /* Generated */,
    785 				D7910EDB740AFF963BDCA6CE /* NotificationService */,
    786 				9BF7383FE2AB07F12434C013 /* Shared */,
    787 				01B07D8724DEA04C3E74558E /* Support */,
    788 				212DB6FCF46C41F81C41D232 /* Unit */,
    789 				12BCF7948BC2C200C647C279 /* Products */,
    790 			);
    791 			sourceTree = "<group>";
    792 		};
    793 		D7910EDB740AFF963BDCA6CE /* NotificationService */ = {
    794 			isa = PBXGroup;
    795 			children = (
    796 				88E8AACB638FE5724B534B41 /* Info.plist */,
    797 				B3D873ABDF871E14794A2845 /* NotificationService.entitlements */,
    798 				507B4DC893CE8AC4778CBACE /* NotificationService.swift */,
    799 			);
    800 			path = NotificationService;
    801 			sourceTree = "<group>";
    802 		};
    803 		D8F0E3376B2616B4E917129C /* Services */ = {
    804 			isa = PBXGroup;
    805 			children = (
    806 				03D59EA74A4BA084AD97478D /* AccountPushCoordinator.swift */,
    807 				1D3ECD0DE71BE567BCEE15F6 /* AnnouncementCenter.swift */,
    808 				CBDC81CA6A9C80EB31E7F493 /* AppServices.swift */,
    809 				2D5B1E8E12B86DF6CA478F65 /* BadgeCoordinator.swift */,
    810 				56BC76178319D0D669CD50FF /* CloudService.swift */,
    811 				16E1DA8C1B4E73AFB779CC06 /* DebuggingMonitors.swift */,
    812 				70AD1A006E6D03E4429E3BF0 /* DriveMonitor.swift */,
    813 				18C701DAE36000DE19F7CC95 /* EngagementHost.swift */,
    814 				400B3C87248F3FCA3F76400B /* EngagementHostEnvironment.swift */,
    815 				4DB0580C9B7C778F34BE6AC2 /* EngagementLifecycle.swift */,
    816 				D16AC7215D0269195FEA8BA8 /* GridSilhouette.swift */,
    817 				462CE0FD356F6137C9BFD30F /* ImportService.swift */,
    818 				6BDD06460A76D4AF31077732 /* InputMonitor.swift */,
    819 				10064D171DB7C48D3DE1E769 /* InviteCoordinator.swift */,
    820 				33878A29B09A6154C7A63C82 /* KeychainHelper.swift */,
    821 				A253416F4FEA271A80B22A73 /* NYTAuthService.swift */,
    822 				B0938B0ACB40772EE522D77C /* NYTPuzzleFetcher.swift */,
    823 				CE54EF557E8D808BAA20EA54 /* NYTPuzzleUpgrader.swift */,
    824 				BF6F111BE8750697C4BC7A17 /* NYTToXDConverter.swift */,
    825 				71DFD035381B6252DCD873C9 /* PlayerNamePublisher.swift */,
    826 				8A9F9E7ED4E1AF02F0C71051 /* PushClient.swift */,
    827 				FAF6E3F3558E128E7A482A61 /* PushRequestAuthenticator.swift */,
    828 				B369788E0FEA0DCE1B125816 /* PUZToXDConverter.swift */,
    829 				710BCB6A647A820B106CE666 /* PuzzleSession.swift */,
    830 				3FFD574AC2D0A910053E2A73 /* ReplayLoader.swift */,
    831 				7A7BD8DFDB41BFBA694A0933 /* SessionCoordinator.swift */,
    832 				CA49DA9E0ADEB11A920787FA /* SessionPushPlanner.swift */,
    833 				E2ED0D601BB574618C15B5EF /* ShareLinkRoute.swift */,
    834 				52B50A841D92D1F2B173E7DF /* ShareLinkShortener.swift */,
    835 			);
    836 			path = Services;
    837 			sourceTree = "<group>";
    838 		};
    839 /* End PBXGroup section */
    840 
    841 /* Begin PBXNativeTarget section */
    842 		350366A68B75DC4BDA91F8E5 /* NotificationService */ = {
    843 			isa = PBXNativeTarget;
    844 			buildConfigurationList = 97D15A585690B87E7C17FF8A /* Build configuration list for PBXNativeTarget "NotificationService" */;
    845 			buildPhases = (
    846 				6D4D7955C5F70F9F18D7C1F0 /* Sources */,
    847 			);
    848 			buildRules = (
    849 			);
    850 			dependencies = (
    851 			);
    852 			name = NotificationService;
    853 			packageProductDependencies = (
    854 			);
    855 			productName = NotificationService;
    856 			productReference = 51318FC5DAE02D35CB005729 /* NotificationService.appex */;
    857 			productType = "com.apple.product-type.app-extension";
    858 		};
    859 		7708D1C8A0145D43BD15DEB7 /* Crossmate */ = {
    860 			isa = PBXNativeTarget;
    861 			buildConfigurationList = AB7D49875A042FD78EDD157A /* Build configuration list for PBXNativeTarget "Crossmate" */;
    862 			buildPhases = (
    863 				C17B62906BBF281D006D8DC2 /* Sources */,
    864 				C475EFB2B47245175F9B415C /* Resources */,
    865 				2768812850886EB633B6C27C /* Embed Foundation Extensions */,
    866 			);
    867 			buildRules = (
    868 			);
    869 			dependencies = (
    870 				0638C125467274AA03088E07 /* PBXTargetDependency */,
    871 			);
    872 			name = Crossmate;
    873 			packageProductDependencies = (
    874 			);
    875 			productName = Crossmate;
    876 			productReference = B689A7138429641E61E9E558 /* Crossmate.app */;
    877 			productType = "com.apple.product-type.application";
    878 		};
    879 		C38EBD1A6B9D37EF81FF3511 /* Crossmate Unit Tests */ = {
    880 			isa = PBXNativeTarget;
    881 			buildConfigurationList = 0C7AF110B3697D116B91817A /* Build configuration list for PBXNativeTarget "Crossmate Unit Tests" */;
    882 			buildPhases = (
    883 				931E2DAAD4EC47B06F7AB60A /* Sources */,
    884 			);
    885 			buildRules = (
    886 			);
    887 			dependencies = (
    888 				42035D5EEE61A5D459E1D46D /* PBXTargetDependency */,
    889 			);
    890 			name = "Crossmate Unit Tests";
    891 			packageProductDependencies = (
    892 			);
    893 			productName = "Crossmate Unit Tests";
    894 			productReference = D97CBA409832A24D64DF0F5C /* Crossmate Unit Tests.xctest */;
    895 			productType = "com.apple.product-type.bundle.unit-test";
    896 		};
    897 /* End PBXNativeTarget section */
    898 
    899 /* Begin PBXProject section */
    900 		9167165F088B7698D1319D3C /* Project object */ = {
    901 			isa = PBXProject;
    902 			attributes = {
    903 				BuildIndependentTargetsInParallel = YES;
    904 				LastUpgradeCheck = 1430;
    905 				TargetAttributes = {
    906 					350366A68B75DC4BDA91F8E5 = {
    907 						DevelopmentTeam = 7TD7PZBNXP;
    908 						ProvisioningStyle = Automatic;
    909 					};
    910 					7708D1C8A0145D43BD15DEB7 = {
    911 						DevelopmentTeam = 7TD7PZBNXP;
    912 						ProvisioningStyle = Automatic;
    913 					};
    914 					C38EBD1A6B9D37EF81FF3511 = {
    915 						DevelopmentTeam = 7TD7PZBNXP;
    916 						ProvisioningStyle = Automatic;
    917 					};
    918 				};
    919 			};
    920 			buildConfigurationList = 9A436EF03A8593C66A18A832 /* Build configuration list for PBXProject "Crossmate" */;
    921 			developmentRegion = en;
    922 			hasScannedForEncodings = 0;
    923 			knownRegions = (
    924 				Base,
    925 				en,
    926 			);
    927 			mainGroup = C5342A31D253372339517EEE;
    928 			minimizedProjectReferenceProxies = 1;
    929 			preferredProjectObjectVersion = 77;
    930 			productRefGroup = 12BCF7948BC2C200C647C279 /* Products */;
    931 			projectDirPath = "";
    932 			projectRoot = "";
    933 			targets = (
    934 				7708D1C8A0145D43BD15DEB7 /* Crossmate */,
    935 				C38EBD1A6B9D37EF81FF3511 /* Crossmate Unit Tests */,
    936 				350366A68B75DC4BDA91F8E5 /* NotificationService */,
    937 			);
    938 		};
    939 /* End PBXProject section */
    940 
    941 /* Begin PBXResourcesBuildPhase section */
    942 		C475EFB2B47245175F9B415C /* Resources */ = {
    943 			isa = PBXResourcesBuildPhase;
    944 			buildActionMask = 2147483647;
    945 			files = (
    946 				9789150602A3321D2E1E7E81 /* Media.xcassets in Resources */,
    947 				8B356C953DA0FAF149C3391A /* Puzzles in Resources */,
    948 			);
    949 			runOnlyForDeploymentPostprocessing = 0;
    950 		};
    951 /* End PBXResourcesBuildPhase section */
    952 
    953 /* Begin PBXSourcesBuildPhase section */
    954 		6D4D7955C5F70F9F18D7C1F0 /* Sources */ = {
    955 			isa = PBXSourcesBuildPhase;
    956 			buildActionMask = 2147483647;
    957 			files = (
    958 				95170ECF07E94E7581C2B66F /* ContentKeyDirectory.swift in Sources */,
    959 				A0977C7B0B0D928DA569C326 /* NicknameDirectory.swift in Sources */,
    960 				7D4A56FBB1C5D5F89271B77F /* NotificationService.swift in Sources */,
    961 				88BACA1689459AC9AED20D43 /* NotificationState.swift in Sources */,
    962 				F8A4B3A1F9601654C60550B3 /* PushPayload.swift in Sources */,
    963 				FC4853B4261B06945D0D1470 /* PushPayloadCipher.swift in Sources */,
    964 				351CB23C537BAB61863D95F6 /* PuzzleNotificationText.swift in Sources */,
    965 			);
    966 			runOnlyForDeploymentPostprocessing = 0;
    967 		};
    968 		931E2DAAD4EC47B06F7AB60A /* Sources */ = {
    969 			isa = PBXSourcesBuildPhase;
    970 			buildActionMask = 2147483647;
    971 			files = (
    972 				6C091D30AAC9F63B7CE6FB58 /* AnnouncementCenterTests.swift in Sources */,
    973 				D519F54F8CE0BD53D9C6144C /* AppServicesAnnouncementTests.swift in Sources */,
    974 				DB098F40C6950E29B4BF10A7 /* ArchiveTests.swift in Sources */,
    975 				A98382E7659991FAF0F4ED0A /* AuthorIdentityTests.swift in Sources */,
    976 				328309D8CC72CCB5623FB2A1 /* EngagementCoordinatorTests.swift in Sources */,
    977 				02943BA53D2130B910E6DC00 /* EnsureGameEntityTests.swift in Sources */,
    978 				931431F8052FC58768C9BC26 /* FriendControllerNicknameReplayTests.swift in Sources */,
    979 				6A1CA96FF48CBEEE78EA6D34 /* FriendModelTests.swift in Sources */,
    980 				712A2764596A2D17A0BBBF3B /* FriendZoneTests.swift in Sources */,
    981 				85A798525FE1DC98210A9E82 /* GameCursorStoreTests.swift in Sources */,
    982 				2C0DFC182240A2519ED1FA6A /* GameMutatorTests.swift in Sources */,
    983 				30703DDF575DCDA53227DA66 /* GamePushCredentialsTests.swift in Sources */,
    984 				9AACF424992AE45FD7937064 /* GameStoreCompletionLockTests.swift in Sources */,
    985 				4D7BF839BA71E1BF0AE9BCE9 /* GameStoreContributingDevicesTests.swift in Sources */,
    986 				262A9CE8C3CB93869190CFF1 /* GameStoreMergedAuthorCellsTests.swift in Sources */,
    987 				2C5A15054CCCBF9FD626AFBB /* GameStorePushAddressTests.swift in Sources */,
    988 				449B0A09A36B276C93CFB9A4 /* GameStoreUnreadMovesTests.swift in Sources */,
    989 				7714B1C2FBCBBAD9BE8FEAF8 /* GameSummaryThumbnailTests.swift in Sources */,
    990 				1D08DDEDEF5433912CC6D4DB /* GameViewedStoreTests.swift in Sources */,
    991 				085B70680087464B8A7BA3EE /* GridSilhouetteTests.swift in Sources */,
    992 				AACC9F70AEEDCB3360FFDEFF /* GridStateMergerTests.swift in Sources */,
    993 				0158184A413AE177F75B4150 /* JournalReplayTests.swift in Sources */,
    994 				6E67C0DCB0416F382EA065B7 /* JournalUploadTests.swift in Sources */,
    995 				2641299DE1F2E84E8C21E037 /* LogScrubberTests.swift in Sources */,
    996 				E454051BA4797000C8AD2B48 /* MovesCodecLegacyDecodeTests.swift in Sources */,
    997 				DE90CC8BE23A0EFC4A32FFA5 /* MovesInboundTests.swift in Sources */,
    998 				F5F333B36654AEAF69A3C220 /* MovesJournalTests.swift in Sources */,
    999 				C1930083671621AC79CF95DD /* MovesUpdaterTests.swift in Sources */,
   1000 				C1D97A4CD02BC9C22C4208BB /* NYTAuthServiceTests.swift in Sources */,
   1001 				50C02D37A41D55CFA5D307E2 /* NYTPuzzleUpgraderTests.swift in Sources */,
   1002 				AA38A51862FC0AB8F7D34899 /* NYTToXDConverterTests.swift in Sources */,
   1003 				6850EAE474E589CE1EA2DF68 /* NicknameDirectoryTests.swift in Sources */,
   1004 				18D5BB584DBF92A2EC580AEA /* NotificationNavigationBrokerTests.swift in Sources */,
   1005 				E632562D090D8BE907F28C53 /* NotificationStateTests.swift in Sources */,
   1006 				903681985C17FCB5F97773A9 /* OpenPuzzleBannerTests.swift in Sources */,
   1007 				C89A15D812E372FE1C56039B /* PUZToXDConverterTests.swift in Sources */,
   1008 				DAD7EA11DA7330773A485473 /* PeerChangeLedgerTests.swift in Sources */,
   1009 				51E6F7F2FC52C2AA87B9DB45 /* PeerPresenceGraceTests.swift in Sources */,
   1010 				A458AF9CA8579AB51B695B08 /* PendingChangeReapTests.swift in Sources */,
   1011 				8225918652DCC822CA1C862F /* PendingEditFlagTests.swift in Sources */,
   1012 				014134FB81566B5D41168260 /* PerGameZoneTests.swift in Sources */,
   1013 				26DC22F88FA10C47BC06975E /* PersistenceRecoveryTests.swift in Sources */,
   1014 				95B4083F8BC2CA465077A662 /* PlayerColorTests.swift in Sources */,
   1015 				CEDF853009D0C367035F1F76 /* PlayerNamePublisherTests.swift in Sources */,
   1016 				7BD1A9F69953F9C3288969AF /* PlayerRecordPresenceTests.swift in Sources */,
   1017 				04062BCD473ED244159B1066 /* PlayerRosterTests.swift in Sources */,
   1018 				309457EC2DFEC476253D54D2 /* PlayerSelectionPublisherTests.swift in Sources */,
   1019 				00F2108848ADC7B4BF3AA0AE /* PlayerSessionNavigationTests.swift in Sources */,
   1020 				2A273C98FE3AC5E4C9BE1D88 /* PushPayloadCipherTests.swift in Sources */,
   1021 				A78FF09708EDED7ED50BB55B /* PushPayloadTests.swift in Sources */,
   1022 				F34EDFD45E2F5006807DDAC7 /* PuzzleCatalogTests.swift in Sources */,
   1023 				7FCD3F582B5ADC235E1F88A0 /* PuzzleNotificationTextTests.swift in Sources */,
   1024 				0A7AEB93A473AFCCD9217F49 /* PuzzleSessionTests.swift in Sources */,
   1025 				6E36ED34ACF047BABB3E2D69 /* RecentChangesTests.swift in Sources */,
   1026 				89CEDB8864F61E42AC04F9D6 /* RecordSerializerMovesTests.swift in Sources */,
   1027 				ECC1A5C3623F50B67185CFFB /* RecordSerializerTests.swift in Sources */,
   1028 				61F8B38587EE49D376B53544 /* ReplayCacheTests.swift in Sources */,
   1029 				C58F15CBEADA72032B54009D /* ReplayControlsTests.swift in Sources */,
   1030 				AE5D8C531F89F05B7201B3AC /* SessionMonitorTests.swift in Sources */,
   1031 				07A46496EE0B12FD526F36FB /* SessionPushPlannerTests.swift in Sources */,
   1032 				8AE376C0726116082B15241D /* ShareLinkRouteTests.swift in Sources */,
   1033 				41290C86E72D6567C43C31B7 /* ShareLinkShortenerTests.swift in Sources */,
   1034 				BE57957589423497338EBD37 /* ShareRoutingTests.swift in Sources */,
   1035 				025377AF80D45967CE910423 /* SyncMonitorTests.swift in Sources */,
   1036 				4819D7FBB407C9D76510EA2A /* TestHelpers.swift in Sources */,
   1037 				F15591B48E4155CB19C1F084 /* TimeLogTests.swift in Sources */,
   1038 				9AD5700398B1C1F29A3A75F6 /* TipStoreTests.swift in Sources */,
   1039 				31F2B6A61ED352C7D800149F /* XDAcceptTests.swift in Sources */,
   1040 				786813F3418C32EFBF296220 /* XDMarkupTests.swift in Sources */,
   1041 				9582AA583F5EA008FFC82B64 /* ZoneOrphaningTests.swift in Sources */,
   1042 			);
   1043 			runOnlyForDeploymentPostprocessing = 0;
   1044 		};
   1045 		C17B62906BBF281D006D8DC2 /* Sources */ = {
   1046 			isa = PBXSourcesBuildPhase;
   1047 			buildActionMask = 2147483647;
   1048 			files = (
   1049 				924B29C1EEB29F849A6824C3 /* AboutView.swift in Sources */,
   1050 				EA0AA522F6C383034C4572F4 /* AccountPushCoordinator.swift in Sources */,
   1051 				A87E5E615559B6461B1C3F94 /* AnnouncementBanner.swift in Sources */,
   1052 				5EFCD28B3B682DCCF38068D6 /* AnnouncementCenter.swift in Sources */,
   1053 				78802AFDF6273231781CC0DC /* AppServices.swift in Sources */,
   1054 				A65F99414F8CF6704567BB07 /* Archive.swift in Sources */,
   1055 				197DDF45C36B9570BB9AE4B5 /* AuthorIdentity.swift in Sources */,
   1056 				EB6E99226D5EE27668787008 /* BadgeCoordinator.swift in Sources */,
   1057 				4D9E2C35893E68E47F790994 /* BundledBrowseView.swift in Sources */,
   1058 				F627D68B521FEA85EB80A850 /* CalendarDayCell.swift in Sources */,
   1059 				6BE7E91158F4DF1F71247C6D /* CellMark.swift in Sources */,
   1060 				A22113A51213068FBF708A56 /* CellView.swift in Sources */,
   1061 				5FB26F40F5DB52111E3D1BDC /* CheckResult.swift in Sources */,
   1062 				E15A40AA623B60279E8DDF43 /* CloudDiagnostics.swift in Sources */,
   1063 				1016604FBD4D63A0B9AAE503 /* CloudQuery.swift in Sources */,
   1064 				CC250D6BA9B41CB722D8A62E /* CloudService.swift in Sources */,
   1065 				E16A8FE849A8E8BCC0F32280 /* CloudZones.swift in Sources */,
   1066 				BAB41DBF7D099B1EE46B4ACB /* ClueBar.swift in Sources */,
   1067 				036EC1EDDEFD17DCDD9B5F1A /* ClueList.swift in Sources */,
   1068 				2571BA6482B3E896A80FF393 /* CompactSlider.swift in Sources */,
   1069 				609364CB79E0C7517298B404 /* ContentKeyDirectory.swift in Sources */,
   1070 				DE9E4FAB098731A650F2D306 /* CrossmateApp.swift in Sources */,
   1071 				C30C0C4E54E4209A22843872 /* CrossmateModel.xcdatamodeld in Sources */,
   1072 				C472EF02D8C7B0AC1D2284B8 /* CustomButtons.swift in Sources */,
   1073 				CCF3867C32C3F36E4F69A59E /* DebuggingMonitors.swift in Sources */,
   1074 				0F2992C16A3A658DEA0F707E /* DiagnosticsView.swift in Sources */,
   1075 				978F91DBAE94BC5DA1D94705 /* DriveMonitor.swift in Sources */,
   1076 				CABF8BFAA30B9F26C482FAB9 /* EngagementCoordinator.swift in Sources */,
   1077 				267ED5B329F05A30430B73A0 /* EngagementHost.swift in Sources */,
   1078 				A7FA870D794CA00F7F3F05D2 /* EngagementHostEnvironment.swift in Sources */,
   1079 				D240BF6498A9148855DB7734 /* EngagementLifecycle.swift in Sources */,
   1080 				06AE6DF7AA3274480C591E47 /* EngagementStore.swift in Sources */,
   1081 				BD317ECC09C9099AC29B8C5D /* FriendAvatarView.swift in Sources */,
   1082 				C8ACF431021E7BEE61A99153 /* FriendController.swift in Sources */,
   1083 				00A25F5D8DFF62EFA0C4D1D7 /* FriendEntity+DisplayName.swift in Sources */,
   1084 				884BC090D4E2D416AA52D6FD /* FriendPickerView.swift in Sources */,
   1085 				2AF2550B08CE79F8615B3076 /* FriendZone.swift in Sources */,
   1086 				B00743DAF8F46F14CE13E909 /* FriendsView.swift in Sources */,
   1087 				98F8FBF324ED00D53FEBB1DB /* Game.swift in Sources */,
   1088 				5992AD4A06D7C6440825E9C6 /* GameArchiver.swift in Sources */,
   1089 				D5022BFB2F8F2E5904EDF5C8 /* GameCardView.swift in Sources */,
   1090 				128915DB37018EE4CC16C856 /* GameCursorStore.swift in Sources */,
   1091 				16D7328AE0BB1F7ED46235C8 /* GameEntity+ContentKey.swift in Sources */,
   1092 				0063A5FC9F39E37A67F137FF /* GameListView.swift in Sources */,
   1093 				3A5483EF2893AE325DF27EE8 /* GameMutator.swift in Sources */,
   1094 				9FFD01CF6767220EEA20C0E4 /* GamePushCredentials.swift in Sources */,
   1095 				FC480FE2930EAE406F5BBBDA /* GameRowView.swift in Sources */,
   1096 				44FF4A5334A4086DEA7D8A7B /* GameShareItem.swift in Sources */,
   1097 				D58980B92C99122C368D4216 /* GameStore.swift in Sources */,
   1098 				1A1A8A9AB36D02E2A5A9ED28 /* GameViewedStore.swift in Sources */,
   1099 				4B8CA45845618D75A3313816 /* GridSilhouette.swift in Sources */,
   1100 				ED6C21CD9F5AB286B69A02E4 /* GridStateMerger.swift in Sources */,
   1101 				1AAFF86B40CBBFF1EC9ADF9F /* GridThumbnailView.swift in Sources */,
   1102 				93DB3DD9A8EE994B92E7C084 /* GridView.swift in Sources */,
   1103 				01D1B4C7303F1CA52438FF86 /* HardwareKeyboardInputView.swift in Sources */,
   1104 				4A89595E3F6AB50E1D9E6BA8 /* ImportService.swift in Sources */,
   1105 				F8D37DBE75D7B3F039A8FAC8 /* ImportedBrowseView.swift in Sources */,
   1106 				1A19D13D9B820E276C60819E /* InputMonitor.swift in Sources */,
   1107 				59230713D85AE6895852B06A /* InviteCoordinator.swift in Sources */,
   1108 				7D9337A19747C79070AB3D59 /* InviteEntity+DisplayName.swift in Sources */,
   1109 				13C0F34520828020AD825D07 /* JoiningPuzzleView.swift in Sources */,
   1110 				9502840161DB88BB6BB409D5 /* Journal.swift in Sources */,
   1111 				B5F78A55C9BCCD24E44D865F /* JournalReplay.swift in Sources */,
   1112 				689DAEC70934027E76E8116E /* KeyboardView.swift in Sources */,
   1113 				38C913D00ED762BD9E355A2D /* KeychainHelper.swift in Sources */,
   1114 				CF1DC343A5D3110EDFA703AB /* LastUpdatedView.swift in Sources */,
   1115 				8D8A9F70731C98DD00BE1DA5 /* Layouts.swift in Sources */,
   1116 				AB6D98C7A78D91D7BEFB4A4C /* MarketingPuzzleScreenshotView.swift in Sources */,
   1117 				91703E54DB4679C1911BF994 /* Moves.swift in Sources */,
   1118 				4D90B39AD2F79959FB8089EE /* MovesUpdater.swift in Sources */,
   1119 				1F4E5473F78A5CEDBA9719CE /* NYTAuthService.swift in Sources */,
   1120 				C843CADAA263CED503528A4E /* NYTBrowseView.swift in Sources */,
   1121 				6D2AF361587E43D807BA212F /* NYTLoginView.swift in Sources */,
   1122 				0241DC498C645FE1BDA00FB0 /* NYTPuzzleFetcher.swift in Sources */,
   1123 				85B9BAC5ED404FE4496250CB /* NYTPuzzleUpgrader.swift in Sources */,
   1124 				B762200F54C52E8377A80D15 /* NYTToXDConverter.swift in Sources */,
   1125 				5E89D1F8FDFE56395997281A /* NewGameSheet.swift in Sources */,
   1126 				36E2AAF1EE1314E13477EE85 /* NicknameDirectory.swift in Sources */,
   1127 				6AE88D9E1918508DBF2A91E1 /* NotificationState.swift in Sources */,
   1128 				CF56BBB90855367CB85FEB43 /* PUZToXDConverter.swift in Sources */,
   1129 				E6A13F8736ABF41F6346E301 /* ParticipantSummaries.swift in Sources */,
   1130 				4E14BB5D6F96D178373ED55A /* PeerChangeLedger.swift in Sources */,
   1131 				77556FD9473A3F10FADF5E4E /* PersistenceController.swift in Sources */,
   1132 				47584CBEF819C2F507D06DFF /* PlayerColor.swift in Sources */,
   1133 				3C54AE4AA04342CCF5705B20 /* PlayerNamePublisher.swift in Sources */,
   1134 				F8DDA34AC1A6B6499C5D222E /* PlayerPreferences.swift in Sources */,
   1135 				0C39CA21BE50E49F9F06C5F2 /* PlayerRoster.swift in Sources */,
   1136 				17A754692F05B97DBDD645F2 /* PlayerSelection.swift in Sources */,
   1137 				B6AB531F4E0C4031B627C539 /* PlayerSelectionPublisher.swift in Sources */,
   1138 				8F5CB2F94E083D06D7E04280 /* PlayerSession.swift in Sources */,
   1139 				E354A588DBA74627A9CD5591 /* Presence.swift in Sources */,
   1140 				A133A4B4A0C95AF8708BD7E6 /* PushClient.swift in Sources */,
   1141 				43E311FBD68B7D35A4D29743 /* PushPayload.swift in Sources */,
   1142 				8FEE38B2B540F0E91560747F /* PushPayloadCipher.swift in Sources */,
   1143 				F2F7CB23DA62BF714632B097 /* PushRequestAuthenticator.swift in Sources */,
   1144 				503229FF89FF7C29CEF4C16D /* Puzzle.swift in Sources */,
   1145 				350722635E9A17324148CACC /* PuzzleCatalog.swift in Sources */,
   1146 				ADBEAD1C0139BCF864CA8A1D /* PuzzleCommands.swift in Sources */,
   1147 				D2AC1D9BD7E387B06B9B8A0E /* PuzzleHeader.swift in Sources */,
   1148 				082B9BAADE3AFA54EFE30E19 /* PuzzleModifiers.swift in Sources */,
   1149 				24F7ED458A1C09F8CF309B35 /* PuzzleNotificationText+GameEntity.swift in Sources */,
   1150 				E81F92AAB2968997C3D68809 /* PuzzleNotificationText.swift in Sources */,
   1151 				2DD78CA0CD587AA4E5C4B178 /* PuzzleScoreboard.swift in Sources */,
   1152 				88A34C8857B2B3D45A6FBCB2 /* PuzzleSession.swift in Sources */,
   1153 				E91FB8101E1927CA567DE825 /* PuzzleSource.swift in Sources */,
   1154 				9C52C48DB4996D5C83DEC144 /* PuzzleView.swift in Sources */,
   1155 				9AD8936D94FD676B23DFBB77 /* RecentChanges.swift in Sources */,
   1156 				D94FF5DFB9412D2DC24F6574 /* RecordApplier.swift in Sources */,
   1157 				D13ECFAE05DB508577D2FF66 /* RecordBuilder.swift in Sources */,
   1158 				35777D908A7D062730A18EF9 /* RecordEditorView.swift in Sources */,
   1159 				CF0CA17ABE211DAE4DD35AFD /* RecordSerializer.swift in Sources */,
   1160 				E1FBC33E3348547D4DF946C4 /* ReplayControls.swift in Sources */,
   1161 				C9864C9940C9DAAD0A788094 /* ReplayLoader.swift in Sources */,
   1162 				15768439C1783A1780FBB824 /* SessionCoordinator.swift in Sources */,
   1163 				5ECF5B80D08E5E999A540782 /* SessionMonitor.swift in Sources */,
   1164 				B48DE7079BE2F31D2367C5F7 /* SessionPushPlanner.swift in Sources */,
   1165 				4F1A93404828EDBDBBF86716 /* SettingsView.swift in Sources */,
   1166 				BCB9A4D5E06EE5006186465D /* ShareController.swift in Sources */,
   1167 				D4EDC0D426688B295DA77C08 /* ShareLinkRoute.swift in Sources */,
   1168 				779D1955F350B507A47B1E5B /* ShareLinkShortener.swift in Sources */,
   1169 				AF4F1AE2A1F94E92C785C524 /* Square.swift in Sources */,
   1170 				DDC7994B951A3A7B836B36F6 /* SuccessPanel.swift in Sources */,
   1171 				82918A74836E5076CBFA1592 /* SyncEngine.swift in Sources */,
   1172 				F46733AB3C72749A4A992667 /* SyncState+Helpers.swift in Sources */,
   1173 				B0170C8927EDD2E43F849204 /* TimeLog.swift in Sources */,
   1174 				35D97436772257DAD3936ECB /* TipStore.swift in Sources */,
   1175 				3C54B672A9FCA98C0A304470 /* TipsArchive.swift in Sources */,
   1176 				7FFEACFC672925A0968ACC1C /* XD.swift in Sources */,
   1177 				9CB8808193A4A106D721D767 /* XDFileType.swift in Sources */,
   1178 				14749A042380925B7CA902F2 /* XDMarkup.swift in Sources */,
   1179 			);
   1180 			runOnlyForDeploymentPostprocessing = 0;
   1181 		};
   1182 /* End PBXSourcesBuildPhase section */
   1183 
   1184 /* Begin PBXTargetDependency section */
   1185 		0638C125467274AA03088E07 /* PBXTargetDependency */ = {
   1186 			isa = PBXTargetDependency;
   1187 			target = 350366A68B75DC4BDA91F8E5 /* NotificationService */;
   1188 			targetProxy = 0751E0359C340223ADBA2B05 /* PBXContainerItemProxy */;
   1189 		};
   1190 		42035D5EEE61A5D459E1D46D /* PBXTargetDependency */ = {
   1191 			isa = PBXTargetDependency;
   1192 			target = 7708D1C8A0145D43BD15DEB7 /* Crossmate */;
   1193 			targetProxy = F0122CF3E216720C4437CE6A /* PBXContainerItemProxy */;
   1194 		};
   1195 /* End PBXTargetDependency section */
   1196 
   1197 /* Begin XCBuildConfiguration section */
   1198 		209C1E6D178C7EF962FC85A5 /* Release */ = {
   1199 			isa = XCBuildConfiguration;
   1200 			baseConfigurationReference = 0BDC16DA7F762F4C5F4BED14 /* Config.xcconfig */;
   1201 			buildSettings = {
   1202 				ALWAYS_SEARCH_USER_PATHS = NO;
   1203 				ASSETCATALOG_COMPILER_GENERATE_ASSET_SYMBOL_EXTENSIONS = YES;
   1204 				ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
   1205 				CLANG_ANALYZER_NONNULL = YES;
   1206 				CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
   1207 				CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
   1208 				CLANG_CXX_LIBRARY = "libc++";
   1209 				CLANG_ENABLE_MODULES = YES;
   1210 				CLANG_ENABLE_OBJC_ARC = YES;
   1211 				CLANG_ENABLE_OBJC_WEAK = YES;
   1212 				CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
   1213 				CLANG_WARN_BOOL_CONVERSION = YES;
   1214 				CLANG_WARN_COMMA = YES;
   1215 				CLANG_WARN_CONSTANT_CONVERSION = YES;
   1216 				CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
   1217 				CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
   1218 				CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
   1219 				CLANG_WARN_EMPTY_BODY = YES;
   1220 				CLANG_WARN_ENUM_CONVERSION = YES;
   1221 				CLANG_WARN_INFINITE_RECURSION = YES;
   1222 				CLANG_WARN_INT_CONVERSION = YES;
   1223 				CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
   1224 				CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
   1225 				CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
   1226 				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
   1227 				CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
   1228 				CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
   1229 				CLANG_WARN_STRICT_PROTOTYPES = YES;
   1230 				CLANG_WARN_SUSPICIOUS_MOVE = YES;
   1231 				CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
   1232 				CLANG_WARN_UNREACHABLE_CODE = YES;
   1233 				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
   1234 				COPY_PHASE_STRIP = NO;
   1235 				DEAD_CODE_STRIPPING = YES;
   1236 				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
   1237 				DEVELOPMENT_TEAM = 7TD7PZBNXP;
   1238 				ENABLE_NS_ASSERTIONS = NO;
   1239 				ENABLE_STRICT_OBJC_MSGSEND = YES;
   1240 				ENABLE_USER_SCRIPT_SANDBOXING = YES;
   1241 				GCC_C_LANGUAGE_STANDARD = gnu11;
   1242 				GCC_NO_COMMON_BLOCKS = YES;
   1243 				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
   1244 				GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
   1245 				GCC_WARN_UNDECLARED_SELECTOR = YES;
   1246 				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
   1247 				GCC_WARN_UNUSED_FUNCTION = YES;
   1248 				GCC_WARN_UNUSED_VARIABLE = YES;
   1249 				IPHONEOS_DEPLOYMENT_TARGET = 17.5;
   1250 				MTL_ENABLE_DEBUG_INFO = NO;
   1251 				MTL_FAST_MATH = YES;
   1252 				PRODUCT_NAME = "$(TARGET_NAME)";
   1253 				SDKROOT = iphoneos;
   1254 				STRING_CATALOG_GENERATE_SYMBOLS = YES;
   1255 				SWIFT_COMPILATION_MODE = wholemodule;
   1256 				SWIFT_EMIT_LOC_STRINGS = YES;
   1257 				SWIFT_OPTIMIZATION_LEVEL = "-O";
   1258 				SWIFT_VERSION = 6;
   1259 			};
   1260 			name = Release;
   1261 		};
   1262 		42CA2E441989D32BE123F48A /* Debug */ = {
   1263 			isa = XCBuildConfiguration;
   1264 			buildSettings = {
   1265 				BUNDLE_LOADER = "$(TEST_HOST)";
   1266 				CODE_SIGN_STYLE = Automatic;
   1267 				GENERATE_INFOPLIST_FILE = YES;
   1268 				LD_RUNPATH_SEARCH_PATHS = (
   1269 					"$(inherited)",
   1270 					"@executable_path/Frameworks",
   1271 					"@loader_path/Frameworks",
   1272 				);
   1273 				PRODUCT_BUNDLE_IDENTIFIER = net.inqk.crossmate.unittests;
   1274 				SDKROOT = iphoneos;
   1275 				TARGETED_DEVICE_FAMILY = "1,2";
   1276 				TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Crossmate.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Crossmate";
   1277 			};
   1278 			name = Debug;
   1279 		};
   1280 		642190659D822637293D1645 /* Release */ = {
   1281 			isa = XCBuildConfiguration;
   1282 			buildSettings = {
   1283 				BUNDLE_LOADER = "$(TEST_HOST)";
   1284 				CODE_SIGN_STYLE = Automatic;
   1285 				GENERATE_INFOPLIST_FILE = YES;
   1286 				LD_RUNPATH_SEARCH_PATHS = (
   1287 					"$(inherited)",
   1288 					"@executable_path/Frameworks",
   1289 					"@loader_path/Frameworks",
   1290 				);
   1291 				PRODUCT_BUNDLE_IDENTIFIER = net.inqk.crossmate.unittests;
   1292 				SDKROOT = iphoneos;
   1293 				TARGETED_DEVICE_FAMILY = "1,2";
   1294 				TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Crossmate.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Crossmate";
   1295 			};
   1296 			name = Release;
   1297 		};
   1298 		68A4416DD8D2ADB28F35E46C /* Release */ = {
   1299 			isa = XCBuildConfiguration;
   1300 			buildSettings = {
   1301 				CODE_SIGN_ENTITLEMENTS = NotificationService/NotificationService.entitlements;
   1302 				CODE_SIGN_STYLE = Automatic;
   1303 				INFOPLIST_FILE = NotificationService/Info.plist;
   1304 				LD_RUNPATH_SEARCH_PATHS = (
   1305 					"$(inherited)",
   1306 					"@executable_path/Frameworks",
   1307 					"@executable_path/../../Frameworks",
   1308 				);
   1309 				PRODUCT_BUNDLE_IDENTIFIER = net.inqk.crossmate.notificationservice;
   1310 				SDKROOT = iphoneos;
   1311 				TARGETED_DEVICE_FAMILY = "1,2";
   1312 			};
   1313 			name = Release;
   1314 		};
   1315 		8BC97916898B0BF1E6951C48 /* Release */ = {
   1316 			isa = XCBuildConfiguration;
   1317 			buildSettings = {
   1318 				APP_ATTEST_ENVIRONMENT = production;
   1319 				APS_ENVIRONMENT = production;
   1320 				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
   1321 				CODE_SIGN_ENTITLEMENTS = Crossmate/Crossmate.entitlements;
   1322 				CODE_SIGN_IDENTITY = "iPhone Developer";
   1323 				CODE_SIGN_STYLE = Automatic;
   1324 				CROSSMATE_ENGAGEMENT_SOCKET_URL = "$(inherited)";
   1325 				CROSSMATE_PUSH_BASE_URL = "$(inherited)";
   1326 				CROSSMATE_SHARE_LINK_BASE_URL = "$(inherited)";
   1327 				CROSSMATE_SHARE_LINK_HOST = "$(inherited)";
   1328 				INFOPLIST_FILE = Crossmate/Info.plist;
   1329 				LD_RUNPATH_SEARCH_PATHS = (
   1330 					"$(inherited)",
   1331 					"@executable_path/Frameworks",
   1332 				);
   1333 				OTHER_LDFLAGS = "$(inherited) -Wl,-no_deduplicate";
   1334 				PRODUCT_BUNDLE_IDENTIFIER = net.inqk.crossmate;
   1335 				SDKROOT = iphoneos;
   1336 				TARGETED_DEVICE_FAMILY = "1,2";
   1337 			};
   1338 			name = Release;
   1339 		};
   1340 		AF49D30A1B81631106E05429 /* Debug */ = {
   1341 			isa = XCBuildConfiguration;
   1342 			buildSettings = {
   1343 				APP_ATTEST_ENVIRONMENT = production;
   1344 				APS_ENVIRONMENT = development;
   1345 				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
   1346 				CODE_SIGN_ENTITLEMENTS = Crossmate/Crossmate.entitlements;
   1347 				CODE_SIGN_IDENTITY = "iPhone Developer";
   1348 				CODE_SIGN_STYLE = Automatic;
   1349 				CROSSMATE_ENGAGEMENT_SOCKET_URL = "$(inherited)";
   1350 				CROSSMATE_PUSH_BASE_URL = "$(inherited)";
   1351 				CROSSMATE_SHARE_LINK_BASE_URL = "$(inherited)";
   1352 				CROSSMATE_SHARE_LINK_HOST = "$(inherited)";
   1353 				INFOPLIST_FILE = Crossmate/Info.plist;
   1354 				LD_RUNPATH_SEARCH_PATHS = (
   1355 					"$(inherited)",
   1356 					"@executable_path/Frameworks",
   1357 				);
   1358 				PRODUCT_BUNDLE_IDENTIFIER = net.inqk.crossmate;
   1359 				SDKROOT = iphoneos;
   1360 				TARGETED_DEVICE_FAMILY = "1,2";
   1361 			};
   1362 			name = Debug;
   1363 		};
   1364 		C32934743A6313F80D8A4C76 /* Debug */ = {
   1365 			isa = XCBuildConfiguration;
   1366 			buildSettings = {
   1367 				CODE_SIGN_ENTITLEMENTS = NotificationService/NotificationService.entitlements;
   1368 				CODE_SIGN_STYLE = Automatic;
   1369 				INFOPLIST_FILE = NotificationService/Info.plist;
   1370 				LD_RUNPATH_SEARCH_PATHS = (
   1371 					"$(inherited)",
   1372 					"@executable_path/Frameworks",
   1373 					"@executable_path/../../Frameworks",
   1374 				);
   1375 				PRODUCT_BUNDLE_IDENTIFIER = net.inqk.crossmate.notificationservice;
   1376 				SDKROOT = iphoneos;
   1377 				TARGETED_DEVICE_FAMILY = "1,2";
   1378 			};
   1379 			name = Debug;
   1380 		};
   1381 		E7B092DD549FA4FFED8BC20E /* Debug */ = {
   1382 			isa = XCBuildConfiguration;
   1383 			baseConfigurationReference = 0BDC16DA7F762F4C5F4BED14 /* Config.xcconfig */;
   1384 			buildSettings = {
   1385 				ALWAYS_SEARCH_USER_PATHS = NO;
   1386 				ASSETCATALOG_COMPILER_GENERATE_ASSET_SYMBOL_EXTENSIONS = YES;
   1387 				ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
   1388 				CLANG_ANALYZER_NONNULL = YES;
   1389 				CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
   1390 				CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
   1391 				CLANG_CXX_LIBRARY = "libc++";
   1392 				CLANG_ENABLE_MODULES = YES;
   1393 				CLANG_ENABLE_OBJC_ARC = YES;
   1394 				CLANG_ENABLE_OBJC_WEAK = YES;
   1395 				CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
   1396 				CLANG_WARN_BOOL_CONVERSION = YES;
   1397 				CLANG_WARN_COMMA = YES;
   1398 				CLANG_WARN_CONSTANT_CONVERSION = YES;
   1399 				CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
   1400 				CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
   1401 				CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
   1402 				CLANG_WARN_EMPTY_BODY = YES;
   1403 				CLANG_WARN_ENUM_CONVERSION = YES;
   1404 				CLANG_WARN_INFINITE_RECURSION = YES;
   1405 				CLANG_WARN_INT_CONVERSION = YES;
   1406 				CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
   1407 				CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
   1408 				CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
   1409 				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
   1410 				CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
   1411 				CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
   1412 				CLANG_WARN_STRICT_PROTOTYPES = YES;
   1413 				CLANG_WARN_SUSPICIOUS_MOVE = YES;
   1414 				CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
   1415 				CLANG_WARN_UNREACHABLE_CODE = YES;
   1416 				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
   1417 				COPY_PHASE_STRIP = NO;
   1418 				DEAD_CODE_STRIPPING = YES;
   1419 				DEBUG_INFORMATION_FORMAT = dwarf;
   1420 				DEVELOPMENT_TEAM = 7TD7PZBNXP;
   1421 				ENABLE_STRICT_OBJC_MSGSEND = YES;
   1422 				ENABLE_TESTABILITY = YES;
   1423 				ENABLE_USER_SCRIPT_SANDBOXING = YES;
   1424 				GCC_C_LANGUAGE_STANDARD = gnu11;
   1425 				GCC_DYNAMIC_NO_PIC = NO;
   1426 				GCC_NO_COMMON_BLOCKS = YES;
   1427 				GCC_OPTIMIZATION_LEVEL = 0;
   1428 				GCC_PREPROCESSOR_DEFINITIONS = (
   1429 					"$(inherited)",
   1430 					"DEBUG=1",
   1431 				);
   1432 				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
   1433 				GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
   1434 				GCC_WARN_UNDECLARED_SELECTOR = YES;
   1435 				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
   1436 				GCC_WARN_UNUSED_FUNCTION = YES;
   1437 				GCC_WARN_UNUSED_VARIABLE = YES;
   1438 				IPHONEOS_DEPLOYMENT_TARGET = 17.5;
   1439 				MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
   1440 				MTL_FAST_MATH = YES;
   1441 				ONLY_ACTIVE_ARCH = YES;
   1442 				PRODUCT_NAME = "$(TARGET_NAME)";
   1443 				SDKROOT = iphoneos;
   1444 				STRING_CATALOG_GENERATE_SYMBOLS = YES;
   1445 				SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
   1446 				SWIFT_EMIT_LOC_STRINGS = YES;
   1447 				SWIFT_OPTIMIZATION_LEVEL = "-Onone";
   1448 				SWIFT_VERSION = 6;
   1449 			};
   1450 			name = Debug;
   1451 		};
   1452 /* End XCBuildConfiguration section */
   1453 
   1454 /* Begin XCConfigurationList section */
   1455 		0C7AF110B3697D116B91817A /* Build configuration list for PBXNativeTarget "Crossmate Unit Tests" */ = {
   1456 			isa = XCConfigurationList;
   1457 			buildConfigurations = (
   1458 				42CA2E441989D32BE123F48A /* Debug */,
   1459 				642190659D822637293D1645 /* Release */,
   1460 			);
   1461 			defaultConfigurationIsVisible = 0;
   1462 			defaultConfigurationName = Debug;
   1463 		};
   1464 		97D15A585690B87E7C17FF8A /* Build configuration list for PBXNativeTarget "NotificationService" */ = {
   1465 			isa = XCConfigurationList;
   1466 			buildConfigurations = (
   1467 				C32934743A6313F80D8A4C76 /* Debug */,
   1468 				68A4416DD8D2ADB28F35E46C /* Release */,
   1469 			);
   1470 			defaultConfigurationIsVisible = 0;
   1471 			defaultConfigurationName = Debug;
   1472 		};
   1473 		9A436EF03A8593C66A18A832 /* Build configuration list for PBXProject "Crossmate" */ = {
   1474 			isa = XCConfigurationList;
   1475 			buildConfigurations = (
   1476 				E7B092DD549FA4FFED8BC20E /* Debug */,
   1477 				209C1E6D178C7EF962FC85A5 /* Release */,
   1478 			);
   1479 			defaultConfigurationIsVisible = 0;
   1480 			defaultConfigurationName = Debug;
   1481 		};
   1482 		AB7D49875A042FD78EDD157A /* Build configuration list for PBXNativeTarget "Crossmate" */ = {
   1483 			isa = XCConfigurationList;
   1484 			buildConfigurations = (
   1485 				AF49D30A1B81631106E05429 /* Debug */,
   1486 				8BC97916898B0BF1E6951C48 /* Release */,
   1487 			);
   1488 			defaultConfigurationIsVisible = 0;
   1489 			defaultConfigurationName = Debug;
   1490 		};
   1491 /* End XCConfigurationList section */
   1492 
   1493 /* Begin XCVersionGroup section */
   1494 		F93AC31640C40FCC039570A3 /* CrossmateModel.xcdatamodeld */ = {
   1495 			isa = XCVersionGroup;
   1496 			children = (
   1497 				927186458ED03FD0C5660765 /* CrossmateModel.xcdatamodel */,
   1498 			);
   1499 			currentVersion = 927186458ED03FD0C5660765 /* CrossmateModel.xcdatamodel */;
   1500 			path = CrossmateModel.xcdatamodeld;
   1501 			sourceTree = "<group>";
   1502 			versionGroupType = wrapper.xcdatamodel;
   1503 		};
   1504 /* End XCVersionGroup section */
   1505 	};
   1506 	rootObject = 9167165F088B7698D1319D3C /* Project object */;
   1507 }